6 Commits
4.5 ... 4.7

Author SHA1 Message Date
b134834170 Version 4.7 - Radial Menu
Add a new button-"Radial Menu (Z)" instead of "Recall (B)"
2025-12-04 03:45:07 +11:00
17dc31dd10 Update README.md 2025-12-02 13:51:46 +11:00
084d39ff57 更新 DevourClient/DevourClient.csproj 2025-12-01 06:21:11 +00:00
33164f700a recall function & show coordinates 2025-11-30 16:52:41 +11:00
f901257218 4.6 collection esp 2025-11-30 02:01:07 +11:00
2769f7a0b2 删除 DevourClient/Localization/TranslationDict.cs 2025-11-28 16:23:09 +00:00
23 changed files with 1307 additions and 300 deletions

View File

@@ -51,6 +51,7 @@ namespace DevourClient
public static float exp = 1000f;
public static bool _walkInLobby = false;
public static bool infinite_mirrors = false;
static bool radialMenuEnabled = true;
static bool player_esp = false;
static bool player_skel_esp = false;
static bool player_snapline = false;
@@ -65,6 +66,8 @@ namespace DevourClient
static bool need_fly_reset = false;
static bool crosshair = false;
static bool in_game_cache = false;
static bool showCoordinates = false;
static bool recallEnabled = false;
private const int ITEM_FARM_REPEAT_COUNT = 5;
private const float ITEM_FARM_DELAY = 0.15f;
private static bool autoItemFarm = false;
@@ -113,6 +116,7 @@ namespace DevourClient
Helpers.Entities.RegisterCoroutine(MelonCoroutines.Start(Helpers.Entities.GetAllPlayers()));
Helpers.Entities.RegisterCoroutine(MelonCoroutines.Start(Helpers.Entities.GetMonkeys()));
Helpers.Entities.RegisterCoroutine(MelonCoroutines.Start(Helpers.Entities.GetDolls()));
Helpers.Entities.RegisterCoroutine(MelonCoroutines.Start(Helpers.Entities.GetCollectables()));
}
public void Update()
@@ -185,6 +189,10 @@ namespace DevourClient
fly = !fly;
}
// Z-key radial menu logic is managed by RadialMenuManager
RadialMenuManager.Enabled = radialMenuEnabled;
RadialMenuManager.HandleUpdate();
if (Player.IsInGameOrLobby())
{
if (fly && !need_fly_reset)
@@ -304,7 +312,7 @@ namespace DevourClient
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)
if (UnityEngine.Event.current.type == EventType.Repaint)
{
if (player_esp || player_snapline || player_skel_esp)
{
@@ -385,6 +393,86 @@ namespace DevourClient
}
}
// Collectables ESP - render all collectable items with maxdistance check
// Note: Collectables ESP is independent of item_esp, check directly
if (Helpers.Entities.Collectables != null)
{
// Check if Collectables ESP is enabled
if (ESP.ItemESPConfig.GetESPState(ESP.ItemESPConfig.ESPType.Collectables))
{
// Get player position for distance calculation
Vector3 playerPosition = Vector3.zero;
if (Camera.main != null)
{
playerPosition = Camera.main.transform.position;
}
else if (Player.GetPlayer() != null)
{
playerPosition = 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();
// Get display name based on collectable type
string displayName = "";
Color espColor = new Color(1.0f, 0.84f, 0.0f, 1.0f); // Gold color for all collectables
// Determine collectable type and set display name
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);
}
}
}
}
}
// Enemy ESP - now using separate ESP type filtering
if (demon_esp)
{
@@ -518,12 +606,15 @@ namespace DevourClient
}
}
if (crosshair && in_game_cache)
{
const float crosshairSize = 4;
// End of EventType.Repaint branch
}
float xMin = (Settings.Settings.width) - (crosshairSize / 2);
float yMin = (Settings.Settings.height) - (crosshairSize / 2);
if (crosshair && in_game_cache)
{
const float crosshairSize = 4f;
float xMin = Settings.Settings.width - (crosshairSize / 2f);
float yMin = Settings.Settings.height - (crosshairSize / 2f);
if (crosshairTexture == null)
{
@@ -532,12 +623,14 @@ namespace DevourClient
GUI.DrawTexture(new Rect(xMin, yMin, crosshairSize, crosshairSize), crosshairTexture);
}
}
if (Settings.Settings.menu_enable)
{
windowRect = GUI.Window(0, windowRect, (GUI.WindowFunction)Tabs, "DevourClient");
}
// Radial menu rendering
RadialMenuManager.HandleOnGUI();
if (Settings.Settings.menu_enable)
{
windowRect = GUI.Window(0, windowRect, (GUI.WindowFunction)Tabs, "DevourClient");
}
}
catch (System.Exception ex)
{
@@ -1127,8 +1220,11 @@ namespace DevourClient
List<ESP.ItemESPConfig.ESPType> espTypes = ESP.ItemESPConfig.GetMapESPTypes(currentScene);
// Don't display panel if in menu scene or no available ESP types
if (espTypes.Count == 0)
return;
if (espTypes.Count == 0 && currentScene != "Menu")
{
// Even if no map-specific ESP types, show collectables
espTypes = new List<ESP.ItemESPConfig.ESPType>();
}
// Right side panel position
float panelX = Settings.Settings.x + 370;
@@ -1142,35 +1238,62 @@ namespace DevourClient
MultiLanguageSystem.Translate("ESP Settings"),
GUI.skin.box);
// Draw ESP toggle list
// Draw map-specific ESP toggle list
float yOffset = panelY + 30;
foreach (var espType in espTypes)
if (espTypes.Count > 0)
{
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)
foreach (var espType in espTypes)
{
ESP.ItemESPConfig.SetESPState(espType, newState);
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 += itemHeight;
// Add separator before collectables
yOffset += 5;
GUI.Label(new Rect(panelX + padding, yOffset, panelWidth - padding * 2, 20),
"─────────",
new GUIStyle(GUI.skin.label) { alignment = TextAnchor.MiddleCenter });
yOffset += 20;
}
// Display current map name (debug info)
string mapDisplayName = Helpers.Map.GetMapName(currentScene);
GUI.Label(
new Rect(panelX, yOffset + 10, panelWidth, 20),
$"Map: {mapDisplayName}",
new GUIStyle(GUI.skin.label) { fontSize = 10, alignment = TextAnchor.MiddleCenter }
// Draw unified collectables ESP toggle (always available)
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;
// Display current map name (debug info)
if (currentScene != "Menu")
{
string mapDisplayName = Helpers.Map.GetMapName(currentScene);
GUI.Label(
new Rect(panelX, yOffset + 10, panelWidth, 20),
$"Map: {mapDisplayName}",
new GUIStyle(GUI.skin.label) { fontSize = 10, alignment = TextAnchor.MiddleCenter }
);
}
}
private static void ItemsTab()
@@ -1845,6 +1968,7 @@ namespace DevourClient
}
}
private static void MiscTab()
{
GUI.Label(new Rect(Settings.Settings.x + 320, Settings.Settings.y + 70, 150, 20), "Language :");
@@ -1906,15 +2030,15 @@ namespace DevourClient
_walkInLobby = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 155, 140, 20), _walkInLobby, MultiLanguageSystem.Translate("Walk In Lobby"));
_IsAutoRespawn = GUI.Toggle(new Rect(Settings.Settings.x + 160, Settings.Settings.y + 155, 140, 20), _IsAutoRespawn, MultiLanguageSystem.Translate("Auto Respawn"));
fly = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 190, 100, 20), fly, MultiLanguageSystem.Translate("Fly"));
if (GUI.Button(new Rect(Settings.Settings.x + 120, Settings.Settings.y + 190, 60, 20), Settings.Settings.flyKey.ToString()))
fly = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 180, 100, 20), 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 + 215, 80, 20), MultiLanguageSystem.Translate("Fly Speed") + ":");
fly_speed = GUI.HorizontalSlider(new Rect(Settings.Settings.x + 100, Settings.Settings.y + 220, 150, 10), fly_speed, 5f, 20f);
GUI.Label(new Rect(Settings.Settings.x + 260, Settings.Settings.y + 215, 50, 20), ((int)fly_speed).ToString());
GUI.Label(new Rect(Settings.Settings.x + 20, Settings.Settings.y + 205, 80, 20), MultiLanguageSystem.Translate("Fly Speed") + ":");
fly_speed = GUI.HorizontalSlider(new Rect(Settings.Settings.x + 100, Settings.Settings.y + 210, 150, 10), fly_speed, 5f, 20f);
GUI.Label(new Rect(Settings.Settings.x + 260, Settings.Settings.y + 205, 50, 20), ((int)fly_speed).ToString());
spoofLevel = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 250, 200, 20), spoofLevel, MultiLanguageSystem.Translate("Spoof Level"));
GUI.Label(new Rect(Settings.Settings.x + 20, Settings.Settings.y + 275, 80, 20), MultiLanguageSystem.Translate("Level") + ":");
@@ -1931,6 +2055,31 @@ namespace DevourClient
_PlayerSpeedMultiplier = GUI.HorizontalSlider(new Rect(Settings.Settings.x + 130, Settings.Settings.y + 400, 120, 10), _PlayerSpeedMultiplier, (int)1f, (int)10f);
GUI.Label(new Rect(Settings.Settings.x + 260, Settings.Settings.y + 395, 50, 20), ((int)_PlayerSpeedMultiplier).ToString());
showCoordinates = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 430, 200, 20), showCoordinates, MultiLanguageSystem.Translate("Show Coordinates"));
radialMenuEnabled = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 455, 200, 20), radialMenuEnabled, MultiLanguageSystem.Translate("Radial Menu (Z)"));
// Display player coordinates at the bottom of Misc tab
if (showCoordinates && Player.IsInGameOrLobby())
{
try
{
Il2Cpp.NolanBehaviour nb = 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}";
// Display at the bottom of Misc tab
GUI.Label(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 485, 400, 30), coordText);
}
}
catch (System.Exception ex)
{
// Silently handle errors to avoid spam
}
}
}
private static void PlayersTab()
@@ -1949,45 +2098,62 @@ namespace DevourClient
GUI.Label(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 110 + i, 150, 30), bp.Name);
if (GUI.Button(new Rect(Settings.Settings.x + 70, Settings.Settings.y + 105 + i, 60, 30), MultiLanguageSystem.Translate("Kill")))
// All buttons in one row
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(Settings.Settings.x + 140, Settings.Settings.y + 105 + i, 60, 30), MultiLanguageSystem.Translate("Revive")))
if (GUI.Button(new Rect(buttonX, buttonY, 70, 30), MultiLanguageSystem.Translate("Revive")))
{
bp.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(Settings.Settings.x + 210, Settings.Settings.y + 105 + i, 90, 30), MultiLanguageSystem.Translate("Jumpscare")))
if (GUI.Button(new Rect(buttonX, buttonY, 90, 30), MultiLanguageSystem.Translate("Jumpscare")))
{
bp.Jumpscare();
}
buttonX += 100;
if (GUI.Button(new Rect(Settings.Settings.x + 310, Settings.Settings.y + 105 + i, 60, 30), MultiLanguageSystem.Translate("Teleport to")))
if (GUI.Button(new Rect(buttonX, buttonY, 80, 30), MultiLanguageSystem.Translate("Teleport to")))
{
bp.TP();
}
buttonX += 90;
if (GUI.Button(new Rect(Settings.Settings.x + 380, Settings.Settings.y + 105 + i, 100, 30), MultiLanguageSystem.Translate("Lock in cage")))
if (GUI.Button(new Rect(buttonX, buttonY, 100, 30), MultiLanguageSystem.Translate("Lock in cage")))
{
bp.LockInCage();
}
buttonX += 110;
if (GUI.Button(new Rect(Settings.Settings.x + 490, Settings.Settings.y + 105 + i, 90, 30), MultiLanguageSystem.Translate("TP Azazel")))
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(Settings.Settings.x + 590, Settings.Settings.y + 105 + i, 90, 30), MultiLanguageSystem.Translate("Shoot Player")))
if (GUI.Button(new Rect(buttonX, buttonY, 90, 30), MultiLanguageSystem.Translate("Shoot Player")))
{
bp.ShootPlayer();
}
}
i += 30;
i += 45;
}
}
else

