version 4.8

new revive function
god mode
instant interaction
custom shortcut keys
This commit is contained in:
2026-01-15 21:53:32 +11:00
parent 62dc974fa7
commit 5f73135eaa
41 changed files with 2776 additions and 2383 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
@@ -12,4 +12,72 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<WarningLevel>0</WarningLevel>
</PropertyGroup>
<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

@@ -18,7 +18,7 @@ namespace DevourClient.ESP
Gasoline, // Gasoline
// Asylum (Molly) specific
RottonFood, // Rotten Food
RottenFood, // Rotten Food
Fuse, // Fuse
// Inn specific
@@ -61,7 +61,7 @@ namespace DevourClient.ESP
// Enemy ESP - Slaughterhouse
Corpse, // Corpse
Roar, // Roar
Boar, // Boar
Pig, // Pig
// Enemy ESP - Manor
@@ -99,7 +99,7 @@ namespace DevourClient.ESP
ESPType.FirstAid, // Common: First Aid
ESPType.Battery, // Common: Battery
ESPType.Keys, // Common: Keys
ESPType.RottonFood, // Specific: Rotten Food
ESPType.RottenFood, // Specific: Rotten Food
ESPType.Fuse, // Specific: Fuse
ESPType.Inmates, // Enemy: Inmates
ESPType.Rat // Enemy: Rat
@@ -140,7 +140,7 @@ namespace DevourClient.ESP
ESPType.Bone, // Specific: Bone
ESPType.Gasoline, // Specific: Gasoline
ESPType.Corpse, // Enemy: Corpse
ESPType.Roar, // Enemy: Roar
ESPType.Boar, // Enemy: Boar
ESPType.Pig // Enemy: Pig
}
},
@@ -202,7 +202,7 @@ namespace DevourClient.ESP
{ ESPType.Gasoline, false },
// Asylum specific
{ ESPType.RottonFood, false },
{ ESPType.RottenFood, false },
{ ESPType.Fuse, false },
// Inn specific
@@ -242,7 +242,7 @@ namespace DevourClient.ESP
// Enemy - Slaughterhouse
{ ESPType.Corpse, false },
{ ESPType.Roar, false },
{ ESPType.Boar, false },
{ ESPType.Pig, false },
// Enemy - Manor
@@ -315,8 +315,8 @@ namespace DevourClient.ESP
return "Gasoline ESP";
// Asylum specific
case ESPType.RottonFood:
return "Rotton Food ESP";
case ESPType.RottenFood:
return "Rotten Food ESP";
case ESPType.Fuse:
return "Fuse ESP";
@@ -375,8 +375,8 @@ namespace DevourClient.ESP
// Enemy - Slaughterhouse
case ESPType.Corpse:
return "Corpse ESP";
case ESPType.Roar:
return "Roar ESP";
case ESPType.Boar:
return "Boar ESP";
case ESPType.Pig:
return "Pig ESP";
@@ -439,10 +439,10 @@ namespace DevourClient.ESP
return ESPType.Gasoline;
// Asylum specific
case "rottonfoodpickup":
case "rotton food":
case "rottonfood":
return ESPType.RottonFood;
case "rottenfoodpickup":
case "rotten food":
case "rottenfood":
return ESPType.RottenFood;
case "fusepickup":
case "fuse":
@@ -534,13 +534,12 @@ namespace DevourClient.ESP
case "corpsebehaviour":
return ESPType.Corpse;
case "roar":
case "roarbehaviour":
return ESPType.Roar;
case "pig":
case "boar":
case "boarbehaviour":
return ESPType.Boar;
case "pig":
case "pigbehaviour":
return ESPType.Pig;
@@ -623,7 +622,7 @@ namespace DevourClient.ESP
GetESPState(ESPType.Keys) ||
GetESPState(ESPType.Hay) ||
GetESPState(ESPType.Gasoline) ||
GetESPState(ESPType.RottonFood) ||
GetESPState(ESPType.RottenFood) ||
GetESPState(ESPType.Fuse) ||
GetESPState(ESPType.Bleach) ||
GetESPState(ESPType.Egg) ||
@@ -652,7 +651,7 @@ namespace DevourClient.ESP
GetESPState(ESPType.Spider) ||
GetESPState(ESPType.Ghost) ||
GetESPState(ESPType.Corpse) ||
GetESPState(ESPType.Roar) ||
GetESPState(ESPType.Boar) ||
GetESPState(ESPType.Pig) ||
GetESPState(ESPType.Crow) ||
GetESPState(ESPType.DirtyHead) ||

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}");
}
}
}
}

View File

