54 Commits

Author SHA1 Message Date
5f73135eaa version 4.8
new revive function
god mode
instant interaction
custom shortcut keys
2026-01-15 21:53:32 +11:00
62dc974fa7 add update_dependency script 2025-12-07 15:33:15 +11:00
b134834170 Version 4.7 - Radial Menu
Add a new button-"Radial Menu (Z)" instead of "Recall (B)"
2025-12-04 03:45:07 +11:00
17dc31dd10 Update README.md 2025-12-02 13:51:46 +11:00
084d39ff57 更新 DevourClient/DevourClient.csproj 2025-12-01 06:21:11 +00:00
33164f700a recall function & show coordinates 2025-11-30 16:52:41 +11:00
f901257218 4.6 collection esp 2025-11-30 02:01:07 +11:00
2769f7a0b2 删除 DevourClient/Localization/TranslationDict.cs 2025-11-28 16:23:09 +00:00
91cb5aee54 4.5 update
fix ESP bug & add Vietnamese translation & add farm items function
2025-11-29 03:00:17 +11:00
d80ea2b827 esp filter and customize lobby 2025-11-04 19:35:50 +11:00
92101631af add translation function 2025-11-02 22:39:21 +11:00
a76b3d27e7 fix: spoof level, achievements list, removed useless popups 2025-10-19 14:57:48 +02:00
ALittlePatate
f8ce7336f6 Merge pull request #85 from mana-feng/MelonLoader
fix crashed issue
2025-10-13 21:28:44 +02:00
e720da278b Update README.md 2025-10-13 16:45:48 +11:00
Hao Feng
e01dd26d6f update for "carnival" 2025-10-13 16:05:56 +11:00
manafeng
ccffaf352f Update README.md 2025-10-12 20:34:00 +11:00
manafeng
3c0d57e308 Update README.md 2025-07-27 19:24:22 +10:00
manafeng
a5aed348fd Update Settings.cs 2025-06-08 03:50:58 +10:00
manafeng
b450fa1cbf Update GUIHelper.cs 2025-06-08 03:50:02 +10:00
manafeng
7a2815681c Update README.md 2025-06-08 03:20:48 +10:00
manafeng
9f93c16dc3 Update README.md 2025-06-08 03:20:24 +10:00
manafeng
e52f29f702 Update README.md 2025-06-08 03:19:31 +10:00
manafeng
2ce4fea684 Update README.md 2025-06-08 03:06:42 +10:00
manafeng
83ffed3c86 Add files via upload 2025-06-08 03:05:49 +10:00
manafeng
d7597b055f Add files via upload 2025-06-08 03:05:16 +10:00
manafeng
360aa1061c Add files via upload 2025-06-08 03:04:48 +10:00
manafeng
aa0eb090ba Add files via upload 2025-06-08 03:02:55 +10:00
manafeng
64e6fd785d Delete ClientMain.cs 2025-06-08 03:02:35 +10:00
manafeng
cfb3235a97 Add files via upload 2025-06-08 03:01:34 +10:00
manafeng
84fc72ab59 Update ClientMain.cs 2025-06-08 02:58:12 +10:00
ALittlePatate
a9c2611427 fix: readme formatting 2024-09-21 19:23:12 +02:00
ALittlePatate
8280ed6362 add: updated english installation tutorial 2024-09-20 19:49:49 +02:00
ALittlePatate
b8ad6a1625 fix: MelonLoader required version 2024-09-20 19:29:47 +02:00
47538a7483 fix: typo 2024-09-20 18:20:53 +02:00
15d1a91806 add: infinite mirors in Manor 2024-09-20 18:11:06 +02:00
ALittlePatate
f32e3b0eb7 fix: discord handle 2024-09-20 16:10:54 +02:00
283eee124c add: features and fixes for the new map (Manor) 2024-09-20 15:57:53 +02:00
2308b63699 fix: project references 2024-09-19 23:39:52 +02:00
ALittlePatate
42ccb45e23 Merge pull request #41 from K4SPERSKY9655/MelonLoader
Update README.md
2024-05-11 15:54:30 +02:00
K4SPERSKY9655
26dfb5fa23 Update README.md
[+] Corrected text
2024-05-11 13:10:41 +02:00
K4SPERSKY9655
49a5b7f3ab Update README.md
[+] Improved the Installation tab
2024-05-11 13:06:54 +02:00
K4SPERSKY9655
b22b56393a Update README.md 2024-05-11 13:02:27 +02:00
K4SPERSKY9655
9a9cb7a6f5 Update README.md
[+] Installation Tutorials improved
2024-05-11 12:51:25 +02:00
55ff1074fb fix: build errors and warnings, updated achievements 2024-03-29 18:54:24 +01:00
ebfb23588e fixed build error 2023-11-04 10:37:05 +01:00
ce6ed66275 update achievements 2023-10-15 19:48:10 +02:00
fd79fb2b19 updated achievements list 2023-10-15 18:23:40 +02:00
Jadis0x
9ea683f29a Code cleanup and performance enhancement efforts 2023-08-20 17:02:31 +03:00
Jadis0x
788ffdac9f Adjusted height of the menu button 2023-08-19 21:10:19 +03:00
Jadis0x
e1c529f0ed menu style has been removed 2023-08-19 16:42:16 +03:00
Jadis0x
9d12c57588 Added button for ShootPlayer function 2023-08-09 22:28:24 +03:00
Jadis0x
620828d4a0 Added ShootPlayer Function 2023-08-09 22:26:01 +03:00
ALittlePatate
0e461120eb changed Msg to Warning for the credits 2023-04-25 17:56:01 +02:00
17569ee1ed add: note about license and credits on the start of the mod 2023-04-25 14:12:24 +02:00
47 changed files with 9969 additions and 2414 deletions

199
DevourClient/ClientMain.cs Normal file
View File

@@ -0,0 +1,199 @@
using System;
using DevourClient.Features;
using DevourClient.Helpers;
using DevourClient.UI;
using Il2CppPhoton.Bolt;
using MelonLoader;
using UnityEngine;
namespace DevourClient
{
public class ClientMain : MonoBehaviour, IDisposable
{
public ClientMain(IntPtr ptr)
: base(ptr)
{
}
internal enum CurrentTab : int
{
Visuals = 0,
Entities = 1,
Map = 2,
ESP = 3,
Items = 4,
Misc = 5,
Players = 6,
Network = 7
}
internal static Rect windowRect = new Rect(Settings.Settings.x + 10, Settings.Settings.y + 10, 800, 750);
internal static CurrentTab current_tab = CurrentTab.Visuals;
internal static bool flashlight_toggle = false;
internal static bool flashlight_colorpick = false;
internal static bool player_esp_colorpick = false;
internal static bool azazel_esp_colorpick = false;
internal static bool spoofLevel = false;
internal static float spoofLevelValue = 0;
internal static bool fly = false;
internal static float fly_speed = 5;
internal static bool fastMove = false;
internal static float _PlayerSpeedMultiplier = 1;
public static bool _IsAutoRespawn = false;
public static bool unlimitedUV = false;
public static bool exp_modifier = false;
public static float exp = 1000f;
public static bool _walkInLobby = false;
public static bool infinite_mirrors = false;
internal static bool radialMenuEnabled = true;
internal static bool player_esp = false;
internal static bool player_skel_esp = false;
internal static bool player_snapline = false;
internal static bool azazel_esp = false;
internal static bool azazel_skel_esp = false;
internal static bool azazel_snapline = false;
internal static bool item_esp => ESP.ItemESPConfig.ItemESP;
internal static bool goat_rat_esp => ESP.ItemESPConfig.GoatRatESP;
internal static bool demon_esp => ESP.ItemESPConfig.DemonESP;
internal static bool fullbright = false;
internal static bool need_fly_reset = false;
internal static bool crosshair = false;
internal static bool in_game_cache = false;
internal static bool showCoordinates = false;
internal static bool recallEnabled = false;
internal static bool instantInteraction = false;
public static bool InstantInteractionEnabled => instantInteraction;
public static bool godMode = false;
public static int godModeOriginalLayer = -1;
internal const int ITEM_FARM_REPEAT_COUNT = 5;
internal const float ITEM_FARM_DELAY = 0.15f;
internal static bool autoItemFarm = false;
internal static bool should_show_start_message = true;
internal static Texture2D? crosshairTexture = default!;
internal static string lastESPScene = string.Empty;
internal static int selectedRegion = 0;
internal static int lobbySize = 4;
internal static bool isPrivateLobby = false;
internal static int frameCount = 0;
internal static int lastMemoryLog = 0;
internal const int GC_GEN0_INTERVAL = 300;
internal const int GC_FULL_INTERVAL = 3600;
internal const int MEMORY_LOG_INTERVAL = 1800;
public void Start()
{
MelonLogger.Msg("For the Queen !");
MelonLogger.Warning("Made with <3 by patate and Jadis.");
MelonLogger.Warning("Github : https://github.com/ALittlePatate/DevourClient");
MelonLogger.Warning("Note : if you payed for this you most likely got scammed.");
long startMemory = GC.GetTotalMemory(false);
MelonLogger.Msg($"[Memory Monitor] Startup managed memory: {startMemory / 1024 / 1024} MB");
crosshairTexture = GUIHelper.GetCircularTexture(5, 5);
Entities.StartAllCoroutines();
Entities.RegisterCoroutine(MelonCoroutines.Start(Entities.GetLocalPlayer()));
Entities.RegisterCoroutine(MelonCoroutines.Start(Entities.GetGoatsAndRats()));
Entities.RegisterCoroutine(MelonCoroutines.Start(Entities.GetSurvivalInteractables()));
Entities.RegisterCoroutine(MelonCoroutines.Start(Entities.GetKeys()));
Entities.RegisterCoroutine(MelonCoroutines.Start(Entities.GetDemons()));
Entities.RegisterCoroutine(MelonCoroutines.Start(Entities.GetSpiders()));
Entities.RegisterCoroutine(MelonCoroutines.Start(Entities.GetGhosts()));
Entities.RegisterCoroutine(MelonCoroutines.Start(Entities.GetBoars()));
Entities.RegisterCoroutine(MelonCoroutines.Start(Entities.GetCorpses()));
Entities.RegisterCoroutine(MelonCoroutines.Start(Entities.GetCrows()));
Entities.RegisterCoroutine(MelonCoroutines.Start(Entities.GetLumps()));
Entities.RegisterCoroutine(MelonCoroutines.Start(Entities.GetDirtyHeads()));
Entities.RegisterCoroutine(MelonCoroutines.Start(Entities.GetAzazels()));
Entities.RegisterCoroutine(MelonCoroutines.Start(Entities.GetAllPlayers()));
Entities.RegisterCoroutine(MelonCoroutines.Start(Entities.GetMonkeys()));
Entities.RegisterCoroutine(MelonCoroutines.Start(Entities.GetDolls()));
Entities.RegisterCoroutine(MelonCoroutines.Start(Entities.GetCollectables()));
}
public void Update()
{
ClientRuntime.Tick();
}
public void OnGUI()
{
ClientMenu.Draw();
}
internal static void HandleItemCarry(string carryObjectName)
{
ItemHandling.HandleItemCarry(carryObjectName);
}
private void OnDestroy()
{
try
{
base.StopAllCoroutines();
Dispose();
}
catch (Exception ex)
{
MelonLogger.Error($"Error in OnDestroy: {ex.Message}");
}
}
private void OnApplicationQuit()
{
try
{
Dispose();
}
catch (Exception ex)
{
MelonLogger.Error($"Error in OnApplicationQuit: {ex.Message}");
}
}
public void Dispose()
{
try
{
MelonLogger.Msg("Starting ClientMain cleanup...");
long memoryBeforeCleanup = GC.GetTotalMemory(false);
MelonLogger.Msg($"[Memory Monitor] Pre-cleanup managed memory: {memoryBeforeCleanup / 1024 / 1024} MB");
Entities.StopAllCoroutines();
if (crosshairTexture != null)
{
UnityEngine.Object.DestroyImmediate(crosshairTexture);
crosshairTexture = null;
}
GUIHelper.Cleanup();
Entities.CleanupCachedObjects();
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
long memoryAfterCleanup = GC.GetTotalMemory(true);
long memoryFreed = memoryBeforeCleanup - memoryAfterCleanup;
MelonLogger.Msg($"[Memory Monitor] Post-cleanup managed memory: {memoryAfterCleanup / 1024 / 1024} MB");
MelonLogger.Msg($"[Memory Monitor] Memory freed: {memoryFreed / 1024 / 1024} MB");
MelonLogger.Msg("ClientMain disposed successfully.");
}
catch (Exception ex)
{
MelonLogger.Error($"Error disposing ClientMain: {ex.Message}");
}
}
}
}

View File

@@ -1,15 +1,83 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net6.0</TargetFramework>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo> <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<OutputType>Library</OutputType> <OutputType>Library</OutputType>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<WarningLevel>0</WarningLevel> <WarningLevel>0</WarningLevel>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<WarningLevel>0</WarningLevel> <WarningLevel>0</WarningLevel>
</PropertyGroup> </PropertyGroup>
</Project> <ItemGroup>
<Reference Include="0Harmony">
<HintPath>E:\SteamLibrary\steamapps\common\Devour\MelonLoader\net6\0Harmony.dll</HintPath>
</Reference>
<Reference Include="Assembly-CSharp">
<HintPath>E:\SteamLibrary\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Assembly-CSharp.dll</HintPath>
</Reference>
<Reference Include="Il2Cppbolt">
<HintPath>E:\SteamLibrary\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppbolt.dll</HintPath>
</Reference>
<Reference Include="Il2Cppbolt.user">
<HintPath>E:\SteamLibrary\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppbolt.user.dll</HintPath>
</Reference>
<Reference Include="Il2Cppcom.rlabrecque.steamworks.net">
<HintPath>E:\SteamLibrary\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppcom.rlabrecque.steamworks.net.dll</HintPath>
</Reference>
<Reference Include="Il2CppInterop.Runtime">
<HintPath>E:\SteamLibrary\steamapps\common\Devour\MelonLoader\net6\Il2CppInterop.Runtime.dll</HintPath>
</Reference>
<Reference Include="Il2Cppmscorlib">
<HintPath>E:\SteamLibrary\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppmscorlib.dll</HintPath>
</Reference>
<Reference Include="Il2CppOpsive.UltimateCharacterController">
<HintPath>E:\SteamLibrary\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2CppOpsive.UltimateCharacterController.dll</HintPath>
</Reference>
<Reference Include="Il2Cppudpkit">
<HintPath>E:\SteamLibrary\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppudpkit.dll</HintPath>
</Reference>
<Reference Include="Il2Cppudpkit.common">
<HintPath>E:\SteamLibrary\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppudpkit.common.dll</HintPath>
</Reference>
<Reference Include="Il2Cppudpkit.platform.photon">
<HintPath>E:\SteamLibrary\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppudpkit.platform.photon.dll</HintPath>
</Reference>
<Reference Include="MelonLoader">
<HintPath>E:\SteamLibrary\steamapps\common\Devour\MelonLoader\net6\MelonLoader.dll</HintPath>
</Reference>
<Reference Include="Unity.TextMeshPro">
<HintPath>E:\SteamLibrary\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Unity.TextMeshPro.dll</HintPath>
</Reference>
<Reference Include="UnityEngine">
<HintPath>E:\SteamLibrary\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.AnimationModule">
<HintPath>E:\SteamLibrary\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.AnimationModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.CoreModule">
<HintPath>E:\SteamLibrary\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.CoreModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.IMGUIModule">
<HintPath>E:\SteamLibrary\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.IMGUIModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.InputLegacyModule">
<HintPath>E:\SteamLibrary\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.InputLegacyModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.PhysicsModule">
<HintPath>E:\SteamLibrary\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.PhysicsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TextRenderingModule">
<HintPath>E:\SteamLibrary\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.TextRenderingModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UI">
<HintPath>E:\SteamLibrary\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.UI.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UIModule">
<HintPath>E:\SteamLibrary\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.UIModule.dll</HintPath>
</Reference>
</ItemGroup>
</Project>

View File

@@ -0,0 +1,664 @@
using System.Collections.Generic;
namespace DevourClient.ESP
{
// Item ESP configuration management class - dynamically display different item types based on map
public static class ItemESPConfig
{
// ESP type enumeration
public enum ESPType
{
// Common items (all maps)
FirstAid, // First Aid
Battery, // Battery
Keys, // Keys
// Farmhouse (Anna) specific
Hay, // Hay
Gasoline, // Gasoline
// Asylum (Molly) specific
RottenFood, // Rotten Food
Fuse, // Fuse
// Inn specific
Bleach, // Bleach
Egg, // Egg
// Town specific
RitualBook, // Ritual Book
Matchbox, // Matchbox
// Gasoline (reused)
// Slaughterhouse specific
Bone, // Bone
// Gasoline (reused)
// Manor specific
// Bleach (reused)
Cake, // Cake
CleanHead, // Clean Head
Spade, // Spade
// Carnival specific
Coin, // Coin
MusicBox, // Music Box
DollHead, // Doll Head
// Enemy ESP - Farmhouse
Demon, // Demon
Goat, // Goat
// Enemy ESP - Asylum
Inmates, // Inmates
Rat, // Rat
// Enemy ESP - Inn
Spider, // Spider
// Enemy ESP - Town
Ghost, // Ghost
// Enemy ESP - Slaughterhouse
Corpse, // Corpse
Boar, // Boar
Pig, // Pig
// Enemy ESP - Manor
Crow, // Crow
DirtyHead, // Dirty Head
Lump, // Lump
// Enemy ESP - Carnival
Monkey, // Monkey
Doll, // Doll
// Collectables ESP - All maps (unified)
Collectables // All Collectables (Rose, Patch, CherryBlossom, Horseshoe, BarbedWire, Feather, Ticket, Pumpkin, Present)
}
// ESP type configuration supported by each map
private static Dictionary<string, List<ESPType>> mapESPTypes = new Dictionary<string, List<ESPType>>()
{
// Anna - Farmhouse map
{ "Anna", new List<ESPType>
{
ESPType.FirstAid, // Common: First Aid
ESPType.Battery, // Common: Battery
ESPType.Keys, // Common: Keys
ESPType.Hay, // Specific: Hay
ESPType.Gasoline, // Specific: Gasoline
ESPType.Demon, // Enemy: Demon
ESPType.Goat // Enemy: Goat
}
},
// Molly - Asylum map
{ "Molly", new List<ESPType>
{
ESPType.FirstAid, // Common: First Aid
ESPType.Battery, // Common: Battery
ESPType.Keys, // Common: Keys
ESPType.RottenFood, // Specific: Rotten Food
ESPType.Fuse, // Specific: Fuse
ESPType.Inmates, // Enemy: Inmates
ESPType.Rat // Enemy: Rat
}
},
// Inn map
{ "Inn", new List<ESPType>
{
ESPType.FirstAid, // Common: First Aid
ESPType.Battery, // Common: Battery
ESPType.Keys, // Common: Keys
ESPType.Bleach, // Specific: Bleach
ESPType.Egg, // Specific: Egg
ESPType.Spider // Enemy: Spider
}
},
// Town map
{ "Town", new List<ESPType>
{
ESPType.FirstAid, // Common: First Aid
ESPType.Battery, // Common: Battery
ESPType.Keys, // Common: Keys
ESPType.RitualBook, // Specific: Ritual Book
ESPType.Matchbox, // Specific: Matchbox
ESPType.Gasoline, // Specific: Gasoline
ESPType.Ghost // Enemy: Ghost
}
},
// Slaughterhouse map
{ "Slaughterhouse", new List<ESPType>
{
ESPType.FirstAid, // Common: First Aid
ESPType.Battery, // Common: Battery
ESPType.Keys, // Common: Keys
ESPType.Bone, // Specific: Bone
ESPType.Gasoline, // Specific: Gasoline
ESPType.Corpse, // Enemy: Corpse
ESPType.Boar, // Enemy: Boar
ESPType.Pig // Enemy: Pig
}
},
// Manor map
{ "Manor", new List<ESPType>
{
ESPType.FirstAid, // Common: First Aid
ESPType.Battery, // Common: Battery
ESPType.Keys, // Common: Keys
ESPType.Bleach, // Specific: Bleach
ESPType.Cake, // Specific: Cake
ESPType.CleanHead, // Specific: Clean Head
ESPType.Spade, // Specific: Spade
ESPType.Crow, // Enemy: Crow
ESPType.DirtyHead, // Enemy: Dirty Head
ESPType.Lump // Enemy: Lump
}
},
// Carnival map
{ "Carnival", new List<ESPType>
{
ESPType.FirstAid, // Common: First Aid
ESPType.Battery, // Common: Battery
ESPType.Keys, // Common: Keys
ESPType.Coin, // Specific: Coin
ESPType.MusicBox, // Specific: Music Box
ESPType.DollHead, // Specific: Doll Head
ESPType.Monkey, // Enemy: Monkey
ESPType.Doll // Enemy: Doll
}
},
// Devour - default map (same as Farmhouse)
{ "Devour", new List<ESPType>
{
ESPType.FirstAid, // Common: First Aid
ESPType.Battery, // Common: Battery
ESPType.Keys, // Common: Keys
ESPType.Hay, // Specific: Hay
ESPType.Gasoline, // Specific: Gasoline
ESPType.Demon, // Enemy: Demon
ESPType.Goat // Enemy: Goat
}
}
};
// ESP enable status
private static Dictionary<ESPType, bool> espStates = new Dictionary<ESPType, bool>()
{
// Common items
{ ESPType.FirstAid, false },
{ ESPType.Battery, false },
{ ESPType.Keys, false },
// Farmhouse specific
{ ESPType.Hay, false },
{ ESPType.Gasoline, false },
// Asylum specific
{ ESPType.RottenFood, false },
{ ESPType.Fuse, false },
// Inn specific
{ ESPType.Bleach, false },
{ ESPType.Egg, false },
// Town specific
{ ESPType.RitualBook, false },
{ ESPType.Matchbox, false },
// Slaughterhouse specific
{ ESPType.Bone, false },
// Manor specific
{ ESPType.Cake, false },
{ ESPType.CleanHead, false },
{ ESPType.Spade, false },
// Carnival specific
{ ESPType.Coin, false },
{ ESPType.MusicBox, false },
{ ESPType.DollHead, false },
// Enemy - Farmhouse
{ ESPType.Demon, false },
{ ESPType.Goat, false },
// Enemy - Asylum
{ ESPType.Inmates, false },
{ ESPType.Rat, false },
// Enemy - Inn
{ ESPType.Spider, false },
// Enemy - Town
{ ESPType.Ghost, false },
// Enemy - Slaughterhouse
{ ESPType.Corpse, false },
{ ESPType.Boar, false },
{ ESPType.Pig, false },
// Enemy - Manor
{ ESPType.Crow, false },
{ ESPType.DirtyHead, false },
{ ESPType.Lump, false },
// Enemy - Carnival
{ ESPType.Monkey, false },
{ ESPType.Doll, false },
// Collectables - All maps (unified)
{ ESPType.Collectables, false }
};
public static List<ESPType> GetMapESPTypes(string sceneName)
{
// If in menu, return empty list
if (sceneName == "Menu")
return new List<ESPType>();
// If map is in configuration, return corresponding configuration
if (mapESPTypes.ContainsKey(sceneName))
return mapESPTypes[sceneName];
// Default return basic configuration (common items + Farmhouse enemies)
return new List<ESPType>
{
ESPType.FirstAid,
ESPType.Battery,
ESPType.Keys,
ESPType.Demon,
ESPType.Goat
};
}
public static bool GetESPState(ESPType type)
{
return espStates.ContainsKey(type) ? espStates[type] : false;
}
public static void SetESPState(ESPType type, bool enabled)
{
if (espStates.ContainsKey(type))
espStates[type] = enabled;
}
public static void ToggleESPState(ESPType type)
{
if (espStates.ContainsKey(type))
espStates[type] = !espStates[type];
}
public static string GetESPTypeName(ESPType type)
{
switch (type)
{
// Common items
case ESPType.FirstAid:
return "First Aid ESP";
case ESPType.Battery:
return "Battery ESP";
case ESPType.Keys:
return "Key ESP";
// Farmhouse specific
case ESPType.Hay:
return "Hay ESP";
case ESPType.Gasoline:
return "Gasoline ESP";
// Asylum specific
case ESPType.RottenFood:
return "Rotten Food ESP";
case ESPType.Fuse:
return "Fuse ESP";
// Inn specific
case ESPType.Bleach:
return "Bleach ESP";
case ESPType.Egg:
return "Egg ESP";
// Town specific
case ESPType.RitualBook:
return "Ritual Book ESP";
case ESPType.Matchbox:
return "Matchbox ESP";
// Slaughterhouse specific
case ESPType.Bone:
return "Bone ESP";
// Manor specific
case ESPType.Cake:
return "Cake ESP";
case ESPType.CleanHead:
return "Clean Head ESP";
case ESPType.Spade:
return "Spade ESP";
// Carnival specific
case ESPType.Coin:
return "Coin ESP";
case ESPType.MusicBox:
return "Music Box ESP";
case ESPType.DollHead:
return "Doll Head ESP";
// Enemy - Farmhouse
case ESPType.Demon:
return "Demon ESP";
case ESPType.Goat:
return "Goat ESP";
// Enemy - Asylum
case ESPType.Inmates:
return "Inmates ESP";
case ESPType.Rat:
return "Rat ESP";
// Enemy - Inn
case ESPType.Spider:
return "Spider ESP";
// Enemy - Town
case ESPType.Ghost:
return "Ghost ESP";
// Enemy - Slaughterhouse
case ESPType.Corpse:
return "Corpse ESP";
case ESPType.Boar:
return "Boar ESP";
case ESPType.Pig:
return "Pig ESP";
// Enemy - Manor
case ESPType.Crow:
return "Crow ESP";
case ESPType.DirtyHead:
return "Dirty Head ESP";
case ESPType.Lump:
return "Lump ESP";
// Enemy - Carnival
case ESPType.Monkey:
return "Monkey ESP";
case ESPType.Doll:
return "Doll ESP";
// Collectables - All maps (unified)
case ESPType.Collectables:
return "Collectables ESP";
default:
return type.ToString();
}
}
public static ESPType? GetESPTypeByItemName(string itemName)
{
if (string.IsNullOrEmpty(itemName))
return null;
// Remove "Survival" and "(Clone)" prefix/suffix, handle both "Survival" and "Survival " (with space)
itemName = itemName.Replace("Survival ", "").Replace("Survival", "").Replace("(Clone)", "").Trim();
// Match item name to ESP type
switch (itemName.ToLower())
{
// Common items
case "firstaidcontainer":
case "first aid":
case "firstaid":
return ESPType.FirstAid;
case "batterypickup":
case "battery":
return ESPType.Battery;
case "keybehaviour":
case "key":
return ESPType.Keys;
// Farmhouse specific
case "haypickup":
case "hay":
return ESPType.Hay;
case "gasolinepickup":
case "gasoline":
case "gas":
return ESPType.Gasoline;
// Asylum specific
case "rottenfoodpickup":
case "rotten food":
case "rottenfood":
return ESPType.RottenFood;
case "fusepickup":
case "fuse":
return ESPType.Fuse;
// Inn specific
case "bleachpickup":
case "bleach":
return ESPType.Bleach;
case "eggpickup":
case "egg":
return ESPType.Egg;
// Town specific
case "ritualbookpickup":
case "ritual book":
case "ritualbook":
return ESPType.RitualBook;
case "matchboxpickup":
case "matchbox":
return ESPType.Matchbox;
// Slaughterhouse specific
case "bonepickup":
case "bone":
return ESPType.Bone;
// Manor specific
case "cakepickup":
case "cake":
return ESPType.Cake;
case "cleanheadpickup":
case "clean head":
case "cleanhead":
return ESPType.CleanHead;
case "spadepickup":
case "spade":
return ESPType.Spade;
// Carnival specific
case "coinpickup":
case "coin":
return ESPType.Coin;
case "musicboxpickup":
case "musicbox-idle":
return ESPType.MusicBox;
case "dollheadpickup":
case "doll head":
case "dollhead":
return ESPType.DollHead;
// Enemy - Farmhouse
case "demon":
case "demonbehaviour":
return ESPType.Demon;
case "goat":
case "goatbehaviour":
return ESPType.Goat;
// Enemy - Asylum
case "inmates":
case "inmate":
case "inmatebehaviour":
return ESPType.Inmates;
case "rat":
case "ratbehaviour":
return ESPType.Rat;
// Enemy - Inn
case "spider":
case "spiderbehaviour":
return ESPType.Spider;
// Enemy - Town
case "ghost":
case "ghostbehaviour":
return ESPType.Ghost;
// Enemy - Slaughterhouse
case "corpse":
case "corpsebehaviour":
return ESPType.Corpse;
case "boar":
case "boarbehaviour":
return ESPType.Boar;
case "pig":
case "pigbehaviour":
return ESPType.Pig;
// Enemy - Manor
case "crow":
case "crowbehaviour":
return ESPType.Crow;
case "dirty head":
case "dirtyhead":
case "dirtyheadbehaviour":
return ESPType.DirtyHead;
case "lump":
case "lumpcontroller":
case "manorlumpcontroller":
return ESPType.Lump;
// Enemy - Carnival
case "monkey":
case "monkeybehaviour":
return ESPType.Monkey;
case "doll":
case "dollbehaviour":
return ESPType.Doll;
// Collectables - All maps (unified)
// Based on CollectablesJSON field names and gameObject names
case "rose":
case "collectables":
case "collectable":
case "patch":
case "patches":
case "cherryblossom":
case "cherry blossom":
case "horseshoe":
case "horseshoes":
case "barbedwire":
case "barbed wire":
case "barbedwires":
case "feather":
case "feathers":
case "ticket":
case "tickets":
case "pumpkin":
case "pumpkins":
case "present":
case "presents":
return ESPType.Collectables;
default:
return null; // Unknown item type
}
}
public static bool ShouldShowESP(string itemName)
{
ESPType? espType = GetESPTypeByItemName(itemName);
if (espType == null)
return false;
return GetESPState(espType.Value);
}
public static void ResetAllStates()
{
var keys = new List<ESPType>(espStates.Keys);
foreach (var key in keys)
{
espStates[key] = false;
}
}
// Properties for backward compatibility - return whether any related ESP is enabled
public static bool ItemESP
{
get => GetESPState(ESPType.FirstAid) ||
GetESPState(ESPType.Battery) ||
GetESPState(ESPType.Keys) ||
GetESPState(ESPType.Hay) ||
GetESPState(ESPType.Gasoline) ||
GetESPState(ESPType.RottenFood) ||
GetESPState(ESPType.Fuse) ||
GetESPState(ESPType.Bleach) ||
GetESPState(ESPType.Egg) ||
GetESPState(ESPType.RitualBook) ||
GetESPState(ESPType.Matchbox) ||
GetESPState(ESPType.Bone) ||
GetESPState(ESPType.Cake) ||
GetESPState(ESPType.CleanHead) ||
GetESPState(ESPType.Spade) ||
GetESPState(ESPType.Coin) ||
GetESPState(ESPType.MusicBox) ||
GetESPState(ESPType.DollHead);
}
public static bool GoatRatESP
{
get => GetESPState(ESPType.Goat) || GetESPState(ESPType.Rat);
}
public static bool DemonESP
{
get => GetESPState(ESPType.Demon) ||
GetESPState(ESPType.Goat) ||
GetESPState(ESPType.Inmates) ||
GetESPState(ESPType.Rat) ||
GetESPState(ESPType.Spider) ||
GetESPState(ESPType.Ghost) ||
GetESPState(ESPType.Corpse) ||
GetESPState(ESPType.Boar) ||
GetESPState(ESPType.Pig) ||
GetESPState(ESPType.Crow) ||
GetESPState(ESPType.DirtyHead) ||
GetESPState(ESPType.Lump) ||
GetESPState(ESPType.Monkey) ||
GetESPState(ESPType.Doll);
}
}
}

View File

@@ -0,0 +1,167 @@
using System;
using DevourClient.Helpers;
using UnityEngine;
namespace DevourClient.Features
{
internal static class ClientRuntime
{
internal static void Tick()
{
if (Settings.Settings.menuToggleKey != KeyCode.None && Input.GetKeyDown(Settings.Settings.menuToggleKey))
{
try
{
Il2Cpp.GameUI gameUI = UnityEngine.Object.FindObjectOfType<Il2Cpp.GameUI>();
if (Settings.Settings.menu_enable)
{
gameUI.HideMouseCursor();
}
else
{
gameUI.ShowMouseCursor();
}
}
catch { }
Settings.Settings.menu_enable = !Settings.Settings.menu_enable;
}
if (Player.IsInGame())
{
if (ClientMain.flashlight_toggle && !ClientMain.fullbright)
{
Hacks.Misc.BigFlashlight(false);
}
else if (!ClientMain.flashlight_toggle && !ClientMain.fullbright)
{
Hacks.Misc.BigFlashlight(true);
}
if (ClientMain.fullbright && !ClientMain.flashlight_toggle)
{
Hacks.Misc.Fullbright(false);
}
else if (!ClientMain.fullbright && !ClientMain.flashlight_toggle)
{
Hacks.Misc.Fullbright(true);
}
if (ClientMain._IsAutoRespawn && Helpers.Player.IsPlayerCrawling())
{
Hacks.Misc.AutoRespawn();
}
if (ClientMain.crosshair && !ClientMain.in_game_cache)
{
ClientMain.in_game_cache = true;
}
}
else
{
if (ClientMain.crosshair && ClientMain.in_game_cache)
{
ClientMain.in_game_cache = false;
}
}
if (ClientMain.spoofLevel)
{
Hacks.Misc.SetRank((int)ClientMain.spoofLevelValue);
}
if (Input.GetKeyDown(Settings.Settings.flyKey))
{
ClientMain.fly = !ClientMain.fly;
}
RadialMenuManager.Enabled = true;
RadialMenuManager.HandleUpdate();
if (Player.IsInGameOrLobby())
{
if (ClientMain.fly && !ClientMain.need_fly_reset)
{
Il2Cpp.NolanBehaviour nb = Player.GetPlayer();
if (nb)
{
Collider coll = nb.GetComponentInChildren<Collider>();
if (coll)
{
coll.enabled = false;
ClientMain.need_fly_reset = true;
}
}
}
else if (!ClientMain.fly && ClientMain.need_fly_reset)
{
Il2Cpp.NolanBehaviour nb = Player.GetPlayer();
if (nb)
{
Collider coll = nb.GetComponentInChildren<Collider>();
if (coll)
{
coll.enabled = true;
ClientMain.need_fly_reset = false;
}
}
}
if (ClientMain.fly)
{
Hacks.Misc.Fly(ClientMain.fly_speed);
}
Hacks.Misc.InstantInteractTick(ClientMain.InstantInteractionEnabled);
}
if (Helpers.Map.GetActiveScene() == "Menu")
{
Hacks.Misc.WalkInLobby(ClientMain._walkInLobby);
}
if (ClientMain.fastMove)
{
try
{
if (Helpers.Entities.LocalPlayer_.p_GameObject != null)
{
var locomotion = Helpers.Entities.LocalPlayer_.p_GameObject
.GetComponent<Il2CppOpsive.UltimateCharacterController.Character.UltimateCharacterLocomotion>();
if (locomotion != null)
{
locomotion.TimeScale = ClientMain._PlayerSpeedMultiplier;
}
}
}
catch
{
return;
}
}
ClientMain.frameCount++;
if (ClientMain.frameCount % ClientMain.GC_GEN0_INTERVAL == 0)
{
GC.Collect(0, GCCollectionMode.Optimized);
}
if (ClientMain.frameCount % ClientMain.GC_FULL_INTERVAL == 0)
{
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
ClientMain.frameCount = 0;
}
if (ClientMain.frameCount - ClientMain.lastMemoryLog >= ClientMain.MEMORY_LOG_INTERVAL)
{
long memoryUsed = GC.GetTotalMemory(false);
MelonLoader.MelonLogger.Msg($"[Memory Monitor] Current managed memory: {memoryUsed / 1024 / 1024} MB | Frame: {ClientMain.frameCount}");
ClientMain.lastMemoryLog = ClientMain.frameCount;
}
}
}
}

View File

@@ -0,0 +1,117 @@
using System;
using System.Collections;
using UnityEngine;
using Il2CppPhoton.Bolt;
namespace DevourClient.Features
{
internal static class ItemHandling
{
internal static void HandleItemCarry(string carryObjectName)
{
if (string.IsNullOrEmpty(carryObjectName))
{
return;
}
if (ClientMain.autoItemFarm && DevourClient.Helpers.Player.IsInGame())
{
MelonLoader.MelonCoroutines.Start(ItemFarmRoutine(carryObjectName));
return;
}
DevourClient.Hacks.Misc.CarryObject(carryObjectName);
}
private static IEnumerator ItemFarmRoutine(string carryObjectName)
{
for (int i = 0; i < ClientMain.ITEM_FARM_REPEAT_COUNT; i++)
{
DevourClient.Hacks.Misc.CarryObject(carryObjectName);
yield return new WaitForSeconds(ClientMain.ITEM_FARM_DELAY);
TryDropCarriedItem(carryObjectName);
yield return new WaitForSeconds(ClientMain.ITEM_FARM_DELAY);
}
}
private static void TryDropCarriedItem(string carryObjectName)
{
Il2Cpp.NolanBehaviour nb = DevourClient.Helpers.Player.GetPlayer();
if (nb == null)
{
return;
}
try
{
nb.PlopObject();
TrySpawnDroppedItem(carryObjectName, nb);
}
catch (Exception ex)
{
MelonLoader.MelonLogger.Warning($"Failed to drop carried item: {ex.Message}");
}
}
private static void TrySpawnDroppedItem(string carryObjectName, Il2Cpp.NolanBehaviour nb)
{
if (!BoltNetwork.IsServer || nb == null)
{
return;
}
Vector3 dropPosition = nb.transform.position + nb.transform.forward * 1.5f;
Quaternion dropRotation = Quaternion.identity;
try
{
switch (carryObjectName)
{
case "SurvivalHay":
BoltNetwork.Instantiate(BoltPrefabs.SurvivalHay, dropPosition, dropRotation);
break;
case "SurvivalFirstAid":
BoltNetwork.Instantiate(BoltPrefabs.SurvivalFirstAid, dropPosition, dropRotation);
break;
case "SurvivalBattery":
BoltNetwork.Instantiate(BoltPrefabs.SurvivalBattery, dropPosition, dropRotation);
break;
case "SurvivalGasoline":
BoltNetwork.Instantiate(BoltPrefabs.SurvivalGasoline, dropPosition, dropRotation);
break;
case "SurvivalFuse":
BoltNetwork.Instantiate(BoltPrefabs.SurvivalFuse, dropPosition, dropRotation);
break;
case "SurvivalRottenFood":
BoltNetwork.Instantiate(BoltPrefabs.SurvivalRottenFood, dropPosition, dropRotation);
break;
case "SurvivalBone":
BoltNetwork.Instantiate(BoltPrefabs.SurvivalBone, dropPosition, dropRotation);
break;
case "SurvivalBleach":
BoltNetwork.Instantiate(BoltPrefabs.SurvivalBleach, dropPosition, dropRotation);
break;
case "Matchbox-3":
BoltNetwork.Instantiate(BoltPrefabs.SurvivalMatchbox, dropPosition, dropRotation);
break;
case "SurvivalSpade":
BoltNetwork.Instantiate(BoltPrefabs.SurvivalSpade, dropPosition, dropRotation);
break;
case "SurvivalCake":
BoltNetwork.Instantiate(BoltPrefabs.SurvivalCake, dropPosition, dropRotation);
break;
case "MusicBox-Idle":
BoltNetwork.Instantiate(BoltPrefabs.SurvivalMusicBox, dropPosition, dropRotation);
break;
case "SurvivalCoin":
BoltNetwork.Instantiate(BoltPrefabs.SurvivalCoin, dropPosition, dropRotation);
break;
}
}
catch (Exception ex)
{
MelonLoader.MelonLogger.Warning($"Failed to spawn dropped item '{carryObjectName}': {ex.Message}");
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,17 +1,30 @@
namespace DevourClient.Hacks using Il2CppSteamworks;
namespace DevourClient.Hacks
{ {
public class Unlock public class Unlock
{ {
public static void Achievements() public static void Achievements()
{ {
Il2Cpp.AchievementHelpers ah = UnityEngine.Object.FindObjectOfType<Il2Cpp.AchievementHelpers>(); //Il2Cpp.AchievementHelpers ah = UnityEngine.Object.FindObjectOfType<Il2Cpp.AchievementHelpers>();
string[] achievements = { "ACH_666_DOLL_HEADS_DESTROYED", "ACH_1000_HEADS_BURIED", "ACH_1000_PIGS_DESTROYED", "ACH_1000_BOOKS_DESTROYED", "ACH_100_EGGS_DESTROYED", "ACH_100_FUSES_USED", "ACH_100_GASOLINE_USED", "ACH_WON_Manor_NIGHTMARE_SP", "ACH_WON_NIGHTMARE_", "ACH_WON_TOWN_HARD", "ACH_WON_MANOR_NIGHTMARE_SP", "ACH_WON_INN_HARD_SP", "ACH_WON_SLAUGHTERHOUSE_COOP", "ACH_ALL_FEATHERS", "ACH_WON_INN_HARD", "ACH_ALL_BARBED_WIRES", "ACH_WON_CARNIVAL_NIGHTMARE_SP", "ACH_WON_MOLLY_HARD", "ACH_WON_MOLLY_HARD_SP", "ACH_ALL_HORSESHOES", "ACH_WON_INN_SP", "ACH_WON_TOWN_NIGHTMARE_SP", "ACH_WON_MANOR_HARD_SP", "ACH_WON_MOLLY_SP", "ACH_WON_CARNIVAL_HARD_SP", "ACH_WON_SLAUGHTERHOUSE_HARD_SP", "ACH_WON_TOWN_COOP", "ACH_WON_MOLLY_COOP", "ACH_ALL_PATCHES", "ACH_WON_MOLLY_NIGHTMARE_SP", "ACH_WON_TOWN_NIGHTMARE", "ACH_WON_SLAUGHTERHOUSE_SP", "ACH_WON_INN_COOP", "ACH_WON_CARNIVAL_HARD", "ACH_ALL_CHERRY_BLOSSOM", "ACH_WON_MOLLY_NIGHTMARE", "ACH_WON_TOWN_HARD_SP", "ACH_WON_CARNIVAL_NIGHTMARE", "ACH_WON_CARNIVAL_SP", "ACH_ALL_ROSES", "ACH_WON_INN_NIGHTMARE_SP", "ACH_ALL_TICKETS", "ACH_WON_SLAUGHTERHOUSE_NIGHTMARE_SP", "ACH_WON_TOWN_SP", "ACH_WON_INN_NIGHTMARE", "ACH_WON_CARNIVAL_COOP", "ACH_WON_MANOR_COOP", "ACH_WON_SLAUGHTERHOUSE_NIGHTMARE", "ACH_WON_SLAUGHTERHOUSE_HARD", "ACH_WON_MANOR_NIGHTMARE", "ACH_WON_MANOR_HARD", "ACH_WON_MANOR_SP", "ACH_ALL_CLIPBOARDS_READ", "ACH_ALL_NOTES_READ", "ACH_UNLOCKED_CAGE", "ACH_UNLOCKED_ATTIC_CAGE", "ACH_CALMED_ANNA", "ACH_FRIED_RAT", "ACH_BURNT_GOAT", "ACH_KNOCKED_OUT_BY_ANNA", "ACH_KNOCKOUT_OUT_BY_DEMON", "ACH_KNOCKED_OUT_IN_HIDING", "STAT_NUM_BLEACH_USED", "ACH_WON_SP", "ACH_WIN_NIGHTMARE", "ACH_WON_HARD_SP", "ACH_WON_COOP", "ACH_WON_HARD", "ACH_WIN_NIGHTMARE_SP", "ACH_LOST", "ACH_NEVER_KNOCKED_OUT", "ACH_ONLY_ONE_KNOCKED_OUT", "ACH_WON_HARD_NO_MEDKITS", "ACH_WON_NO_MEDKITS", "ACH_WON_NO_BATTERIES", "ACH_WON_NIGHTMARE_NO_MEDKITS", "ACH_WON_NO_KNOCKOUT_COOP", "ACH_WON_HARD_NO_BATTERIES", "ACH_WON_HARD_{0}", "ACH_WON_NIGHTMARE_{0}", "ACH_WON_NIGHTMARE_NO_BATTERIES", "ACH_SURVIVED_TO_7_GOATS", "ACH_SURVIVED_TO_5_GOATS", "ACH_SURVIVED_TO_3_GOATS", };
string[] achievements = { "STAT_NUM_BLEACH_USED", "ACH_WON_TOWN_COOP", "ACH_WON_TOWN_HARD", "ACH_WON_SLAUGHTERHOUSE_SP", "ACH_WON_SP", "ACH_WON_SLAUGHTERHOUSE_NIGHTMARE", "ACH_WON_SLAUGHTERHOUSE_NIGHTMARE_SP", "ACH_WON_SLAUGHTERHOUSE_HARD", "ACH_WON_SLAUGHTERHOUSE_HARD_SP", "ACH_WON_NO_MEDKITS", "ACH_WON_SLAUGHTERHOUSE_COOP", "ACH_WON_NO_BATTERIES", "ACH_WON_NO_KNOCKOUT_COOP", "ACH_WON_NIGHTMARE_NO_BATTERIES", "ACH_WON_NIGHTMARE_NO_MEDKITS", "ACH_WON_MOLLY_NIGHTMARE_SP", "ACH_WON_MOLLY_SP", "ACH_WON_TOWN_NIGHTMARE_SP", "ACH_WON_TOWN_SP", "ACH_WON_TOWN_HARD_SP", "ACH_WON_TOWN_NIGHTMARE", "ACH_UNLOCKED_CAGE", "ACH_WIN_NIGHTMARE", "ACH_SURVIVED_TO_7_GOATS", "ACH_UNLOCKED_ATTIC_CAGE", "ACH_SURVIVED_TO_3_GOATS", "ACH_SURVIVED_TO_5_GOATS", "ACH_STAGGERED_SAM_20_TIMES", "ACH_STAGGERED_ZARA_20_TIMES", "ACH_STAGGERED_MOLLY_20_TIMES", "ACH_STAGGERED_NATHAN_20_TIMES", "ACH_REVIVED_20_PLAYERS", "ACH_STAGGERED_ANNA_20_TIMES", "ACH_NEVER_KNOCKED_OUT", "ACH_ONLY_ONE_KNOCKED_OUT", "ACH_LOST", "ACH_LURED_20_GOATS", "ACH_WON_MOLLY_HARD_SP", "ACH_WON_MOLLY_NIGHTMARE", "ACH_WON_MOLLY_COOP", "ACH_WON_MOLLY_HARD", "ACH_WON_INN_NIGHTMARE_SP", "ACH_WON_INN_SP", "ACH_WON_INN_HARD_SP", "ACH_WON_INN_NIGHTMARE", "ACH_WON_INN_COOP", "ACH_WON_INN_HARD", "ACH_WON_HARD_NO_MEDKITS", "ACH_WON_HARD_SP", "ACH_WON_HARD", "ACH_WON_HARD_NO_BATTERIES", "ACH_WIN_NIGHTMARE_SP", "ACH_WON_COOP", "ACH_ALL_ROSES", "ACH_BEAT_GAME_5_TIMES", "ACH_ALL_NOTES_READ", "ACH_ALL_PATCHES", "ACH_ALL_CLIPBOARDS_READ", "ACH_ALL_HORSESHOES", "ACH_ALL_BARBED_WIRES", "ACH_ALL_CHERRY_BLOSSOM", "ACH_20_POOPS_SEARCHED", "ACH_20_TRASH_CANS_KICKED", "ACH_100_GASOLINE_USED", "ACH_20_BLEACH_USED", "ACH_100_EGGS_DESTROYED", "ACH_100_FUSES_USED", "ACH_1000_PIGS_DESTROYED", "ACH_100_BOOKS_CURSED", "ACH_KNOCKED_OUT_IN_HIDING", "ACH_KNOCKOUT_OUT_BY_DEMON", "ACH_KNOCKED_OUT_20_TIMES", "ACH_KNOCKED_OUT_BY_ANNA", "ACH_FRIED_20_DEMONS", "ACH_FRIED_RAT", "ACH_FRIED_100_CORPSES", "ACH_FRIED_100_INMATES", "ACH_FRIED_1000_GHOSTS", "ACH_FRIED_1000_SPIDERS", "ACH_CALM_MOLLY_10_TIMES", "ACH_FRIED_1000_BOARS", "ACH_CALMED_ANNA", "ACH_CALMED_ANNA_10_TIMES", "ACH_BEAT_GAME_5_TIMES_IN_NIGHTMARE_MODE", "ACH_BURNT_GOAT", "ACH_1000_BOOKS_DESTROYED" }; string[] stats = { "STAT_TRASH_CANS_KICKED", "STAT_NUM_BOOKS_DESTROYED", "STAT_NUM_ANNA_STAGGERS", "STAT_KNOCKOUTS_BY_GHOST", "STAT_KNOCKOUTS_BY_NATHAN", "STAT_NUM_REVIVES", "STAT_INMATES", "STAT_GHOSTS", "STAT_PRESENTS_COLLECTED", "STAT_ROSES_COLLECTED", "STAT_HEADS", "STAT_KNOCKOUTS_BY_MONKEY", "STAT_GOATS_LURED", "STAT_NUM_NATHAN_STAGGERS", "STAT_DOLLS", "STAT_HORSESHOES_COLLECTED", "STAT_KNOCKOUTS_BY_BOAR", "STAT_KNOCKOUTS_BY_MOLLY", "STAT_KNOCKOUTS_BY_SPIDER", "STAT_DEMONS", "STAT_BARBED_WIRES_COLLECTED", "STAT_CATEGORY_MISC", "STAT_BOOKS", "STAT_CATEGORY_COLLECTABLES", "STAT_HEADS_CLEANSED", "STAT_KNOCKOUTS_BY_SAM", "STAT_NUM_APRIL_STAGGERS", "STAT_BOARS", "STAT_RATS", "STAT_KNOCKOUTS_BY_APRIL", "STAT_CATEGORY_MINIONS_BANISHED", "STAT_HEADS_LURED", "STAT_PIGS", "STAT_CROWS", "STAT_NUM_ZARA_STAGGERS", "STAT_PIGS_LURED", "STAT_NUM_SAM_STAGGERS", "STAT_CATEGORY_AZAZEL_STAGGERS", "STAT_NUM_MOLLY_STAGGERS", "STAT_CHERRY_BLOSSOM_COLLECTED", "STAT_GOATS", "STAT_PUMPKINS_COLLECTED", "STAT_KNOCKOUTS_BY_ZARA", "STAT_PATCHES_COLLECTED", "STAT_KNOCKOUTS_BY_DEMON", "STAT_NUM_KAI_STAGGERS", "STAT_FEATHERS_COLLECTED", "STAT_EGGS", "STAT_KNOCKOUTS_BY_ANNA", "STAT_CATEGORY_ANIMALS_LURED", "STAT_DOLLS_LURED", "STAT_CORPSES_FREED", "STAT_DOLL_HEADS", "STAT_KNOCKOUTS_BY_INMATE", "STAT_RATS_LURED", "STAT_SPIDERS", "STAT_COINS_USED", "STAT_MONKEYS", "STAT_CATEGORY_ITEMS_USED", "STAT_CATEGORY_RITUAL_ITEMS_DESTROYED", "STAT_KNOCKOUTS_BY_CROW", "STAT_DOLL_HEADS_DESTROYED", "STAT_CATEGORY_KNOCKOUTS", "STAT_TICKETS_COLLECTED", "STAT_KNOCKOUTS_BY_KAI", "STAT_CATEGORY_WINS", "STAT_NUM_WON_NORMAL", "STAT_DOLLS_EXPLODED", "STAT_NUM_EGGS_DESTROYED", "STAT_NUM_HEADS_BURIED", "STAT_NUM_CORPSES_FRIED", "STAT_NUM_GHOSTS_FRIED", "STAT_NUM_MOLLY_CALMED_DOWN", "STAT_NUM_ANNA_CALMED_DOWN", "STAT_NUM_", "STAT_MONKEYS_FRIED", "STAT_NUM_CROWS_FRIED", "STAT_NUM_BOARS_FRIED", "STAT_NUM_SPIDERS_FRIED", "STAT_NUM_INMATES_FRIED", "STAT_NUM_DEMONS_FRIED", "STAT_NUM_KNOCKOUTS", "STAT_KNOCKOUTS_BY_", "STAT_NUM_BOOKS_CURSED", "STAT_NUM_ALCOHOL_USED", "STAT_NUM_BLEACH_USED", "STAT_EXP", "STAT_POOPS_SEARCHED", "STAT_NUM_PIGS_DESTROYED", "STAT_NUM_WON_HARD", "STAT_NUM_WON_NIGHTMARE", "STAT_NUM_WON_EASY", "STAT_NUM_WON", "STAT_NUM_GASOLINE_USED", "STAT_NUM_GOATS_DESTROYED", "STAT_NUM_RATS_DESTROYED", "STAT_NUM_FUSES_USED", };
for (int i = 0; i < achievements.Length; i++) for (int i = 0; i < achievements.Length; i++)
{ {
ah.Unlock(achievements[i]); Il2CppSteamworks.SteamUserStats.SetAchievement(achievements[i]);
//ah.Unlock(achievements[i]);
} }
for (int j = 0; j < stats.Length; j++)
{
Il2CppSteamworks.SteamUserStats.SetStat(stats[j], 666);
}
MelonLoader.MelonLogger.Warning("You need to restart your game for the achievements to be unlocked !!!");
MelonLoader.MelonLogger.Warning("You need to restart your game for the achievements to be unlocked !!!");
MelonLoader.MelonLogger.Warning("You need to restart your game for the achievements to be unlocked !!!");
MelonLoader.MelonLogger.Warning("You need to restart your game for the achievements to be unlocked !!!");
} }
public static void Doors() public static void Doors()

View File

@@ -1,4 +1,5 @@
using UnityEngine; using UnityEngine;
using System.Collections.Generic;
namespace DevourClient.Helpers namespace DevourClient.Helpers
{ {
@@ -8,6 +9,13 @@ namespace DevourClient.Helpers
private static float G; private static float G;
private static float B; private static float B;
private static Texture2D? previewTexture = null;
private static Dictionary<Color, Texture2D> colorTextureCache = new Dictionary<Color, Texture2D>();
private static Dictionary<int, Texture2D> circularTextureCache = new Dictionary<int, Texture2D>();
private static Color lastPreviewColor = Color.clear;
private static GUIStyle? cachedBoxStyle = null;
public static Color ColorPick(string title, Color color) public static Color ColorPick(string title, Color color)
{ {
GUI.Label(new Rect(Settings.Settings.x + 195, Settings.Settings.y + 70, 250, 30), title); GUI.Label(new Rect(Settings.Settings.x + 195, Settings.Settings.y + 70, 250, 30), title);
@@ -24,12 +32,24 @@ namespace DevourClient.Helpers
void DrawPreview(Rect position, Color color_to_draw) void DrawPreview(Rect position, Color color_to_draw)
{ {
Texture2D texture = new Texture2D(1, 1); if (previewTexture == null || lastPreviewColor != color_to_draw)
texture.SetPixel(0, 0, color_to_draw); {
texture.Apply(); if (previewTexture == null)
GUIStyle boxStyle = new GUIStyle(GUI.skin.box); {
boxStyle.normal.background = texture; previewTexture = new Texture2D(1, 1);
GUI.Box(position, GUIContent.none, boxStyle); }
previewTexture.SetPixel(0, 0, color_to_draw);
previewTexture.Apply();
lastPreviewColor = color_to_draw;
}
if (cachedBoxStyle == null)
{
cachedBoxStyle = new GUIStyle(GUI.skin.box);
}
cachedBoxStyle.normal.background = previewTexture;
GUI.Box(position, GUIContent.none, cachedBoxStyle);
} }
DrawPreview(new Rect(Settings.Settings.x + 195, Settings.Settings.y + 100, 20, 90), color); DrawPreview(new Rect(Settings.Settings.x + 195, Settings.Settings.y + 100, 20, 90), color);
@@ -39,6 +59,14 @@ namespace DevourClient.Helpers
public static Texture2D MakeTex(int width, int height, Color col) public static Texture2D MakeTex(int width, int height, Color col)
{ {
if (colorTextureCache.TryGetValue(col, out Texture2D? cachedTexture))
{
if (cachedTexture != null)
{
return cachedTexture;
}
}
Color[] pix = new Color[width * height]; Color[] pix = new Color[width * height];
for (int i = 0; i < pix.Length; ++i) for (int i = 0; i < pix.Length; ++i)
{ {
@@ -47,11 +75,24 @@ namespace DevourClient.Helpers
Texture2D result = new Texture2D(width, height); Texture2D result = new Texture2D(width, height);
result.SetPixels(pix); result.SetPixels(pix);
result.Apply(); result.Apply();
colorTextureCache[col] = result;
return result; return result;
} }
public static Texture2D GetCircularTexture(int width, int height) public static Texture2D GetCircularTexture(int width, int height)
{ {
int cacheKey = width;
if (circularTextureCache.TryGetValue(cacheKey, out Texture2D? cachedTexture))
{
if (cachedTexture != null)
{
return cachedTexture;
}
}
Texture2D texture = new Texture2D(width, height); Texture2D texture = new Texture2D(width, height);
for (int x = 0; x < texture.width; x++) for (int x = 0; x < texture.width; x++)
{ {
@@ -70,7 +111,36 @@ namespace DevourClient.Helpers
texture.Apply(); texture.Apply();
circularTextureCache[cacheKey] = texture;
return texture; return texture;
} }
public static void Cleanup()
{
if (previewTexture != null)
{
UnityEngine.Object.Destroy(previewTexture);
previewTexture = null;
}
foreach (var texture in colorTextureCache.Values)
{
if (texture != null)
{
UnityEngine.Object.Destroy(texture);
}
}
colorTextureCache.Clear();
foreach (var texture in circularTextureCache.Values)
{
if (texture != null)
{
UnityEngine.Object.Destroy(texture);
}
}
circularTextureCache.Clear();
}
} }
} }

View File

@@ -1,4 +1,4 @@
namespace DevourClient.Helpers namespace DevourClient.Helpers
{ {
class Map class Map
{ {
@@ -12,6 +12,7 @@
switch (sceneName) switch (sceneName)
{ {
case "Devour": case "Devour":
case "Anna":
return "Farmhouse"; return "Farmhouse";
case "Molly": case "Molly":
return "Asylum"; return "Asylum";
@@ -21,13 +22,25 @@
return "Town"; return "Town";
case "Slaughterhouse": case "Slaughterhouse":
return "Slaughterhouse"; return "Slaughterhouse";
case "Manor":
return "Manor";
case "Carnival":
return "Carnival";
default: default:
return "Menu"; return "Menu";
} }
} }
public static UnityEngine.GameObject GetAzazel() public static UnityEngine.GameObject? GetAzazel()
{ {
if (Helpers.Entities.Azazels == null || Helpers.Entities.Azazels.Length == 0)
{
return null;
}
if (Helpers.Entities.Azazels[0] == null)
{
return null;
}
return Helpers.Entities.Azazels[0].gameObject; return Helpers.Entities.Azazels[0].gameObject;
} }

View File

@@ -12,14 +12,32 @@ namespace DevourClient.Render
{ {
public static GUIStyle StringStyle { get; set; } = new GUIStyle(GUI.skin.label); public static GUIStyle StringStyle { get; set; } = new GUIStyle(GUI.skin.label);
private static GUIContent cachedContent = new GUIContent();
private static Dictionary<string, Vector2> sizeCache = new Dictionary<string, Vector2>();
private static int frameCacheClearCounter = 0;
private const int CACHE_CLEAR_INTERVAL = 1800;
public static void DrawString(Vector2 position, Color color, string label, bool centered = true) public static void DrawString(Vector2 position, Color color, string label, bool centered = true)
{ {
var content = new GUIContent(label); cachedContent.text = label;
var size = StringStyle.CalcSize(content);
if (!sizeCache.TryGetValue(label, out Vector2 size))
{
size = StringStyle.CalcSize(cachedContent);
sizeCache[label] = size;
frameCacheClearCounter++;
if (frameCacheClearCounter >= CACHE_CLEAR_INTERVAL)
{
sizeCache.Clear();
frameCacheClearCounter = 0;
}
}
var upperLeft = centered ? position - size / 2f : position; var upperLeft = centered ? position - size / 2f : position;
Color color2 = GUI.color; Color color2 = GUI.color;
GUI.color = color; GUI.color = color;
GUI.Label(new Rect(upperLeft, size), content); GUI.Label(new Rect(upperLeft, size), cachedContent);
GUI.color = color2; GUI.color = color2;
} }
@@ -63,7 +81,7 @@ namespace DevourClient.Render
} }
public static void DrawBones(Transform bone1, Transform bone2, Color c) public static void DrawBones(Transform bone1, Transform bone2, Color c)
{ {
if (!Camera.main) //fix the crash maybe if (!Camera.main)
{ {
return; return;
} }

View File

@@ -0,0 +1,230 @@
using System;
using DevourClient.Network;
using MelonLoader;
using UnityEngine;
using Il2CppPhoton.Bolt;
using Il2Cpp;
using Il2CppOpsive.UltimateCharacterController.Character;
namespace DevourClient.Helpers
{
// Shared revive utilities. When running as host we mirror DevourX's revive flow.
public static class ReviveHelper
{
private static readonly Vector3 HostFallbackPosition = new Vector3(0f, -150f, 0f);
// Try to revive the provided NolanBehaviour using host-specific logic first,
// then fall back to the standard interactable flow.
public static bool TryRevive(Il2Cpp.NolanBehaviour target)
{
if (target == null || target.gameObject == null)
{
return false;
}
if (NetworkHelper.IsHost() && Player.IsInGame())
{
if (TryHostRevive(target))
{
return true;
}
}
else
{
if (TryClientRevive(target))
{
return true;
}
}
return TryInteractRevive(target);
}
private static bool TryHostRevive(Il2Cpp.NolanBehaviour target)
{
if (!NetworkHelper.IsHost() || !Player.IsInGame())
{
return false;
}
if (!target.IsCrawling())
{
return false;
}
try
{
var reviverEntity = GetLocalPlayerEntity();
if (reviverEntity == null)
{
return false;
}
var targetEntity = target.entity;
ReviveEvent.Post(GlobalTargets.Others, targetEntity, reviverEntity);
var survival = UnityEngine.Object.FindObjectOfType<Il2Cpp.Survival>();
if (survival != null)
{
survival.OnReviveEvent(targetEntity, reviverEntity);
}
target.OnReviveEvent(targetEntity, reviverEntity);
try
{
target.inputDisabledFromKnockout = false;
if (target.devourInput != null)
{
target.devourInput.EnableGameplayInput(true);
}
var layerManager = target.gameObject.GetComponent<CharacterLayerManager>();
if (layerManager != null)
{
var maskValue = layerManager.CharacterLayer.value;
if (maskValue != 0)
{
target.gameObject.layer = (int)Mathf.Log(maskValue, 2);
}
}
target.EnableRevivedEffects();
if (targetEntity.IsAttached)
{
var state = targetEntity.GetState<IPlayerState>();
if (state != null)
{
state.Locked = false;
state.Reviving = null;
state.DemonHoldingPlayer = null;
}
}
}
catch (Exception ex)
{
MelonLogger.Error($"Error validating revive state: {ex}");
}
var nameplate = target.gameObject.GetComponent<Il2Cpp.NolanNameplateController>();
if (nameplate != null) nameplate.OnReviveEvent(targetEntity, reviverEntity);
var perkController = target.gameObject.GetComponent<Il2Cpp.NolanPerkController>();
if (perkController != null) perkController.OnReviveEvent(targetEntity, reviverEntity);
if (Il2Cpp.IngameStatsTracker.singleton != null)
{
Il2Cpp.IngameStatsTracker.singleton.OnReviveEvent(targetEntity, reviverEntity);
}
NotifySceneListeners(targetEntity, reviverEntity);
return true;
}
catch (Exception ex)
{
MelonLogger.Warning($"[ReviveHelper] Host revive flow failed: {ex.Message}");
return false;
}
}
private static bool TryClientRevive(Il2Cpp.NolanBehaviour target)
{
if (!NetworkHelper.IsNetworkRunning())
{
return false;
}
try
{
var reviverEntity = GetLocalPlayerEntity();
if (reviverEntity == null)
{
return false;
}
var targetEntity = target.entity;
ReviveEvent.Post(GlobalTargets.OnlyServer, targetEntity, reviverEntity);
return true;
}
catch (Exception ex)
{
MelonLogger.Warning($"[ReviveHelper] Client revive failed: {ex.Message}");
return false;
}
}
private static bool TryInteractRevive(Il2Cpp.NolanBehaviour target)
{
try
{
Il2Cpp.SurvivalReviveInteractable interactable = UnityEngine.Object.FindObjectOfType<Il2Cpp.SurvivalReviveInteractable>();
if (interactable == null)
{
return false;
}
if (interactable.CanInteract(target.gameObject))
{
interactable.Interact(target.gameObject);
return true;
}
}
catch (Exception ex)
{
MelonLogger.Warning($"[ReviveHelper] Interact revive failed: {ex.Message}");
}
return false;
}
private static BoltEntity? GetLocalPlayerEntity()
{
var players = GameObject.FindGameObjectsWithTag("Player");
for (int i = 0; i < players.Length; i++)
{
var nb = players[i].GetComponent<Il2Cpp.NolanBehaviour>();
if (nb != null && nb.entity != null && nb.entity.IsAttached && nb.entity.IsOwner)
{
return nb.entity;
}
}
return null;
}
private static void NotifySceneListeners(BoltEntity player, BoltEntity reviver)
{
foreach (var pet in UnityEngine.Object.FindObjectsOfType<Il2Cpp.PetController>())
{
pet.OnReviveEvent(player, reviver);
}
foreach (var mgr in UnityEngine.Object.FindObjectsOfType<Il2Cpp.ReconnectManager>())
{
mgr.OnReviveEvent(player, reviver);
}
foreach (var web in UnityEngine.Object.FindObjectsOfType<Il2Cpp.InnWebController>())
{
web.OnReviveEvent(player, reviver);
}
foreach (var crawl in UnityEngine.Object.FindObjectsOfType<Il2Cpp.InnShojiDoorCrawlRendering>())
{
crawl.OnReviveEvent(player, reviver);
}
foreach (var deadRealm in UnityEngine.Object.FindObjectsOfType<Il2Cpp.ManorDeadRealmTrigger>())
{
deadRealm.OnReviveEvent(player, reviver);
}
foreach (var poison in UnityEngine.Object.FindObjectsOfType<Il2Cpp.PoisonBox>())
{
poison.OnReviveEvent(player, reviver);
}
foreach (var stairs in UnityEngine.Object.FindObjectsOfType<Il2Cpp.TriggerStairsCrawlState>())
{
stairs.OnReviveEvent(player, reviver);
}
}
}
}

View File

@@ -1,326 +1,495 @@
using UnityEngine; using UnityEngine;
using Il2CppOpsive.UltimateCharacterController.Character; using Il2CppOpsive.UltimateCharacterController.Character;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections; using System.Collections;
using MelonLoader; using MelonLoader;
using Il2CppPhoton.Bolt; using Il2CppPhoton.Bolt;
namespace DevourClient.Helpers namespace DevourClient.Helpers
{ {
public class BasePlayer public class BasePlayer
{ {
public GameObject p_GameObject { get; set; } = default!; public GameObject? p_GameObject { get; set; } = default!;
public string Name { get; set; } = default!; public string Name { get; set; } = default!;
public string Id { get; set; } = default!; public string Id { get; set; } = default!;
public void Kill() public void Kill()
{ {
if (p_GameObject == null) if (p_GameObject == null)
{ {
return; return;
} }
Il2Cpp.SurvivalAzazelBehaviour sab = Il2Cpp.SurvivalAzazelBehaviour.FindObjectOfType<Il2Cpp.SurvivalAzazelBehaviour>(); Il2Cpp.SurvivalAzazelBehaviour sab = Il2Cpp.SurvivalAzazelBehaviour.FindObjectOfType<Il2Cpp.SurvivalAzazelBehaviour>();
if (sab == null) if (sab == null)
{ {
return; return;
} }
sab.OnKnockout(sab.gameObject, p_GameObject); sab.OnKnockout(sab.gameObject, p_GameObject);
} }
public void Revive() public void Jumpscare() //TOFIX doesn't seem to be working
{ {
if (p_GameObject == null) if (!BoltNetwork.IsServer)
{ {
return; MelonLogger.Msg("You need to be server !");
} return;
}
Il2Cpp.NolanBehaviour nb = p_GameObject.GetComponent<Il2Cpp.NolanBehaviour>();
Il2Cpp.SurvivalReviveInteractable _reviveInteractable = UnityEngine.Object.FindObjectOfType<Il2Cpp.SurvivalReviveInteractable>(); if (p_GameObject == null)
{
_reviveInteractable.Interact(nb.gameObject); return;
} }
public void Jumpscare() Il2Cpp.SurvivalAzazelBehaviour sab = Il2Cpp.SurvivalAzazelBehaviour.FindObjectOfType<Il2Cpp.SurvivalAzazelBehaviour>();
{
if (!BoltNetwork.IsServer) if (sab == null)
{ {
MelonLogger.Msg("You need to be server !"); return;
return; }
}
sab.OnPickedUpPlayer(sab.gameObject, p_GameObject, false);
if (p_GameObject == null)
{ /*
return; MelonLogger.Msg(Name);
} Il2Cpp.JumpScare _jumpscare = UnityEngine.Object.FindObjectOfType<Il2Cpp.JumpScare>();
_jumpscare.player = p_GameObject;
Il2Cpp.SurvivalAzazelBehaviour sab = Il2Cpp.SurvivalAzazelBehaviour.FindObjectOfType<Il2Cpp.SurvivalAzazelBehaviour>(); _jumpscare.Activate(p_GameObject.GetComponent<BoltEntity>());
*/
if (sab == null) }
{
return; public void LockInCage()
} {
if (p_GameObject == null)
sab.OnPickedUpPlayer(sab.gameObject, p_GameObject, false); {
return;
/* }
MelonLogger.Msg(Name);
Il2Cpp.JumpScare _jumpscare = UnityEngine.Object.FindObjectOfType<Il2Cpp.JumpScare>(); BoltNetwork.Instantiate(BoltPrefabs.Cage, p_GameObject.transform.position, Quaternion.identity);
_jumpscare.player = p_GameObject; }
_jumpscare.Activate(p_GameObject.GetComponent<BoltEntity>());
*/ public void TP()
} {
if (p_GameObject == null)
public void LockInCage() {
{ return;
if (p_GameObject == null) }
{
return; Il2Cpp.NolanBehaviour nb = Player.GetPlayer();
} nb.TeleportTo(p_GameObject.transform.position, Quaternion.identity);
}
BoltNetwork.Instantiate(BoltPrefabs.Cage, p_GameObject.transform.position, Quaternion.identity);
public void TPAzazel()
} {
if (p_GameObject == null)
public void TP() {
{ return;
if (p_GameObject == null) }
{
return; UltimateCharacterLocomotion ucl = Helpers.Map.GetAzazel().GetComponent<UltimateCharacterLocomotion>();
}
if (ucl)
Il2Cpp.NolanBehaviour nb = Player.GetPlayer(); {
nb.TeleportTo(p_GameObject.transform.position, Quaternion.identity); ucl.SetPosition(p_GameObject.transform.position);
} }
else
public void TPAzazel() {
{ MelonLogger.Error("Azazel not found!");
if (p_GameObject == null) return;
{ }
return; }
}
public void ShootPlayer()
UltimateCharacterLocomotion ucl = Helpers.Map.GetAzazel().GetComponent<UltimateCharacterLocomotion>(); {
if (!BoltNetwork.IsServer)
try {
{ MelonLogger.Msg("You need to be server !");
ucl.SetPosition(p_GameObject.transform.position); return;
} }
catch { return; }
} if (p_GameObject == null)
} {
public class Player return;
{ }
public static bool IsInGame()
{ Il2Cpp.AzazelSamBehaviour _azazelSam = UnityEngine.Object.FindObjectOfType<Il2Cpp.AzazelSamBehaviour>();
Il2Cpp.OptionsHelpers optionsHelpers = UnityEngine.Object.FindObjectOfType<Il2Cpp.OptionsHelpers>();
return optionsHelpers.inGame; if (_azazelSam)
} {
_azazelSam.OnShootPlayer(p_GameObject, true);
public static bool IsInGameOrLobby() }
{ }
return GetPlayer() != null;
} }
public class Player
public static Il2Cpp.NolanBehaviour GetPlayer() {
{ public static bool IsInGame()
if (Entities.LocalPlayer_.p_GameObject == null) {
{ Il2Cpp.OptionsHelpers optionsHelpers = UnityEngine.Object.FindObjectOfType<Il2Cpp.OptionsHelpers>();
return null!; return optionsHelpers.inGame;
} }
return Entities.LocalPlayer_.p_GameObject.GetComponent<Il2Cpp.NolanBehaviour>(); public static bool IsInGameOrLobby()
} {
return GetPlayer() != null;
public static bool IsPlayerCrawling() }
{
Il2Cpp.NolanBehaviour nb = Player.GetPlayer(); public static Il2Cpp.NolanBehaviour GetPlayer()
{
if (nb == null) if (Entities.LocalPlayer_.p_GameObject == null)
{ {
return false; return null!;
} }
return nb.IsCrawling(); return Entities.LocalPlayer_.p_GameObject.GetComponent<Il2Cpp.NolanBehaviour>();
} }
} public static bool IsPlayerCrawling()
{
public class Entities Il2Cpp.NolanBehaviour nb = Player.GetPlayer();
{
public static int MAX_PLAYERS = 4; //will change by calling CreateCustomizedLobby if (nb == null)
{
public static BasePlayer LocalPlayer_ = new BasePlayer(); return false;
public static BasePlayer[] Players = default!; }
public static Il2Cpp.GoatBehaviour[] GoatsAndRats = default!;
public static Il2Cpp.SurvivalInteractable[] SurvivalInteractables = default!; return nb.IsCrawling();
public static Il2Cpp.KeyBehaviour[] Keys = default!; }
public static Il2Cpp.SurvivalDemonBehaviour[] Demons = default!;
public static Il2Cpp.SpiderBehaviour[] Spiders = default!; }
public static Il2Cpp.GhostBehaviour[] Ghosts = default!;
public static Il2Cpp.SurvivalAzazelBehaviour[] Azazels = default!; public class Entities
public static Il2Cpp.BoarBehaviour[] Boars = default!; {
public static Il2Cpp.CorpseBehaviour[] Corpses = default!; public static int MAX_PLAYERS = 4; //will change by calling CreateCustomizedLobby
public static IEnumerator GetLocalPlayer() public static BasePlayer LocalPlayer_ = new BasePlayer();
{ public static BasePlayer[]? Players = default!;
for (;;) public static Il2Cpp.GoatBehaviour[]? GoatsAndRats = default!;
{ public static Il2Cpp.SurvivalInteractable[]? SurvivalInteractables = default!;
GameObject[] currentPlayers = GameObject.FindGameObjectsWithTag("Player"); public static Il2Cpp.KeyBehaviour[]? Keys = default!;
public static Il2Cpp.SurvivalDemonBehaviour[]? Demons = default!;
for (int i = 0; i < currentPlayers.Length; i++) public static Il2Cpp.SpiderBehaviour[]? Spiders = default!;
{ public static Il2Cpp.GhostBehaviour[]? Ghosts = default!;
if (currentPlayers[i].GetComponent<Il2Cpp.NolanBehaviour>().entity.IsOwner) public static Il2Cpp.SurvivalAzazelBehaviour[]? Azazels = default!;
{ public static Il2Cpp.BoarBehaviour[]? Boars = default!;
LocalPlayer_.p_GameObject = currentPlayers[i]; public static Il2Cpp.CorpseBehaviour[]? Corpses = default!;
break; public static Il2Cpp.CrowBehaviour[]? Crows = default!;
} public static Il2Cpp.ManorLumpController[]? Lumps = default!;
} public static Il2Cpp.GoatBehaviour[]? DirtyHeads = default!;
public static Il2Cpp.MonkeyBehaviour[]? Monkeys = default!;
// Wait 5 seconds before caching objects again. public static Il2Cpp.GoatBehaviour[]? Dolls = default!;
yield return new WaitForSeconds(5f); public static Il2Cpp.CollectableInteractable[]? Collectables = default!;
}
} // Coroutine lifecycle management
private static List<object> activeCoroutines = new List<object>();
public static IEnumerator GetAllPlayers() private static bool isRunning = false;
{
for (;;) public static IEnumerator GetLocalPlayer()
{ {
GameObject[] players = GameObject.FindGameObjectsWithTag("Player"); while (isRunning)
Players = new BasePlayer[players.Length]; {
GameObject[] currentPlayers = GameObject.FindGameObjectsWithTag("Player");
int i = 0;
foreach (GameObject p in players) for (int i = 0; i < currentPlayers.Length; i++)
{ {
string player_name = ""; if (currentPlayers[i].GetComponent<Il2Cpp.NolanBehaviour>().entity.IsOwner)
string player_id = "-1"; {
LocalPlayer_.p_GameObject = currentPlayers[i];
Il2Cpp.DissonancePlayerTracking dpt = p.gameObject.GetComponent<Il2Cpp.DissonancePlayerTracking>(); break;
if (dpt != null) }
{ }
player_name = dpt.state.PlayerName;
player_id = dpt.state.PlayerId; // Wait 5 seconds before caching objects again.
} yield return new WaitForSeconds(5f);
}
if (Players[i] == null) }
{
Players[i] = new BasePlayer(); public static IEnumerator GetAllPlayers()
} {
while (isRunning)
Players[i].Id = player_id; {
Players[i].Name = player_name; GameObject[] players = GameObject.FindGameObjectsWithTag("Player");
Players[i].p_GameObject = p; Players = new BasePlayer[players.Length];
i++; int i = 0;
} foreach (GameObject p in players)
{
string player_name = "";
// Wait 5 seconds before caching objects again. string player_id = "-1";
yield return new WaitForSeconds(5f);
} Il2Cpp.DissonancePlayerTracking dpt = p.gameObject.GetComponent<Il2Cpp.DissonancePlayerTracking>();
} if (dpt != null)
public static IEnumerator GetGoatsAndRats() {
{ player_name = dpt.state.PlayerName;
for (;;) player_id = dpt.state.PlayerId;
{ }
GoatsAndRats = Il2Cpp.GoatBehaviour.FindObjectsOfType<Il2Cpp.GoatBehaviour>();
if (Players[i] == null)
// Wait 5 seconds before caching objects again. {
yield return new WaitForSeconds(5f); Players[i] = new BasePlayer();
} }
}
Players[i].Id = player_id;
public static IEnumerator GetSurvivalInteractables() Players[i].Name = player_name;
{ Players[i].p_GameObject = p;
for (;;)
{ i++;
SurvivalInteractables = Il2Cpp.SurvivalInteractable.FindObjectsOfType<Il2Cpp.SurvivalInteractable>(); }
// Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f); // Wait 5 seconds before caching objects again.
} yield return new WaitForSeconds(5f);
} }
}
public static IEnumerator GetKeys() public static IEnumerator GetGoatsAndRats()
{ {
for (;;) while (isRunning)
{ {
Keys = Il2Cpp.KeyBehaviour.FindObjectsOfType<Il2Cpp.KeyBehaviour>(); GoatsAndRats = Il2Cpp.GoatBehaviour.FindObjectsOfType<Il2Cpp.GoatBehaviour>();
// Wait 5 seconds before caching objects again. // Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f); yield return new WaitForSeconds(5f);
} }
} }
public static IEnumerator GetDemons() public static IEnumerator GetSurvivalInteractables()
{ {
for (;;) while (isRunning)
{ {
Demons = Il2Cpp.SurvivalDemonBehaviour.FindObjectsOfType<Il2Cpp.SurvivalDemonBehaviour>(); SurvivalInteractables = Il2Cpp.SurvivalInteractable.FindObjectsOfType<Il2Cpp.SurvivalInteractable>();
// Wait 5 seconds before caching objects again. // Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f); yield return new WaitForSeconds(5f);
} }
} }
public static IEnumerator GetSpiders() public static IEnumerator GetKeys()
{ {
for (;;) while (isRunning)
{ {
Spiders = Il2Cpp.SpiderBehaviour.FindObjectsOfType<Il2Cpp.SpiderBehaviour>(); Keys = Il2Cpp.KeyBehaviour.FindObjectsOfType<Il2Cpp.KeyBehaviour>();
// Wait 5 seconds before caching objects again. // Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f); yield return new WaitForSeconds(5f);
} }
} }
public static IEnumerator GetGhosts() public static IEnumerator GetDemons()
{ {
for (;;) while (isRunning)
{ {
Ghosts = Il2Cpp.GhostBehaviour.FindObjectsOfType<Il2Cpp.GhostBehaviour>(); Demons = Il2Cpp.SurvivalDemonBehaviour.FindObjectsOfType<Il2Cpp.SurvivalDemonBehaviour>();
// Wait 5 seconds before caching objects again. // Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f); yield return new WaitForSeconds(5f);
} }
} }
public static IEnumerator GetBoars() public static IEnumerator GetSpiders()
{ {
for (; ; ) while (isRunning)
{ {
Boars = Il2Cpp.BoarBehaviour.FindObjectsOfType<Il2Cpp.BoarBehaviour>(); Spiders = Il2Cpp.SpiderBehaviour.FindObjectsOfType<Il2Cpp.SpiderBehaviour>();
// Wait 5 seconds before caching objects again. // Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f); yield return new WaitForSeconds(5f);
} }
} }
public static IEnumerator GetCorpses() public static IEnumerator GetGhosts()
{ {
for (; ; ) while (isRunning)
{ {
Corpses = Il2Cpp.CorpseBehaviour.FindObjectsOfType<Il2Cpp.CorpseBehaviour>(); Ghosts = Il2Cpp.GhostBehaviour.FindObjectsOfType<Il2Cpp.GhostBehaviour>();
// Wait 5 seconds before caching objects again. // Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f); yield return new WaitForSeconds(5f);
} }
} }
public static IEnumerator GetAzazels() public static IEnumerator GetBoars()
{ {
/* while (isRunning)
* ikr AzazelS, because in case we spawn multiple we want the esp to render all of them {
*/ Boars = Il2Cpp.BoarBehaviour.FindObjectsOfType<Il2Cpp.BoarBehaviour>();
for (;;)
{ // Wait 5 seconds before caching objects again.
Azazels = Il2Cpp.SurvivalAzazelBehaviour.FindObjectsOfType<Il2Cpp.SurvivalAzazelBehaviour>(); yield return new WaitForSeconds(5f);
}
// Wait 5 seconds before caching objects again. }
yield return new WaitForSeconds(5f);
} public static IEnumerator GetCorpses()
} {
} while (isRunning)
} {
Corpses = Il2Cpp.CorpseBehaviour.FindObjectsOfType<Il2Cpp.CorpseBehaviour>();
// Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f);
}
}
public static IEnumerator GetCrows()
{
while (isRunning)
{
Crows = Il2Cpp.CrowBehaviour.FindObjectsOfType<Il2Cpp.CrowBehaviour>();
// Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f);
}
}
public static IEnumerator GetLumps()
{
while (isRunning)
{
Lumps = Il2Cpp.ManorLumpController.FindObjectsOfType<Il2Cpp.ManorLumpController>();
// Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f);
}
}
public static IEnumerator GetDirtyHeads()
{
while (isRunning)
{
DirtyHeads = Il2Cpp.GoatBehaviour.FindObjectsOfType<Il2Cpp.GoatBehaviour>();
// Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f);
}
}
public static IEnumerator GetMonkeys()
{
while (isRunning)
{
Monkeys = Il2Cpp.MonkeyBehaviour.FindObjectsOfType<Il2Cpp.MonkeyBehaviour>();
// Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f);
}
}
public static IEnumerator GetDolls()
{
while (isRunning)
{
Dolls = Il2Cpp.GoatBehaviour.FindObjectsOfType<Il2Cpp.GoatBehaviour>();
// Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f);
}
}
public static IEnumerator GetAzazels()
{
while (isRunning)
{
Azazels = Il2Cpp.SurvivalAzazelBehaviour.FindObjectsOfType<Il2Cpp.SurvivalAzazelBehaviour>();
// Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f);
}
}
public static IEnumerator GetCollectables()
{
while (isRunning)
{
Collectables = Il2Cpp.CollectableInteractable.FindObjectsOfType<Il2Cpp.CollectableInteractable>();
// Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f);
}
}
public static void StartAllCoroutines()
{
isRunning = true;
}
public static void StopAllCoroutines()
{
try
{
isRunning = false;
foreach (var coroutine in activeCoroutines)
{
if (coroutine != null)
{
MelonCoroutines.Stop(coroutine);
}
}
activeCoroutines.Clear();
CleanupCachedObjects();
MelonLogger.Msg("All coroutines stopped and cleaned up successfully.");
}
catch (System.Exception ex)
{
MelonLogger.Error($"Error stopping coroutines: {ex.Message}");
}
}
public static void CleanupCachedObjects()
{
try
{
if (Players != null)
{
foreach (var player in Players)
{
if (player != null)
{
player.p_GameObject = null;
}
}
}
Players = null;
GoatsAndRats = null;
SurvivalInteractables = null;
Keys = null;
Demons = null;
Spiders = null;
Ghosts = null;
Azazels = null;
Boars = null;
Corpses = null;
Crows = null;
Lumps = null;
DirtyHeads = null;
Monkeys = null;
Dolls = null;
Collectables = null;
if (LocalPlayer_ != null)
{
LocalPlayer_.p_GameObject = null;
}
MelonLogger.Msg("Cached objects cleaned up successfully.");
}
catch (System.Exception ex)
{
MelonLogger.Error($"Error cleaning up cached objects: {ex.Message}");
}
}
public static void RegisterCoroutine(object coroutine)
{
if (coroutine != null && !activeCoroutines.Contains(coroutine))
{
activeCoroutines.Add(coroutine);
}
}
}
}

View File

@@ -1,5 +1,7 @@
using HarmonyLib; using HarmonyLib;
using DevourClient; using Il2Cpp;
using UnityEngine;
using System;
namespace DevourClient.Hooks namespace DevourClient.Hooks
{ {
@@ -11,23 +13,25 @@ namespace DevourClient.Hooks
[HarmonyPrefix] [HarmonyPrefix]
static void Prefix(ref Il2CppOpsive.UltimateCharacterController.Traits.Attribute attribute) static void Prefix(ref Il2CppOpsive.UltimateCharacterController.Traits.Attribute attribute)
{ {
if (Load.unlimitedUV && attribute.m_Name == "Battery") if (ClientMain.unlimitedUV && attribute.m_Name == "Battery")
{ {
attribute.m_Value = 100.0f; attribute.m_Value = 100.0f;
return; return;
} }
} }
} }
[HarmonyPatch(typeof(Il2Cpp.RankHelpers))] [HarmonyPatch(typeof(Il2Cpp.RankHelpers))]
[HarmonyPatch(nameof(Il2Cpp.RankHelpers.CalculateExpGain))] //annotation boiler plate to tell Harmony what to patch. Refer to docs. [HarmonyPatch(nameof(Il2Cpp.RankHelpers.CalculateExpGain))] //annotation boiler plate to tell Harmony what to patch. Refer to docs.
static class RankHelpers_CalculateExpGain static class RankHelpers_CalculateExpGain
{ {
static void Postfix(ref Il2Cpp.RankHelpers.ExpGainInfo __result) static void Postfix(ref Il2Cpp.RankHelpers.ExpGainInfo __result)
{ {
if (Load.exp_modifier) if (ClientMain.exp_modifier)
{ {
__result.totalExp = (int)Load.exp; __result.totalExp = (int)ClientMain.exp;
} }
return; return;
} }
@@ -73,8 +77,6 @@ namespace DevourClient.Hooks
//MelonLoader.MelonLogger.Msg("currentPrice : " + outfit.currentPrice); //MelonLoader.MelonLogger.Msg("currentPrice : " + outfit.currentPrice);
//MelonLoader.MelonLogger.Msg("isOwned : " + outfit.isOwned); //MelonLoader.MelonLogger.Msg("isOwned : " + outfit.isOwned);
//MelonLoader.MelonLogger.Msg("isHidden : " + outfit.isHidden); //MelonLoader.MelonLogger.Msg("isHidden : " + outfit.isHidden);
outfit.basePrice = 0;
outfit.currentPrice = 0;
outfit.isOwned = true; outfit.isOwned = true;
outfit.isHidden = false; outfit.isHidden = false;
return; return;
@@ -119,5 +121,31 @@ namespace DevourClient.Hooks
return; return;
} }
} }
[HarmonyPatch(typeof(ManorMirrorController))]
[HarmonyPatch(nameof(ManorMirrorController.IsBroken))] //annotation boiler plate to tell Harmony what to patch. Refer to docs.
static class ManorMirrorController_IsBroken
{
static void Postfix(ref bool __result)
{
if (ClientMain.infinite_mirrors)
__result = false;
}
}
[HarmonyPatch(typeof(Il2Cpp.DevourInput))]
[HarmonyPatch(nameof(Il2Cpp.DevourInput.GetLongPress))]
static class DevourInput_GetLongPress_Patch
{
static bool Prefix(ref bool __result, string name, ref float duration, bool waitForRelease)
{
if (!DevourClient.ClientMain.InstantInteractionEnabled)
return true;
duration = 0.05f;
return true;
}
}
} }
} }

View File

@@ -0,0 +1,181 @@
using System.Collections.Generic;
using DevourClient.Localization.Translations;
namespace DevourClient.Localization
{
public enum Language
{
English,
Chinese,
French,
German,
Spanish,
Japanese,
Korean,
Russian,
Portuguese,
Italian,
Vietnamese
}
public static class MultiLanguageSystem
{
public static Language CurrentLanguage { get; set; } = Language.English;
private static readonly Dictionary<Language, string> LanguageDisplayNames = new Dictionary<Language, string>
{
{ Language.English, "English" },
{ Language.Chinese, "简体中文" },
{ Language.French, "Français" },
{ Language.German, "Deutsch" },
{ Language.Spanish, "Español" },
{ Language.Japanese, "日本語" },
{ Language.Korean, "한국어" },
{ Language.Russian, "Русский" },
{ Language.Portuguese, "Português" },
{ Language.Italian, "Italiano" },
{ Language.Vietnamese, "Tiếng Việt" }
};
private static readonly Dictionary<string, Dictionary<Language, string>> Translations =
new Dictionary<string, Dictionary<Language, string>>();
static MultiLanguageSystem()
{
InitializeTranslations();
}
private static void InitializeTranslations()
{
// Load translations from separate language files
LoadTranslationsFromFiles();
}
private static void LoadTranslationsFromFiles()
{
// Get all English keys first (as the base)
var englishTranslations = EnglishTranslations.GetTranslations();
// Initialize all translation entries with English as default
foreach (var kvp in englishTranslations)
{
Translations[kvp.Key] = new Dictionary<Language, string>
{
{ Language.English, kvp.Value }
};
}
// Load translations for each language
var chineseTranslations = ChineseTranslations.GetTranslations();
var frenchTranslations = FrenchTranslations.GetTranslations();
var germanTranslations = GermanTranslations.GetTranslations();
var spanishTranslations = SpanishTranslations.GetTranslations();
var japaneseTranslations = JapaneseTranslations.GetTranslations();
var koreanTranslations = KoreanTranslations.GetTranslations();
var russianTranslations = RussianTranslations.GetTranslations();
var portugueseTranslations = PortugueseTranslations.GetTranslations();
var italianTranslations = ItalianTranslations.GetTranslations();
var vietnameseTranslations = VietnameseTranslations.GetTranslations();
// Merge translations into the main dictionary
foreach (var key in englishTranslations.Keys)
{
if (chineseTranslations.ContainsKey(key))
Translations[key][Language.Chinese] = chineseTranslations[key];
if (frenchTranslations.ContainsKey(key))
Translations[key][Language.French] = frenchTranslations[key];
if (germanTranslations.ContainsKey(key))
Translations[key][Language.German] = germanTranslations[key];
if (spanishTranslations.ContainsKey(key))
Translations[key][Language.Spanish] = spanishTranslations[key];
if (japaneseTranslations.ContainsKey(key))
Translations[key][Language.Japanese] = japaneseTranslations[key];
if (koreanTranslations.ContainsKey(key))
Translations[key][Language.Korean] = koreanTranslations[key];
if (russianTranslations.ContainsKey(key))
Translations[key][Language.Russian] = russianTranslations[key];
if (portugueseTranslations.ContainsKey(key))
Translations[key][Language.Portuguese] = portugueseTranslations[key];
if (italianTranslations.ContainsKey(key))
Translations[key][Language.Italian] = italianTranslations[key];
if (vietnameseTranslations.ContainsKey(key))
Translations[key][Language.Vietnamese] = vietnameseTranslations[key];
}
}
// Old method removed - translations are now loaded from separate files
// Keep AddTranslation method for backward compatibility (used by AddCustomTranslation)
private static void AddTranslation(string english,
string? cn = null, string? fr = null, string? de = null, string? es = null,
string? ja = null, string? ko = null, string? ru = null, string? pt = null, string? it = null, string? vi = null)
{
var translations = new Dictionary<Language, string>
{
{ Language.English, english }
};
if (cn != null) translations[Language.Chinese] = cn;
if (fr != null) translations[Language.French] = fr;
if (de != null) translations[Language.German] = de;
if (es != null) translations[Language.Spanish] = es;
if (ja != null) translations[Language.Japanese] = ja;
if (ko != null) translations[Language.Korean] = ko;
if (ru != null) translations[Language.Russian] = ru;
if (pt != null) translations[Language.Portuguese] = pt;
if (it != null) translations[Language.Italian] = it;
if (vi != null) translations[Language.Vietnamese] = vi;
Translations[english] = translations;
}
public static string Translate(string englishText)
{
if (string.IsNullOrEmpty(englishText))
return englishText;
if (CurrentLanguage == Language.English)
return englishText;
if (Translations.TryGetValue(englishText, out var languageDict))
{
if (languageDict.TryGetValue(CurrentLanguage, out var translation))
{
return translation;
}
}
return englishText;
}
public static string GetLanguageDisplayName(Language language)
{
return LanguageDisplayNames.TryGetValue(language, out var name) ? name : language.ToString();
}
public static Language[] GetAllLanguages()
{
return (Language[])System.Enum.GetValues(typeof(Language));
}
public static int GetTotalTranslationCount()
{
return Translations.Count;
}
public static void AddCustomTranslation(string englishText, Language language, string translation)
{
if (!Translations.ContainsKey(englishText))
{
Translations[englishText] = new Dictionary<Language, string>
{
{ Language.English, englishText }
};
}
Translations[englishText][language] = translation;
}
}
}

View File

@@ -0,0 +1,297 @@
using System.Collections.Generic;
namespace DevourClient.Localization.Translations
{
public static class ChineseTranslations
{
public static Dictionary<string, string> GetTranslations()
{
return new Dictionary<string, string>
{
{ "Altar", "祭坛" },
{ "Animal_Gate", "动物大门" },
{ "Anna", "安娜" },
{ "Asia", "亚洲" },
{ "Asylum", "精神病院" },
{ "AsylumDoor", "精神病院门" },
{ "AsylumDoubleDoor", "精神病院双开门" },
{ "AsylumWhiteDoor", "精神病院白门" },
{ "Australia", "澳大利亚" },
{ "Auto Respawn", "自动重生" },
{ "Auto farm items (x5)", "自动刷物品 (x5)" },
{ "Azazel", "Azazel" },
{ "Azazel & Demons", "Azazel 和恶魔" },
{ "Azazel ESP", "Azazel 透视" },
{ "Azazel ESP Color", "Azazel 透视颜色" },
{ "Azazel Snapline", "Azazel 连线" },
{ "AzazelAnna", "Azazel-Anna" },
{ "AzazelApril", "Azazel-April" },
{ "AzazelKai", "Azazel-Kai" },
{ "AzazelMolly", "Azazel-Molly" },
{ "AzazelNathan", "Azazel-Nathan" },
{ "AzazelSam", "Azazel-Sam" },
{ "AzazelZara", "Azazel-Zara" },
{ "Barbed Wire", "带刺铁丝网" },
{ "Battery", "电池" },
{ "Battery ESP", "电池透视" },
{ "Big Flashlight", "大手电筒" },
{ "Bleach", "漂白剂" },
{ "Bleach ESP", "漂白剂透视" },
{ "Boar", "野猪" },
{ "Bone", "骨头" },
{ "Bone ESP", "骨头透视" },
{ "Burn a ritual object", "燃烧一个仪式物品" },
{ "Burn all ritual objects", "燃烧所有仪式物品" },
{ "Cage", "笼子" },
{ "Cake", "蛋糕" },
{ "Cake ESP", "蛋糕透视" },
{ "Carnival", "嘉年华" },
{ "Cherry Blossom", "樱花" },
{ "Clean Head ESP", "清洁头颅透视" },
{ "Collectables ESP", "收藏品透视" },
{ "Clean The Fountains", "清洁喷泉" },
{ "CleanHead", "干净的头颅" },
{ "Client", "客户端" },
{ "Coin", "硬币" },
{ "Coin ESP", "硬币透视" },
{ "Connection ID", "连接ID" },
{ "Corpse", "尸体" },
{ "Corpse ESP", "尸体透视" },
{ "Create Lobby", "创建房间" },
{ "Crosshair", "准星" },
{ "Crow", "乌鸦" },
{ "Crow ESP", "乌鸦透视" },
{ "Demon", "恶魔" },
{ "Demon ESP", "恶魔透视" },
{ "Despawn Boars", "移除野猪" },
{ "Despawn Corpses", "移除尸体" },
{ "Despawn Crows", "移除乌鸦" },
{ "Despawn Demons", "移除恶魔" },
{ "Despawn Ghosts", "移除幽灵" },
{ "Despawn Inmates", "移除囚犯" },
{ "Despawn Lumps", "移除肿块" },
{ "Despawn Monkeys", "移除猴子" },
{ "Despawn Spiders", "移除蜘蛛" },
{ "Devour", "农舍" },
{ "DevourDoorBack", "后门" },
{ "DevourDoorMain", "主门" },
{ "DevourDoorRoom", "房间门" },
{ "Dirty Head ESP", "污秽头颅透视" },
{ "DirtyHead", "污秽头颅" },
{ "Doll", "玩偶" },
{ "Doll ESP", "玩偶透视" },
{ "Doll Head ESP", "娃娃头透视" },
{ "DollHead", "玩偶头" },
{ "Door", "门" },
{ "ESP", "透视" },
{ "ESP Settings", "透视设置" },
{ "Egg", "蛋" },
{ "Egg ESP", "鸡蛋透视" },
{ "Egg-1", "鸡蛋-1" },
{ "Egg-10", "鸡蛋-10" },
{ "Egg-2", "鸡蛋-2" },
{ "Egg-3", "鸡蛋-3" },
{ "Egg-4", "鸡蛋-4" },
{ "Egg-5", "鸡蛋-5" },
{ "Egg-6", "鸡蛋-6" },
{ "Egg-7", "鸡蛋-7" },
{ "Egg-8", "鸡蛋-8" },
{ "Egg-9", "鸡蛋-9" },
{ "Egg-Clean-1", "鸡蛋-1" },
{ "Egg-Clean-10", "鸡蛋-10" },
{ "Egg-Clean-2", "鸡蛋-2" },
{ "Egg-Clean-3", "鸡蛋-3" },
{ "Egg-Clean-4", "鸡蛋-4" },
{ "Egg-Clean-5", "鸡蛋-5" },
{ "Egg-Clean-6", "鸡蛋-6" },
{ "Egg-Clean-7", "鸡蛋-7" },
{ "Egg-Clean-8", "鸡蛋-8" },
{ "Egg-Clean-9", "鸡蛋-9" },
{ "Elevator_Door", "电梯门" },
{ "Entities", "实体" },
{ "Error", "错误" },
{ "Europe", "欧洲" },
{ "Exit", "退出" },
{ "Exp Modifier", "经验修改" },
{ "Exp Value", "经验值" },
{ "Farmhouse", "农舍" },
{ "Fast Move", "快速移动" },
{ "First Aid ESP", "急救包透视" },
{ "First aid", "急救包" },
{ "FirstAid", "急救包" },
{ "Flashlight Color", "手电筒颜色" },
{ "Fly", "飞行" },
{ "Fly Speed", "飞行速度" },
{ "Feather", "羽毛" },
{ "Food", "食物" },
{ "Force Start Game", "强制开始游戏" },
{ "Fountain", "喷泉" },
{ "Freeze azazel", "冻结 Azazel" },
{ "Fullbright", "全亮" },
{ "Fuse", "保险丝" },
{ "Fuse ESP", "保险丝透视" },
{ "Gasoline", "汽油" },
{ "Gasoline ESP", "汽油透视" },
{ "Gate", "大门" },
{ "Ghost", "鬼魂" },
{ "Ghost ESP", "幽灵透视" },
{ "Goat", "山羊" },
{ "Goat ESP", "山羊透视" },
{ "Goat/Rat ESP", "山羊/老鼠透视" },
{ "Hay", "干草" },
{ "Hay ESP", "干草透视" },
{ "Head", "头颅" },
{ "Horseshoe", "马蹄铁" },
{ "Host", "房主" },
{ "Host Only", "仅房主" },
{ "Infinite mirrors", "无限镜子" },
{ "Inmate", "囚犯" },
{ "Inmates ESP", "囚犯透视" },
{ "Inn", "旅馆" },
{ "InnDoor", "旅馆门" },
{ "InnDoubleDoor", "旅馆双开门" },
{ "InnShojiDoor", "旅馆障子门" },
{ "InnShrine", "旅馆神社" },
{ "InnWardrobe", "旅馆衣柜" },
{ "InnWoodenDoor", "旅馆木门" },
{ "Instant Win", "瞬间胜利" },
{ "Item ESP", "物品透视" },
{ "Items", "物品" },
{ "Japan", "日本" },
{ "Jumpscare", "跳吓" },
{ "Key", "钥匙" },
{ "Key ESP", "钥匙透视" },
{ "Kill", "击杀" },
{ "Level", "等级" },
{ "Load Map:", "加载地图:" },
{ "Lobby Control", "房间控制" },
{ "Lobby Manager", "房间管理" },
{ "Lobby Size", "房间人数" },
{ "Lock in cage", "锁在笼子里" },
{ "Lump", "肿块" },
{ "Lump ESP", "肿块透视" },
{ "Manor", "庄园" },
{ "Map", "地图" },
{ "Matchbox", "火柴盒" },
{ "Matchbox ESP", "火柴盒透视" },
{ "Medicine ESP", "药品透视" },
{ "Menu", "菜单" },
{ "Mirror", "镜子" },
{ "Misc", "杂项" },
{ "Molly", "精神病院" },
{ "Monkey", "猴子" },
{ "Monkey ESP", "猴子透视" },
{ "Music Box ESP", "音乐盒透视" },
{ "MusicBox", "音乐盒" },
{ "MusicBox-Idle", "音乐盒" },
{ "Network", "网络" },
{ "Network Info", "网络信息" },
{ "Network Stats", "网络统计" },
{ "Not connected", "未连接网络" },
{ "Patch", "补丁" },
{ "Pig", "猪" },
{ "Pig ESP", "猪透视" },
{ "PigExcrement", "猪粪" },
{ "Ping", "延迟" },
{ "Play Random Sound", "播放随机音效" },
{ "Player", "玩家" },
{ "Instant Interaction", "立即交互" },
{ "Player Count", "玩家数" },
{ "Player ESP", "玩家透视" },
{ "Player ESP Color", "玩家透视颜色" },
{ "Player Snapline", "玩家连线" },
{ "Players", "玩家" },
{ "Present", "礼物" },
{ "Private Lobby", "私人房间" },
{ "Pumpkin", "南瓜" },
{ "Rat", "老鼠" },
{ "Rat ESP", "老鼠透视" },
{ "Region", "区域" },
{ "Revive", "复活" },
{ "Radial Menu", "轮盘菜单" },
{ "Ritual Book", "仪式书" },
{ "Rose", "玫瑰" },
{ "Ritual Book ESP", "仪式书透视" },
{ "Ritual Object ESP", "仪式物品透视" },
{ "Ritual Objects", "仪式物品" },
{ "RitualBook", "仪式书" },
{ "Boar ESP", "野猪透视" },
{ "Role", "角色" },
{ "RottenFood", "腐烂食物" },
{ "Rotten Food ESP", "腐烂食物透视" },
{ "Sam", "萨姆" },
{ "Shoot Player", "射击玩家" },
{ "Show Coordinates", "显示坐标" },
{ "Skeleton ESP", "骨骼透视" },
{ "Slaughterhouse", "屠宰场" },
{ "SlaughterhouseFireEscapeDoor", "屠宰场消防门" },
{ "South America", "南美洲" },
{ "South Korea", "韩国" },
{ "Spade", "铲子" },
{ "Spade ESP", "铲子透视" },
{ "Spam Chat", "刷屏聊天" },
{ "Spawnable Prefabs", "可生成物体" },
{ "Speed Multiplier", "速度倍数" },
{ "Spider", "蜘蛛" },
{ "Spider ESP", "蜘蛛透视" },
{ "Spoof Level", "伪装等级" },
{ "Spoof Name", "伪装名字" },
{ "Spoof Server Name", "伪装服务器名" },
{ "SurvivalAltarMolly", "莫莉祭坛" },
{ "SurvivalAltarSlaughterhouse", "屠宰场祭坛" },
{ "SurvivalAltarTown", "小镇祭坛" },
{ "SurvivalApril", "艾普尔" },
{ "SurvivalCultist", "邪教徒" },
{ "SurvivalFrank", "弗兰克" },
{ "SurvivalKai", "凯" },
{ "SurvivalMolly", "莫莉" },
{ "SurvivalNathan", "内森" },
{ "SurvivalRose", "罗斯" },
{ "SurvivalSmashableWindow", "可破坏窗户" },
{ "Switch realm", "切换领域" },
{ "Switch realm (house)", "切换领域(房屋)" },
{ "TP Azazel", "传送恶魔" },
{ "TP items to you", "传送物品到你" },
{ "TP to Azazel", "传送到 Azazel" },
{ "TV", "电视" },
{ "Teleport Keys", "传送钥匙" },
{ "Teleport to", "传送至" },
{ "TP Base", "传送至基地" },
{ "TP Altar", "传送至祭坛" },
{ "TP Basin", "传送至水池" },
{ "TP Fountain", "传送至喷泉" },
{ "Ticket", "票券" },
{ "Town", "小镇" },
{ "TownDoor", "小镇门" },
{ "TownDoor2", "小镇门2" },
{ "TownPentagram", "小镇五芒星" },
{ "TrashCan", "垃圾桶" },
{ "Truck_Shutter", "卡车卷帘门" },
{ "Turkey", "土耳其" },
{ "US East", "美东" },
{ "US South Central", "美国中南部" },
{ "US West", "美西" },
{ "Unlimited Stamina", "无限耐力" },
{ "Unlimited UV Light", "无限紫外线" },
{ "Unlock Achievements", "解锁成就" },
{ "Unlock Doors", "解锁门" },
{ "God Mode", "上帝模式" },
{ "Visuals", "视觉" },
{ "Waiting for the game to start", "等待游戏开始" },
{ "Walk In Lobby", "大厅行走" },
{ "Zara", "扎拉" },
{ "Gardener", "园丁" },
{ "Butler", "管家" },
{ "Bridesmaid 1", "伴娘 1" },
{ "Bridesmaid 2", "伴娘 2" },
{ "Cook", "厨师" },
{ "Groomsman 1", "伴郎 1" },
{ "Groomsman 2", "伴郎 2" },
{ "Maid", "女仆" },
{ "Photographer", "摄影师" },
{ "Priest", "牧师" },
{ "Menu Key", "菜单键" },
};
}
}
}

View File

@@ -0,0 +1,297 @@
using System.Collections.Generic;
namespace DevourClient.Localization.Translations
{
public static class EnglishTranslations
{
public static Dictionary<string, string> GetTranslations()
{
return new Dictionary<string, string>
{
{ "Altar", "Altar" },
{ "Animal_Gate", "Animal_Gate" },
{ "Anna", "Anna" },
{ "Asia", "Asia" },
{ "Asylum", "Asylum" },
{ "AsylumDoor", "AsylumDoor" },
{ "AsylumDoubleDoor", "AsylumDoubleDoor" },
{ "AsylumWhiteDoor", "AsylumWhiteDoor" },
{ "Australia", "Australia" },
{ "Auto Respawn", "Auto Respawn" },
{ "Auto farm items (x5)", "Auto farm items (x5)" },
{ "Azazel", "Azazel" },
{ "Azazel & Demons", "Azazel & Demons" },
{ "Azazel ESP", "Azazel ESP" },
{ "Azazel ESP Color", "Azazel ESP Color" },
{ "Azazel Snapline", "Azazel Snapline" },
{ "AzazelAnna", "AzazelAnna" },
{ "AzazelApril", "AzazelApril" },
{ "AzazelKai", "AzazelKai" },
{ "AzazelMolly", "AzazelMolly" },
{ "AzazelNathan", "AzazelNathan" },
{ "AzazelSam", "AzazelSam" },
{ "AzazelZara", "AzazelZara" },
{ "Barbed Wire", "Barbed Wire" },
{ "Battery", "Battery" },
{ "Battery ESP", "Battery ESP" },
{ "Big Flashlight", "Big Flashlight" },
{ "Bleach", "Bleach" },
{ "Bleach ESP", "Bleach ESP" },
{ "Boar", "Boar" },
{ "Bone", "Bone" },
{ "Bone ESP", "Bone ESP" },
{ "Burn a ritual object", "Burn a ritual object" },
{ "Burn all ritual objects", "Burn all ritual objects" },
{ "Cage", "Cage" },
{ "Cake", "Cake" },
{ "Cake ESP", "Cake ESP" },
{ "Carnival", "Carnival" },
{ "Cherry Blossom", "Cherry Blossom" },
{ "Clean Head ESP", "Clean Head ESP" },
{ "Collectables ESP", "Collectables ESP" },
{ "Clean The Fountains", "Clean The Fountains" },
{ "CleanHead", "CleanHead" },
{ "Client", "Client" },
{ "Coin", "Coin" },
{ "Coin ESP", "Coin ESP" },
{ "Connection ID", "Connection ID" },
{ "Corpse", "Corpse" },
{ "Corpse ESP", "Corpse ESP" },
{ "Create Lobby", "Create Lobby" },
{ "Crosshair", "Crosshair" },
{ "Crow", "Crow" },
{ "Crow ESP", "Crow ESP" },
{ "Demon", "Demon" },
{ "Demon ESP", "Demon ESP" },
{ "Despawn Boars", "Despawn Boars" },
{ "Despawn Corpses", "Despawn Corpses" },
{ "Despawn Crows", "Despawn Crows" },
{ "Despawn Demons", "Despawn Demons" },
{ "Despawn Ghosts", "Despawn Ghosts" },
{ "Despawn Inmates", "Despawn Inmates" },
{ "Despawn Lumps", "Despawn Lumps" },
{ "Despawn Monkeys", "Despawn Monkeys" },
{ "Despawn Spiders", "Despawn Spiders" },
{ "Devour", "Devour" },
{ "DevourDoorBack", "DevourDoorBack" },
{ "DevourDoorMain", "DevourDoorMain" },
{ "DevourDoorRoom", "DevourDoorRoom" },
{ "Dirty Head ESP", "Dirty Head ESP" },
{ "DirtyHead", "DirtyHead" },
{ "Doll", "Doll" },
{ "Doll ESP", "Doll ESP" },
{ "Doll Head ESP", "Doll Head ESP" },
{ "DollHead", "DollHead" },
{ "Door", "Door" },
{ "ESP", "ESP" },
{ "ESP Settings", "ESP Settings" },
{ "Egg", "Egg" },
{ "Egg ESP", "Egg ESP" },
{ "Egg-1", "Egg-1" },
{ "Egg-10", "Egg-10" },
{ "Egg-2", "Egg-2" },
{ "Egg-3", "Egg-3" },
{ "Egg-4", "Egg-4" },
{ "Egg-5", "Egg-5" },
{ "Egg-6", "Egg-6" },
{ "Egg-7", "Egg-7" },
{ "Egg-8", "Egg-8" },
{ "Egg-9", "Egg-9" },
{ "Egg-Clean-1", "Egg-Clean-1" },
{ "Egg-Clean-10", "Egg-Clean-10" },
{ "Egg-Clean-2", "Egg-Clean-2" },
{ "Egg-Clean-3", "Egg-Clean-3" },
{ "Egg-Clean-4", "Egg-Clean-4" },
{ "Egg-Clean-5", "Egg-Clean-5" },
{ "Egg-Clean-6", "Egg-Clean-6" },
{ "Egg-Clean-7", "Egg-Clean-7" },
{ "Egg-Clean-8", "Egg-Clean-8" },
{ "Egg-Clean-9", "Egg-Clean-9" },
{ "Elevator_Door", "Elevator_Door" },
{ "Entities", "Entities" },
{ "Error", "Error" },
{ "Europe", "Europe" },
{ "Exit", "Exit" },
{ "Exp Modifier", "Exp Modifier" },
{ "Exp Value", "Exp Value" },
{ "Farmhouse", "Farmhouse" },
{ "Fast Move", "Fast Move" },
{ "First Aid ESP", "First Aid ESP" },
{ "First aid", "First aid" },
{ "FirstAid", "FirstAid" },
{ "Flashlight Color", "Flashlight Color" },
{ "Fly", "Fly" },
{ "Fly Speed", "Fly Speed" },
{ "Feather", "Feather" },
{ "Food", "Food" },
{ "Force Start Game", "Force Start Game" },
{ "Fountain", "Fountain" },
{ "Freeze azazel", "Freeze azazel" },
{ "Fullbright", "Fullbright" },
{ "Fuse", "Fuse" },
{ "Fuse ESP", "Fuse ESP" },
{ "Gasoline", "Gasoline" },
{ "Gasoline ESP", "Gasoline ESP" },
{ "Gate", "Gate" },
{ "Ghost", "Ghost" },
{ "Ghost ESP", "Ghost ESP" },
{ "Goat", "Goat" },
{ "Goat ESP", "Goat ESP" },
{ "Goat/Rat ESP", "Goat/Rat ESP" },
{ "Hay", "Hay" },
{ "Hay ESP", "Hay ESP" },
{ "Head", "Head" },
{ "Horseshoe", "Horseshoe" },
{ "Host", "Host" },
{ "Host Only", "Host Only" },
{ "Infinite mirrors", "Infinite mirrors" },
{ "Inmate", "Inmate" },
{ "Inmates ESP", "Inmates ESP" },
{ "Inn", "Inn" },
{ "InnDoor", "InnDoor" },
{ "InnDoubleDoor", "InnDoubleDoor" },
{ "InnShojiDoor", "InnShojiDoor" },
{ "InnShrine", "InnShrine" },
{ "InnWardrobe", "InnWardrobe" },
{ "InnWoodenDoor", "InnWoodenDoor" },
{ "Instant Win", "Instant Win" },
{ "Item ESP", "Item ESP" },
{ "Items", "Items" },
{ "Japan", "Japan" },
{ "Jumpscare", "Jumpscare" },
{ "Key", "Key" },
{ "Key ESP", "Key ESP" },
{ "Kill", "Kill" },
{ "Level", "Level" },
{ "Load Map:", "Load Map:" },
{ "Lobby Control", "Lobby Control" },
{ "Lobby Manager", "Lobby Manager" },
{ "Lobby Size", "Lobby Size" },
{ "Lock in cage", "Lock in cage" },
{ "Lump", "Lump" },
{ "Lump ESP", "Lump ESP" },
{ "Manor", "Manor" },
{ "Map", "Map" },
{ "Matchbox", "Matchbox" },
{ "Matchbox ESP", "Matchbox ESP" },
{ "Medicine ESP", "Medicine ESP" },
{ "Menu", "Menu" },
{ "Mirror", "Mirror" },
{ "Misc", "Misc" },
{ "Molly", "Molly" },
{ "Monkey", "Monkey" },
{ "Monkey ESP", "Monkey ESP" },
{ "Music Box ESP", "Music Box ESP" },
{ "MusicBox", "MusicBox" },
{ "MusicBox-Idle", "MusicBox-Idle" },
{ "Network", "Network" },
{ "Network Info", "Network Info" },
{ "Network Stats", "Network Stats" },
{ "Not connected", "Not connected" },
{ "Patch", "Patch" },
{ "Pig", "Pig" },
{ "Pig ESP", "Pig ESP" },
{ "PigExcrement", "PigExcrement" },
{ "Ping", "Ping" },
{ "Play Random Sound", "Play Random Sound" },
{ "Player", "Player" },
{ "Instant Interaction", "Instant Interaction" },
{ "Player Count", "Player Count" },
{ "Player ESP", "Player ESP" },
{ "Player ESP Color", "Player ESP Color" },
{ "Player Snapline", "Player Snapline" },
{ "Players", "Players" },
{ "Present", "Present" },
{ "Private Lobby", "Private Lobby" },
{ "Pumpkin", "Pumpkin" },
{ "Rat", "Rat" },
{ "Rat ESP", "Rat ESP" },
{ "Region", "Region" },
{ "Revive", "Revive" },
{ "Radial Menu", "Radial Menu" },
{ "Ritual Book", "Ritual Book" },
{ "Rose", "Rose" },
{ "Ritual Book ESP", "Ritual Book ESP" },
{ "Ritual Object ESP", "Ritual Object ESP" },
{ "Ritual Objects", "Ritual Objects" },
{ "RitualBook", "RitualBook" },
{ "Boar ESP", "Boar ESP" },
{ "Role", "Role" },
{ "RottenFood", "RottenFood" },
{ "Rotten Food ESP", "Rotten Food ESP" },
{ "Sam", "Sam" },
{ "Shoot Player", "Shoot Player" },
{ "Show Coordinates", "Show Coordinates" },
{ "Skeleton ESP", "Skeleton ESP" },
{ "Slaughterhouse", "Slaughterhouse" },
{ "SlaughterhouseFireEscapeDoor", "SlaughterhouseFireEscapeDoor" },
{ "South America", "South America" },
{ "South Korea", "South Korea" },
{ "Spade", "Spade" },
{ "Spade ESP", "Spade ESP" },
{ "Spam Chat", "Spam Chat" },
{ "Spawnable Prefabs", "Spawnable Prefabs" },
{ "Speed Multiplier", "Speed Multiplier" },
{ "Spider", "Spider" },
{ "Spider ESP", "Spider ESP" },
{ "Spoof Level", "Spoof Level" },
{ "Spoof Name", "Spoof Name" },
{ "Spoof Server Name", "Spoof Server Name" },
{ "SurvivalAltarMolly", "SurvivalAltarMolly" },
{ "SurvivalAltarSlaughterhouse", "SurvivalAltarSlaughterhouse" },
{ "SurvivalAltarTown", "SurvivalAltarTown" },
{ "SurvivalApril", "SurvivalApril" },
{ "SurvivalCultist", "SurvivalCultist" },
{ "SurvivalFrank", "SurvivalFrank" },
{ "SurvivalKai", "SurvivalKai" },
{ "SurvivalMolly", "SurvivalMolly" },
{ "SurvivalNathan", "SurvivalNathan" },
{ "SurvivalRose", "SurvivalRose" },
{ "SurvivalSmashableWindow", "SurvivalSmashableWindow" },
{ "Switch realm", "Switch realm" },
{ "Switch realm (house)", "Switch realm (house)" },
{ "TP Azazel", "TP Azazel" },
{ "TP items to you", "TP items to you" },
{ "TP to Azazel", "TP to Azazel" },
{ "TV", "TV" },
{ "Teleport Keys", "Teleport Keys" },
{ "Teleport to", "Teleport to" },
{ "TP Base", "TP Base" },
{ "TP Altar", "TP Altar" },
{ "TP Basin", "TP Basin" },
{ "TP Fountain", "TP Fountain" },
{ "Ticket", "Ticket" },
{ "Town", "Town" },
{ "TownDoor", "TownDoor" },
{ "TownDoor2", "TownDoor2" },
{ "TownPentagram", "TownPentagram" },
{ "TrashCan", "TrashCan" },
{ "Truck_Shutter", "Truck_Shutter" },
{ "Turkey", "Turkey" },
{ "US East", "US East" },
{ "US South Central", "US South Central" },
{ "US West", "US West" },
{ "Unlimited Stamina", "Unlimited Stamina" },
{ "Unlimited UV Light", "Unlimited UV Light" },
{ "Unlock Achievements", "Unlock Achievements" },
{ "Unlock Doors", "Unlock Doors" },
{ "God Mode", "God Mode" },
{ "Visuals", "Visuals" },
{ "Waiting for the game to start", "Waiting for the game to start" },
{ "Walk In Lobby", "Walk In Lobby" },
{ "Zara", "Zara" },
{ "Gardener", "Gardener" },
{ "Butler", "Butler" },
{ "Bridesmaid 1", "Bridesmaid 1" },
{ "Bridesmaid 2", "Bridesmaid 2" },
{ "Cook", "Cook" },
{ "Groomsman 1", "Groomsman 1" },
{ "Groomsman 2", "Groomsman 2" },
{ "Maid", "Maid" },
{ "Photographer", "Photographer" },
{ "Priest", "Priest" },
{ "Menu Key", "Menu Key" },
};
}
}
}

View File

@@ -0,0 +1,297 @@
using System.Collections.Generic;
namespace DevourClient.Localization.Translations
{
public static class FrenchTranslations
{
public static Dictionary<string, string> GetTranslations()
{
return new Dictionary<string, string>
{
{ "Altar", "Autel" },
{ "Animal_Gate", "Porte des animaux" },
{ "Anna", "Anna" },
{ "Asia", "Asie" },
{ "Asylum", "Asile" },
{ "AsylumDoor", "Porte d'asile" },
{ "AsylumDoubleDoor", "Double porte d'asile" },
{ "AsylumWhiteDoor", "Porte blanche d'asile" },
{ "Australia", "Australie" },
{ "Auto Respawn", "Réapparition auto" },
{ "Auto farm items (x5)", "Farm auto objets (x5)" },
{ "Azazel", "Azazel" },
{ "Azazel & Demons", "Azazel et démons" },
{ "Azazel ESP", "ESP Azazel" },
{ "Azazel ESP Color", "Couleur ESP Azazel" },
{ "Azazel Snapline", "Ligne Azazel" },
{ "AzazelAnna", "Azazel-Anna" },
{ "AzazelApril", "Azazel-April" },
{ "AzazelKai", "Azazel-Kai" },
{ "AzazelMolly", "Azazel-Molly" },
{ "AzazelNathan", "Azazel-Nathan" },
{ "AzazelSam", "Azazel-Sam" },
{ "AzazelZara", "Azazel-Zara" },
{ "Barbed Wire", "Fil de fer barbelé" },
{ "Battery", "Batterie" },
{ "Battery ESP", "ESP batterie" },
{ "Big Flashlight", "Grande lampe" },
{ "Bleach", "Eau de Javel" },
{ "Bleach ESP", "ESP eau de javel" },
{ "Boar", "Sanglier" },
{ "Bone", "Os" },
{ "Bone ESP", "ESP os" },
{ "Burn a ritual object", "Brûler un objet rituel" },
{ "Burn all ritual objects", "Brûler tous les objets" },
{ "Cage", "Cage" },
{ "Cake", "Gâteau" },
{ "Cake ESP", "ESP gâteau" },
{ "Carnival", "Carnaval" },
{ "Cherry Blossom", "Fleur de cerisier" },
{ "Clean Head ESP", "ESP tête propre" },
{ "Collectables ESP", "ESP objets de collection" },
{ "Clean The Fountains", "Nettoyer fontaines" },
{ "CleanHead", "Tête propre" },
{ "Client", "Client" },
{ "Coin", "Pièce" },
{ "Coin ESP", "ESP pièce" },
{ "Connection ID", "ID de connexion" },
{ "Corpse", "Cadavre" },
{ "Corpse ESP", "ESP cadavre" },
{ "Create Lobby", "Créer un lobby" },
{ "Crosshair", "Réticule" },
{ "Crow", "Corbeau" },
{ "Crow ESP", "ESP corbeau" },
{ "Demon", "Démon" },
{ "Demon ESP", "ESP démon" },
{ "Despawn Boars", "Retirer sangliers" },
{ "Despawn Corpses", "Retirer cadavres" },
{ "Despawn Crows", "Retirer corbeaux" },
{ "Despawn Demons", "Retirer démons" },
{ "Despawn Ghosts", "Retirer fantômes" },
{ "Despawn Inmates", "Retirer détenus" },
{ "Despawn Lumps", "Retirer masses" },
{ "Despawn Monkeys", "Retirer singes" },
{ "Despawn Spiders", "Retirer araignées" },
{ "Devour", "Ferme" },
{ "DevourDoorBack", "Porte arrière" },
{ "DevourDoorMain", "Porte principale" },
{ "DevourDoorRoom", "Porte de chambre" },
{ "Dirty Head ESP", "ESP tête sale" },
{ "DirtyHead", "Tête sale" },
{ "Doll", "Poupée" },
{ "Doll ESP", "ESP poupée" },
{ "Doll Head ESP", "ESP tête de poupée" },
{ "DollHead", "Tête de poupée" },
{ "Door", "Porte" },
{ "ESP", "ESP" },
{ "ESP Settings", "Paramètres ESP" },
{ "Egg", "Œuf" },
{ "Egg ESP", "ESP œuf" },
{ "Egg-1", "Œuf-1" },
{ "Egg-10", "Œuf-10" },
{ "Egg-2", "Œuf-2" },
{ "Egg-3", "Œuf-3" },
{ "Egg-4", "Œuf-4" },
{ "Egg-5", "Œuf-5" },
{ "Egg-6", "Œuf-6" },
{ "Egg-7", "Œuf-7" },
{ "Egg-8", "Œuf-8" },
{ "Egg-9", "Œuf-9" },
{ "Egg-Clean-1", "Œuf-1" },
{ "Egg-Clean-10", "Œuf-10" },
{ "Egg-Clean-2", "Œuf-2" },
{ "Egg-Clean-3", "Œuf-3" },
{ "Egg-Clean-4", "Œuf-4" },
{ "Egg-Clean-5", "Œuf-5" },
{ "Egg-Clean-6", "Œuf-6" },
{ "Egg-Clean-7", "Œuf-7" },
{ "Egg-Clean-8", "Œuf-8" },
{ "Egg-Clean-9", "Œuf-9" },
{ "Elevator_Door", "Porte d'ascenseur" },
{ "Entities", "Entités" },
{ "Error", "Erreur" },
{ "Europe", "Europe" },
{ "Exit", "Quitter" },
{ "Exp Modifier", "Modificateur XP" },
{ "Exp Value", "Valeur XP" },
{ "Farmhouse", "Ferme" },
{ "Fast Move", "Déplacement rapide" },
{ "First Aid ESP", "ESP premiers soins" },
{ "First aid", "Premiers soins" },
{ "FirstAid", "Trousse de premiers soins" },
{ "Flashlight Color", "Couleur lampe" },
{ "Fly", "Voler" },
{ "Fly Speed", "Vitesse vol" },
{ "Feather", "Plume" },
{ "Food", "Nourriture" },
{ "Force Start Game", "Forcer le démarrage" },
{ "Fountain", "Fontaine" },
{ "Freeze azazel", "Geler Azazel" },
{ "Fullbright", "Luminosité max" },
{ "Fuse", "Fusible" },
{ "Fuse ESP", "ESP fusible" },
{ "Gasoline", "Essence" },
{ "Gasoline ESP", "ESP essence" },
{ "Gate", "Portail" },
{ "Ghost", "Fantôme" },
{ "Ghost ESP", "ESP fantôme" },
{ "Goat", "Chèvre" },
{ "Goat ESP", "ESP chèvre" },
{ "Goat/Rat ESP", "ESP chèvre/rat" },
{ "Hay", "Foin" },
{ "Hay ESP", "ESP foin" },
{ "Head", "Tête" },
{ "Horseshoe", "Fer à cheval" },
{ "Host", "Hôte" },
{ "Host Only", "Hôte seulement" },
{ "Infinite mirrors", "Miroirs infinis" },
{ "Inmate", "Détenu" },
{ "Inmates ESP", "ESP détenus" },
{ "Inn", "Auberge" },
{ "InnDoor", "Porte d'auberge" },
{ "InnDoubleDoor", "Double porte d'auberge" },
{ "InnShojiDoor", "Porte shoji d'auberge" },
{ "InnShrine", "Sanctuaire d'auberge" },
{ "InnWardrobe", "Armoire d'auberge" },
{ "InnWoodenDoor", "Porte en bois d'auberge" },
{ "Instant Win", "Victoire instantanée" },
{ "Item ESP", "ESP objet" },
{ "Items", "Objets" },
{ "Japan", "Japon" },
{ "Jumpscare", "Jumpscare" },
{ "Key", "Clé" },
{ "Key ESP", "ESP clé" },
{ "Kill", "Tuer" },
{ "Level", "Niveau" },
{ "Load Map:", "Charger carte:" },
{ "Lobby Control", "Contrôle du lobby" },
{ "Lobby Manager", "Gestionnaire de lobby" },
{ "Lobby Size", "Taille du lobby" },
{ "Lock in cage", "Enfermer en cage" },
{ "Lump", "Masse" },
{ "Lump ESP", "ESP masse" },
{ "Manor", "Manoir" },
{ "Map", "Carte" },
{ "Matchbox", "Boîte d'allumettes" },
{ "Matchbox ESP", "ESP boîte d'allumettes" },
{ "Medicine ESP", "ESP médicament" },
{ "Menu", "Menu" },
{ "Mirror", "Miroir" },
{ "Misc", "Divers" },
{ "Molly", "Asile" },
{ "Monkey", "Singe" },
{ "Monkey ESP", "ESP singe" },
{ "Music Box ESP", "ESP boîte à musique" },
{ "MusicBox", "Boîte à musique" },
{ "MusicBox-Idle", "Boîte à musique" },
{ "Network", "Réseau" },
{ "Network Info", "Infos réseau" },
{ "Network Stats", "Statistiques réseau" },
{ "Not connected", "Non connecté" },
{ "Patch", "Patch" },
{ "Pig", "Cochon" },
{ "Pig ESP", "ESP cochon" },
{ "PigExcrement", "Excréments de porc" },
{ "Ping", "Ping" },
{ "Play Random Sound", "Jouer son aléatoire" },
{ "Player", "Joueur" },
{ "Instant Interaction", "Interaction instantanée" },
{ "Player Count", "Nombre de joueurs" },
{ "Player ESP", "ESP joueur" },
{ "Player ESP Color", "Couleur ESP joueur" },
{ "Player Snapline", "Ligne joueur" },
{ "Players", "Joueurs" },
{ "Present", "Cadeau" },
{ "Private Lobby", "Lobby privé" },
{ "Pumpkin", "Citrouille" },
{ "Rat", "Rat" },
{ "Rat ESP", "ESP rat" },
{ "Region", "Région" },
{ "Revive", "Réanimer" },
{ "Radial Menu", "Menu radial" },
{ "Ritual Book", "Livre rituel" },
{ "Rose", "Rose" },
{ "Ritual Book ESP", "ESP livre rituel" },
{ "Ritual Object ESP", "ESP objet rituel" },
{ "Ritual Objects", "Objets rituels" },
{ "RitualBook", "Livre rituel" },
{ "Boar ESP", "ESP Sanglier" },
{ "Role", "Rôle" },
{ "RottenFood", "Nourriture pourrie" },
{ "Rotten Food ESP", "ESP Nourriture Pourrie" },
{ "Sam", "Sam" },
{ "Shoot Player", "Tirer sur le joueur" },
{ "Show Coordinates", "Afficher coordonnées" },
{ "Skeleton ESP", "ESP squelette" },
{ "Slaughterhouse", "Abattoir" },
{ "SlaughterhouseFireEscapeDoor", "Porte de secours d'abattoir" },
{ "South America", "Amérique du Sud" },
{ "South Korea", "Corée du Sud" },
{ "Spade", "Pelle" },
{ "Spade ESP", "ESP pelle" },
{ "Spam Chat", "Spam chat" },
{ "Spawnable Prefabs", "Préfabriqués générables" },
{ "Speed Multiplier", "Multiplicateur vitesse" },
{ "Spider", "Araignée" },
{ "Spider ESP", "ESP araignée" },
{ "Spoof Level", "Usurper niveau" },
{ "Spoof Name", "Usurper nom" },
{ "Spoof Server Name", "Usurper nom serveur" },
{ "SurvivalAltarMolly", "Autel de Molly" },
{ "SurvivalAltarSlaughterhouse", "Autel d'abattoir" },
{ "SurvivalAltarTown", "Autel de ville" },
{ "SurvivalApril", "April" },
{ "SurvivalCultist", "Cultiste" },
{ "SurvivalFrank", "Frank" },
{ "SurvivalKai", "Kai" },
{ "SurvivalMolly", "Molly" },
{ "SurvivalNathan", "Nathan" },
{ "SurvivalRose", "Rose" },
{ "SurvivalSmashableWindow", "Fenêtre cassable" },
{ "Switch realm", "Changer de royaume" },
{ "Switch realm (house)", "Changer (maison)" },
{ "TP Azazel", "TP Azazel" },
{ "TP items to you", "TP objets vers vous" },
{ "TP to Azazel", "TP vers Azazel" },
{ "TV", "Télévision" },
{ "Teleport Keys", "Téléporter clés" },
{ "Teleport to", "Téléporter" },
{ "TP Base", "TP base" },
{ "TP Altar", "TP autel" },
{ "TP Basin", "TP bassin" },
{ "TP Fountain", "TP fontaine" },
{ "Ticket", "Billet" },
{ "Town", "Ville" },
{ "TownDoor", "Porte de ville" },
{ "TownDoor2", "Porte de ville 2" },
{ "TownPentagram", "Pentagramme de ville" },
{ "TrashCan", "Poubelle" },
{ "Truck_Shutter", "Volet de camion" },
{ "Turkey", "Turquie" },
{ "US East", "Est des États-Unis" },
{ "US South Central", "Centre-Sud des États-Unis" },
{ "US West", "Ouest des États-Unis" },
{ "Unlimited Stamina", "Endurance illimitée" },
{ "Unlimited UV Light", "UV illimité" },
{ "Unlock Achievements", "Débloquer succès" },
{ "Unlock Doors", "Déverrouiller portes" },
{ "God Mode", "Mode Dieu" },
{ "Visuals", "Visuels" },
{ "Waiting for the game to start", "En attente du début de la partie" },
{ "Walk In Lobby", "Marcher dans le lobby" },
{ "Zara", "Zara" },
{ "Bridesmaid 1", "Demoiselle d'honneur 1" },
{ "Bridesmaid 2", "Demoiselle d'honneur 2" },
{ "Butler", "Majordome" },
{ "Cook", "Cuisinier" },
{ "Gardener", "Jardinier" },
{ "Groomsman 1", "Garçon d'honneur 1" },
{ "Groomsman 2", "Garçon d'honneur 2" },
{ "Maid", "Domestique" },
{ "Photographer", "Photographe" },
{ "Priest", "Prêtre" },
{ "Menu Key", "Touche Menu" },
};
}
}
}

View File

@@ -0,0 +1,297 @@
using System.Collections.Generic;
namespace DevourClient.Localization.Translations
{
public static class GermanTranslations
{
public static Dictionary<string, string> GetTranslations()
{
return new Dictionary<string, string>
{
{ "Altar", "Altar" },
{ "Animal_Gate", "Tiertor" },
{ "Anna", "Anna" },
{ "Asia", "Asien" },
{ "Asylum", "Anstalt" },
{ "AsylumDoor", "Asyltür" },
{ "AsylumDoubleDoor", "Asyl-Doppeltür" },
{ "AsylumWhiteDoor", "Weiße Asyltür" },
{ "Australia", "Australien" },
{ "Auto Respawn", "Auto-Respawn" },
{ "Auto farm items (x5)", "Auto-Farm Gegenstände (x5)" },
{ "Azazel", "Azazel" },
{ "Azazel & Demons", "Azazel & Dämonen" },
{ "Azazel ESP", "Azazel ESP" },
{ "Azazel ESP Color", "Azazel ESP Farbe" },
{ "Azazel Snapline", "Azazel-Linie" },
{ "AzazelAnna", "Azazel-Anna" },
{ "AzazelApril", "Azazel-April" },
{ "AzazelKai", "Azazel-Kai" },
{ "AzazelMolly", "Azazel-Molly" },
{ "AzazelNathan", "Azazel-Nathan" },
{ "AzazelSam", "Azazel-Sam" },
{ "AzazelZara", "Azazel-Zara" },
{ "Barbed Wire", "Stacheldraht" },
{ "Battery", "Batterie" },
{ "Battery ESP", "Batterie-ESP" },
{ "Big Flashlight", "Große Taschenlampe" },
{ "Bleach", "Bleichmittel" },
{ "Bleach ESP", "Bleichmittel-ESP" },
{ "Boar", "Wildschwein" },
{ "Bone", "Knochen" },
{ "Bone ESP", "Knochen-ESP" },
{ "Burn a ritual object", "Ritualobjekt verbrennen" },
{ "Burn all ritual objects", "Alle Objekte verbrennen" },
{ "Cage", "Käfig" },
{ "Cake", "Kuchen" },
{ "Cake ESP", "Kuchen-ESP" },
{ "Carnival", "Karneval" },
{ "Cherry Blossom", "Kirschblüte" },
{ "Clean Head ESP", "Sauberer-Kopf-ESP" },
{ "Collectables ESP", "Sammlerobjekte-ESP" },
{ "Clean The Fountains", "Brunnen reinigen" },
{ "CleanHead", "Sauberer Kopf" },
{ "Client", "Client" },
{ "Coin", "Münze" },
{ "Coin ESP", "Münze-ESP" },
{ "Connection ID", "Verbindungs-ID" },
{ "Corpse", "Leiche" },
{ "Corpse ESP", "Leiche-ESP" },
{ "Create Lobby", "Lobby erstellen" },
{ "Crosshair", "Fadenkreuz" },
{ "Crow", "Krähe" },
{ "Crow ESP", "Krähe-ESP" },
{ "Demon", "Dämon" },
{ "Demon ESP", "Dämon ESP" },
{ "Despawn Boars", "Wildschweine entfernen" },
{ "Despawn Corpses", "Leichen entfernen" },
{ "Despawn Crows", "Krähen entfernen" },
{ "Despawn Demons", "Dämonen entfernen" },
{ "Despawn Ghosts", "Geister entfernen" },
{ "Despawn Inmates", "Häftlinge entfernen" },
{ "Despawn Lumps", "Klumpen entfernen" },
{ "Despawn Monkeys", "Affen entfernen" },
{ "Despawn Spiders", "Spinnen entfernen" },
{ "Devour", "Bauernhof" },
{ "DevourDoorBack", "Hintertür" },
{ "DevourDoorMain", "Haupttür" },
{ "DevourDoorRoom", "Zimmertür" },
{ "Dirty Head ESP", "Schmutziger-Kopf-ESP" },
{ "DirtyHead", "Schmutziger Kopf" },
{ "Doll", "Puppe" },
{ "Doll ESP", "Puppe-ESP" },
{ "Doll Head ESP", "Puppenkopf-ESP" },
{ "DollHead", "Puppenkopf" },
{ "Door", "Tür" },
{ "ESP", "ESP" },
{ "ESP Settings", "ESP-Einstellungen" },
{ "Egg", "Ei" },
{ "Egg ESP", "Ei ESP" },
{ "Egg-1", "Ei-1" },
{ "Egg-10", "Ei-10" },
{ "Egg-2", "Ei-2" },
{ "Egg-3", "Ei-3" },
{ "Egg-4", "Ei-4" },
{ "Egg-5", "Ei-5" },
{ "Egg-6", "Ei-6" },
{ "Egg-7", "Ei-7" },
{ "Egg-8", "Ei-8" },
{ "Egg-9", "Ei-9" },
{ "Egg-Clean-1", "Ei-1" },
{ "Egg-Clean-10", "Ei-10" },
{ "Egg-Clean-2", "Ei-2" },
{ "Egg-Clean-3", "Ei-3" },
{ "Egg-Clean-4", "Ei-4" },
{ "Egg-Clean-5", "Ei-5" },
{ "Egg-Clean-6", "Ei-6" },
{ "Egg-Clean-7", "Ei-7" },
{ "Egg-Clean-8", "Ei-8" },
{ "Egg-Clean-9", "Ei-9" },
{ "Elevator_Door", "Aufzugstür" },
{ "Entities", "Entitäten" },
{ "Error", "Fehler" },
{ "Europe", "Europa" },
{ "Exit", "Beenden" },
{ "Exp Modifier", "Erfahrungsmodifikator" },
{ "Exp Value", "Erfahrungswert" },
{ "Farmhouse", "Bauernhof" },
{ "Fast Move", "Schnelle Bewegung" },
{ "First Aid ESP", "Erste-Hilfe-ESP" },
{ "First aid", "Erste Hilfe" },
{ "FirstAid", "Erste Hilfe" },
{ "Flashlight Color", "Taschenlampenfarbe" },
{ "Fly", "Fliegen" },
{ "Fly Speed", "Fluggeschwindigkeit" },
{ "Feather", "Feder" },
{ "Food", "Essen" },
{ "Force Start Game", "Spiel erzwingen" },
{ "Fountain", "Brunnen" },
{ "Freeze azazel", "Azazel einfrieren" },
{ "Fullbright", "Vollhelligkeit" },
{ "Fuse", "Sicherung" },
{ "Fuse ESP", "Sicherung-ESP" },
{ "Gasoline", "Benzin" },
{ "Gasoline ESP", "Benzin-ESP" },
{ "Gate", "Tor" },
{ "Ghost", "Geist" },
{ "Ghost ESP", "Geist-ESP" },
{ "Goat", "Ziege" },
{ "Goat ESP", "Ziege-ESP" },
{ "Goat/Rat ESP", "Ziege/Ratte ESP" },
{ "Hay", "Heu" },
{ "Hay ESP", "Heu-ESP" },
{ "Head", "Kopf" },
{ "Horseshoe", "Hufeisen" },
{ "Host", "Host" },
{ "Host Only", "Nur Host" },
{ "Infinite mirrors", "Unendliche Spiegel" },
{ "Inmate", "Häftling" },
{ "Inmates ESP", "Häftling-ESP" },
{ "Inn", "Gasthaus" },
{ "InnDoor", "Gasthoftür" },
{ "InnDoubleDoor", "Gasthof-Doppeltür" },
{ "InnShojiDoor", "Gasthof-Shoji-Tür" },
{ "InnShrine", "Gasthof-Schrein" },
{ "InnWardrobe", "Gasthof-Kleiderschrank" },
{ "InnWoodenDoor", "Gasthof-Holztür" },
{ "Instant Win", "Sofortiger Sieg" },
{ "Item ESP", "Gegenstands-ESP" },
{ "Items", "Gegenstände" },
{ "Japan", "Japan" },
{ "Jumpscare", "Jumpscare" },
{ "Key", "Schlüssel" },
{ "Key ESP", "Schlüssel ESP" },
{ "Kill", "Töten" },
{ "Level", "Level" },
{ "Load Map:", "Karte laden:" },
{ "Lobby Control", "Lobby-Steuerung" },
{ "Lobby Manager", "Lobby-Verwaltung" },
{ "Lobby Size", "Lobby-Größe" },
{ "Lock in cage", "In Käfig sperren" },
{ "Lump", "Klumpen" },
{ "Lump ESP", "Klumpen-ESP" },
{ "Manor", "Herrenhaus" },
{ "Map", "Karte" },
{ "Matchbox", "Streichholzschachtel" },
{ "Matchbox ESP", "Streichholzschachtel-ESP" },
{ "Medicine ESP", "Medizin ESP" },
{ "Menu", "Menü" },
{ "Mirror", "Spiegel" },
{ "Misc", "Sonstiges" },
{ "Molly", "Anstalt" },
{ "Monkey", "Affe" },
{ "Monkey ESP", "Affe-ESP" },
{ "Music Box ESP", "Spieluhr-ESP" },
{ "MusicBox", "Spieluhr" },
{ "MusicBox-Idle", "Spieluhr" },
{ "Network", "Netzwerk" },
{ "Network Info", "Netzwerk-Info" },
{ "Network Stats", "Netzwerk-Statistiken" },
{ "Not connected", "Nicht verbunden" },
{ "Patch", "Patch" },
{ "Pig", "Schwein" },
{ "Pig ESP", "Schwein-ESP" },
{ "PigExcrement", "Schweinekot" },
{ "Ping", "Ping" },
{ "Play Random Sound", "Zufälligen Sound abspielen" },
{ "Player", "Spieler" },
{ "Instant Interaction", "Sofortige Interaktion" },
{ "Player Count", "Spieleranzahl" },
{ "Player ESP", "Spieler ESP" },
{ "Player ESP Color", "Spieler ESP Farbe" },
{ "Player Snapline", "Spieler-Linie" },
{ "Players", "Spieler" },
{ "Present", "Geschenk" },
{ "Private Lobby", "Privates Lobby" },
{ "Pumpkin", "Kürbis" },
{ "Rat", "Ratte" },
{ "Rat ESP", "Ratte-ESP" },
{ "Region", "Region" },
{ "Revive", "Wiederbeleben" },
{ "Radial Menu", "Radiales Menü" },
{ "Ritual Book", "Ritualbuch" },
{ "Rose", "Rose" },
{ "Ritual Book ESP", "Ritualbuch-ESP" },
{ "Ritual Object ESP", "Ritualobjekt ESP" },
{ "Ritual Objects", "Rituelle Objekte" },
{ "RitualBook", "Ritualbuch" },
{ "Boar ESP", "Wildschwein-ESP" },
{ "Role", "Rolle" },
{ "RottenFood", "Verdorbenes Essen" },
{ "Rotten Food ESP", "Verrottetes Essen ESP" },
{ "Sam", "Sam" },
{ "Shoot Player", "Spieler erschießen" },
{ "Show Coordinates", "Koordinaten anzeigen" },
{ "Skeleton ESP", "Skelett ESP" },
{ "Slaughterhouse", "Schlachthaus" },
{ "SlaughterhouseFireEscapeDoor", "Schlachthof-Feuerschutztür" },
{ "South America", "Südamerika" },
{ "South Korea", "Südkorea" },
{ "Spade", "Spaten" },
{ "Spade ESP", "Spaten-ESP" },
{ "Spam Chat", "Chat spammen" },
{ "Spawnable Prefabs", "Erzeugbare Objekte" },
{ "Speed Multiplier", "Geschwindigkeitsmultiplikator" },
{ "Spider", "Spinne" },
{ "Spider ESP", "Spinne ESP" },
{ "Spoof Level", "Level fälschen" },
{ "Spoof Name", "Namen fälschen" },
{ "Spoof Server Name", "Servernamen fälschen" },
{ "SurvivalAltarMolly", "Molly-Altar" },
{ "SurvivalAltarSlaughterhouse", "Schlachthof-Altar" },
{ "SurvivalAltarTown", "Stadt-Altar" },
{ "SurvivalApril", "April" },
{ "SurvivalCultist", "Kultist" },
{ "SurvivalFrank", "Frank" },
{ "SurvivalKai", "Kai" },
{ "SurvivalMolly", "Molly" },
{ "SurvivalNathan", "Nathan" },
{ "SurvivalRose", "Rose" },
{ "SurvivalSmashableWindow", "Zerbrechliches Fenster" },
{ "Switch realm", "Reich wechseln" },
{ "Switch realm (house)", "Reich wechseln (Haus)" },
{ "TP Azazel", "TP Azazel" },
{ "TP items to you", "TP Gegenstände zu dir" },
{ "TP to Azazel", "TP zu Azazel" },
{ "TV", "Fernseher" },
{ "Teleport Keys", "Schlüssel teleportieren" },
{ "Teleport to", "Teleportieren" },
{ "TP Base", "TP Basis" },
{ "TP Altar", "TP Altar" },
{ "TP Basin", "TP Becken" },
{ "TP Fountain", "TP Brunnen" },
{ "Ticket", "Ticket" },
{ "Town", "Stadt" },
{ "TownDoor", "Stadttür" },
{ "TownDoor2", "Stadttür 2" },
{ "TownPentagram", "Stadt-Pentagramm" },
{ "TrashCan", "Mülleimer" },
{ "Truck_Shutter", "LKW-Rolltor" },
{ "Turkey", "Türkei" },
{ "US East", "USA Ost" },
{ "US South Central", "USA Süd-Zentral" },
{ "US West", "USA West" },
{ "Unlimited Stamina", "Unendliche Ausdauer" },
{ "Unlimited UV Light", "Unendliches UV-Licht" },
{ "Unlock Achievements", "Erfolge freischalten" },
{ "Unlock Doors", "Türen öffnen" },
{ "God Mode", "Gottmodus" },
{ "Visuals", "Visuals" },
{ "Waiting for the game to start", "Warte auf Spielstart" },
{ "Walk In Lobby", "Im Lobby laufen" },
{ "Zara", "Zara" },
{ "Bridesmaid 1", "Brautjungfer 1" },
{ "Bridesmaid 2", "Brautjungfer 2" },
{ "Butler", "Butler" },
{ "Cook", "Koch" },
{ "Gardener", "Gärtner" },
{ "Groomsman 1", "Trauzeuge 1" },
{ "Groomsman 2", "Trauzeuge 2" },
{ "Maid", "Dienstmädchen" },
{ "Photographer", "Fotograf" },
{ "Priest", "Priester" },
{ "Menu Key", "Menütaste" },
};
}
}
}

View File

@@ -0,0 +1,297 @@
using System.Collections.Generic;
namespace DevourClient.Localization.Translations
{
public static class ItalianTranslations
{
public static Dictionary<string, string> GetTranslations()
{
return new Dictionary<string, string>
{
{ "Altar", "Altare" },
{ "Animal_Gate", "Cancello degli animali" },
{ "Anna", "Anna" },
{ "Asia", "Asia" },
{ "Asylum", "Manicomio" },
{ "AsylumDoor", "Porta dell'asilo" },
{ "AsylumDoubleDoor", "Doppia porta dell'asilo" },
{ "AsylumWhiteDoor", "Porta bianca dell'asilo" },
{ "Australia", "Australia" },
{ "Auto Respawn", "Respawn automatico" },
{ "Auto farm items (x5)", "Farm automatico oggetti (x5)" },
{ "Azazel", "Azazel" },
{ "Azazel & Demons", "Azazel e demoni" },
{ "Azazel ESP", "ESP Azazel" },
{ "Azazel ESP Color", "Colore ESP Azazel" },
{ "Azazel Snapline", "Linea Azazel" },
{ "AzazelAnna", "Azazel-Anna" },
{ "AzazelApril", "Azazel-April" },
{ "AzazelKai", "Azazel-Kai" },
{ "AzazelMolly", "Azazel-Molly" },
{ "AzazelNathan", "Azazel-Nathan" },
{ "AzazelSam", "Azazel-Sam" },
{ "AzazelZara", "Azazel-Zara" },
{ "Barbed Wire", "Filo spinato" },
{ "Battery", "Batteria" },
{ "Battery ESP", "ESP batteria" },
{ "Big Flashlight", "Grande torcia" },
{ "Bleach", "Candeggina" },
{ "Bleach ESP", "ESP candeggina" },
{ "Boar", "Cinghiale" },
{ "Bone", "Osso" },
{ "Bone ESP", "ESP osso" },
{ "Burn a ritual object", "Brucia oggetto rituale" },
{ "Burn all ritual objects", "Brucia tutti gli oggetti" },
{ "Cage", "Gabbia" },
{ "Cake", "Torta" },
{ "Cake ESP", "ESP torta" },
{ "Carnival", "Carnevale" },
{ "Cherry Blossom", "Fiore di ciliegio" },
{ "Clean Head ESP", "ESP testa pulita" },
{ "Collectables ESP", "ESP collezionabili" },
{ "Clean The Fountains", "Pulisci fontane" },
{ "CleanHead", "Testa pulita" },
{ "Client", "Client" },
{ "Coin", "Moneta" },
{ "Coin ESP", "ESP moneta" },
{ "Connection ID", "ID connessione" },
{ "Corpse", "Cadavere" },
{ "Corpse ESP", "ESP cadavere" },
{ "Create Lobby", "Crea lobby" },
{ "Crosshair", "Mirino" },
{ "Crow", "Corvo" },
{ "Crow ESP", "ESP corvo" },
{ "Demon", "Demone" },
{ "Demon ESP", "ESP demone" },
{ "Despawn Boars", "Rimuovi cinghiali" },
{ "Despawn Corpses", "Rimuovi cadaveri" },
{ "Despawn Crows", "Rimuovi corvi" },
{ "Despawn Demons", "Rimuovi demoni" },
{ "Despawn Ghosts", "Rimuovi fantasmi" },
{ "Despawn Inmates", "Rimuovi detenuti" },
{ "Despawn Lumps", "Rimuovi grumi" },
{ "Despawn Monkeys", "Rimuovi scimmie" },
{ "Despawn Spiders", "Rimuovi ragni" },
{ "Devour", "Fattoria" },
{ "DevourDoorBack", "Porta posteriore" },
{ "DevourDoorMain", "Porta principale" },
{ "DevourDoorRoom", "Porta della stanza" },
{ "Dirty Head ESP", "ESP testa sporca" },
{ "DirtyHead", "Testa sporca" },
{ "Doll", "Bambola" },
{ "Doll ESP", "ESP bambola" },
{ "Doll Head ESP", "ESP testa di bambola" },
{ "DollHead", "Testa di bambola" },
{ "Door", "Porta" },
{ "ESP", "ESP" },
{ "ESP Settings", "Impostazioni ESP" },
{ "Egg", "Uovo" },
{ "Egg ESP", "ESP uovo" },
{ "Egg-1", "Uovo-1" },
{ "Egg-10", "Uovo-10" },
{ "Egg-2", "Uovo-2" },
{ "Egg-3", "Uovo-3" },
{ "Egg-4", "Uovo-4" },
{ "Egg-5", "Uovo-5" },
{ "Egg-6", "Uovo-6" },
{ "Egg-7", "Uovo-7" },
{ "Egg-8", "Uovo-8" },
{ "Egg-9", "Uovo-9" },
{ "Egg-Clean-1", "Uovo-1" },
{ "Egg-Clean-10", "Uovo-10" },
{ "Egg-Clean-2", "Uovo-2" },
{ "Egg-Clean-3", "Uovo-3" },
{ "Egg-Clean-4", "Uovo-4" },
{ "Egg-Clean-5", "Uovo-5" },
{ "Egg-Clean-6", "Uovo-6" },
{ "Egg-Clean-7", "Uovo-7" },
{ "Egg-Clean-8", "Uovo-8" },
{ "Egg-Clean-9", "Uovo-9" },
{ "Elevator_Door", "Porta dell'ascensore" },
{ "Entities", "Entità" },
{ "Error", "Errore" },
{ "Europe", "Europa" },
{ "Exit", "Esci" },
{ "Exp Modifier", "Modificatore exp" },
{ "Exp Value", "Valore exp" },
{ "Farmhouse", "Fattoria" },
{ "Fast Move", "Movimento veloce" },
{ "First Aid ESP", "ESP pronto soccorso" },
{ "First aid", "Pronto soccorso" },
{ "FirstAid", "Pronto soccorso" },
{ "Flashlight Color", "Colore torcia" },
{ "Fly", "Volare" },
{ "Fly Speed", "Velocità volo" },
{ "Feather", "Piuma" },
{ "Food", "Cibo" },
{ "Force Start Game", "Forza avvio" },
{ "Fountain", "Fontana" },
{ "Freeze azazel", "Congela Azazel" },
{ "Fullbright", "Luminosità piena" },
{ "Fuse", "Fusibile" },
{ "Fuse ESP", "ESP fusibile" },
{ "Gasoline", "Benzina" },
{ "Gasoline ESP", "ESP benzina" },
{ "Gate", "Cancello" },
{ "Ghost", "Fantasma" },
{ "Ghost ESP", "ESP fantasma" },
{ "Goat", "Capra" },
{ "Goat ESP", "ESP capra" },
{ "Goat/Rat ESP", "ESP capra/ratto" },
{ "Hay", "Fieno" },
{ "Hay ESP", "ESP fieno" },
{ "Head", "Testa" },
{ "Horseshoe", "Ferro di cavallo" },
{ "Host", "Host" },
{ "Host Only", "Solo host" },
{ "Infinite mirrors", "Specchi infiniti" },
{ "Inmate", "Detenuto" },
{ "Inmates ESP", "ESP detenuti" },
{ "Inn", "Locanda" },
{ "InnDoor", "Porta della locanda" },
{ "InnDoubleDoor", "Doppia porta della locanda" },
{ "InnShojiDoor", "Porta shoji della locanda" },
{ "InnShrine", "Santuario della locanda" },
{ "InnWardrobe", "Armadio della locanda" },
{ "InnWoodenDoor", "Porta di legno della locanda" },
{ "Instant Win", "Vittoria istantanea" },
{ "Item ESP", "ESP oggetto" },
{ "Items", "Oggetti" },
{ "Japan", "Giappone" },
{ "Jumpscare", "Spavento" },
{ "Key", "Chiave" },
{ "Key ESP", "ESP chiave" },
{ "Kill", "Uccidi" },
{ "Level", "Livello" },
{ "Load Map:", "Carica mappa:" },
{ "Lobby Control", "Controllo lobby" },
{ "Lobby Manager", "Gestore lobby" },
{ "Lobby Size", "Dimensione lobby" },
{ "Lock in cage", "Rinchiudi in gabbia" },
{ "Lump", "Grumo" },
{ "Lump ESP", "ESP grumo" },
{ "Manor", "Villa" },
{ "Map", "Mappa" },
{ "Matchbox", "Scatola di fiammiferi" },
{ "Matchbox ESP", "ESP scatola di fiammiferi" },
{ "Medicine ESP", "ESP medicina" },
{ "Menu", "Menu" },
{ "Mirror", "Specchio" },
{ "Misc", "Varie" },
{ "Molly", "Manicomio" },
{ "Monkey", "Scimmia" },
{ "Monkey ESP", "ESP scimmia" },
{ "Music Box ESP", "ESP carillon" },
{ "MusicBox", "Carillon" },
{ "MusicBox-Idle", "Carillon" },
{ "Network", "Rete" },
{ "Network Info", "Info rete" },
{ "Network Stats", "Statistiche rete" },
{ "Not connected", "Non connesso" },
{ "Patch", "Patch" },
{ "Pig", "Maiale" },
{ "Pig ESP", "ESP maiale" },
{ "PigExcrement", "Escrementi di maiale" },
{ "Ping", "Ping" },
{ "Play Random Sound", "Riproduci suono casuale" },
{ "Player", "Giocatore" },
{ "Instant Interaction", "Interazione istantanea" },
{ "Player Count", "Numero di giocatori" },
{ "Player ESP", "ESP giocatore" },
{ "Player ESP Color", "Colore ESP giocatore" },
{ "Player Snapline", "Linea giocatore" },
{ "Players", "Giocatori" },
{ "Present", "Regalo" },
{ "Private Lobby", "Lobby privata" },
{ "Pumpkin", "Zucca" },
{ "Rat", "Ratto" },
{ "Rat ESP", "ESP ratto" },
{ "Region", "Regione" },
{ "Revive", "Rianima" },
{ "Radial Menu", "Menu radiale" },
{ "Ritual Book", "Libro rituale" },
{ "Rose", "Rosa" },
{ "Ritual Book ESP", "ESP libro rituale" },
{ "Ritual Object ESP", "ESP oggetto rituale" },
{ "Ritual Objects", "Oggetti rituali" },
{ "RitualBook", "Libro rituale" },
{ "Boar ESP", "ESP Cinghiale" },
{ "Role", "Ruolo" },
{ "RottenFood", "Cibo marcio" },
{ "Rotten Food ESP", "ESP Cibo Avariato" },
{ "Sam", "Sam" },
{ "Shoot Player", "Spara al giocatore" },
{ "Show Coordinates", "Mostra coordinate" },
{ "Skeleton ESP", "ESP scheletro" },
{ "Slaughterhouse", "Macello" },
{ "SlaughterhouseFireEscapeDoor", "Porta antincendio del mattatoio" },
{ "South America", "Sud America" },
{ "South Korea", "Corea del Sud" },
{ "Spade", "Vanga" },
{ "Spade ESP", "ESP vanga" },
{ "Spam Chat", "Spam chat" },
{ "Spawnable Prefabs", "Oggetti generabili" },
{ "Speed Multiplier", "Moltiplicatore velocità" },
{ "Spider", "Ragno" },
{ "Spider ESP", "ESP ragno" },
{ "Spoof Level", "Falsifica livello" },
{ "Spoof Name", "Falsifica nome" },
{ "Spoof Server Name", "Falsifica nome server" },
{ "SurvivalAltarMolly", "Altare di Molly" },
{ "SurvivalAltarSlaughterhouse", "Altare del mattatoio" },
{ "SurvivalAltarTown", "Altare della città" },
{ "SurvivalApril", "April" },
{ "SurvivalCultist", "Cultista" },
{ "SurvivalFrank", "Frank" },
{ "SurvivalKai", "Kai" },
{ "SurvivalMolly", "Molly" },
{ "SurvivalNathan", "Nathan" },
{ "SurvivalRose", "Rose" },
{ "SurvivalSmashableWindow", "Finestra distruttibile" },
{ "Switch realm", "Cambia regno" },
{ "Switch realm (house)", "Cambia (casa)" },
{ "TP Azazel", "TP Azazel" },
{ "TP items to you", "TP oggetti a te" },
{ "TP to Azazel", "TP ad Azazel" },
{ "TV", "Televisione" },
{ "Teleport Keys", "Teletrasporta chiavi" },
{ "Teleport to", "Teletrasporta" },
{ "TP Base", "TP Base" },
{ "TP Altar", "TP Altare" },
{ "TP Basin", "TP Bacino" },
{ "TP Fountain", "TP Fontana" },
{ "Ticket", "Biglietto" },
{ "Town", "Città" },
{ "TownDoor", "Porta della città" },
{ "TownDoor2", "Porta della città 2" },
{ "TownPentagram", "Pentagramma della città" },
{ "TrashCan", "Cestino" },
{ "Truck_Shutter", "Serranda del camion" },
{ "Turkey", "Turchia" },
{ "US East", "Est USA" },
{ "US South Central", "Centro-Sud USA" },
{ "US West", "Ovest USA" },
{ "Unlimited Stamina", "Resistenza illimitata" },
{ "Unlimited UV Light", "UV illimitato" },
{ "Unlock Achievements", "Sblocca obiettivi" },
{ "Unlock Doors", "Sblocca porte" },
{ "God Mode", "Modalità Dio" },
{ "Visuals", "Visuali" },
{ "Waiting for the game to start", "In attesa dell'inizio della partita" },
{ "Walk In Lobby", "Cammina nel lobby" },
{ "Zara", "Zara" },
{ "Bridesmaid 1", "Damigella 1" },
{ "Bridesmaid 2", "Damigella 2" },
{ "Butler", "Maggiordomo" },
{ "Cook", "Cuoco" },
{ "Gardener", "Giardiniere" },
{ "Groomsman 1", "Testimone 1" },
{ "Groomsman 2", "Testimone 2" },
{ "Maid", "Cameriera" },
{ "Photographer", "Fotografo" },
{ "Priest", "Prete" },
{ "Menu Key", "Tasto Menu" },
};
}
}
}

View File

@@ -0,0 +1,297 @@
using System.Collections.Generic;
namespace DevourClient.Localization.Translations
{
public static class JapaneseTranslations
{
public static Dictionary<string, string> GetTranslations()
{
return new Dictionary<string, string>
{
{ "Altar", "祭壇" },
{ "Animal_Gate", "動物のゲート" },
{ "Anna", "アンナ" },
{ "Asia", "アジア" },
{ "Asylum", "精神病院" },
{ "AsylumDoor", "精神病院のドア" },
{ "AsylumDoubleDoor", "精神病院の二重ドア" },
{ "AsylumWhiteDoor", "精神病院の白いドア" },
{ "Australia", "オーストラリア" },
{ "Auto Respawn", "自動リスポーン" },
{ "Auto farm items (x5)", "自動アイテムファーム (x5)" },
{ "Azazel", "Azazel" },
{ "Azazel & Demons", "Azazelと悪魔" },
{ "Azazel ESP", "Azazel ESP" },
{ "Azazel ESP Color", "Azazel ESP色" },
{ "Azazel Snapline", "Azazelライン" },
{ "AzazelAnna", "Azazel-Anna" },
{ "AzazelApril", "Azazel-April" },
{ "AzazelKai", "Azazel-Kai" },
{ "AzazelMolly", "Azazel-Molly" },
{ "AzazelNathan", "Azazel-Nathan" },
{ "AzazelSam", "Azazel-Sam" },
{ "AzazelZara", "Azazel-Zara" },
{ "Barbed Wire", "有刺鉄線" },
{ "Battery", "バッテリー" },
{ "Battery ESP", "バッテリーESP" },
{ "Big Flashlight", "大型懐中電灯" },
{ "Bleach", "漂白剤" },
{ "Bleach ESP", "漂白剤ESP" },
{ "Boar", "イノシシ" },
{ "Bone", "骨" },
{ "Bone ESP", "骨ESP" },
{ "Burn a ritual object", "儀式の物を燃やす" },
{ "Burn all ritual objects", "すべての物を燃やす" },
{ "Cage", "檻" },
{ "Cake", "ケーキ" },
{ "Cake ESP", "ケーキESP" },
{ "Carnival", "カーニバル" },
{ "Cherry Blossom", "桜" },
{ "Clean Head ESP", "きれいな頭ESP" },
{ "Collectables ESP", "コレクションESP" },
{ "Clean The Fountains", "噴水を掃除" },
{ "CleanHead", "きれいな頭" },
{ "Client", "クライアント" },
{ "Coin", "コイン" },
{ "Coin ESP", "コインESP" },
{ "Connection ID", "接続ID" },
{ "Corpse", "死体" },
{ "Corpse ESP", "死体ESP" },
{ "Create Lobby", "ロビーを作成" },
{ "Crosshair", "照準" },
{ "Crow", "カラス" },
{ "Crow ESP", "カラスESP" },
{ "Demon", "悪魔" },
{ "Demon ESP", "悪魔ESP" },
{ "Despawn Boars", "イノシシを削除" },
{ "Despawn Corpses", "死体を削除" },
{ "Despawn Crows", "カラスを削除" },
{ "Despawn Demons", "悪魔を削除" },
{ "Despawn Ghosts", "ゴーストを削除" },
{ "Despawn Inmates", "囚人を削除" },
{ "Despawn Lumps", "塊を削除" },
{ "Despawn Monkeys", "サルを削除" },
{ "Despawn Spiders", "クモを削除" },
{ "Devour", "農家" },
{ "DevourDoorBack", "裏口" },
{ "DevourDoorMain", "正面玄関" },
{ "DevourDoorRoom", "部屋のドア" },
{ "Dirty Head ESP", "汚れた頭ESP" },
{ "DirtyHead", "汚れた頭" },
{ "Doll", "人形" },
{ "Doll ESP", "人形ESP" },
{ "Doll Head ESP", "人形の頭ESP" },
{ "DollHead", "人形の頭" },
{ "Door", "ドア" },
{ "ESP", "ESP" },
{ "ESP Settings", "ESP設定" },
{ "Egg", "卵" },
{ "Egg ESP", "卵ESP" },
{ "Egg-1", "卵-1" },
{ "Egg-10", "卵-10" },
{ "Egg-2", "卵-2" },
{ "Egg-3", "卵-3" },
{ "Egg-4", "卵-4" },
{ "Egg-5", "卵-5" },
{ "Egg-6", "卵-6" },
{ "Egg-7", "卵-7" },
{ "Egg-8", "卵-8" },
{ "Egg-9", "卵-9" },
{ "Egg-Clean-1", "卵-1" },
{ "Egg-Clean-10", "卵-10" },
{ "Egg-Clean-2", "卵-2" },
{ "Egg-Clean-3", "卵-3" },
{ "Egg-Clean-4", "卵-4" },
{ "Egg-Clean-5", "卵-5" },
{ "Egg-Clean-6", "卵-6" },
{ "Egg-Clean-7", "卵-7" },
{ "Egg-Clean-8", "卵-8" },
{ "Egg-Clean-9", "卵-9" },
{ "Elevator_Door", "エレベーターのドア" },
{ "Entities", "エンティティ" },
{ "Error", "エラー" },
{ "Europe", "ヨーロッパ" },
{ "Exit", "終了" },
{ "Exp Modifier", "経験値変更" },
{ "Exp Value", "経験値" },
{ "Farmhouse", "農家" },
{ "Fast Move", "高速移動" },
{ "First Aid ESP", "救急箱ESP" },
{ "First aid", "救急箱" },
{ "FirstAid", "救急箱" },
{ "Flashlight Color", "懐中電灯の色" },
{ "Fly", "飛行" },
{ "Fly Speed", "飛行速度" },
{ "Feather", "羽" },
{ "Food", "食べ物" },
{ "Force Start Game", "強制開始" },
{ "Fountain", "噴水" },
{ "Freeze azazel", "Azazelを凍結" },
{ "Fullbright", "フルブライト" },
{ "Fuse", "ヒューズ" },
{ "Fuse ESP", "ヒューズESP" },
{ "Gasoline", "ガソリン" },
{ "Gasoline ESP", "ガソリンESP" },
{ "Gate", "門" },
{ "Ghost", "幽霊" },
{ "Ghost ESP", "ゴーストESP" },
{ "Goat", "ヤギ" },
{ "Goat ESP", "ヤギESP" },
{ "Goat/Rat ESP", "ヤギ/ネズミESP" },
{ "Hay", "干し草" },
{ "Hay ESP", "干し草ESP" },
{ "Head", "頭" },
{ "Horseshoe", "蹄鉄" },
{ "Host", "ホスト" },
{ "Host Only", "ホストのみ" },
{ "Infinite mirrors", "無限の鏡" },
{ "Inmate", "囚人" },
{ "Inmates ESP", "囚人ESP" },
{ "Inn", "旅館" },
{ "InnDoor", "旅館のドア" },
{ "InnDoubleDoor", "旅館の二重ドア" },
{ "InnShojiDoor", "旅館の障子" },
{ "InnShrine", "旅館の神社" },
{ "InnWardrobe", "旅館のワードローブ" },
{ "InnWoodenDoor", "旅館の木製ドア" },
{ "Instant Win", "即勝利" },
{ "Item ESP", "アイテムESP" },
{ "Items", "アイテム" },
{ "Japan", "日本" },
{ "Jumpscare", "ジャンプスケア" },
{ "Key", "鍵" },
{ "Key ESP", "鍵ESP" },
{ "Kill", "キル" },
{ "Level", "レベル" },
{ "Load Map:", "マップ読込:" },
{ "Lobby Control", "ロビー制御" },
{ "Lobby Manager", "ロビー管理" },
{ "Lobby Size", "ロビーサイズ" },
{ "Lock in cage", "檻に閉じ込める" },
{ "Lump", "塊" },
{ "Lump ESP", "塊ESP" },
{ "Manor", "邸宅" },
{ "Map", "マップ" },
{ "Matchbox", "マッチ箱" },
{ "Matchbox ESP", "マッチ箱ESP" },
{ "Medicine ESP", "薬ESP" },
{ "Menu", "メニュー" },
{ "Mirror", "鏡" },
{ "Misc", "その他" },
{ "Molly", "精神病院" },
{ "Monkey", "猿" },
{ "Monkey ESP", "サルESP" },
{ "Music Box ESP", "オルゴールESP" },
{ "MusicBox", "オルゴール" },
{ "MusicBox-Idle", "オルゴール" },
{ "Network", "ネットワーク" },
{ "Network Info", "ネットワーク情報" },
{ "Network Stats", "ネットワーク統計" },
{ "Not connected", "未接続" },
{ "Patch", "パッチ" },
{ "Pig", "豚" },
{ "Pig ESP", "豚ESP" },
{ "PigExcrement", "豚の排泄物" },
{ "Ping", "Ping" },
{ "Play Random Sound", "ランダム音再生" },
{ "Player", "プレイヤー" },
{ "Instant Interaction", "即時インタラクション" },
{ "Player Count", "プレイヤー数" },
{ "Player ESP", "プレイヤーESP" },
{ "Player ESP Color", "プレイヤーESP色" },
{ "Player Snapline", "プレイヤーライン" },
{ "Players", "プレイヤー" },
{ "Present", "プレゼント" },
{ "Private Lobby", "プライベートロビー" },
{ "Pumpkin", "カボチャ" },
{ "Rat", "ネズミ" },
{ "Rat ESP", "ネズミESP" },
{ "Region", "地域" },
{ "Revive", "蘇生" },
{ "Radial Menu", "ラジアルメニュー" },
{ "Ritual Book", "儀式の本" },
{ "Rose", "バラ" },
{ "Ritual Book ESP", "儀式の本ESP" },
{ "Ritual Object ESP", "儀式オブジェクトESP" },
{ "Ritual Objects", "儀式の品" },
{ "RitualBook", "儀式の本" },
{ "Boar ESP", "イシシESP" },
{ "Role", "役割" },
{ "RottenFood", "腐った食べ物" },
{ "Rotten Food ESP", "腐った食べ物ESP" },
{ "Sam", "サム" },
{ "Shoot Player", "プレイヤーを撃つ" },
{ "Show Coordinates", "座標を表示" },
{ "Skeleton ESP", "スケルトンESP" },
{ "Slaughterhouse", "屠殺場" },
{ "SlaughterhouseFireEscapeDoor", "屠殺場の非常口" },
{ "South America", "南アメリカ" },
{ "South Korea", "韓国" },
{ "Spade", "シャベル" },
{ "Spade ESP", "シャベルESP" },
{ "Spam Chat", "チャットスパム" },
{ "Spawnable Prefabs", "生成可能なオブジェクト" },
{ "Speed Multiplier", "速度倍率" },
{ "Spider", "クモ" },
{ "Spider ESP", "蜘蛛ESP" },
{ "Spoof Level", "レベル偽装" },
{ "Spoof Name", "名前偽装" },
{ "Spoof Server Name", "サーバー名偽装" },
{ "SurvivalAltarMolly", "モリーの祭壇" },
{ "SurvivalAltarSlaughterhouse", "屠殺場の祭壇" },
{ "SurvivalAltarTown", "町の祭壇" },
{ "SurvivalApril", "エイプリル" },
{ "SurvivalCultist", "カルト信者" },
{ "SurvivalFrank", "フランク" },
{ "SurvivalKai", "カイ" },
{ "SurvivalMolly", "モリー" },
{ "SurvivalNathan", "ネイサン" },
{ "SurvivalRose", "ローズ" },
{ "SurvivalSmashableWindow", "破壊可能な窓" },
{ "Switch realm", "領域を切り替え" },
{ "Switch realm (house)", "領域切替(家)" },
{ "TP Azazel", "Azazel TP" },
{ "TP items to you", "アイテムをテレポート" },
{ "TP to Azazel", "Azazelへテレポート" },
{ "TV", "テレビ" },
{ "Teleport Keys", "鍵をテレポート" },
{ "Teleport to", "テレポート" },
{ "TP Base", "ベースTP" },
{ "TP Altar", "祭壇TP" },
{ "TP Basin", "水盤TP" },
{ "TP Fountain", "噴水TP" },
{ "Ticket", "チケット" },
{ "Town", "町" },
{ "TownDoor", "町のドア" },
{ "TownDoor2", "町のドア2" },
{ "TownPentagram", "町の五芒星" },
{ "TrashCan", "ゴミ箱" },
{ "Truck_Shutter", "トラックのシャッター" },
{ "Turkey", "トルコ" },
{ "US East", "米国東部" },
{ "US South Central", "米国中南部" },
{ "US West", "米国西部" },
{ "Unlimited Stamina", "無限スタミナ" },
{ "Unlimited UV Light", "無制限UV" },
{ "Unlock Achievements", "実績の解除" },
{ "Unlock Doors", "ドアの解除" },
{ "God Mode", "神モード" },
{ "Visuals", "ビジュアル" },
{ "Waiting for the game to start", "ゲーム開始を待っています" },
{ "Walk In Lobby", "ロビーで歩く" },
{ "Zara", "ザラ" },
{ "Bridesmaid 1", "ブライズメイド 1" },
{ "Bridesmaid 2", "ブライズメイド 2" },
{ "Butler", "執事" },
{ "Cook", "料理人" },
{ "Gardener", "庭師" },
{ "Groomsman 1", "グルームズマン 1" },
{ "Groomsman 2", "グルームズマン 2" },
{ "Maid", "メイド" },
{ "Photographer", "写真家" },
{ "Priest", "司祭" },
{ "Menu Key", "メニューキー" },
};
}
}
}

View File

@@ -0,0 +1,297 @@
using System.Collections.Generic;
namespace DevourClient.Localization.Translations
{
public static class KoreanTranslations
{
public static Dictionary<string, string> GetTranslations()
{
return new Dictionary<string, string>
{
{ "Altar", "제단" },
{ "Animal_Gate", "동물 문" },
{ "Anna", "안나" },
{ "Asia", "아시아" },
{ "Asylum", "정신병원" },
{ "AsylumDoor", "정신병원 문" },
{ "AsylumDoubleDoor", "정신병원 이중문" },
{ "AsylumWhiteDoor", "정신병원 흰색 문" },
{ "Australia", "호주" },
{ "Auto Respawn", "자동 부활" },
{ "Auto farm items (x5)", "자동 아이템 파밍 (x5)" },
{ "Azazel", "Azazel" },
{ "Azazel & Demons", "Azazel과 악마" },
{ "Azazel ESP", "Azazel ESP" },
{ "Azazel ESP Color", "Azazel ESP 색상" },
{ "Azazel Snapline", "Azazel 라인" },
{ "AzazelAnna", "Azazel-Anna" },
{ "AzazelApril", "Azazel-April" },
{ "AzazelKai", "Azazel-Kai" },
{ "AzazelMolly", "Azazel-Molly" },
{ "AzazelNathan", "Azazel-Nathan" },
{ "AzazelSam", "Azazel-Sam" },
{ "AzazelZara", "Azazel-Zara" },
{ "Barbed Wire", "철조망" },
{ "Battery", "배터리" },
{ "Battery ESP", "배터리 ESP" },
{ "Big Flashlight", "큰 손전등" },
{ "Bleach", "표백제" },
{ "Bleach ESP", "표백제 ESP" },
{ "Boar", "멧돼지" },
{ "Bone", "뼈" },
{ "Bone ESP", "뼈 ESP" },
{ "Burn a ritual object", "의식 물체 태우기" },
{ "Burn all ritual objects", "모든 물체 태우기" },
{ "Cage", "우리" },
{ "Cake", "케이크" },
{ "Cake ESP", "케이크 ESP" },
{ "Carnival", "카니발" },
{ "Cherry Blossom", "벚꽃" },
{ "Clean Head ESP", "깨끗한 머리 ESP" },
{ "Collectables ESP", "수집품 ESP" },
{ "Clean The Fountains", "분수 청소" },
{ "CleanHead", "깨끗한 머리" },
{ "Client", "클라이언트" },
{ "Coin", "동전" },
{ "Coin ESP", "동전 ESP" },
{ "Connection ID", "연결 ID" },
{ "Corpse", "시체" },
{ "Corpse ESP", "시체 ESP" },
{ "Create Lobby", "로비 생성" },
{ "Crosshair", "조준점" },
{ "Crow", "까마귀" },
{ "Crow ESP", "까마귀 ESP" },
{ "Demon", "악마" },
{ "Demon ESP", "악마 ESP" },
{ "Despawn Boars", "멧돼지 제거" },
{ "Despawn Corpses", "시체 제거" },
{ "Despawn Crows", "까마귀 제거" },
{ "Despawn Demons", "악마 제거" },
{ "Despawn Ghosts", "유령 제거" },
{ "Despawn Inmates", "수감자 제거" },
{ "Despawn Lumps", "덩어리 제거" },
{ "Despawn Monkeys", "원숭이 제거" },
{ "Despawn Spiders", "거미 제거" },
{ "Devour", "농가" },
{ "DevourDoorBack", "뒷문" },
{ "DevourDoorMain", "정문" },
{ "DevourDoorRoom", "방문" },
{ "Dirty Head ESP", "더러운 머리 ESP" },
{ "DirtyHead", "더러운 머리" },
{ "Doll", "인형" },
{ "Doll ESP", "인형 ESP" },
{ "Doll Head ESP", "인형 머리 ESP" },
{ "DollHead", "인형 머리" },
{ "Door", "문" },
{ "ESP", "ESP" },
{ "ESP Settings", "ESP 설정" },
{ "Egg", "달걀" },
{ "Egg ESP", "계란 ESP" },
{ "Egg-1", "달걀-1" },
{ "Egg-10", "달걀-10" },
{ "Egg-2", "달걀-2" },
{ "Egg-3", "달걀-3" },
{ "Egg-4", "달걀-4" },
{ "Egg-5", "달걀-5" },
{ "Egg-6", "달걀-6" },
{ "Egg-7", "달걀-7" },
{ "Egg-8", "달걀-8" },
{ "Egg-9", "달걀-9" },
{ "Egg-Clean-1", "달걀-1" },
{ "Egg-Clean-10", "달걀-10" },
{ "Egg-Clean-2", "달걀-2" },
{ "Egg-Clean-3", "달걀-3" },
{ "Egg-Clean-4", "달걀-4" },
{ "Egg-Clean-5", "달걀-5" },
{ "Egg-Clean-6", "달걀-6" },
{ "Egg-Clean-7", "달걀-7" },
{ "Egg-Clean-8", "달걀-8" },
{ "Egg-Clean-9", "달걀-9" },
{ "Elevator_Door", "엘리베이터 문" },
{ "Entities", "엔티티" },
{ "Error", "오류" },
{ "Europe", "유럽" },
{ "Exit", "나가기" },
{ "Exp Modifier", "경험치 수정" },
{ "Exp Value", "경험치 값" },
{ "Farmhouse", "농가" },
{ "Fast Move", "빠른 이동" },
{ "First Aid ESP", "응급처치 ESP" },
{ "First aid", "응급처치" },
{ "FirstAid", "응급처치" },
{ "Flashlight Color", "손전등 색상" },
{ "Fly", "비행" },
{ "Fly Speed", "비행 속도" },
{ "Feather", "깃털" },
{ "Food", "음식" },
{ "Force Start Game", "강제 시작" },
{ "Fountain", "분수" },
{ "Freeze azazel", "Azazel 얼리기" },
{ "Fullbright", "전체 밝기" },
{ "Fuse", "퓨즈" },
{ "Fuse ESP", "퓨즈 ESP" },
{ "Gasoline", "휘발유" },
{ "Gasoline ESP", "휘발유 ESP" },
{ "Gate", "대문" },
{ "Ghost", "유령" },
{ "Ghost ESP", "유령 ESP" },
{ "Goat", "염소" },
{ "Goat ESP", "염소 ESP" },
{ "Goat/Rat ESP", "염소/쥐 ESP" },
{ "Hay", "건초" },
{ "Hay ESP", "건초 ESP" },
{ "Head", "머리" },
{ "Horseshoe", "말굽" },
{ "Host", "호스트" },
{ "Host Only", "호스트만" },
{ "Infinite mirrors", "무한 거울" },
{ "Inmate", "수감자" },
{ "Inmates ESP", "수감자 ESP" },
{ "Inn", "여관" },
{ "InnDoor", "여관 문" },
{ "InnDoubleDoor", "여관 이중문" },
{ "InnShojiDoor", "여관 장지문" },
{ "InnShrine", "여관 신사" },
{ "InnWardrobe", "여관 옷장" },
{ "InnWoodenDoor", "여관 나무문" },
{ "Instant Win", "즉시 승리" },
{ "Item ESP", "아이템 ESP" },
{ "Items", "아이템" },
{ "Japan", "일본" },
{ "Jumpscare", "점프스케어" },
{ "Key", "열쇠" },
{ "Key ESP", "열쇠 ESP" },
{ "Kill", "죽이기" },
{ "Level", "레벨" },
{ "Load Map:", "맵 로드:" },
{ "Lobby Control", "로비 제어" },
{ "Lobby Manager", "로비 관리자" },
{ "Lobby Size", "로비 크기" },
{ "Lock in cage", "우리에 가두기" },
{ "Lump", "덩어리" },
{ "Lump ESP", "덩어리 ESP" },
{ "Manor", "저택" },
{ "Map", "맵" },
{ "Matchbox", "성냥갑" },
{ "Matchbox ESP", "성냥갑 ESP" },
{ "Medicine ESP", "약품 ESP" },
{ "Menu", "메뉴" },
{ "Mirror", "거울" },
{ "Misc", "기타" },
{ "Molly", "정신병원" },
{ "Monkey", "원숭이" },
{ "Monkey ESP", "원숭이 ESP" },
{ "Music Box ESP", "오르골 ESP" },
{ "MusicBox", "오르골" },
{ "MusicBox-Idle", "오르골" },
{ "Network", "네트워크" },
{ "Network Info", "네트워크 정보" },
{ "Network Stats", "네트워크 통계" },
{ "Not connected", "연결되지 않음" },
{ "Patch", "패치" },
{ "Pig", "돼지" },
{ "Pig ESP", "돼지 ESP" },
{ "PigExcrement", "돼지 배설물" },
{ "Ping", "핑" },
{ "Play Random Sound", "랜덤 사운드 재생" },
{ "Player", "플레이어" },
{ "Instant Interaction", "즉시 상호작용" },
{ "Player Count", "플레이어 수" },
{ "Player ESP", "플레이어 ESP" },
{ "Player ESP Color", "플레이어 ESP 색상" },
{ "Player Snapline", "플레이어 라인" },
{ "Players", "플레이어" },
{ "Present", "선물" },
{ "Private Lobby", "비공개 로비" },
{ "Pumpkin", "호박" },
{ "Rat", "쥐" },
{ "Rat ESP", "쥐 ESP" },
{ "Region", "지역" },
{ "Revive", "부활" },
{ "Radial Menu", "방사형 메뉴" },
{ "Ritual Book", "의식서" },
{ "Rose", "장미" },
{ "Ritual Book ESP", "의식서 ESP" },
{ "Ritual Object ESP", "의식 물체 ESP" },
{ "Ritual Objects", "의식 물품" },
{ "RitualBook", "의식서" },
{ "Boar ESP", "멧돼지 ESP" },
{ "Role", "역할" },
{ "RottenFood", "썩은 음식" },
{ "Rotten Food ESP", "썩은 음식 ESP" },
{ "Sam", "샘" },
{ "Shoot Player", "플레이어 쏘기" },
{ "Show Coordinates", "좌표 표시" },
{ "Skeleton ESP", "스켈레톤 ESP" },
{ "Slaughterhouse", "도살장" },
{ "SlaughterhouseFireEscapeDoor", "도축장 비상구" },
{ "South America", "남미" },
{ "South Korea", "한국" },
{ "Spade", "삽" },
{ "Spade ESP", "삽 ESP" },
{ "Spam Chat", "채팅 도배" },
{ "Spawnable Prefabs", "생성 가능한 오브젝트" },
{ "Speed Multiplier", "속도 배율" },
{ "Spider", "거미" },
{ "Spider ESP", "거미 ESP" },
{ "Spoof Level", "레벨 위장" },
{ "Spoof Name", "이름 위장" },
{ "Spoof Server Name", "서버 이름 위장" },
{ "SurvivalAltarMolly", "몰리 제단" },
{ "SurvivalAltarSlaughterhouse", "도축장 제단" },
{ "SurvivalAltarTown", "마을 제단" },
{ "SurvivalApril", "에이프릴" },
{ "SurvivalCultist", "광신도" },
{ "SurvivalFrank", "프랭크" },
{ "SurvivalKai", "카이" },
{ "SurvivalMolly", "몰리" },
{ "SurvivalNathan", "네이선" },
{ "SurvivalRose", "로즈" },
{ "SurvivalSmashableWindow", "파괴 가능한 창문" },
{ "Switch realm", "영역 전환" },
{ "Switch realm (house)", "영역 전환 (집)" },
{ "TP Azazel", "Azazel TP" },
{ "TP items to you", "아이템 텔레포트" },
{ "TP to Azazel", "Azazel로 텔레포트" },
{ "TV", "TV" },
{ "Teleport Keys", "열쇠 텔레포트" },
{ "Teleport to", "텔레포트" },
{ "TP Base", "기지 TP" },
{ "TP Altar", "제단 TP" },
{ "TP Basin", "대야 TP" },
{ "TP Fountain", "분수 TP" },
{ "Ticket", "티켓" },
{ "Town", "마을" },
{ "TownDoor", "마을 문" },
{ "TownDoor2", "마을 문2" },
{ "TownPentagram", "마을 오각별" },
{ "TrashCan", "쓰레기통" },
{ "Truck_Shutter", "트럭 셔터" },
{ "Turkey", "튀르키예" },
{ "US East", "미국 동부" },
{ "US South Central", "미국 중남부" },
{ "US West", "미국 서부" },
{ "Unlimited Stamina", "무제한 스태미나" },
{ "Unlimited UV Light", "무제한 UV" },
{ "Unlock Achievements", "업적 잠금 해제" },
{ "Unlock Doors", "문 잠금 해제" },
{ "God Mode", "신 모드" },
{ "Visuals", "비주얼" },
{ "Waiting for the game to start", "게임 시작 대기 중" },
{ "Walk In Lobby", "로비에서 걷기" },
{ "Zara", "자라" },
{ "Bridesmaid 1", "신부 들러리 1" },
{ "Bridesmaid 2", "신부 들러리 2" },
{ "Butler", "집사" },
{ "Cook", "요리사" },
{ "Gardener", "정원사" },
{ "Groomsman 1", "신랑 들러리 1" },
{ "Groomsman 2", "신랑 들러리 2" },
{ "Maid", "하녀" },
{ "Photographer", "사진가" },
{ "Priest", "사제" },
{ "Menu Key", "메뉴 키" },
};
}
}
}

View File

@@ -0,0 +1,297 @@
using System.Collections.Generic;
namespace DevourClient.Localization.Translations
{
public static class PortugueseTranslations
{
public static Dictionary<string, string> GetTranslations()
{
return new Dictionary<string, string>
{
{ "Altar", "Altar" },
{ "Animal_Gate", "Portão de animais" },
{ "Anna", "Anna" },
{ "Asia", "Ásia" },
{ "Asylum", "Asilo" },
{ "AsylumDoor", "Porta do asilo" },
{ "AsylumDoubleDoor", "Porta dupla do asilo" },
{ "AsylumWhiteDoor", "Porta branca do asilo" },
{ "Australia", "Austrália" },
{ "Auto Respawn", "Respawn automático" },
{ "Auto farm items (x5)", "Farm automático de itens (x5)" },
{ "Azazel", "Azazel" },
{ "Azazel & Demons", "Azazel e demônios" },
{ "Azazel ESP", "ESP Azazel" },
{ "Azazel ESP Color", "Cor ESP Azazel" },
{ "Azazel Snapline", "Linha Azazel" },
{ "AzazelAnna", "Azazel-Anna" },
{ "AzazelApril", "Azazel-April" },
{ "AzazelKai", "Azazel-Kai" },
{ "AzazelMolly", "Azazel-Molly" },
{ "AzazelNathan", "Azazel-Nathan" },
{ "AzazelSam", "Azazel-Sam" },
{ "AzazelZara", "Azazel-Zara" },
{ "Barbed Wire", "Arame farpado" },
{ "Battery", "Bateria" },
{ "Battery ESP", "ESP bateria" },
{ "Big Flashlight", "Lanterna grande" },
{ "Bleach", "Alvejante" },
{ "Bleach ESP", "ESP alvejante" },
{ "Boar", "Javali" },
{ "Bone", "Osso" },
{ "Bone ESP", "ESP osso" },
{ "Burn a ritual object", "Queimar objeto ritual" },
{ "Burn all ritual objects", "Queimar todos os objetos" },
{ "Cage", "Gaiola" },
{ "Cake", "Bolo" },
{ "Cake ESP", "ESP bolo" },
{ "Carnival", "Carnaval" },
{ "Cherry Blossom", "Flor de cerejeira" },
{ "Clean Head ESP", "ESP cabeça limpa" },
{ "Collectables ESP", "ESP colecionáveis" },
{ "Clean The Fountains", "Limpar fontes" },
{ "CleanHead", "Cabeça limpa" },
{ "Client", "Cliente" },
{ "Coin", "Moeda" },
{ "Coin ESP", "ESP moeda" },
{ "Connection ID", "ID de conexão" },
{ "Corpse", "Cadáver" },
{ "Corpse ESP", "ESP cadáver" },
{ "Create Lobby", "Criar lobby" },
{ "Crosshair", "Mira" },
{ "Crow", "Corvo" },
{ "Crow ESP", "ESP corvo" },
{ "Demon", "Demônio" },
{ "Demon ESP", "ESP demônio" },
{ "Despawn Boars", "Remover javalis" },
{ "Despawn Corpses", "Remover cadáveres" },
{ "Despawn Crows", "Remover corvos" },
{ "Despawn Demons", "Remover demônios" },
{ "Despawn Ghosts", "Remover fantasmas" },
{ "Despawn Inmates", "Remover detentos" },
{ "Despawn Lumps", "Remover massas" },
{ "Despawn Monkeys", "Remover macacos" },
{ "Despawn Spiders", "Remover aranhas" },
{ "Devour", "Fazenda" },
{ "DevourDoorBack", "Porta traseira" },
{ "DevourDoorMain", "Porta principal" },
{ "DevourDoorRoom", "Porta do quarto" },
{ "Dirty Head ESP", "ESP cabeça suja" },
{ "DirtyHead", "Cabeça suja" },
{ "Doll", "Boneca" },
{ "Doll ESP", "ESP boneca" },
{ "Doll Head ESP", "ESP cabeça de boneca" },
{ "DollHead", "Cabeça de boneca" },
{ "Door", "Porta" },
{ "ESP", "ESP" },
{ "ESP Settings", "Configurações ESP" },
{ "Egg", "Ovo" },
{ "Egg ESP", "ESP ovo" },
{ "Egg-1", "Ovo-1" },
{ "Egg-10", "Ovo-10" },
{ "Egg-2", "Ovo-2" },
{ "Egg-3", "Ovo-3" },
{ "Egg-4", "Ovo-4" },
{ "Egg-5", "Ovo-5" },
{ "Egg-6", "Ovo-6" },
{ "Egg-7", "Ovo-7" },
{ "Egg-8", "Ovo-8" },
{ "Egg-9", "Ovo-9" },
{ "Egg-Clean-1", "Ovo-1" },
{ "Egg-Clean-10", "Ovo-10" },
{ "Egg-Clean-2", "Ovo-2" },
{ "Egg-Clean-3", "Ovo-3" },
{ "Egg-Clean-4", "Ovo-4" },
{ "Egg-Clean-5", "Ovo-5" },
{ "Egg-Clean-6", "Ovo-6" },
{ "Egg-Clean-7", "Ovo-7" },
{ "Egg-Clean-8", "Ovo-8" },
{ "Egg-Clean-9", "Ovo-9" },
{ "Elevator_Door", "Porta do elevador" },
{ "Entities", "Entidades" },
{ "Error", "Erro" },
{ "Europe", "Europa" },
{ "Exit", "Sair" },
{ "Exp Modifier", "Modificador exp" },
{ "Exp Value", "Valor exp" },
{ "Farmhouse", "Fazenda" },
{ "Fast Move", "Movimento rápido" },
{ "First Aid ESP", "ESP primeiros socorros" },
{ "First aid", "Primeiros socorros" },
{ "FirstAid", "Primeiros socorros" },
{ "Flashlight Color", "Cor da lanterna" },
{ "Fly", "Voar" },
{ "Fly Speed", "Velocidade voo" },
{ "Feather", "Pena" },
{ "Food", "Comida" },
{ "Force Start Game", "Forçar início" },
{ "Fountain", "Fonte" },
{ "Freeze azazel", "Congelar Azazel" },
{ "Fullbright", "Brilho total" },
{ "Fuse", "Fusível" },
{ "Fuse ESP", "ESP fusível" },
{ "Gasoline", "Gasolina" },
{ "Gasoline ESP", "ESP gasolina" },
{ "Gate", "Portão" },
{ "Ghost", "Fantasma" },
{ "Ghost ESP", "ESP fantasma" },
{ "Goat", "Cabra" },
{ "Goat ESP", "ESP cabra" },
{ "Goat/Rat ESP", "ESP cabra/rato" },
{ "Hay", "Feno" },
{ "Hay ESP", "ESP feno" },
{ "Head", "Cabeça" },
{ "Horseshoe", "Ferradura" },
{ "Host", "Anfitrião" },
{ "Host Only", "Apenas host" },
{ "Infinite mirrors", "Espelhos infinitos" },
{ "Inmate", "Detento" },
{ "Inmates ESP", "ESP detentos" },
{ "Inn", "Pousada" },
{ "InnDoor", "Porta da pousada" },
{ "InnDoubleDoor", "Porta dupla da pousada" },
{ "InnShojiDoor", "Porta shoji da pousada" },
{ "InnShrine", "Santuário da pousada" },
{ "InnWardrobe", "Guarda-roupa da pousada" },
{ "InnWoodenDoor", "Porta de madeira da pousada" },
{ "Instant Win", "Vitória instantânea" },
{ "Item ESP", "ESP item" },
{ "Items", "Itens" },
{ "Japan", "Japão" },
{ "Jumpscare", "Susto" },
{ "Key", "Chave" },
{ "Key ESP", "ESP chave" },
{ "Kill", "Matar" },
{ "Level", "Nível" },
{ "Load Map:", "Carregar mapa:" },
{ "Lobby Control", "Controle de lobby" },
{ "Lobby Manager", "Gerenciador de lobby" },
{ "Lobby Size", "Tamanho do lobby" },
{ "Lock in cage", "Trancar na gaiola" },
{ "Lump", "Caroço" },
{ "Lump ESP", "ESP caroço" },
{ "Manor", "Solar" },
{ "Map", "Mappa" },
{ "Matchbox", "Caixa de fósforos" },
{ "Matchbox ESP", "ESP caixa de fósforos" },
{ "Medicine ESP", "ESP remédio" },
{ "Menu", "Menu" },
{ "Mirror", "Espelho" },
{ "Misc", "Diversos" },
{ "Molly", "Asilo" },
{ "Monkey", "Macaco" },
{ "Monkey ESP", "ESP macaco" },
{ "Music Box ESP", "ESP caixa de música" },
{ "MusicBox", "Caixa de música" },
{ "MusicBox-Idle", "Caixa de música" },
{ "Network", "Rede" },
{ "Network Info", "Info de rede" },
{ "Network Stats", "Estatísticas de rede" },
{ "Not connected", "Não conectado" },
{ "Patch", "Patch" },
{ "Pig", "Porco" },
{ "Pig ESP", "ESP porco" },
{ "PigExcrement", "Excremento de porco" },
{ "Ping", "Ping" },
{ "Play Random Sound", "Reproduzir som aleatório" },
{ "Player", "Jogador" },
{ "Instant Interaction", "Interação instantânea" },
{ "Player Count", "Número de jogadores" },
{ "Player ESP", "ESP jogador" },
{ "Player ESP Color", "Cor ESP jogador" },
{ "Player Snapline", "Linha jogador" },
{ "Players", "Jogadores" },
{ "Present", "Presente" },
{ "Private Lobby", "Lobby privado" },
{ "Pumpkin", "Abóbora" },
{ "Rat", "Rato" },
{ "Rat ESP", "ESP rato" },
{ "Region", "Região" },
{ "Revive", "Reviver" },
{ "Radial Menu", "Menu radial" },
{ "Ritual Book", "Livro ritual" },
{ "Rose", "Rosa" },
{ "Ritual Book ESP", "ESP livro ritual" },
{ "Ritual Object ESP", "ESP objeto ritual" },
{ "Ritual Objects", "Objetos rituais" },
{ "RitualBook", "Livro ritual" },
{ "Boar ESP", "ESP Javali" },
{ "Role", "Função" },
{ "RottenFood", "Comida podre" },
{ "Rotten Food ESP", "ESP comida podre" },
{ "Sam", "Sam" },
{ "Shoot Player", "Atirar no jogador" },
{ "Show Coordinates", "Mostrar coordenadas" },
{ "Skeleton ESP", "ESP esqueleto" },
{ "Slaughterhouse", "Matadouro" },
{ "SlaughterhouseFireEscapeDoor", "Porta de incêndio do matadouro" },
{ "South America", "América do Sul" },
{ "South Korea", "Coreia do Sul" },
{ "Spade", "Pá" },
{ "Spade ESP", "ESP pá" },
{ "Spam Chat", "Spam no chat" },
{ "Spawnable Prefabs", "Objetos geráveis" },
{ "Speed Multiplier", "Multiplicador velocidade" },
{ "Spider", "Aranha" },
{ "Spider ESP", "ESP aranha" },
{ "Spoof Level", "Falsificar nível" },
{ "Spoof Name", "Falsificar nome" },
{ "Spoof Server Name", "Falsificar nome servidor" },
{ "SurvivalAltarMolly", "Altar de Molly" },
{ "SurvivalAltarSlaughterhouse", "Altar do matadouro" },
{ "SurvivalAltarTown", "Altar da cidade" },
{ "SurvivalApril", "April" },
{ "SurvivalCultist", "Cultista" },
{ "SurvivalFrank", "Frank" },
{ "SurvivalKai", "Kai" },
{ "SurvivalMolly", "Molly" },
{ "SurvivalNathan", "Nathan" },
{ "SurvivalRose", "Rose" },
{ "SurvivalSmashableWindow", "Janela quebrável" },
{ "Switch realm", "Trocar reino" },
{ "Switch realm (house)", "Trocar (casa)" },
{ "TP Azazel", "TP Azazel" },
{ "TP items to you", "TP itens para você" },
{ "TP to Azazel", "TP para Azazel" },
{ "TV", "Televisão" },
{ "Teleport Keys", "Teletransportar chaves" },
{ "Teleport to", "Teletransportar" },
{ "TP Base", "TP base" },
{ "TP Altar", "TP altar" },
{ "TP Basin", "TP bacia" },
{ "TP Fountain", "TP fonte" },
{ "Ticket", "Bilhete" },
{ "Town", "Cidade" },
{ "TownDoor", "Porta da cidade" },
{ "TownDoor2", "Porta da cidade 2" },
{ "TownPentagram", "Pentagrama da cidade" },
{ "TrashCan", "Lixeira" },
{ "Truck_Shutter", "Persiana de caminhão" },
{ "Turkey", "Turquia" },
{ "US East", "Leste dos EUA" },
{ "US South Central", "Centro-Sul dos EUA" },
{ "US West", "Oeste dos EUA" },
{ "Unlimited Stamina", "Resistência ilimitada" },
{ "Unlimited UV Light", "UV ilimitado" },
{ "Unlock Achievements", "Desbloquear conquistas" },
{ "Unlock Doors", "Desbloquear portas" },
{ "God Mode", "Modo Deus" },
{ "Visuals", "Visuais" },
{ "Waiting for the game to start", "Aguardando início do jogo" },
{ "Walk In Lobby", "Andar no lobby" },
{ "Zara", "Zara" },
{ "Bridesmaid 1", "Dama de honra 1" },
{ "Bridesmaid 2", "Dama de honra 2" },
{ "Butler", "Mordomo" },
{ "Cook", "Cozinheiro" },
{ "Gardener", "Jardineiro" },
{ "Groomsman 1", "Padrinho 1" },
{ "Groomsman 2", "Padrinho 2" },
{ "Maid", "Empregada" },
{ "Photographer", "Fotógrafo" },
{ "Priest", "Padre" },
{ "Menu Key", "Tecla de Menu" },
};
}
}
}

View File

@@ -0,0 +1,297 @@
using System.Collections.Generic;
namespace DevourClient.Localization.Translations
{
public static class RussianTranslations
{
public static Dictionary<string, string> GetTranslations()
{
return new Dictionary<string, string>
{
{ "Altar", "Алтарь" },
{ "Animal_Gate", "Ворота для животных" },
{ "Anna", "Анна" },
{ "Asia", "Азия" },
{ "Asylum", "Психбольница" },
{ "AsylumDoor", "Дверь приюта" },
{ "AsylumDoubleDoor", "Двойная дверь приюта" },
{ "AsylumWhiteDoor", "Белая дверь приюта" },
{ "Australia", "Австралия" },
{ "Auto Respawn", "Авто-возрождение" },
{ "Auto farm items (x5)", "Авто-фарм предметов (x5)" },
{ "Azazel", "Azazel" },
{ "Azazel & Demons", "Azazel и демоны" },
{ "Azazel ESP", "ESP Azazel" },
{ "Azazel ESP Color", "Цвет ESP Azazel" },
{ "Azazel Snapline", "Линия к Azazel" },
{ "AzazelAnna", "Azazel-Anna" },
{ "AzazelApril", "Azazel-April" },
{ "AzazelKai", "Azazel-Kai" },
{ "AzazelMolly", "Azazel-Molly" },
{ "AzazelNathan", "Azazel-Nathan" },
{ "AzazelSam", "Azazel-Sam" },
{ "AzazelZara", "Azazel-Zara" },
{ "Barbed Wire", "Колючая проволока" },
{ "Battery", "Батарея" },
{ "Battery ESP", "ESP батареи" },
{ "Big Flashlight", "Большой фонарик" },
{ "Bleach", "Отбеливатель" },
{ "Bleach ESP", "ESP отбеливателя" },
{ "Boar", "Кабан" },
{ "Bone", "Кость" },
{ "Bone ESP", "ESP кости" },
{ "Burn a ritual object", "Сжечь ритуальный объект" },
{ "Burn all ritual objects", "Сжечь все объекты" },
{ "Cage", "Клетка" },
{ "Cake", "Торт" },
{ "Cake ESP", "ESP торта" },
{ "Carnival", "Карнавал" },
{ "Cherry Blossom", "Вишнёвый цвет" },
{ "Clean Head ESP", "ESP чистой головы" },
{ "Collectables ESP", "ESP коллекционных предметов" },
{ "Clean The Fountains", "Очистить фонтаны" },
{ "CleanHead", "Чистая голова" },
{ "Client", "Клиент" },
{ "Coin", "Монета" },
{ "Coin ESP", "ESP монеты" },
{ "Connection ID", "ID подключения" },
{ "Corpse", "Труп" },
{ "Corpse ESP", "ESP трупа" },
{ "Create Lobby", "Создать лобби" },
{ "Crosshair", "Прицел" },
{ "Crow", "Ворона" },
{ "Crow ESP", "ESP вороны" },
{ "Demon", "Демон" },
{ "Demon ESP", "ESP демона" },
{ "Despawn Boars", "Удалить кабанов" },
{ "Despawn Corpses", "Удалить трупы" },
{ "Despawn Crows", "Удалить воронов" },
{ "Despawn Demons", "Удалить демонов" },
{ "Despawn Ghosts", "Удалить призраков" },
{ "Despawn Inmates", "Удалить заключенных" },
{ "Despawn Lumps", "Удалить комки" },
{ "Despawn Monkeys", "Удалить обезьян" },
{ "Despawn Spiders", "Удалить пауков" },
{ "Devour", "Ферма" },
{ "DevourDoorBack", "Задняя дверь" },
{ "DevourDoorMain", "Главная дверь" },
{ "DevourDoorRoom", "Дверь комнаты" },
{ "Dirty Head ESP", "ESP грязной головы" },
{ "DirtyHead", "Грязная голова" },
{ "Doll", "Кукла" },
{ "Doll ESP", "ESP куклы" },
{ "Doll Head ESP", "ESP головы куклы" },
{ "DollHead", "Голова куклы" },
{ "Door", "Дверь" },
{ "ESP", "ESP" },
{ "ESP Settings", "Настройки ESP" },
{ "Egg", "Яйцо" },
{ "Egg ESP", "ESP яйца" },
{ "Egg-1", "Яйцо-1" },
{ "Egg-10", "Яйцо-10" },
{ "Egg-2", "Яйцо-2" },
{ "Egg-3", "Яйцо-3" },
{ "Egg-4", "Яйцо-4" },
{ "Egg-5", "Яйцо-5" },
{ "Egg-6", "Яйцо-6" },
{ "Egg-7", "Яйцо-7" },
{ "Egg-8", "Яйцо-8" },
{ "Egg-9", "Яйцо-9" },
{ "Egg-Clean-1", "Яйцо-1" },
{ "Egg-Clean-10", "Яйцо-10" },
{ "Egg-Clean-2", "Яйцо-2" },
{ "Egg-Clean-3", "Яйцо-3" },
{ "Egg-Clean-4", "Яйцо-4" },
{ "Egg-Clean-5", "Яйцо-5" },
{ "Egg-Clean-6", "Яйцо-6" },
{ "Egg-Clean-7", "Яйцо-7" },
{ "Egg-Clean-8", "Яйцо-8" },
{ "Egg-Clean-9", "Яйцо-9" },
{ "Elevator_Door", "Дверь лифта" },
{ "Entities", "Сущности" },
{ "Error", "Ошибка" },
{ "Europe", "Европа" },
{ "Exit", "Выход" },
{ "Exp Modifier", "Модификатор опыта" },
{ "Exp Value", "Значение опыта" },
{ "Farmhouse", "Ферма" },
{ "Fast Move", "Быстрое движение" },
{ "First Aid ESP", "ESP аптечки" },
{ "First aid", "Первая помощь" },
{ "FirstAid", "Аптечка" },
{ "Flashlight Color", "Цвет фонарика" },
{ "Fly", "Полет" },
{ "Fly Speed", "Скорость полета" },
{ "Feather", "Перо" },
{ "Food", "Еда" },
{ "Force Start Game", "Принудительный старт" },
{ "Fountain", "Фонтан" },
{ "Freeze azazel", "Заморозить Azazel" },
{ "Fullbright", "Полная яркость" },
{ "Fuse", "Предохранитель" },
{ "Fuse ESP", "ESP предохранителя" },
{ "Gasoline", "Бензин" },
{ "Gasoline ESP", "ESP бензина" },
{ "Gate", "Ворота" },
{ "Ghost", "Призрак" },
{ "Ghost ESP", "ESP призрака" },
{ "Goat", "Коза" },
{ "Goat ESP", "ESP козы" },
{ "Goat/Rat ESP", "ESP козы/крысы" },
{ "Hay", "Сено" },
{ "Hay ESP", "ESP сена" },
{ "Head", "Голова" },
{ "Horseshoe", "Подкова" },
{ "Host", "Хост" },
{ "Host Only", "Только хост" },
{ "Infinite mirrors", "Бесконечные зеркала" },
{ "Inmate", "Заключенный" },
{ "Inmates ESP", "ESP заключенных" },
{ "Inn", "Гостиница" },
{ "InnDoor", "Дверь гостиницы" },
{ "InnDoubleDoor", "Двойная дверь гостиницы" },
{ "InnShojiDoor", "Сёдзи дверь гостиницы" },
{ "InnShrine", "Святилище гостиницы" },
{ "InnWardrobe", "Шкаф гостиницы" },
{ "InnWoodenDoor", "Деревянная дверь гостиницы" },
{ "Instant Win", "Мгновенная победа" },
{ "Item ESP", "ESP предметов" },
{ "Items", "Предметы" },
{ "Japan", "Япония" },
{ "Jumpscare", "Пугать" },
{ "Key", "Ключ" },
{ "Key ESP", "ESP ключа" },
{ "Kill", "Убить" },
{ "Level", "Уровень" },
{ "Load Map:", "Загрузить карту:" },
{ "Lobby Control", "Управление лобби" },
{ "Lobby Manager", "Менеджер лобби" },
{ "Lobby Size", "Размер лобби" },
{ "Lock in cage", "Запереть в клетке" },
{ "Lump", "Комок" },
{ "Lump ESP", "ESP комка" },
{ "Manor", "Усадьба" },
{ "Map", "Карта" },
{ "Matchbox", "Спички" },
{ "Matchbox ESP", "ESP спичек" },
{ "Medicine ESP", "ESP лекарства" },
{ "Menu", "Меню" },
{ "Mirror", "Зеркало" },
{ "Misc", "Разное" },
{ "Molly", "Психбольница" },
{ "Monkey", "Обезьяна" },
{ "Monkey ESP", "ESP обезьяны" },
{ "Music Box ESP", "ESP музыкальной шкатулки" },
{ "MusicBox", "Музыкальная шкатулка" },
{ "MusicBox-Idle", "Музыкальная шкатулка" },
{ "Network", "Сеть" },
{ "Network Info", "Сетевая информация" },
{ "Network Stats", "Сетевая статистика" },
{ "Not connected", "Не подключено" },
{ "Patch", "Патч" },
{ "Pig", "Свинья" },
{ "Pig ESP", "ESP свиньи" },
{ "PigExcrement", "Свиной навоз" },
{ "Ping", "Пинг" },
{ "Play Random Sound", "Воспроизвести случайный звук" },
{ "Player", "Игрок" },
{ "Instant Interaction", "Мгновенное взаимодействие" },
{ "Player Count", "Количество игроков" },
{ "Player ESP", "ESP игрока" },
{ "Player ESP Color", "Цвет ESP игрока" },
{ "Player Snapline", "Линия к игроку" },
{ "Players", "Игроки" },
{ "Present", "Подарок" },
{ "Private Lobby", "Приватное лобби" },
{ "Pumpkin", "Тыква" },
{ "Rat", "Крыса" },
{ "Rat ESP", "ESP крысы" },
{ "Region", "Регион" },
{ "Revive", "Воскресить" },
{ "Radial Menu", "Радиальное меню" },
{ "Ritual Book", "Ритуальная книга" },
{ "Rose", "Роза" },
{ "Ritual Book ESP", "ESP ритуальной книги" },
{ "Ritual Object ESP", "ESP ритуального предмета" },
{ "Ritual Objects", "Ритуальные предметы" },
{ "RitualBook", "Ритуальная книга" },
{ "Boar ESP", "ESP Кабана" },
{ "Role", "Роль" },
{ "RottenFood", "Гнилая еда" },
{ "Rotten Food ESP", "ESP Гнилая Еда" },
{ "Sam", "Сэм" },
{ "Shoot Player", "Стрелять в игрока" },
{ "Show Coordinates", "Показать координаты" },
{ "Skeleton ESP", "ESP скелета" },
{ "Slaughterhouse", "Бойня" },
{ "SlaughterhouseFireEscapeDoor", "Пожарная дверь бойни" },
{ "South America", "Южная Америка" },
{ "South Korea", "Южная Корея" },
{ "Spade", "Лопата" },
{ "Spade ESP", "ESP лопаты" },
{ "Spam Chat", "Спам в чате" },
{ "Spawnable Prefabs", "Создаваемые объекты" },
{ "Speed Multiplier", "Множитель скорости" },
{ "Spider", "Паук" },
{ "Spider ESP", "ESP паука" },
{ "Spoof Level", "Подменить уровень" },
{ "Spoof Name", "Подменить имя" },
{ "Spoof Server Name", "Подменить имя сервера" },
{ "SurvivalAltarMolly", "Алтарь Молли" },
{ "SurvivalAltarSlaughterhouse", "Алтарь бойни" },
{ "SurvivalAltarTown", "Алтарь города" },
{ "SurvivalApril", "Эйприл" },
{ "SurvivalCultist", "Культист" },
{ "SurvivalFrank", "Фрэнк" },
{ "SurvivalKai", "Кай" },
{ "SurvivalMolly", "Молли" },
{ "SurvivalNathan", "Натан" },
{ "SurvivalRose", "Роуз" },
{ "SurvivalSmashableWindow", "Разбиваемое окно" },
{ "Switch realm", "Сменить мир" },
{ "Switch realm (house)", "Сменить (дом)" },
{ "TP Azazel", "ТП Azazel" },
{ "TP items to you", "ТП предметы к вам" },
{ "TP to Azazel", "ТП к Azazel" },
{ "TV", "Телевизор" },
{ "Teleport Keys", "Телепорт ключей" },
{ "Teleport to", "Телепорт" },
{ "TP Base", "ТП база" },
{ "TP Altar", "ТП алтарь" },
{ "TP Basin", "ТП чаша" },
{ "TP Fountain", "ТП фонтан" },
{ "Ticket", "Билет" },
{ "Town", "Город" },
{ "TownDoor", "Дверь города" },
{ "TownDoor2", "Дверь города 2" },
{ "TownPentagram", "Пентаграмма города" },
{ "TrashCan", "Мусорный бак" },
{ "Truck_Shutter", "Ставни грузовика" },
{ "Turkey", "Турция" },
{ "US East", "Восток США" },
{ "US South Central", "Юго-Центральная часть США" },
{ "US West", "Запад США" },
{ "Unlimited Stamina", "Безлимитная выносливость" },
{ "Unlimited UV Light", "Неограниченный УФ" },
{ "Unlock Achievements", "Разблокировать достижения" },
{ "Unlock Doors", "Открыть двери" },
{ "God Mode", "Режим Бога" },
{ "Visuals", "Визуализация" },
{ "Waiting for the game to start", "Ожидание начала игры" },
{ "Walk In Lobby", "Ходить в лобби" },
{ "Zara", "Зара" },
{ "Bridesmaid 1", "Подружка невесты 1" },
{ "Bridesmaid 2", "Подружка невесты 2" },
{ "Butler", "Дворецкий" },
{ "Cook", "Повар" },
{ "Gardener", "Садовник" },
{ "Groomsman 1", "Шафер 1" },
{ "Groomsman 2", "Шафер 2" },
{ "Maid", "Горничная" },
{ "Photographer", "Фотограф" },
{ "Priest", "Священник" },
{ "Menu Key", "Клавиша меню" },
};
}
}
}

View File

@@ -0,0 +1,297 @@
using System.Collections.Generic;
namespace DevourClient.Localization.Translations
{
public static class SpanishTranslations
{
public static Dictionary<string, string> GetTranslations()
{
return new Dictionary<string, string>
{
{ "Altar", "Altar" },
{ "Animal_Gate", "Puerta de animales" },
{ "Anna", "Anna" },
{ "Asia", "Asia" },
{ "Asylum", "Asilo" },
{ "AsylumDoor", "Puerta de asilo" },
{ "AsylumDoubleDoor", "Puerta doble de asilo" },
{ "AsylumWhiteDoor", "Puerta blanca de asilo" },
{ "Australia", "Australia" },
{ "Auto Respawn", "Reaparición auto" },
{ "Auto farm items (x5)", "Farm automático de objetos (x5)" },
{ "Azazel", "Azazel" },
{ "Azazel & Demons", "Azazel y demonios" },
{ "Azazel ESP", "ESP Azazel" },
{ "Azazel ESP Color", "Color ESP Azazel" },
{ "Azazel Snapline", "Línea Azazel" },
{ "AzazelAnna", "Azazel-Anna" },
{ "AzazelApril", "Azazel-April" },
{ "AzazelKai", "Azazel-Kai" },
{ "AzazelMolly", "Azazel-Molly" },
{ "AzazelNathan", "Azazel-Nathan" },
{ "AzazelSam", "Azazel-Sam" },
{ "AzazelZara", "Azazel-Zara" },
{ "Barbed Wire", "Alambre de púas" },
{ "Battery", "Batería" },
{ "Battery ESP", "ESP batería" },
{ "Big Flashlight", "Linterna grande" },
{ "Bleach", "Lejía" },
{ "Bleach ESP", "ESP lejía" },
{ "Boar", "Jabalí" },
{ "Bone", "Hueso" },
{ "Bone ESP", "ESP hueso" },
{ "Burn a ritual object", "Quemar objeto ritual" },
{ "Burn all ritual objects", "Quemar todos los objetos" },
{ "Cage", "Jaula" },
{ "Cake", "Pastel" },
{ "Cake ESP", "ESP pastel" },
{ "Carnival", "Carnaval" },
{ "Cherry Blossom", "Flor de cerezo" },
{ "Clean Head ESP", "ESP cabeza limpia" },
{ "Collectables ESP", "ESP coleccionables" },
{ "Clean The Fountains", "Limpiar fuentes" },
{ "CleanHead", "Cabeza limpia" },
{ "Client", "Cliente" },
{ "Coin", "Moneda" },
{ "Coin ESP", "ESP moneda" },
{ "Connection ID", "ID de conexión" },
{ "Corpse", "Cadáver" },
{ "Corpse ESP", "ESP cadáver" },
{ "Create Lobby", "Crear lobby" },
{ "Crosshair", "Punto de mira" },
{ "Crow", "Cuervo" },
{ "Crow ESP", "ESP cuervo" },
{ "Demon", "Demonio" },
{ "Demon ESP", "ESP demonio" },
{ "Despawn Boars", "Eliminar jabalíes" },
{ "Despawn Corpses", "Eliminar cadáveres" },
{ "Despawn Crows", "Eliminar cuervos" },
{ "Despawn Demons", "Eliminar demonios" },
{ "Despawn Ghosts", "Eliminar fantasmas" },
{ "Despawn Inmates", "Eliminar reclusos" },
{ "Despawn Lumps", "Eliminar bultos" },
{ "Despawn Monkeys", "Eliminar monos" },
{ "Despawn Spiders", "Eliminar arañas" },
{ "Devour", "Granja" },
{ "DevourDoorBack", "Puerta trasera" },
{ "DevourDoorMain", "Puerta principal" },
{ "DevourDoorRoom", "Puerta de habitación" },
{ "Dirty Head ESP", "ESP cabeza sucia" },
{ "DirtyHead", "Cabeza sucia" },
{ "Doll", "Muñeca" },
{ "Doll ESP", "ESP muñeca" },
{ "Doll Head ESP", "ESP cabeza de muñeca" },
{ "DollHead", "Cabeza de muñeca" },
{ "Door", "Puerta" },
{ "ESP", "ESP" },
{ "ESP Settings", "Configuración ESP" },
{ "Egg", "Huevo" },
{ "Egg ESP", "ESP huevo" },
{ "Egg-1", "Huevo-1" },
{ "Egg-10", "Huevo-10" },
{ "Egg-2", "Huevo-2" },
{ "Egg-3", "Huevo-3" },
{ "Egg-4", "Huevo-4" },
{ "Egg-5", "Huevo-5" },
{ "Egg-6", "Huevo-6" },
{ "Egg-7", "Huevo-7" },
{ "Egg-8", "Huevo-8" },
{ "Egg-9", "Huevo-9" },
{ "Egg-Clean-1", "Huevo-1" },
{ "Egg-Clean-10", "Huevo-10" },
{ "Egg-Clean-2", "Huevo-2" },
{ "Egg-Clean-3", "Huevo-3" },
{ "Egg-Clean-4", "Huevo-4" },
{ "Egg-Clean-5", "Huevo-5" },
{ "Egg-Clean-6", "Huevo-6" },
{ "Egg-Clean-7", "Huevo-7" },
{ "Egg-Clean-8", "Huevo-8" },
{ "Egg-Clean-9", "Huevo-9" },
{ "Elevator_Door", "Puerta de ascensor" },
{ "Entities", "Entidades" },
{ "Error", "Error" },
{ "Europe", "Europa" },
{ "Exit", "Salir" },
{ "Exp Modifier", "Modificador exp" },
{ "Exp Value", "Valor exp" },
{ "Farmhouse", "Granja" },
{ "Fast Move", "Movimiento rápido" },
{ "First Aid ESP", "ESP primeros auxilios" },
{ "First aid", "Primeros auxilios" },
{ "FirstAid", "Botiquín" },
{ "Flashlight Color", "Color linterna" },
{ "Fly", "Volar" },
{ "Fly Speed", "Velocidad vuelo" },
{ "Feather", "Pluma" },
{ "Food", "Comida" },
{ "Force Start Game", "Forzar inicio" },
{ "Fountain", "Fuente" },
{ "Freeze azazel", "Congelar Azazel" },
{ "Fullbright", "Brillo completo" },
{ "Fuse", "Fusible" },
{ "Fuse ESP", "ESP fusible" },
{ "Gasoline", "Gasolina" },
{ "Gasoline ESP", "ESP gasolina" },
{ "Gate", "Portal" },
{ "Ghost", "Fantasma" },
{ "Ghost ESP", "ESP fantasma" },
{ "Goat", "Cabra" },
{ "Goat ESP", "ESP cabra" },
{ "Goat/Rat ESP", "ESP cabra/rata" },
{ "Hay", "Heno" },
{ "Hay ESP", "ESP heno" },
{ "Head", "Cabeza" },
{ "Horseshoe", "Herradura" },
{ "Host", "Anfitrión" },
{ "Host Only", "Solo anfitrión" },
{ "Infinite mirrors", "Espejos infinitos" },
{ "Inmate", "Recluso" },
{ "Inmates ESP", "ESP reclusos" },
{ "Inn", "Posada" },
{ "InnDoor", "Puerta de posada" },
{ "InnDoubleDoor", "Puerta doble de posada" },
{ "InnShojiDoor", "Puerta shoji de posada" },
{ "InnShrine", "Santuario de posada" },
{ "InnWardrobe", "Armario de posada" },
{ "InnWoodenDoor", "Puerta de madera de posada" },
{ "Instant Win", "Victoria instantánea" },
{ "Item ESP", "ESP objeto" },
{ "Items", "Objetos" },
{ "Japan", "Japón" },
{ "Jumpscare", "Susto" },
{ "Key", "Llave" },
{ "Key ESP", "ESP llave" },
{ "Kill", "Matar" },
{ "Level", "Nivel" },
{ "Load Map:", "Cargar mapa:" },
{ "Lobby Control", "Control del lobby" },
{ "Lobby Manager", "Gestor de lobby" },
{ "Lobby Size", "Tamaño del lobby" },
{ "Lock in cage", "Encerrar en jaula" },
{ "Lump", "Bulto" },
{ "Lump ESP", "ESP bulto" },
{ "Manor", "Mansión" },
{ "Map", "Mapa" },
{ "Matchbox", "Caja de cerillas" },
{ "Matchbox ESP", "ESP caja de cerillas" },
{ "Medicine ESP", "ESP medicina" },
{ "Menu", "Menú" },
{ "Mirror", "Espejo" },
{ "Misc", "Varios" },
{ "Molly", "Asilo" },
{ "Monkey", "Mono" },
{ "Monkey ESP", "ESP mono" },
{ "Music Box ESP", "ESP caja de música" },
{ "MusicBox", "Caja de música" },
{ "MusicBox-Idle", "Caja de música" },
{ "Network", "Red" },
{ "Network Info", "Info de red" },
{ "Network Stats", "Estadísticas de red" },
{ "Not connected", "No conectado" },
{ "Patch", "Parche" },
{ "Pig", "Cerdo" },
{ "Pig ESP", "ESP cerdo" },
{ "PigExcrement", "Excremento de cerdo" },
{ "Ping", "Ping" },
{ "Play Random Sound", "Reproducir sonido aleatorio" },
{ "Player", "Jugador" },
{ "Instant Interaction", "Interacción instantánea" },
{ "Player Count", "Número de jugadores" },
{ "Player ESP", "ESP jugador" },
{ "Player ESP Color", "Color ESP jugador" },
{ "Player Snapline", "Línea jugador" },
{ "Players", "Jugadores" },
{ "Present", "Regalo" },
{ "Private Lobby", "Lobby privado" },
{ "Pumpkin", "Calabaza" },
{ "Rat", "Rata" },
{ "Rat ESP", "ESP rata" },
{ "Region", "Región" },
{ "Revive", "Revivir" },
{ "Radial Menu", "Menú radial" },
{ "Ritual Book", "Libro ritual" },
{ "Rose", "Rosa" },
{ "Ritual Book ESP", "ESP libro ritual" },
{ "Ritual Object ESP", "ESP objeto ritual" },
{ "Ritual Objects", "Objetos rituales" },
{ "RitualBook", "Libro ritual" },
{ "Boar ESP", "ESP Jabalí" },
{ "Role", "Rol" },
{ "RottenFood", "Comida podrida" },
{ "Rotten Food ESP", "ESP Comida Podrida" },
{ "Sam", "Sam" },
{ "Shoot Player", "Disparar al jugador" },
{ "Show Coordinates", "Mostrar coordenadas" },
{ "Skeleton ESP", "ESP esqueleto" },
{ "Slaughterhouse", "Matadero" },
{ "SlaughterhouseFireEscapeDoor", "Puerta de escape de matadero" },
{ "South America", "Sudamérica" },
{ "South Korea", "Corea del Sur" },
{ "Spade", "Pala" },
{ "Spade ESP", "ESP pala" },
{ "Spam Chat", "Spam chat" },
{ "Spawnable Prefabs", "Objetos generables" },
{ "Speed Multiplier", "Multiplicador velocidad" },
{ "Spider", "Araña" },
{ "Spider ESP", "ESP araña" },
{ "Spoof Level", "Falsificar nivel" },
{ "Spoof Name", "Falsificar nombre" },
{ "Spoof Server Name", "Falsificar nombre servidor" },
{ "SurvivalAltarMolly", "Altar de Molly" },
{ "SurvivalAltarSlaughterhouse", "Altar de matadero" },
{ "SurvivalAltarTown", "Altar de pueblo" },
{ "SurvivalApril", "April" },
{ "SurvivalCultist", "Cultista" },
{ "SurvivalFrank", "Frank" },
{ "SurvivalKai", "Kai" },
{ "SurvivalMolly", "Molly" },
{ "SurvivalNathan", "Nathan" },
{ "SurvivalRose", "Rose" },
{ "SurvivalSmashableWindow", "Ventana rompible" },
{ "Switch realm", "Cambiar reino" },
{ "Switch realm (house)", "Cambiar (casa)" },
{ "TP Azazel", "TP Azazel" },
{ "TP items to you", "TP objetos a ti" },
{ "TP to Azazel", "TP a Azazel" },
{ "TV", "Televisión" },
{ "Teleport Keys", "Teletransportar llaves" },
{ "Teleport to", "Teletransportar" },
{ "TP Base", "TP base" },
{ "TP Altar", "TP altar" },
{ "TP Basin", "TP pila" },
{ "TP Fountain", "TP fuente" },
{ "Ticket", "Boleto" },
{ "Town", "Pueblo" },
{ "TownDoor", "Puerta de pueblo" },
{ "TownDoor2", "Puerta de pueblo 2" },
{ "TownPentagram", "Pentagrama de pueblo" },
{ "TrashCan", "Papelera" },
{ "Truck_Shutter", "Persiana de camión" },
{ "Turkey", "Turquía" },
{ "US East", "Este de EE.UU." },
{ "US South Central", "Centro-Sur de EE.UU." },
{ "US West", "Oeste de EE.UU." },
{ "Unlimited Stamina", "Resistencia ilimitada" },
{ "Unlimited UV Light", "UV ilimitado" },
{ "Unlock Achievements", "Desbloquear logros" },
{ "Unlock Doors", "Desbloquear puertas" },
{ "God Mode", "Modo Dios" },
{ "Visuals", "Visuales" },
{ "Waiting for the game to start", "Esperando a que empiece la partida" },
{ "Walk In Lobby", "Caminar en lobby" },
{ "Zara", "Zara" },
{ "Bridesmaid 1", "Dama de honor 1" },
{ "Bridesmaid 2", "Dama de honor 2" },
{ "Butler", "Mayordomo" },
{ "Cook", "Cocinero" },
{ "Gardener", "Jardinero" },
{ "Groomsman 1", "Padrino 1" },
{ "Groomsman 2", "Padrino 2" },
{ "Maid", "Criada" },
{ "Photographer", "Fotógrafo" },
{ "Priest", "Sacerdote" },
{ "Menu Key", "Tecla de Menú" },
};
}
}
}

View File

@@ -0,0 +1,298 @@
using System.Collections.Generic;
namespace DevourClient.Localization.Translations
{
public static class VietnameseTranslations
{
public static Dictionary<string, string> GetTranslations()
{
return new Dictionary<string, string>
{
{ "Altar", "Altar" },
{ "Animal_Gate", "Animal_Gate" },
{ "Anna", "Anna" },
{ "Asia", "Châu Á" },
{ "Asylum", "Asylum" },
{ "AsylumDoor", "AsylumDoor" },
{ "AsylumDoubleDoor", "AsylumDoubleDoor" },
{ "AsylumWhiteDoor", "AsylumWhiteDoor" },
{ "Australia", "Úc" },
{ "Auto Respawn", "Tự động hồi sinh" },
{ "Auto farm items (x5)", "Tự động farm vật phẩm (x5)" },
{ "Azazel", "Azazel" },
{ "Azazel & Demons", "Azazel & Quỷ" },
{ "Azazel ESP", "Azazel ESP" },
{ "Azazel ESP Color", "Màu Azazel ESP" },
{ "Azazel Snapline", "Đường kẻ Azazel" },
{ "AzazelAnna", "AzazelAnna" },
{ "AzazelApril", "AzazelApril" },
{ "AzazelKai", "AzazelKai" },
{ "AzazelMolly", "AzazelMolly" },
{ "AzazelNathan", "AzazelNathan" },
{ "AzazelSam", "AzazelSam" },
{ "AzazelZara", "AzazelZara" },
{ "Barbed Wire", "Dây thép gai" },
{ "Battery", "Pin" },
{ "Battery ESP", "Pin ESP" },
{ "Big Flashlight", "Đèn pin lớn" },
{ "Bleach", "Thuốc tẩy" },
{ "Bleach ESP", "Thuốc tẩy ESP" },
{ "Boar", "Lợn rừng" },
{ "Bone", "Xương" },
{ "Bone ESP", "Xương ESP" },
{ "Burn a ritual object", "Đốt một vật phẩm nghi lễ" },
{ "Burn all ritual objects", "Đốt tất cả vật phẩm nghi lễ" },
{ "Cage", "Lồng" },
{ "Cake", "Bánh" },
{ "Cake ESP", "Bánh ESP" },
{ "Carnival", "Carnival" },
{ "Cherry Blossom", "Hoa anh đào" },
{ "Clean Head ESP", "Đầu sạch ESP" },
{ "Collectables ESP", "ESP đồ sưu tập" },
{ "Clean The Fountains", "Làm sạch đài phun nước" },
{ "CleanHead", "CleanHead" },
{ "Client", "Client" },
{ "Coin", "Xu" },
{ "Coin ESP", "Xu ESP" },
{ "Connection ID", "ID Kết nối" },
{ "Corpse", "Xác chết" },
{ "Corpse ESP", "Xác chết ESP" },
{ "Create Lobby", "Tạo phòng chờ" },
{ "Crosshair", "Đường ngắm" },
{ "Crow", "Quạ" },
{ "Crow ESP", "Quạ ESP" },
{ "Demon", "Quỷ" },
{ "Demon ESP", "Quỷ ESP" },
{ "Despawn Boars", "Xóa lợn rừng" },
{ "Despawn Corpses", "Xóa xác chết" },
{ "Despawn Crows", "Xóa quạ" },
{ "Despawn Demons", "Xóa quỷ" },
{ "Despawn Ghosts", "Xóa ma" },
{ "Despawn Inmates", "Xóa tù nhân" },
{ "Despawn Lumps", "Xóa cục" },
{ "Despawn Monkeys", "Xóa khỉ" },
{ "Despawn Spiders", "Xóa nhện" },
{ "Devour", "Devour" },
{ "DevourDoorBack", "DevourDoorBack" },
{ "DevourDoorMain", "DevourDoorMain" },
{ "DevourDoorRoom", "DevourDoorRoom" },
{ "Dirty Head ESP", "Đầu bẩn ESP" },
{ "DirtyHead", "DirtyHead" },
{ "Doll", "Búp bê" },
{ "Doll ESP", "Búp bê ESP" },
{ "Doll Head ESP", "Đầu búp bê ESP" },
{ "DollHead", "DollHead" },
{ "Door", "Cửa" },
{ "ESP", "ESP" },
{ "ESP Settings", "Cài đặt ESP" },
{ "Egg", "Trứng" },
{ "Egg ESP", "Trứng ESP" },
{ "Egg-1", "Trứng-1" },
{ "Egg-10", "Trứng-10" },
{ "Egg-2", "Trứng-2" },
{ "Egg-3", "Trứng-3" },
{ "Egg-4", "Trứng-4" },
{ "Egg-5", "Trứng-5" },
{ "Egg-6", "Trứng-6" },
{ "Egg-7", "Trứng-7" },
{ "Egg-8", "Trứng-8" },
{ "Egg-9", "Trứng-9" },
{ "Egg-Clean-1", "Trứng-Sạch-1" },
{ "Egg-Clean-10", "Trứng-Sạch-10" },
{ "Egg-Clean-2", "Trứng-Sạch-2" },
{ "Egg-Clean-3", "Trứng-Sạch-3" },
{ "Egg-Clean-4", "Trứng-Sạch-4" },
{ "Egg-Clean-5", "Trứng-Sạch-5" },
{ "Egg-Clean-6", "Trứng-Sạch-6" },
{ "Egg-Clean-7", "Trứng-Sạch-7" },
{ "Egg-Clean-8", "Trứng-Sạch-8" },
{ "Egg-Clean-9", "Trứng-Sạch-9" },
{ "Elevator_Door", "Elevator_Door" },
{ "Entities", "Thực thể" },
{ "Error", "Lỗi" },
{ "Europe", "Châu Âu" },
{ "Exit", "Thoát" },
{ "Exp Modifier", "Bộ điều chỉnh Exp" },
{ "Exp Value", "Giá trị Exp" },
{ "Farmhouse", "Farmhouse" },
{ "Fast Move", "Di chuyển nhanh" },
{ "First Aid ESP", "Hộp cứu thương ESP" },
{ "First aid", "Hộp cứu thương" },
{ "FirstAid", "FirstAid" },
{ "Flashlight Color", "Màu đèn pin" },
{ "Fly", "Bay" },
{ "Fly Speed", "Tốc độ bay" },
{ "Feather", "Lông vũ" },
{ "Food", "Thức ăn" },
{ "Force Start Game", "Bắt buộc bắt đầu game" },
{ "Fountain", "Đài phun nước" },
{ "Freeze azazel", "Đóng băng azazel" },
{ "Fullbright", "Sáng hoàn toàn" },
{ "Fuse", "Cầu chì" },
{ "Fuse ESP", "Cầu chì ESP" },
{ "Gasoline", "Xăng" },
{ "Gasoline ESP", "Xăng ESP" },
{ "Gate", "Cổng" },
{ "Ghost", "Ma" },
{ "Ghost ESP", "Ma ESP" },
{ "Goat", "Dê" },
{ "Goat ESP", "Dê ESP" },
{ "Goat/Rat ESP", "Dê/Chuột ESP" },
{ "Hay", "Rơm" },
{ "Hay ESP", "Rơm ESP" },
{ "Head", "Đầu" },
{ "Horseshoe", "Móng ngựa" },
{ "Host", "Chủ phòng" },
{ "Host Only", "Chỉ chủ phòng" },
{ "Infinite mirrors", "Gương vô hạn" },
{ "Inmate", "Tù nhân" },
{ "Inmates ESP", "Tù nhân ESP" },
{ "Inn", "Inn" },
{ "InnDoor", "InnDoor" },
{ "InnDoubleDoor", "InnDoubleDoor" },
{ "InnShojiDoor", "InnShojiDoor" },
{ "InnShrine", "InnShrine" },
{ "InnWardrobe", "InnWardrobe" },
{ "InnWoodenDoor", "InnWoodenDoor" },
{ "Instant Win", "Thắng ngay lập tức" },
{ "Item ESP", "Vật phẩm ESP" },
{ "Items", "Vật phẩm" },
{ "Japan", "Nhật Bản" },
{ "Jumpscare", "Jumpscare" },
{ "Key", "Chìa khóa" },
{ "Key ESP", "Chìa khóa ESP" },
{ "Kill", "Giết" },
{ "Level", "Cấp độ" },
{ "Load Map:", "Tải bản đồ:" },
{ "Lobby Control", "Điều khiển phòng chờ" },
{ "Lobby Manager", "Quản lý phòng chờ" },
{ "Lobby Size", "Kích thước phòng chờ" },
{ "Lock in cage", "Khóa trong lồng" },
{ "Lump", "Cục" },
{ "Lump ESP", "Cục ESP" },
{ "Manor", "Manor" },
{ "Map", "Bản đồ" },
{ "Matchbox", "Hộp diêm" },
{ "Matchbox ESP", "Hộp diêm ESP" },
{ "Medicine ESP", "Thuốc ESP" },
{ "Menu", "Menu" },
{ "Mirror", "Gương" },
{ "Misc", "Khác" },
{ "Molly", "Molly" },
{ "Monkey", "Khỉ" },
{ "Monkey ESP", "Khỉ ESP" },
{ "Music Box ESP", "Hộp nhạc ESP" },
{ "MusicBox", "MusicBox" },
{ "MusicBox-Idle", "MusicBox-Idle" },
{ "Network", "Mạng" },
{ "Network Info", "Thông tin mạng" },
{ "Network Stats", "Thống kê mạng" },
{ "Not connected", "Chưa kết nối" },
{ "Patch", "Miếng vá" },
{ "Pig", "Lợn" },
{ "Pig ESP", "Lợn ESP" },
{ "PigExcrement", "PigExcrement" },
{ "Ping", "Ping" },
{ "Play Random Sound", "Phát âm thanh ngẫu nhiên" },
{ "Player", "Người chơi" },
{ "Instant Interaction", "Tương tác tức thì" },
{ "Player Count", "Số người chơi" },
{ "Player ESP", "Người chơi ESP" },
{ "Player ESP Color", "Màu người chơi ESP" },
{ "Player Snapline", "Đường kẻ người chơi" },
{ "Players", "Người chơi" },
{ "Present", "Quà tặng" },
{ "Private Lobby", "Phòng chờ riêng" },
{ "Pumpkin", "Bí ngô" },
{ "Rat", "Chuột" },
{ "Rat ESP", "Chuột ESP" },
{ "Region", "Khu vực" },
{ "Revive", "Hồi sinh" },
{ "Radial Menu", "Menu vòng tròn" },
{ "Ritual Book", "Sách nghi lễ" },
{ "Rose", "Hoa hồng" },
{ "Ritual Book ESP", "Sách nghi lễ ESP" },
{ "Ritual Object ESP", "Vật phẩm nghi lễ ESP" },
{ "Ritual Objects", "Vật phẩm nghi lễ" },
{ "RitualBook", "RitualBook" },
{ "Boar ESP", "Lợn rừng ESP" },
{ "Role", "Vai trò" },
{ "RottenFood", "RottenFood" },
{ "Rotten Food ESP", "Thức ăn thối ESP" },
{ "Sam", "Sam" },
{ "Shoot Player", "Bắn người chơi" },
{ "Show Coordinates", "Hiển thị tọa độ" },
{ "Skeleton ESP", "Bộ xương ESP" },
{ "Slaughterhouse", "Slaughterhouse" },
{ "SlaughterhouseFireEscapeDoor", "SlaughterhouseFireEscapeDoor" },
{ "South America", "Nam Mỹ" },
{ "South Korea", "Hàn Quốc" },
{ "Spade", "Xẻng" },
{ "Spade ESP", "Xẻng ESP" },
{ "Spam Chat", "Spam chat" },
{ "Spawnable Prefabs", "Prefabs có thể spawn" },
{ "Speed Multiplier", "Hệ số tốc độ" },
{ "Spider", "Nhện" },
{ "Spider ESP", "Nhện ESP" },
{ "Spoof Level", "Giả mạo cấp độ" },
{ "Spoof Name", "Giả mạo tên" },
{ "Spoof Server Name", "Giả mạo tên server" },
{ "SurvivalAltarMolly", "SurvivalAltarMolly" },
{ "SurvivalAltarSlaughterhouse", "SurvivalAltarSlaughterhouse" },
{ "SurvivalAltarTown", "SurvivalAltarTown" },
{ "SurvivalApril", "SurvivalApril" },
{ "SurvivalCultist", "SurvivalCultist" },
{ "SurvivalFrank", "SurvivalFrank" },
{ "SurvivalKai", "SurvivalKai" },
{ "SurvivalMolly", "SurvivalMolly" },
{ "SurvivalNathan", "SurvivalNathan" },
{ "SurvivalRose", "SurvivalRose" },
{ "SurvivalSmashableWindow", "SurvivalSmashableWindow" },
{ "Switch realm", "Chuyển vương quốc" },
{ "Switch realm (house)", "Chuyển vương quốc (nhà)" },
{ "TP Azazel", "TP Azazel" },
{ "TP items to you", "TP vật phẩm đến bạn" },
{ "TP to Azazel", "TP đến Azazel" },
{ "TV", "TV" },
{ "Teleport Keys", "Phím dịch chuyển" },
{ "Teleport to", "Dịch chuyển đến" },
{ "TP Base", "TP căn cứ" },
{ "TP Altar", "TP bàn thờ" },
{ "TP Basin", "TP bể nước" },
{ "TP Fountain", "TP đài phun nước" },
{ "Ticket", "Vé" },
{ "Town", "Town" },
{ "TownDoor", "TownDoor" },
{ "TownDoor2", "TownDoor2" },
{ "TownPentagram", "TownPentagram" },
{ "TrashCan", "TrashCan" },
{ "Truck_Shutter", "Truck_Shutter" },
{ "Turkey", "Gà tây" },
{ "US East", "US Đông" },
{ "US South Central", "US Nam Trung" },
{ "US West", "US Tây" },
{ "Unlimited Stamina", "Thể lực vô hạn" },
{ "Unlimited UV Light", "UV không giới hạn" },
{ "Unlock Achievements", "Mở khóa thành tựu" },
{ "Unlock Doors", "Mở khóa cửa" },
{ "God Mode", "Chế độ Thần" },
{ "Visuals", "Hình ảnh" },
{ "Waiting for the game to start", "Đang chờ bắt đầu trò chơi" },
{ "Walk In Lobby", "Đi trong sảnh" },
{ "Zara", "Zara" },
{ "Bridesmaid 1", "Phù dâu 1" },
{ "Bridesmaid 2", "Phù dâu 2" },
{ "Butler", "Quản gia" },
{ "Cook", "Đầu bếp" },
{ "Gardener", "Người làm vườn" },
{ "Groomsman 1", "Phù rể 1" },
{ "Groomsman 2", "Phù rể 2" },
{ "Maid", "Hầu gái" },
{ "Photographer", "Nhiếp ảnh gia" },
{ "Priest", "Linh mục" },
{ "Menu Key", "Phím Menu" },
};
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,193 @@
using System;
using System.Linq;
using Il2Cpp;
using Il2CppPhoton.Bolt;
using Il2CppUdpKit.Platform.Photon;
using MelonLoader;
using UnityEngine;
namespace DevourClient.Network
{
// Lobby creation and management class
public static class LobbyManager
{
// Create game lobby/room.
// regionCode: Region code (e.g.: "eu", "us", "asia", "usw", "sa", "jp", "au", "ru", "in", "kr").
// lobbyLimit: Maximum player limit (1-64).
// isPrivate: Whether this is a private room.
public static void CreateLobby(string regionCode, int lobbyLimit, bool isPrivate)
{
try
{
// Check if already in game
if (IsInGame())
{
MelonLogger.Warning("[LobbyManager] Already in game, cannot create lobby");
return;
}
// Get PhotonRegion
PhotonRegion? region = GetPhotonRegion(regionCode);
if (region == null)
{
MelonLogger.Error($"[LobbyManager] Failed to find region: {regionCode}");
return;
}
// Find Menu controller
Il2CppHorror.Menu? menu = FindMenuController();
if (menu == null)
{
MelonLogger.Error("[LobbyManager] Failed to find MenuController");
return;
}
// Set UDP platform/region
menu.SetUDPPlatform(region);
MelonLogger.Msg($"[LobbyManager] Server region set to: {region.City}");
// Get BoltConfig and set connection limit
BoltConfig config = menu.boltConfig;
if (config != null)
{
config.serverConnectionLimit = lobbyLimit;
MelonLogger.Msg($"[LobbyManager] Connection limit set to: {lobbyLimit}");
// Set private lobby option
if (menu.hostPrivateServer != null)
{
menu.hostPrivateServer.Set(isPrivate, true);
MelonLogger.Msg($"[LobbyManager] Private lobby: {isPrivate}");
}
// Start server
BoltLauncher.StartServer(config, null);
// Show loading screen, hide main menu and host screen
if (menu.loadingCanvasGroup != null)
{
menu.ShowCanvasGroup(menu.loadingCanvasGroup, true);
}
if (menu.hostCanvasGroup != null)
{
menu.ShowCanvasGroup(menu.hostCanvasGroup, false);
}
if (menu.mainMenuCanvasGroup != null)
{
menu.ShowCanvasGroup(menu.mainMenuCanvasGroup, false);
}
MelonLogger.Msg("[LobbyManager] Lobby created successfully!");
}
else
{
MelonLogger.Error("[LobbyManager] BoltConfig is null");
}
}
catch (Exception ex)
{
MelonLogger.Error($"[LobbyManager] Error creating lobby: {ex.Message}");
MelonLogger.Error(ex.StackTrace);
}
}
private static PhotonRegion? GetPhotonRegion(string regionCode)
{
try
{
// Use PhotonRegion.GetRegion method
return PhotonRegion.GetRegion(regionCode);
}
catch (Exception ex)
{
MelonLogger.Error($"[LobbyManager] Failed to get PhotonRegion: {ex.Message}");
return null;
}
}
private static Il2CppHorror.Menu? FindMenuController()
{
try
{
// Find all Menu objects
var menus = UnityEngine.Object.FindObjectsOfType<Il2CppHorror.Menu>();
// Find object named "MenuController"
foreach (var menu in menus)
{
if (menu.name == "MenuController")
{
return menu;
}
}
// If no specific name found, return first one
return menus.FirstOrDefault();
}
catch (Exception ex)
{
MelonLogger.Error($"[LobbyManager] Failed to find MenuController: {ex.Message}");
return null;
}
}
private static bool IsInGame()
{
try
{
OptionsHelpers helper = OptionsHelpers.singleton;
if (helper == null) return false;
return helper.inGame;
}
catch
{
return false;
}
}
public static void ForceLobbyStart()
{
try
{
if (!BoltNetwork.IsServer)
{
MelonLogger.Warning("[LobbyManager] Only host can start game");
return;
}
Il2CppHorror.Menu? menu = FindMenuController();
if (menu == null)
{
MelonLogger.Error("[LobbyManager] Failed to find MenuController");
return;
}
// Call start button click event
menu.OnLobbyStartButtonClick();
MelonLogger.Msg("[LobbyManager] Force start game");
}
catch (Exception ex)
{
MelonLogger.Error($"[LobbyManager] Force start failed: {ex.Message}");
}
}
public static void ShowMessageBox(string message)
{
try
{
Il2CppHorror.Menu? menu = FindMenuController();
if (menu != null)
{
menu.ShowMessageModal(message);
}
}
catch (Exception ex)
{
MelonLogger.Error($"[LobbyManager] Failed to show message: {ex.Message}");
}
}
}
}

View File

@@ -0,0 +1,135 @@
using System;
using System.Linq;
using Il2CppPhoton.Bolt;
using MelonLoader;
using DevourClient.Localization;
namespace DevourClient.Network
{
// Network helper class
public static class NetworkHelper
{
// Check if current player is host
public static bool IsHost()
{
try
{
return BoltNetwork.IsServer;
}
catch
{
return false;
}
}
// Get network ping
public static float GetPing()
{
try
{
BoltConnection connection = BoltNetwork.Server;
if (connection != null)
{
float pingSeconds = connection.PingNetwork;
return (float)Math.Round(pingSeconds * 1000.0f);
}
return 0.0f;
}
catch
{
return 0.0f;
}
}
// Get local connection ID
public static uint GetConnectionID()
{
try
{
return NetworkIdAllocator.LocalConnectionId;
}
catch
{
return 0;
}
}
// Get player count
public static int GetPlayerCount()
{
try
{
if (BoltNetwork.IsRunning)
{
UnityEngine.GameObject[] players = UnityEngine.GameObject.FindGameObjectsWithTag("Player");
return players != null ? players.Length : 0;
}
return 0;
}
catch
{
return 0;
}
}
// Is network running
public static bool IsNetworkRunning()
{
try
{
return BoltNetwork.IsRunning;
}
catch
{
return false;
}
}
// Is client
public static bool IsClient()
{
try
{
return BoltNetwork.IsClient;
}
catch
{
return false;
}
}
// Get formatted string of current room information (multilanguage support)
public static string GetRoomInfo()
{
try
{
if (!IsNetworkRunning())
{
return MultiLanguageSystem.Translate("Not connected");
}
string roleText = MultiLanguageSystem.Translate("Role");
string role = IsHost() ? MultiLanguageSystem.Translate("Host") : MultiLanguageSystem.Translate("Client");
string playerCountText = MultiLanguageSystem.Translate("Player Count");
int playerCount = GetPlayerCount();
float ping = IsClient() ? GetPing() : 0;
if (IsHost())
{
return $"{roleText}: {role} | {playerCountText}: {playerCount}";
}
else
{
string pingText = MultiLanguageSystem.Translate("Ping");
return $"{roleText}: {role} | {playerCountText}: {playerCount} | {pingText}: {ping}ms";
}
}
catch (Exception ex)
{
MelonLogger.Error($"[NetworkHelper] Failed to get room info: {ex.Message}");
return MultiLanguageSystem.Translate("Error");
}
}
}
}

View File

@@ -0,0 +1,80 @@
using System;
using System.Collections.Generic;
using DevourClient.Localization;
namespace DevourClient.Network
{
// Region helper class
public static class RegionHelper
{
// List of all available regions (English key names)
// Based on actual game PhotonRegion.Regions enum
public static readonly Dictionary<string, string> AvailableRegions = new Dictionary<string, string>()
{
{ "asia", "Asia" },
{ "au", "Australia" },
{ "eu", "Europe" },
{ "jp", "Japan" },
{ "sa", "South America" },
{ "kr", "South Korea" },
{ "tr", "Turkey" },
{ "us", "US East" },
{ "usw", "US West" },
{ "ussc", "US South Central" }
};
// Get region code array (for ImGui Combo etc.)
public static string[] GetRegionCodes()
{
string[] codes = new string[AvailableRegions.Count];
int index = 0;
foreach (var kvp in AvailableRegions)
{
codes[index++] = kvp.Key;
}
return codes;
}
// Get region display name array (multilanguage support)
public static string[] GetRegionDisplayNames()
{
string[] names = new string[AvailableRegions.Count];
int index = 0;
foreach (var kvp in AvailableRegions)
{
// Use MultiLanguageSystem to translate region names
names[index++] = MultiLanguageSystem.Translate(kvp.Value);
}
return names;
}
// Get region code by index
public static string GetRegionCodeByIndex(int index)
{
string[] codes = GetRegionCodes();
if (index >= 0 && index < codes.Length)
{
return codes[index];
}
return "asia"; // Default to Asia
}
// Get display name by region code (multilanguage support)
public static string GetDisplayNameByCode(string code)
{
if (AvailableRegions.TryGetValue(code, out string? englishName))
{
// Use MultiLanguageSystem to translate region names
return MultiLanguageSystem.Translate(englishName);
}
return code;
}
// Check if region code is valid
public static bool IsValidRegionCode(string code)
{
return AvailableRegions.ContainsKey(code);
}
}
}

View File

@@ -0,0 +1,699 @@
using System;
using System.Collections.Generic;
using MelonLoader;
using UnityEngine;
using DevourClient.Helpers;
using DevourClient.Localization;
using System.Globalization;
namespace DevourClient
{
// Manages the Z-key radial menu: building options, drawing the UI, and executing actions.
// Public static methods are called from the appropriate ClientMain lifecycle hooks.
internal static class RadialMenuManager
{
private static bool _active;
private static int _selectedIndex = -1;
private static readonly List<RadialOption> _options = new List<RadialOption>();
private static bool _cursorStateStored;
private static bool _prevCursorVisible;
private static CursorLockMode _prevCursorLockState;
private static bool _enabled = true; // Controls whether the radial menu is enabled
// Material used to draw radial arcs (GL immediate mode)
private static Material? _radialMaterial;
// Public property to enable/disable the radial menu
public static bool Enabled
{
get => _enabled;
set => _enabled = value;
}
private enum RadialActionType
{
None,
SpawnItem,
TeleportBase,
TeleportFixedPoint
}
private class RadialOption
{
public string Label = string.Empty;
public RadialActionType ActionType = RadialActionType.None;
public string Payload = string.Empty;
}
// Called from Update: handles input, builds / closes the radial menu and executes actions.
public static void HandleUpdate()
{
if (!_enabled || !Player.IsInGameOrLobby())
return;
KeyCode key = Settings.Settings.radialMenuKey;
if (key != KeyCode.None && Input.GetKeyDown(key))
{
BuildForCurrentScene();
}
if (key != KeyCode.None && Input.GetKeyUp(key) && _active)
{
if (_selectedIndex >= 0 && _selectedIndex < _options.Count)
{
ExecuteOption(_options[_selectedIndex]);
}
_active = false;
_selectedIndex = -1;
_options.Clear();
RestoreCursorState();
}
}
// Called from OnGUI: draws the radial menu if it is active.
public static void HandleOnGUI()
{
if (!_enabled || !_active || !Player.IsInGameOrLobby())
return;
Draw();
}
private static void BuildForCurrentScene()
{
_options.Clear();
_selectedIndex = -1;
string sceneName = Helpers.Map.GetActiveScene();
if (string.IsNullOrEmpty(sceneName) || sceneName == "Menu")
{
_active = false;
return;
}
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("First aid"),
ActionType = RadialActionType.SpawnItem,
Payload = "SurvivalFirstAid"
});
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("Battery"),
ActionType = RadialActionType.SpawnItem,
Payload = "SurvivalBattery"
});
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("TP Base"),
ActionType = RadialActionType.TeleportBase,
Payload = string.Empty
});
switch (sceneName)
{
case "Devour":
case "Anna":
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("TP Altar"),
ActionType = RadialActionType.TeleportFixedPoint,
Payload = "8.57 0.01 -65.19"
});
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("Hay"),
ActionType = RadialActionType.SpawnItem,
Payload = "SurvivalHay"
});
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("Gasoline"),
ActionType = RadialActionType.SpawnItem,
Payload = "SurvivalGasoline"
});
break;
case "Molly":
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("TP Altar"),
ActionType = RadialActionType.TeleportFixedPoint,
Payload = "18.12 -8.80 21.06"
});
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("Fuse"),
ActionType = RadialActionType.SpawnItem,
Payload = "SurvivalFuse"
});
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("RottenFood"),
ActionType = RadialActionType.SpawnItem,
Payload = "SurvivalRottenFood"
});
break;
case "Inn":
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("TP Fountain"),
ActionType = RadialActionType.TeleportFixedPoint,
Payload = "-3.43 0.06 24.31"
});
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("Bleach"),
ActionType = RadialActionType.SpawnItem,
Payload = "SurvivalBleach"
});
break;
case "Town":
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("TP Altar"),
ActionType = RadialActionType.TeleportFixedPoint,
Payload = "-56.88 7.17 -34.51"
});
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("Matchbox"),
ActionType = RadialActionType.SpawnItem,
Payload = "Matchbox-3"
});
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("Gasoline"),
ActionType = RadialActionType.SpawnItem,
Payload = "SurvivalGasoline"
});
break;
case "Slaughterhouse":
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("TP Altar"),
ActionType = RadialActionType.TeleportFixedPoint,
Payload = "26.68 4.01 -9.27"
});
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("Bone"),
ActionType = RadialActionType.SpawnItem,
Payload = "SurvivalBone"
});
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("Gasoline"),
ActionType = RadialActionType.SpawnItem,
Payload = "SurvivalGasoline"
});
break;
case "Manor":
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("TP Basin"),
ActionType = RadialActionType.TeleportFixedPoint,
Payload = "38.93 -4.62 -3.86"
});
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("Bleach"),
ActionType = RadialActionType.SpawnItem,
Payload = "SurvivalBleach"
});
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("Cake"),
ActionType = RadialActionType.SpawnItem,
Payload = "SurvivalCake"
});
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("Spade"),
ActionType = RadialActionType.SpawnItem,
Payload = "SurvivalSpade"
});
break;
case "Carnival":
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("TP Altar"),
ActionType = RadialActionType.TeleportFixedPoint,
Payload = "-114.65 4.07 -4.12"
});
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("Coin"),
ActionType = RadialActionType.SpawnItem,
Payload = "SurvivalCoin"
});
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("MusicBox"),
ActionType = RadialActionType.SpawnItem,
Payload = "MusicBox-Idle"
});
_options.Add(new RadialOption
{
Label = MultiLanguageSystem.Translate("DollHead"),
ActionType = RadialActionType.SpawnItem,
Payload = "SurvivalDollHead"
});
break;
}
if (_options.Count == 0)
{
_active = false;
return;
}
_active = true;
HideCursorForRadial();
}
private static void Draw()
{
Event e = Event.current;
if (e == null)
return;
bool isRepaint = e.type == EventType.Repaint;
float centerX = Screen.width / 2f;
float centerY = Screen.height / 2f;
Vector2 center = new Vector2(centerX, centerY);
float radiusOuter = 140f;
float radiusInner = 40f;
Vector2 mouse = e.mousePosition;
Vector2 dir = mouse - center;
float dist = dir.magnitude;
_selectedIndex = -1;
if (dist >= radiusInner && dist <= radiusOuter && _options.Count > 0)
{
// Normalize angles: convert GUI coordinates (y down) to math coordinates (y up)
// and treat "up" as 0° increasing clockwise.
Vector2 upDir = new Vector2(dir.x, -dir.y);
float mathAngle = Mathf.Atan2(upDir.y, upDir.x); // [-PI, PI], 0 is on the right, counterclockwise is positive
float logicalAngle = (Mathf.PI / 2f) - mathAngle;
if (logicalAngle < 0f)
{
logicalAngle += Mathf.PI * 2f;
}
float logicalSectorAngle = (Mathf.PI * 2f) / _options.Count;
int index = Mathf.Clamp(Mathf.FloorToInt(logicalAngle / logicalSectorAngle), 0, _options.Count - 1);
_selectedIndex = index;
}
int count = _options.Count;
if (count == 0)
return;
if (isRepaint)
{
EnsureRadialMaterial();
DrawFilledCircle(center, radiusOuter + 6f, new Color(0f, 0f, 0f, 0.55f));
}
// Sector layout and label radius
float logicalAnglePerSector = (Mathf.PI * 2f) / count;
float radiusFactor;
if (count <= 6)
radiusFactor = 0.55f;
else if (count == 7)
radiusFactor = 0.48f;
else if (count <= 8)
radiusFactor = 0.5f;
else
radiusFactor = 0.45f;
float labelRadius = radiusInner + (radiusOuter - radiusInner) * radiusFactor;
if (isRepaint)
{
for (int i = 0; i < count; i++)
{
float logicalStart = logicalAnglePerSector * i;
float logicalEnd = logicalAnglePerSector * (i + 1);
float displayStart = (Mathf.PI / 2f) - logicalStart;
float displayEnd = (Mathf.PI / 2f) - logicalEnd;
Color sectorColor = (i == _selectedIndex)
? new Color(0.15f, 0.7f, 0.3f, 0.8f)
: new Color(0.1f, 0.1f, 0.1f, 0.7f);
DrawFilledSector(center, radiusInner, radiusOuter, displayStart, displayEnd, sectorColor);
}
}
GUIStyle labelStyle = new GUIStyle(GUI.skin.label)
{
alignment = TextAnchor.MiddleCenter,
normal = { textColor = Color.white },
fontSize = (count <= 6) ? 14 : (count <= 8 ? 12 : 10),
wordWrap = true
};
for (int i = 0; i < count; i++)
{
float logicalMid = logicalAnglePerSector * (i + 0.5f);
float displayMid = (Mathf.PI / 2f) - logicalMid;
float lx = centerX + Mathf.Cos(displayMid) * labelRadius;
float ly = centerY - Mathf.Sin(displayMid) * labelRadius;
float arcLength = logicalAnglePerSector * labelRadius;
float arcFactor;
float minWidth;
float maxWidth;
if (count <= 6)
{
arcFactor = 0.8f;
minWidth = 60f;
maxWidth = 120f;
}
else if (count == 7)
{
arcFactor = 0.6f;
minWidth = 45f;
maxWidth = 75f;
}
else if (count <= 8)
{
arcFactor = 0.65f;
minWidth = 45f;
maxWidth = 80f;
}
else
{
arcFactor = 0.55f;
minWidth = 40f;
maxWidth = 70f;
}
float baseWidth = arcLength * arcFactor;
float labelWidth = Mathf.Clamp(baseWidth, minWidth, maxWidth);
float labelHeight = 32f;
Rect labelRect = new Rect(lx - labelWidth / 2f, ly - labelHeight / 2f, labelWidth, labelHeight);
GUI.Label(labelRect, _options[i].Label, labelStyle);
}
}
private static void EnsureRadialMaterial()
{
if (_radialMaterial != null)
return;
Shader shader = Shader.Find("Hidden/Internal-Colored");
if (shader == null)
return;
_radialMaterial = new Material(shader)
{
hideFlags = HideFlags.HideAndDontSave
};
_radialMaterial.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
_radialMaterial.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
_radialMaterial.SetInt("_Cull", (int)UnityEngine.Rendering.CullMode.Off);
_radialMaterial.SetInt("_ZWrite", 0);
}
private static void DrawFilledCircle(Vector2 center, float radius, Color color)
{
if (_radialMaterial == null)
return;
_radialMaterial.SetPass(0);
GL.PushMatrix();
GL.LoadPixelMatrix(0, Screen.width, Screen.height, 0);
GL.Begin(GL.TRIANGLES);
GL.Color(color);
const int steps = 64;
for (int i = 0; i < steps; i++)
{
float t0 = (float)i / steps;
float t1 = (float)(i + 1) / steps;
float ang0 = t0 * Mathf.PI * 2f;
float ang1 = t1 * Mathf.PI * 2f;
float x0 = center.x + Mathf.Cos(ang0) * radius;
float y0 = center.y - Mathf.Sin(ang0) * radius;
float x1 = center.x + Mathf.Cos(ang1) * radius;
float y1 = center.y - Mathf.Sin(ang1) * radius;
GL.Vertex3(center.x, center.y, 0f);
GL.Vertex3(x0, y0, 0f);
GL.Vertex3(x1, y1, 0f);
}
GL.End();
GL.PopMatrix();
}
private static void DrawFilledSector(Vector2 center, float innerRadius, float outerRadius,
float startAngle, float endAngle, Color color)
{
if (_radialMaterial == null)
return;
_radialMaterial.SetPass(0);
GL.PushMatrix();
GL.LoadPixelMatrix(0, Screen.width, Screen.height, 0);
GL.Begin(GL.TRIANGLES);
GL.Color(color);
int steps = Mathf.Max(8, Mathf.CeilToInt(Mathf.Abs(endAngle - startAngle) / (Mathf.PI / 24f)));
float delta = (endAngle - startAngle) / steps;
for (int i = 0; i < steps; i++)
{
float a0 = startAngle + delta * i;
float a1 = startAngle + delta * (i + 1);
Vector2 o0 = new Vector2(
center.x + Mathf.Cos(a0) * outerRadius,
center.y - Mathf.Sin(a0) * outerRadius);
Vector2 o1 = new Vector2(
center.x + Mathf.Cos(a1) * outerRadius,
center.y - Mathf.Sin(a1) * outerRadius);
Vector2 i0 = new Vector2(
center.x + Mathf.Cos(a0) * innerRadius,
center.y - Mathf.Sin(a0) * innerRadius);
Vector2 i1 = new Vector2(
center.x + Mathf.Cos(a1) * innerRadius,
center.y - Mathf.Sin(a1) * innerRadius);
GL.Vertex3(o0.x, o0.y, 0f);
GL.Vertex3(o1.x, o1.y, 0f);
GL.Vertex3(i1.x, i1.y, 0f);
GL.Vertex3(o0.x, o0.y, 0f);
GL.Vertex3(i1.x, i1.y, 0f);
GL.Vertex3(i0.x, i0.y, 0f);
}
GL.End();
GL.PopMatrix();
}
private static void ExecuteOption(RadialOption option)
{
if (option == null || option.ActionType == RadialActionType.None)
return;
try
{
switch (option.ActionType)
{
case RadialActionType.SpawnItem:
if (string.IsNullOrEmpty(option.Payload))
return;
ClientMain_HandleItemCarry(option.Payload);
break;
case RadialActionType.TeleportBase:
TeleportToBase();
break;
case RadialActionType.TeleportFixedPoint:
TeleportToFixedPoint(option.Payload);
break;
}
}
catch (Exception ex)
{
MelonLogger.Error($"Radial option execution failed: {ex.Message}");
}
}
private static void HideCursorForRadial()
{
if (!_cursorStateStored)
{
_prevCursorVisible = Cursor.visible;
_prevCursorLockState = Cursor.lockState;
_cursorStateStored = true;
}
Cursor.lockState = CursorLockMode.None;
Cursor.visible = true;
}
private static void RestoreCursorState()
{
if (!_cursorStateStored)
return;
Cursor.lockState = _prevCursorLockState;
Cursor.visible = _prevCursorVisible;
_cursorStateStored = false;
}
// Calls ClientMain.HandleItemCarry via reflection to avoid tight coupling,
// and falls back to Hacks.Misc.CarryObject if that fails.
private static void ClientMain_HandleItemCarry(string payload)
{
try
{
var type = typeof(ClientMain);
var method = type.GetMethod("HandleItemCarry",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
if (method != null)
{
method.Invoke(null, new object[] { payload });
return;
}
}
catch
{
// ignore and fallback
}
Hacks.Misc.CarryObject(payload);
}
// Teleports the player to a fixed world position.
// Payload format: "x y z" using '.' as decimal separator.
private static void TeleportToFixedPoint(string payload)
{
if (string.IsNullOrWhiteSpace(payload))
return;
try
{
string[] parts = payload.Split(new[] { ' ', '\t', ',' }, StringSplitOptions.RemoveEmptyEntries);
if (parts.Length < 3)
return;
float x = float.Parse(parts[0], CultureInfo.InvariantCulture);
float y = float.Parse(parts[1], CultureInfo.InvariantCulture);
float z = float.Parse(parts[2], CultureInfo.InvariantCulture);
Il2Cpp.NolanBehaviour nb = Player.GetPlayer();
if (nb == null)
return;
Vector3 target = new Vector3(x, y, z);
nb.TeleportTo(target, Quaternion.identity);
}
catch (Exception ex)
{
MelonLogger.Error($"TeleportToFixedPoint failed: {ex.Message}");
}
}
// Teleports the player to the map-specific base coordinates (former RecallToBase logic).
private static void TeleportToBase()
{
try
{
Il2Cpp.NolanBehaviour nb = Player.GetPlayer();
if (nb == null)
{
MelonLogger.Warning("Player not found!");
return;
}
string sceneName = Helpers.Map.GetActiveScene();
Vector3 targetPos = Vector3.zero;
string mapName = "";
switch (sceneName)
{
case "Devour":
case "Anna": // Farmhouse
targetPos = new Vector3(5.03f, 4.20f, -50.02f);
mapName = "Farm";
break;
case "Molly": // Asylum
targetPos = new Vector3(17.52f, 1.38f, 7.04f);
mapName = "Asylum";
break;
case "Inn":
targetPos = new Vector3(3.53f, 0.84f, 2.47f);
mapName = "Inn";
break;
case "Town":
targetPos = new Vector3(-63.51f, 10.88f, -12.32f);
mapName = "Town";
break;
case "Slaughterhouse":
targetPos = new Vector3(6.09f, 0.70f, -17.58f);
mapName = "Slaughterhouse";
break;
case "Manor":
targetPos = new Vector3(3.67f, 1.32f, -23.34f);
mapName = "Manor";
break;
case "Carnival":
targetPos = new Vector3(-91.46f, 8.13f, -24.51f);
mapName = "Carnival";
break;
default:
MelonLogger.Warning($"Teleport not available for scene: {sceneName}");
return;
}
nb.locomotion.SetPosition(targetPos, false);
MelonLogger.Msg($"Teleported to {mapName} coordinates: X:{targetPos.x:F2} Y:{targetPos.y:F2} Z:{targetPos.z:F2}");
}
catch (Exception ex)
{
MelonLogger.Error($"Failed to teleport to base: {ex.Message}");
}
}
}
}

View File

@@ -1,39 +1,45 @@
using UnityEngine; using UnityEngine;
using DevourClient.Localization;
namespace DevourClient.Settings
{ namespace DevourClient.Settings
public class Settings {
{ public class Settings
public static bool menu_enable = false; {
public static float width = Screen.width / 2f; public static bool menu_enable = false;
public static float height = Screen.height / 2f; public static float width = Screen.width / 2f;
public static float x = 0; public static float height = Screen.height / 2f;
public static float y = 0; public static float x = 0;
public static Color flashlight_color = new Color(1.00f, 1.00f, 1.00f, 1); public static float y = 0;
public static Color player_esp_color = new Color(0.00f, 1.00f, 0.00f, 1); public static Color flashlight_color = new Color(1.00f, 1.00f, 1.00f, 1);
public static Color azazel_esp_color = new Color(1.00f, 0.00f, 0.00f, 1); public static Color player_esp_color = new Color(0.00f, 1.00f, 0.00f, 1);
public static float speed = 1f; public static Color azazel_esp_color = new Color(1.00f, 0.00f, 0.00f, 1);
public const string message_to_spam = "Deez Nutz"; public static float speed = 1f;
public static KeyCode flyKey = KeyCode.None; public static KeyCode menuToggleKey = KeyCode.Insert;
public static Vector2 itemsScrollPosition = Vector2.zero; public static KeyCode flyKey = KeyCode.None;
public static Vector2 rituelObjectsScrollPosition = Vector2.zero; public static KeyCode teleportKey = KeyCode.B;
public static Vector2 stuffsScrollPosition = Vector2.zero; public static KeyCode radialMenuKey = KeyCode.Z;
public static Vector2 itemsScrollPosition = Vector2.zero;
public static KeyCode GetKey() public static Vector2 rituelObjectsScrollPosition = Vector2.zero;
{ public static Vector2 stuffsScrollPosition = Vector2.zero;
Thread.Sleep(50); //TOFIX tried using anyKeydown, no success
foreach (KeyCode vkey in System.Enum.GetValues(typeof(KeyCode))) public static Language selectedLanguage = Language.English;
{ public static bool showLanguageSelector = false;
if (Input.GetKey(vkey))
{ public static KeyCode GetKey()
if (vkey != KeyCode.Delete) {
{ Thread.Sleep(50);
return vkey; foreach (KeyCode vkey in System.Enum.GetValues(typeof(KeyCode)))
} {
} if (Input.GetKey(vkey))
} {
if (vkey != KeyCode.Delete)
return KeyCode.None; {
} return vkey;
} }
} }
}
return KeyCode.None;
}
}
}

View File

@@ -0,0 +1,362 @@
using DevourClient.Helpers;
using DevourClient.Localization;
using UnityEngine;
namespace DevourClient.UI
{
internal static class ClientMenu
{
internal static void Draw()
{
string currentScene = Helpers.Map.GetActiveScene();
if (currentScene != ClientMain.lastESPScene)
{
ESP.ItemESPConfig.ResetAllStates();
ClientMain.lastESPScene = currentScene;
}
if (ClientMain.should_show_start_message)
{
if (DevourClient.Hacks.Misc.ShowMessageBox("Welcome to DevourClient.\n\nPress the INS key to open the menu.") == 0)
ClientMain.should_show_start_message = false;
}
Color originalBackgroundColor = GUI.backgroundColor;
GUISkin originalSkin = GUI.skin;
try
{
GUI.backgroundColor = Color.grey;
GUI.skin.button.normal.background = GUIHelper.MakeTex(2, 2, Color.black);
GUI.skin.button.normal.textColor = Color.white;
GUI.skin.button.hover.background = GUIHelper.MakeTex(2, 2, Color.green);
GUI.skin.button.hover.textColor = Color.black;
GUI.skin.toggle.onNormal.textColor = Color.yellow;
GUI.skin.textField.normal.background = GUIHelper.MakeTex(2, 2, new Color(0.2f, 0.2f, 0.2f, 0.8f));
GUI.skin.textField.normal.textColor = Color.white;
GUI.skin.textField.focused.background = GUIHelper.MakeTex(2, 2, new Color(0.3f, 0.5f, 0.3f, 0.9f));
GUI.skin.textField.focused.textColor = Color.white;
GUI.skin.textField.hover.background = GUIHelper.MakeTex(2, 2, new Color(0.25f, 0.25f, 0.25f, 0.85f));
GUI.skin.textField.border = new RectOffset(4, 4, 4, 4);
GUI.skin.textField.padding = new RectOffset(6, 6, 4, 4);
GUI.skin.textField.fontSize = 14;
GUI.skin.textField.alignment = TextAnchor.MiddleLeft;
GUI.skin.label.normal.textColor = Color.white;
GUI.skin.horizontalSlider.normal.background = GUIHelper.MakeTex(2, 2, new Color(0.3f, 0.3f, 0.3f, 0.8f));
GUI.skin.horizontalSliderThumb.normal.background = GUIHelper.MakeTex(2, 2, Color.white);
if (UnityEngine.Event.current.type == EventType.Repaint)
{
RenderRepaint();
}
if (ClientMain.crosshair && ClientMain.in_game_cache)
{
const float crosshairSize = 4f;
float xMin = Settings.Settings.width - (crosshairSize / 2f);
float yMin = Settings.Settings.height - (crosshairSize / 2f);
if (ClientMain.crosshairTexture == null)
{
ClientMain.crosshairTexture = Helpers.GUIHelper.GetCircularTexture(5, 5);
}
GUI.DrawTexture(new Rect(xMin, yMin, crosshairSize, crosshairSize), ClientMain.crosshairTexture);
}
RadialMenuManager.HandleOnGUI();
if (Settings.Settings.menu_enable)
{
ClientMain.windowRect = GUI.Window(0, ClientMain.windowRect, (GUI.WindowFunction)ClientTabs.DrawTabs, "DevourClient");
}
}
catch (System.Exception ex)
{
MelonLoader.MelonLogger.Msg($"OnGUI Error: {ex.Message}");
}
finally
{
GUI.backgroundColor = originalBackgroundColor;
GUI.skin = originalSkin;
}
}
private static void RenderRepaint()
{
if (ClientMain.player_esp || ClientMain.player_snapline || ClientMain.player_skel_esp)
{
foreach (Helpers.BasePlayer p in Helpers.Entities.Players)
{
if (p == null)
{
continue;
}
GameObject player = p.p_GameObject;
if (player != null)
{
Il2Cpp.NolanBehaviour nb = player.GetComponent<Il2Cpp.NolanBehaviour>();
if (nb.entity.IsOwner)
{
continue;
}
if (ClientMain.player_skel_esp)
{
Render.Render.DrawAllBones(DevourClient.Hacks.Misc.GetAllBones(nb.animator), Settings.Settings.player_esp_color);
}
Render.Render.DrawBoxESP(player, -0.25f, 1.75f, p.Name, Settings.Settings.player_esp_color, ClientMain.player_snapline, ClientMain.player_esp);
}
}
}
if (ClientMain.goat_rat_esp)
{
foreach (Il2Cpp.GoatBehaviour goat in Helpers.Entities.GoatsAndRats)
{
if (goat != null)
{
string itemName = goat.name.Replace("Survival", "").Replace("(Clone)", "");
if (ESP.ItemESPConfig.ShouldShowESP(itemName))
{
string translatedName = MultiLanguageSystem.Translate(itemName);
Render.Render.DrawNameESP(goat.transform.position, translatedName, new Color(0.94f, 0.61f, 0.18f, 1.0f));
}
}
}
}
if (ClientMain.item_esp)
{
foreach (Il2Cpp.SurvivalInteractable obj in Helpers.Entities.SurvivalInteractables)
{
if (obj != null)
{
string itemName = obj.prefabName.Replace("Survival", "");
if (ESP.ItemESPConfig.ShouldShowESP(itemName))
{
string translatedName = MultiLanguageSystem.Translate(itemName);
Render.Render.DrawNameESP(obj.transform.position, translatedName, new Color(1.0f, 1.0f, 1.0f));
}
}
}
foreach (Il2Cpp.KeyBehaviour key in Helpers.Entities.Keys)
{
if (key != null)
{
if (ESP.ItemESPConfig.ShouldShowESP("Key"))
{
string translatedName = MultiLanguageSystem.Translate("Key");
Render.Render.DrawNameESP(key.transform.position, translatedName, new Color(1.0f, 1.0f, 1.0f));
}
}
}
}
if (Helpers.Entities.Collectables != null)
{
if (ESP.ItemESPConfig.GetESPState(ESP.ItemESPConfig.ESPType.Collectables))
{
Vector3 playerPosition = Vector3.zero;
if (Camera.main != null)
{
playerPosition = Camera.main.transform.position;
}
else if (DevourClient.Helpers.Player.GetPlayer() != null)
{
playerPosition = DevourClient.Helpers.Player.GetPlayer().transform.position;
}
foreach (Il2Cpp.CollectableInteractable collectable in Helpers.Entities.Collectables)
{
if (collectable != null && collectable.gameObject != null)
{
string itemName = collectable.gameObject.name.Replace("Survival", "").Replace("(Clone)", "").Trim();
string displayName = "";
Color espColor = new Color(1.0f, 0.84f, 0.0f, 1.0f);
string lowerName = itemName.ToLower();
if (lowerName.Contains("rose") || lowerName.Contains("collectable"))
{
displayName = MultiLanguageSystem.Translate("Rose");
}
else if (lowerName.Contains("patch"))
{
displayName = MultiLanguageSystem.Translate("Patch");
}
else if (lowerName.Contains("cherry") || lowerName.Contains("blossom"))
{
displayName = MultiLanguageSystem.Translate("Cherry Blossom");
}
else if (lowerName.Contains("horseshoe"))
{
displayName = MultiLanguageSystem.Translate("Horseshoe");
}
else if (lowerName.Contains("barbed") || lowerName.Contains("wire"))
{
displayName = MultiLanguageSystem.Translate("Barbed Wire");
}
else if (lowerName.Contains("feather"))
{
displayName = MultiLanguageSystem.Translate("Feather");
}
else if (lowerName.Contains("ticket"))
{
displayName = MultiLanguageSystem.Translate("Ticket");
}
else if (lowerName.Contains("pumpkin"))
{
displayName = MultiLanguageSystem.Translate("Pumpkin");
}
else if (lowerName.Contains("present"))
{
displayName = MultiLanguageSystem.Translate("Present");
}
else
{
displayName = itemName;
}
if (!string.IsNullOrEmpty(displayName))
{
Render.Render.DrawNameESP(collectable.transform.position, displayName, espColor);
}
}
}
}
}
if (ClientMain.demon_esp)
{
foreach (Il2Cpp.SurvivalDemonBehaviour demon in Helpers.Entities.Demons)
{
if (demon != null)
{
string enemyName = demon.name.Replace("Survival", "").Replace("(Clone)", "");
if (ESP.ItemESPConfig.ShouldShowESP(enemyName))
{
string translatedName = MultiLanguageSystem.Translate(enemyName);
Render.Render.DrawNameESP(demon.transform.position, translatedName, new Color(1.0f, 0.0f, 0.0f, 1.0f));
}
}
}
foreach (Il2Cpp.SpiderBehaviour spider in Helpers.Entities.Spiders)
{
if (spider != null && ESP.ItemESPConfig.ShouldShowESP("Spider"))
{
string translatedName = MultiLanguageSystem.Translate("Spider");
Render.Render.DrawNameESP(spider.transform.position, translatedName, new Color(1.0f, 0.0f, 0.0f, 1.0f));
}
}
foreach (Il2Cpp.GhostBehaviour ghost in Helpers.Entities.Ghosts)
{
if (ghost != null && ESP.ItemESPConfig.ShouldShowESP("Ghost"))
{
string translatedName = MultiLanguageSystem.Translate("Ghost");
Render.Render.DrawNameESP(ghost.transform.position, translatedName, new Color(1.0f, 0.0f, 0.0f, 1.0f));
}
}
foreach (Il2Cpp.BoarBehaviour boar in Helpers.Entities.Boars)
{
if (boar != null && ESP.ItemESPConfig.ShouldShowESP("Boar"))
{
string translatedName = MultiLanguageSystem.Translate("Boar");
Render.Render.DrawNameESP(boar.transform.position, translatedName, new Color(1.0f, 0.0f, 0.0f, 1.0f));
}
}
foreach (Il2Cpp.CorpseBehaviour corpse in Helpers.Entities.Corpses)
{
if (corpse != null && ESP.ItemESPConfig.ShouldShowESP("Corpse"))
{
string translatedName = MultiLanguageSystem.Translate("Corpse");
Render.Render.DrawNameESP(corpse.transform.position, translatedName, new Color(1.0f, 0.0f, 0.0f, 1.0f));
}
}
foreach (Il2Cpp.CrowBehaviour crow in Helpers.Entities.Crows)
{
if (crow != null && ESP.ItemESPConfig.ShouldShowESP("Crow"))
{
string translatedName = MultiLanguageSystem.Translate("Crow");
Render.Render.DrawNameESP(crow.transform.position, translatedName, new Color(1.0f, 0.0f, 0.0f, 1.0f));
}
}
foreach (Il2Cpp.ManorLumpController lump in Helpers.Entities.Lumps)
{
if (lump != null && ESP.ItemESPConfig.ShouldShowESP("Lump"))
{
string translatedName = MultiLanguageSystem.Translate("Lump");
Render.Render.DrawNameESP(lump.transform.position, translatedName, new Color(1.0f, 0.0f, 0.0f, 1.0f));
}
}
foreach (Il2Cpp.GoatBehaviour dirtyHead in Helpers.Entities.DirtyHeads)
{
if (dirtyHead != null && ESP.ItemESPConfig.ShouldShowESP("DirtyHead"))
{
string translatedName = MultiLanguageSystem.Translate("DirtyHead");
Render.Render.DrawNameESP(dirtyHead.transform.position, translatedName, new Color(0.94f, 0.61f, 0.18f, 1.0f));
}
}
foreach (Il2Cpp.MonkeyBehaviour monkey in Helpers.Entities.Monkeys)
{
if (monkey != null && ESP.ItemESPConfig.ShouldShowESP("Monkey"))
{
string translatedName = MultiLanguageSystem.Translate("Monkey");
Render.Render.DrawNameESP(monkey.transform.position, translatedName, new Color(1.0f, 0.0f, 0.0f, 1.0f));
}
}
foreach (Il2Cpp.GoatBehaviour doll in Helpers.Entities.Dolls)
{
if (doll != null)
{
string itemName = doll.name.Replace("Survival", "").Replace("(Clone)", "");
if (ESP.ItemESPConfig.ShouldShowESP(itemName))
{
string translatedName = MultiLanguageSystem.Translate(itemName);
Render.Render.DrawNameESP(doll.transform.position, translatedName, new Color(1.0f, 0.0f, 0.0f, 1.0f));
}
}
}
}
if (ClientMain.azazel_esp || ClientMain.azazel_snapline || ClientMain.azazel_skel_esp)
{
foreach (Il2Cpp.SurvivalAzazelBehaviour survivalAzazel in Helpers.Entities.Azazels)
{
if (survivalAzazel != null)
{
if (ClientMain.azazel_skel_esp)
{
Render.Render.DrawAllBones(DevourClient.Hacks.Misc.GetAllBones(survivalAzazel.animator), Settings.Settings.azazel_esp_color);
}
string translatedName = MultiLanguageSystem.Translate("Azazel");
Render.Render.DrawBoxESP(survivalAzazel.gameObject, -0.25f, 2.0f, translatedName, Settings.Settings.azazel_esp_color, ClientMain.azazel_snapline, ClientMain.azazel_esp);
}
}
}
}
}
}

View File

@@ -0,0 +1,116 @@
using DevourClient.Helpers;
using DevourClient.Localization;
using UnityEngine;
namespace DevourClient.UI
{
internal static partial class ClientTabs
{
private static void EspTab()
{
ClientMain.player_esp = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 70, 150, 20), ClientMain.player_esp, MultiLanguageSystem.Translate("Player ESP"));
ClientMain.player_skel_esp = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 100, 150, 20), ClientMain.player_skel_esp, MultiLanguageSystem.Translate("Skeleton ESP"));
ClientMain.player_snapline = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 130, 150, 20), ClientMain.player_snapline, MultiLanguageSystem.Translate("Player Snapline"));
if (GUI.Button(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 160, 130, 30), MultiLanguageSystem.Translate("Player ESP Color")))
{
ClientMain.player_esp_colorpick = !ClientMain.player_esp_colorpick;
}
if (ClientMain.player_esp_colorpick)
{
Color player_esp_color_input = GUIHelper.ColorPick(MultiLanguageSystem.Translate("Player ESP Color"), Settings.Settings.player_esp_color);
Settings.Settings.player_esp_color = player_esp_color_input;
}
ClientMain.azazel_esp = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 200, 150, 20), ClientMain.azazel_esp, MultiLanguageSystem.Translate("Azazel ESP"));
ClientMain.azazel_skel_esp = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 230, 150, 20), ClientMain.azazel_skel_esp, MultiLanguageSystem.Translate("Skeleton ESP"));
ClientMain.azazel_snapline = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 260, 150, 20), ClientMain.azazel_snapline, MultiLanguageSystem.Translate("Azazel Snapline"));
if (GUI.Button(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 290, 130, 30), MultiLanguageSystem.Translate("Azazel ESP Color")))
{
ClientMain.azazel_esp_colorpick = !ClientMain.azazel_esp_colorpick;
}
if (ClientMain.azazel_esp_colorpick)
{
Color azazel_esp_color_input = GUIHelper.ColorPick(MultiLanguageSystem.Translate("Azazel ESP Color"), Settings.Settings.azazel_esp_color);
Settings.Settings.azazel_esp_color = azazel_esp_color_input;
}
DrawESPPanel();
}
private static void DrawESPPanel()
{
string currentScene = Map.GetActiveScene();
List<ESP.ItemESPConfig.ESPType> espTypes = ESP.ItemESPConfig.GetMapESPTypes(currentScene);
if (espTypes.Count == 0 && currentScene != "Menu")
{
espTypes = new List<ESP.ItemESPConfig.ESPType>();
}
float panelX = Settings.Settings.x + 370;
float panelY = Settings.Settings.y + 70;
float panelWidth = 180;
float itemHeight = 30;
float padding = 5;
GUI.Label(new Rect(panelX, panelY, panelWidth, 25),
MultiLanguageSystem.Translate("ESP Settings"),
GUI.skin.box);
float yOffset = panelY + 30;
if (espTypes.Count > 0)
{
foreach (var espType in espTypes)
{
string displayName = ESP.ItemESPConfig.GetESPTypeName(espType);
string translatedName = MultiLanguageSystem.Translate(displayName);
bool currentState = ESP.ItemESPConfig.GetESPState(espType);
bool newState = GUI.Toggle(
new Rect(panelX + padding, yOffset, panelWidth - padding * 2, itemHeight - padding),
currentState,
translatedName
);
if (newState != currentState)
{
ESP.ItemESPConfig.SetESPState(espType, newState);
}
yOffset += itemHeight;
}
yOffset += 5;
GUI.Label(new Rect(panelX + padding, yOffset, panelWidth - padding * 2, 20),
"─────────",
new GUIStyle(GUI.skin.label) { alignment = TextAnchor.MiddleCenter });
yOffset += 20;
}
bool collectablesCurrentState = ESP.ItemESPConfig.GetESPState(ESP.ItemESPConfig.ESPType.Collectables);
bool collectablesNewState = GUI.Toggle(
new Rect(panelX + padding, yOffset, panelWidth - padding * 2, itemHeight - padding),
collectablesCurrentState,
MultiLanguageSystem.Translate("Collectables ESP")
);
if (collectablesNewState != collectablesCurrentState)
{
ESP.ItemESPConfig.SetESPState(ESP.ItemESPConfig.ESPType.Collectables, collectablesNewState);
}
yOffset += itemHeight;
if (currentScene != "Menu")
{
string mapDisplayName = Map.GetMapName(currentScene);
GUI.Label(
new Rect(panelX, yOffset + 10, panelWidth, 20),
$"Map: {mapDisplayName}",
new GUIStyle(GUI.skin.label) { fontSize = 10, alignment = TextAnchor.MiddleCenter }
);
}
}
}
}

View File

@@ -0,0 +1,146 @@
using DevourClient.Localization;
using DevourClient.Helpers;
using Il2CppPhoton.Bolt;
using UnityEngine;
namespace DevourClient.UI
{
internal static partial class ClientTabs
{
private static void EntitiesTab()
{
if (GUI.Button(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 70, 130, 30), MultiLanguageSystem.Translate("TP items to you")))
{
DevourClient.Hacks.Misc.TPItems();
MelonLoader.MelonLogger.Msg("TP Items!");
}
if (GUI.Button(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 110, 130, 30), MultiLanguageSystem.Translate("Freeze azazel")))
{
DevourClient.Hacks.Misc.FreezeAzazel();
}
GUI.Label(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 150, 120, 30), MultiLanguageSystem.Translate("Azazel & Demons"));
if (GUI.Button(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 180, 60, 25), MultiLanguageSystem.Translate("Sam")) && DevourClient.Helpers.Player.IsInGameOrLobby() && BoltNetwork.IsServer)
{
DevourClient.Hacks.Misc.SpawnAzazel((PrefabId)BoltPrefabs.AzazelSam);
}
if (GUI.Button(new Rect(Settings.Settings.x + 80, Settings.Settings.y + 180, 60, 25), MultiLanguageSystem.Translate("SurvivalMolly")) && DevourClient.Helpers.Player.IsInGameOrLobby() && BoltNetwork.IsServer)
{
DevourClient.Hacks.Misc.SpawnAzazel((PrefabId)BoltPrefabs.SurvivalAzazelMolly);
}
if (GUI.Button(new Rect(Settings.Settings.x + 150, Settings.Settings.y + 180, 60, 25), MultiLanguageSystem.Translate("Anna")) && DevourClient.Helpers.Player.IsInGameOrLobby() && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalAnnaNew, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUI.Button(new Rect(Settings.Settings.x + 220, Settings.Settings.y + 180, 60, 25), MultiLanguageSystem.Translate("Zara")) && DevourClient.Helpers.Player.IsInGameOrLobby() && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.AzazelZara, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUI.Button(new Rect(Settings.Settings.x + 290, Settings.Settings.y + 180, 60, 25), MultiLanguageSystem.Translate("SurvivalNathan")) && DevourClient.Helpers.Player.IsInGameOrLobby() && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.AzazelNathan, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUI.Button(new Rect(Settings.Settings.x + 360, Settings.Settings.y + 180, 60, 25), MultiLanguageSystem.Translate("SurvivalApril")) && DevourClient.Helpers.Player.IsInGameOrLobby() && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.AzazelApril, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUI.Button(new Rect(Settings.Settings.x + 430, Settings.Settings.y + 180, 60, 25), MultiLanguageSystem.Translate("SurvivalKai")) && DevourClient.Helpers.Player.IsInGameOrLobby() && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.AzazelKai, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUI.Button(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 220, 60, 25), MultiLanguageSystem.Translate("Ghost")) && DevourClient.Helpers.Player.IsInGameOrLobby() && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.Ghost, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUI.Button(new Rect(Settings.Settings.x + 80, Settings.Settings.y + 220, 60, 25), MultiLanguageSystem.Translate("Inmate")) && DevourClient.Helpers.Player.IsInGameOrLobby() && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalInmate, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUI.Button(new Rect(Settings.Settings.x + 150, Settings.Settings.y + 220, 60, 25), MultiLanguageSystem.Translate("Demon")) && DevourClient.Helpers.Player.IsInGameOrLobby() && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalDemon, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUI.Button(new Rect(Settings.Settings.x + 220, Settings.Settings.y + 220, 60, 25), MultiLanguageSystem.Translate("Boar")) && DevourClient.Helpers.Player.IsInGameOrLobby() && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.Boar, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUI.Button(new Rect(Settings.Settings.x + 290, Settings.Settings.y + 220, 60, 25), MultiLanguageSystem.Translate("Corpse")) && BoltNetwork.IsServer && DevourClient.Helpers.Player.IsInGameOrLobby())
{
BoltNetwork.Instantiate(BoltPrefabs.Corpse, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUI.Button(new Rect(Settings.Settings.x + 360, Settings.Settings.y + 220, 60, 25), MultiLanguageSystem.Translate("Crow")) && BoltNetwork.IsServer && DevourClient.Helpers.Player.IsInGameOrLobby())
{
BoltNetwork.Instantiate(BoltPrefabs.Crow, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUI.Button(new Rect(Settings.Settings.x + 430, Settings.Settings.y + 220, 60, 25), MultiLanguageSystem.Translate("Lump")) && BoltNetwork.IsServer && DevourClient.Helpers.Player.IsInGameOrLobby())
{
BoltNetwork.Instantiate(BoltPrefabs.ManorLump, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUI.Button(new Rect(Settings.Settings.x + 500, Settings.Settings.y + 220, 60, 25), MultiLanguageSystem.Translate("Monkey")) && BoltNetwork.IsServer && DevourClient.Helpers.Player.IsInGameOrLobby())
{
BoltNetwork.Instantiate(BoltPrefabs.Monkey, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUI.Button(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 260, 60, 25), MultiLanguageSystem.Translate("Rat")))
{
if (BoltNetwork.IsServer && !DevourClient.Helpers.Player.IsInGame())
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalRat, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (DevourClient.Helpers.Player.IsInGame() && !DevourClient.Helpers.Player.IsPlayerCrawling())
{
DevourClient.Hacks.Misc.CarryObject("SurvivalRat");
}
}
if (GUI.Button(new Rect(Settings.Settings.x + 80, Settings.Settings.y + 260, 60, 25), MultiLanguageSystem.Translate("Goat")))
{
if (BoltNetwork.IsServer && !DevourClient.Helpers.Player.IsInGame())
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalGoat, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (DevourClient.Helpers.Player.IsInGame() && !DevourClient.Helpers.Player.IsPlayerCrawling())
{
DevourClient.Hacks.Misc.CarryObject("SurvivalGoat");
}
}
if (GUI.Button(new Rect(Settings.Settings.x + 150, Settings.Settings.y + 260, 60, 25), MultiLanguageSystem.Translate("Spider")) && BoltNetwork.IsServer && DevourClient.Helpers.Player.IsInGameOrLobby())
{
BoltNetwork.Instantiate(BoltPrefabs.Spider, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUI.Button(new Rect(Settings.Settings.x + 220, Settings.Settings.y + 260, 60, 25), MultiLanguageSystem.Translate("Pig")))
{
if (BoltNetwork.IsServer && !DevourClient.Helpers.Player.IsInGame())
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalPig, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (DevourClient.Helpers.Player.IsInGame() && !DevourClient.Helpers.Player.IsPlayerCrawling())
{
DevourClient.Hacks.Misc.CarryObject("SurvivalPig");
}
}
}
}
}

View File

@@ -0,0 +1,416 @@
using DevourClient.Localization;
using Il2CppPhoton.Bolt;
using UnityEngine;
namespace DevourClient.UI
{
internal static partial class ClientTabs
{
private static void ItemsTab()
{
GUILayout.BeginHorizontal();
GUILayout.BeginVertical();
GUILayout.Label(MultiLanguageSystem.Translate("Items"));
Settings.Settings.itemsScrollPosition = GUILayout.BeginScrollView(Settings.Settings.itemsScrollPosition, GUILayout.Width(220), GUILayout.Height(190));
if (GUILayout.Button(MultiLanguageSystem.Translate("Hay")))
{
if (BoltNetwork.IsServer && !DevourClient.Helpers.Player.IsInGame())
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalHay, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
else
{
ClientMain.HandleItemCarry("SurvivalHay");
}
}
if (GUILayout.Button(MultiLanguageSystem.Translate("First aid")))
{
if (BoltNetwork.IsServer && !DevourClient.Helpers.Player.IsInGame())
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalFirstAid, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
else
{
ClientMain.HandleItemCarry("SurvivalFirstAid");
}
}
if (GUILayout.Button(MultiLanguageSystem.Translate("Battery")))
{
if (BoltNetwork.IsServer && !DevourClient.Helpers.Player.IsInGame())
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalBattery, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
else
{
ClientMain.HandleItemCarry("SurvivalBattery");
}
}
if (GUILayout.Button(MultiLanguageSystem.Translate("Gasoline")))
{
if (BoltNetwork.IsServer && !DevourClient.Helpers.Player.IsInGame())
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalGasoline, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
else
{
ClientMain.HandleItemCarry("SurvivalGasoline");
}
}
if (GUILayout.Button(MultiLanguageSystem.Translate("Fuse")))
{
if (BoltNetwork.IsServer && !DevourClient.Helpers.Player.IsInGame())
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalFuse, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
else
{
ClientMain.HandleItemCarry("SurvivalFuse");
}
}
if (GUILayout.Button(MultiLanguageSystem.Translate("Food")))
{
if (BoltNetwork.IsServer && !DevourClient.Helpers.Player.IsInGame())
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalRottenFood, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
else
{
ClientMain.HandleItemCarry("SurvivalRottenFood");
}
}
if (GUILayout.Button(MultiLanguageSystem.Translate("Bone")))
{
if (BoltNetwork.IsServer && !DevourClient.Helpers.Player.IsInGame())
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalBone, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
else
{
ClientMain.HandleItemCarry("SurvivalBone");
}
}
if (GUILayout.Button(MultiLanguageSystem.Translate("Bleach")))
{
if (BoltNetwork.IsServer && !DevourClient.Helpers.Player.IsInGame())
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalBleach, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
else
{
ClientMain.HandleItemCarry("SurvivalBleach");
}
}
if (GUILayout.Button(MultiLanguageSystem.Translate("Matchbox")))
{
if (BoltNetwork.IsServer && !DevourClient.Helpers.Player.IsInGame())
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalMatchbox, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
else
{
ClientMain.HandleItemCarry("Matchbox-3");
}
}
if (GUILayout.Button(MultiLanguageSystem.Translate("Spade")))
{
if (BoltNetwork.IsServer && !DevourClient.Helpers.Player.IsInGame())
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalSpade, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
else
{
ClientMain.HandleItemCarry("SurvivalSpade");
}
}
if (GUILayout.Button(MultiLanguageSystem.Translate("Cake")))
{
if (BoltNetwork.IsServer && !DevourClient.Helpers.Player.IsInGame())
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalCake, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
else
{
ClientMain.HandleItemCarry("SurvivalCake");
}
}
if (GUILayout.Button(MultiLanguageSystem.Translate("MusicBox")))
{
if (BoltNetwork.IsServer && !DevourClient.Helpers.Player.IsInGame())
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalMusicBox, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
else
{
ClientMain.HandleItemCarry("MusicBox-Idle");
}
}
if (GUILayout.Button(MultiLanguageSystem.Translate("Coin")))
{
if (BoltNetwork.IsServer && !DevourClient.Helpers.Player.IsInGame())
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalCoin, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
else
{
ClientMain.HandleItemCarry("SurvivalCoin");
}
}
GUILayout.EndScrollView();
ClientMain.autoItemFarm = GUILayout.Toggle(ClientMain.autoItemFarm, MultiLanguageSystem.Translate("Auto farm items (x5)"));
GUILayout.EndVertical();
GUILayout.BeginVertical();
GUILayout.Label(MultiLanguageSystem.Translate("Ritual Objects"));
Settings.Settings.rituelObjectsScrollPosition = GUILayout.BeginScrollView(Settings.Settings.rituelObjectsScrollPosition, GUILayout.Width(220), GUILayout.Height(190));
if (GUILayout.Button(MultiLanguageSystem.Translate("Egg-1"))) DevourClient.Hacks.Misc.CarryObject("Egg-Clean-1");
if (GUILayout.Button(MultiLanguageSystem.Translate("Egg-2"))) DevourClient.Hacks.Misc.CarryObject("Egg-Clean-2");
if (GUILayout.Button(MultiLanguageSystem.Translate("Egg-3"))) DevourClient.Hacks.Misc.CarryObject("Egg-Clean-3");
if (GUILayout.Button(MultiLanguageSystem.Translate("Egg-4"))) DevourClient.Hacks.Misc.CarryObject("Egg-Clean-4");
if (GUILayout.Button(MultiLanguageSystem.Translate("Egg-5"))) DevourClient.Hacks.Misc.CarryObject("Egg-Clean-5");
if (GUILayout.Button(MultiLanguageSystem.Translate("Egg-6"))) DevourClient.Hacks.Misc.CarryObject("Egg-Clean-6");
if (GUILayout.Button(MultiLanguageSystem.Translate("Egg-7"))) DevourClient.Hacks.Misc.CarryObject("Egg-Clean-7");
if (GUILayout.Button(MultiLanguageSystem.Translate("Egg-8"))) DevourClient.Hacks.Misc.CarryObject("Egg-Clean-8");
if (GUILayout.Button(MultiLanguageSystem.Translate("Egg-9"))) DevourClient.Hacks.Misc.CarryObject("Egg-Clean-9");
if (GUILayout.Button(MultiLanguageSystem.Translate("Egg-10"))) DevourClient.Hacks.Misc.CarryObject("Egg-Clean-10");
if (GUILayout.Button(MultiLanguageSystem.Translate("Ritual Book")))
{
if (BoltNetwork.IsServer && !DevourClient.Helpers.Player.IsInGame())
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalRitualBook, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
else
{
DevourClient.Hacks.Misc.CarryObject("RitualBook-Active-1");
}
}
if (GUILayout.Button(MultiLanguageSystem.Translate("DollHead")))
{
if (BoltNetwork.IsServer && !DevourClient.Helpers.Player.IsInGame())
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalDollHead, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
else
{
DevourClient.Hacks.Misc.CarryObject("SurvivalDollHead");
}
}
if (GUILayout.Button(MultiLanguageSystem.Translate("Gardener"))) DevourClient.Hacks.Misc.CarryObject("Head-Clean-Gardener");
if (GUILayout.Button(MultiLanguageSystem.Translate("Butler"))) DevourClient.Hacks.Misc.CarryObject("Head-Clean-Butler");
if (GUILayout.Button(MultiLanguageSystem.Translate("Bridesmaid 1"))) DevourClient.Hacks.Misc.CarryObject("Head-Clean-Bridesmaid_01");
if (GUILayout.Button(MultiLanguageSystem.Translate("Bridesmaid 2"))) DevourClient.Hacks.Misc.CarryObject("Head-Clean-Bridesmaid_02");
if (GUILayout.Button(MultiLanguageSystem.Translate("Cook"))) DevourClient.Hacks.Misc.CarryObject("Head-Clean-Cook");
if (GUILayout.Button(MultiLanguageSystem.Translate("Groomsman 1"))) DevourClient.Hacks.Misc.CarryObject("Head-Clean-Groomsman_01");
if (GUILayout.Button(MultiLanguageSystem.Translate("Groomsman 2"))) DevourClient.Hacks.Misc.CarryObject("Head-Clean-Groomsman_02");
if (GUILayout.Button(MultiLanguageSystem.Translate("Maid"))) DevourClient.Hacks.Misc.CarryObject("Head-Clean-Maid");
if (GUILayout.Button(MultiLanguageSystem.Translate("Photographer"))) DevourClient.Hacks.Misc.CarryObject("Head-Clean-Photographer");
if (GUILayout.Button(MultiLanguageSystem.Translate("Priest"))) DevourClient.Hacks.Misc.CarryObject("Head-Clean-Priest");
GUILayout.EndScrollView();
GUILayout.EndVertical();
GUILayout.BeginVertical();
GUILayout.Label(MultiLanguageSystem.Translate("Spawnable Prefabs"));
Settings.Settings.stuffsScrollPosition = GUILayout.BeginScrollView(Settings.Settings.stuffsScrollPosition, GUILayout.Width(220), GUILayout.Height(190));
DrawSpawnablePrefabs();
GUILayout.EndScrollView();
GUILayout.EndVertical();
GUILayout.EndHorizontal();
}
private static void DrawSpawnablePrefabs()
{
if (GUILayout.Button(MultiLanguageSystem.Translate("Animal_Gate")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.Animal_Gate, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("AsylumDoor")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.AsylumDoor, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("AsylumDoubleDoor")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.AsylumDoubleDoor, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("AsylumWhiteDoor")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.AsylumWhiteDoor, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("DevourDoorBack")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.DevourDoorBack, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("DevourDoorMain")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.DevourDoorMain, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("DevourDoorRoom")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.DevourDoorRoom, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("Elevator_Door")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.Elevator_Door, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("InnDoor")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.InnDoor, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("InnDoubleDoor")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.InnDoubleDoor, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("InnShojiDoor")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.InnShojiDoor, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("InnShrine")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.InnShrine, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("InnWardrobe")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.InnWardrobe, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("InnWoodenDoor")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.InnWoodenDoor, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("PigExcrement")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.PigExcrement, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("SlaughterhouseFireEscapeDoor")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.SlaughterhouseFireEscapeDoor, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("SurvivalAltarMolly")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalAltarMolly, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("SurvivalAltarSlaughterhouse")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalAltarSlaughterhouse, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("SurvivalAltarTown")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalAltarTown, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("SurvivalCultist")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalCultist, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("SurvivalKai")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalKai, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("SurvivalNathan")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalNathan, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("SurvivalMolly")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalMolly, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("SurvivalApril")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalApril, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("SurvivalFrank")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalFrank, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("SurvivalRose")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalRose, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("SurvivalSmashableWindow")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.SurvivalSmashableWindow, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("TownDoor")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.TownDoor, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("TownDoor2")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.TownDoor2, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("TownPentagram")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.TownPentagram, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("TrashCan")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.TrashCan, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("Truck_Shutter")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.Truck_Shutter, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("TV")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.TV, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
if (GUILayout.Button(MultiLanguageSystem.Translate("Mirror")) && BoltNetwork.IsServer)
{
BoltNetwork.Instantiate(BoltPrefabs.ManorMirror, DevourClient.Helpers.Player.GetPlayer().transform.position, Quaternion.identity);
}
}
}
}

View File

@@ -0,0 +1,279 @@
using DevourClient.Helpers;
using DevourClient.Localization;
using UnityEngine;
namespace DevourClient.UI
{
internal static partial class ClientTabs
{
private static void MapSpecificTab()
{
if (GUI.Button(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 70, 150, 30), MultiLanguageSystem.Translate("Instant Win")) && DevourClient.Helpers.Player.IsInGame() && Il2CppPhoton.Bolt.BoltNetwork.IsSinglePlayer)
{
DevourClient.Hacks.Misc.InstantWin();
MelonLoader.MelonLogger.Msg("EZ Win");
}
if (GUI.Button(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 110, 150, 30), MultiLanguageSystem.Translate("Burn a ritual object")))
{
DevourClient.Hacks.Misc.BurnRitualObj(Map.GetActiveScene(), false);
}
if (GUI.Button(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 150, 150, 30), MultiLanguageSystem.Translate("Burn all ritual objects")))
{
DevourClient.Hacks.Misc.BurnRitualObj(Map.GetActiveScene(), true);
}
switch (Map.GetActiveScene())
{
case "Menu":
break;
case "Devour":
if (GUI.Button(new Rect(Settings.Settings.x + 190, Settings.Settings.y + 70, 150, 30), MultiLanguageSystem.Translate("TP to Azazel")))
{
try
{
Il2Cpp.NolanBehaviour nb = DevourClient.Helpers.Player.GetPlayer();
nb.TeleportTo(Map.GetAzazel().transform.position, Quaternion.identity);
}
catch
{
MelonLoader.MelonLogger.Msg("Azazel not found !");
}
}
if (GUI.Button(new Rect(Settings.Settings.x + 190, Settings.Settings.y + 110, 150, 30), MultiLanguageSystem.Translate("Despawn Demons")))
{
DevourClient.Hacks.Misc.DespawnDemons();
}
break;
case "Molly":
if (GUI.Button(new Rect(Settings.Settings.x + 190, Settings.Settings.y + 70, 150, 30), MultiLanguageSystem.Translate("TP to Azazel")))
{
try
{
Il2Cpp.NolanBehaviour nb = DevourClient.Helpers.Player.GetPlayer();
nb.TeleportTo(Map.GetAzazel().transform.position, Quaternion.identity);
}
catch
{
MelonLoader.MelonLogger.Msg("Azazel not found !");
}
}
if (GUI.Button(new Rect(Settings.Settings.x + 190, Settings.Settings.y + 110, 150, 30), MultiLanguageSystem.Translate("Despawn Inmates")))
{
DevourClient.Hacks.Misc.DespawnDemons();
}
break;
case "Inn":
if (GUI.Button(new Rect(Settings.Settings.x + 190, Settings.Settings.y + 70, 150, 30), MultiLanguageSystem.Translate("TP to Azazel")))
{
try
{
Il2Cpp.NolanBehaviour nb = DevourClient.Helpers.Player.GetPlayer();
nb.TeleportTo(Map.GetAzazel().transform.position, Quaternion.identity);
}
catch
{
MelonLoader.MelonLogger.Msg("Azazel not found !");
}
}
if (GUI.Button(new Rect(Settings.Settings.x + 190, Settings.Settings.y + 110, 150, 30), MultiLanguageSystem.Translate("Clean The Fountains")))
{
DevourClient.Hacks.Misc.CleanFountain();
}
if (GUI.Button(new Rect(Settings.Settings.x + 190, Settings.Settings.y + 150, 150, 30), MultiLanguageSystem.Translate("Despawn Spiders")))
{
DevourClient.Hacks.Misc.DespawnSpiders();
}
break;
case "Town":
if (GUI.Button(new Rect(Settings.Settings.x + 190, Settings.Settings.y + 70, 150, 30), MultiLanguageSystem.Translate("TP to Azazel")))
{
try
{
Il2Cpp.NolanBehaviour nb = DevourClient.Helpers.Player.GetPlayer();
nb.TeleportTo(Map.GetAzazel().transform.position, Quaternion.identity);
}
catch
{
MelonLoader.MelonLogger.Msg("Azazel not found !");
}
}
if (GUI.Button(new Rect(Settings.Settings.x + 190, Settings.Settings.y + 110, 150, 30), MultiLanguageSystem.Translate("Despawn Ghosts")))
{
DevourClient.Hacks.Misc.DespawnGhosts();
}
break;
case "Slaughterhouse":
if (GUI.Button(new Rect(Settings.Settings.x + 190, Settings.Settings.y + 70, 150, 30), MultiLanguageSystem.Translate("TP to Azazel")))
{
try
{
Il2Cpp.NolanBehaviour nb = DevourClient.Helpers.Player.GetPlayer();
nb.TeleportTo(Map.GetAzazel().transform.position, Quaternion.identity);
}
catch
{
MelonLoader.MelonLogger.Msg("Azazel not found !");
}
}
if (GUI.Button(new Rect(Settings.Settings.x + 190, Settings.Settings.y + 110, 150, 30), MultiLanguageSystem.Translate("Despawn Boars")))
{
DevourClient.Hacks.Misc.DespawnBoars();
}
if (GUI.Button(new Rect(Settings.Settings.x + 190, Settings.Settings.y + 150, 150, 30), MultiLanguageSystem.Translate("Despawn Corpses")))
{
DevourClient.Hacks.Misc.DespawnCorpses();
}
break;
case "Manor":
if (GUI.Button(new Rect(Settings.Settings.x + 190, Settings.Settings.y + 70, 150, 30), MultiLanguageSystem.Translate("TP to Azazel")))
{
try
{
Il2Cpp.NolanBehaviour nb = DevourClient.Helpers.Player.GetPlayer();
nb.TeleportTo(Map.GetAzazel().transform.position, Quaternion.identity);
}
catch
{
MelonLoader.MelonLogger.Msg("Azazel not found !");
}
}
if (GUI.Button(new Rect(Settings.Settings.x + 190, Settings.Settings.y + 110, 150, 30), MultiLanguageSystem.Translate("Despawn Crows")))
{
DevourClient.Hacks.Misc.DespawnCrows();
}
if (GUI.Button(new Rect(Settings.Settings.x + 190, Settings.Settings.y + 150, 150, 30), MultiLanguageSystem.Translate("Despawn Lumps")))
{
DevourClient.Hacks.Misc.DespawnLumps();
}
if (GUI.Button(new Rect(Settings.Settings.x + 370, Settings.Settings.y + 70, 150, 30), MultiLanguageSystem.Translate("Switch realm")))
{
Il2Cpp.NolanBehaviour nb = DevourClient.Helpers.Player.GetPlayer();
Vector3 pos = nb.transform.position;
Il2Cpp.ManorDeadRealmTrigger realm = Il2Cpp.ManorDeadRealmTrigger.FindObjectOfType<Il2Cpp.ManorDeadRealmTrigger>();
if (realm == null)
{
MelonLoader.MelonLogger.Warning("realm was null.");
return;
}
if (realm.IsInDeadRealm)
{
pos.x += 150f;
}
else
{
pos.x -= 150f;
}
nb.locomotion.SetPosition(pos, false);
}
if (GUI.Button(new Rect(Settings.Settings.x + 370, Settings.Settings.y + 110, 150, 30), MultiLanguageSystem.Translate("Switch realm (house)")))
{
Il2Cpp.NolanBehaviour nb = DevourClient.Helpers.Player.GetPlayer();
Vector3 pos = nb.transform.position;
Il2Cpp.ManorDeadRealmTrigger realm = Il2Cpp.ManorDeadRealmTrigger.FindObjectOfType<Il2Cpp.ManorDeadRealmTrigger>();
if (realm == null)
{
MelonLoader.MelonLogger.Warning("realm was null.");
return;
}
if (realm.IsInDeadRealm)
{
pos.x = -10.216758f;
pos.y = 0.009999979f;
pos.z = -7.632657f;
}
else
{
pos.x = -160.03688f;
pos.y = 0.010014875f;
pos.z = -7.5686994f;
}
nb.locomotion.SetPosition(pos, false);
}
ClientMain.infinite_mirrors = GUI.Toggle(new Rect(Settings.Settings.x + 370, Settings.Settings.y + 150, 150, 20), ClientMain.infinite_mirrors, MultiLanguageSystem.Translate("Infinite mirrors"));
break;
case "Carnival":
if (GUI.Button(new Rect(Settings.Settings.x + 190, Settings.Settings.y + 70, 150, 30), MultiLanguageSystem.Translate("TP to Azazel")))
{
try
{
Il2Cpp.NolanBehaviour nb = DevourClient.Helpers.Player.GetPlayer();
nb.TeleportTo(Map.GetAzazel().transform.position, Quaternion.identity);
}
catch
{
MelonLoader.MelonLogger.Msg("Azazel not found !");
}
}
if (GUI.Button(new Rect(Settings.Settings.x + 190, Settings.Settings.y + 110, 150, 30), MultiLanguageSystem.Translate("Despawn Monkeys")))
{
DevourClient.Hacks.Misc.DespawnMonkeys();
}
break;
}
GUI.Label(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 210, 100, 30), MultiLanguageSystem.Translate("Load Map:"));
if (GUI.Button(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 240, 90, 30), MultiLanguageSystem.Translate("Farmhouse")) && Il2CppPhoton.Bolt.BoltNetwork.IsServer)
{
Map.LoadMap("Devour");
}
if (GUI.Button(new Rect(Settings.Settings.x + 110, Settings.Settings.y + 240, 90, 30), MultiLanguageSystem.Translate("Asylum")) && Il2CppPhoton.Bolt.BoltNetwork.IsServer)
{
Map.LoadMap("Molly");
}
if (GUI.Button(new Rect(Settings.Settings.x + 210, Settings.Settings.y + 240, 90, 30), MultiLanguageSystem.Translate("Inn")) && Il2CppPhoton.Bolt.BoltNetwork.IsServer)
{
Map.LoadMap("Inn");
}
if (GUI.Button(new Rect(Settings.Settings.x + 310, Settings.Settings.y + 240, 90, 30), MultiLanguageSystem.Translate("Town")) && Il2CppPhoton.Bolt.BoltNetwork.IsServer)
{
Map.LoadMap("Town");
}
if (GUI.Button(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 280, 90, 30), MultiLanguageSystem.Translate("Slaughterhouse")) && Il2CppPhoton.Bolt.BoltNetwork.IsServer)
{
Map.LoadMap("Slaughterhouse");
}
if (GUI.Button(new Rect(Settings.Settings.x + 110, Settings.Settings.y + 280, 90, 30), MultiLanguageSystem.Translate("Manor")) && Il2CppPhoton.Bolt.BoltNetwork.IsServer)
{
Map.LoadMap("Manor");
}
if (GUI.Button(new Rect(Settings.Settings.x + 210, Settings.Settings.y + 280, 90, 30), MultiLanguageSystem.Translate("Carnival")) && Il2CppPhoton.Bolt.BoltNetwork.IsServer)
{
Map.LoadMap("Carnival");
}
}
}
}

View File

@@ -0,0 +1,173 @@
using DevourClient.Localization;
using Il2CppOpsive.UltimateCharacterController.Character;
using UnityEngine;
namespace DevourClient.UI
{
internal static partial class ClientTabs
{
private static void MiscTab()
{
GUI.Label(new Rect(Settings.Settings.x + 320, Settings.Settings.y + 70, 150, 20), "Language :");
string currentLanguageName = MultiLanguageSystem.GetLanguageDisplayName(Settings.Settings.selectedLanguage);
if (GUI.Button(new Rect(Settings.Settings.x + 320, Settings.Settings.y + 95, 150, 30), currentLanguageName))
{
Settings.Settings.showLanguageSelector = !Settings.Settings.showLanguageSelector;
}
if (Settings.Settings.showLanguageSelector)
{
DevourClient.Localization.Language[] allLanguages = MultiLanguageSystem.GetAllLanguages();
float yOffset = 130;
GUI.Box(new Rect(Settings.Settings.x + 320, Settings.Settings.y + yOffset - 5, 150, allLanguages.Length * 25 + 10), "");
foreach (DevourClient.Localization.Language lang in allLanguages)
{
string displayName = MultiLanguageSystem.GetLanguageDisplayName(lang);
if (GUI.Button(new Rect(Settings.Settings.x + 325, Settings.Settings.y + yOffset, 140, 20), displayName))
{
Settings.Settings.selectedLanguage = lang;
MultiLanguageSystem.CurrentLanguage = lang;
Settings.Settings.showLanguageSelector = false;
MelonLoader.MelonLogger.Msg($"Language changed to: {displayName}");
}
yOffset += 25;
}
}
if (GUI.Button(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 70, 140, 28), MultiLanguageSystem.Translate("Unlock Achievements")))
{
Thread AchievementsThread = new Thread(new ThreadStart(DevourClient.Hacks.Unlock.Achievements));
AchievementsThread.Start();
MelonLoader.MelonLogger.Msg("Achievements unlocked!");
DevourClient.Hacks.Misc.ShowMessageBox("Achievements unlocked!");
}
if (GUI.Button(new Rect(Settings.Settings.x + 160, Settings.Settings.y + 70, 140, 28), MultiLanguageSystem.Translate("Unlock Doors")))
{
DevourClient.Hacks.Unlock.Doors();
MelonLoader.MelonLogger.Msg("Doors unlocked!");
}
if (GUI.Button(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 108, 140, 28), MultiLanguageSystem.Translate("Teleport Keys")) && DevourClient.Helpers.Player.IsInGame())
{
DevourClient.Hacks.Misc.TPKeys();
MelonLoader.MelonLogger.Msg("Keys teleported!");
}
if (GUI.Button(new Rect(Settings.Settings.x + 160, Settings.Settings.y + 108, 140, 28), MultiLanguageSystem.Translate("Play Random Sound")))
{
DevourClient.Hacks.Misc.PlaySound();
MelonLoader.MelonLogger.Msg("Playing random sound!");
}
ClientMain._walkInLobby = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 155, 140, 20), ClientMain._walkInLobby, MultiLanguageSystem.Translate("Walk In Lobby"));
ClientMain._IsAutoRespawn = GUI.Toggle(new Rect(Settings.Settings.x + 160, Settings.Settings.y + 155, 140, 20), ClientMain._IsAutoRespawn, MultiLanguageSystem.Translate("Auto Respawn"));
ClientMain.fly = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 180, 100, 20), ClientMain.fly, MultiLanguageSystem.Translate("Fly"));
if (GUI.Button(new Rect(Settings.Settings.x + 120, Settings.Settings.y + 180, 60, 20), Settings.Settings.flyKey.ToString()))
{
Settings.Settings.flyKey = Settings.Settings.GetKey();
}
GUI.Label(new Rect(Settings.Settings.x + 20, Settings.Settings.y + 205, 80, 20), MultiLanguageSystem.Translate("Fly Speed") + ":");
ClientMain.fly_speed = GUI.HorizontalSlider(new Rect(Settings.Settings.x + 100, Settings.Settings.y + 210, 150, 10), ClientMain.fly_speed, 5f, 20f);
GUI.Label(new Rect(Settings.Settings.x + 260, Settings.Settings.y + 205, 50, 20), ((int)ClientMain.fly_speed).ToString());
ClientMain.spoofLevel = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 250, 200, 20), ClientMain.spoofLevel, MultiLanguageSystem.Translate("Spoof Level"));
GUI.Label(new Rect(Settings.Settings.x + 20, Settings.Settings.y + 275, 80, 20), MultiLanguageSystem.Translate("Level") + ":");
ClientMain.spoofLevelValue = GUI.HorizontalSlider(new Rect(Settings.Settings.x + 100, Settings.Settings.y + 280, 150, 10), ClientMain.spoofLevelValue, 0f, 666f);
GUI.Label(new Rect(Settings.Settings.x + 260, Settings.Settings.y + 275, 50, 20), ((int)ClientMain.spoofLevelValue).ToString());
bool newGodMode = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 480, 200, 20), ClientMain.godMode, MultiLanguageSystem.Translate("God Mode"));
if (newGodMode != ClientMain.godMode)
{
ClientMain.godMode = newGodMode;
if (DevourClient.Helpers.Player.IsInGameOrLobby())
{
var nb = DevourClient.Helpers.Player.GetPlayer();
if (nb != null)
{
if (ClientMain.godMode)
{
ClientMain.godModeOriginalLayer = nb.gameObject.layer;
nb.gameObject.layer = LayerMask.NameToLayer("Default");
}
else
{
int targetLayer = ClientMain.godModeOriginalLayer;
if (targetLayer < 0)
{
var layerManager = nb.gameObject.GetComponent<CharacterLayerManager>();
if (layerManager != null)
{
var maskValue = layerManager.CharacterLayer.value;
if (maskValue != 0 && (maskValue & (maskValue - 1)) == 0)
{
targetLayer = (int)Mathf.Log(maskValue, 2);
}
}
if (targetLayer < 0)
{
int playerLayer = LayerMask.NameToLayer("Player");
if (playerLayer >= 0) targetLayer = playerLayer;
}
}
if (targetLayer >= 0)
{
nb.gameObject.layer = targetLayer;
}
ClientMain.godModeOriginalLayer = -1;
}
}
}
}
ClientMain.exp_modifier = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 310, 200, 20), ClientMain.exp_modifier, MultiLanguageSystem.Translate("Exp Modifier"));
GUI.Label(new Rect(Settings.Settings.x + 20, Settings.Settings.y + 335, 80, 20), MultiLanguageSystem.Translate("Exp Value") + ":");
ClientMain.exp = GUI.HorizontalSlider(new Rect(Settings.Settings.x + 100, Settings.Settings.y + 340, 150, 10), ClientMain.exp, 1000f, 6000f);
GUI.Label(new Rect(Settings.Settings.x + 260, Settings.Settings.y + 335, 50, 20), ((int)ClientMain.exp).ToString());
ClientMain.fastMove = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 370, 200, 20), ClientMain.fastMove, MultiLanguageSystem.Translate("Fast Move"));
GUI.Label(new Rect(Settings.Settings.x + 20, Settings.Settings.y + 395, 100, 20), MultiLanguageSystem.Translate("Speed Multiplier") + ":");
ClientMain._PlayerSpeedMultiplier = GUI.HorizontalSlider(new Rect(Settings.Settings.x + 130, Settings.Settings.y + 400, 120, 10), ClientMain._PlayerSpeedMultiplier, (int)1f, (int)10f);
GUI.Label(new Rect(Settings.Settings.x + 260, Settings.Settings.y + 395, 50, 20), ((int)ClientMain._PlayerSpeedMultiplier).ToString());
ClientMain.showCoordinates = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 430, 200, 20), ClientMain.showCoordinates, MultiLanguageSystem.Translate("Show Coordinates"));
ClientMain.instantInteraction = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 455, 200, 20), ClientMain.instantInteraction, MultiLanguageSystem.Translate("Instant Interaction"));
GUI.Label(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 505, 200, 20), MultiLanguageSystem.Translate("Radial Menu"));
if (GUI.Button(new Rect(Settings.Settings.x + 220, Settings.Settings.y + 505, 80, 20), Settings.Settings.radialMenuKey.ToString()))
{
Settings.Settings.radialMenuKey = Settings.Settings.GetKey();
}
GUI.Label(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 530, 200, 20), MultiLanguageSystem.Translate("Menu Key"));
if (GUI.Button(new Rect(Settings.Settings.x + 220, Settings.Settings.y + 530, 80, 20), Settings.Settings.menuToggleKey.ToString()))
{
Settings.Settings.menuToggleKey = Settings.Settings.GetKey();
}
if (ClientMain.showCoordinates && DevourClient.Helpers.Player.IsInGameOrLobby())
{
try
{
Il2Cpp.NolanBehaviour nb = DevourClient.Helpers.Player.GetPlayer();
if (nb != null && nb.transform != null)
{
Vector3 pos = nb.transform.position;
string coordText = $"Position: X:{pos.x:F2} Y:{pos.y:F2} Z:{pos.z:F2}";
GUI.Label(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 560, 400, 30), coordText);
}
}
catch (System.Exception)
{
}
}
}
}
}

View File

@@ -0,0 +1,90 @@
using DevourClient.Localization;
using UnityEngine;
namespace DevourClient.UI
{
internal static partial class ClientTabs
{
private static void NetworkTab()
{
int yOffset = 70;
int xBase = (int)Settings.Settings.x + 10;
int yBase = (int)Settings.Settings.y;
GUI.Label(new Rect(xBase, yBase + yOffset, 300, 30),
MultiLanguageSystem.Translate("Network Info") + ": " + Network.NetworkHelper.GetRoomInfo());
yOffset += 40;
GUI.Label(new Rect(xBase, yBase + yOffset, 300, 30),
$"=== {MultiLanguageSystem.Translate("Lobby Manager")} ===");
yOffset += 35;
GUI.Label(new Rect(xBase, yBase + yOffset, 100, 30),
MultiLanguageSystem.Translate("Region") + ":");
string[] regionDisplayNames = Network.RegionHelper.GetRegionDisplayNames();
if (GUI.Button(new Rect(xBase + 110, yBase + yOffset, 200, 30), regionDisplayNames[ClientMain.selectedRegion]))
{
ClientMain.selectedRegion = (ClientMain.selectedRegion + 1) % regionDisplayNames.Length;
}
yOffset += 40;
GUI.Label(new Rect(xBase, yBase + yOffset, 100, 30),
MultiLanguageSystem.Translate("Lobby Size") + ":");
ClientMain.lobbySize = (int)GUI.HorizontalSlider(new Rect(xBase + 110, yBase + yOffset + 5, 120, 20), ClientMain.lobbySize, 1, 64);
GUI.Label(new Rect(xBase + 240, yBase + yOffset, 50, 30), ClientMain.lobbySize.ToString());
yOffset += 35;
ClientMain.isPrivateLobby = GUI.Toggle(new Rect(xBase, yBase + yOffset, 200, 30),
ClientMain.isPrivateLobby, MultiLanguageSystem.Translate("Private Lobby"));
yOffset += 35;
if (GUI.Button(new Rect(xBase, yBase + yOffset, 300, 40),
MultiLanguageSystem.Translate("Create Lobby")))
{
string regionCode = Network.RegionHelper.GetRegionCodeByIndex(ClientMain.selectedRegion);
Network.LobbyManager.CreateLobby(regionCode, ClientMain.lobbySize, ClientMain.isPrivateLobby);
}
yOffset += 50;
GUI.Label(new Rect(xBase, yBase + yOffset, 300, 30),
$"=== {MultiLanguageSystem.Translate("Lobby Control")} ===");
yOffset += 35;
bool isHost = Network.NetworkHelper.IsHost();
GUI.enabled = isHost;
if (GUI.Button(new Rect(xBase, yBase + yOffset, 300, 35),
MultiLanguageSystem.Translate("Force Start Game") + (isHost ? "" : " (" + MultiLanguageSystem.Translate("Host Only") + ")")))
{
Network.LobbyManager.ForceLobbyStart();
}
GUI.enabled = true;
yOffset += 45;
if (Network.NetworkHelper.IsNetworkRunning())
{
yOffset += 10;
GUI.Label(new Rect(xBase, yBase + yOffset, 300, 30),
$"=== {MultiLanguageSystem.Translate("Network Stats")} ===");
yOffset += 35;
GUI.Label(new Rect(xBase, yBase + yOffset, 200, 30),
MultiLanguageSystem.Translate("Player Count") + ": " + Network.NetworkHelper.GetPlayerCount());
yOffset += 30;
if (!isHost)
{
GUI.Label(new Rect(xBase, yBase + yOffset, 200, 30),
"Ping: " + Network.NetworkHelper.GetPing() + "ms");
yOffset += 30;
}
GUI.Label(new Rect(xBase, yBase + yOffset, 200, 30),
MultiLanguageSystem.Translate("Connection ID") + ": " + Network.NetworkHelper.GetConnectionID());
}
}
}
}

View File

@@ -0,0 +1,91 @@
using DevourClient.Helpers;
using DevourClient.Localization;
using UnityEngine;
namespace DevourClient.UI
{
internal static partial class ClientTabs
{
private static void PlayersTab()
{
if (Helpers.Map.GetActiveScene() != "Menu")
{
GUI.Label(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 70, 150, 30), MultiLanguageSystem.Translate("Players") + ":");
int i = 0;
if (Entities.Players != null)
{
foreach (BasePlayer? bp in Entities.Players)
{
if (bp == null || bp.Name == "")
{
continue;
}
GUI.Label(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 110 + i, 150, 30), bp.Name);
int buttonX = (int)Settings.Settings.x + 70;
int buttonY = (int)Settings.Settings.y + 105 + i;
if (GUI.Button(new Rect(buttonX, buttonY, 70, 30), MultiLanguageSystem.Translate("Kill")))
{
bp.Kill();
}
buttonX += 80;
if (GUI.Button(new Rect(buttonX, buttonY, 70, 30), MultiLanguageSystem.Translate("Revive")))
{
if (bp.p_GameObject != null)
{
Il2Cpp.NolanBehaviour nb = bp.p_GameObject.GetComponent<Il2Cpp.NolanBehaviour>();
if (nb != null)
{
ReviveHelper.TryRevive(nb);
}
}
}
buttonX += 80;
if (GUI.Button(new Rect(buttonX, buttonY, 90, 30), MultiLanguageSystem.Translate("Jumpscare")))
{
bp.Jumpscare();
}
buttonX += 100;
if (GUI.Button(new Rect(buttonX, buttonY, 80, 30), MultiLanguageSystem.Translate("Teleport to")))
{
bp.TP();
}
buttonX += 90;
if (GUI.Button(new Rect(buttonX, buttonY, 100, 30), MultiLanguageSystem.Translate("Lock in cage")))
{
bp.LockInCage();
}
buttonX += 110;
if (GUI.Button(new Rect(buttonX, buttonY, 90, 30), MultiLanguageSystem.Translate("TP Azazel")))
{
bp.TPAzazel();
}
buttonX += 100;
if (Helpers.Map.GetActiveScene() == "Town")
{
if (GUI.Button(new Rect(buttonX, buttonY, 90, 30), MultiLanguageSystem.Translate("Shoot Player")))
{
bp.ShootPlayer();
}
}
i += 45;
}
}
}
else
{
GUI.Label(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 70, 300, 30), MultiLanguageSystem.Translate("Waiting for the game to start"));
}
}
}
}

View File

@@ -0,0 +1,34 @@
using DevourClient.Localization;
using UnityEngine;
namespace DevourClient.UI
{
internal static partial class ClientTabs
{
private static void VisualsTab()
{
ClientMain.flashlight_toggle = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 70, 120, 30), ClientMain.flashlight_toggle, MultiLanguageSystem.Translate("Big Flashlight"));
ClientMain.fullbright = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 100, 120, 30), ClientMain.fullbright, MultiLanguageSystem.Translate("Fullbright"));
ClientMain.unlimitedUV = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 130, 130, 30), ClientMain.unlimitedUV, MultiLanguageSystem.Translate("Unlimited UV Light"));
ClientMain.crosshair = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 160, 130, 30), ClientMain.crosshair, MultiLanguageSystem.Translate("Crosshair"));
if (GUI.Button(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 190, 130, 30), MultiLanguageSystem.Translate("Flashlight Color")))
{
ClientMain.flashlight_colorpick = !ClientMain.flashlight_colorpick;
MelonLoader.MelonLogger.Msg("Flashlight color picker : " + ClientMain.flashlight_colorpick.ToString());
}
if (ClientMain.flashlight_colorpick)
{
Color flashlight_color_input = DevourClient.Helpers.GUIHelper.ColorPick(MultiLanguageSystem.Translate("Flashlight Color"), Settings.Settings.flashlight_color);
Settings.Settings.flashlight_color = flashlight_color_input;
if (DevourClient.Helpers.Player.IsInGame())
{
DevourClient.Hacks.Misc.FlashlightColor(flashlight_color_input);
}
}
}
}
}

View File

@@ -0,0 +1,87 @@
using DevourClient.Localization;
using UnityEngine;
using CurrentTab = DevourClient.ClientMain.CurrentTab;
namespace DevourClient.UI
{
internal static partial class ClientTabs
{
internal static void DrawTabs(int windowID)
{
GUILayout.BeginHorizontal();
if (GUILayout.Button(MultiLanguageSystem.Translate("Visuals"), GUILayout.Height(40)) || Input.GetKeyDown(KeyCode.F1))
{
ClientMain.current_tab = CurrentTab.Visuals;
}
if (GUILayout.Button(MultiLanguageSystem.Translate("Entities"), GUILayout.Height(40)) || Input.GetKeyDown(KeyCode.F2))
{
ClientMain.current_tab = CurrentTab.Entities;
}
if (GUILayout.Button(MultiLanguageSystem.Translate("Map"), GUILayout.Height(40)) || Input.GetKeyDown(KeyCode.F3))
{
ClientMain.current_tab = CurrentTab.Map;
}
if (GUILayout.Button(MultiLanguageSystem.Translate("ESP"), GUILayout.Height(40)) || Input.GetKeyDown(KeyCode.F4))
{
ClientMain.current_tab = CurrentTab.ESP;
}
if (GUILayout.Button(MultiLanguageSystem.Translate("Items"), GUILayout.Height(40)) || Input.GetKeyDown(KeyCode.F5))
{
ClientMain.current_tab = CurrentTab.Items;
}
if (GUILayout.Button(MultiLanguageSystem.Translate("Misc"), GUILayout.Height(40)) || Input.GetKeyDown(KeyCode.F6))
{
ClientMain.current_tab = CurrentTab.Misc;
}
if (GUILayout.Button(MultiLanguageSystem.Translate("Players"), GUILayout.Height(40)) || Input.GetKeyDown(KeyCode.F7))
{
ClientMain.current_tab = CurrentTab.Players;
}
if (GUILayout.Button(MultiLanguageSystem.Translate("Network"), GUILayout.Height(40)) || Input.GetKeyDown(KeyCode.F8))
{
ClientMain.current_tab = CurrentTab.Network;
}
GUILayout.EndHorizontal();
switch (ClientMain.current_tab)
{
case CurrentTab.Visuals:
VisualsTab();
break;
case CurrentTab.Entities:
EntitiesTab();
break;
case CurrentTab.Map:
MapSpecificTab();
break;
case CurrentTab.ESP:
EspTab();
break;
case CurrentTab.Items:
ItemsTab();
break;
case CurrentTab.Misc:
MiscTab();
break;
case CurrentTab.Players:
PlayersTab();
break;
case CurrentTab.Network:
NetworkTab();
break;
}
GUI.DragWindow();
}
}
}

317
README.md
View File

@@ -1,130 +1,187 @@
# Unknowncheats thread [here](https://www.unknowncheats.me/forum/other-fps-games/475950-devour-multihack-update.html) # Unknowncheats thread [here](https://www.unknowncheats.me/forum/other-fps-games/475950-devour-multihack-update.html)
# DevourClient # DevourClient
Very based cheat for the game Devour. Very based cheat for the game Devour.
## Detection rate ## Detection rate
Well at this point i don't really know, i think there is some sort of native Unity anti cheat template but it doesn't seem active. You're fine, no anti cheat ! You can find the log in the directory "C:\Users\%USERNAME%\AppData\LocalLow\Straight Back Games\DEVOUR", and it's interesting that this game has the detect function and can tell the cheat engine you are using, and notice that “This Game has been MODIFIED using MelonLoader. DO NOT report any issues to the Game Developers! ~”
## Menu And if you are playing with a game developer, they will know who is using cheats in this lobby by some function in their client.
![menu screenshot](Screenshots/menu.png)
But you will never get banned by using cheats, they choose to ignore that.
## Features
Everything about spoofing ehre (steam name, server name, level...) will persist if you don't uncheck it (it will be reseted when you'll restart the game obv).
* An IMGUI menu thanks to UnityEngine ## Menu
* Fully compatible with the new IL2CPP version of the game ![menu screenshot](Screenshots/menu.png)
* Detects if you're in game (with bad code lol), so no chances of crashing on main menu by activating features
* Detects the map you are playing on (useful for the instant win) ## Features
* Big Flashlight (allows your flashlight to light a lot more) Everything about spoofing ehre (steam name, server name, level...) will persist if you don't uncheck it (it will be reseted when you'll restart the game obv).
* Flashlight color customization (with a home made color picker) * An IMGUI menu thanks to UnityEngine
* Unlimited UV light (thanks to [@jadis0x](https://github.com/jadis0x)) * Fully compatible with the new IL2CPP version of the game
* A chat spammer for Lobby and InGame chat (i couldn't do a text entry because of the limitations of [Il2CppAssemblyUnhollower](https://github.com/knah/Il2CppAssemblyUnhollower)) * Detects if you're in game (with bad code lol), so no chances of crashing on main menu by activating features
* Achievements unlocker (couldn't do all of them, my code is crashing for some reasons at some point, i may fix it, for now it's commented out) * Detects the map you are playing on (useful for the instant win)
* Doors unlocker (should work fine, though it doesn't seem to work sometimes) * Big Flashlight (allows your flashlight to light a lot more)
* Keys teleporter * Flashlight color customization (with a home made color picker)
* LV spoofer * Unlimited UV light (thanks to [@jadis0x](https://github.com/jadis0x))
* Steam name spoofer (sets it to "patate", again no input text :/) * Achievements unlocker (couldn't do all of them, my code is crashing for some reasons at some point, i may fix it, for now it's commented out)
* Server name spoofer (sets it to "patate on top !", again no input text :/) * Doors unlocker (should work fine, though it doesn't seem to work sometimes)
* Fly * Keys teleporter
* Unlock all, including flashlights, perks, outfits. Active by default, can't be turned off, no persistance. * LV spoofer
* Instant Win (allows you to win instantaniously on any map, works in singleplayer, but not as a client. May be working as host) * Fly
* Random Sound (make your character play a random acting sound) * Unlock all, including flashlights, perks, outfits. Active by default, can't be turned off, no persistance.
* Always carrying a medkit * Instant Win (allows you to win instantaniously on any map, works in singleplayer, but not as a client. May be working as host)
* Change your exp at the end of the game, changing it is permanant ! * Random Sound (make your character play a random acting sound)
* Player ESP (with a home made color picker) * Always carrying a medkit
* Player skeleton ESP * Change your exp at the end of the game, changing it is permanant !
* Player snaplines (with a home made color picker) * Player ESP (with a home made color picker)
* Azazel ESP (with a home made color picker) * Player skeleton ESP
* Azazel Skeleton ESP * Player snaplines (with a home made color picker)
* Azazel snapline (with a home made color picker) * Azazel ESP (with a home made color picker)
* Item ESP * Azazel Skeleton ESP
* Demon ESP * Azazel snapline (with a home made color picker)
* Goat/Rat ESP * Item ESP (with multi-language translation) (Now you can specify the display of a single item)
* TP all the items to your position ! (thanks to [@jadis0x](https://github.com/jadis0x)) * Demon ESP (with multi-language translation)
* Spawn any item/entity to your position * Goat/Rat ESP (with multi-language translation)
* Walk in the lobby * Collection ESP (Collected items of 25 per map, similar to roses, horseshoes, etc)
* Change the player's speed * TP all the items to your position ! (thanks to [@jadis0x](https://github.com/jadis0x))
* Fullbright * Spawn any item/entity to your position
* Create a lobby with no player limit * Walk in the lobby
* Change the player's speed
## Installation * Fullbright
For my French fellas out there, 1tap2times made a French video tutorial for the installation of the Mod : [link](https://vimeo.com/789315436)<br> * Infinite mirrors (Manor update)
For my German friends, KiwiJuice02 made a german video tutorial right here : [link](https://www.youtube.com/watch?v=Ntablvo6y-I)<br> * Switch between realms (Manor update)
In order to get all of this working you need to generate the DevourClient.dll file by building the source code. * Farm Items x5 (host only)
* Radial Menu (Z)
0. Install [.NET 6 SDK and runtime](https://dotnet.microsoft.com/en-us/download/dotnet/6.0). * God Mode
1. [Build the cheat from source](https://github.com/ALittlePatate/DevourClient#building-from-source). * instant interaction (set the speed to 0.05, and you can interact with objects instantly without any bugs)
2. Put the DevourClient.dll file located in `DevourClient\bin\Release\net6.0` inside `C:\Program Files (x86)\Steam\steamapps\common\Devour\Mods` folder. * New revive function (only works for host. If you're host, you can revive your teammates; and if you're not host, you can only revive host.)
3. Start the game, now you have successfully installed DevourClient. Use INSERT to open the menu * Customize Lobby (Public or Private, 1-64 room size, but when the number of players exceeds four, the game will have bugs)
* 11 languages supported (English, 简体中文, Français, Deutsch, Español, 日本語, 한국어, Русский, Português, Italiano, Tiếng Việt) with in-game language switcher in Misc tab. Check it in misc table!
## Uninstallation * Due to the game update, I deleted "Steam name spoofer" and "Server name spoofer" these two functions.For "steam name spoofer", even changed your name by this function, your teamates can still see your name by steam profile, escape button, and your message in game.(by manafeng)
0. Delete the folders `MelonLoader`, `Mods`, `Plugins`, `UserData`, and the file `version.dll` from `C:\Program Files (x86)\Steam\steamapps\common\Devour` ## English Installation Tutorial
## Building from source Raz did a great job at writing a guide on how to install the mod, link here : [link](https://docs.google.com/presentation/d/1YdIE5wwGWiJZ2RVughFYrlXUnFrxol-HI7QyLY_m0zc)<br>
0. Clone the repository (or Code -> Download Zip) ## French Installation Tutorial
1. Install [MelonLoader](https://github.com/LavaGang/MelonLoader/releases) V0.6.0 (go to Settings -> tick "Show ALPHA Pre-Releases") to Devour.
2. Start your game. A cmd should appear, don't close it, MelonLoader is installing and decompiling Devour's game assemblies. For my French fellas out there, 1tap2times made a French video tutorial for the installation of the Mod : [link](https://vimeo.com/789315436)<br>
3. Wait for the process to finish, once it's done close the game.
4. Open the solution file (DevourClient.sln) in Visual Studio ## German Video Installation Tutorial
5. Go to : Project --> Add a reference --> Browse --> Click on the browse button in the down right corner of the window.
6. Add those files : For my German friends, KiwiJuice02 made a german video tutorial right here : [link](https://www.youtube.com/watch?v=Ntablvo6y-I)<br>
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\net6\MelonLoader.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\net6\0Harmony.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\net6\Il2CppInterop.Runtime.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Assembly-CSharp.dll` ## English Installation Guide
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2CppOpsive.UltimateCharacterController.dll` If you just want to install this plugin and use it directly in the game:
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2CppBehaviorDesigner.Runtime.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppbolt.user.dll` 1. Install the [.NET 6](https://dotnet.microsoft.com/en-us/download/dotnet/6.0) runtime environment
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppbolt.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppmscorlib.dll` 2. Install [MelonLoader](https://github.com/LavaGang/MelonLoader/releases)
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.IMGUIModule.dll` There are no version restrictions, just try to choose the latest version. After opening the MelonLoader page, click on Devour to enter the installation interface. Keep all default settings, no need to check or modify any other options, then click Install to proceed
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.InputLegacyModule.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.HotReloadModule.dll` 3. Install the DLL file → Download the latest DLL file from the releases section of this project, then add this file to the Mods folder in your Devour installation directory (If you don't know the directory location, you can right-click Devour in Steam, select "Manage" → "Browse local files")
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.UI.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.UIModule.dll` 4. Run Devour → If the installation is successful, you will see a Windows window showing various installation prompts, then the game will automatically launch. Press the 'INSERT' or 'INS' key to open and close the DevourClient window
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.CoreModule.dll` **Note:** Some computers may show a "fatal error" message after installing MelonLoader. I haven't encountered this issue myself, but the main cause is usually that files extracted to the MelonLoader folder in the Devour root directory during the MelonLoader installation process have problems. Simple solutions include: (1) Copy the MelonLoader folder from another computer with the same system and bit-width (x86, x32), then paste it directly into your computer. (2) Completely delete the MelonLoader folder and reinstall.
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.InputModule.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppudpkit.common.dll` **Note:** Some computers may display "0 mod" when loading. Please check if your DLL file is working correctly and ensure that you have placed the DLL file in the Devour "Mods" folder.
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppudpkit.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppudpkit.platform.photon.dll` If you want to modify and develop the code, please follow the [Building from source](#building-from-source) steps below.
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.AnimationModule.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.PhysicsModule.dll` ## 中文安装指南
7. Build the solutions in Release | Any CPU 如果你只是想要安装这个插件,直接在游戏里使用的话
## Contact 1、安装 [.net 6](https://dotnet.microsoft.com/en-us/download/dotnet/6.0) 的运行环境
You can add me on discord at patate#1252 or on the [discord server](https://discord.gg/2amMFvqjYd) 2、安装 [melonloader](https://github.com/LavaGang/MelonLoader/releases)
版本无限制尽量选择新版即可。打开melonloader页面后点击devour进入安装界面全部默认即可无需勾选或修改其他选项点击install进行安装安装过程中可能需要vpn支持
## Code used
3、安装dll文件 → 从本项目的release中下载最新的dll文件然后将此文件添加到你的devour的安装目录中的mods文件夹里不知道目录的情况下可以在steam中右键devour选择“管理”-“浏览本地文件”即可)
For teaching me the basics :
* [A Begginner's Guide To Hacking Unity Games](https://www.unknowncheats.me/wiki/A_Beginner%27s_Guide_To_Hacking_Unity_Games) 4、运行devour → 如果安装成功你会看到一个windows窗口进行各类安装提示后自动进入游戏。点击insert键即可打开和关闭devourclient窗口
For teaching me about the MelonLoader mods API and Il2Cpp specifications : 注意有些电脑在安装melonloader之后会出现fatal error的提示这个我目前并没有碰到过。但是出现这个提示的主要原因基本是melonloader安装过程中提取到devour根目录的melonloader文件夹里的文件出现了问题比较简单的解决办法就是1在别人的同系统同位宽x86x32的电脑里拷贝出来他的melonloader文件夹然后直接粘贴到自己的电脑里。2将melonloader文件夹完全删除然后重装。(3)在直到游戏完全运行菜单正常工作之前保持VPN线路通畅。
* [MelonLoader's quickstart documentation](https://melonwiki.xyz/#/modders/quickstart)
* [MelonLoader's Il2Cpp differences chapter in the documentation](https://melonwiki.xyz/#/modders/il2cppdifferences) 注意:如果在加载时提示 “0 mod”请检查你的dll文件是否正常是否已经将dll文件放置到devour的“mods”文件夹中。
For teaching me about the UnityEngine API : 如果你想要对代码进行修改和开发,请按照下面的 [building from source](#building-from-source) 的步骤,逐步进行
* [Unity User Manual 2020.3 (LTS)](https://docs.unity3d.com/Manual/index.html)
For decompiling and looking in the source code of the game : ## Uninstallation
* [dnSpy : a .NET debugger and assembly editor](https://github.com/dnSpy/dnSpy)
0. Delete the folders `MelonLoader`, `Mods`, `Plugins`, `UserData`, and the file `version.dll` from `C:\Program Files (x86)\Steam\steamapps\common\Devour`
For teaching me the basics about Devour game hacking, and i pasted the Key TP hack and the non working part of the Achievements Unlocker from it :
* [DevourCheatMonoInjector](https://github.com/Glatrix/DevourCheatMonoInjector) ## Building from source
Game's last update before il2cpp : 0. Clone the repository (or Code -> Download Zip)
* https://steamdb.info/depot/1274571/history/?changeid=M:1960656865974212833 1. Install [.NET 6 SDK and runtime](https://dotnet.microsoft.com/en-us/download/dotnet/6.0).
2. Install [MelonLoader](https://github.com/LavaGang/MelonLoader/releases) V0.7.1 (go to Settings -> tick "Show ALPHA Pre-Releases") to Devour.
## Contributing 3. Start your game. A cmd should appear, don't close it, MelonLoader is installing and decompiling Devour's game assemblies.
4. Wait for the process to finish, once it's done close the game.
Open an [issue](https://github.com/ALittlePatate/DevourClient/issues/new) or make a [pull request](https://github.com/ALittlePatate/DevourClient/pulls), i'll be glad to improve my project with you ! 5. Open the solution file (DevourClient.sln) in Visual Studio
6. Go to : Project --> Add a reference --> Browse --> Click on the browse button in the down right corner of the window.
## License 7. Add those files :
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\net6\MelonLoader.dll`
[GPL 3.0](https://www.gnu.org/licenses/gpl-3.0.md) * `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\net6\0Harmony.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\net6\Il2CppInterop.Runtime.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Assembly-CSharp.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2CppOpsive.UltimateCharacterController.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppbolt.user.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppbolt.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppmscorlib.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.IMGUIModule.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.InputLegacyModule.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.UI.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.UIModule.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.CoreModule.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppudpkit.common.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppudpkit.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppudpkit.platform.photon.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.AnimationModule.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.PhysicsModule.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppcom.rlabrecque.steamworks.net.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\unity.TextMeshPro.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.TextRenderingModule.dll`
8. Build the solutions in Release | Any CPU
**Note**: Now you can add these dependencies automatically by 'update_dependency' script.
## Contact
You can add me on discord at _.patate or on the [discord server](https://discord.gg/2amMFvqjYd)
## Code used
For teaching me the basics :
* [A Begginner's Guide To Hacking Unity Games](https://www.unknowncheats.me/wiki/A_Beginner%27s_Guide_To_Hacking_Unity_Games)
For teaching me about the MelonLoader mods API and Il2Cpp specifications :
* [MelonLoader's quickstart documentation](https://melonwiki.xyz/#/modders/quickstart)
* [MelonLoader's Il2Cpp differences chapter in the documentation](https://melonwiki.xyz/#/modders/il2cppdifferences)
For teaching me about the UnityEngine API :
* [Unity User Manual 2020.3 (LTS)](https://docs.unity3d.com/Manual/index.html)
For decompiling and looking in the source code of the game :
* [dnSpy : a .NET debugger and assembly editor](https://github.com/dnSpy/dnSpy)
For teaching me the basics about Devour game hacking, and i pasted the Key TP hack and the non working part of the Achievements Unlocker from it :
* [DevourCheatMonoInjector](https://github.com/Glatrix/DevourCheatMonoInjector)
Game's last update before il2cpp :
* https://steamdb.info/depot/1274571/history/?changeid=M:1960656865974212833
## Contributing
Open an [issue](https://github.com/ALittlePatate/DevourClient/issues/new) or make a [pull request](https://github.com/ALittlePatate/DevourClient/pulls), i'll be glad to improve my project with you !
## License
[GPL 3.0](https://www.gnu.org/licenses/gpl-3.0.md)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 544 KiB

After

Width:  |  Height:  |  Size: 611 KiB

View File

@@ -11,17 +11,26 @@ import json
f = open('script.json') f = open('script.json')
data = json.load(f) data = json.load(f)
o = open('out.cs', 'a') o = open('out.cs', 'w')
o.write("string[] achievements = {") o.write("string[] achievements = {")
tot = 0 tot_ach = 0
for i in data['ScriptString']: for i in data['ScriptString']:
v = i["Value"] v = i["Value"]
if "ACH_" in v : if "ACH_" in v :
o.write('"'+v+'", ') o.write('"'+v+'", ')
tot+=1 tot_ach+=1
o.write("};\n")
o.write("};") tot_stat = 0
print(f"{tot} achievements") o.write("string[] stats = {")
for j in data['ScriptString']:
v = j["Value"]
if "STAT_" in v :
o.write('"'+v+'", ')
tot_stat+=1
o.write("};\n")
print(f"{tot_ach} achievements, {tot_stat} stats")
# Closing files # Closing files
o.close() o.close()

28
update_dependency.bat Normal file
View File

@@ -0,0 +1,28 @@
@echo off
chcp 65001 >nul
echo ========================================
echo DevourClient Dependency Path Update Script
echo ========================================
echo.
REM Check if PowerShell is available
powershell -Command "exit 0" >nul 2>&1
if errorlevel 1 (
echo Error: PowerShell not found, cannot run script
pause
exit /b 1
)
REM Run PowerShell script
powershell -ExecutionPolicy Bypass -File "%~dp0update_dependency.ps1"
if errorlevel 1 (
echo.
echo Script execution failed!
pause
exit /b 1
) else (
echo.
pause
)

293
update_dependency.ps1 Normal file
View File

@@ -0,0 +1,293 @@
# PowerShell script: Automatically update dependency paths in DevourClient.csproj (Windows)
# Function: Automatically find Devour installation path in Steam libraries and replace hardcoded paths in csproj file
param(
[string]$CsprojPath = "DevourClient\DevourClient.csproj"
)
Write-Host "========================================" -ForegroundColor Cyan
Write-Host "DevourClient Dependency Path Update Script" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
Write-Host ""
$DevourAppId = "1274570"
function Find-SteamLibraries {
$steamLibraries = @()
$defaultSteamPath = "${env:ProgramFiles(x86)}\Steam"
if (Test-Path $defaultSteamPath) {
$steamLibraries += $defaultSteamPath
} else {
$alternativePaths = @(
"${env:ProgramFiles}\Steam",
"$env:LOCALAPPDATA\Steam",
"C:\Steam",
"D:\Steam"
)
foreach ($altPath in $alternativePaths) {
if (Test-Path $altPath) {
$steamLibraries += $altPath
$defaultSteamPath = $altPath
break
}
}
}
$libraryFoldersPath = Join-Path $defaultSteamPath "steamapps\libraryfolders.vdf"
if (Test-Path $libraryFoldersPath) {
try {
$content = Get-Content $libraryFoldersPath -Raw -ErrorAction Stop
$pathPattern = '"path"\s+"([^"]+)"'
$pathMatches = [regex]::Matches($content, $pathPattern)
foreach ($match in $pathMatches) {
$libraryPath = $match.Groups[1].Value -replace '\\\\', '\'
if (Test-Path $libraryPath) {
$steamLibraries += $libraryPath
}
}
} catch {
Write-Host "Error reading libraryfolders.vdf: $($_.Exception.Message)" -ForegroundColor Red
}
} else {
$driveLetters = @("C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z")
foreach ($drive in $driveLetters) {
$pathsToCheck = @(
"${drive}:\SteamLibrary",
"${drive}:\Steam",
"${drive}:\steam",
"${drive}:\Steam\SteamLibrary",
"${drive}:\Games\Steam"
)
foreach ($checkPath in $pathsToCheck) {
if (Test-Path $checkPath) {
$steamappsPath = Join-Path $checkPath "steamapps"
if (Test-Path $steamappsPath) {
$steamLibraries += $checkPath
}
}
}
}
}
return $steamLibraries | Select-Object -Unique
}
function Find-DevourPathFromManifest {
param([string]$SteamLibraryPath)
$appManifestPath = Join-Path $SteamLibraryPath "steamapps\appmanifest_$DevourAppId.acf"
if (Test-Path $appManifestPath) {
$content = Get-Content $appManifestPath -Raw
$installDirPattern = '"installdir"\s+"([^"]+)"'
$installDirMatch = [regex]::Match($content, $installDirPattern)
if ($installDirMatch.Success) {
$installDir = $installDirMatch.Groups[1].Value
$devourPath = Join-Path $SteamLibraryPath "steamapps\common\$installDir"
if (Test-Path $devourPath) {
return $devourPath
}
}
}
return $null
}
$RequiredDependencies = @(
@{ Name = "0Harmony"; RelativePath = "steamapps\common\Devour\MelonLoader\net6\0Harmony.dll" },
@{ Name = "Assembly-CSharp"; RelativePath = "steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Assembly-CSharp.dll" },
@{ Name = "Il2Cppbolt"; RelativePath = "steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppbolt.dll" },
@{ Name = "Il2Cppbolt.user"; RelativePath = "steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppbolt.user.dll" },
@{ Name = "Il2Cppcom.rlabrecque.steamworks.net"; RelativePath = "steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppcom.rlabrecque.steamworks.net.dll" },
@{ Name = "Il2CppInterop.Runtime"; RelativePath = "steamapps\common\Devour\MelonLoader\net6\Il2CppInterop.Runtime.dll" },
@{ Name = "Il2Cppmscorlib"; RelativePath = "steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppmscorlib.dll" },
@{ Name = "Il2CppOpsive.UltimateCharacterController"; RelativePath = "steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2CppOpsive.UltimateCharacterController.dll" },
@{ Name = "Il2Cppudpkit"; RelativePath = "steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppudpkit.dll" },
@{ Name = "Il2Cppudpkit.common"; RelativePath = "steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppudpkit.common.dll" },
@{ Name = "Il2Cppudpkit.platform.photon"; RelativePath = "steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppudpkit.platform.photon.dll" },
@{ Name = "MelonLoader"; RelativePath = "steamapps\common\Devour\MelonLoader\net6\MelonLoader.dll" },
@{ Name = "Unity.TextMeshPro"; RelativePath = "steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Unity.TextMeshPro.dll" },
@{ Name = "UnityEngine"; RelativePath = "steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.dll" },
@{ Name = "UnityEngine.AnimationModule"; RelativePath = "steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.AnimationModule.dll" },
@{ Name = "UnityEngine.CoreModule"; RelativePath = "steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.CoreModule.dll" },
@{ Name = "UnityEngine.IMGUIModule"; RelativePath = "steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.IMGUIModule.dll" },
@{ Name = "UnityEngine.InputLegacyModule"; RelativePath = "steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.InputLegacyModule.dll" },
@{ Name = "UnityEngine.PhysicsModule"; RelativePath = "steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.PhysicsModule.dll" },
@{ Name = "UnityEngine.TextRenderingModule"; RelativePath = "steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.TextRenderingModule.dll" },
@{ Name = "UnityEngine.UI"; RelativePath = "steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.UI.dll" },
@{ Name = "UnityEngine.UIModule"; RelativePath = "steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.UIModule.dll" }
)
function Find-DevourPath {
Write-Host "Searching for Devour installation path..." -ForegroundColor Yellow
$steamLibraries = Find-SteamLibraries
if ($steamLibraries.Count -eq 0) {
Write-Host "No Steam libraries found!" -ForegroundColor Red
Write-Host "Please check if Steam is installed." -ForegroundColor Yellow
return $null
}
$devourPath = $null
foreach ($library in $steamLibraries) {
$foundPath = Find-DevourPathFromManifest -SteamLibraryPath $library
if ($foundPath) {
$melonLoaderPath = Join-Path $foundPath "MelonLoader"
if (Test-Path $melonLoaderPath) {
$devourPath = $foundPath
Write-Host "Found Devour: $devourPath" -ForegroundColor Green
return $devourPath
}
}
}
foreach ($library in $steamLibraries) {
$possiblePath = Join-Path $library "steamapps\common\Devour"
if (Test-Path $possiblePath) {
$melonLoaderPath = Join-Path $possiblePath "MelonLoader"
if (Test-Path $melonLoaderPath) {
$devourPath = $possiblePath
Write-Host "Found Devour: $devourPath" -ForegroundColor Green
break
}
}
}
if (-not $devourPath) {
Write-Host "Devour installation path not found!" -ForegroundColor Red
Write-Host "Please ensure:" -ForegroundColor Yellow
Write-Host " 1. Devour is installed via Steam" -ForegroundColor Yellow
Write-Host " 2. MelonLoader is installed in the game" -ForegroundColor Yellow
Write-Host ""
return $null
}
return $devourPath
}
function Update-CsprojDependencies {
param(
[string]$CsprojContent,
[string]$DevourPath
)
[xml]$xmlDoc = $CsprojContent
$itemGroup = $xmlDoc.Project.ItemGroup | Where-Object { $null -ne $_.Reference } | Select-Object -First 1
if (-not $itemGroup) {
$itemGroup = $xmlDoc.CreateElement("ItemGroup")
$xmlDoc.Project.AppendChild($itemGroup) | Out-Null
}
$addedCount = 0
$updatedCount = 0
foreach ($dep in $RequiredDependencies) {
$relativePart = $dep.RelativePath -replace '^steamapps\\common\\Devour\\', ''
$fullPath = Join-Path $DevourPath $relativePart
$existingRef = $itemGroup.Reference | Where-Object { $_.Include -eq $dep.Name } | Select-Object -First 1
if ($existingRef) {
$hintPathNode = $existingRef.SelectSingleNode("HintPath")
if (-not $hintPathNode) {
$hintPathNode = $xmlDoc.CreateElement("HintPath")
$existingRef.AppendChild($hintPathNode) | Out-Null
}
$hintPathNode.InnerText = $fullPath
$updatedCount++
} else {
$newRef = $xmlDoc.CreateElement("Reference")
$newRef.SetAttribute("Include", $dep.Name)
$hintPathNode = $xmlDoc.CreateElement("HintPath")
$hintPathNode.InnerText = $fullPath
$newRef.AppendChild($hintPathNode) | Out-Null
$itemGroup.AppendChild($newRef) | Out-Null
$addedCount++
}
}
$stringWriter = New-Object System.IO.StringWriter
$xmlWriter = New-Object System.Xml.XmlTextWriter($stringWriter)
$xmlWriter.Formatting = [System.Xml.Formatting]::Indented
$xmlWriter.Indentation = 2
$xmlDoc.WriteContentTo($xmlWriter)
$xmlWriter.Flush()
$updatedContent = $stringWriter.ToString()
return @{
Content = $updatedContent
Added = $addedCount
Updated = $updatedCount
}
}
try {
if (-not (Test-Path $CsprojPath)) {
Write-Host "Error: csproj file not found: $CsprojPath" -ForegroundColor Red
exit 1
}
$devourPath = Find-DevourPath
if (-not $devourPath) {
exit 1
}
Write-Host ""
Write-Host "Updating csproj file..." -ForegroundColor Yellow
$csprojContent = Get-Content $CsprojPath -Raw -Encoding UTF8
$originalContent = $csprojContent
$oldPathPattern = '[A-Z]:\\SteamLibrary\\steamapps\\common\\Devour'
$escapedNewPath = $devourPath -replace '\\', '\\'
$csprojContent = $csprojContent -replace $oldPathPattern, $escapedNewPath
$result = Update-CsprojDependencies -CsprojContent $csprojContent -DevourPath $devourPath
$updatedContent = $result.Content
if ($originalContent -eq $updatedContent -and $result.Added -eq 0 -and $result.Updated -eq 0) {
Write-Host "Note: No changes needed (all dependencies are up to date)" -ForegroundColor Yellow
} else {
$backupPath = "$CsprojPath.backup"
Copy-Item $CsprojPath $backupPath -Force
Write-Host "Backup created: $backupPath" -ForegroundColor Gray
$fullPath = (Resolve-Path $CsprojPath).Path
[System.IO.File]::WriteAllText($fullPath, $updatedContent, [System.Text.Encoding]::UTF8)
Write-Host "Successfully updated csproj file!" -ForegroundColor Green
if ($result.Added -gt 0) {
Write-Host "Added $($result.Added) new dependency reference(s)" -ForegroundColor Cyan
}
if ($result.Updated -gt 0) {
Write-Host "Updated $($result.Updated) existing dependency reference(s)" -ForegroundColor Cyan
}
}
Write-Host ""
Write-Host "========================================" -ForegroundColor Cyan
Write-Host "Update completed!" -ForegroundColor Green
Write-Host "Devour path: $devourPath" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
} catch {
Write-Host ""
Write-Host "Error: $($_.Exception.Message)" -ForegroundColor Red
Write-Host $_.ScriptStackTrace -ForegroundColor Red
exit 1
}

274
update_dependency.sh Normal file
View File

@@ -0,0 +1,274 @@
#!/bin/bash
# Bash script: Automatically update dependency paths in DevourClient.csproj (macOS)
# Function: Automatically find Devour installation path in Steam libraries and replace hardcoded paths in csproj file
CSPROJ_PATH="${1:-DevourClient/DevourClient.csproj}"
echo "========================================"
echo "DevourClient Dependency Path Update Script"
echo "========================================"
echo ""
DEVOUR_APP_ID="1274570"
find_steam_libraries() {
local steam_libraries=()
local default_steam_path="$HOME/Library/Application Support/Steam"
if [ -d "$default_steam_path" ]; then
steam_libraries+=("$default_steam_path")
fi
local library_folders_path="$default_steam_path/steamapps/libraryfolders.vdf"
if [ -f "$library_folders_path" ]; then
while IFS= read -r line; do
if [[ $line =~ \"path\"[[:space:]]+\"([^\"]+)\" ]]; then
local library_path="${BASH_REMATCH[1]}"
library_path="${library_path//\\\\/\/}"
if [ -d "$library_path" ]; then
steam_libraries+=("$library_path")
fi
fi
done < "$library_folders_path"
fi
printf '%s\n' "${steam_libraries[@]}" | sort -u
}
find_devour_path_from_manifest() {
local steam_library_path="$1"
local app_manifest_path="$steam_library_path/steamapps/appmanifest_${DEVOUR_APP_ID}.acf"
if [ -f "$app_manifest_path" ]; then
local install_dir=$(grep -o '"installdir"[[:space:]]*"[^"]*"' "$app_manifest_path" | sed 's/.*"\([^"]*\)".*/\1/')
if [ -n "$install_dir" ]; then
local devour_path="$steam_library_path/steamapps/common/$install_dir"
if [ -d "$devour_path" ]; then
echo "$devour_path"
return 0
fi
fi
fi
return 1
}
declare -A REQUIRED_DEPENDENCIES=(
["0Harmony"]="steamapps/common/Devour/MelonLoader/net6/0Harmony.dll"
["Assembly-CSharp"]="steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Assembly-CSharp.dll"
["Il2Cppbolt"]="steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Il2Cppbolt.dll"
["Il2Cppbolt.user"]="steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Il2Cppbolt.user.dll"
["Il2Cppcom.rlabrecque.steamworks.net"]="steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Il2Cppcom.rlabrecque.steamworks.net.dll"
["Il2CppInterop.Runtime"]="steamapps/common/Devour/MelonLoader/net6/Il2CppInterop.Runtime.dll"
["Il2Cppmscorlib"]="steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Il2Cppmscorlib.dll"
["Il2CppOpsive.UltimateCharacterController"]="steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Il2CppOpsive.UltimateCharacterController.dll"
["Il2Cppudpkit"]="steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Il2Cppudpkit.dll"
["Il2Cppudpkit.common"]="steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Il2Cppudpkit.common.dll"
["Il2Cppudpkit.platform.photon"]="steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Il2Cppudpkit.platform.photon.dll"
["MelonLoader"]="steamapps/common/Devour/MelonLoader/net6/MelonLoader.dll"
["Unity.TextMeshPro"]="steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Unity.TextMeshPro.dll"
["UnityEngine"]="steamapps/common/Devour/MelonLoader/Il2CppAssemblies/UnityEngine.dll"
["UnityEngine.AnimationModule"]="steamapps/common/Devour/MelonLoader/Il2CppAssemblies/UnityEngine.AnimationModule.dll"
["UnityEngine.CoreModule"]="steamapps/common/Devour/MelonLoader/Il2CppAssemblies/UnityEngine.CoreModule.dll"
["UnityEngine.IMGUIModule"]="steamapps/common/Devour/MelonLoader/Il2CppAssemblies/UnityEngine.IMGUIModule.dll"
["UnityEngine.InputLegacyModule"]="steamapps/common/Devour/MelonLoader/Il2CppAssemblies/UnityEngine.InputLegacyModule.dll"
["UnityEngine.PhysicsModule"]="steamapps/common/Devour/MelonLoader/Il2CppAssemblies/UnityEngine.PhysicsModule.dll"
["UnityEngine.TextRenderingModule"]="steamapps/common/Devour/MelonLoader/Il2CppAssemblies/UnityEngine.TextRenderingModule.dll"
["UnityEngine.UI"]="steamapps/common/Devour/MelonLoader/Il2CppAssemblies/UnityEngine.UI.dll"
["UnityEngine.UIModule"]="steamapps/common/Devour/MelonLoader/Il2CppAssemblies/UnityEngine.UIModule.dll"
)
find_devour_path() {
echo "Searching for Devour installation path..." >&2
local steam_libraries
steam_libraries=$(find_steam_libraries)
if [ -z "$steam_libraries" ]; then
echo "No Steam libraries found!" >&2
echo "Please check if Steam is installed." >&2
return 1
fi
local devour_path=""
while IFS= read -r library; do
[ -z "$library" ] && continue
local found_path=$(find_devour_path_from_manifest "$library")
if [ -n "$found_path" ]; then
local melon_loader_path="$found_path/MelonLoader"
if [ -d "$melon_loader_path" ]; then
devour_path="$found_path"
echo "Found Devour: $devour_path" >&2
echo "$devour_path"
return 0
fi
fi
done <<< "$steam_libraries"
while IFS= read -r library; do
[ -z "$library" ] && continue
local possible_path="$library/steamapps/common/Devour"
if [ -d "$possible_path" ]; then
local melon_loader_path="$possible_path/MelonLoader"
if [ -d "$melon_loader_path" ]; then
devour_path="$possible_path"
echo "Found Devour: $devour_path" >&2
echo "$devour_path"
return 0
fi
fi
done <<< "$steam_libraries"
echo "Devour installation path not found!" >&2
echo "Please ensure:" >&2
echo " 1. Devour is installed via Steam" >&2
echo " 2. MelonLoader is installed in the game" >&2
echo "" >&2
return 1
}
update_csproj_dependencies() {
local csproj_file="$1"
local devour_path="$2"
python3 << EOF
import xml.etree.ElementTree as ET
import sys
import os
required_deps = {
"0Harmony": "steamapps/common/Devour/MelonLoader/net6/0Harmony.dll",
"Assembly-CSharp": "steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Assembly-CSharp.dll",
"Il2Cppbolt": "steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Il2Cppbolt.dll",
"Il2Cppbolt.user": "steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Il2Cppbolt.user.dll",
"Il2Cppcom.rlabrecque.steamworks.net": "steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Il2Cppcom.rlabrecque.steamworks.net.dll",
"Il2CppInterop.Runtime": "steamapps/common/Devour/MelonLoader/net6/Il2CppInterop.Runtime.dll",
"Il2Cppmscorlib": "steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Il2Cppmscorlib.dll",
"Il2CppOpsive.UltimateCharacterController": "steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Il2CppOpsive.UltimateCharacterController.dll",
"Il2Cppudpkit": "steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Il2Cppudpkit.dll",
"Il2Cppudpkit.common": "steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Il2Cppudpkit.common.dll",
"Il2Cppudpkit.platform.photon": "steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Il2Cppudpkit.platform.photon.dll",
"MelonLoader": "steamapps/common/Devour/MelonLoader/net6/MelonLoader.dll",
"Unity.TextMeshPro": "steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Unity.TextMeshPro.dll",
"UnityEngine": "steamapps/common/Devour/MelonLoader/Il2CppAssemblies/UnityEngine.dll",
"UnityEngine.AnimationModule": "steamapps/common/Devour/MelonLoader/Il2CppAssemblies/UnityEngine.AnimationModule.dll",
"UnityEngine.CoreModule": "steamapps/common/Devour/MelonLoader/Il2CppAssemblies/UnityEngine.CoreModule.dll",
"UnityEngine.IMGUIModule": "steamapps/common/Devour/MelonLoader/Il2CppAssemblies/UnityEngine.IMGUIModule.dll",
"UnityEngine.InputLegacyModule": "steamapps/common/Devour/MelonLoader/Il2CppAssemblies/UnityEngine.InputLegacyModule.dll",
"UnityEngine.PhysicsModule": "steamapps/common/Devour/MelonLoader/Il2CppAssemblies/UnityEngine.PhysicsModule.dll",
"UnityEngine.TextRenderingModule": "steamapps/common/Devour/MelonLoader/Il2CppAssemblies/UnityEngine.TextRenderingModule.dll",
"UnityEngine.UI": "steamapps/common/Devour/MelonLoader/Il2CppAssemblies/UnityEngine.UI.dll",
"UnityEngine.UIModule": "steamapps/common/Devour/MelonLoader/Il2CppAssemblies/UnityEngine.UIModule.dll"
}
try:
tree = ET.parse("$csproj_file")
root = tree.getroot()
item_group = None
for ig in root.findall(".//ItemGroup"):
if ig.find("Reference") is not None:
item_group = ig
break
if item_group is None:
item_group = ET.SubElement(root, "ItemGroup")
added_count = 0
updated_count = 0
for dep_name, rel_path in required_deps.items():
relative_part = rel_path.replace("steamapps/common/Devour/", "")
full_path = os.path.join("$devour_path", relative_part)
existing_ref = None
for ref in item_group.findall("Reference"):
if ref.get("Include") == dep_name:
existing_ref = ref
break
if existing_ref is not None:
hint_path = existing_ref.find("HintPath")
if hint_path is None:
hint_path = ET.SubElement(existing_ref, "HintPath")
hint_path.text = full_path
updated_count += 1
else:
new_ref = ET.SubElement(item_group, "Reference")
new_ref.set("Include", dep_name)
hint_path = ET.SubElement(new_ref, "HintPath")
hint_path.text = full_path
added_count += 1
try:
ET.indent(tree, space=" ")
except AttributeError:
pass
tree.write("$csproj_file", encoding="utf-8", xml_declaration=True)
print(f"ADDED:{added_count}")
print(f"UPDATED:{updated_count}")
except Exception as e:
print(f"ERROR:{str(e)}", file=sys.stderr)
sys.exit(1)
EOF
}
if [ ! -f "$CSPROJ_PATH" ]; then
echo "Error: csproj file not found: $CSPROJ_PATH" >&2
exit 1
fi
DEVOUR_PATH=$(find_devour_path)
if [ $? -ne 0 ] || [ -z "$DEVOUR_PATH" ]; then
exit 1
fi
echo ""
echo "Updating csproj file..."
BACKUP_PATH="${CSPROJ_PATH}.backup"
cp "$CSPROJ_PATH" "$BACKUP_PATH"
echo "Backup created: $BACKUP_PATH"
sed -i '' "s|[A-Z]:\\\\SteamLibrary\\\\steamapps\\\\common\\\\Devour|$DEVOUR_PATH|g" "$CSPROJ_PATH" 2>/dev/null || \
sed -i "s|[A-Z]:\\\\SteamLibrary\\\\steamapps\\\\common\\\\Devour|$DEVOUR_PATH|g" "$CSPROJ_PATH"
RESULT=$(update_csproj_dependencies "$CSPROJ_PATH" "$DEVOUR_PATH")
if [ $? -ne 0 ]; then
echo "Error updating dependencies!" >&2
exit 1
fi
ADDED=$(echo "$RESULT" | grep "ADDED:" | cut -d: -f2)
UPDATED=$(echo "$RESULT" | grep "UPDATED:" | cut -d: -f2)
if [ -z "$ADDED" ]; then
ADDED=0
fi
if [ -z "$UPDATED" ]; then
UPDATED=0
fi
if [ "$ADDED" -eq 0 ] && [ "$UPDATED" -eq 0 ]; then
echo "Note: No changes needed (all dependencies are up to date)"
else
echo "Successfully updated csproj file!"
if [ "$ADDED" -gt 0 ]; then
echo "Added $ADDED new dependency reference(s)"
fi
if [ "$UPDATED" -gt 0 ]; then
echo "Updated $UPDATED existing dependency reference(s)"
fi
fi
echo ""
echo "========================================"
echo "Update completed!"
echo "Devour path: $DEVOUR_PATH"
echo "========================================"