View File

@@ -1,15 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<OutputType>Library</OutputType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<WarningLevel>0</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<WarningLevel>0</WarningLevel>
</PropertyGroup>
</Project>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<OutputType>Library</OutputType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<WarningLevel>0</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<WarningLevel>0</WarningLevel>
</PropertyGroup>
</Project>

View File

@@ -2,9 +2,7 @@ using System.Collections.Generic;
namespace DevourClient.ESP
{
/// <summary>
/// Item ESP configuration management class - dynamically display different item types based on map
/// </summary>
// Item ESP configuration management class - dynamically display different item types based on map
public static class ItemESPConfig
{
// ESP type enumeration
@@ -73,7 +71,10 @@ namespace DevourClient.ESP
// Enemy ESP - Carnival
Monkey, // Monkey
Doll // Doll
Doll, // Doll
// Collectables ESP - All maps (unified)
Collectables // All Collectables (Rose, Patch, CherryBlossom, Horseshoe, BarbedWire, Feather, Ticket, Pumpkin, Present)
}
// ESP type configuration supported by each map
@@ -251,12 +252,12 @@ namespace DevourClient.ESP
// Enemy - Carnival
{ ESPType.Monkey, false },
{ ESPType.Doll, false }
{ ESPType.Doll, false },
// Collectables - All maps (unified)
{ ESPType.Collectables, false }
};
/// <summary>
/// Get list of ESP types supported by specified map
/// </summary>
public static List<ESPType> GetMapESPTypes(string sceneName)
{
// If in menu, return empty list
@@ -278,35 +279,23 @@ namespace DevourClient.ESP
};
}
/// <summary>
/// Get ESP type enable status
/// </summary>
public static bool GetESPState(ESPType type)
{
return espStates.ContainsKey(type) ? espStates[type] : false;
}
/// <summary>
/// Set ESP type enable status
/// </summary>
public static void SetESPState(ESPType type, bool enabled)
{
if (espStates.ContainsKey(type))
espStates[type] = enabled;
}
/// <summary>
/// Toggle ESP type enable status
/// </summary>
public static void ToggleESPState(ESPType type)
{
if (espStates.ContainsKey(type))
espStates[type] = !espStates[type];
}
/// <summary>
/// Get ESP type display name (for translation key)
/// </summary>
public static string GetESPTypeName(ESPType type)
{
switch (type)
@@ -405,18 +394,22 @@ namespace DevourClient.ESP
case ESPType.Doll:
return "Doll ESP";
// Collectables - All maps (unified)
case ESPType.Collectables:
return "Collectables ESP";
default:
return type.ToString();
}
}
/// <summary>
/// Get corresponding ESP type based on item name
/// </summary>
public static ESPType? GetESPTypeByItemName(string itemName)
{
// Remove "Survival" and "(Clone)" prefix/suffix
itemName = itemName.Replace("Survival", "").Replace("(Clone)", "").Trim();
if (string.IsNullOrEmpty(itemName))
return null;
// Remove "Survival" and "(Clone)" prefix/suffix, handle both "Survival" and "Survival " (with space)
itemName = itemName.Replace("Survival ", "").Replace("Survival", "").Replace("(Clone)", "").Trim();
// Match item name to ESP type
switch (itemName.ToLower())
@@ -575,14 +568,35 @@ namespace DevourClient.ESP
case "dollbehaviour":
return ESPType.Doll;
// Collectables - All maps (unified)
// Based on CollectablesJSON field names and gameObject names
case "rose":
case "collectables":
case "collectable":
case "patch":
case "patches":
case "cherryblossom":
case "cherry blossom":
case "horseshoe":
case "horseshoes":
case "barbedwire":
case "barbed wire":
case "barbedwires":
case "feather":
case "feathers":
case "ticket":
case "tickets":
case "pumpkin":
case "pumpkins":
case "present":
case "presents":
return ESPType.Collectables;
default:
return null; // Unknown item type
}
}
/// <summary>
/// Check if ESP should be shown for specified item
/// </summary>
public static bool ShouldShowESP(string itemName)
{
ESPType? espType = GetESPTypeByItemName(itemName);
@@ -592,9 +606,6 @@ namespace DevourClient.ESP
return GetESPState(espType.Value);
}
/// <summary>
/// Reset all ESP states
/// </summary>
public static void ResetAllStates()
{
var keys = new List<ESPType>(espStates.Keys);

View File

@@ -191,11 +191,15 @@ namespace DevourClient.Hacks
public static void AutoRespawn()
{
// Centralized revive logic: always go through ReviveHelper.
Il2Cpp.NolanBehaviour nb = Player.GetPlayer();
Il2Cpp.SurvivalReviveInteractable _reviveInteractable = UnityEngine.Object.FindObjectOfType<Il2Cpp.SurvivalReviveInteractable>(); //probably can't be null
if (nb == null)
{
return;
}
_reviveInteractable.Interact(nb.gameObject);
ReviveHelper.TryRevive(nb);
}
public static void TPItems()
{

View File

@@ -11,6 +11,7 @@
{
switch (sceneName)
{
case "Devour":
case "Anna":
return "Farmhouse";
case "Molly":

View File

@@ -0,0 +1,104 @@
using System;
using DevourClient.Network;
using MelonLoader;
using UnityEngine;
namespace DevourClient.Helpers
{
// Shared revive utilities. When running as host we mirror DevourX's revive flow.
public static class ReviveHelper
{
private static readonly Vector3 HostFallbackPosition = new Vector3(0f, -150f, 0f);
// Try to revive the provided NolanBehaviour using host-specific logic first,
// then fall back to the standard interactable flow.
public static bool TryRevive(Il2Cpp.NolanBehaviour target)
{
if (target == null || target.gameObject == null)
{
return false;
}
if (TryHostRevive(target))
{
return true;
}
return TryInteractRevive(target);
}
private static bool TryHostRevive(Il2Cpp.NolanBehaviour target)
{
if (!NetworkHelper.IsHost() || !Player.IsInGame())
{
return false;
}
if (!target.IsCrawling())
{
return false;
}
try
{
Il2Cpp.SurvivalReviveInteractable interactable = UnityEngine.Object.FindObjectOfType<Il2Cpp.SurvivalReviveInteractable>();
if (interactable == null)
{
target.TeleportTo(HostFallbackPosition, Quaternion.identity);
MelonLogger.Msg("[ReviveHelper] Host fallback teleport executed (no interactable found).");
return true;
}
interactable.Interact(target.gameObject);
MelonLogger.Msg("[ReviveHelper] Host revive interactable triggered.");
return true;
}
catch (Exception ex)
{
MelonLogger.Warning($"[ReviveHelper] Host revive flow failed: {ex.Message}");
return false;
}
}
private static bool TryInteractRevive(Il2Cpp.NolanBehaviour target)
{
try
{
Il2Cpp.SurvivalReviveInteractable interactable = UnityEngine.Object.FindObjectOfType<Il2Cpp.SurvivalReviveInteractable>();
if (interactable == null)
{
return false;
}
if (interactable.CanInteract(target.gameObject))
{
interactable.Interact(target.gameObject);
return true;
}
}
catch (Exception ex)
{
MelonLogger.Warning($"[ReviveHelper] Interact revive failed: {ex.Message}");
}
return false;
}
// 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)
{
if (targetGameObject == null)
{
return;
}
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); }
}
}
}

View File

@@ -30,20 +30,6 @@ namespace DevourClient.Helpers
sab.OnKnockout(sab.gameObject, p_GameObject);
}
public void Revive()
{
if (p_GameObject == null)
{
return;
}
Il2Cpp.NolanBehaviour nb = p_GameObject.GetComponent<Il2Cpp.NolanBehaviour>();
Il2Cpp.SurvivalReviveInteractable _reviveInteractable = UnityEngine.Object.FindObjectOfType<Il2Cpp.SurvivalReviveInteractable>();
if (_reviveInteractable.CanInteract(nb.gameObject) == true) { _reviveInteractable.Interact(nb.gameObject); }
}
public void Jumpscare() //TOFIX doesn't seem to be working
{
if (!BoltNetwork.IsServer)
@@ -135,6 +121,7 @@ namespace DevourClient.Helpers
_azazelSam.OnShootPlayer(p_GameObject, true);
}
}
}
public class Player
{
@@ -193,6 +180,7 @@ namespace DevourClient.Helpers
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>();
@@ -409,6 +397,17 @@ namespace DevourClient.Helpers
}
}
public static IEnumerator GetCollectables()
{
while (isRunning)
{
Collectables = Il2Cpp.CollectableInteractable.FindObjectsOfType<Il2Cpp.CollectableInteractable>();
// Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f);
}
}
public static void StartAllCoroutines()
{
isRunning = true;
@@ -470,6 +469,7 @@ namespace DevourClient.Helpers
DirtyHeads = null;
Monkeys = null;
Dolls = null;
Collectables = null;
if (LocalPlayer_ != null)
{

View File

@@ -1,154 +0,0 @@
using System.Collections.Generic;
namespace DevourClient.Localization
{
public static class TranslationDict
{
public static bool EnableChineseTranslation { get; set; } = true;
private static readonly Dictionary<string, string> ItemTranslations = new Dictionary<string, string>
{
{ "Key", "钥匙" },
{ "Hay", "干草" },
{ "FirstAid", "急救包" },
{ "Battery", "电池" },
{ "Gasoline", "汽油" },
{ "Fuse", "保险丝" },
{ "Food", "食物" },
{ "RottenFood", "腐烂食物" },
{ "Bone", "骨头" },
{ "Bleach", "漂白剂" },
{ "Matchbox", "火柴盒" },
{ "Spade", "铲子" },
{ "Cake", "蛋糕" },
{ "MusicBox", "音乐盒" },
{ "Coin", "硬币" },
{ "Egg", "鸡蛋" },
{ "Egg-Clean-1", "鸡蛋-1" },
{ "Egg-Clean-2", "鸡蛋-2" },
{ "Egg-Clean-3", "鸡蛋-3" },
{ "Egg-Clean-4", "鸡蛋-4" },
{ "Egg-Clean-5", "鸡蛋-5" },
{ "Egg-Clean-6", "鸡蛋-6" },
{ "Egg-Clean-7", "鸡蛋-7" },
{ "Egg-Clean-8", "鸡蛋-8" },
{ "Egg-Clean-9", "鸡蛋-9" },
{ "Egg-Clean-10", "鸡蛋-10" },
{ "RitualBook", "仪式书" },
{ "DollHead", "玩偶头" },
{ "Head", "头颅" },
{ "CleanHead", "干净的头颅" },
};
private static readonly Dictionary<string, string> AnimalTranslations = new Dictionary<string, string>
{
{ "Goat", "山羊" },
{ "Rat", "老鼠" },
{ "Pig", "猪" },
};
private static readonly Dictionary<string, string> EnemyTranslations = new Dictionary<string, string>
{
{ "Azazel", "阿撒泻勒" },
{ "Demon", "恶魔" },
{ "Spider", "蜘蛛" },
{ "Ghost", "鬼魂" },
{ "Boar", "野猪" },
{ "Corpse", "尸体" },
{ "Crow", "乌鸦" },
{ "Lump", "肿块" },
{ "Monkey", "猴子" },
{ "Inmate", "囚犯" },
{ "AzazelSam", "阿撒泻勒-萨姆" },
{ "AzazelMolly", "阿撒泻勒-莫莉" },
{ "AzazelAnna", "阿撒泻勒-安娜" },
{ "AzazelZara", "阿撒泻勒-扎拉" },
{ "AzazelNathan", "阿撒泻勒-内森" },
{ "AzazelApril", "阿撒泻勒-艾普尔" },
{ "AzazelKai", "阿撒泻勒-凯" },
};
private static readonly Dictionary<string, string> MapTranslations = new Dictionary<string, string>
{
{ "Devour", "农舍" },
{ "Farmhouse", "农舍" },
{ "Molly", "精神病院" },
{ "Asylum", "精神病院" },
{ "Inn", "旅馆" },
{ "Town", "小镇" },
{ "Slaughterhouse", "屠宰场" },
{ "Manor", "庄园" },
{ "Carnival", "嘉年华" },
{ "Menu", "菜单" },
};
private static readonly Dictionary<string, string> OtherTranslations = new Dictionary<string, string>
{
{ "Player", "玩家" },
{ "Door", "门" },
{ "Gate", "大门" },
{ "Altar", "祭坛" },
{ "Fountain", "喷泉" },
{ "Mirror", "镜子" },
{ "Cage", "笼子" },
};
public static string Translate(string englishName)
{
if (!EnableChineseTranslation || string.IsNullOrEmpty(englishName))
{
return englishName;
}
if (ItemTranslations.TryGetValue(englishName, out string itemTranslation))
{
return itemTranslation;
}
if (AnimalTranslations.TryGetValue(englishName, out string animalTranslation))
{
return animalTranslation;
}
if (EnemyTranslations.TryGetValue(englishName, out string enemyTranslation))
{
return enemyTranslation;
}
if (MapTranslations.TryGetValue(englishName, out string mapTranslation))
{
return mapTranslation;
}
if (OtherTranslations.TryGetValue(englishName, out string otherTranslation))
{
return otherTranslation;
}
return englishName;
}
public static void AddCustomTranslations(Dictionary<string, string> customTranslations)
{
if (customTranslations == null) return;
foreach (var kvp in customTranslations)
{
if (!ItemTranslations.ContainsKey(kvp.Key))
{
ItemTranslations.Add(kvp.Key, kvp.Value);
}
}
}
public static int GetTotalTranslationCount()
{
return ItemTranslations.Count + AnimalTranslations.Count +
EnemyTranslations.Count + MapTranslations.Count +
OtherTranslations.Count;
}
}
}

View File

@@ -31,6 +31,7 @@ namespace DevourClient.Localization.Translations
{ "AzazelNathan", "Azazel-Nathan" },
{ "AzazelSam", "Azazel-Sam" },
{ "AzazelZara", "Azazel-Zara" },
{ "Barbed Wire", "带刺铁丝网" },
{ "Battery", "电池" },
{ "Battery ESP", "电池透视" },
{ "Big Flashlight", "大手电筒" },
@@ -45,7 +46,9 @@ namespace DevourClient.Localization.Translations
{ "Cake", "蛋糕" },
{ "Cake ESP", "蛋糕透视" },
{ "Carnival", "嘉年华" },
{ "Cherry Blossom", "樱花" },
{ "Clean Head ESP", "清洁头颅透视" },
{ "Collectables ESP", "收藏品透视" },
{ "Clean The Fountains", "清洁喷泉" },
{ "CleanHead", "干净的头颅" },
{ "Client", "客户端" },
@@ -119,6 +122,7 @@ namespace DevourClient.Localization.Translations
{ "Flashlight Color", "手电筒颜色" },
{ "Fly", "飞行" },
{ "Fly Speed", "飞行速度" },
{ "Feather", "羽毛" },
{ "Food", "食物" },
{ "Force Start Game", "强制开始游戏" },
{ "Fountain", "喷泉" },
@@ -137,6 +141,7 @@ namespace DevourClient.Localization.Translations
{ "Hay", "干草" },
{ "Hay ESP", "干草透视" },
{ "Head", "头颅" },
{ "Horseshoe", "马蹄铁" },
{ "Host", "房主" },
{ "Host Only", "仅房主" },
{ "Infinite mirrors", "无限镜子" },
@@ -183,6 +188,7 @@ namespace DevourClient.Localization.Translations
{ "Network Info", "网络信息" },
{ "Network Stats", "网络统计" },
{ "Not connected", "未连接网络" },
{ "Patch", "补丁" },
{ "Pig", "猪" },
{ "Pig ESP", "猪透视" },
{ "PigExcrement", "猪粪" },
@@ -194,12 +200,16 @@ namespace DevourClient.Localization.Translations
{ "Player ESP Color", "玩家透视颜色" },
{ "Player Snapline", "玩家连线" },
{ "Players", "玩家" },
{ "Present", "礼物" },
{ "Private Lobby", "私人房间" },
{ "Pumpkin", "南瓜" },
{ "Rat", "老鼠" },
{ "Rat ESP", "老鼠透视" },
{ "Region", "区域" },
{ "Revive", "复活" },
{ "Radial Menu (Z)", "轮盘菜单 (Z)" },
{ "Ritual Book", "仪式书" },
{ "Rose", "玫瑰" },
{ "Ritual Book ESP", "仪式书透视" },
{ "Ritual Object ESP", "仪式物品透视" },
{ "Ritual Objects", "仪式物品" },
@@ -210,6 +220,7 @@ namespace DevourClient.Localization.Translations
{ "Rotton Food ESP", "腐烂食物透视" },
{ "Sam", "萨姆" },
{ "Shoot Player", "射击玩家" },
{ "Show Coordinates", "显示坐标" },
{ "Skeleton ESP", "骨骼透视" },
{ "Slaughterhouse", "屠宰场" },
{ "SlaughterhouseFireEscapeDoor", "屠宰场消防门" },
@@ -244,6 +255,11 @@ namespace DevourClient.Localization.Translations
{ "TV", "电视" },
{ "Teleport Keys", "传送钥匙" },
{ "Teleport to", "传送至" },
{ "TP Base", "传送至基地" },
{ "TP Altar", "传送至祭坛" },
{ "TP Basin", "传送至水池" },
{ "TP Fountain", "传送至喷泉" },
{ "Ticket", "票券" },
{ "Town", "小镇" },
{ "TownDoor", "小镇门" },
{ "TownDoor2", "小镇门2" },

View File

@@ -31,6 +31,7 @@ namespace DevourClient.Localization.Translations
{ "AzazelNathan", "AzazelNathan" },
{ "AzazelSam", "AzazelSam" },
{ "AzazelZara", "AzazelZara" },
{ "Barbed Wire", "Barbed Wire" },
{ "Battery", "Battery" },
{ "Battery ESP", "Battery ESP" },
{ "Big Flashlight", "Big Flashlight" },
@@ -45,7 +46,9 @@ namespace DevourClient.Localization.Translations
{ "Cake", "Cake" },
{ "Cake ESP", "Cake ESP" },
{ "Carnival", "Carnival" },
{ "Cherry Blossom", "Cherry Blossom" },
{ "Clean Head ESP", "Clean Head ESP" },
{ "Collectables ESP", "Collectables ESP" },
{ "Clean The Fountains", "Clean The Fountains" },
{ "CleanHead", "CleanHead" },
{ "Client", "Client" },
@@ -119,6 +122,7 @@ namespace DevourClient.Localization.Translations
{ "Flashlight Color", "Flashlight Color" },
{ "Fly", "Fly" },
{ "Fly Speed", "Fly Speed" },
{ "Feather", "Feather" },
{ "Food", "Food" },
{ "Force Start Game", "Force Start Game" },
{ "Fountain", "Fountain" },
@@ -137,6 +141,7 @@ namespace DevourClient.Localization.Translations
{ "Hay", "Hay" },
{ "Hay ESP", "Hay ESP" },
{ "Head", "Head" },
{ "Horseshoe", "Horseshoe" },
{ "Host", "Host" },
{ "Host Only", "Host Only" },
{ "Infinite mirrors", "Infinite mirrors" },
@@ -183,6 +188,7 @@ namespace DevourClient.Localization.Translations
{ "Network Info", "Network Info" },
{ "Network Stats", "Network Stats" },
{ "Not connected", "Not connected" },
{ "Patch", "Patch" },
{ "Pig", "Pig" },
{ "Pig ESP", "Pig ESP" },
{ "PigExcrement", "PigExcrement" },
@@ -194,12 +200,16 @@ namespace DevourClient.Localization.Translations
{ "Player ESP Color", "Player ESP Color" },
{ "Player Snapline", "Player Snapline" },
{ "Players", "Players" },
{ "Present", "Present" },
{ "Private Lobby", "Private Lobby" },
{ "Pumpkin", "Pumpkin" },
{ "Rat", "Rat" },
{ "Rat ESP", "Rat ESP" },
{ "Region", "Region" },
{ "Revive", "Revive" },
{ "Radial Menu (Z)", "Radial Menu (Z)" },
{ "Ritual Book", "Ritual Book" },
{ "Rose", "Rose" },
{ "Ritual Book ESP", "Ritual Book ESP" },
{ "Ritual Object ESP", "Ritual Object ESP" },
{ "Ritual Objects", "Ritual Objects" },
@@ -210,6 +220,7 @@ namespace DevourClient.Localization.Translations
{ "Rotton Food ESP", "Rotton Food ESP" },
{ "Sam", "Sam" },
{ "Shoot Player", "Shoot Player" },
{ "Show Coordinates", "Show Coordinates" },
{ "Skeleton ESP", "Skeleton ESP" },
{ "Slaughterhouse", "Slaughterhouse" },
{ "SlaughterhouseFireEscapeDoor", "SlaughterhouseFireEscapeDoor" },
@@ -244,6 +255,11 @@ namespace DevourClient.Localization.Translations
{ "TV", "TV" },
{ "Teleport Keys", "Teleport Keys" },
{ "Teleport to", "Teleport to" },
{ "TP Base", "TP Base" },
{ "TP Altar", "TP Altar" },
{ "TP Basin", "TP Basin" },
{ "TP Fountain", "TP Fountain" },
{ "Ticket", "Ticket" },
{ "Town", "Town" },
{ "TownDoor", "TownDoor" },
{ "TownDoor2", "TownDoor2" },

View File

@@ -31,6 +31,7 @@ namespace DevourClient.Localization.Translations
{ "AzazelNathan", "Azazel-Nathan" },
{ "AzazelSam", "Azazel-Sam" },
{ "AzazelZara", "Azazel-Zara" },
{ "Barbed Wire", "Fil de fer barbelé" },
{ "Battery", "Batterie" },
{ "Battery ESP", "ESP batterie" },
{ "Big Flashlight", "Grande lampe" },
@@ -45,7 +46,9 @@ namespace DevourClient.Localization.Translations
{ "Cake", "Gâteau" },
{ "Cake ESP", "ESP gâteau" },
{ "Carnival", "Carnaval" },
{ "Cherry Blossom", "Fleur de cerisier" },
{ "Clean Head ESP", "ESP tête propre" },
{ "Collectables ESP", "ESP objets de collection" },
{ "Clean The Fountains", "Nettoyer fontaines" },
{ "CleanHead", "Tête propre" },
{ "Client", "Client" },
@@ -119,6 +122,7 @@ namespace DevourClient.Localization.Translations
{ "Flashlight Color", "Couleur lampe" },
{ "Fly", "Voler" },
{ "Fly Speed", "Vitesse vol" },
{ "Feather", "Plume" },
{ "Food", "Nourriture" },
{ "Force Start Game", "Forcer le démarrage" },
{ "Fountain", "Fontaine" },
@@ -137,6 +141,7 @@ namespace DevourClient.Localization.Translations
{ "Hay", "Foin" },
{ "Hay ESP", "ESP foin" },
{ "Head", "Tête" },
{ "Horseshoe", "Fer à cheval" },
{ "Host", "Hôte" },
{ "Host Only", "Hôte seulement" },
{ "Infinite mirrors", "Miroirs infinis" },
@@ -183,6 +188,7 @@ namespace DevourClient.Localization.Translations
{ "Network Info", "Infos réseau" },
{ "Network Stats", "Statistiques réseau" },
{ "Not connected", "Non connecté" },
{ "Patch", "Patch" },
{ "Pig", "Cochon" },
{ "Pig ESP", "ESP cochon" },
{ "PigExcrement", "Excréments de porc" },
@@ -194,12 +200,16 @@ namespace DevourClient.Localization.Translations
{ "Player ESP Color", "Couleur ESP joueur" },
{ "Player Snapline", "Ligne joueur" },
{ "Players", "Joueurs" },
{ "Present", "Cadeau" },
{ "Private Lobby", "Lobby privé" },
{ "Pumpkin", "Citrouille" },
{ "Rat", "Rat" },
{ "Rat ESP", "ESP rat" },
{ "Region", "Région" },
{ "Revive", "Réanimer" },
{ "Radial Menu (Z)", "Menu radial (Z)" },
{ "Ritual Book", "Livre rituel" },
{ "Rose", "Rose" },
{ "Ritual Book ESP", "ESP livre rituel" },
{ "Ritual Object ESP", "ESP objet rituel" },
{ "Ritual Objects", "Objets rituels" },
@@ -210,6 +220,7 @@ namespace DevourClient.Localization.Translations
{ "Rotton Food ESP", "ESP nourriture pourrie" },
{ "Sam", "Sam" },
{ "Shoot Player", "Tirer sur le joueur" },
{ "Show Coordinates", "Afficher coordonnées" },
{ "Skeleton ESP", "ESP squelette" },
{ "Slaughterhouse", "Abattoir" },
{ "SlaughterhouseFireEscapeDoor", "Porte de secours d'abattoir" },
@@ -244,6 +255,11 @@ namespace DevourClient.Localization.Translations
{ "TV", "Télévision" },
{ "Teleport Keys", "Téléporter clés" },
{ "Teleport to", "Téléporter" },
{ "TP Base", "TP base" },
{ "TP Altar", "TP autel" },
{ "TP Basin", "TP bassin" },
{ "TP Fountain", "TP fontaine" },
{ "Ticket", "Billet" },
{ "Town", "Ville" },
{ "TownDoor", "Porte de ville" },
{ "TownDoor2", "Porte de ville 2" },

View File

@@ -31,6 +31,7 @@ namespace DevourClient.Localization.Translations
{ "AzazelNathan", "Azazel-Nathan" },
{ "AzazelSam", "Azazel-Sam" },
{ "AzazelZara", "Azazel-Zara" },
{ "Barbed Wire", "Stacheldraht" },
{ "Battery", "Batterie" },
{ "Battery ESP", "Batterie-ESP" },
{ "Big Flashlight", "Große Taschenlampe" },
@@ -45,7 +46,9 @@ namespace DevourClient.Localization.Translations
{ "Cake", "Kuchen" },
{ "Cake ESP", "Kuchen-ESP" },
{ "Carnival", "Karneval" },
{ "Cherry Blossom", "Kirschblüte" },
{ "Clean Head ESP", "Sauberer-Kopf-ESP" },
{ "Collectables ESP", "Sammlerobjekte-ESP" },
{ "Clean The Fountains", "Brunnen reinigen" },
{ "CleanHead", "Sauberer Kopf" },
{ "Client", "Client" },
@@ -119,6 +122,7 @@ namespace DevourClient.Localization.Translations
{ "Flashlight Color", "Taschenlampenfarbe" },
{ "Fly", "Fliegen" },
{ "Fly Speed", "Fluggeschwindigkeit" },
{ "Feather", "Feder" },
{ "Food", "Essen" },
{ "Force Start Game", "Spiel erzwingen" },
{ "Fountain", "Brunnen" },
@@ -137,6 +141,7 @@ namespace DevourClient.Localization.Translations
{ "Hay", "Heu" },
{ "Hay ESP", "Heu-ESP" },
{ "Head", "Kopf" },
{ "Horseshoe", "Hufeisen" },
{ "Host", "Host" },
{ "Host Only", "Nur Host" },
{ "Infinite mirrors", "Unendliche Spiegel" },
@@ -183,6 +188,7 @@ namespace DevourClient.Localization.Translations
{ "Network Info", "Netzwerk-Info" },
{ "Network Stats", "Netzwerk-Statistiken" },
{ "Not connected", "Nicht verbunden" },
{ "Patch", "Patch" },
{ "Pig", "Schwein" },
{ "Pig ESP", "Schwein-ESP" },
{ "PigExcrement", "Schweinekot" },
@@ -194,12 +200,16 @@ namespace DevourClient.Localization.Translations
{ "Player ESP Color", "Spieler ESP Farbe" },
{ "Player Snapline", "Spieler-Linie" },
{ "Players", "Spieler" },
{ "Present", "Geschenk" },
{ "Private Lobby", "Privates Lobby" },
{ "Pumpkin", "Kürbis" },
{ "Rat", "Ratte" },
{ "Rat ESP", "Ratte-ESP" },
{ "Region", "Region" },
{ "Revive", "Wiederbeleben" },
{ "Radial Menu (Z)", "Radiales Menü (Z)" },
{ "Ritual Book", "Ritualbuch" },
{ "Rose", "Rose" },
{ "Ritual Book ESP", "Ritualbuch-ESP" },
{ "Ritual Object ESP", "Ritualobjekt ESP" },
{ "Ritual Objects", "Rituelle Objekte" },
@@ -210,6 +220,7 @@ namespace DevourClient.Localization.Translations
{ "Rotton Food ESP", "Verdorbenes-Essen-ESP" },
{ "Sam", "Sam" },
{ "Shoot Player", "Spieler erschießen" },
{ "Show Coordinates", "Koordinaten anzeigen" },
{ "Skeleton ESP", "Skelett ESP" },
{ "Slaughterhouse", "Schlachthaus" },
{ "SlaughterhouseFireEscapeDoor", "Schlachthof-Feuerschutztür" },
@@ -244,6 +255,11 @@ namespace DevourClient.Localization.Translations
{ "TV", "Fernseher" },
{ "Teleport Keys", "Schlüssel teleportieren" },
{ "Teleport to", "Teleportieren" },
{ "TP Base", "TP Basis" },
{ "TP Altar", "TP Altar" },
{ "TP Basin", "TP Becken" },
{ "TP Fountain", "TP Brunnen" },
{ "Ticket", "Ticket" },
{ "Town", "Stadt" },
{ "TownDoor", "Stadttür" },
{ "TownDoor2", "Stadttür 2" },

View File

@@ -31,6 +31,7 @@ namespace DevourClient.Localization.Translations
{ "AzazelNathan", "Azazel-Nathan" },
{ "AzazelSam", "Azazel-Sam" },
{ "AzazelZara", "Azazel-Zara" },
{ "Barbed Wire", "Filo spinato" },
{ "Battery", "Batteria" },
{ "Battery ESP", "ESP batteria" },
{ "Big Flashlight", "Grande torcia" },
@@ -45,7 +46,9 @@ namespace DevourClient.Localization.Translations
{ "Cake", "Torta" },
{ "Cake ESP", "ESP torta" },
{ "Carnival", "Carnevale" },
{ "Cherry Blossom", "Fiore di ciliegio" },
{ "Clean Head ESP", "ESP testa pulita" },
{ "Collectables ESP", "ESP collezionabili" },
{ "Clean The Fountains", "Pulisci fontane" },
{ "CleanHead", "Testa pulita" },
{ "Client", "Client" },
@@ -119,6 +122,7 @@ namespace DevourClient.Localization.Translations
{ "Flashlight Color", "Colore torcia" },
{ "Fly", "Volare" },
{ "Fly Speed", "Velocità volo" },
{ "Feather", "Piuma" },
{ "Food", "Cibo" },
{ "Force Start Game", "Forza avvio" },
{ "Fountain", "Fontana" },
@@ -137,6 +141,7 @@ namespace DevourClient.Localization.Translations
{ "Hay", "Fieno" },
{ "Hay ESP", "ESP fieno" },
{ "Head", "Testa" },
{ "Horseshoe", "Ferro di cavallo" },
{ "Host", "Host" },
{ "Host Only", "Solo host" },
{ "Infinite mirrors", "Specchi infiniti" },
@@ -183,6 +188,7 @@ namespace DevourClient.Localization.Translations
{ "Network Info", "Info rete" },
{ "Network Stats", "Statistiche rete" },
{ "Not connected", "Non connesso" },
{ "Patch", "Patch" },
{ "Pig", "Maiale" },
{ "Pig ESP", "ESP maiale" },
{ "PigExcrement", "Escrementi di maiale" },
@@ -194,12 +200,16 @@ namespace DevourClient.Localization.Translations
{ "Player ESP Color", "Colore ESP giocatore" },
{ "Player Snapline", "Linea giocatore" },
{ "Players", "Giocatori" },
{ "Present", "Regalo" },
{ "Private Lobby", "Lobby privata" },
{ "Pumpkin", "Zucca" },
{ "Rat", "Ratto" },
{ "Rat ESP", "ESP ratto" },
{ "Region", "Regione" },
{ "Revive", "Rianima" },
{ "Radial Menu (Z)", "Menu radiale (Z)" },
{ "Ritual Book", "Libro rituale" },
{ "Rose", "Rosa" },
{ "Ritual Book ESP", "ESP libro rituale" },
{ "Ritual Object ESP", "ESP oggetto rituale" },
{ "Ritual Objects", "Oggetti rituali" },
@@ -210,6 +220,7 @@ namespace DevourClient.Localization.Translations
{ "Rotton Food ESP", "ESP cibo marcio" },
{ "Sam", "Sam" },
{ "Shoot Player", "Spara al giocatore" },
{ "Show Coordinates", "Mostra coordinate" },
{ "Skeleton ESP", "ESP scheletro" },
{ "Slaughterhouse", "Macello" },
{ "SlaughterhouseFireEscapeDoor", "Porta antincendio del mattatoio" },
@@ -244,6 +255,11 @@ namespace DevourClient.Localization.Translations
{ "TV", "Televisione" },
{ "Teleport Keys", "Teletrasporta chiavi" },
{ "Teleport to", "Teletrasporta" },
{ "TP Base", "TP Base" },
{ "TP Altar", "TP Altare" },
{ "TP Basin", "TP Bacino" },
{ "TP Fountain", "TP Fontana" },
{ "Ticket", "Biglietto" },
{ "Town", "Città" },
{ "TownDoor", "Porta della città" },
{ "TownDoor2", "Porta della città 2" },

View File

@@ -31,6 +31,7 @@ namespace DevourClient.Localization.Translations
{ "AzazelNathan", "Azazel-Nathan" },
{ "AzazelSam", "Azazel-Sam" },
{ "AzazelZara", "Azazel-Zara" },
{ "Barbed Wire", "有刺鉄線" },
{ "Battery", "バッテリー" },
{ "Battery ESP", "バッテリーESP" },
{ "Big Flashlight", "大型懐中電灯" },
@@ -45,7 +46,9 @@ namespace DevourClient.Localization.Translations
{ "Cake", "ケーキ" },
{ "Cake ESP", "ケーキESP" },
{ "Carnival", "カーニバル" },
{ "Cherry Blossom", "桜" },
{ "Clean Head ESP", "きれいな頭ESP" },
{ "Collectables ESP", "コレクションESP" },
{ "Clean The Fountains", "噴水を掃除" },
{ "CleanHead", "きれいな頭" },
{ "Client", "クライアント" },
@@ -119,6 +122,7 @@ namespace DevourClient.Localization.Translations
{ "Flashlight Color", "懐中電灯の色" },
{ "Fly", "飛行" },
{ "Fly Speed", "飛行速度" },
{ "Feather", "羽" },
{ "Food", "食べ物" },
{ "Force Start Game", "強制開始" },
{ "Fountain", "噴水" },
@@ -137,6 +141,7 @@ namespace DevourClient.Localization.Translations
{ "Hay", "干し草" },
{ "Hay ESP", "干し草ESP" },
{ "Head", "頭" },
{ "Horseshoe", "蹄鉄" },
{ "Host", "ホスト" },
{ "Host Only", "ホストのみ" },
{ "Infinite mirrors", "無限の鏡" },
@@ -183,6 +188,7 @@ namespace DevourClient.Localization.Translations
{ "Network Info", "ネットワーク情報" },
{ "Network Stats", "ネットワーク統計" },
{ "Not connected", "未接続" },
{ "Patch", "パッチ" },
{ "Pig", "豚" },
{ "Pig ESP", "豚ESP" },
{ "PigExcrement", "豚の排泄物" },
@@ -194,12 +200,16 @@ namespace DevourClient.Localization.Translations
{ "Player ESP Color", "プレイヤーESP色" },
{ "Player Snapline", "プレイヤーライン" },
{ "Players", "プレイヤー" },
{ "Present", "プレゼント" },
{ "Private Lobby", "プライベートロビー" },
{ "Pumpkin", "カボチャ" },
{ "Rat", "ネズミ" },
{ "Rat ESP", "ネズミESP" },
{ "Region", "地域" },
{ "Revive", "蘇生" },
{ "Radial Menu (Z)", "ラジアルメニュー (Z)" },
{ "Ritual Book", "儀式の本" },
{ "Rose", "バラ" },
{ "Ritual Book ESP", "儀式の本ESP" },
{ "Ritual Object ESP", "儀式オブジェクトESP" },
{ "Ritual Objects", "儀式の品" },
@@ -210,6 +220,7 @@ namespace DevourClient.Localization.Translations
{ "Rotton Food ESP", "腐った食べ物ESP" },
{ "Sam", "サム" },
{ "Shoot Player", "プレイヤーを撃つ" },
{ "Show Coordinates", "座標を表示" },
{ "Skeleton ESP", "スケルトンESP" },
{ "Slaughterhouse", "屠殺場" },
{ "SlaughterhouseFireEscapeDoor", "屠殺場の非常口" },
@@ -244,6 +255,11 @@ namespace DevourClient.Localization.Translations
{ "TV", "テレビ" },
{ "Teleport Keys", "鍵をテレポート" },
{ "Teleport to", "テレポート" },
{ "TP Base", "ベースTP" },
{ "TP Altar", "祭壇TP" },
{ "TP Basin", "水盤TP" },
{ "TP Fountain", "噴水TP" },
{ "Ticket", "チケット" },
{ "Town", "町" },
{ "TownDoor", "町のドア" },
{ "TownDoor2", "町のドア2" },

View File

@@ -31,6 +31,7 @@ namespace DevourClient.Localization.Translations
{ "AzazelNathan", "Azazel-Nathan" },
{ "AzazelSam", "Azazel-Sam" },
{ "AzazelZara", "Azazel-Zara" },
{ "Barbed Wire", "철조망" },
{ "Battery", "배터리" },
{ "Battery ESP", "배터리 ESP" },
{ "Big Flashlight", "큰 손전등" },
@@ -45,7 +46,9 @@ namespace DevourClient.Localization.Translations
{ "Cake", "케이크" },
{ "Cake ESP", "케이크 ESP" },
{ "Carnival", "카니발" },
{ "Cherry Blossom", "벚꽃" },
{ "Clean Head ESP", "깨끗한 머리 ESP" },
{ "Collectables ESP", "수집품 ESP" },
{ "Clean The Fountains", "분수 청소" },
{ "CleanHead", "깨끗한 머리" },
{ "Client", "클라이언트" },
@@ -119,6 +122,7 @@ namespace DevourClient.Localization.Translations
{ "Flashlight Color", "손전등 색상" },
{ "Fly", "비행" },
{ "Fly Speed", "비행 속도" },
{ "Feather", "깃털" },
{ "Food", "음식" },
{ "Force Start Game", "강제 시작" },
{ "Fountain", "분수" },
@@ -137,6 +141,7 @@ namespace DevourClient.Localization.Translations
{ "Hay", "건초" },
{ "Hay ESP", "건초 ESP" },
{ "Head", "머리" },
{ "Horseshoe", "말굽" },
{ "Host", "호스트" },
{ "Host Only", "호스트만" },
{ "Infinite mirrors", "무한 거울" },
@@ -183,6 +188,7 @@ namespace DevourClient.Localization.Translations
{ "Network Info", "네트워크 정보" },
{ "Network Stats", "네트워크 통계" },
{ "Not connected", "연결되지 않음" },
{ "Patch", "패치" },
{ "Pig", "돼지" },
{ "Pig ESP", "돼지 ESP" },
{ "PigExcrement", "돼지 배설물" },
@@ -194,12 +200,16 @@ namespace DevourClient.Localization.Translations
{ "Player ESP Color", "플레이어 ESP 색상" },
{ "Player Snapline", "플레이어 라인" },
{ "Players", "플레이어" },
{ "Present", "선물" },
{ "Private Lobby", "비공개 로비" },
{ "Pumpkin", "호박" },
{ "Rat", "쥐" },
{ "Rat ESP", "쥐 ESP" },
{ "Region", "지역" },
{ "Revive", "부활" },
{ "Radial Menu (Z)", "방사형 메뉴 (Z)" },
{ "Ritual Book", "의식서" },
{ "Rose", "장미" },
{ "Ritual Book ESP", "의식서 ESP" },
{ "Ritual Object ESP", "의식 물체 ESP" },
{ "Ritual Objects", "의식 물품" },
@@ -210,6 +220,7 @@ namespace DevourClient.Localization.Translations
{ "Rotton Food ESP", "썩은 음식 ESP" },
{ "Sam", "샘" },
{ "Shoot Player", "플레이어 쏘기" },
{ "Show Coordinates", "좌표 표시" },
{ "Skeleton ESP", "스켈레톤 ESP" },
{ "Slaughterhouse", "도살장" },
{ "SlaughterhouseFireEscapeDoor", "도축장 비상구" },
@@ -244,6 +255,11 @@ namespace DevourClient.Localization.Translations
{ "TV", "TV" },
{ "Teleport Keys", "열쇠 텔레포트" },
{ "Teleport to", "텔레포트" },
{ "TP Base", "기지 TP" },
{ "TP Altar", "제단 TP" },
{ "TP Basin", "대야 TP" },
{ "TP Fountain", "분수 TP" },
{ "Ticket", "티켓" },
{ "Town", "마을" },
{ "TownDoor", "마을 문" },
{ "TownDoor2", "마을 문2" },

View File

@@ -31,6 +31,7 @@ namespace DevourClient.Localization.Translations
{ "AzazelNathan", "Azazel-Nathan" },
{ "AzazelSam", "Azazel-Sam" },
{ "AzazelZara", "Azazel-Zara" },
{ "Barbed Wire", "Arame farpado" },
{ "Battery", "Bateria" },
{ "Battery ESP", "ESP bateria" },
{ "Big Flashlight", "Lanterna grande" },
@@ -45,7 +46,9 @@ namespace DevourClient.Localization.Translations
{ "Cake", "Bolo" },
{ "Cake ESP", "ESP bolo" },
{ "Carnival", "Carnaval" },
{ "Cherry Blossom", "Flor de cerejeira" },
{ "Clean Head ESP", "ESP cabeça limpa" },
{ "Collectables ESP", "ESP colecionáveis" },
{ "Clean The Fountains", "Limpar fontes" },
{ "CleanHead", "Cabeça limpa" },
{ "Client", "Cliente" },
@@ -119,6 +122,7 @@ namespace DevourClient.Localization.Translations
{ "Flashlight Color", "Cor da lanterna" },
{ "Fly", "Voar" },
{ "Fly Speed", "Velocidade voo" },
{ "Feather", "Pena" },
{ "Food", "Comida" },
{ "Force Start Game", "Forçar início" },
{ "Fountain", "Fonte" },
@@ -137,6 +141,7 @@ namespace DevourClient.Localization.Translations
{ "Hay", "Feno" },
{ "Hay ESP", "ESP feno" },
{ "Head", "Cabeça" },
{ "Horseshoe", "Ferradura" },
{ "Host", "Anfitrião" },
{ "Host Only", "Apenas host" },
{ "Infinite mirrors", "Espelhos infinitos" },
@@ -183,6 +188,7 @@ namespace DevourClient.Localization.Translations
{ "Network Info", "Info de rede" },
{ "Network Stats", "Estatísticas de rede" },
{ "Not connected", "Não conectado" },
{ "Patch", "Patch" },
{ "Pig", "Porco" },
{ "Pig ESP", "ESP porco" },
{ "PigExcrement", "Excremento de porco" },
@@ -194,12 +200,16 @@ namespace DevourClient.Localization.Translations
{ "Player ESP Color", "Cor ESP jogador" },
{ "Player Snapline", "Linha jogador" },
{ "Players", "Jogadores" },
{ "Present", "Presente" },
{ "Private Lobby", "Lobby privado" },
{ "Pumpkin", "Abóbora" },
{ "Rat", "Rato" },
{ "Rat ESP", "ESP rato" },
{ "Region", "Região" },
{ "Revive", "Reviver" },
{ "Radial Menu (Z)", "Menu radial (Z)" },
{ "Ritual Book", "Livro ritual" },
{ "Rose", "Rosa" },
{ "Ritual Book ESP", "ESP livro ritual" },
{ "Ritual Object ESP", "ESP objeto ritual" },
{ "Ritual Objects", "Objetos rituais" },
@@ -210,6 +220,7 @@ namespace DevourClient.Localization.Translations
{ "Rotton Food ESP", "ESP comida podre" },
{ "Sam", "Sam" },
{ "Shoot Player", "Atirar no jogador" },
{ "Show Coordinates", "Mostrar coordenadas" },
{ "Skeleton ESP", "ESP esqueleto" },
{ "Slaughterhouse", "Matadouro" },
{ "SlaughterhouseFireEscapeDoor", "Porta de incêndio do matadouro" },
@@ -244,6 +255,11 @@ namespace DevourClient.Localization.Translations
{ "TV", "Televisão" },
{ "Teleport Keys", "Teletransportar chaves" },
{ "Teleport to", "Teletransportar" },
{ "TP Base", "TP base" },
{ "TP Altar", "TP altar" },
{ "TP Basin", "TP bacia" },
{ "TP Fountain", "TP fonte" },
{ "Ticket", "Bilhete" },
{ "Town", "Cidade" },
{ "TownDoor", "Porta da cidade" },
{ "TownDoor2", "Porta da cidade 2" },

View File

@@ -31,6 +31,7 @@ namespace DevourClient.Localization.Translations
{ "AzazelNathan", "Azazel-Nathan" },
{ "AzazelSam", "Azazel-Sam" },
{ "AzazelZara", "Azazel-Zara" },
{ "Barbed Wire", "Колючая проволока" },
{ "Battery", "Батарея" },
{ "Battery ESP", "ESP батареи" },
{ "Big Flashlight", "Большой фонарик" },
@@ -45,7 +46,9 @@ namespace DevourClient.Localization.Translations
{ "Cake", "Торт" },
{ "Cake ESP", "ESP торта" },
{ "Carnival", "Карнавал" },
{ "Cherry Blossom", "Вишнёвый цвет" },
{ "Clean Head ESP", "ESP чистой головы" },
{ "Collectables ESP", "ESP коллекционных предметов" },
{ "Clean The Fountains", "Очистить фонтаны" },
{ "CleanHead", "Чистая голова" },
{ "Client", "Клиент" },
@@ -119,6 +122,7 @@ namespace DevourClient.Localization.Translations
{ "Flashlight Color", "Цвет фонарика" },
{ "Fly", "Полет" },
{ "Fly Speed", "Скорость полета" },
{ "Feather", "Перо" },
{ "Food", "Еда" },
{ "Force Start Game", "Принудительный старт" },
{ "Fountain", "Фонтан" },
@@ -137,6 +141,7 @@ namespace DevourClient.Localization.Translations
{ "Hay", "Сено" },
{ "Hay ESP", "ESP сена" },
{ "Head", "Голова" },
{ "Horseshoe", "Подкова" },
{ "Host", "Хост" },
{ "Host Only", "Только хост" },
{ "Infinite mirrors", "Бесконечные зеркала" },
@@ -183,6 +188,7 @@ namespace DevourClient.Localization.Translations
{ "Network Info", "Сетевая информация" },
{ "Network Stats", "Сетевая статистика" },
{ "Not connected", "Не подключено" },
{ "Patch", "Патч" },
{ "Pig", "Свинья" },
{ "Pig ESP", "ESP свиньи" },
{ "PigExcrement", "Свиной навоз" },
@@ -194,12 +200,16 @@ namespace DevourClient.Localization.Translations
{ "Player ESP Color", "Цвет ESP игрока" },
{ "Player Snapline", "Линия к игроку" },
{ "Players", "Игроки" },
{ "Present", "Подарок" },
{ "Private Lobby", "Приватное лобби" },
{ "Pumpkin", "Тыква" },
{ "Rat", "Крыса" },
{ "Rat ESP", "ESP крысы" },
{ "Region", "Регион" },
{ "Revive", "Воскресить" },
{ "Radial Menu (Z)", "Радиальное меню (Z)" },
{ "Ritual Book", "Ритуальная книга" },
{ "Rose", "Роза" },
{ "Ritual Book ESP", "ESP ритуальной книги" },
{ "Ritual Object ESP", "ESP ритуального предмета" },
{ "Ritual Objects", "Ритуальные предметы" },
@@ -210,6 +220,7 @@ namespace DevourClient.Localization.Translations
{ "Rotton Food ESP", "ESP гнилой еды" },
{ "Sam", "Сэм" },
{ "Shoot Player", "Стрелять в игрока" },
{ "Show Coordinates", "Показать координаты" },
{ "Skeleton ESP", "ESP скелета" },
{ "Slaughterhouse", "Бойня" },
{ "SlaughterhouseFireEscapeDoor", "Пожарная дверь бойни" },
@@ -244,6 +255,11 @@ namespace DevourClient.Localization.Translations
{ "TV", "Телевизор" },
{ "Teleport Keys", "Телепорт ключей" },
{ "Teleport to", "Телепорт" },
{ "TP Base", "ТП база" },
{ "TP Altar", "ТП алтарь" },
{ "TP Basin", "ТП чаша" },
{ "TP Fountain", "ТП фонтан" },
{ "Ticket", "Билет" },
{ "Town", "Город" },
{ "TownDoor", "Дверь города" },
{ "TownDoor2", "Дверь города 2" },

View File

@@ -31,6 +31,7 @@ namespace DevourClient.Localization.Translations
{ "AzazelNathan", "Azazel-Nathan" },
{ "AzazelSam", "Azazel-Sam" },
{ "AzazelZara", "Azazel-Zara" },
{ "Barbed Wire", "Alambre de púas" },
{ "Battery", "Batería" },
{ "Battery ESP", "ESP batería" },
{ "Big Flashlight", "Linterna grande" },
@@ -45,7 +46,9 @@ namespace DevourClient.Localization.Translations
{ "Cake", "Pastel" },
{ "Cake ESP", "ESP pastel" },
{ "Carnival", "Carnaval" },
{ "Cherry Blossom", "Flor de cerezo" },
{ "Clean Head ESP", "ESP cabeza limpia" },
{ "Collectables ESP", "ESP coleccionables" },
{ "Clean The Fountains", "Limpiar fuentes" },
{ "CleanHead", "Cabeza limpia" },
{ "Client", "Cliente" },
@@ -119,6 +122,7 @@ namespace DevourClient.Localization.Translations
{ "Flashlight Color", "Color linterna" },
{ "Fly", "Volar" },
{ "Fly Speed", "Velocidad vuelo" },
{ "Feather", "Pluma" },
{ "Food", "Comida" },
{ "Force Start Game", "Forzar inicio" },
{ "Fountain", "Fuente" },
@@ -137,6 +141,7 @@ namespace DevourClient.Localization.Translations
{ "Hay", "Heno" },
{ "Hay ESP", "ESP heno" },
{ "Head", "Cabeza" },
{ "Horseshoe", "Herradura" },
{ "Host", "Anfitrión" },
{ "Host Only", "Solo anfitrión" },
{ "Infinite mirrors", "Espejos infinitos" },
@@ -183,6 +188,7 @@ namespace DevourClient.Localization.Translations
{ "Network Info", "Info de red" },
{ "Network Stats", "Estadísticas de red" },
{ "Not connected", "No conectado" },
{ "Patch", "Parche" },
{ "Pig", "Cerdo" },
{ "Pig ESP", "ESP cerdo" },
{ "PigExcrement", "Excremento de cerdo" },
@@ -194,12 +200,16 @@ namespace DevourClient.Localization.Translations
{ "Player ESP Color", "Color ESP jugador" },
{ "Player Snapline", "Línea jugador" },
{ "Players", "Jugadores" },
{ "Present", "Regalo" },
{ "Private Lobby", "Lobby privado" },
{ "Pumpkin", "Calabaza" },
{ "Rat", "Rata" },
{ "Rat ESP", "ESP rata" },
{ "Region", "Región" },
{ "Revive", "Revivir" },
{ "Radial Menu (Z)", "Menú radial (Z)" },
{ "Ritual Book", "Libro ritual" },
{ "Rose", "Rosa" },
{ "Ritual Book ESP", "ESP libro ritual" },
{ "Ritual Object ESP", "ESP objeto ritual" },
{ "Ritual Objects", "Objetos rituales" },
@@ -210,6 +220,7 @@ namespace DevourClient.Localization.Translations
{ "Rotton Food ESP", "ESP comida podrida" },
{ "Sam", "Sam" },
{ "Shoot Player", "Disparar al jugador" },
{ "Show Coordinates", "Mostrar coordenadas" },
{ "Skeleton ESP", "ESP esqueleto" },
{ "Slaughterhouse", "Matadero" },
{ "SlaughterhouseFireEscapeDoor", "Puerta de escape de matadero" },
@@ -244,6 +255,11 @@ namespace DevourClient.Localization.Translations
{ "TV", "Televisión" },
{ "Teleport Keys", "Teletransportar llaves" },
{ "Teleport to", "Teletransportar" },
{ "TP Base", "TP base" },
{ "TP Altar", "TP altar" },
{ "TP Basin", "TP pila" },
{ "TP Fountain", "TP fuente" },
{ "Ticket", "Boleto" },
{ "Town", "Pueblo" },
{ "TownDoor", "Puerta de pueblo" },
{ "TownDoor2", "Puerta de pueblo 2" },

View File

@@ -31,6 +31,7 @@ namespace DevourClient.Localization.Translations
{ "AzazelNathan", "AzazelNathan" },
{ "AzazelSam", "AzazelSam" },
{ "AzazelZara", "AzazelZara" },
{ "Barbed Wire", "Dây thép gai" },
{ "Battery", "Pin" },
{ "Battery ESP", "Pin ESP" },
{ "Big Flashlight", "Đèn pin lớn" },
@@ -45,7 +46,9 @@ namespace DevourClient.Localization.Translations
{ "Cake", "Bánh" },
{ "Cake ESP", "Bánh ESP" },
{ "Carnival", "Carnival" },
{ "Cherry Blossom", "Hoa anh đào" },
{ "Clean Head ESP", "Đầu sạch ESP" },
{ "Collectables ESP", "ESP đồ sưu tập" },
{ "Clean The Fountains", "Làm sạch đài phun nước" },
{ "CleanHead", "CleanHead" },
{ "Client", "Client" },
@@ -119,6 +122,7 @@ namespace DevourClient.Localization.Translations
{ "Flashlight Color", "Màu đèn pin" },
{ "Fly", "Bay" },
{ "Fly Speed", "Tốc độ bay" },
{ "Feather", "Lông vũ" },
{ "Food", "Thức ăn" },
{ "Force Start Game", "Bắt buộc bắt đầu game" },
{ "Fountain", "Đài phun nước" },
@@ -137,6 +141,7 @@ namespace DevourClient.Localization.Translations
{ "Hay", "Rơm" },
{ "Hay ESP", "Rơm ESP" },
{ "Head", "Đầu" },
{ "Horseshoe", "Móng ngựa" },
{ "Host", "Chủ phòng" },
{ "Host Only", "Chỉ chủ phòng" },
{ "Infinite mirrors", "Gương vô hạn" },
@@ -183,6 +188,7 @@ namespace DevourClient.Localization.Translations
{ "Network Info", "Thông tin mạng" },
{ "Network Stats", "Thống kê mạng" },
{ "Not connected", "Chưa kết nối" },
{ "Patch", "Miếng vá" },
{ "Pig", "Lợn" },
{ "Pig ESP", "Lợn ESP" },
{ "PigExcrement", "PigExcrement" },
@@ -194,12 +200,16 @@ namespace DevourClient.Localization.Translations
{ "Player ESP Color", "Màu người chơi ESP" },
{ "Player Snapline", "Đường kẻ người chơi" },
{ "Players", "Người chơi" },
{ "Present", "Quà tặng" },
{ "Private Lobby", "Phòng chờ riêng" },
{ "Pumpkin", "Bí ngô" },
{ "Rat", "Chuột" },
{ "Rat ESP", "Chuột ESP" },
{ "Region", "Khu vực" },
{ "Revive", "Hồi sinh" },
{ "Radial Menu (Z)", "Menu vòng tròn (Z)" },
{ "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ễ" },
@@ -210,6 +220,7 @@ namespace DevourClient.Localization.Translations
{ "Rotton Food ESP", "Thức ăn thối ESP" },
{ "Sam", "Sam" },
{ "Shoot Player", "Bắn người chơi" },
{ "Show Coordinates", "Hiển thị tọa độ" },
{ "Skeleton ESP", "Bộ xương ESP" },
{ "Slaughterhouse", "Slaughterhouse" },
{ "SlaughterhouseFireEscapeDoor", "SlaughterhouseFireEscapeDoor" },
@@ -244,6 +255,11 @@ namespace DevourClient.Localization.Translations
{ "TV", "TV" },
{ "Teleport Keys", "Phím dịch chuyển" },
{ "Teleport to", "Dịch chuyển đến" },
{ "TP Base", "TP căn cứ" },
{ "TP Altar", "TP bàn thờ" },
{ "TP Basin", "TP bể nước" },
{ "TP Fountain", "TP đài phun nước" },
{ "Ticket", "Vé" },
{ "Town", "Town" },
{ "TownDoor", "TownDoor" },
{ "TownDoor2", "TownDoor2" },

View File

@@ -8,17 +8,13 @@ using UnityEngine;
namespace DevourClient.Network
{
/// <summary>
/// Lobby creation and management class
/// </summary>
// Lobby creation and management class
public static class LobbyManager
{
/// <summary>
/// Create game lobby/room
/// </summary>
/// <param name="regionCode">Region code (e.g.: "eu", "us", "asia", "usw", "sa", "jp", "au", "ru", "in", "kr")</param>
/// <param name="lobbyLimit">Maximum player limit (1-64)</param>
/// <param name="isPrivate">Whether this is a private room</param>
// Create game lobby/room.
// regionCode: Region code (e.g.: "eu", "us", "asia", "usw", "sa", "jp", "au", "ru", "in", "kr").
// lobbyLimit: Maximum player limit (1-64).
// isPrivate: Whether this is a private room.
public static void CreateLobby(string regionCode, int lobbyLimit, bool isPrivate)
{
try
@@ -96,9 +92,6 @@ namespace DevourClient.Network
}
}
/// <summary>
/// Get PhotonRegion object for specified region
/// </summary>
private static PhotonRegion GetPhotonRegion(string regionCode)
{
try
@@ -113,9 +106,6 @@ namespace DevourClient.Network
}
}
/// <summary>
/// Find Menu controller
/// </summary>
private static Il2CppHorror.Menu FindMenuController()
{
try
@@ -142,9 +132,6 @@ namespace DevourClient.Network
}
}
/// <summary>
/// Check if in game
/// </summary>
private static bool IsInGame()
{
try
@@ -159,9 +146,6 @@ namespace DevourClient.Network
}
}
/// <summary>
/// Force start lobby game (host only)
/// </summary>
public static void ForceLobbyStart()
{
try
@@ -189,9 +173,6 @@ namespace DevourClient.Network
}
}
/// <summary>
/// Show message box
/// </summary>
public static void ShowMessageBox(string message)
{
try

View File

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

View File

@@ -15,6 +15,7 @@ namespace DevourClient.Settings
public static Color azazel_esp_color = new Color(1.00f, 0.00f, 0.00f, 1);
public static float speed = 1f;
public static KeyCode flyKey = KeyCode.None;
public static KeyCode teleportKey = KeyCode.B;
public static Vector2 itemsScrollPosition = Vector2.zero;
public static Vector2 rituelObjectsScrollPosition = Vector2.zero;
public static Vector2 stuffsScrollPosition = Vector2.zero;

View File

@@ -42,10 +42,10 @@ Everything about spoofing ehre (steam name, server name, level...) will persist
* Azazel ESP (with a home made color picker)
* Azazel Skeleton ESP
* Azazel snapline (with a home made color picker)
* 10 languages supported (English, 简体中文, Français, Deutsch, Español, 日本語, 한국어, Русский, Português, Italiano) with in-game language switcher in Misc tab. Check it in misc table!
* Item ESP (with multi-language translation)
* Item ESP (with multi-language translation) (Now you can specify the display of a single item)
* Demon ESP (with multi-language translation)
* Goat/Rat ESP (with multi-language translation)
* Collection ESP (Collected items of 25 per map, similar to roses, horseshoes, etc)
* TP all the items to your position ! (thanks to [@jadis0x](https://github.com/jadis0x))
* Spawn any item/entity to your position
* Walk in the lobby
@@ -53,6 +53,10 @@ Everything about spoofing ehre (steam name, server name, level...) will persist
* Fullbright
* Infinite mirrors (Manor update)
* Switch between realms (Manor update)
* Farm Items x5 (host only)
* recall function (Inspired by League of Legends, now you can use button B to teleport to the hidden place)
* 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)
## English Installation Tutorial
@@ -67,28 +71,43 @@ For my French fellas out there, 1tap2times made a French video tutorial for the
For my German friends, KiwiJuice02 made a german video tutorial right here : [link](https://www.youtube.com/watch?v=Ntablvo6y-I)<br>
In order to get all of this working you need to generate the DevourClient.dll file by building the source code.<br>
0. Install [.NET 6 SDK and runtime](https://dotnet.microsoft.com/en-us/download/dotnet/6.0).
1. [Build the cheat from source](https://github.com/ALittlePatate/DevourClient#building-from-source).
2. Put the DevourClient.dll file located in `DevourClient\bin\Release\net6.0` inside `C:\Program Files (x86)\Steam\steamapps\common\Devour\Mods` folder.
3. Start the game, now you have successfully installed DevourClient. Use INSERT to open the menu
## English Installation Guide
If you just want to install this plugin and use it directly in the game:
1. Install the [.NET 6](https://dotnet.microsoft.com/en-us/download/dotnet/6.0) runtime environment
2. Install [MelonLoader](https://github.com/LavaGang/MelonLoader/releases)
There are no version restrictions, just try to choose the latest version. After opening the MelonLoader page, click on Devour to enter the installation interface. Keep all default settings, no need to check or modify any other options, then click Install to proceed
3. Install the DLL file → Download the latest DLL file from the releases section of this project, then add this file to the Mods folder in your Devour installation directory (If you don't know the directory location, you can right-click Devour in Steam, select "Manage" → "Browse local files")
4. Run Devour → If the installation is successful, you will see a Windows window showing various installation prompts, then the game will automatically launch. Press the 'INSERT' or 'INS' key to open and close the DevourClient window
**Note:** Some computers may show a "fatal error" message after installing MelonLoader. I haven't encountered this issue myself, but the main cause is usually that files extracted to the MelonLoader folder in the Devour root directory during the MelonLoader installation process have problems. Simple solutions include: (1) Copy the MelonLoader folder from another computer with the same system and bit-width (x86, x32), then paste it directly into your computer. (2) Completely delete the MelonLoader folder and reinstall.
**Note:** Some computers may display "0 mod" when loading. Please check if your DLL file is working correctly and ensure that you have placed the DLL file in the Devour "Mods" folder.
If you want to modify and develop the code, please follow the [Building from source](#building-from-source) steps below.
## 中文安装指南
如果你只是想要安装这个插件,直接在游戏里使用的话
1、安装 .net 6 的运行环境 → (https://dotnet.microsoft.com/en-us/download/dotnet/6.0)
1、安装 [.net 6](https://dotnet.microsoft.com/en-us/download/dotnet/6.0) 的运行环境
2、安装melonloader → (https://github.com/LavaGang/MelonLoader/releases)
2、安装 [melonloader](https://github.com/LavaGang/MelonLoader/releases)
版本无限制尽量选择新版即可。打开melonloader页面后点击devour进入安装界面全部默认即可无需勾选或修改其他选项点击install进行安装安装过程中可能需要vpn支持
3、安装dll文件 → 从本项目的release中下载最新的dll文件然后将此文件添加到你的devour的安装目录中的mods文件夹里不知道目录的情况下可以在steam中右键devour选择“管理”-“浏览本地文件”即可)
4、运行devour → 如果安装成功你会看到一个windows窗口进行各类安装提示后自动进入游戏。点击insert键即可打开和关闭devourclient窗口
ps:有些电脑在安装melonloader之后会出现fatal error的提示这个我目前并没有碰到过。但是出现这个提示的主要原因基本是melonloader安装过程中提取到devour根目录的melonloader文件夹里的文件出现了问题比较简单的解决办法就是1在别人的同系统同位宽x86x32的电脑里拷贝出来他的melonloader文件夹然后直接粘贴到自己的电脑里。2将melonloader文件夹完全删除然后重装。(3)在直到游戏完全运行菜单正常工作之前保持VPN线路通畅。
注意:有些电脑在安装melonloader之后会出现fatal error的提示这个我目前并没有碰到过。但是出现这个提示的主要原因基本是melonloader安装过程中提取到devour根目录的melonloader文件夹里的文件出现了问题比较简单的解决办法就是1在别人的同系统同位宽x86x32的电脑里拷贝出来他的melonloader文件夹然后直接粘贴到自己的电脑里。2将melonloader文件夹完全删除然后重装。(3)在直到游戏完全运行菜单正常工作之前保持VPN线路通畅。
如果你想要对代码进行修改和开发请按照下面的”building from source“的步骤逐步进行
注意:如果在加载时提示 “0 mod”请检查你的dll文件是否正常是否已经将dll文件放置到devour的“mods”文件夹中。
如果你想要对代码进行修改和开发,请按照下面的 [building from source](#building-from-source) 的步骤,逐步进行
## Uninstallation