First commit
This commit is contained in:
commit
74f4fa040f
4 files changed
+280
No files matched your search
@@ -0,0 +1,3 @@
|
|||||||
|
bin/
|
||||||
|
obj/
|
||||||
|
Libs/
|
||||||
@@ -0,0 +1,249 @@
|
|||||||
|
using BepInEx;
|
||||||
|
using BepInEx.Unity.IL2CPP;
|
||||||
|
using HarmonyLib;
|
||||||
|
using UnityEngine;
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace AUModdedRegions
|
||||||
|
{
|
||||||
|
[BepInPlugin("com.aumoddedregions", "AUModdedRegions", "1.0.0")]
|
||||||
|
public class AUModdedRegionsPlugin : BasePlugin
|
||||||
|
{
|
||||||
|
// Contenu JSON par défaut injecté si besoin
|
||||||
|
private const string DEFAULT_REGION_JSON = @"{
|
||||||
|
""CurrentRegionIdx"": 0,
|
||||||
|
""Regions"": [
|
||||||
|
{
|
||||||
|
""$type"": ""StaticHttpRegionInfo, Assembly-CSharp"",
|
||||||
|
""Name"": ""Niko233(NA)"",
|
||||||
|
""PingServer"": ""https://au-us.niko233.top"",
|
||||||
|
""Servers"": [
|
||||||
|
{
|
||||||
|
""Name"": ""http-1"",
|
||||||
|
""Ip"": ""https://au-us.niko233.top"",
|
||||||
|
""Port"": 443,
|
||||||
|
""UseDtls"": false,
|
||||||
|
""Players"": 0,
|
||||||
|
""ConnectionFailures"": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
""TargetServer"": null,
|
||||||
|
""TranslateName"": 1003
|
||||||
|
},
|
||||||
|
{
|
||||||
|
""$type"": ""StaticHttpRegionInfo, Assembly-CSharp"",
|
||||||
|
""Name"": ""Niko233(EU)"",
|
||||||
|
""PingServer"": ""https://au-eu.niko233.top"",
|
||||||
|
""Servers"": [
|
||||||
|
{
|
||||||
|
""Name"": ""http-1"",
|
||||||
|
""Ip"": ""https://au-eu.niko233.top"",
|
||||||
|
""Port"": 443,
|
||||||
|
""UseDtls"": false,
|
||||||
|
""Players"": 0,
|
||||||
|
""ConnectionFailures"": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
""TargetServer"": null,
|
||||||
|
""TranslateName"": 1003
|
||||||
|
},
|
||||||
|
{
|
||||||
|
""$type"": ""StaticHttpRegionInfo, Assembly-CSharp"",
|
||||||
|
""Name"": ""Niko233(AS)"",
|
||||||
|
""PingServer"": ""https://au-as.niko233.top"",
|
||||||
|
""Servers"": [
|
||||||
|
{
|
||||||
|
""Name"": ""http-1"",
|
||||||
|
""Ip"": ""https://au-as.niko233.top"",
|
||||||
|
""Port"": 443,
|
||||||
|
""UseDtls"": false,
|
||||||
|
""Players"": 0,
|
||||||
|
""ConnectionFailures"": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
""TargetServer"": null,
|
||||||
|
""TranslateName"": 1003
|
||||||
|
},
|
||||||
|
{
|
||||||
|
""$type"": ""StaticHttpRegionInfo, Assembly-CSharp"",
|
||||||
|
""Name"": ""Niko233(CN1)"",
|
||||||
|
""PingServer"": ""https://au-cn.niko233.top"",
|
||||||
|
""Servers"": [
|
||||||
|
{
|
||||||
|
""Name"": ""http-1"",
|
||||||
|
""Ip"": ""https://au-cn.niko233.top"",
|
||||||
|
""Port"": 443,
|
||||||
|
""UseDtls"": false,
|
||||||
|
""Players"": 0,
|
||||||
|
""ConnectionFailures"": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
""TargetServer"": null,
|
||||||
|
""TranslateName"": 1003
|
||||||
|
},
|
||||||
|
{
|
||||||
|
""$type"": ""StaticHttpRegionInfo, Assembly-CSharp"",
|
||||||
|
""Name"": ""Modded EU (MEU)"",
|
||||||
|
""PingServer"": ""https://au-eu.duikbo.at"",
|
||||||
|
""Servers"": [
|
||||||
|
{
|
||||||
|
""Name"": ""Http-1"",
|
||||||
|
""Ip"": ""https://au-eu.duikbo.at"",
|
||||||
|
""Port"": 443,
|
||||||
|
""UseDtls"": false,
|
||||||
|
""Players"": 0,
|
||||||
|
""ConnectionFailures"": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
""TargetServer"": null,
|
||||||
|
""TranslateName"": 1003
|
||||||
|
},
|
||||||
|
{
|
||||||
|
""$type"": ""StaticHttpRegionInfo, Assembly-CSharp"",
|
||||||
|
""Name"": ""Modded NA (MNA)"",
|
||||||
|
""PingServer"": ""https://aumods.org"",
|
||||||
|
""Servers"": [
|
||||||
|
{
|
||||||
|
""Name"": ""Http-1"",
|
||||||
|
""Ip"": ""https://aumods.org"",
|
||||||
|
""Port"": 443,
|
||||||
|
""UseDtls"": false,
|
||||||
|
""Players"": 0,
|
||||||
|
""ConnectionFailures"": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
""TargetServer"": null,
|
||||||
|
""TranslateName"": 1003
|
||||||
|
},
|
||||||
|
{
|
||||||
|
""$type"": ""StaticHttpRegionInfo, Assembly-CSharp"",
|
||||||
|
""Name"": ""Modded Asia (MAS)"",
|
||||||
|
""PingServer"": ""https://au-as.duikbo.at"",
|
||||||
|
""Servers"": [
|
||||||
|
{
|
||||||
|
""Name"": ""Http-1"",
|
||||||
|
""Ip"": ""https://au-as.duikbo.at"",
|
||||||
|
""Port"": 443,
|
||||||
|
""UseDtls"": false,
|
||||||
|
""Players"": 0,
|
||||||
|
""ConnectionFailures"": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
""TargetServer"": null,
|
||||||
|
""TranslateName"": 1003
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}";
|
||||||
|
|
||||||
|
// Liste des sous-domaines / domaines officiels InnerSloth à filtrer
|
||||||
|
private static readonly string[] OfficialDomains = new string[]
|
||||||
|
{
|
||||||
|
"innersloth.com",
|
||||||
|
"among.us",
|
||||||
|
"matchmaker.among.us"
|
||||||
|
};
|
||||||
|
|
||||||
|
public override void Load()
|
||||||
|
{
|
||||||
|
ProcessRegionFile();
|
||||||
|
|
||||||
|
// Patch Harmony pour intercepter CleanAndMerge et bloquer les serveurs officiels
|
||||||
|
Harmony.CreateAndPatchAll(typeof(PatchCleanAndMerge));
|
||||||
|
Log.LogInfo("AUModdedRegions chargé avec succès !");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ProcessRegionFile()
|
||||||
|
{
|
||||||
|
string regionFilePath = Path.Combine(Application.persistentDataPath, "regionInfo.json");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// CAS 1 : Fichier inexistant ou vide
|
||||||
|
if (!File.Exists(regionFilePath) || new FileInfo(regionFilePath).Length == 0)
|
||||||
|
{
|
||||||
|
Log.LogInfo("[AUModdedRegions] regionInfo.json inexistant/vide. Génération du fichier custom...");
|
||||||
|
File.WriteAllText(regionFilePath, DEFAULT_REGION_JSON);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string content = File.ReadAllText(regionFilePath);
|
||||||
|
bool containsOfficial = CheckContainsOfficial(content);
|
||||||
|
bool containsCustom = CheckContainsCustom(content);
|
||||||
|
|
||||||
|
// CAS 2 : Contient seulement les serveurs officiels -> Remplacement
|
||||||
|
if (containsOfficial && !containsCustom)
|
||||||
|
{
|
||||||
|
Log.LogInfo("[AUModdedRegions] Uniquement des serveurs officiels détectés. Remplacement par le JSON custom...");
|
||||||
|
File.WriteAllText(regionFilePath, DEFAULT_REGION_JSON);
|
||||||
|
}
|
||||||
|
// CAS 3 : Contient officiels ET d'autres serveurs -> Suppression des officiels uniquement
|
||||||
|
else if (containsOfficial && containsCustom)
|
||||||
|
{
|
||||||
|
Log.LogInfo("[AUModdedRegions] Serveurs officiels et custom détectés. Nettoyage des serveurs officiels...");
|
||||||
|
string cleanedContent = RemoveOfficialRegions(content);
|
||||||
|
File.WriteAllText(regionFilePath, cleanedContent);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log.LogInfo("[AUModdedRegions] Fichier regionInfo.json déjà propre.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Log.LogError($"[AUModdedRegions] Erreur lors du traitement du fichier regionInfo.json : {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CheckContainsOfficial(string json)
|
||||||
|
{
|
||||||
|
foreach (var domain in OfficialDomains)
|
||||||
|
{
|
||||||
|
if (json.Contains(domain, StringComparison.OrdinalIgnoreCase))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CheckContainsCustom(string json)
|
||||||
|
{
|
||||||
|
return json.Contains("niko233.top", StringComparison.OrdinalIgnoreCase) ||
|
||||||
|
json.Contains("duikbo.at", StringComparison.OrdinalIgnoreCase) ||
|
||||||
|
json.Contains("aumods.org", StringComparison.OrdinalIgnoreCase);
|
||||||
|
}
|
||||||
|
|
||||||
|
private string RemoveOfficialRegions(string json)
|
||||||
|
{
|
||||||
|
string[] lines = json.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
foreach (var line in lines)
|
||||||
|
{
|
||||||
|
bool isOfficialLine = false;
|
||||||
|
foreach (var domain in OfficialDomains)
|
||||||
|
{
|
||||||
|
if (line.Contains(domain, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
isOfficialLine = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isOfficialLine)
|
||||||
|
{
|
||||||
|
sb.AppendLine(line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sb.ToString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bloque le CleanAndMerge natif au démarrage
|
||||||
|
[HarmonyPatch("ServerManager+JsonServerData", "CleanAndMerge")]
|
||||||
|
public static class PatchCleanAndMerge
|
||||||
|
{
|
||||||
|
[HarmonyPrefix]
|
||||||
|
public static bool Prefix() => false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
|
<AssemblyName>AUModdedRegions</AssemblyName>
|
||||||
|
<RootNamespace>AUModdedRegions</RootNamespace>
|
||||||
|
<Version>1.0.0</Version>
|
||||||
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
|
<LangVersion>latest</LangVersion>
|
||||||
|
|
||||||
|
<NoWarn>$(NoWarn);NU1603</NoWarn>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="BepInEx.Unity.IL2CPP" Version="6.0.0-*" PrivateAssets="all" />
|
||||||
|
<PackageReference Include="BepInEx.PluginInfoProps" Version="2.1.0" PrivateAssets="all" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="UnityEngine">
|
||||||
|
<HintPath>$(MSBuildProjectDirectory)\Libs\UnityEngine.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="UnityEngine.CoreModule">
|
||||||
|
<HintPath>$(MSBuildProjectDirectory)\Libs\UnityEngine.CoreModule.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
Reference in new issue
Block a user