First commit

This commit is contained in:
Nb1X committed 2026-07-27 18:13:54 +02:00
commit 74f4fa040f
4 files changed
+280

No files matched your search

+3
View File
@@ -0,0 +1,3 @@
bin/
obj/
Libs/
+249
View File
@@ -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;
}
}
+28
View File
@@ -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>
View File
Whitespace-only changes.