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