Compare commits
263 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
a76b3d27e7
|
|||
|
|
f8ce7336f6 | ||
| e720da278b | |||
|
|
e01dd26d6f | ||
|
|
ccffaf352f | ||
|
|
3c0d57e308 | ||
|
|
a5aed348fd | ||
|
|
b450fa1cbf | ||
|
|
7a2815681c | ||
|
|
9f93c16dc3 | ||
|
|
e52f29f702 | ||
|
|
2ce4fea684 | ||
|
|
83ffed3c86 | ||
|
|
d7597b055f | ||
|
|
360aa1061c | ||
|
|
aa0eb090ba | ||
|
|
64e6fd785d | ||
|
|
cfb3235a97 | ||
|
|
84fc72ab59 | ||
|
|
a9c2611427 | ||
|
|
8280ed6362 | ||
|
|
b8ad6a1625 | ||
|
47538a7483
|
|||
|
15d1a91806
|
|||
|
|
f32e3b0eb7 | ||
|
283eee124c
|
|||
|
2308b63699
|
|||
|
|
42ccb45e23 | ||
|
|
26dfb5fa23 | ||
|
|
49a5b7f3ab | ||
|
|
b22b56393a | ||
|
|
9a9cb7a6f5 | ||
|
55ff1074fb
|
|||
|
ebfb23588e
|
|||
|
ce6ed66275
|
|||
|
fd79fb2b19
|
|||
|
|
9ea683f29a | ||
|
|
788ffdac9f | ||
|
|
e1c529f0ed | ||
|
|
9d12c57588 | ||
|
|
620828d4a0 | ||
|
|
0e461120eb | ||
|
17569ee1ed
|
|||
|
|
1efd4bd1b0 | ||
|
|
c50f9263f7 | ||
|
|
61adb2030c | ||
|
|
486301f83a | ||
|
|
27c9e7f83a | ||
|
|
1d67349a38 | ||
|
|
c4187bdb65 | ||
|
0c7158bdca
|
|||
|
25622d70ec
|
|||
|
|
f56b26cdb3 | ||
|
f732234e7a
|
|||
|
9fbabb2de1
|
|||
|
|
7aeacb2991 | ||
|
|
c1c11265a5 | ||
|
8793b6b6e2
|
|||
|
038c9add25
|
|||
|
158afd9bd2
|
|||
|
|
157deabf45 | ||
|
7080c72eec
|
|||
|
|
7b20b88b57 | ||
|
350f92ea6e
|
|||
|
b706f3be7b
|
|||
|
422b3a69c6
|
|||
|
faae081b30
|
|||
|
3e00d483ef
|
|||
|
5eb20c0d0b
|
|||
|
|
a83cba0651 | ||
|
94031f346c
|
|||
|
9cf481e196
|
|||
|
1ee1c78b97
|
|||
|
cac4c63dad
|
|||
|
27e6956f2d
|
|||
|
666529bbc0
|
|||
|
|
ff3eea37bb | ||
|
|
7d581257df | ||
|
1f251987b1
|
|||
|
|
b459b310bb | ||
|
a72d36cb5b
|
|||
|
f0907c07ff
|
|||
|
56c3bcd5be
|
|||
|
|
1807f44bf1 | ||
|
|
b051282c55 | ||
|
|
f4c6ce980f | ||
|
b3987980e6
|
|||
|
27475bbd71
|
|||
|
6c8e750c05
|
|||
|
a94a3df0eb
|
|||
|
8c94e12023
|
|||
|
|
1eb7b1f9ed | ||
|
f492715f3c
|
|||
|
cb7dc3ba15
|
|||
|
|
b2ee6eee89 | ||
|
98ed98371e
|
|||
|
261f098f2d
|
|||
|
886dc8d95b
|
|||
|
dc5ddcc2a3
|
|||
|
|
5a8f937203 | ||
|
|
e1cca375b1 | ||
|
|
11381bdebc | ||
|
|
19234b3c66 | ||
|
|
2d337d4e9e | ||
|
f6cfbc21cb
|
|||
|
|
7f046e5446 | ||
|
|
8e76055757 | ||
|
|
933664de8d | ||
|
|
26a9607853 | ||
|
|
fcf6ae16dc | ||
|
|
56dfc1295a | ||
|
d3a97f090c
|
|||
|
c873e60617
|
|||
|
|
0dec95a512 | ||
|
|
3000f18eeb | ||
|
|
929aaeacd0 | ||
|
|
ea9a4e13ab | ||
|
|
7550443ead | ||
|
|
5c14210fd4 | ||
|
|
81dce606f1 | ||
|
|
d1151d5bc1 | ||
|
|
8c50e83a7a | ||
|
|
26eca35097 | ||
|
|
91333aae6e | ||
|
ee4f2bf31b
|
|||
|
90bc75c7f8
|
|||
|
4230bcd431
|
|||
|
c53c2aca0f
|
|||
|
51ce511183
|
|||
|
0902dee605
|
|||
|
c06ad2363e
|
|||
|
734f7ced0a
|
|||
|
64c6b4129a
|
|||
|
2676c89989
|
|||
|
8bbdbd7027
|
|||
|
3d88b189a6
|
|||
|
d633f4e2fb
|
|||
|
8a1cf5e96b
|
|||
|
|
22b2e583f7 | ||
|
6532b34d7a
|
|||
|
f0d949c274
|
|||
|
0fcb62ee6d
|
|||
|
|
735b9d61f7 | ||
|
|
6e1ae6e71d | ||
|
|
1ef0e76cab | ||
|
|
1fc001577d | ||
|
|
0cf787f11e | ||
|
|
218fe9c2d7 | ||
|
|
5d2a26bc5d | ||
|
|
30a56b01e7 | ||
|
|
733759634a | ||
|
|
f269dbeb1d | ||
|
|
5736ade142 | ||
|
|
d6c66dcc6f | ||
|
|
837dccc822 | ||
|
|
5a5d05eac6 | ||
|
|
e4114d4575 | ||
|
|
97a04c606b | ||
|
|
0ac8c6d8fe | ||
|
|
25b8b21379 | ||
|
|
375a7e7cd7 | ||
|
|
5f91d5e609 | ||
|
|
cddcb3f833 | ||
|
|
1a306e5ee1 | ||
|
|
73aa8806ad | ||
|
|
d8714b627b | ||
|
|
34fea1a131 | ||
|
|
53fda7a510 | ||
|
|
b33d6ec41d | ||
|
|
39d5840a45 | ||
|
|
180b454176 | ||
|
|
8022eca3ae | ||
|
|
775b003b29 | ||
|
|
395a4d2d86 | ||
|
|
76c324780e | ||
|
|
863b3e78a2 | ||
|
|
a8bf48f31a | ||
|
|
3a773ee9a2 | ||
|
|
0c42c0c2a3 | ||
|
|
4be8fe52bf | ||
|
|
76adb12c32 | ||
|
|
8b816d39cb | ||
|
|
e3cf689a8d | ||
|
|
1209383e43 | ||
|
|
91c316b708 | ||
|
|
b1df82035c | ||
|
|
d21225efa8 | ||
|
|
131a47b0cd | ||
|
|
7609900c85 | ||
|
|
8f7dbe99fb | ||
|
|
1cee28dd6c | ||
|
|
2fa3a4ac17 | ||
|
|
92aa684320 | ||
|
|
3ebe60224d | ||
|
|
6dedffd8c8 | ||
|
|
59f290773f | ||
|
|
6fb812fce2 | ||
|
|
a62d93d96b | ||
|
|
e640b7b980 | ||
|
|
117598cfff | ||
|
|
123e09e079 | ||
|
|
aca1424b9b | ||
|
|
d0f685894c | ||
|
|
50d7c6f9ee | ||
|
|
a6d88f6273 | ||
|
|
c17fedef14 | ||
|
|
f43aef2deb | ||
|
|
0f04804290 | ||
|
|
48cd33e6df | ||
|
|
1939d7435a | ||
|
|
92dc6645e5 | ||
|
|
9684889d3e | ||
|
|
1bd7799380 | ||
|
|
9614e68794 | ||
|
|
0f05ceb5b8 | ||
|
|
b7b3fff1dc | ||
|
|
fc31364dee | ||
|
|
dc5d2b4ef5 | ||
|
|
b08c2e9f4a | ||
|
|
4cdf0f49f2 | ||
|
|
2ab3b2c15f | ||
|
|
6f4deb0d84 | ||
|
|
952779d6f3 | ||
|
|
c6e358a56e | ||
|
|
ff6820d201 | ||
|
|
bd94736ff6 | ||
|
|
84bfdf5940 | ||
|
|
b815c4dee4 | ||
|
|
9559f21885 | ||
|
|
5a858bea23 | ||
|
|
f7253d6ac5 | ||
|
|
52e7f7648a | ||
|
|
c5432f7bc8 | ||
|
|
aff5e80549 | ||
|
|
3409b97c6f | ||
|
|
101f15864e | ||
|
|
57e0f872ec | ||
|
|
bdc4af6742 | ||
|
|
b0b6a92600 | ||
|
|
24c78c366e | ||
|
|
375d47af6a | ||
|
|
4724506017 | ||
|
|
0ac4c99a8e | ||
|
|
b99350a897 | ||
|
|
da117c754c | ||
|
|
fe6ab58fd6 | ||
|
|
dbb597f03b | ||
|
|
2b9be131f6 | ||
|
|
b97933a0f8 | ||
|
|
e9efd3af9c | ||
|
|
a7e3ee435e | ||
|
|
06c6b1e334 | ||
|
|
4a2515e238 | ||
|
|
e1117d68e1 | ||
|
|
7340c53813 | ||
|
|
f8e57df71d | ||
|
|
0bee338e79 | ||
|
|
20e598c569 | ||
|
|
8b17b26353 | ||
|
|
7587cffca4 | ||
|
|
4df7828b9b | ||
|
|
dcb9407aff | ||
|
|
a4abceb466 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,5 +1,6 @@
|
|||||||
#Visual studio stuff
|
#Visual studio stuff
|
||||||
.vs
|
.vs
|
||||||
.git
|
.git
|
||||||
|
DevourClient/DevourClient.csproj
|
||||||
DevourClient/bin
|
DevourClient/bin
|
||||||
DevourClient/obj
|
DevourClient/obj
|
||||||
@@ -1,37 +1,25 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio Version 16
|
# Visual Studio Version 17
|
||||||
VisualStudioVersion = 16.0.28729.10
|
VisualStudioVersion = 17.1.32407.343
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DevourClient", "DevourClient\DevourClient.csproj", "{87349803-31DC-462A-87A3-677CD23AFBA7}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DevourClient", "DevourClient\DevourClient.csproj", "{87349803-31DC-462A-87A3-677CD23AFBA7}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
Debug|Mixed Platforms = Debug|Mixed Platforms
|
|
||||||
Debug|x64 = Debug|x64
|
|
||||||
Release|Any CPU = Release|Any CPU
|
Release|Any CPU = Release|Any CPU
|
||||||
Release|Mixed Platforms = Release|Mixed Platforms
|
|
||||||
Release|x64 = Release|x64
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{87349803-31DC-462A-87A3-677CD23AFBA7}.Debug|Any CPU.ActiveCfg = Debug|x64
|
{87349803-31DC-462A-87A3-677CD23AFBA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{87349803-31DC-462A-87A3-677CD23AFBA7}.Debug|Any CPU.Build.0 = Debug|x64
|
{87349803-31DC-462A-87A3-677CD23AFBA7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{87349803-31DC-462A-87A3-677CD23AFBA7}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
|
{87349803-31DC-462A-87A3-677CD23AFBA7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{87349803-31DC-462A-87A3-677CD23AFBA7}.Debug|Mixed Platforms.Build.0 = Debug|x64
|
{87349803-31DC-462A-87A3-677CD23AFBA7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{87349803-31DC-462A-87A3-677CD23AFBA7}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{87349803-31DC-462A-87A3-677CD23AFBA7}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{87349803-31DC-462A-87A3-677CD23AFBA7}.Release|Any CPU.ActiveCfg = Release|x64
|
|
||||||
{87349803-31DC-462A-87A3-677CD23AFBA7}.Release|Any CPU.Build.0 = Release|x64
|
|
||||||
{87349803-31DC-462A-87A3-677CD23AFBA7}.Release|Mixed Platforms.ActiveCfg = Release|x64
|
|
||||||
{87349803-31DC-462A-87A3-677CD23AFBA7}.Release|Mixed Platforms.Build.0 = Release|x64
|
|
||||||
{87349803-31DC-462A-87A3-677CD23AFBA7}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{87349803-31DC-462A-87A3-677CD23AFBA7}.Release|x64.Build.0 = Release|x64
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {99B5936A-A0A9-48E0-98C4-105DAEB535C3}
|
SolutionGuid = {CC319521-F66A-4BE0-9D8F-BD285A35C847}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
|||||||
1776
DevourClient/ClientMain.cs
Normal file
1776
DevourClient/ClientMain.cs
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,105 +1,15 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
<Platform Condition=" '$(Platform)' == '' ">x64</Platform>
|
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||||
<ProjectGuid>{87349803-31DC-462A-87A3-677CD23AFBA7}</ProjectGuid>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
<OutputType>Library</OutputType>
|
<OutputType>Library</OutputType>
|
||||||
<RootNamespace>DevourClient</RootNamespace>
|
|
||||||
<AssemblyName>DevourClient</AssemblyName>
|
|
||||||
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
|
||||||
<FileAlignment>512</FileAlignment>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
<WarningLevel>0</WarningLevel>
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<Optimize>false</Optimize>
|
|
||||||
<OutputPath>bin\Debug\</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
<WarningLevel>0</WarningLevel>
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<OutputPath>bin\Release\</OutputPath>
|
|
||||||
<DefineConstants>TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
</Project>
|
||||||
<Reference Include="0Harmony, Version=2.9.0.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<SpecificVersion>False</SpecificVersion>
|
|
||||||
<HintPath>D:\Jeux\steamapps\common\Devour\MelonLoader\0Harmony.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Assembly-CSharp">
|
|
||||||
<HintPath>D:\Jeux\steamapps\common\Devour\MelonLoader\Managed\Assembly-CSharp.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="bolt, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<SpecificVersion>False</SpecificVersion>
|
|
||||||
<HintPath>D:\Jeux\steamapps\common\Devour\MelonLoader\Managed\bolt.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="bolt.user, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<SpecificVersion>False</SpecificVersion>
|
|
||||||
<HintPath>D:\Jeux\steamapps\common\Devour\MelonLoader\Managed\bolt.user.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Il2Cppmscorlib">
|
|
||||||
<HintPath>D:\Jeux\steamapps\common\Devour\MelonLoader\Managed\Il2Cppmscorlib.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="MelonLoader">
|
|
||||||
<HintPath>D:\Jeux\steamapps\common\Devour\MelonLoader\MelonLoader.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Opsive.UltimateCharacterController, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<SpecificVersion>False</SpecificVersion>
|
|
||||||
<HintPath>D:\Jeux\steamapps\common\Devour\MelonLoader\Managed\Opsive.UltimateCharacterController.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="PresentationCore" />
|
|
||||||
<Reference Include="UnhollowerBaseLib">
|
|
||||||
<HintPath>D:\Jeux\steamapps\common\Devour\MelonLoader\Dependencies\Il2CppAssemblyGenerator\Il2CppAssemblyUnhollower\UnhollowerBaseLib.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="UnhollowerRuntimeLib">
|
|
||||||
<HintPath>D:\Jeux\steamapps\common\Devour\MelonLoader\Dependencies\Il2CppAssemblyGenerator\Il2CppAssemblyUnhollower\UnhollowerRuntimeLib.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="UnityEngine">
|
|
||||||
<HintPath>D:\Jeux\steamapps\common\Devour\MelonLoader\Managed\UnityEngine.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="UnityEngine.CoreModule">
|
|
||||||
<HintPath>D:\Jeux\steamapps\common\Devour\MelonLoader\Managed\UnityEngine.CoreModule.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="UnityEngine.HotReloadModule">
|
|
||||||
<HintPath>D:\Jeux\steamapps\common\Devour\MelonLoader\Managed\UnityEngine.HotReloadModule.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="UnityEngine.IMGUIModule">
|
|
||||||
<HintPath>D:\Jeux\steamapps\common\Devour\MelonLoader\Managed\UnityEngine.IMGUIModule.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="UnityEngine.InputLegacyModule, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<SpecificVersion>False</SpecificVersion>
|
|
||||||
<HintPath>D:\Jeux\steamapps\common\Devour\MelonLoader\Managed\UnityEngine.InputLegacyModule.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="UnityEngine.InputModule">
|
|
||||||
<HintPath>D:\Jeux\steamapps\common\Devour\MelonLoader\Managed\UnityEngine.InputModule.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="UnityEngine.UI, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<SpecificVersion>False</SpecificVersion>
|
|
||||||
<HintPath>D:\Jeux\steamapps\common\Devour\MelonLoader\Managed\UnityEngine.UI.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="WindowsBase" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<AppDesigner Include="Properties\" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Compile Include="Hacks\Misc.cs" />
|
|
||||||
<Compile Include="Hacks\Unlock.cs" />
|
|
||||||
<Compile Include="Helpers\GUIHelper.cs" />
|
|
||||||
<Compile Include="Helpers\StateHelper.cs" />
|
|
||||||
<Compile Include="Hooks\Hooks.cs" />
|
|
||||||
<Compile Include="MelonMain.cs" />
|
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
|
||||||
<Compile Include="Settings\Settings.cs" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
|
||||||
</Project>
|
|
||||||
|
|||||||
@@ -1,154 +1,549 @@
|
|||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using MelonLoader;
|
using MelonLoader;
|
||||||
using UnityEngine.UI;
|
using UnityEngine.UI;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
using DevourClient.Helpers;
|
||||||
namespace DevourClient.Hacks
|
using System.Linq;
|
||||||
{
|
using System.Collections.Generic;
|
||||||
public class Misc
|
using Il2CppOpsive.UltimateCharacterController.Character;
|
||||||
{
|
using Il2CppPhoton.Bolt;
|
||||||
public static void Fly(float speed) //normal speed 0.5f
|
|
||||||
{
|
namespace DevourClient.Hacks
|
||||||
NolanBehaviour Nolan = UnityEngine.Object.FindObjectOfType<NolanBehaviour>();
|
{
|
||||||
Vector3 PlayerAngles = Nolan.transform.position;
|
public class Misc
|
||||||
|
{
|
||||||
if (Input.GetKey(KeyCode.Space))
|
public static void Fly(float speed) //normal speed 5f
|
||||||
{
|
{
|
||||||
PlayerAngles.y += speed;
|
Il2Cpp.NolanBehaviour nb = Player.GetPlayer();
|
||||||
}
|
Vector3 pos = nb.transform.position;
|
||||||
if (Input.GetKey(KeyCode.LeftShift))
|
Il2Cpp.RewiredHelpers helpers = UnityEngine.Object.FindObjectOfType<Il2Cpp.RewiredHelpers>();
|
||||||
{
|
if (Input.GetKey((KeyCode)System.Enum.Parse(typeof(KeyCode), helpers.GetCurrentBinding("Move Up").ToString().Replace(" ", ""))))
|
||||||
PlayerAngles.y -= speed;
|
{
|
||||||
}
|
pos += nb.transform.forward * speed * Time.deltaTime;
|
||||||
if (Input.GetKey(KeyCode.LeftArrow))
|
}
|
||||||
{
|
if (Input.GetKey((KeyCode)System.Enum.Parse(typeof(KeyCode), helpers.GetCurrentBinding("Move Down").ToString().Replace(" ", ""))))
|
||||||
PlayerAngles.x -= speed;
|
{
|
||||||
}
|
pos += -nb.transform.forward * speed * Time.deltaTime;
|
||||||
if (Input.GetKey(KeyCode.RightArrow))
|
}
|
||||||
{
|
if (Input.GetKey((KeyCode)System.Enum.Parse(typeof(KeyCode), helpers.GetCurrentBinding("Move Right").ToString().Replace(" ", ""))))
|
||||||
PlayerAngles.x += speed;
|
{
|
||||||
}
|
pos += nb.transform.right * speed * Time.deltaTime;
|
||||||
if (Input.GetKey(KeyCode.UpArrow))
|
}
|
||||||
{
|
if (Input.GetKey((KeyCode)System.Enum.Parse(typeof(KeyCode), helpers.GetCurrentBinding("Move Left").ToString().Replace(" ", ""))))
|
||||||
PlayerAngles.z += speed;
|
{
|
||||||
}
|
pos += -nb.transform.right * speed * Time.deltaTime;
|
||||||
if (Input.GetKey(KeyCode.DownArrow))
|
}
|
||||||
{
|
if (Input.GetKey(KeyCode.Space))
|
||||||
PlayerAngles.z -= speed;
|
{
|
||||||
}
|
pos += nb.transform.up * speed * Time.deltaTime;
|
||||||
|
}
|
||||||
Nolan.locomotion.SetPosition(PlayerAngles, false);
|
if (Input.GetKey(KeyCode.LeftControl))
|
||||||
}
|
{
|
||||||
public static void SetSteamName(string name)
|
pos += -nb.transform.up * speed * Time.deltaTime;
|
||||||
{
|
}
|
||||||
Horror.Menu Menu_ = UnityEngine.Object.FindObjectOfType<Horror.Menu>();
|
nb.locomotion.SetPosition(pos, false);
|
||||||
Menu_.steamName = name;
|
}
|
||||||
}
|
|
||||||
public static void SetServerName(string name)
|
public static void WalkInLobby(bool walk)
|
||||||
{
|
{
|
||||||
Horror.Menu Menu_ = UnityEngine.Object.FindObjectOfType<Horror.Menu>();
|
GameObject LocalPlayer = Helpers.Entities.LocalPlayer_.p_GameObject;
|
||||||
Menu_.serverNameText.text = name;
|
if (LocalPlayer == null)
|
||||||
}
|
{
|
||||||
|
return;
|
||||||
public static void BigFlashlight(bool reset)
|
}
|
||||||
{
|
|
||||||
//Ohhhh yes, that's some great code, don't you like try and catches ?
|
//GetComponent called only once as AddComponent returns a component
|
||||||
//it's for fixing a glitch that activates the big flashlight during the loading of a map
|
UltimateCharacterLocomotionHandler cmp = Helpers.Entities.LocalPlayer_.p_GameObject.GetComponent<UltimateCharacterLocomotionHandler>();
|
||||||
//so the things are not loaded and it throws a shit ton of errors in the console
|
|
||||||
try
|
if (cmp == null)
|
||||||
{
|
{
|
||||||
NolanBehaviour Nolan = UnityEngine.Object.FindObjectOfType<NolanBehaviour>();
|
cmp = LocalPlayer.AddComponent<UltimateCharacterLocomotionHandler>();
|
||||||
Light flashlightSpot = Nolan.flashlightSpot;
|
cmp.enabled = false;
|
||||||
|
}
|
||||||
if (reset)
|
|
||||||
{
|
cmp.enabled = walk;
|
||||||
flashlightSpot.intensity = 1.5f;
|
}
|
||||||
flashlightSpot.range = 9f;
|
|
||||||
}
|
public static void BurnRitualObj(string map, bool burnAll)
|
||||||
else
|
{
|
||||||
{
|
switch (map)
|
||||||
flashlightSpot.intensity = 1.5f;
|
{
|
||||||
flashlightSpot.range = 200f;
|
case "Inn":
|
||||||
}
|
Il2Cpp.InnMapController _innMapController = UnityEngine.Object.FindObjectOfType<Il2Cpp.InnMapController>();
|
||||||
}
|
if (!_innMapController) {
|
||||||
catch
|
return;
|
||||||
{
|
}
|
||||||
return;
|
|
||||||
}
|
if (burnAll){
|
||||||
|
_innMapController.SetProgressTo(10);
|
||||||
}
|
}
|
||||||
public static void FlashlightColor(Color color)
|
else{
|
||||||
{
|
_innMapController.IncreaseProgress();
|
||||||
NolanBehaviour Nolan = UnityEngine.Object.FindObjectOfType<NolanBehaviour>();
|
}
|
||||||
Light flashlightSpot = Nolan.flashlightSpot;
|
break;
|
||||||
|
|
||||||
flashlightSpot.color = color;
|
case "Slaughterhouse":
|
||||||
}
|
Il2Cpp.SlaughterhouseAltarController _slaughterhouseAltarController = UnityEngine.Object.FindObjectOfType<Il2Cpp.SlaughterhouseAltarController>();
|
||||||
|
if (!_slaughterhouseAltarController) {
|
||||||
public static void TPKeys()
|
return;
|
||||||
{
|
}
|
||||||
NolanBehaviour Nolan = UnityEngine.Object.FindObjectOfType<NolanBehaviour>();
|
|
||||||
|
if (burnAll)
|
||||||
foreach (KeyBehaviour keyBehaviour in UnityEngine.Object.FindObjectsOfType<KeyBehaviour>())
|
{
|
||||||
{
|
_slaughterhouseAltarController.BurnGoat();
|
||||||
bool flag = keyBehaviour == null;
|
}
|
||||||
if (flag)
|
else
|
||||||
{
|
{
|
||||||
return;
|
_slaughterhouseAltarController.SkipToGoat(10);
|
||||||
}
|
}
|
||||||
keyBehaviour.transform.position = Nolan.transform.position + Nolan.transform.forward * 1.5f;
|
break;
|
||||||
}
|
|
||||||
}
|
case "Manor":
|
||||||
|
Il2Cpp.MapController mapc = UnityEngine.Object.FindObjectOfType<Il2Cpp.MapController>();
|
||||||
public static void SetRank(int rank)
|
if (!mapc)
|
||||||
{
|
{
|
||||||
NolanRankController NolanRank = UnityEngine.Object.FindObjectOfType<NolanRankController>();
|
return;
|
||||||
|
}
|
||||||
NolanRank.SetRank(rank);
|
|
||||||
}
|
if (burnAll)
|
||||||
|
{
|
||||||
public static void MessageSpam(string message)
|
mapc.SetProgressTo(10);
|
||||||
{
|
}
|
||||||
if (Helpers.Player.IsInGame())
|
else
|
||||||
{
|
{
|
||||||
GameUI game_ui_class = UnityEngine.Object.FindObjectOfType<GameUI>();
|
mapc.SetProgressTo(mapc.GetMapProgress() + 1);
|
||||||
|
}
|
||||||
game_ui_class.textChatInput.text = message;
|
break;
|
||||||
game_ui_class.OnChatMessageSubmit();
|
|
||||||
}
|
default:
|
||||||
else
|
Il2Cpp.SurvivalObjectBurnController _altar = UnityEngine.Object.FindObjectOfType<Il2Cpp.SurvivalObjectBurnController>();
|
||||||
{
|
if (!_altar) {
|
||||||
Horror.Menu menu_class = UnityEngine.Object.FindObjectOfType<Horror.Menu>();
|
return;
|
||||||
menu_class.textChatInput.text = message;
|
}
|
||||||
menu_class.OnChatMessageSubmit();
|
|
||||||
}
|
if (burnAll)
|
||||||
}
|
{
|
||||||
public static void InstantWin()
|
_altar.SkipToGoat(10);
|
||||||
{
|
}
|
||||||
Survival survival_class = UnityEngine.Object.FindObjectOfType<Survival>();
|
else
|
||||||
try
|
{
|
||||||
{
|
_altar.BurnGoat();
|
||||||
survival_class.PlayEnding("InnWin");
|
}
|
||||||
}
|
break;
|
||||||
catch
|
}
|
||||||
{
|
}
|
||||||
try
|
|
||||||
{
|
public static void SpawnAzazel(PrefabId _azazelPrefabId)
|
||||||
survival_class.PlayEnding("AsylumWin");
|
{
|
||||||
}
|
if (!Il2CppPhoton.Bolt.BoltNetwork.IsServer)
|
||||||
catch
|
{
|
||||||
{
|
Hacks.Misc.ShowMessageBox("You need to be host to spawn stuff !");
|
||||||
try
|
return;
|
||||||
{
|
}
|
||||||
survival_class.PlayEnding("TownWin");
|
|
||||||
}
|
GameObject _localPlayer = Helpers.Entities.LocalPlayer_.p_GameObject;
|
||||||
catch
|
|
||||||
{
|
if (_localPlayer != null)
|
||||||
survival_class.PlayEnding("Win");
|
{
|
||||||
}
|
Vector3 pos = _localPlayer.transform.position;
|
||||||
}
|
|
||||||
}
|
GameObject _azazel;
|
||||||
}
|
|
||||||
}
|
_azazel = BoltNetwork.Instantiate(_azazelPrefabId, new Vector3(pos.x, pos.y, pos.z + 1f), Quaternion.identity);
|
||||||
}
|
Il2Cpp.SurvivalAzazelBehaviour? azazelBehaviour = _azazel?.GetComponent<Il2Cpp.SurvivalAzazelBehaviour>();
|
||||||
|
|
||||||
|
if (_azazel != null)
|
||||||
|
{
|
||||||
|
if (azazelBehaviour != null)
|
||||||
|
{
|
||||||
|
_azazel.gameObject.GetComponent<Il2Cpp.SurvivalAzazelBehaviour>().Spawn();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MelonLogger.Error("azazelBehaviour is null!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MelonLogger.Error("azazel is null!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void CarryObject(string name)
|
||||||
|
{
|
||||||
|
Il2Cpp.NolanBehaviour nb = Helpers.Entities.LocalPlayer_.p_GameObject.GetComponent<Il2Cpp.NolanBehaviour>();
|
||||||
|
|
||||||
|
nb.StartCarry(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void CleanFountain()
|
||||||
|
{
|
||||||
|
GameObject[] fountains = GameObject.FindGameObjectsWithTag("InnFountain");
|
||||||
|
|
||||||
|
foreach (GameObject fountain in fountains)
|
||||||
|
{
|
||||||
|
fountain.GetComponent<Il2Cpp.InnFountainController>().Clean();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void AutoRespawn()
|
||||||
|
{
|
||||||
|
Il2Cpp.NolanBehaviour nb = Player.GetPlayer();
|
||||||
|
|
||||||
|
Il2Cpp.SurvivalReviveInteractable _reviveInteractable = UnityEngine.Object.FindObjectOfType<Il2Cpp.SurvivalReviveInteractable>(); //probably can't be null
|
||||||
|
|
||||||
|
_reviveInteractable.Interact(nb.gameObject);
|
||||||
|
}
|
||||||
|
public static void TPItems()
|
||||||
|
{
|
||||||
|
Il2Cpp.NolanBehaviour Nolan = Player.GetPlayer();
|
||||||
|
|
||||||
|
foreach (Il2Cpp.SurvivalInteractable item in Helpers.Entities.SurvivalInteractables)
|
||||||
|
{
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
//TODO : make it so we can specify a password for a private lobby
|
||||||
|
|
||||||
|
Il2CppHorror.Menu _menu = UnityEngine.Object.FindObjectOfType<Il2CppHorror.Menu>();
|
||||||
|
|
||||||
|
Il2CppUdpKit.Platform.PhotonPlatformConfig __photonPlatformConfig = new Il2CppUdpKit.Platform.PhotonPlatformConfig();
|
||||||
|
__photonPlatformConfig.Region = Il2CppUdpKit.Platform.Photon.PhotonRegion.regions[__region];
|
||||||
|
|
||||||
|
BoltLauncher.SetUdpPlatform(new Il2CppUdpKit.Platform.PhotonPlatform(__photonPlatformConfig));
|
||||||
|
|
||||||
|
BoltConfig __config = UnityEngine.Object.FindObjectOfType<Il2CppHorror.Menu>().boltConfig;
|
||||||
|
Toggle __toggle = _menu.hostPrivateServer;
|
||||||
|
|
||||||
|
__toggle.isOn = isPrivate;
|
||||||
|
__config.serverConnectionLimit = lobbySize;
|
||||||
|
|
||||||
|
BoltLauncher.StartServer(__config, null);
|
||||||
|
|
||||||
|
_menu.ShowCanvasGroup(_menu.loadingCanvasGroup, true);
|
||||||
|
_menu.ShowCanvasGroup(_menu.hostCanvasGroup, false);
|
||||||
|
_menu.ShowCanvasGroup(_menu.mainMenuCanvasGroup, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void BigFlashlight(bool reset)
|
||||||
|
{
|
||||||
|
Il2Cpp.NolanBehaviour Nolan = Player.GetPlayer();
|
||||||
|
if (Nolan == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Light flashlightSpot = Nolan.flashlightSpot;
|
||||||
|
if (flashlightSpot == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reset)
|
||||||
|
{
|
||||||
|
flashlightSpot.intensity = 1.4f;
|
||||||
|
flashlightSpot.range = 9f;
|
||||||
|
flashlightSpot.spotAngle = 70f;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
flashlightSpot.intensity = 1.1f;
|
||||||
|
flashlightSpot.range = 200f;
|
||||||
|
flashlightSpot.spotAngle = 90f;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<Transform> GetAllBones(Animator a)
|
||||||
|
{
|
||||||
|
List<Transform> Bones = new List<Transform>
|
||||||
|
{
|
||||||
|
a.GetBoneTransform(HumanBodyBones.Head), // 0
|
||||||
|
a.GetBoneTransform(HumanBodyBones.Neck), // 1
|
||||||
|
a.GetBoneTransform(HumanBodyBones.Spine), // 2
|
||||||
|
a.GetBoneTransform(HumanBodyBones.Hips), // 3
|
||||||
|
|
||||||
|
a.GetBoneTransform(HumanBodyBones.LeftShoulder), // 4
|
||||||
|
a.GetBoneTransform(HumanBodyBones.LeftUpperArm), // 5
|
||||||
|
a.GetBoneTransform(HumanBodyBones.LeftLowerArm), // 6
|
||||||
|
a.GetBoneTransform(HumanBodyBones.LeftHand), // 7
|
||||||
|
|
||||||
|
a.GetBoneTransform(HumanBodyBones.RightShoulder), // 8
|
||||||
|
a.GetBoneTransform(HumanBodyBones.RightUpperArm), // 9
|
||||||
|
a.GetBoneTransform(HumanBodyBones.RightLowerArm), // 10
|
||||||
|
a.GetBoneTransform(HumanBodyBones.RightHand), // 11
|
||||||
|
|
||||||
|
a.GetBoneTransform(HumanBodyBones.LeftUpperLeg), // 12
|
||||||
|
a.GetBoneTransform(HumanBodyBones.LeftLowerLeg), // 13
|
||||||
|
a.GetBoneTransform(HumanBodyBones.LeftFoot), // 14
|
||||||
|
|
||||||
|
a.GetBoneTransform(HumanBodyBones.RightUpperLeg), // 15
|
||||||
|
a.GetBoneTransform(HumanBodyBones.RightLowerLeg), // 16
|
||||||
|
a.GetBoneTransform(HumanBodyBones.RightFoot) // 17
|
||||||
|
};
|
||||||
|
|
||||||
|
return Bones;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Fullbright(bool reset)
|
||||||
|
{
|
||||||
|
Il2Cpp.NolanBehaviour Nolan = Player.GetPlayer();
|
||||||
|
if (Nolan == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Light flashlightSpot = Nolan.flashlightSpot;
|
||||||
|
if (flashlightSpot == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reset)
|
||||||
|
{
|
||||||
|
flashlightSpot.intensity = 1.4f;
|
||||||
|
flashlightSpot.range = 9f;
|
||||||
|
flashlightSpot.spotAngle = 70f;
|
||||||
|
flashlightSpot.type = LightType.Spot;
|
||||||
|
flashlightSpot.shadows = LightShadows.Soft;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
flashlightSpot.intensity = 1.1f;
|
||||||
|
flashlightSpot.range = 200f;
|
||||||
|
flashlightSpot.spotAngle = 179f;
|
||||||
|
flashlightSpot.type = LightType.Point;
|
||||||
|
flashlightSpot.shadows = LightShadows.None;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
public static void FlashlightColor(Color color)
|
||||||
|
{
|
||||||
|
Il2Cpp.NolanBehaviour Nolan = Player.GetPlayer();
|
||||||
|
Light flashlightSpot = Nolan.flashlightSpot;
|
||||||
|
|
||||||
|
flashlightSpot.color = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void TPKeys()
|
||||||
|
{
|
||||||
|
//TOFIX: spawn manually the missing key in slaughterhouse
|
||||||
|
Il2Cpp.NolanBehaviour Nolan = Player.GetPlayer();
|
||||||
|
|
||||||
|
foreach (Il2Cpp.KeyBehaviour keyBehaviour in Helpers.Entities.Keys)
|
||||||
|
{
|
||||||
|
if (keyBehaviour == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
keyBehaviour.transform.position = Nolan.transform.position + Nolan.transform.forward * 1.5f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void SetRank(int rank)
|
||||||
|
{
|
||||||
|
Il2Cpp.NolanRankController NolanRank = UnityEngine.Object.FindObjectOfType<Il2Cpp.NolanRankController>();
|
||||||
|
if (NolanRank == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
NolanRank.SetRank(rank);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void DespawnDemons()
|
||||||
|
{
|
||||||
|
foreach (Il2Cpp.SurvivalDemonBehaviour demon in Helpers.Entities.Demons)
|
||||||
|
{
|
||||||
|
if (demon != null)
|
||||||
|
{
|
||||||
|
demon.Despawn();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DespawnSpiders()
|
||||||
|
{
|
||||||
|
foreach (Il2Cpp.SpiderBehaviour spider in Helpers.Entities.Spiders)
|
||||||
|
{
|
||||||
|
if (spider != null)
|
||||||
|
{
|
||||||
|
spider.Despawn();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DespawnGhosts()
|
||||||
|
{
|
||||||
|
foreach (Il2Cpp.GhostBehaviour ghost in Helpers.Entities.Ghosts)
|
||||||
|
{
|
||||||
|
if (ghost != null)
|
||||||
|
{
|
||||||
|
ghost.Despawn();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DespawnBoars()
|
||||||
|
{
|
||||||
|
foreach (Il2Cpp.BoarBehaviour boar in Helpers.Entities.Boars)
|
||||||
|
{
|
||||||
|
if (boar != null)
|
||||||
|
{
|
||||||
|
boar.Despawn();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DespawnCorpses()
|
||||||
|
{
|
||||||
|
foreach (Il2Cpp.CorpseBehaviour corpse in Helpers.Entities.Corpses)
|
||||||
|
{
|
||||||
|
if (corpse != null)
|
||||||
|
{
|
||||||
|
corpse.Despawn();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DespawnCrows()
|
||||||
|
{
|
||||||
|
foreach (Il2Cpp.CrowBehaviour crow in Helpers.Entities.Crows)
|
||||||
|
{
|
||||||
|
if (crow != null)
|
||||||
|
{
|
||||||
|
crow.Despawn();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DespawnLumps()
|
||||||
|
{
|
||||||
|
foreach (Il2Cpp.ManorLumpController lump in Helpers.Entities.Lumps)
|
||||||
|
{
|
||||||
|
if (lump != null)
|
||||||
|
{
|
||||||
|
lump.Dissolve();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DespawnMonkeys()
|
||||||
|
{
|
||||||
|
foreach (Il2Cpp.MonkeyBehaviour monkey in Helpers.Entities.Monkeys)
|
||||||
|
{
|
||||||
|
if (monkey != null)
|
||||||
|
{
|
||||||
|
monkey.Despawn();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int ShowMessageBox(string message)
|
||||||
|
{
|
||||||
|
//not used, might be useful, some day
|
||||||
|
Il2CppHorror.Menu menu = UnityEngine.Object.FindObjectOfType<Il2CppHorror.Menu>();
|
||||||
|
if (menu == null)
|
||||||
|
return 1;
|
||||||
|
menu.ShowMessageModal(message);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void PlaySound()
|
||||||
|
{
|
||||||
|
Il2Cpp.PlayRandomAudioClip playRandomAudioClip = UnityEngine.Object.FindObjectOfType<Il2Cpp.PlayRandomAudioClip>();
|
||||||
|
Il2Cpp.NolanVoiceOvers nolanVoiceOvers = UnityEngine.Object.FindObjectOfType<Il2Cpp.NolanVoiceOvers>();
|
||||||
|
playRandomAudioClip.delay = 0f;
|
||||||
|
|
||||||
|
int num = UnityEngine.Random.RandomRangeInt(0, 10);
|
||||||
|
switch (num)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
nolanVoiceOvers.yesClips.Play();
|
||||||
|
return;
|
||||||
|
case 1:
|
||||||
|
nolanVoiceOvers.noClips.Play();
|
||||||
|
return;
|
||||||
|
case 2:
|
||||||
|
nolanVoiceOvers.beckonClips.Play();
|
||||||
|
return;
|
||||||
|
case 3:
|
||||||
|
nolanVoiceOvers.showOffClips.Play();
|
||||||
|
return;
|
||||||
|
case 4:
|
||||||
|
nolanVoiceOvers.screamClips.Play();
|
||||||
|
return;
|
||||||
|
case 5:
|
||||||
|
nolanVoiceOvers.pickupClips.Play();
|
||||||
|
return;
|
||||||
|
case 6:
|
||||||
|
nolanVoiceOvers.burnGoatClips.Play();
|
||||||
|
return;
|
||||||
|
case 7:
|
||||||
|
nolanVoiceOvers.laughClips.Play();
|
||||||
|
return;
|
||||||
|
case 8:
|
||||||
|
nolanVoiceOvers.PlayMoan();
|
||||||
|
return;
|
||||||
|
case 9:
|
||||||
|
nolanVoiceOvers.Scream();
|
||||||
|
return;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void FreezeAzazel()
|
||||||
|
{
|
||||||
|
if (Helpers.Map.GetActiveScene() == "Menu")
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Helpers.Map.GetAzazel() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
UltimateCharacterLocomotion _azazelLocomotion = Helpers.Map.GetAzazel().GetComponent<UltimateCharacterLocomotion>();
|
||||||
|
|
||||||
|
if (_azazelLocomotion == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_azazelLocomotion.TimeScale > 0.0f)
|
||||||
|
{
|
||||||
|
_azazelLocomotion.TimeScale = 0f; //host only (?)
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_azazelLocomotion.TimeScale = 1.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void InstantWin()
|
||||||
|
{
|
||||||
|
Il2Cpp.Survival survival_class = UnityEngine.Object.FindObjectOfType<Il2Cpp.Survival>();
|
||||||
|
string map_name = Map.GetMapName(Map.GetActiveScene());
|
||||||
|
|
||||||
|
if (map_name == "Menu")
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (map_name == "Farmhouse")
|
||||||
|
{
|
||||||
|
survival_class.PlayEnding("Win");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
survival_class.PlayEnding(map_name+"Win");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,44 +1,46 @@
|
|||||||
namespace DevourClient.Hacks
|
using Il2CppSteamworks;
|
||||||
|
|
||||||
|
namespace DevourClient.Hacks
|
||||||
{
|
{
|
||||||
public class Unlock
|
public class Unlock
|
||||||
{
|
{
|
||||||
public static void Achievements()
|
public static void Achievements()
|
||||||
{
|
{
|
||||||
AchievementHelpers ah = UnityEngine.Object.FindObjectOfType<AchievementHelpers>();
|
//Il2Cpp.AchievementHelpers ah = UnityEngine.Object.FindObjectOfType<Il2Cpp.AchievementHelpers>();
|
||||||
|
string[] achievements = { "ACH_666_DOLL_HEADS_DESTROYED", "ACH_1000_HEADS_BURIED", "ACH_1000_PIGS_DESTROYED", "ACH_1000_BOOKS_DESTROYED", "ACH_100_EGGS_DESTROYED", "ACH_100_FUSES_USED", "ACH_100_GASOLINE_USED", "ACH_WON_Manor_NIGHTMARE_SP", "ACH_WON_NIGHTMARE_", "ACH_WON_TOWN_HARD", "ACH_WON_MANOR_NIGHTMARE_SP", "ACH_WON_INN_HARD_SP", "ACH_WON_SLAUGHTERHOUSE_COOP", "ACH_ALL_FEATHERS", "ACH_WON_INN_HARD", "ACH_ALL_BARBED_WIRES", "ACH_WON_CARNIVAL_NIGHTMARE_SP", "ACH_WON_MOLLY_HARD", "ACH_WON_MOLLY_HARD_SP", "ACH_ALL_HORSESHOES", "ACH_WON_INN_SP", "ACH_WON_TOWN_NIGHTMARE_SP", "ACH_WON_MANOR_HARD_SP", "ACH_WON_MOLLY_SP", "ACH_WON_CARNIVAL_HARD_SP", "ACH_WON_SLAUGHTERHOUSE_HARD_SP", "ACH_WON_TOWN_COOP", "ACH_WON_MOLLY_COOP", "ACH_ALL_PATCHES", "ACH_WON_MOLLY_NIGHTMARE_SP", "ACH_WON_TOWN_NIGHTMARE", "ACH_WON_SLAUGHTERHOUSE_SP", "ACH_WON_INN_COOP", "ACH_WON_CARNIVAL_HARD", "ACH_ALL_CHERRY_BLOSSOM", "ACH_WON_MOLLY_NIGHTMARE", "ACH_WON_TOWN_HARD_SP", "ACH_WON_CARNIVAL_NIGHTMARE", "ACH_WON_CARNIVAL_SP", "ACH_ALL_ROSES", "ACH_WON_INN_NIGHTMARE_SP", "ACH_ALL_TICKETS", "ACH_WON_SLAUGHTERHOUSE_NIGHTMARE_SP", "ACH_WON_TOWN_SP", "ACH_WON_INN_NIGHTMARE", "ACH_WON_CARNIVAL_COOP", "ACH_WON_MANOR_COOP", "ACH_WON_SLAUGHTERHOUSE_NIGHTMARE", "ACH_WON_SLAUGHTERHOUSE_HARD", "ACH_WON_MANOR_NIGHTMARE", "ACH_WON_MANOR_HARD", "ACH_WON_MANOR_SP", "ACH_ALL_CLIPBOARDS_READ", "ACH_ALL_NOTES_READ", "ACH_UNLOCKED_CAGE", "ACH_UNLOCKED_ATTIC_CAGE", "ACH_CALMED_ANNA", "ACH_FRIED_RAT", "ACH_BURNT_GOAT", "ACH_KNOCKED_OUT_BY_ANNA", "ACH_KNOCKOUT_OUT_BY_DEMON", "ACH_KNOCKED_OUT_IN_HIDING", "STAT_NUM_BLEACH_USED", "ACH_WON_SP", "ACH_WIN_NIGHTMARE", "ACH_WON_HARD_SP", "ACH_WON_COOP", "ACH_WON_HARD", "ACH_WIN_NIGHTMARE_SP", "ACH_LOST", "ACH_NEVER_KNOCKED_OUT", "ACH_ONLY_ONE_KNOCKED_OUT", "ACH_WON_HARD_NO_MEDKITS", "ACH_WON_NO_MEDKITS", "ACH_WON_NO_BATTERIES", "ACH_WON_NIGHTMARE_NO_MEDKITS", "ACH_WON_NO_KNOCKOUT_COOP", "ACH_WON_HARD_NO_BATTERIES", "ACH_WON_HARD_{0}", "ACH_WON_NIGHTMARE_{0}", "ACH_WON_NIGHTMARE_NO_BATTERIES", "ACH_SURVIVED_TO_7_GOATS", "ACH_SURVIVED_TO_5_GOATS", "ACH_SURVIVED_TO_3_GOATS", };
|
||||||
|
string[] stats = { "STAT_TRASH_CANS_KICKED", "STAT_NUM_BOOKS_DESTROYED", "STAT_NUM_ANNA_STAGGERS", "STAT_KNOCKOUTS_BY_GHOST", "STAT_KNOCKOUTS_BY_NATHAN", "STAT_NUM_REVIVES", "STAT_INMATES", "STAT_GHOSTS", "STAT_PRESENTS_COLLECTED", "STAT_ROSES_COLLECTED", "STAT_HEADS", "STAT_KNOCKOUTS_BY_MONKEY", "STAT_GOATS_LURED", "STAT_NUM_NATHAN_STAGGERS", "STAT_DOLLS", "STAT_HORSESHOES_COLLECTED", "STAT_KNOCKOUTS_BY_BOAR", "STAT_KNOCKOUTS_BY_MOLLY", "STAT_KNOCKOUTS_BY_SPIDER", "STAT_DEMONS", "STAT_BARBED_WIRES_COLLECTED", "STAT_CATEGORY_MISC", "STAT_BOOKS", "STAT_CATEGORY_COLLECTABLES", "STAT_HEADS_CLEANSED", "STAT_KNOCKOUTS_BY_SAM", "STAT_NUM_APRIL_STAGGERS", "STAT_BOARS", "STAT_RATS", "STAT_KNOCKOUTS_BY_APRIL", "STAT_CATEGORY_MINIONS_BANISHED", "STAT_HEADS_LURED", "STAT_PIGS", "STAT_CROWS", "STAT_NUM_ZARA_STAGGERS", "STAT_PIGS_LURED", "STAT_NUM_SAM_STAGGERS", "STAT_CATEGORY_AZAZEL_STAGGERS", "STAT_NUM_MOLLY_STAGGERS", "STAT_CHERRY_BLOSSOM_COLLECTED", "STAT_GOATS", "STAT_PUMPKINS_COLLECTED", "STAT_KNOCKOUTS_BY_ZARA", "STAT_PATCHES_COLLECTED", "STAT_KNOCKOUTS_BY_DEMON", "STAT_NUM_KAI_STAGGERS", "STAT_FEATHERS_COLLECTED", "STAT_EGGS", "STAT_KNOCKOUTS_BY_ANNA", "STAT_CATEGORY_ANIMALS_LURED", "STAT_DOLLS_LURED", "STAT_CORPSES_FREED", "STAT_DOLL_HEADS", "STAT_KNOCKOUTS_BY_INMATE", "STAT_RATS_LURED", "STAT_SPIDERS", "STAT_COINS_USED", "STAT_MONKEYS", "STAT_CATEGORY_ITEMS_USED", "STAT_CATEGORY_RITUAL_ITEMS_DESTROYED", "STAT_KNOCKOUTS_BY_CROW", "STAT_DOLL_HEADS_DESTROYED", "STAT_CATEGORY_KNOCKOUTS", "STAT_TICKETS_COLLECTED", "STAT_KNOCKOUTS_BY_KAI", "STAT_CATEGORY_WINS", "STAT_NUM_WON_NORMAL", "STAT_DOLLS_EXPLODED", "STAT_NUM_EGGS_DESTROYED", "STAT_NUM_HEADS_BURIED", "STAT_NUM_CORPSES_FRIED", "STAT_NUM_GHOSTS_FRIED", "STAT_NUM_MOLLY_CALMED_DOWN", "STAT_NUM_ANNA_CALMED_DOWN", "STAT_NUM_", "STAT_MONKEYS_FRIED", "STAT_NUM_CROWS_FRIED", "STAT_NUM_BOARS_FRIED", "STAT_NUM_SPIDERS_FRIED", "STAT_NUM_INMATES_FRIED", "STAT_NUM_DEMONS_FRIED", "STAT_NUM_KNOCKOUTS", "STAT_KNOCKOUTS_BY_", "STAT_NUM_BOOKS_CURSED", "STAT_NUM_ALCOHOL_USED", "STAT_NUM_BLEACH_USED", "STAT_EXP", "STAT_POOPS_SEARCHED", "STAT_NUM_PIGS_DESTROYED", "STAT_NUM_WON_HARD", "STAT_NUM_WON_NIGHTMARE", "STAT_NUM_WON_EASY", "STAT_NUM_WON", "STAT_NUM_GASOLINE_USED", "STAT_NUM_GOATS_DESTROYED", "STAT_NUM_RATS_DESTROYED", "STAT_NUM_FUSES_USED", };
|
||||||
|
|
||||||
/*
|
for (int i = 0; i < achievements.Length; i++)
|
||||||
string[] names = { "hasAchievedFusesUsed", "hasAchievedGasolineUsed", "hasAchievedNoKnockout", "hasCollectedAllPatches", "hasCollectedAllRoses",
|
|
||||||
"hasCompletedHardAsylumGame", "hasCompletedHardGame", "hasCompletedNightmareAsylumGame", "hasCompletedNightmareGame", "hasCompletedNormalGame",
|
|
||||||
"hasCompletedHardInnGamehasCompletedNightmareInnGame", "hasCollectedAllCherryBlossom", "hasAchievedEggsDestroyed", "hasCollectedAllPumpkins",
|
|
||||||
"isStatsValid", "isStatsFetched" };
|
|
||||||
|
|
||||||
for (int i = 0; i < names.Length; i++)
|
|
||||||
{
|
{
|
||||||
ah.GetType().GetField(names[i], System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).SetValue(ah, true); //Causing a crash.
|
Il2CppSteamworks.SteamUserStats.SetAchievement(achievements[i]);
|
||||||
|
//ah.Unlock(achievements[i]);
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
|
for (int j = 0; j < stats.Length; j++)
|
||||||
string[] achievments = { "ACH_WON_INN_NIGHTMARE", "ACH_WON_INN_NIGHTMARE_SP", "ACH_WON_INN_HARD", "ACH_WON_INN_HARD_SP", "ACH_WON_INN_COOP", "ACH_ALL_ROSES", "ACH_BURNT_GOAT",
|
|
||||||
"ACH_ALL_CHERRY_BLOSSOM", "ACH_100_EGGS_DESTROYED", "ACH_WON_INN_SP", "ACH_SURVIVED_TO_3_GOATS", "ACH_SURVIVED_TO_5_GOATS", "ACH_SURVIVED_TO_7_GOATS", "ACH_WON_SP", "ACH_WON_COOP",
|
|
||||||
"ACH_LOST", "ACH_LURED_20_GOATS", "ACH_REVIVED_20_PLAYERS", "ACH_ALL_NOTES_READ", "ACH_KNOCKED_OUT_BY_ANNA", "ACH_KNOCKOUT_OUT_BY_DEMON", "ACH_KNOCKED_OUT_20_TIMES",
|
|
||||||
"ACH_NEVER_KNOCKED_OUT", "ACH_ONLY_ONE_KNOCKED_OUT", "ACH_UNLOCKED_CAGE", "ACH_UNLOCKED_ATTIC_CAGE", "ACH_BEAT_GAME_5_TIMES", "ACH_100_GASOLINE_USED",
|
|
||||||
"ACH_FRIED_20_DEMONS", "ACH_STAGGERED_ANNA_20_TIMES", "ACH_CALMED_ANNA_10_TIMES", "ACH_CALMED_ANNA", "ACH_WIN_NIGHTMARE", "ACH_BEAT_GAME_5_TIMES_IN_NIGHTMARE_MODE",
|
|
||||||
"ACH_WON_NO_KNOCKOUT_COOP", "ACH_WIN_NIGHTMARE_SP", "ACH_WON_HARD", "ACH_WON_HARD_SP", "ACH_100_FUSES_USED", "ACH_ALL_CLIPBOARDS_READ", "ACH_ALL_PATCHES",
|
|
||||||
"ACH_FRIED_RAT", "ACH_FRIED_100_INMATES", "ACH_LURED_20_RATS", "ACH_STAGGERED_MOLLY_20_TIMES", "ACH_WON_MOLLY_SP", "ACH_WON_MOLLY_HARD_SP", "ACH_WON_MOLLY_NIGHTMARE_SP",
|
|
||||||
"ACH_WON_MOLLY_COOP", "ACH_WON_MOLLY_HARD", "ACH_WON_MOLLY_NIGHTMARE", "ACH_20_TRASH_CANS_KICKED", "ACH_CALM_MOLLY_10_TIMES" };
|
|
||||||
|
|
||||||
for (int i = 0; i < achievments.Length; i++)
|
|
||||||
{
|
{
|
||||||
ah.Unlock(achievments[i]);
|
Il2CppSteamworks.SteamUserStats.SetStat(stats[j], 666);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MelonLoader.MelonLogger.Warning("You need to restart your game for the achievements to be unlocked !!!");
|
||||||
|
MelonLoader.MelonLogger.Warning("You need to restart your game for the achievements to be unlocked !!!");
|
||||||
|
MelonLoader.MelonLogger.Warning("You need to restart your game for the achievements to be unlocked !!!");
|
||||||
|
MelonLoader.MelonLogger.Warning("You need to restart your game for the achievements to be unlocked !!!");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Doors()
|
public static void Doors()
|
||||||
{
|
{
|
||||||
//Pour chaques portes, on les ouvre
|
//Pour chaques portes, on les ouvre
|
||||||
foreach (Horror.DoorBehaviour doorBehaviour in UnityEngine.Object.FindObjectsOfType<Horror.DoorBehaviour>())
|
foreach (Il2CppHorror.DoorBehaviour doorBehaviour in UnityEngine.Object.FindObjectsOfType<Il2CppHorror.DoorBehaviour>())
|
||||||
{
|
{
|
||||||
|
doorBehaviour.state.Locked = false;
|
||||||
|
if (doorBehaviour.IsOpen())
|
||||||
|
{
|
||||||
|
doorBehaviour.m_DoorGraphUpdate.DoorOpening();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
doorBehaviour.m_DoorGraphUpdate.DoorClosed();
|
||||||
|
}
|
||||||
doorBehaviour.Unlock();
|
doorBehaviour.Unlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace DevourClient.Helpers
|
namespace DevourClient.Helpers
|
||||||
{
|
{
|
||||||
@@ -8,30 +9,138 @@ namespace DevourClient.Helpers
|
|||||||
private static float G;
|
private static float G;
|
||||||
private static float B;
|
private static float B;
|
||||||
|
|
||||||
|
private static Texture2D previewTexture = null;
|
||||||
|
private static Dictionary<Color, Texture2D> colorTextureCache = new Dictionary<Color, Texture2D>();
|
||||||
|
private static Dictionary<int, Texture2D> circularTextureCache = new Dictionary<int, Texture2D>();
|
||||||
|
|
||||||
|
private static Color lastPreviewColor = Color.clear;
|
||||||
|
private static GUIStyle cachedBoxStyle = null;
|
||||||
|
|
||||||
public static Color ColorPick(string title, Color color)
|
public static Color ColorPick(string title, Color color)
|
||||||
{
|
{
|
||||||
GUI.Label(new Rect(Screen.width - 120, 65, 100, 30), title);
|
GUI.Label(new Rect(Settings.Settings.x + 195, Settings.Settings.y + 70, 250, 30), title);
|
||||||
R = GUI.VerticalSlider(new Rect(Screen.width - 100, 90, 30, 100), color.r, 0f, 1f);
|
|
||||||
G = GUI.VerticalSlider(new Rect(Screen.width - 70, 90, 30, 100), color.g, 0f, 1f);
|
R = GUI.VerticalSlider(new Rect(Settings.Settings.x + 240, Settings.Settings.y + 100, 30, 90), color.r, 0f, 1f);
|
||||||
B = GUI.VerticalSlider(new Rect(Screen.width - 40, 90, 30, 100), color.b, 0f, 1f);
|
G = GUI.VerticalSlider(new Rect(Settings.Settings.x + 270, Settings.Settings.y + 100, 30, 90), color.g, 0f, 1f);
|
||||||
GUI.Label(new Rect(Screen.width - 100, 190, 30, 30), "R");
|
B = GUI.VerticalSlider(new Rect(Settings.Settings.x + 300, Settings.Settings.y + 100, 30, 90), color.b, 0f, 1f);
|
||||||
GUI.Label(new Rect(Screen.width - 70, 190, 30, 30), "G");
|
|
||||||
GUI.Label(new Rect(Screen.width - 39, 190, 30, 30), "B");
|
GUI.Label(new Rect(Settings.Settings.x + 240, Settings.Settings.y + 190, 30, 30), "R");
|
||||||
|
GUI.Label(new Rect(Settings.Settings.x + 270, Settings.Settings.y + 190, 30, 30), "G");
|
||||||
|
GUI.Label(new Rect(Settings.Settings.x + 300, Settings.Settings.y + 190, 30, 30), "B");
|
||||||
|
|
||||||
color = new Color(R, G, B, 1);
|
color = new Color(R, G, B, 1);
|
||||||
GUI.color = color;
|
|
||||||
|
|
||||||
void DrawPreview(Rect position, Color color_to_draw)
|
void DrawPreview(Rect position, Color color_to_draw)
|
||||||
{
|
{
|
||||||
Texture2D texture = new Texture2D(1, 1);
|
if (previewTexture == null || lastPreviewColor != color_to_draw)
|
||||||
texture.SetPixel(0, 0, color);
|
{
|
||||||
texture.Apply();
|
if (previewTexture == null)
|
||||||
GUI.skin.box.normal.background = texture;
|
{
|
||||||
GUI.Box(position, GUIContent.none);
|
previewTexture = new Texture2D(1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
previewTexture.SetPixel(0, 0, color_to_draw);
|
||||||
|
previewTexture.Apply();
|
||||||
|
lastPreviewColor = color_to_draw;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cachedBoxStyle == null)
|
||||||
|
{
|
||||||
|
cachedBoxStyle = new GUIStyle(GUI.skin.box);
|
||||||
|
}
|
||||||
|
cachedBoxStyle.normal.background = previewTexture;
|
||||||
|
GUI.Box(position, GUIContent.none, cachedBoxStyle);
|
||||||
}
|
}
|
||||||
|
|
||||||
DrawPreview(new Rect(Screen.width - 130, 90, 20, 100), color);
|
DrawPreview(new Rect(Settings.Settings.x + 195, Settings.Settings.y + 100, 20, 90), color);
|
||||||
|
|
||||||
return color;
|
return color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Texture2D MakeTex(int width, int height, Color col)
|
||||||
|
{
|
||||||
|
if (colorTextureCache.TryGetValue(col, out Texture2D cachedTexture))
|
||||||
|
{
|
||||||
|
if (cachedTexture != null)
|
||||||
|
{
|
||||||
|
return cachedTexture;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Color[] pix = new Color[width * height];
|
||||||
|
for (int i = 0; i < pix.Length; ++i)
|
||||||
|
{
|
||||||
|
pix[i] = col;
|
||||||
|
}
|
||||||
|
Texture2D result = new Texture2D(width, height);
|
||||||
|
result.SetPixels(pix);
|
||||||
|
result.Apply();
|
||||||
|
|
||||||
|
colorTextureCache[col] = result;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Texture2D GetCircularTexture(int width, int height)
|
||||||
|
{
|
||||||
|
int cacheKey = width;
|
||||||
|
|
||||||
|
if (circularTextureCache.TryGetValue(cacheKey, out Texture2D cachedTexture))
|
||||||
|
{
|
||||||
|
if (cachedTexture != null)
|
||||||
|
{
|
||||||
|
return cachedTexture;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Texture2D texture = new Texture2D(width, height);
|
||||||
|
for (int x = 0; x < texture.width; x++)
|
||||||
|
{
|
||||||
|
for (int y = 0; y < texture.height; y++)
|
||||||
|
{
|
||||||
|
if (Vector2.Distance(new Vector2(x, y), new Vector2(texture.width / 2, texture.height / 2)) <= texture.width / 2)
|
||||||
|
{
|
||||||
|
texture.SetPixel(x, y, Color.white);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
texture.SetPixel(x, y, Color.clear);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
texture.Apply();
|
||||||
|
|
||||||
|
circularTextureCache[cacheKey] = texture;
|
||||||
|
|
||||||
|
return texture;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Cleanup()
|
||||||
|
{
|
||||||
|
if (previewTexture != null)
|
||||||
|
{
|
||||||
|
UnityEngine.Object.Destroy(previewTexture);
|
||||||
|
previewTexture = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var texture in colorTextureCache.Values)
|
||||||
|
{
|
||||||
|
if (texture != null)
|
||||||
|
{
|
||||||
|
UnityEngine.Object.Destroy(texture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
colorTextureCache.Clear();
|
||||||
|
|
||||||
|
foreach (var texture in circularTextureCache.Values)
|
||||||
|
{
|
||||||
|
if (texture != null)
|
||||||
|
{
|
||||||
|
UnityEngine.Object.Destroy(texture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
circularTextureCache.Clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
52
DevourClient/Helpers/Map.cs
Normal file
52
DevourClient/Helpers/Map.cs
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
namespace DevourClient.Helpers
|
||||||
|
{
|
||||||
|
class Map
|
||||||
|
{
|
||||||
|
public static string GetActiveScene()
|
||||||
|
{
|
||||||
|
return UnityEngine.SceneManagement.SceneManager.GetActiveScene().name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string GetMapName(string sceneName)
|
||||||
|
{
|
||||||
|
switch (sceneName)
|
||||||
|
{
|
||||||
|
case "Anna":
|
||||||
|
return "Farmhouse";
|
||||||
|
case "Molly":
|
||||||
|
return "Asylum";
|
||||||
|
case "Inn":
|
||||||
|
return "Inn";
|
||||||
|
case "Town":
|
||||||
|
return "Town";
|
||||||
|
case "Slaughterhouse":
|
||||||
|
return "Slaughterhouse";
|
||||||
|
case "Manor":
|
||||||
|
return "Manor";
|
||||||
|
case "Carnival":
|
||||||
|
return "Carnival";
|
||||||
|
default:
|
||||||
|
return "Menu";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static UnityEngine.GameObject GetAzazel()
|
||||||
|
{
|
||||||
|
return Helpers.Entities.Azazels[0].gameObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void LoadMap(string mapName)
|
||||||
|
{
|
||||||
|
if (Il2CppPhoton.Bolt.BoltNetwork.IsServer)
|
||||||
|
{
|
||||||
|
Il2CppPhoton.Bolt.BoltNetwork.LoadScene(mapName);
|
||||||
|
|
||||||
|
MelonLoader.MelonLogger.Warning("Please press the button only once, it may take some time for the map to load.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MelonLoader.MelonLogger.Warning("You must be the host to use this command!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
161
DevourClient/Helpers/Render.cs
Normal file
161
DevourClient/Helpers/Render.cs
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using UnityEngine;
|
||||||
|
using MelonLoader;
|
||||||
|
|
||||||
|
namespace DevourClient.Render
|
||||||
|
{
|
||||||
|
public class Render
|
||||||
|
{
|
||||||
|
public static GUIStyle StringStyle { get; set; } = new GUIStyle(GUI.skin.label);
|
||||||
|
|
||||||
|
private static GUIContent cachedContent = new GUIContent();
|
||||||
|
private static Dictionary<string, Vector2> sizeCache = new Dictionary<string, Vector2>();
|
||||||
|
private static int frameCacheClearCounter = 0;
|
||||||
|
private const int CACHE_CLEAR_INTERVAL = 1800;
|
||||||
|
|
||||||
|
public static void DrawString(Vector2 position, Color color, string label, bool centered = true)
|
||||||
|
{
|
||||||
|
cachedContent.text = label;
|
||||||
|
|
||||||
|
if (!sizeCache.TryGetValue(label, out Vector2 size))
|
||||||
|
{
|
||||||
|
size = StringStyle.CalcSize(cachedContent);
|
||||||
|
sizeCache[label] = size;
|
||||||
|
|
||||||
|
frameCacheClearCounter++;
|
||||||
|
if (frameCacheClearCounter >= CACHE_CLEAR_INTERVAL)
|
||||||
|
{
|
||||||
|
sizeCache.Clear();
|
||||||
|
frameCacheClearCounter = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var upperLeft = centered ? position - size / 2f : position;
|
||||||
|
Color color2 = GUI.color;
|
||||||
|
GUI.color = color;
|
||||||
|
GUI.Label(new Rect(upperLeft, size), cachedContent);
|
||||||
|
GUI.color = color2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Texture2D lineTex = default!;
|
||||||
|
public static void DrawLine(Vector2 pointA, Vector2 pointB, Color color, float width)
|
||||||
|
{
|
||||||
|
Matrix4x4 matrix = GUI.matrix;
|
||||||
|
if (!lineTex)
|
||||||
|
lineTex = new Texture2D(1, 1);
|
||||||
|
|
||||||
|
Color color2 = GUI.color;
|
||||||
|
GUI.color = color;
|
||||||
|
float num = Vector3.Angle(pointB - pointA, Vector2.right);
|
||||||
|
|
||||||
|
if (pointA.y > pointB.y)
|
||||||
|
num = -num;
|
||||||
|
|
||||||
|
GUIUtility.ScaleAroundPivot(new Vector2((pointB - pointA).magnitude, width), new Vector2(pointA.x, pointA.y + 0.5f));
|
||||||
|
GUIUtility.RotateAroundPivot(num, pointA);
|
||||||
|
GUI.DrawTexture(new Rect(pointA.x, pointA.y, 1f, 1f), lineTex);
|
||||||
|
GUI.matrix = matrix;
|
||||||
|
GUI.color = color2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DrawNameESP(Vector3 pos, string name, Color color)
|
||||||
|
{
|
||||||
|
if (Camera.main == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3 vector = Camera.main.WorldToScreenPoint(pos);
|
||||||
|
if (vector.z > 0f)
|
||||||
|
{
|
||||||
|
vector.y = (float)Screen.height - (vector.y + 1f);
|
||||||
|
GUI.color = color;
|
||||||
|
GUI.DrawTexture(new Rect(new Vector2(vector.x, vector.y), new Vector2(5f, 5f)), Texture2D.whiteTexture, 0);
|
||||||
|
GUI.Label(new Rect(new Vector2(vector.x, vector.y), new Vector2(100f, 100f)), name);
|
||||||
|
GUI.color = Color.white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static void DrawBones(Transform bone1, Transform bone2, Color c)
|
||||||
|
{
|
||||||
|
if (!Camera.main)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!bone1 || !bone2)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3 w1 = Camera.main.WorldToScreenPoint(bone1.position);
|
||||||
|
Vector3 w2 = Camera.main.WorldToScreenPoint(bone2.position);
|
||||||
|
if (w1.z > 0.0f && w2.z > 0.0f)
|
||||||
|
{
|
||||||
|
DrawLine(new Vector2(w1.x, Screen.height - w1.y), new Vector2(w2.x, Screen.height - w2.y), c, 2f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DrawAllBones(List<Transform> b, Color c)
|
||||||
|
{
|
||||||
|
DrawBones(b[0], b[1], c); //head, neck
|
||||||
|
DrawBones(b[1], b[2], c); //neck, spine
|
||||||
|
DrawBones(b[2], b[3], c); //spine, hips
|
||||||
|
|
||||||
|
DrawBones(b[1], b[4], c); //neck, left shoulder
|
||||||
|
DrawBones(b[4], b[5], c); //left shoulder, left upper arm
|
||||||
|
DrawBones(b[5], b[6], c); //left upper arm, left lower arm
|
||||||
|
DrawBones(b[6], b[7], c); //left lower arm, left hand
|
||||||
|
|
||||||
|
DrawBones(b[1], b[8], c); //neck, right shoulder
|
||||||
|
DrawBones(b[8], b[9], c); //right shoulder, right upper arm
|
||||||
|
DrawBones(b[9], b[10], c); //right upper arm, right lower arm
|
||||||
|
DrawBones(b[10], b[11], c); //right lower arm, right hand
|
||||||
|
|
||||||
|
DrawBones(b[3], b[12], c); //hips, left upper leg
|
||||||
|
DrawBones(b[12], b[13], c); //left upper leg, left lower leg
|
||||||
|
DrawBones(b[13], b[14], c); //left lower leg, left foot
|
||||||
|
|
||||||
|
DrawBones(b[3], b[15], c); //hips, right upper leg
|
||||||
|
DrawBones(b[15], b[16], c); //right upper leg, right lower leg
|
||||||
|
DrawBones(b[16], b[17], c); //right lower leg, right foot
|
||||||
|
}
|
||||||
|
|
||||||
|
static void DrawBox(float x, float y, float w, float h, Color color, float thickness)
|
||||||
|
{
|
||||||
|
Render.DrawLine(new Vector2(x, y), new Vector2(x + w, y), color, thickness);
|
||||||
|
Render.DrawLine(new Vector2(x, y), new Vector2(x, y + h), color, thickness);
|
||||||
|
Render.DrawLine(new Vector2(x + w, y), new Vector2(x + w, y + h), color, thickness);
|
||||||
|
Render.DrawLine(new Vector2(x, y + h), new Vector2(x + w, y + h), color, thickness);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DrawBoxESP(GameObject it, float footOffset, float headOffset, string name, Color color, bool snapline = false, bool esp = false, float nameOffset = -0.5f, float widthOffset = 2.0f)
|
||||||
|
{
|
||||||
|
if (!it || !Camera.main)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3 footpos = Camera.main.WorldToScreenPoint(new Vector3(it.transform.position.x, it.transform.position.y + footOffset, it.transform.position.z));
|
||||||
|
Vector3 headpos = Camera.main.WorldToScreenPoint(new Vector3(it.transform.position.x, it.transform.position.y + headOffset, it.transform.position.z));
|
||||||
|
Vector3 namepos = Camera.main.WorldToScreenPoint(new Vector3(it.transform.position.x, it.transform.position.y + nameOffset, it.transform.position.z));
|
||||||
|
|
||||||
|
if (esp && footpos.z > 0.0f)
|
||||||
|
{
|
||||||
|
float height = (headpos.y - footpos.y);
|
||||||
|
float width = height / widthOffset;
|
||||||
|
|
||||||
|
DrawBox(footpos.x - (width / 2), (float)Screen.height - footpos.y - height, width, height, color, 2.0f);
|
||||||
|
DrawString(new Vector2(namepos.x, (float)Screen.height - namepos.y), color, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (snapline && footpos.z > 0f)
|
||||||
|
{
|
||||||
|
Render.DrawLine(new Vector2((float)(Screen.width / 2), (float)(Screen.height / 2)), new Vector2(footpos.x, (float)Screen.height - footpos.y), color, 2f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,22 +1,491 @@
|
|||||||
namespace DevourClient.Helpers
|
using UnityEngine;
|
||||||
{
|
using Il2CppOpsive.UltimateCharacterController.Character;
|
||||||
public class Player
|
using System.Collections.Generic;
|
||||||
{
|
using System.Collections;
|
||||||
public static bool IsInGame()
|
using MelonLoader;
|
||||||
{
|
using Il2CppPhoton.Bolt;
|
||||||
//Code pas très beau ici
|
|
||||||
//La variable gameStarted dans la classe Horror.Menu n'existe plus quand on lance une game
|
namespace DevourClient.Helpers
|
||||||
//Donc si elle existe on retourne sa valeur (qui est false)
|
{
|
||||||
//Et si elle existe pas (donc si on est ingame) on retourne true
|
public class BasePlayer
|
||||||
try
|
{
|
||||||
{
|
public GameObject p_GameObject { get; set; } = default!;
|
||||||
Horror.Menu menu_class = UnityEngine.ScriptableObject.FindObjectOfType<Horror.Menu>();
|
public string Name { get; set; } = default!;
|
||||||
return menu_class.gameStarted;
|
public string Id { get; set; } = default!;
|
||||||
}
|
|
||||||
catch
|
public void Kill()
|
||||||
{
|
{
|
||||||
return true;
|
if (p_GameObject == null)
|
||||||
}
|
{
|
||||||
}
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
Il2Cpp.SurvivalAzazelBehaviour sab = Il2Cpp.SurvivalAzazelBehaviour.FindObjectOfType<Il2Cpp.SurvivalAzazelBehaviour>();
|
||||||
|
|
||||||
|
if (sab == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
MelonLogger.Msg("You need to be server !");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p_GameObject == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Il2Cpp.SurvivalAzazelBehaviour sab = Il2Cpp.SurvivalAzazelBehaviour.FindObjectOfType<Il2Cpp.SurvivalAzazelBehaviour>();
|
||||||
|
|
||||||
|
if (sab == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sab.OnPickedUpPlayer(sab.gameObject, p_GameObject, false);
|
||||||
|
|
||||||
|
/*
|
||||||
|
MelonLogger.Msg(Name);
|
||||||
|
Il2Cpp.JumpScare _jumpscare = UnityEngine.Object.FindObjectOfType<Il2Cpp.JumpScare>();
|
||||||
|
_jumpscare.player = p_GameObject;
|
||||||
|
_jumpscare.Activate(p_GameObject.GetComponent<BoltEntity>());
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LockInCage()
|
||||||
|
{
|
||||||
|
if (p_GameObject == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
BoltNetwork.Instantiate(BoltPrefabs.Cage, p_GameObject.transform.position, Quaternion.identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void TP()
|
||||||
|
{
|
||||||
|
if (p_GameObject == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Il2Cpp.NolanBehaviour nb = Player.GetPlayer();
|
||||||
|
nb.TeleportTo(p_GameObject.transform.position, Quaternion.identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void TPAzazel()
|
||||||
|
{
|
||||||
|
if (p_GameObject == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
UltimateCharacterLocomotion ucl = Helpers.Map.GetAzazel().GetComponent<UltimateCharacterLocomotion>();
|
||||||
|
|
||||||
|
if (ucl)
|
||||||
|
{
|
||||||
|
ucl.SetPosition(p_GameObject.transform.position);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MelonLogger.Error("Azazel not found!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ShootPlayer()
|
||||||
|
{
|
||||||
|
if (!BoltNetwork.IsServer)
|
||||||
|
{
|
||||||
|
MelonLogger.Msg("You need to be server !");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p_GameObject == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Il2Cpp.AzazelSamBehaviour _azazelSam = UnityEngine.Object.FindObjectOfType<Il2Cpp.AzazelSamBehaviour>();
|
||||||
|
|
||||||
|
if (_azazelSam)
|
||||||
|
{
|
||||||
|
_azazelSam.OnShootPlayer(p_GameObject, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public class Player
|
||||||
|
{
|
||||||
|
public static bool IsInGame()
|
||||||
|
{
|
||||||
|
Il2Cpp.OptionsHelpers optionsHelpers = UnityEngine.Object.FindObjectOfType<Il2Cpp.OptionsHelpers>();
|
||||||
|
return optionsHelpers.inGame;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool IsInGameOrLobby()
|
||||||
|
{
|
||||||
|
return GetPlayer() != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Il2Cpp.NolanBehaviour GetPlayer()
|
||||||
|
{
|
||||||
|
if (Entities.LocalPlayer_.p_GameObject == null)
|
||||||
|
{
|
||||||
|
return null!;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Entities.LocalPlayer_.p_GameObject.GetComponent<Il2Cpp.NolanBehaviour>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool IsPlayerCrawling()
|
||||||
|
{
|
||||||
|
Il2Cpp.NolanBehaviour nb = Player.GetPlayer();
|
||||||
|
|
||||||
|
if (nb == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nb.IsCrawling();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Entities
|
||||||
|
{
|
||||||
|
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.MonkeyBehaviour[] Monkeys = default!;
|
||||||
|
|
||||||
|
// 协程生命周期管理
|
||||||
|
private static List<object> activeCoroutines = new List<object>();
|
||||||
|
private static bool isRunning = false;
|
||||||
|
|
||||||
|
public static IEnumerator GetLocalPlayer()
|
||||||
|
{
|
||||||
|
while (isRunning)
|
||||||
|
{
|
||||||
|
GameObject[] currentPlayers = GameObject.FindGameObjectsWithTag("Player");
|
||||||
|
|
||||||
|
for (int i = 0; i < currentPlayers.Length; i++)
|
||||||
|
{
|
||||||
|
if (currentPlayers[i].GetComponent<Il2Cpp.NolanBehaviour>().entity.IsOwner)
|
||||||
|
{
|
||||||
|
LocalPlayer_.p_GameObject = currentPlayers[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wait 5 seconds before caching objects again.
|
||||||
|
yield return new WaitForSeconds(5f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IEnumerator GetAllPlayers()
|
||||||
|
{
|
||||||
|
while (isRunning)
|
||||||
|
{
|
||||||
|
GameObject[] players = GameObject.FindGameObjectsWithTag("Player");
|
||||||
|
Players = new BasePlayer[players.Length];
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
foreach (GameObject p in players)
|
||||||
|
{
|
||||||
|
string player_name = "";
|
||||||
|
string player_id = "-1";
|
||||||
|
|
||||||
|
Il2Cpp.DissonancePlayerTracking dpt = p.gameObject.GetComponent<Il2Cpp.DissonancePlayerTracking>();
|
||||||
|
if (dpt != null)
|
||||||
|
{
|
||||||
|
player_name = dpt.state.PlayerName;
|
||||||
|
player_id = dpt.state.PlayerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Players[i] == null)
|
||||||
|
{
|
||||||
|
Players[i] = new BasePlayer();
|
||||||
|
}
|
||||||
|
|
||||||
|
Players[i].Id = player_id;
|
||||||
|
Players[i].Name = player_name;
|
||||||
|
Players[i].p_GameObject = p;
|
||||||
|
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Wait 5 seconds before caching objects again.
|
||||||
|
yield return new WaitForSeconds(5f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static IEnumerator GetGoatsAndRats()
|
||||||
|
{
|
||||||
|
while (isRunning)
|
||||||
|
{
|
||||||
|
GoatsAndRats = Il2Cpp.GoatBehaviour.FindObjectsOfType<Il2Cpp.GoatBehaviour>();
|
||||||
|
|
||||||
|
// Wait 5 seconds before caching objects again.
|
||||||
|
yield return new WaitForSeconds(5f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IEnumerator GetSurvivalInteractables()
|
||||||
|
{
|
||||||
|
while (isRunning)
|
||||||
|
{
|
||||||
|
SurvivalInteractables = Il2Cpp.SurvivalInteractable.FindObjectsOfType<Il2Cpp.SurvivalInteractable>();
|
||||||
|
|
||||||
|
// Wait 5 seconds before caching objects again.
|
||||||
|
yield return new WaitForSeconds(5f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IEnumerator GetKeys()
|
||||||
|
{
|
||||||
|
while (isRunning)
|
||||||
|
{
|
||||||
|
Keys = Il2Cpp.KeyBehaviour.FindObjectsOfType<Il2Cpp.KeyBehaviour>();
|
||||||
|
|
||||||
|
// Wait 5 seconds before caching objects again.
|
||||||
|
yield return new WaitForSeconds(5f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IEnumerator GetDemons()
|
||||||
|
{
|
||||||
|
while (isRunning)
|
||||||
|
{
|
||||||
|
Demons = Il2Cpp.SurvivalDemonBehaviour.FindObjectsOfType<Il2Cpp.SurvivalDemonBehaviour>();
|
||||||
|
|
||||||
|
// Wait 5 seconds before caching objects again.
|
||||||
|
yield return new WaitForSeconds(5f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IEnumerator GetSpiders()
|
||||||
|
{
|
||||||
|
while (isRunning)
|
||||||
|
{
|
||||||
|
Spiders = Il2Cpp.SpiderBehaviour.FindObjectsOfType<Il2Cpp.SpiderBehaviour>();
|
||||||
|
|
||||||
|
// Wait 5 seconds before caching objects again.
|
||||||
|
yield return new WaitForSeconds(5f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IEnumerator GetGhosts()
|
||||||
|
{
|
||||||
|
while (isRunning)
|
||||||
|
{
|
||||||
|
Ghosts = Il2Cpp.GhostBehaviour.FindObjectsOfType<Il2Cpp.GhostBehaviour>();
|
||||||
|
|
||||||
|
// Wait 5 seconds before caching objects again.
|
||||||
|
yield return new WaitForSeconds(5f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IEnumerator GetBoars()
|
||||||
|
{
|
||||||
|
while (isRunning)
|
||||||
|
{
|
||||||
|
Boars = Il2Cpp.BoarBehaviour.FindObjectsOfType<Il2Cpp.BoarBehaviour>();
|
||||||
|
|
||||||
|
// Wait 5 seconds before caching objects again.
|
||||||
|
yield return new WaitForSeconds(5f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IEnumerator GetCorpses()
|
||||||
|
{
|
||||||
|
while (isRunning)
|
||||||
|
{
|
||||||
|
Corpses = Il2Cpp.CorpseBehaviour.FindObjectsOfType<Il2Cpp.CorpseBehaviour>();
|
||||||
|
|
||||||
|
// Wait 5 seconds before caching objects again.
|
||||||
|
yield return new WaitForSeconds(5f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IEnumerator GetCrows()
|
||||||
|
{
|
||||||
|
while (isRunning)
|
||||||
|
{
|
||||||
|
Crows = Il2Cpp.CrowBehaviour.FindObjectsOfType<Il2Cpp.CrowBehaviour>();
|
||||||
|
|
||||||
|
// Wait 5 seconds before caching objects again.
|
||||||
|
yield return new WaitForSeconds(5f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IEnumerator GetLumps()
|
||||||
|
{
|
||||||
|
while (isRunning)
|
||||||
|
{
|
||||||
|
Lumps = Il2Cpp.ManorLumpController.FindObjectsOfType<Il2Cpp.ManorLumpController>();
|
||||||
|
|
||||||
|
// Wait 5 seconds before caching objects again.
|
||||||
|
yield return new WaitForSeconds(5f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IEnumerator GetMonkeys()
|
||||||
|
{
|
||||||
|
while (isRunning)
|
||||||
|
{
|
||||||
|
Monkeys = Il2Cpp.MonkeyBehaviour.FindObjectsOfType<Il2Cpp.MonkeyBehaviour>();
|
||||||
|
|
||||||
|
// Wait 5 seconds before caching objects again.
|
||||||
|
yield return new WaitForSeconds(5f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IEnumerator GetAzazels()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* ikr AzazelS, because in case we spawn multiple we want the esp to render all of them
|
||||||
|
*/
|
||||||
|
while (isRunning)
|
||||||
|
{
|
||||||
|
Azazels = Il2Cpp.SurvivalAzazelBehaviour.FindObjectsOfType<Il2Cpp.SurvivalAzazelBehaviour>();
|
||||||
|
|
||||||
|
// Wait 5 seconds before caching objects again.
|
||||||
|
yield return new WaitForSeconds(5f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 启动所有协程
|
||||||
|
/// </summary>
|
||||||
|
public static void StartAllCoroutines()
|
||||||
|
{
|
||||||
|
isRunning = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 停止所有协程并清理协程引用
|
||||||
|
/// </summary>
|
||||||
|
public static void StopAllCoroutines()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// 设置标志,让所有协程循环自然退出
|
||||||
|
isRunning = false;
|
||||||
|
|
||||||
|
// 停止所有记录的协程
|
||||||
|
foreach (var coroutine in activeCoroutines)
|
||||||
|
{
|
||||||
|
if (coroutine != null)
|
||||||
|
{
|
||||||
|
MelonCoroutines.Stop(coroutine);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清空协程引用列表
|
||||||
|
activeCoroutines.Clear();
|
||||||
|
|
||||||
|
// 清理缓存对象
|
||||||
|
CleanupCachedObjects();
|
||||||
|
|
||||||
|
MelonLogger.Msg("All coroutines stopped and cleaned up successfully.");
|
||||||
|
}
|
||||||
|
catch (System.Exception ex)
|
||||||
|
{
|
||||||
|
MelonLogger.Error($"Error stopping coroutines: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 清理所有缓存的游戏对象引用
|
||||||
|
/// </summary>
|
||||||
|
public static void CleanupCachedObjects()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// 清理玩家对象引用
|
||||||
|
if (Players != null)
|
||||||
|
{
|
||||||
|
foreach (var player in Players)
|
||||||
|
{
|
||||||
|
if (player != null)
|
||||||
|
{
|
||||||
|
player.p_GameObject = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将所有实体数组设为null,释放对游戏对象的引用
|
||||||
|
Players = null;
|
||||||
|
GoatsAndRats = null;
|
||||||
|
SurvivalInteractables = null;
|
||||||
|
Keys = null;
|
||||||
|
Demons = null;
|
||||||
|
Spiders = null;
|
||||||
|
Ghosts = null;
|
||||||
|
Azazels = null;
|
||||||
|
Boars = null;
|
||||||
|
Corpses = null;
|
||||||
|
Crows = null;
|
||||||
|
Lumps = null;
|
||||||
|
Monkeys = null;
|
||||||
|
|
||||||
|
// 清理本地玩家引用
|
||||||
|
if (LocalPlayer_ != null)
|
||||||
|
{
|
||||||
|
LocalPlayer_.p_GameObject = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
MelonLogger.Msg("Cached objects cleaned up successfully.");
|
||||||
|
}
|
||||||
|
catch (System.Exception ex)
|
||||||
|
{
|
||||||
|
MelonLogger.Error($"Error cleaning up cached objects: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 注册协程引用用于后续管理
|
||||||
|
/// </summary>
|
||||||
|
public static void RegisterCoroutine(object coroutine)
|
||||||
|
{
|
||||||
|
if (coroutine != null && !activeCoroutines.Contains(coroutine))
|
||||||
|
{
|
||||||
|
activeCoroutines.Add(coroutine);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,27 +1,44 @@
|
|||||||
using HarmonyLib;
|
using HarmonyLib;
|
||||||
|
using Il2Cpp;
|
||||||
|
|
||||||
namespace DevourClient.Hooks
|
namespace DevourClient.Hooks
|
||||||
{
|
{
|
||||||
public class Hooks
|
public class Hooks
|
||||||
{
|
{
|
||||||
/* Commented out for UC release
|
[HarmonyPatch(typeof(Il2Cpp.NolanBehaviour), "OnAttributeUpdateValue")]
|
||||||
[HarmonyPatch(typeof(NolanBehaviour))]
|
static class NolanBehaviour_UV
|
||||||
[HarmonyPatch(nameof(NolanBehaviour.SetIsBeingKnockedOut))] //annotation boiler plate to tell Harmony what to patch. Refer to docs.
|
|
||||||
static class NolanBehaviour_SetIsBeingKnockedOut_Patch
|
|
||||||
{
|
{
|
||||||
static void Prefix(ref bool enable)
|
[HarmonyPrefix]
|
||||||
|
static void Prefix(ref Il2CppOpsive.UltimateCharacterController.Traits.Attribute attribute)
|
||||||
{
|
{
|
||||||
MelonLoader.MelonLogger.Msg("called ! : " + enable);
|
if (ClientMain.unlimitedUV && attribute.m_Name == "Battery")
|
||||||
enable = false;
|
{
|
||||||
|
attribute.m_Value = 100.0f;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[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
|
||||||
|
{
|
||||||
|
static void Postfix(ref Il2Cpp.RankHelpers.ExpGainInfo __result)
|
||||||
|
{
|
||||||
|
if (ClientMain.exp_modifier)
|
||||||
|
{
|
||||||
|
__result.totalExp = (int)ClientMain.exp;
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
[HarmonyPatch(typeof(Horror.Menu))]
|
|
||||||
[HarmonyPatch(nameof(Horror.Menu.SetupPerk))] //annotation boiler plate to tell Harmony what to patch. Refer to docs.
|
[HarmonyPatch(typeof(Il2CppHorror.Menu))]
|
||||||
|
[HarmonyPatch(nameof(Il2CppHorror.Menu.SetupPerk))] //annotation boiler plate to tell Harmony what to patch. Refer to docs.
|
||||||
static class Horror_Menu_SetupPerk_Patch
|
static class Horror_Menu_SetupPerk_Patch
|
||||||
{
|
{
|
||||||
static void Prefix(ref CharacterPerk perk)
|
static void Prefix(ref Il2Cpp.CharacterPerk perk)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
public int cost { get; set; }
|
public int cost { get; set; }
|
||||||
@@ -39,11 +56,11 @@ namespace DevourClient.Hooks
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[HarmonyPatch(typeof(Horror.Menu))]
|
[HarmonyPatch(typeof(Il2CppHorror.Menu))]
|
||||||
[HarmonyPatch(nameof(Horror.Menu.SetupOutfit))] //annotation boiler plate to tell Harmony what to patch. Refer to docs.
|
[HarmonyPatch(nameof(Il2CppHorror.Menu.SetupOutfit))] //annotation boiler plate to tell Harmony what to patch. Refer to docs.
|
||||||
static class Horror_Menu_SetupOutfit_Patch
|
static class Horror_Menu_SetupOutfit_Patch
|
||||||
{
|
{
|
||||||
static void Prefix(ref CharacterOutfit outfit)
|
static void Prefix(ref Il2Cpp.CharacterOutfit outfit)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
public ulong currentPrice;
|
public ulong currentPrice;
|
||||||
@@ -56,16 +73,14 @@ namespace DevourClient.Hooks
|
|||||||
//MelonLoader.MelonLogger.Msg("currentPrice : " + outfit.currentPrice);
|
//MelonLoader.MelonLogger.Msg("currentPrice : " + outfit.currentPrice);
|
||||||
//MelonLoader.MelonLogger.Msg("isOwned : " + outfit.isOwned);
|
//MelonLoader.MelonLogger.Msg("isOwned : " + outfit.isOwned);
|
||||||
//MelonLoader.MelonLogger.Msg("isHidden : " + outfit.isHidden);
|
//MelonLoader.MelonLogger.Msg("isHidden : " + outfit.isHidden);
|
||||||
outfit.basePrice = 0;
|
|
||||||
outfit.currentPrice = 0;
|
|
||||||
outfit.isOwned = true;
|
outfit.isOwned = true;
|
||||||
outfit.isHidden = false;
|
outfit.isHidden = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[HarmonyPatch(typeof(OptionsHelpers))]
|
[HarmonyPatch(typeof(Il2Cpp.OptionsHelpers))]
|
||||||
[HarmonyPatch(nameof(OptionsHelpers.IsRobeUnlocked))] //annotation boiler plate to tell Harmony what to patch. Refer to docs.
|
[HarmonyPatch(nameof(Il2Cpp.OptionsHelpers.IsRobeUnlocked))] //annotation boiler plate to tell Harmony what to patch. Refer to docs.
|
||||||
static class OptionsHelpers_IsRobeUnlocked_Patch
|
static class OptionsHelpers_IsRobeUnlocked_Patch
|
||||||
{
|
{
|
||||||
static bool Prefix(ref string robe)
|
static bool Prefix(ref string robe)
|
||||||
@@ -77,11 +92,11 @@ namespace DevourClient.Hooks
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[HarmonyPatch(typeof(Horror.Menu))]
|
[HarmonyPatch(typeof(Il2CppHorror.Menu))]
|
||||||
[HarmonyPatch(nameof(Horror.Menu.SetupFlashlight))] //annotation boiler plate to tell Harmony what to patch. Refer to docs.
|
[HarmonyPatch(nameof(Il2CppHorror.Menu.SetupFlashlight))] //annotation boiler plate to tell Harmony what to patch. Refer to docs.
|
||||||
static class Horror_Menu_SetLocked_Patch
|
static class Horror_Menu_SetLocked_Patch
|
||||||
{
|
{
|
||||||
static void Prefix(CharacterFlashlight flashlight)
|
static void Prefix(Il2Cpp.CharacterFlashlight flashlight)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
public bool isHidden { get; set; }
|
public bool isHidden { get; set; }
|
||||||
@@ -102,5 +117,16 @@ namespace DevourClient.Hooks
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HarmonyPatch(typeof(ManorMirrorController))]
|
||||||
|
[HarmonyPatch(nameof(ManorMirrorController.IsBroken))] //annotation boiler plate to tell Harmony what to patch. Refer to docs.
|
||||||
|
static class ManorMirrorController_IsBroken
|
||||||
|
{
|
||||||
|
static void Postfix(ref bool __result)
|
||||||
|
{
|
||||||
|
if (ClientMain.infinite_mirrors)
|
||||||
|
__result = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,140 +1,39 @@
|
|||||||
using UnityEngine;
|
/*
|
||||||
using MelonLoader;
|
Note about license. As stated in the GPL FAQ :
|
||||||
using System.Threading;
|
You are allowed to sell copies of the modified program commercially, but only under the terms of the GNU GPL.
|
||||||
using DevourClient.Helpers;
|
Thus, for instance, you must make the source code available to the users of the program as described in the GPL,
|
||||||
|
and they must be allowed to redistribute and modify it as described in the GPL.
|
||||||
|
|
||||||
|
If you decide to modify and then sell this software you have to agree with the GPL 3 license thus making the source code available.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using UnityEngine;
|
||||||
|
using Il2CppInterop.Runtime.Injection;
|
||||||
|
|
||||||
|
[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")]
|
||||||
|
[assembly: MelonLoader.MelonGame("Straight Back Games", "DEVOUR")]
|
||||||
|
|
||||||
namespace DevourClient
|
namespace DevourClient
|
||||||
{
|
{
|
||||||
public class Load : MelonMod
|
public class Load : MelonLoader.MelonMod
|
||||||
{
|
{
|
||||||
bool flashlight_toggle = false;
|
public static ClientMain ClientMainInstance { get; private set; } = default!;
|
||||||
bool flashlight_colorpick = false;
|
public static GameObject DevourClientGO { get; private set; } = default!;
|
||||||
bool level_70 = false;
|
public static void Init()
|
||||||
bool level_666 = false;
|
|
||||||
bool change_server_name = false;
|
|
||||||
bool change_steam_name = false;
|
|
||||||
bool fly = false;
|
|
||||||
float fly_speed = 0.5f;
|
|
||||||
|
|
||||||
bool spam_message = false;
|
|
||||||
|
|
||||||
public override void OnApplicationStart()
|
|
||||||
{
|
{
|
||||||
|
ClassInjector.RegisterTypeInIl2Cpp<ClientMain>();
|
||||||
|
|
||||||
|
DevourClientGO = new GameObject("DevourClient");
|
||||||
|
UnityEngine.Object.DontDestroyOnLoad(DevourClientGO);
|
||||||
|
DevourClientGO.hideFlags |= HideFlags.HideAndDontSave;
|
||||||
|
|
||||||
|
ClientMainInstance = DevourClientGO.AddComponent<ClientMain>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnUpdate()
|
public override void OnInitializeMelon()
|
||||||
{
|
{
|
||||||
|
Init();
|
||||||
if (Input.GetKeyDown(KeyCode.Insert))
|
|
||||||
{
|
|
||||||
Settings.Settings.menu_enable = !Settings.Settings.menu_enable;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.flashlight_toggle && Player.IsInGame())
|
|
||||||
{
|
|
||||||
Hacks.Misc.BigFlashlight(false);
|
|
||||||
}
|
|
||||||
else if (!this.flashlight_toggle && Player.IsInGame())
|
|
||||||
{
|
|
||||||
Hacks.Misc.BigFlashlight(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.spam_message)
|
|
||||||
{
|
|
||||||
Hacks.Misc.MessageSpam(Settings.Settings.message_to_spam);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.level_70 != this.level_666 && !Player.IsInGame())
|
|
||||||
{
|
|
||||||
if (this.level_70)
|
|
||||||
{
|
|
||||||
Hacks.Misc.SetRank(70);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Hacks.Misc.SetRank(666);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.change_server_name && !Player.IsInGame())
|
|
||||||
{
|
|
||||||
Hacks.Misc.SetServerName("patate on top !");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.change_steam_name && !Player.IsInGame())
|
|
||||||
{
|
|
||||||
Hacks.Misc.SetSteamName("patate");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.fly && Player.IsInGame())
|
|
||||||
{
|
|
||||||
Hacks.Misc.Fly(this.fly_speed);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void OnGUI()
|
|
||||||
{
|
|
||||||
if (Settings.Settings.menu_enable) //Si on appuie sur INSERT
|
|
||||||
{
|
|
||||||
GUI.Label(new Rect(300, Settings.Settings.y, 100, 30), "Devour Client"); //Titre du menu
|
|
||||||
this.flashlight_toggle = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 100, 150, 20), this.flashlight_toggle, "Big Flashlight"); //Checkbox Flashlight
|
|
||||||
this.spam_message = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 250, 150, 20), this.spam_message, "Chat Spam"); //Checkbox Chat Spam
|
|
||||||
this.level_70 = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 190, 150, 20), this.level_70, "Level 70"); //Checkbox lvl 70
|
|
||||||
this.level_666 = GUI.Toggle(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 220, 150, 20), this.level_666, "Level 666"); //Checkbox lvl 70
|
|
||||||
this.change_server_name = GUI.Toggle(new Rect(Settings.Settings.x + 200, Settings.Settings.y + 40, 150, 20), this.change_server_name, "Change server name"); //Checkbox servername
|
|
||||||
this.change_steam_name = GUI.Toggle(new Rect(Settings.Settings.x + 200, Settings.Settings.y + 70, 150, 20), this.change_steam_name, "Change steam name"); //Checkbox servername
|
|
||||||
this.fly = GUI.Toggle(new Rect(Settings.Settings.x + 200, Settings.Settings.y + 100, 150, 20), this.fly, "Fly"); //Checkbox fly
|
|
||||||
this.fly_speed = GUI.HorizontalSlider(new Rect(Settings.Settings.x + 200, Settings.Settings.y + 130, 100, 10), this.fly_speed, 0f, 1f); //Slider for the fly speed
|
|
||||||
GUI.Label(new Rect(Settings.Settings.x + 310, Settings.Settings.y + 125, 100, 30), this.fly_speed.ToString()); //Prints the value of the slider
|
|
||||||
|
|
||||||
if (GUI.Button(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 40, 150, 20), "Unlock Achievements"))
|
|
||||||
{
|
|
||||||
Thread AchievementsThread = new Thread(
|
|
||||||
new ThreadStart(Hacks.Unlock.Achievements));
|
|
||||||
AchievementsThread.Start();
|
|
||||||
|
|
||||||
MelonLogger.Msg("Achievements Unlocked !");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (GUI.Button(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 70, 150, 20), "Unlock Doors") && Player.IsInGame())
|
|
||||||
{
|
|
||||||
Hacks.Unlock.Doors();
|
|
||||||
|
|
||||||
MelonLogger.Msg("Doors Unlocked !");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (GUI.Button(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 130, 150, 20), "Flashlight Color"))
|
|
||||||
{
|
|
||||||
flashlight_colorpick = !flashlight_colorpick;
|
|
||||||
MelonLogger.Msg("Flashlight color picker : "+ flashlight_colorpick.ToString());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flashlight_colorpick)
|
|
||||||
{
|
|
||||||
Color flashlight_color_input = DevourClient.Helpers.GUIHelper.ColorPick("Flashlight Color", Settings.Settings.flashlight_color);
|
|
||||||
Settings.Settings.flashlight_color = flashlight_color_input;
|
|
||||||
|
|
||||||
if (Player.IsInGame())
|
|
||||||
{
|
|
||||||
Hacks.Misc.FlashlightColor(flashlight_color_input);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (GUI.Button(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 160, 150, 20), "TP Keys") && Player.IsInGame())
|
|
||||||
{
|
|
||||||
Hacks.Misc.TPKeys();
|
|
||||||
MelonLogger.Msg("Here are your keys !");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (GUI.Button(new Rect(Settings.Settings.x + 10, Settings.Settings.y + 280, 150, 20), "Instant WIn") && Player.IsInGame())
|
|
||||||
{
|
|
||||||
Hacks.Misc.InstantWin();
|
|
||||||
MelonLogger.Msg("EZ Win");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,10 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
using System.Runtime.Versioning;
|
|
||||||
using MelonLoader;
|
|
||||||
|
|
||||||
[assembly: MelonInfo(typeof(DevourClient.Load), "DevourClient", "1.0", "ALittlePatate")]
|
[assembly: System.Reflection.AssemblyCompanyAttribute("DevourClient")]
|
||||||
[assembly: MelonGame(null, null)]
|
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
|
||||||
|
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||||
[assembly: AssemblyVersion("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
|
||||||
[assembly: AssemblyCompany("DevourClient")]
|
[assembly: System.Reflection.AssemblyProductAttribute("DevourClient")]
|
||||||
[assembly: AssemblyConfiguration("Release")]
|
[assembly: System.Reflection.AssemblyTitleAttribute("DevourClient")]
|
||||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||||
[assembly: AssemblyInformationalVersion("1.0.0")]
|
|
||||||
[assembly: AssemblyProduct("DevourClient")]
|
|
||||||
[assembly: AssemblyTitle("DevourClient")]
|
|
||||||
@@ -10,7 +10,30 @@ namespace DevourClient.Settings
|
|||||||
public static float x = 0;
|
public static float x = 0;
|
||||||
public static float y = 0;
|
public static float y = 0;
|
||||||
public static Color flashlight_color = new Color(1.00f, 1.00f, 1.00f, 1);
|
public static Color flashlight_color = new Color(1.00f, 1.00f, 1.00f, 1);
|
||||||
|
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 float speed = 1f;
|
||||||
public const string message_to_spam = "Deez Nutz";
|
public const string message_to_spam = "Deez Nutz";
|
||||||
|
public static KeyCode flyKey = KeyCode.None;
|
||||||
|
public static Vector2 itemsScrollPosition = Vector2.zero;
|
||||||
|
public static Vector2 rituelObjectsScrollPosition = Vector2.zero;
|
||||||
|
public static Vector2 stuffsScrollPosition = Vector2.zero;
|
||||||
|
|
||||||
|
public static KeyCode GetKey()
|
||||||
|
{
|
||||||
|
Thread.Sleep(50); //TOFIX tried using anyKeydown, no success
|
||||||
|
foreach (KeyCode vkey in System.Enum.GetValues(typeof(KeyCode)))
|
||||||
|
{
|
||||||
|
if (Input.GetKey(vkey))
|
||||||
|
{
|
||||||
|
if (vkey != KeyCode.Delete)
|
||||||
|
{
|
||||||
|
return vkey;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return KeyCode.None;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
145
README.md
145
README.md
@@ -1,20 +1,16 @@
|
|||||||
# The Town Update
|
# Unknowncheats thread [here](https://www.unknowncheats.me/forum/other-fps-games/475950-devour-multihack-update.html)
|
||||||
Now includes an Unlock All !!!
|
|
||||||
Everything should be 100% fixed and working for the last update of Devour, have fun !
|
|
||||||
|
|
||||||
# DevourClient
|
# DevourClient
|
||||||
|
|
||||||
I wasn't home for 2 days so i made that, i learnt a lot about C# programming and about Unity IL2CPP game hacking.
|
Very based cheat for the game Devour.
|
||||||
DevourClient is a rather uncommon cheat for Devour, i've seen multiple cheats for this game but they all had some boring features such as ESP and stuff.
|
|
||||||
This cheat hasn't many features and some of them may broke with the time, but hey, spaming the chat with "Deez Nutz" is funny.
|
|
||||||
Also don't mind french comments lol, google translate is your friend !
|
|
||||||
|
|
||||||
ps : my computer was really bad so i couldn't do a lot of testing in game because it required too much time to load
|
|
||||||
|
|
||||||
## Detection rate
|
## Detection rate
|
||||||
|
|
||||||
Well at this point i don't really know, i think there is some sort of native Unity anti cheat template but it doesn't seem active. You're fine, no anti cheat !
|
Well at this point i don't really know, i think there is some sort of native Unity anti cheat template but it doesn't seem active. You're fine, no anti cheat !
|
||||||
|
|
||||||
|
## Menu
|
||||||
|

|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
Everything about spoofing ehre (steam name, server name, level...) will persist if you don't uncheck it (it will be reseted when you'll restart the game obv).
|
Everything about spoofing ehre (steam name, server name, level...) will persist if you don't uncheck it (it will be reseted when you'll restart the game obv).
|
||||||
* An IMGUI menu thanks to UnityEngine
|
* An IMGUI menu thanks to UnityEngine
|
||||||
@@ -23,26 +19,71 @@ Everything about spoofing ehre (steam name, server name, level...) will persist
|
|||||||
* Detects the map you are playing on (useful for the instant win)
|
* Detects the map you are playing on (useful for the instant win)
|
||||||
* Big Flashlight (allows your flashlight to light a lot more)
|
* Big Flashlight (allows your flashlight to light a lot more)
|
||||||
* Flashlight color customization (with a home made color picker)
|
* 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))
|
* 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)
|
* 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)
|
* Doors unlocker (should work fine, though it doesn't seem to work sometimes)
|
||||||
* Keys teleporter (broken, works sometimes but doesn't TP all the keys for some reasons)
|
* Keys teleporter
|
||||||
* LV 70 (puts you to the max level of the game !)
|
* LV spoofer
|
||||||
* LV 666 (secret level, thanks to the guy who told me it exists lol)
|
* Fly
|
||||||
* Steam name spoofer (sets it to "patate", again no input text :/)
|
|
||||||
* Server name spoofer (sets it to "patate on top !", again no input text :/)
|
|
||||||
* Fly !! YES ! YOU CAN FLY ! You can also change the speed of it (left shift : down, space : up, up arrow : forward, back arrow : backward, left arrow : left, right arrow : right)
|
|
||||||
* Unlock all, including flashlights, perks, outfits. Active by default, can't be turned off, no persistance.
|
* Unlock all, including flashlights, perks, outfits. Active by default, can't be turned off, no persistance.
|
||||||
* Instant Win (allows you to win instantaniously on any map, works in singleplayer, but not as a client. May be working as host)
|
* Instant Win (allows you to win instantaniously on any map, works in singleplayer, but not as a client. May be working as host)
|
||||||
|
* Random Sound (make your character play a random acting sound)
|
||||||
|
* Always carrying a medkit
|
||||||
|
* Change your exp at the end of the game, changing it is permanant !
|
||||||
|
* Player ESP (with a home made color picker)
|
||||||
|
* Player skeleton ESP
|
||||||
|
* Player snaplines (with a home made color picker)
|
||||||
|
* Azazel ESP (with a home made color picker)
|
||||||
|
* Azazel Skeleton ESP
|
||||||
|
* Azazel snapline (with a home made color picker)
|
||||||
|
* Item ESP
|
||||||
|
* Demon ESP
|
||||||
|
* Goat/Rat ESP
|
||||||
|
* 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
|
||||||
|
* Change the player's speed
|
||||||
|
* Fullbright
|
||||||
|
* Infinite mirrors (Manor update)
|
||||||
|
* Switch between realms (Manor update)
|
||||||
|
* Due to the game update, I deleted "Steam name spoofer", "Server name spoofer" and "Create a lobby with no player limit" these three 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. For "create a lobby with no player limit", if create a lobby with more than four players, the ghost will be stuck or some of the players will not be able to move. So I have to delete this function.(by manafeng)
|
||||||
|
|
||||||
## Installation
|
## English Installation Tutorial
|
||||||
|
|
||||||
|
Raz did a great job at writing a guide on how to install the mod, link here : [link](https://docs.google.com/presentation/d/1YdIE5wwGWiJZ2RVughFYrlXUnFrxol-HI7QyLY_m0zc)<br>
|
||||||
|
|
||||||
|
## French Installation Tutorial
|
||||||
|
|
||||||
|
For my French fellas out there, 1tap2times made a French video tutorial for the installation of the Mod : [link](https://vimeo.com/789315436)<br>
|
||||||
|
|
||||||
|
## German Video Installation Tutorial
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
## 中文安装指南
|
||||||
|
如果你只是想要安装这个插件,直接在游戏里使用的话
|
||||||
|
|
||||||
|
1、安装 .net 6 的运行环境 → (https://dotnet.microsoft.com/en-us/download/dotnet/6.0)
|
||||||
|
|
||||||
|
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)在别人的同系统同位宽(x86,x32)的电脑里拷贝出来他的melonloader文件夹,然后直接粘贴到自己的电脑里。(2)将melonloader文件夹完全删除,然后重装。
|
||||||
|
|
||||||
|
如果你想要对代码进行修改和开发,请按照下面的”building from source“的步骤,逐步进行
|
||||||
|
|
||||||
0. Download the [release version](https://github.com/ALittlePatate/DevourClient/releases/) or [build it from source](https://github.com/ALittlePatate/DevourClient#building-from-source).
|
|
||||||
1. Install [MelonLoader](https://github.com/LavaGang/MelonLoader/releases/tag/v0.4.3) to Devour.
|
|
||||||
2. Start your game. A cmd should appear, don't close it, MelonLoader is installing and decompiling Devour's game assemblies.
|
|
||||||
3. Wait for the process to finish, once it's done close the game.
|
|
||||||
4. Put the DevourClient.dll file inside `C:\Program Files (x86)\Steam\steamapps\common\Devour\Mods` folder.
|
|
||||||
5. Start the game, now you have successfully installed DevourClient. Use INSERT to open the menu
|
|
||||||
|
|
||||||
## Uninstallation
|
## Uninstallation
|
||||||
|
|
||||||
@@ -50,31 +91,43 @@ Everything about spoofing ehre (steam name, server name, level...) will persist
|
|||||||
|
|
||||||
## Building from source
|
## Building from source
|
||||||
|
|
||||||
0. Clone the repository
|
0. Clone the repository (or Code -> Download Zip)
|
||||||
1. Install MelonLoader (see [Installation](https://github.com/ALittlePatate/DevourClient#installation))
|
1. Install [.NET 6 SDK and runtime](https://dotnet.microsoft.com/en-us/download/dotnet/6.0).
|
||||||
2. Open the solution file in Visual Studio (i used 2019, i don't know about the compatibility with the other versions)
|
2. Install [MelonLoader](https://github.com/LavaGang/MelonLoader/releases) V0.7.1 (go to Settings -> tick "Show ALPHA Pre-Releases") to Devour.
|
||||||
3. Go to : Project --> Add a reference --> Browse --> Click on the browse button in the down right corner of the window.
|
3. Start your game. A cmd should appear, don't close it, MelonLoader is installing and decompiling Devour's game assemblies.
|
||||||
4. Add those files :
|
4. Wait for the process to finish, once it's done close the game.
|
||||||
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\MelonLoader.dll`
|
5. Open the solution file (DevourClient.sln) in Visual Studio
|
||||||
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\0Harmony.dll`
|
6. Go to : Project --> Add a reference --> Browse --> Click on the browse button in the down right corner of the window.
|
||||||
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\UnityEngine.IMGUIModule.dll`
|
7. Add those files :
|
||||||
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\UnityEngine.InputLegacyModule.dll`
|
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\net6\MelonLoader.dll`
|
||||||
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\bolt.user.dll`
|
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\net6\0Harmony.dll`
|
||||||
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\bolt.dll`
|
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\net6\Il2CppInterop.Runtime.dll`
|
||||||
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\UnityEngine.HotReloadModule.dll`
|
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Assembly-CSharp.dll`
|
||||||
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\UnityEngine.UI.dll`
|
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2CppOpsive.UltimateCharacterController.dll`
|
||||||
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\UnityEngine.CoreModule.dll`
|
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2CppBehaviorDesigner.Runtime.dll`
|
||||||
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\Il2Cppmscorlib.dll`
|
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppbolt.user.dll`
|
||||||
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\Assembly-CSharp.dll`
|
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppbolt.dll`
|
||||||
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\Opsive.UltimateCharacterController.dll`
|
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppmscorlib.dll`
|
||||||
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\UnityENgine.InputModule.dll`
|
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.IMGUIModule.dll`
|
||||||
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Dependencies\Il2CppAssemblyGenerator\Il2CppUnhollower\UnhollowerBaseLib.dll`
|
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.InputLegacyModule.dll`
|
||||||
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Dependencies\Il2CppAssemblyGenerator\Il2CppUnhollower\UnhollowerRuntimeLib.dll`
|
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.HotReloadModule.dll`
|
||||||
5. Build the solutions in Release | Any CPU mode
|
* `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`
|
||||||
|
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.AnimationModule.dll`
|
||||||
|
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.PhysicsModule.dll`
|
||||||
|
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppcom.rlabrecque.steamworks.net.dll`
|
||||||
|
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\unity.TextMeshPro.dll`
|
||||||
|
8. Build the solutions in Release | Any CPU
|
||||||
|
|
||||||
## Contact
|
## Contact
|
||||||
|
|
||||||
You can add me on discord at patate#1252
|
You can add me on discord at _.patate or on the [discord server](https://discord.gg/2amMFvqjYd)
|
||||||
|
|
||||||
## Code used
|
## Code used
|
||||||
|
|
||||||
@@ -94,6 +147,9 @@ For decompiling and looking in the source code of the game :
|
|||||||
For teaching me the basics about Devour game hacking, and i pasted the Key TP hack and the non working part of the Achievements Unlocker from it :
|
For teaching me the basics about Devour game hacking, and i pasted the Key TP hack and the non working part of the Achievements Unlocker from it :
|
||||||
* [DevourCheatMonoInjector](https://github.com/Glatrix/DevourCheatMonoInjector)
|
* [DevourCheatMonoInjector](https://github.com/Glatrix/DevourCheatMonoInjector)
|
||||||
|
|
||||||
|
Game's last update before il2cpp :
|
||||||
|
* https://steamdb.info/depot/1274571/history/?changeid=M:1960656865974212833
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
Open an [issue](https://github.com/ALittlePatate/DevourClient/issues/new) or make a [pull request](https://github.com/ALittlePatate/DevourClient/pulls), i'll be glad to improve my project with you !
|
Open an [issue](https://github.com/ALittlePatate/DevourClient/issues/new) or make a [pull request](https://github.com/ALittlePatate/DevourClient/pulls), i'll be glad to improve my project with you !
|
||||||
@@ -101,3 +157,4 @@ Open an [issue](https://github.com/ALittlePatate/DevourClient/issues/new) or mak
|
|||||||
## License
|
## License
|
||||||
|
|
||||||
[GPL 3.0](https://www.gnu.org/licenses/gpl-3.0.md)
|
[GPL 3.0](https://www.gnu.org/licenses/gpl-3.0.md)
|
||||||
|
|
||||||
|
|||||||
BIN
Screenshots/menu.png
Normal file
BIN
Screenshots/menu.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 611 KiB |
37
Scripts/generate_achievements.py
Normal file
37
Scripts/generate_achievements.py
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
"""
|
||||||
|
This file will generate a list of achievements that can be used by the Unlock.Achievements function of the cheat.
|
||||||
|
|
||||||
|
files :
|
||||||
|
script.json -> all the functions/strings/data in the game, generated by https://github.com/Perfare/Il2CppDumper
|
||||||
|
out.cs -> final list of achievements in the form : string[] achievements = { "XXX" ...};
|
||||||
|
"""
|
||||||
|
import json
|
||||||
|
|
||||||
|
# Opening JSON file
|
||||||
|
f = open('script.json')
|
||||||
|
data = json.load(f)
|
||||||
|
|
||||||
|
o = open('out.cs', 'w')
|
||||||
|
o.write("string[] achievements = {")
|
||||||
|
tot_ach = 0
|
||||||
|
for i in data['ScriptString']:
|
||||||
|
v = i["Value"]
|
||||||
|
if "ACH_" in v :
|
||||||
|
o.write('"'+v+'", ')
|
||||||
|
tot_ach+=1
|
||||||
|
o.write("};\n")
|
||||||
|
|
||||||
|
tot_stat = 0
|
||||||
|
o.write("string[] stats = {")
|
||||||
|
for j in data['ScriptString']:
|
||||||
|
v = j["Value"]
|
||||||
|
if "STAT_" in v :
|
||||||
|
o.write('"'+v+'", ')
|
||||||
|
tot_stat+=1
|
||||||
|
o.write("};\n")
|
||||||
|
|
||||||
|
print(f"{tot_ach} achievements, {tot_stat} stats")
|
||||||
|
|
||||||
|
# Closing files
|
||||||
|
o.close()
|
||||||
|
f.close()
|
||||||
Reference in New Issue
Block a user