@@ -1,4 +1,4 @@
using UnityEngine;
using UnityEngine;
using MelonLoader;
using UnityEngine.UI;
using System.Reflection;
@@ -47,14 +47,14 @@ namespace DevourClient.Hacks
public static void WalkInLobby(bool walk)
{
GameObject LocalPlayer = Helpers.Entities.LocalPlayer_.p_GameObject;
GameObject? LocalPlayer = Helpers.Entities.LocalPlayer_.p_GameObject;
if (LocalPlayer == null)
{
return;
}
//GetComponent called only once as AddComponent returns a component
UltimateCharacterLocomotionHandler cmp = Helpers.Entities.LocalPlayer_.p_GameObject.GetComponent<UltimateCharacterLocomotionHandler>();
UltimateCharacterLocomotionHandler? cmp = LocalPlayer.GetComponent<UltimateCharacterLocomotionHandler>();
if (cmp == null)
{
@@ -143,7 +143,7 @@ namespace DevourClient.Hacks
return;
}
GameObject _localPlayer = Helpers.Entities.LocalPlayer_.p_GameObject;
GameObject? _localPlayer = Helpers.Entities.LocalPlayer_.p_GameObject;
if (_localPlayer != null)
{
@@ -174,7 +174,17 @@ namespace DevourClient.Hacks
public static void CarryObject(string name)
{
Il2Cpp.NolanBehaviour nb = Helpers.Entities.LocalPlayer_.p_GameObject.GetComponent<Il2Cpp.NolanBehaviour>();
GameObject? localPlayerGameObject = Helpers.Entities.LocalPlayer_.p_GameObject;
if (localPlayerGameObject == null)
{
return;
}
Il2Cpp.NolanBehaviour? nb = localPlayerGameObject.GetComponent<Il2Cpp.NolanBehaviour>();
if (nb == null)
{
return;
}
nb.StartCarry(name);
}
@@ -203,12 +213,24 @@ namespace DevourClient.Hacks
}
public static void TPItems()
{
Il2Cpp.NolanBehaviour Nolan = Player.GetPlayer();
foreach (Il2Cpp.SurvivalInteractable item in Helpers.Entities.SurvivalInteractables)
Il2Cpp.NolanBehaviour? Nolan = Player.GetPlayer();
if (Nolan == null)
{
return;
}
if (Helpers.Entities.SurvivalInteractables != null)
{
foreach (Il2Cpp.SurvivalInteractable? item in Helpers.Entities.SurvivalInteractables)
{
if (item == null || item.transform == null)
{
continue;
}
item.transform.position = Nolan.transform.position + Nolan.transform.forward * UnityEngine.Random.RandomRange(1f, 3f);
}
}
}
public static void CreateCustomizedLobby(int lobbySize = 4, bool isPrivate = false, Il2CppUdpKit.Platform.Photon.PhotonRegion.Regions __region = Il2CppUdpKit.Platform.Photon.PhotonRegion.Regions.BEST_REGION)
@@ -298,7 +320,11 @@ namespace DevourClient.Hacks
public static void Fullbright(bool reset)
{
Il2Cpp.NolanBehaviour Nolan = Player.GetPlayer();
Il2Cpp.NolanBehaviour? Nolan = Player.GetPlayer();
if (Nolan == null)
{
return;
}
if (Nolan == null)
{
return;
@@ -330,7 +356,11 @@ namespace DevourClient.Hacks
}
public static void FlashlightColor(Color color)
{
Il2Cpp.NolanBehaviour Nolan = Player.GetPlayer();
Il2Cpp.NolanBehaviour? Nolan = Player.GetPlayer();
if (Nolan == null)
{
return;
}
Light flashlightSpot = Nolan.flashlightSpot;
flashlightSpot.color = color;
@@ -339,7 +369,11 @@ namespace DevourClient.Hacks
public static void TPKeys()
{
//TOFIX: spawn manually the missing key in slaughterhouse
Il2Cpp.NolanBehaviour Nolan = Player.GetPlayer();
Il2Cpp.NolanBehaviour? Nolan = Player.GetPlayer();
if (Nolan == null)
{
return;
}
foreach (Il2Cpp.KeyBehaviour keyBehaviour in Helpers.Entities.Keys)
{
@@ -353,7 +387,7 @@ namespace DevourClient.Hacks
public static void SetRank(int rank)
{
Il2Cpp.NolanRankController NolanRank = UnityEngine.Object.FindObjectOfType<Il2Cpp.NolanRankController>();
Il2Cpp.NolanRankController? NolanRank = UnityEngine.Object.FindObjectOfType<Il2Cpp.NolanRankController>();
if (NolanRank == null)
{
return;
@@ -363,6 +397,8 @@ namespace DevourClient.Hacks
public static void DespawnDemons()
{
if (Helpers.Entities.Demons != null)
{
foreach (Il2Cpp.SurvivalDemonBehaviour demon in Helpers.Entities.Demons)
{
@@ -372,10 +408,13 @@ namespace DevourClient.Hacks
}
}
}
}
public static void DespawnSpiders()
{
foreach (Il2Cpp.SpiderBehaviour spider in Helpers.Entities.Spiders)
if (Helpers.Entities.Spiders != null)
{
foreach (Il2Cpp.SpiderBehaviour? spider in Helpers.Entities.Spiders)
{
if (spider != null)
{
@@ -383,8 +422,11 @@ namespace DevourClient.Hacks
}
}
}
}
public static void DespawnGhosts()
{
if (Helpers.Entities.Ghosts != null)
{
foreach (Il2Cpp.GhostBehaviour ghost in Helpers.Entities.Ghosts)
{
@@ -394,8 +436,11 @@ namespace DevourClient.Hacks
}
}
}
}
public static void DespawnBoars()
{
if (Helpers.Entities.Boars != null)
{
foreach (Il2Cpp.BoarBehaviour boar in Helpers.Entities.Boars)
{
@@ -405,8 +450,11 @@ namespace DevourClient.Hacks
}
}
}
}
public static void DespawnCorpses()
{
if (Helpers.Entities.Corpses != null)
{
foreach (Il2Cpp.CorpseBehaviour corpse in Helpers.Entities.Corpses)
{
@@ -416,10 +464,13 @@ namespace DevourClient.Hacks
}
}
}
}
public static void DespawnCrows()
{
foreach (Il2Cpp.CrowBehaviour crow in Helpers.Entities.Crows)
if (Helpers.Entities.Crows != null)
{
foreach (Il2Cpp.CrowBehaviour? crow in Helpers.Entities.Crows)
{
if (crow != null)
{
@@ -427,8 +478,11 @@ namespace DevourClient.Hacks
}
}
}
}
public static void DespawnLumps()
{
if (Helpers.Entities.Lumps != null)
{
foreach (Il2Cpp.ManorLumpController lump in Helpers.Entities.Lumps)
{
@@ -437,6 +491,7 @@ namespace DevourClient.Hacks
lump.Dissolve();
}
}
}
}
public static void DespawnMonkeys()
@@ -504,6 +559,11 @@ namespace DevourClient.Hacks
}
}
public static void InstantInteractTick(bool enabled)
{
return;
}
public static void FreezeAzazel()
{
if (Helpers.Map.GetActiveScene() == "Menu")

View File

@@ -9,12 +9,12 @@ namespace DevourClient.Helpers
private static float G;
private static float B;
private static Texture2D previewTexture = null;
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;
private static GUIStyle? cachedBoxStyle = null;
public static Color ColorPick(string title, Color color)
{
@@ -59,7 +59,7 @@ namespace DevourClient.Helpers
public static Texture2D MakeTex(int width, int height, Color col)
{
if (colorTextureCache.TryGetValue(col, out Texture2D cachedTexture))
if (colorTextureCache.TryGetValue(col, out Texture2D? cachedTexture))
{
if (cachedTexture != null)
{
@@ -85,7 +85,7 @@ namespace DevourClient.Helpers
{
int cacheKey = width;
if (circularTextureCache.TryGetValue(cacheKey, out Texture2D cachedTexture))
if (circularTextureCache.TryGetValue(cacheKey, out Texture2D? cachedTexture))
{
if (cachedTexture != null)
{

View File

@@ -1,4 +1,4 @@
namespace DevourClient.Helpers
namespace DevourClient.Helpers
{
class Map
{
@@ -31,8 +31,16 @@
}
}
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;
}

View File

@@ -2,6 +2,9 @@ using System;
using DevourClient.Network;
using MelonLoader;
using UnityEngine;
using Il2CppPhoton.Bolt;
using Il2Cpp;
using Il2CppOpsive.UltimateCharacterController.Character;
namespace DevourClient.Helpers
{
@@ -19,10 +22,20 @@ namespace DevourClient.Helpers
return false;
}
if (NetworkHelper.IsHost() && Player.IsInGame())
{
if (TryHostRevive(target))
{
return true;
}
}
else
{
if (TryClientRevive(target))
{
return true;
}
}
return TryInteractRevive(target);
}
@@ -41,16 +54,70 @@ namespace DevourClient.Helpers
try
{
Il2Cpp.SurvivalReviveInteractable interactable = UnityEngine.Object.FindObjectOfType<Il2Cpp.SurvivalReviveInteractable>();
if (interactable == null)
var reviverEntity = GetLocalPlayerEntity();
if (reviverEntity == null)
{
target.TeleportTo(HostFallbackPosition, Quaternion.identity);
MelonLogger.Msg("[ReviveHelper] Host fallback teleport executed (no interactable found).");
return true;
return false;
}
interactable.Interact(target.gameObject);
MelonLogger.Msg("[ReviveHelper] Host revive interactable triggered.");
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)
@@ -60,6 +127,32 @@ namespace DevourClient.Helpers
}
}
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
@@ -84,21 +177,54 @@ namespace DevourClient.Helpers
return false;
}
// Legacy revive method migrated from StateHelper.BasePlayer.Revive().
// This method preserves the original implementation from StateHelper.
// targetGameObject: The GameObject of the player to revive.
public static void ReviveLegacy(GameObject targetGameObject)
private static BoltEntity? GetLocalPlayerEntity()
{
if (targetGameObject == null)
var players = GameObject.FindGameObjectsWithTag("Player");
for (int i = 0; i < players.Length; i++)
{
return;
var nb = players[i].GetComponent<Il2Cpp.NolanBehaviour>();
if (nb != null && nb.entity != null && nb.entity.IsAttached && nb.entity.IsOwner)
{
return nb.entity;
}
}
return null;
}
Il2Cpp.NolanBehaviour nb = targetGameObject.GetComponent<Il2Cpp.NolanBehaviour>();
Il2Cpp.SurvivalReviveInteractable _reviveInteractable = UnityEngine.Object.FindObjectOfType<Il2Cpp.SurvivalReviveInteractable>();
if (_reviveInteractable.CanInteract(nb.gameObject) == true) { _reviveInteractable.Interact(nb.gameObject); }
}
}
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

@@ -9,7 +9,7 @@ namespace DevourClient.Helpers
{
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 Id { get; set; } = default!;
@@ -165,22 +165,22 @@ namespace DevourClient.Helpers
public static int MAX_PLAYERS = 4; //will change by calling CreateCustomizedLobby
public static BasePlayer LocalPlayer_ = new BasePlayer();
public static BasePlayer[] Players = default!;
public static Il2Cpp.GoatBehaviour[] GoatsAndRats = default!;
public static Il2Cpp.SurvivalInteractable[] SurvivalInteractables = default!;
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 static Il2Cpp.BoarBehaviour[] Boars = default!;
public static Il2Cpp.CorpseBehaviour[] Corpses = default!;
public static Il2Cpp.CrowBehaviour[] Crows = default!;
public static Il2Cpp.ManorLumpController[] Lumps = default!;
public static Il2Cpp.GoatBehaviour[] DirtyHeads = default!;
public static Il2Cpp.MonkeyBehaviour[] Monkeys = default!;
public static Il2Cpp.GoatBehaviour[] Dolls = default!;
public static Il2Cpp.CollectableInteractable[] Collectables = default!;
public static BasePlayer[]? Players = default!;
public static Il2Cpp.GoatBehaviour[]? GoatsAndRats = default!;
public static Il2Cpp.SurvivalInteractable[]? SurvivalInteractables = default!;
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 static Il2Cpp.BoarBehaviour[]? Boars = default!;
public static Il2Cpp.CorpseBehaviour[]? Corpses = default!;
public static Il2Cpp.CrowBehaviour[]? Crows = default!;
public static Il2Cpp.ManorLumpController[]? Lumps = default!;
public static Il2Cpp.GoatBehaviour[]? DirtyHeads = default!;
public static Il2Cpp.MonkeyBehaviour[]? Monkeys = default!;
public static Il2Cpp.GoatBehaviour[]? Dolls = default!;
public static Il2Cpp.CollectableInteractable[]? Collectables = default!;
// Coroutine lifecycle management
private static List<object> activeCoroutines = new List<object>();

View File

@@ -1,5 +1,7 @@
using HarmonyLib;
using HarmonyLib;
using Il2Cpp;
using UnityEngine;
using System;
namespace DevourClient.Hooks
{
@@ -19,6 +21,8 @@ namespace DevourClient.Hooks
}
}
[HarmonyPatch(typeof(Il2Cpp.RankHelpers))]
[HarmonyPatch(nameof(Il2Cpp.RankHelpers.CalculateExpGain))] //annotation boiler plate to tell Harmony what to patch. Refer to docs.
static class RankHelpers_CalculateExpGain
@@ -128,5 +132,20 @@ namespace DevourClient.Hooks
__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

@@ -108,8 +108,8 @@ namespace DevourClient.Localization
// 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)
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>
{

View File

@@ -195,6 +195,7 @@ namespace DevourClient.Localization.Translations
{ "Ping", "延迟" },
{ "Play Random Sound", "播放随机音效" },
{ "Player", "玩家" },
{ "Instant Interaction", "立即交互" },
{ "Player Count", "玩家数" },
{ "Player ESP", "玩家透视" },
{ "Player ESP Color", "玩家透视颜色" },
@@ -207,17 +208,17 @@ namespace DevourClient.Localization.Translations
{ "Rat ESP", "老鼠透视" },
{ "Region", "区域" },
{ "Revive", "复活" },
{ "Radial Menu (Z)", "轮盘菜单 (Z)" },
{ "Radial Menu", "轮盘菜单" },
{ "Ritual Book", "仪式书" },
{ "Rose", "玫瑰" },
{ "Ritual Book ESP", "仪式书透视" },
{ "Ritual Object ESP", "仪式物品透视" },
{ "Ritual Objects", "仪式物品" },
{ "RitualBook", "仪式书" },
{ "Roar ESP", "咆哮者透视" },
{ "Boar ESP", "野猪透视" },
{ "Role", "角色" },
{ "RottenFood", "腐烂食物" },
{ "Rotton Food ESP", "腐烂食物透视" },
{ "Rotten Food ESP", "腐烂食物透视" },
{ "Sam", "萨姆" },
{ "Shoot Player", "射击玩家" },
{ "Show Coordinates", "显示坐标" },
@@ -274,10 +275,22 @@ namespace DevourClient.Localization.Translations
{ "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

@@ -195,6 +195,7 @@ namespace DevourClient.Localization.Translations
{ "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" },
@@ -207,17 +208,17 @@ namespace DevourClient.Localization.Translations
{ "Rat ESP", "Rat ESP" },
{ "Region", "Region" },
{ "Revive", "Revive" },
{ "Radial Menu (Z)", "Radial Menu (Z)" },
{ "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" },
{ "Roar ESP", "Roar ESP" },
{ "Boar ESP", "Boar ESP" },
{ "Role", "Role" },
{ "RottenFood", "RottenFood" },
{ "Rotton Food ESP", "Rotton Food ESP" },
{ "Rotten Food ESP", "Rotten Food ESP" },
{ "Sam", "Sam" },
{ "Shoot Player", "Shoot Player" },
{ "Show Coordinates", "Show Coordinates" },
@@ -274,10 +275,22 @@ namespace DevourClient.Localization.Translations
{ "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

@@ -195,6 +195,7 @@ namespace DevourClient.Localization.Translations
{ "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" },
@@ -207,17 +208,17 @@ namespace DevourClient.Localization.Translations
{ "Rat ESP", "ESP rat" },
{ "Region", "Région" },
{ "Revive", "Réanimer" },
{ "Radial Menu (Z)", "Menu radial (Z)" },
{ "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" },
{ "Roar ESP", "ESP rugissement" },
{ "Boar ESP", "ESP Sanglier" },
{ "Role", "Rôle" },
{ "RottenFood", "Nourriture pourrie" },
{ "Rotton Food ESP", "ESP nourriture pourrie" },
{ "Rotten Food ESP", "ESP Nourriture Pourrie" },
{ "Sam", "Sam" },
{ "Shoot Player", "Tirer sur le joueur" },
{ "Show Coordinates", "Afficher coordonnées" },
@@ -271,13 +272,25 @@ namespace DevourClient.Localization.Translations
{ "US South Central", "Centre-Sud des États-Unis" },
{ "US West", "Ouest des États-Unis" },
{ "Unlimited Stamina", "Endurance illimitée" },
{ "Unlimited UV Light", "UV 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émarrage" },
{ "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

@@ -195,6 +195,7 @@ namespace DevourClient.Localization.Translations
{ "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" },
@@ -207,17 +208,17 @@ namespace DevourClient.Localization.Translations
{ "Rat ESP", "Ratte-ESP" },
{ "Region", "Region" },
{ "Revive", "Wiederbeleben" },
{ "Radial Menu (Z)", "Radiales Menü (Z)" },
{ "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" },
{ "Roar ESP", "Brüllen-ESP" },
{ "Boar ESP", "Wildschwein-ESP" },
{ "Role", "Rolle" },
{ "RottenFood", "Verdorbenes Essen" },
{ "Rotton Food ESP", "Verdorbenes-Essen-ESP" },
{ "Rotten Food ESP", "Verrottetes Essen ESP" },
{ "Sam", "Sam" },
{ "Shoot Player", "Spieler erschießen" },
{ "Show Coordinates", "Koordinaten anzeigen" },
@@ -270,14 +271,26 @@ namespace DevourClient.Localization.Translations
{ "US East", "USA Ost" },
{ "US South Central", "USA Süd-Zentral" },
{ "US West", "USA West" },
{ "Unlimited Stamina", "Unbegrenzte Ausdauer" },
{ "Unlimited UV Light", "Unbegrenzte UV" },
{ "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

@@ -195,6 +195,7 @@ namespace DevourClient.Localization.Translations
{ "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" },
@@ -207,17 +208,17 @@ namespace DevourClient.Localization.Translations
{ "Rat ESP", "ESP ratto" },
{ "Region", "Regione" },
{ "Revive", "Rianima" },
{ "Radial Menu (Z)", "Menu radiale (Z)" },
{ "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" },
{ "Roar ESP", "ESP ruggito" },
{ "Boar ESP", "ESP Cinghiale" },
{ "Role", "Ruolo" },
{ "RottenFood", "Cibo marcio" },
{ "Rotton Food ESP", "ESP cibo marcio" },
{ "Rotten Food ESP", "ESP Cibo Avariato" },
{ "Sam", "Sam" },
{ "Shoot Player", "Spara al giocatore" },
{ "Show Coordinates", "Mostra coordinate" },
@@ -271,13 +272,25 @@ namespace DevourClient.Localization.Translations
{ "US South Central", "Centro-Sud USA" },
{ "US West", "Ovest USA" },
{ "Unlimited Stamina", "Resistenza illimitata" },
{ "Unlimited UV Light", "UV illimitata" },
{ "Unlimited UV Light", "UV illimitato" },
{ "Unlock Achievements", "Sblocca obiettivi" },
{ "Unlock Doors", "Sblocca porte" },
{ "Visuals", "Visivi" },
{ "Waiting for the game to start", "In attesa dell'inizio del gioco" },
{ "Walk In Lobby", "Camminare in lobby" },
{ "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

@@ -195,6 +195,7 @@ namespace DevourClient.Localization.Translations
{ "Ping", "Ping" },
{ "Play Random Sound", "ランダム音再生" },
{ "Player", "プレイヤー" },
{ "Instant Interaction", "即時インタラクション" },
{ "Player Count", "プレイヤー数" },
{ "Player ESP", "プレイヤーESP" },
{ "Player ESP Color", "プレイヤーESP色" },
@@ -207,17 +208,17 @@ namespace DevourClient.Localization.Translations
{ "Rat ESP", "ネズミESP" },
{ "Region", "地域" },
{ "Revive", "蘇生" },
{ "Radial Menu (Z)", "ラジアルメニュー (Z)" },
{ "Radial Menu", "ラジアルメニュー" },
{ "Ritual Book", "儀式の本" },
{ "Rose", "バラ" },
{ "Ritual Book ESP", "儀式の本ESP" },
{ "Ritual Object ESP", "儀式オブジェクトESP" },
{ "Ritual Objects", "儀式の品" },
{ "RitualBook", "儀式の本" },
{ "Roar ESP", "咆哮ESP" },
{ "Boar ESP", "イノシシESP" },
{ "Role", "役割" },
{ "RottenFood", "腐った食べ物" },
{ "Rotton Food ESP", "腐った食べ物ESP" },
{ "Rotten Food ESP", "腐った食べ物ESP" },
{ "Sam", "サム" },
{ "Shoot Player", "プレイヤーを撃つ" },
{ "Show Coordinates", "座標を表示" },
@@ -271,13 +272,25 @@ namespace DevourClient.Localization.Translations
{ "US South Central", "米国中南部" },
{ "US West", "米国西部" },
{ "Unlimited Stamina", "無限スタミナ" },
{ "Unlimited UV Light", "無限UV" },
{ "Unlock Achievements", "実績解除" },
{ "Unlock Doors", "ドアを開ける" },
{ "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

@@ -195,6 +195,7 @@ namespace DevourClient.Localization.Translations
{ "Ping", "핑" },
{ "Play Random Sound", "랜덤 사운드 재생" },
{ "Player", "플레이어" },
{ "Instant Interaction", "즉시 상호작용" },
{ "Player Count", "플레이어 수" },
{ "Player ESP", "플레이어 ESP" },
{ "Player ESP Color", "플레이어 ESP 색상" },
@@ -207,17 +208,17 @@ namespace DevourClient.Localization.Translations
{ "Rat ESP", "쥐 ESP" },
{ "Region", "지역" },
{ "Revive", "부활" },
{ "Radial Menu (Z)", "방사형 메뉴 (Z)" },
{ "Radial Menu", "방사형 메뉴" },
{ "Ritual Book", "의식서" },
{ "Rose", "장미" },
{ "Ritual Book ESP", "의식서 ESP" },
{ "Ritual Object ESP", "의식 물체 ESP" },
{ "Ritual Objects", "의식 물품" },
{ "RitualBook", "의식서" },
{ "Roar ESP", "으르렁 ESP" },
{ "Boar ESP", "멧돼지 ESP" },
{ "Role", "역할" },
{ "RottenFood", "썩은 음식" },
{ "Rotton Food ESP", "썩은 음식 ESP" },
{ "Rotten Food ESP", "썩은 음식 ESP" },
{ "Sam", "샘" },
{ "Shoot Player", "플레이어 쏘기" },
{ "Show Coordinates", "좌표 표시" },
@@ -274,10 +275,22 @@ namespace DevourClient.Localization.Translations
{ "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

@@ -195,6 +195,7 @@ namespace DevourClient.Localization.Translations
{ "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" },
@@ -207,17 +208,17 @@ namespace DevourClient.Localization.Translations
{ "Rat ESP", "ESP rato" },
{ "Region", "Região" },
{ "Revive", "Reviver" },
{ "Radial Menu (Z)", "Menu radial (Z)" },
{ "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" },
{ "Roar ESP", "ESP rugido" },
{ "Boar ESP", "ESP Javali" },
{ "Role", "Função" },
{ "RottenFood", "Comida podre" },
{ "Rotton Food ESP", "ESP comida podre" },
{ "Rotten Food ESP", "ESP comida podre" },
{ "Sam", "Sam" },
{ "Shoot Player", "Atirar no jogador" },
{ "Show Coordinates", "Mostrar coordenadas" },
@@ -271,13 +272,25 @@ namespace DevourClient.Localization.Translations
{ "US South Central", "Centro-Sul dos EUA" },
{ "US West", "Oeste dos EUA" },
{ "Unlimited Stamina", "Resistência ilimitada" },
{ "Unlimited UV Light", "UV 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

@@ -195,6 +195,7 @@ namespace DevourClient.Localization.Translations
{ "Ping", "Пинг" },
{ "Play Random Sound", "Воспроизвести случайный звук" },
{ "Player", "Игрок" },
{ "Instant Interaction", "Мгновенное взаимодействие" },
{ "Player Count", "Количество игроков" },
{ "Player ESP", "ESP игрока" },
{ "Player ESP Color", "Цвет ESP игрока" },
@@ -207,17 +208,17 @@ namespace DevourClient.Localization.Translations
{ "Rat ESP", "ESP крысы" },
{ "Region", "Регион" },
{ "Revive", "Воскресить" },
{ "Radial Menu (Z)", "Радиальное меню (Z)" },
{ "Radial Menu", "Радиальное меню" },
{ "Ritual Book", "Ритуальная книга" },
{ "Rose", "Роза" },
{ "Ritual Book ESP", "ESP ритуальной книги" },
{ "Ritual Object ESP", "ESP ритуального предмета" },
{ "Ritual Objects", "Ритуальные предметы" },
{ "RitualBook", "Ритуальная книга" },
{ "Roar ESP", "ESP рёва" },
{ "Boar ESP", "ESP Кабана" },
{ "Role", "Роль" },
{ "RottenFood", "Гнилая еда" },
{ "Rotton Food ESP", "ESP гнилой еды" },
{ "Rotten Food ESP", "ESP Гнилая Еда" },
{ "Sam", "Сэм" },
{ "Shoot Player", "Стрелять в игрока" },
{ "Show Coordinates", "Показать координаты" },
@@ -271,13 +272,25 @@ namespace DevourClient.Localization.Translations
{ "US South Central", "Юго-Центральная часть США" },
{ "US West", "Запад США" },
{ "Unlimited Stamina", "Безлимитная выносливость" },
{ "Unlimited UV Light", "Безлимитный УФ" },
{ "Unlimited UV Light", "Неограниченный УФ" },
{ "Unlock Achievements", "Разблокировать достижения" },
{ "Unlock Doors", "Открыть двери" },
{ "Visuals", "Визуалы" },
{ "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

@@ -195,6 +195,7 @@ namespace DevourClient.Localization.Translations
{ "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" },
@@ -207,17 +208,17 @@ namespace DevourClient.Localization.Translations
{ "Rat ESP", "ESP rata" },
{ "Region", "Región" },
{ "Revive", "Revivir" },
{ "Radial Menu (Z)", "Menú radial (Z)" },
{ "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" },
{ "Roar ESP", "ESP rugido" },
{ "Boar ESP", "ESP Jabalí" },
{ "Role", "Rol" },
{ "RottenFood", "Comida podrida" },
{ "Rotton Food ESP", "ESP comida podrida" },
{ "Rotten Food ESP", "ESP Comida Podrida" },
{ "Sam", "Sam" },
{ "Shoot Player", "Disparar al jugador" },
{ "Show Coordinates", "Mostrar coordenadas" },
@@ -271,13 +272,25 @@ namespace DevourClient.Localization.Translations
{ "US South Central", "Centro-Sur de EE.UU." },
{ "US West", "Oeste de EE.UU." },
{ "Unlimited Stamina", "Resistencia ilimitada" },
{ "Unlimited UV Light", "UV 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 inicio del juego" },
{ "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

@@ -195,6 +195,7 @@ namespace DevourClient.Localization.Translations
{ "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" },
@@ -207,17 +208,17 @@ namespace DevourClient.Localization.Translations
{ "Rat ESP", "Chuột ESP" },
{ "Region", "Khu vực" },
{ "Revive", "Hồi sinh" },
{ "Radial Menu (Z)", "Menu vòng tròn (Z)" },
{ "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" },
{ "Roar ESP", "Tiếng gầm ESP" },
{ "Boar ESP", "Lợn rừng ESP" },
{ "Role", "Vai trò" },
{ "RottenFood", "RottenFood" },
{ "Rotton Food ESP", "Thức ăn thối ESP" },
{ "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 độ" },
@@ -271,13 +272,25 @@ namespace DevourClient.Localization.Translations
{ "US South Central", "US Nam Trung" },
{ "US West", "US Tây" },
{ "Unlimited Stamina", "Thể lực vô hạn" },
{ "Unlimited UV Light", "Ánh sáng UV 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ờ game bắt đầu" },
{ "Walk In Lobby", "Đi bộ trong phòng chờ" },
{ "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" },
};
}
}

View File

@@ -1,4 +1,4 @@
/*
/*
Note about license. As stated in the GPL FAQ :
You are allowed to sell copies of the modified program commercially, but only under the terms of the GNU GPL.
Thus, for instance, you must make the source code available to the users of the program as described in the GPL,
@@ -9,6 +9,8 @@ If you decide to modify and then sell this software you have to agree with the G
using UnityEngine;
using Il2CppInterop.Runtime.Injection;
using HarmonyLib;
using System.Reflection;
[assembly: MelonLoader.VerifyLoaderVersion(0, 6, 0, true)] //Minimum MelonLoader version is V6.0.0, sanity check for people who use 5.7 and wonder why it crashes :)
[assembly: MelonLoader.MelonInfo(typeof(DevourClient.Load), "DevourClient", "2", "ALittlePatate & Jadis0x")]
@@ -34,6 +36,25 @@ namespace DevourClient
public override void OnInitializeMelon()
{
Init();
try
{
var harmony = new HarmonyLib.Harmony("DevourClient.Hooks");
harmony.PatchAll(Assembly.GetExecutingAssembly());
MelonLoader.MelonLogger.Msg("Harmony patches applied.");
}
catch (System.Exception ex)
{
MelonLoader.MelonLogger.Error($"Failed to apply Harmony patches: {ex.Message}");
}
}
public override void OnSceneWasLoaded(int buildIndex, string sceneName)
{
if (sceneName == "Menu" && ClientMain.godMode)
{
ClientMain.godMode = false;
ClientMain.godModeOriginalLayer = -1;
MelonLoader.MelonLogger.Msg("God Mode disabled on return to menu.");
}
}
}
}

View File

@@ -28,7 +28,7 @@ namespace DevourClient.Network
}
// Get PhotonRegion
PhotonRegion region = GetPhotonRegion(regionCode);
PhotonRegion? region = GetPhotonRegion(regionCode);
if (region == null)
{
MelonLogger.Error($"[LobbyManager] Failed to find region: {regionCode}");
@@ -36,7 +36,7 @@ namespace DevourClient.Network
}
// Find Menu controller
Il2CppHorror.Menu menu = FindMenuController();
Il2CppHorror.Menu? menu = FindMenuController();
if (menu == null)
{
MelonLogger.Error("[LobbyManager] Failed to find MenuController");
@@ -92,7 +92,7 @@ namespace DevourClient.Network
}
}
private static PhotonRegion GetPhotonRegion(string regionCode)
private static PhotonRegion? GetPhotonRegion(string regionCode)
{
try
{
@@ -106,7 +106,7 @@ namespace DevourClient.Network
}
}
private static Il2CppHorror.Menu FindMenuController()
private static Il2CppHorror.Menu? FindMenuController()
{
try
{
@@ -156,7 +156,7 @@ namespace DevourClient.Network
return;
}
Il2CppHorror.Menu menu = FindMenuController();
Il2CppHorror.Menu? menu = FindMenuController();
if (menu == null)
{
MelonLogger.Error("[LobbyManager] Failed to find MenuController");
@@ -177,7 +177,7 @@ namespace DevourClient.Network
{
try
{
Il2CppHorror.Menu menu = FindMenuController();
Il2CppHorror.Menu? menu = FindMenuController();
if (menu != null)
{
menu.ShowMessageModal(message);

View File

@@ -62,7 +62,7 @@ namespace DevourClient.Network
// Get display name by region code (multilanguage support)
public static string GetDisplayNameByCode(string code)
{
if (AvailableRegions.TryGetValue(code, out string englishName))
if (AvailableRegions.TryGetValue(code, out string? englishName))
{
// Use MultiLanguageSystem to translate region names
return MultiLanguageSystem.Translate(englishName);

View File

@@ -21,7 +21,7 @@ namespace DevourClient
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;
private static Material? _radialMaterial;
// Public property to enable/disable the radial menu
public static bool Enabled
@@ -51,12 +51,13 @@ namespace DevourClient
if (!_enabled || !Player.IsInGameOrLobby())
return;
if (Input.GetKeyDown(KeyCode.Z))
KeyCode key = Settings.Settings.radialMenuKey;
if (key != KeyCode.None && Input.GetKeyDown(key))
{
BuildForCurrentScene();
}
if (Input.GetKeyUp(KeyCode.Z) && _active)
if (key != KeyCode.None && Input.GetKeyUp(key) && _active)
{
if (_selectedIndex >= 0 && _selectedIndex < _options.Count)
{

View File

@@ -14,8 +14,10 @@ namespace DevourClient.Settings
public static Color player_esp_color = new Color(0.00f, 1.00f, 0.00f, 1);
public static Color azazel_esp_color = new Color(1.00f, 0.00f, 0.00f, 1);
public static float speed = 1f;
public static KeyCode menuToggleKey = KeyCode.Insert;
public static KeyCode flyKey = KeyCode.None;
public static KeyCode teleportKey = KeyCode.B;
public static KeyCode radialMenuKey = KeyCode.Z;
public static Vector2 itemsScrollPosition = Vector2.zero;
public static Vector2 rituelObjectsScrollPosition = Vector2.zero;
public static Vector2 stuffsScrollPosition = Vector2.zero;

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();
}
}
}

View File

@@ -25,7 +25,6 @@ Everything about spoofing ehre (steam name, server name, level...) will persist
* Big Flashlight (allows your flashlight to light a lot more)
* Flashlight color customization (with a home made color picker)
* Unlimited UV light (thanks to [@jadis0x](https://github.com/jadis0x))
* 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))
* 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)
* Doors unlocker (should work fine, though it doesn't seem to work sometimes)
* Keys teleporter
@@ -55,6 +54,9 @@ Everything about spoofing ehre (steam name, server name, level...) will persist
* Switch between realms (Manor update)
* Farm Items x5 (host only)
* Radial Menu (Z)
* God Mode
* instant interaction (set the speed to 0.05, and you can interact with objects instantly without any bugs)
* 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.)
* 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!
* 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)
@@ -129,18 +131,15 @@ If you want to modify and develop the code, please follow the [Building from sou
* `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\Il2CppBehaviorDesigner.Runtime.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.HotReloadModule.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\UnityEngine.InputModule.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`

View File

@@ -104,8 +104,6 @@ function Find-DevourPathFromManifest {
$RequiredDependencies = @(
@{ Name = "0Harmony"; RelativePath = "steamapps\common\Devour\MelonLoader\net6\0Harmony.dll" },
@{ Name = "Assembly-CSharp"; RelativePath = "steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Assembly-CSharp.dll" },
@{ Name = "Il2CppAstarPathfindingProject"; RelativePath = "steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2CppAstarPathfindingProject.dll" },
@{ Name = "Il2CppBehaviorDesigner.Runtime"; RelativePath = "steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2CppBehaviorDesigner.Runtime.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" },
@@ -120,7 +118,6 @@ $RequiredDependencies = @(
@{ 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.HotReloadModule"; RelativePath = "steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.HotReloadModule.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" },

View File

@@ -56,8 +56,6 @@ find_devour_path_from_manifest() {
declare -A REQUIRED_DEPENDENCIES=(
["0Harmony"]="steamapps/common/Devour/MelonLoader/net6/0Harmony.dll"
["Assembly-CSharp"]="steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Assembly-CSharp.dll"
["Il2CppAstarPathfindingProject"]="steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Il2CppAstarPathfindingProject.dll"
["Il2CppBehaviorDesigner.Runtime"]="steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Il2CppBehaviorDesigner.Runtime.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"
@@ -72,7 +70,6 @@ declare -A REQUIRED_DEPENDENCIES=(
["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.HotReloadModule"]="steamapps/common/Devour/MelonLoader/Il2CppAssemblies/UnityEngine.HotReloadModule.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"
@@ -145,8 +142,6 @@ import os
required_deps = {
"0Harmony": "steamapps/common/Devour/MelonLoader/net6/0Harmony.dll",
"Assembly-CSharp": "steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Assembly-CSharp.dll",
"Il2CppAstarPathfindingProject": "steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Il2CppAstarPathfindingProject.dll",
"Il2CppBehaviorDesigner.Runtime": "steamapps/common/Devour/MelonLoader/Il2CppAssemblies/Il2CppBehaviorDesigner.Runtime.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",
@@ -161,7 +156,6 @@ required_deps = {
"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.HotReloadModule": "steamapps/common/Devour/MelonLoader/Il2CppAssemblies/UnityEngine.HotReloadModule.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",