268 Commits
2.0 ... 4.4

Author SHA1 Message Date
92101631af add translation function 2025-11-02 22:39:21 +11:00
a76b3d27e7 fix: spoof level, achievements list, removed useless popups 2025-10-19 14:57:48 +02:00
ALittlePatate
f8ce7336f6 Merge pull request #85 from mana-feng/MelonLoader
fix crashed issue
2025-10-13 21:28:44 +02:00
e720da278b Update README.md 2025-10-13 16:45:48 +11:00
Hao Feng
e01dd26d6f update for "carnival" 2025-10-13 16:05:56 +11:00
manafeng
ccffaf352f Update README.md 2025-10-12 20:34:00 +11:00
manafeng
3c0d57e308 Update README.md 2025-07-27 19:24:22 +10:00
manafeng
a5aed348fd Update Settings.cs 2025-06-08 03:50:58 +10:00
manafeng
b450fa1cbf Update GUIHelper.cs 2025-06-08 03:50:02 +10:00
manafeng
7a2815681c Update README.md 2025-06-08 03:20:48 +10:00
manafeng
9f93c16dc3 Update README.md 2025-06-08 03:20:24 +10:00
manafeng
e52f29f702 Update README.md 2025-06-08 03:19:31 +10:00
manafeng
2ce4fea684 Update README.md 2025-06-08 03:06:42 +10:00
manafeng
83ffed3c86 Add files via upload 2025-06-08 03:05:49 +10:00
manafeng
d7597b055f Add files via upload 2025-06-08 03:05:16 +10:00
manafeng
360aa1061c Add files via upload 2025-06-08 03:04:48 +10:00
manafeng
aa0eb090ba Add files via upload 2025-06-08 03:02:55 +10:00
manafeng
64e6fd785d Delete ClientMain.cs 2025-06-08 03:02:35 +10:00
manafeng
cfb3235a97 Add files via upload 2025-06-08 03:01:34 +10:00
manafeng
84fc72ab59 Update ClientMain.cs 2025-06-08 02:58:12 +10:00
ALittlePatate
a9c2611427 fix: readme formatting 2024-09-21 19:23:12 +02:00
ALittlePatate
8280ed6362 add: updated english installation tutorial 2024-09-20 19:49:49 +02:00
ALittlePatate
b8ad6a1625 fix: MelonLoader required version 2024-09-20 19:29:47 +02:00
47538a7483 fix: typo 2024-09-20 18:20:53 +02:00
15d1a91806 add: infinite mirors in Manor 2024-09-20 18:11:06 +02:00
ALittlePatate
f32e3b0eb7 fix: discord handle 2024-09-20 16:10:54 +02:00
283eee124c add: features and fixes for the new map (Manor) 2024-09-20 15:57:53 +02:00
2308b63699 fix: project references 2024-09-19 23:39:52 +02:00
ALittlePatate
42ccb45e23 Merge pull request #41 from K4SPERSKY9655/MelonLoader
Update README.md
2024-05-11 15:54:30 +02:00
K4SPERSKY9655
26dfb5fa23 Update README.md
[+] Corrected text
2024-05-11 13:10:41 +02:00
K4SPERSKY9655
49a5b7f3ab Update README.md
[+] Improved the Installation tab
2024-05-11 13:06:54 +02:00
K4SPERSKY9655
b22b56393a Update README.md 2024-05-11 13:02:27 +02:00
K4SPERSKY9655
9a9cb7a6f5 Update README.md
[+] Installation Tutorials improved
2024-05-11 12:51:25 +02:00
55ff1074fb fix: build errors and warnings, updated achievements 2024-03-29 18:54:24 +01:00
ebfb23588e fixed build error 2023-11-04 10:37:05 +01:00
ce6ed66275 update achievements 2023-10-15 19:48:10 +02:00
fd79fb2b19 updated achievements list 2023-10-15 18:23:40 +02:00
Jadis0x
9ea683f29a Code cleanup and performance enhancement efforts 2023-08-20 17:02:31 +03:00
Jadis0x
788ffdac9f Adjusted height of the menu button 2023-08-19 21:10:19 +03:00
Jadis0x
e1c529f0ed menu style has been removed 2023-08-19 16:42:16 +03:00
Jadis0x
9d12c57588 Added button for ShootPlayer function 2023-08-09 22:28:24 +03:00
Jadis0x
620828d4a0 Added ShootPlayer Function 2023-08-09 22:26:01 +03:00
ALittlePatate
0e461120eb changed Msg to Warning for the credits 2023-04-25 17:56:01 +02:00
17569ee1ed add: note about license and credits on the start of the mod 2023-04-25 14:12:24 +02:00
Jadis0x
1efd4bd1b0 added shortkeys for tabs
shortkeys: 

F1: Visual Tab
F2: Entities Tab
F3: Map Specific Tab
F4: ESP Tab
F5: Items Tab
F6: Misc Tab
F7: Player Tab
2023-04-20 20:01:53 +03:00
Jadis0x
c50f9263f7 fixed: items tab 2023-04-20 19:48:40 +03:00
Jadis0x
61adb2030c Add stuffsScrollPosition variable for managing scroll position in spawnable prefabs window 2023-04-20 13:42:39 +03:00
Jadis0x
486301f83a Added a Scrollbar for Spawnable Prefabs 2023-04-20 13:40:32 +03:00
Jadis0x
27c9e7f83a tabs fixed 2023-04-20 13:37:07 +03:00
Jadis0x
1d67349a38 the scrollbar has been added to the items tab 2023-04-20 12:47:26 +03:00
Jadis0x
c4187bdb65 Added itemsScrollPosition and rituelObjectsScrollPosition variables to enable scrolling within the items and ritual objects vertical boxes. 2023-04-20 12:41:25 +03:00
0c7158bdca fixed nullptr exception in BurnRitualObj 2023-04-16 17:35:13 +02:00
25622d70ec fixed a crash when calling Jumpscare when not host 2023-03-15 08:54:03 +01:00
ALittlePatate
f56b26cdb3 add: german installation tutorial 2023-03-12 15:31:16 +01:00
f732234e7a code refactor and optimization 2023-03-11 11:59:11 +01:00
9fbabb2de1 add: load slaughterhouse, optimized crosshair
i don't lose a single fps when using the crosshair now
2023-03-11 10:29:34 +01:00
Jadis0x
7aeacb2991 Feature Added: Crosshair 2023-03-10 14:03:06 +03:00
Jadis0x
c1c11265a5 Add: GetCircularTexture function
In this code, a circular crosshair texture is generated using a nested loop to iterate over each pixel of the texture. The distance between each pixel and the center of the texture is calculated using the Vector2.Distance function. If this distance is less than or equal to the radius of the circle, the pixel is set to white, otherwise it is set to transparent. The resulting texture is then drawn on the screen using the GUI.DrawTexture function.
2023-03-10 12:11:35 +03:00
8793b6b6e2 fixed Sam not being frozen 2023-03-08 09:00:15 +01:00
038c9add25 Merge branch 'MelonLoader' of https://github.com/ALittlePatate/DevourClient into MelonLoader 2023-03-08 08:51:44 +01:00
158afd9bd2 fix: features not working with >4 players
very unoptimal but that's in a corroutine ig that's fine
2023-03-08 08:50:30 +01:00
ALittlePatate
157deabf45 explained how to get MelonLoader v0.6.0 2023-03-08 08:40:53 +01:00
7080c72eec fixed a crash in DrawBones 2023-03-07 19:57:34 +01:00
ALittlePatate
7b20b88b57 changed project description 2023-03-07 18:51:36 +01:00
350f92ea6e menu fixes 2023-03-07 18:48:41 +01:00
b706f3be7b add: boar/corpse ESP + spawn/despawn 2023-03-07 18:35:11 +01:00
422b3a69c6 updated features descriptions 2023-03-07 18:28:04 +01:00
faae081b30 fixed color picker overriding GUI.skin.box.normal.background 2023-03-07 12:18:28 +01:00
3e00d483ef Merge branch 'MelonLoader' of https://github.com/ALittlePatate/DevourClient into MelonLoader 2023-03-07 12:04:03 +01:00
5eb20c0d0b add: all achievements, a script to generate them 2023-03-07 12:03:35 +01:00
ALittlePatate
a83cba0651 updated dll to reference in the project 2023-03-07 09:41:33 +01:00
94031f346c ingore collisions when flying 2023-03-07 09:39:29 +01:00
9cf481e196 added more achievements, 2 missing
i can't find them f me
2023-03-07 09:04:56 +01:00
1ee1c78b97 added more achievements
6 missing
2023-03-06 21:44:41 +01:00
cac4c63dad added Create Server button in the menu 2023-03-06 21:31:34 +01:00
27e6956f2d fixed Camera.main being null, changed arg order in CreateCustomizedLobby 2023-03-06 21:26:35 +01:00
666529bbc0 fixed crash in DrawBones 2023-03-06 21:03:10 +01:00
Jadis0x
ff3eea37bb Updated dll to reference in the project. 2023-03-06 23:00:07 +03:00
Jadis0x
7d581257df Update Misc.cs
Canvases reconfigured using CanvasGroup in Unity.
2023-03-06 22:59:43 +03:00
1f251987b1 MAX_PLAYERS should update when calling CreateCustomizedLobby
it will NOT resize to default 4 when quitting the game but whatever, it should not break
2023-03-06 20:29:13 +01:00
Jadis0x
b459b310bb Added a parameter to make the lobby public/private 2023-03-06 22:21:02 +03:00
a72d36cb5b fixed player skeleton esp color 2023-03-06 19:59:50 +01:00
f0907c07ff BEST_REGION is now by default instead of EU in CreateCustomizedLobby 2023-03-06 19:53:08 +01:00
56c3bcd5be added color picker for player/azazel ESP
need to fix the color of the esp preview overriding GUI.skin.box.normal.background
2023-03-06 19:41:38 +01:00
ALittlePatate
1807f44bf1 updated dll to reference in the project 2023-03-06 19:32:09 +01:00
ALittlePatate
b051282c55 updated dll to reference in the project 2023-03-06 19:28:26 +01:00
Jadis0x
f4c6ce980f Added: Demo for CreateCustomizedLobby function 2023-03-06 21:23:30 +03:00
b3987980e6 added azazel/player skeleton ESP 2023-03-06 19:17:51 +01:00
27475bbd71 removed unused code 2023-03-06 18:46:08 +01:00
6c8e750c05 fixed ESP
please work
2023-03-06 18:38:15 +01:00
a94a3df0eb minimun MelonLoader version fixed
oops
2023-03-06 17:38:53 +01:00
8c94e12023 updated the screenshot of the menu 2023-03-06 17:25:01 +01:00
ALittlePatate
1eb7b1f9ed added VerifyLoaderVersion for MelonLoader v6.0.0
sanity check
2023-03-06 15:43:55 +01:00
f492715f3c rewrote InstantWin, works for the newest update
will be easier to add new maps as well
2023-03-05 17:34:43 +01:00
cb7dc3ba15 fixed access violation in SetSteamName and SetServerName 2023-03-05 17:25:15 +01:00
Jadis0x
b2ee6eee89 Function optimization 2023-03-04 23:22:25 +03:00
98ed98371e added more achievements
still missing those from the Town and Slaughterhouse, trying to figure out how to get those
2023-03-04 10:31:42 +01:00
261f098f2d optimizations, OnUpdate is faster now
Player.IsInGame() only called once instead of 7 in the OnUpdate function
2023-03-04 09:47:43 +01:00
886dc8d95b add: keybind system, added it for fly
can be used for anything, GetKey is to fix tho i tried using anyKeydown, no success
2023-03-04 09:41:56 +01:00
dc5ddcc2a3 added Slaughterhouse to GetMapName
untested but should work
2023-03-04 09:40:47 +01:00
Jadis0x
5a8f937203 BurnRitualObj function has been updated for the "Slaughterhouse" map. 2023-03-03 23:27:18 +03:00
Jadis0x
e1cca375b1 Add: Azazel Nathan, Demon Boar, Survival Pig & Bone
The code has been commented out because it would cause an error for those who are not using the game's beta version.
2023-03-03 18:08:28 +03:00
jadis0x
11381bdebc FreezeAzazel fixed 2023-01-16 22:57:27 +03:00
jadis0x
19234b3c66 FreezeAzazel function added for button 2023-01-16 22:10:40 +03:00
jadis0x
2d337d4e9e FreezeAzazel function added 2023-01-16 22:10:35 +03:00
f6cfbc21cb fix crash on SetRank 2023-01-16 17:27:48 +01:00
jadis0x
7f046e5446 New UI update 2023-01-16 18:24:08 +03:00
jadis0x
8e76055757 ColorPick updated for new UI 2023-01-16 18:20:48 +03:00
jadis0x
933664de8d fix 2023-01-15 22:10:33 +03:00
jadis0x
26a9607853 MakeTex function added 2023-01-15 22:08:27 +03:00
ALittlePatate
fcf6ae16dc updated french tutorial video link 2023-01-14 20:08:36 +01:00
ALittlePatate
56dfc1295a add french video tutorial by 1tap2times 2023-01-14 17:34:50 +01:00
d3a97f090c Merge branch 'MelonLoader' of https://github.com/ALittlePatate/DevourClient into MelonLoader 2023-01-14 12:53:30 +01:00
c873e60617 fix ESP making UI disappearing & game crash 2023-01-14 12:53:04 +01:00
jadis0x
0dec95a512 old code has been removed from the comment line.
Until a better method is discovered, this method will be used temporarily.
2023-01-13 02:54:38 +03:00
jadis0x
3000f18eeb Buttons have been added for the Load Map. 2023-01-12 21:53:02 +03:00
jadis0x
929aaeacd0 Log messages have been added for LoadMap. 2023-01-12 21:46:02 +03:00
jadis0x
ea9a4e13ab LoadMap function has been added. 2023-01-12 21:01:16 +03:00
jadis0x
7550443ead return keyword has been changed to break 2023-01-12 20:52:44 +03:00
jadis0x
5c14210fd4 Function added for the "Rituel book" button 2023-01-10 22:45:13 +03:00
jadis0x
81dce606f1 little fix 2023-01-10 22:36:35 +03:00
jadis0x
d1151d5bc1 update: SpawnGoatOrRat renamed to CarryObject 2023-01-10 22:33:16 +03:00
jadis0x
8c50e83a7a update: SpawnGoatOrRat renamed to CarryObject 2023-01-10 22:33:12 +03:00
jadis0x
26eca35097 fix: TPAzazel function 2023-01-10 21:32:03 +03:00
jadis0x
91333aae6e flashlight values ​​updated 2023-01-10 20:40:11 +03:00
ee4f2bf31b fixed azazel/players ESP being off-centered 2023-01-10 14:27:34 +01:00
90bc75c7f8 fixed item/goat/demon ESP being off-centered 2023-01-10 12:08:54 +01:00
4230bcd431 some work 2023-01-09 20:19:04 +01:00
c53c2aca0f fix stuff, jumpscare player left 2023-01-09 19:24:25 +01:00
51ce511183 added kill player function 2023-01-09 18:53:58 +01:00
0902dee605 add player name to ESP + fix player list button position 2023-01-09 18:45:39 +01:00
c06ad2363e added jumpscare player function 2023-01-09 18:28:07 +01:00
734f7ced0a added functions for player list 2023-01-09 18:19:53 +01:00
64c6b4129a added player list and Players are now BasePlayer 2023-01-09 17:45:32 +01:00
2676c89989 fix invalid reference
again...
2023-01-09 08:23:03 +01:00
8bbdbd7027 crash fixed for localplayer 2023-01-08 21:53:11 +01:00
3d88b189a6 LocalPlayer_ is now BasePlayer 2023-01-08 21:24:56 +01:00
d633f4e2fb add: player name, id and object when getting the players 2023-01-08 20:44:19 +01:00
8a1cf5e96b fix: invalid reference 2023-01-08 20:20:46 +01:00
jadis0x
22b2e583f7 "AutoRespawn" function has been updated 2023-01-08 21:07:48 +03:00
6532b34d7a fix: fixed all the warnings 2023-01-08 18:45:56 +01:00
f0d949c274 fixed installation steps 2023-01-08 18:41:00 +01:00
0fcb62ee6d fixed for .net6 & newest MelonLoader 2023-01-08 18:34:24 +01:00
ALittlePatate
735b9d61f7 MelonLoader is baaack ! 2023-01-08 17:20:41 +01:00
ALittlePatate
6e1ae6e71d update: read this 2022-09-30 14:17:48 +02:00
ALittlePatate
1ef0e76cab fix: typo 2022-09-26 15:33:36 +02:00
ALittlePatate
1fc001577d add: link to the discord server + tools used for beta 2022-09-26 15:06:11 +02:00
ALittlePatate
0cf787f11e fix: typo 2022-09-24 16:31:10 +02:00
ALittlePatate
218fe9c2d7 Updated the note for beta 2022-09-24 16:30:39 +02:00
ALittlePatate
5d2a26bc5d Added a warning for the new beta 2022-09-23 21:54:00 +02:00
Jadis
30a56b01e7 default will return "menu" 2022-09-11 20:52:12 +03:00
Jadis
733759634a add: force start 2022-09-11 20:47:31 +03:00
ALittlePatate
f269dbeb1d add: despawn demons 2022-09-11 14:53:53 +02:00
ALittlePatate
5736ade142 fix: using coroutine's cache for GetAzazel 2022-09-11 09:13:14 +02:00
Jadis
d6c66dcc6f little fix for button positions 2022-09-11 00:55:03 +03:00
Jadis
837dccc822 Fix: The name 'GameObject' does not exist in the current context 2022-09-11 00:47:36 +03:00
Jadis
5a5d05eac6 added "TP Azazel" buttons 2022-09-11 00:40:45 +03:00
Jadis
e4114d4575 added GetAzazel function 2022-09-11 00:37:12 +03:00
Jadis
97a04c606b added button to clear all fountains (the inn) 2022-09-10 23:45:12 +03:00
Jadis
0ac8c6d8fe added CleanFountain function 2022-09-10 23:37:44 +03:00
ALittlePatate
25b8b21379 fix: fixed error when trying to spawn entity as client 2022-09-10 22:33:16 +02:00
ALittlePatate
375a7e7cd7 fix: null reference to NolanBehaviour 2022-09-10 22:25:48 +02:00
ALittlePatate
5f91d5e609 add: using coroutines for players 2022-09-10 22:24:58 +02:00
ALittlePatate
cddcb3f833 add: now using coroutines for azazel 2022-09-10 22:08:35 +02:00
ALittlePatate
1a306e5ee1 add: now using coroutines for demons 2022-09-10 22:02:23 +02:00
ALittlePatate
73aa8806ad add: now using coroutines with SurvivalInteractable and KeyBehaviour 2022-09-10 21:54:11 +02:00
ALittlePatate
d8714b627b add: now using coroutine for getting the localplayer 2022-09-10 21:23:03 +02:00
Jadis
34fea1a131 Added GetAllPlayers function 2022-09-10 21:42:28 +03:00
ALittlePatate
53fda7a510 add: fullbright 2022-09-10 20:21:12 +02:00
ALittlePatate
b33d6ec41d add: fullbright 2022-09-10 20:20:31 +02:00
ALittlePatate
39d5840a45 add: better big flashlight 2022-09-10 20:04:52 +02:00
ALittlePatate
180b454176 Merge branch 'master' of https://github.com/ALittlePatate/DevourClient 2022-09-10 19:15:05 +02:00
ALittlePatate
8022eca3ae fix: added Map.cs to the solution 2022-09-10 19:14:55 +02:00
Jadis
775b003b29 Added buttons to burn ritual objects 2022-09-10 20:05:23 +03:00
Jadis
395a4d2d86 Fix: Player does not contain a definition for GetActiveScene 2022-09-10 19:54:46 +03:00
Jadis
76c324780e Moved GetActiveScene function to Map.cs 2022-09-10 19:47:59 +03:00
ALittlePatate
863b3e78a2 created: Map.cs 2022-09-10 18:39:17 +02:00
ALittlePatate
a8bf48f31a add: menu screenshot 2022-09-10 17:31:59 +02:00
ALittlePatate
3a773ee9a2 Merge branch 'master' of https://github.com/ALittlePatate/DevourClient 2022-09-10 17:30:52 +02:00
ALittlePatate
0c42c0c2a3 Centered cheat name on the menu 2022-09-10 17:30:33 +02:00
ALittlePatate
4be8fe52bf add: new features 2022-09-10 17:27:19 +02:00
ALittlePatate
76adb12c32 added key/goat/rat/demon esp + optimizations 2022-09-10 17:12:48 +02:00
ALittlePatate
8b816d39cb add: BehaviorDesigner.Runtime.dll + fix: typo 2022-09-10 16:12:39 +02:00
ALittlePatate
e3cf689a8d add: spawn animals, enable their brains 2022-09-10 16:11:30 +02:00
ALittlePatate
1209383e43 More objects/entities to spawn !
Azazel Zara, Egg, Bleach, Ritual Book, Matchboxe
2022-09-10 13:57:46 +02:00
ALittlePatate
91c316b708 Merge branch 'master' of https://github.com/ALittlePatate/DevourClient 2022-09-10 13:30:31 +02:00
ALittlePatate
b1df82035c removed dev testing code 2022-09-10 13:29:41 +02:00
ALittlePatate
d21225efa8 add: link to the last game update before il2cpp 2022-09-10 13:05:44 +02:00
Jadis
131a47b0cd Minor fix for "BurnRitualObj" function
Added "InnMapController" class to burn all eggs and unnecessary old class functions removed
2022-09-09 22:47:02 +03:00
ALittlePatate
7609900c85 fix: UltimateCharacterLocomotion could not be found 2022-09-09 12:36:41 +02:00
ALittlePatate
8f7dbe99fb Added UnityEngine.dll to the list + fix typo 2022-09-09 12:04:41 +02:00
Jadis
1cee28dd6c Update MelonMain.cs 2022-09-09 00:27:37 +03:00
Jadis
2fa3a4ac17 Update Misc.cs 2022-09-08 23:45:11 +03:00
Jadis
92aa684320 Update MelonMain.cs 2022-09-08 23:44:56 +03:00
Jadis
3ebe60224d Update MelonMain.cs 2022-09-08 23:35:52 +03:00
Jadis
6dedffd8c8 Update MelonMain.cs 2022-09-08 23:35:10 +03:00
Jadis
59f290773f Added WalkInLobby function 2022-09-08 23:34:11 +03:00
Jadis
6fb812fce2 Update StateHelper.cs 2022-09-08 23:18:48 +03:00
Jadis
a62d93d96b Added LocalPlayer class 2022-09-08 23:11:13 +03:00
Jadis
e640b7b980 Added BurnRitualObj function 2022-09-08 22:09:43 +03:00
Jadis
117598cfff Update MelonMain.cs 2022-09-08 22:01:49 +03:00
ALittlePatate
123e09e079 Merge pull request #19 from jadis0x/patch-11
Added "GetActiveScene" function
2022-09-08 19:20:06 +02:00
ALittlePatate
aca1424b9b Merge pull request #20 from jadis0x/patch-12
Update Misc.cs
2022-09-08 14:26:39 +02:00
ALittlePatate
d0f685894c Merge pull request #18 from jadis0x/patch-10
Update MelonMain.cs
2022-09-08 14:25:41 +02:00
ALittlePatate
50d7c6f9ee Merge pull request #17 from jadis0x/patch-9
Added "SpawnAzazel" function
2022-09-08 14:25:05 +02:00
Jadis
a6d88f6273 Update Misc.cs 2022-09-08 13:07:48 +03:00
Jadis
c17fedef14 Added "GetActiveScene" function 2022-09-08 13:02:12 +03:00
Jadis
f43aef2deb Update MelonMain.cs 2022-09-08 12:09:38 +03:00
Jadis
0f04804290 Added "SpawnAzazel" function 2022-09-08 12:08:24 +03:00
ALittlePatate
48cd33e6df Fix: unlimited UV checkbox position 2022-08-29 13:25:18 +02:00
ALittlePatate
1939d7435a Added the unlimited UV in the features list 2022-08-29 12:01:00 +02:00
ALittlePatate
92dc6645e5 @jadis0x added Unlimited UV
Update MelonMain.cs
2022-08-29 12:00:22 +02:00
ALittlePatate
9684889d3e @jadis0x added Unlimited UV
Update Hooks.cs
2022-08-29 12:00:09 +02:00
Jadis
1bd7799380 Update Hooks.cs 2022-08-29 12:58:00 +03:00
Jadis
9614e68794 Update MelonMain.cs 2022-08-29 12:56:54 +03:00
ALittlePatate
0f05ceb5b8 Added an iten ESP 2022-08-28 18:57:21 +02:00
ALittlePatate
b7b3fff1dc Added TP items in the feature list 2022-08-28 17:50:58 +02:00
ALittlePatate
fc31364dee @jadis0x Added TP Items
Update Misc.cs
2022-08-28 17:49:41 +02:00
ALittlePatate
dc5d2b4ef5 @jadis0x Added TP Items
Update MelonMain.cs
2022-08-28 17:49:27 +02:00
Jadis
b08c2e9f4a Update Misc.cs 2022-08-28 18:35:21 +03:00
Jadis
4cdf0f49f2 Update MelonMain.cs 2022-08-28 18:33:54 +03:00
ALittlePatate
2ab3b2c15f little fix 2022-08-24 17:12:50 +02:00
ALittlePatate
6f4deb0d84 ESP update ! 2022-08-24 17:10:21 +02:00
ALittlePatate
952779d6f3 Readme update, should be more clear now 2022-08-23 15:28:01 +02:00
ALittlePatate
c6e358a56e AutoRespawn will not be on by default anymore 2022-08-03 17:59:21 +02:00
ALittlePatate
ff6820d201 Merge pull request #8 from jadis0x/patch-3
Added AutoRespawn function
2022-07-22 12:36:55 +02:00
ALittlePatate
bd94736ff6 Merge pull request #9 from jadis0x/patch-2
Added IsPlayerCrawling function
2022-07-22 12:36:45 +02:00
ALittlePatate
84bfdf5940 Merge pull request #10 from jadis0x/patch-1
Update MelonMain.cs
2022-07-22 12:36:33 +02:00
Jadis
b815c4dee4 Added AutoRespawn function 2022-07-22 12:56:48 +03:00
Jadis
9559f21885 Added IsPlayerCrawling function 2022-07-22 12:55:13 +03:00
Jadis
5a858bea23 Update MelonMain.cs 2022-07-22 12:53:52 +03:00
ALittlePatate
f7253d6ac5 Added a ShowMessageBox function (may be useful) 2022-06-25 12:23:28 +02:00
ALittlePatate
52e7f7648a Changed FindObjectOfType<NolanBehaviour>() to Player.GetPlayer() to fix glitch 2022-06-25 11:44:02 +02:00
ALittlePatate
c5432f7bc8 fix: missing link 2022-05-22 10:20:28 +02:00
ALittlePatate
aff5e80549 Updated the installation instructions 2022-05-22 10:19:34 +02:00
ALittlePatate
3409b97c6f Merge pull request #5 from pozhiloy-enotik/master
Unlock Doors fix when not host
2022-05-13 21:26:29 +02:00
pozhiloy-enotik
101f15864e Merge branch 'ALittlePatate:master' into master 2022-05-13 20:32:38 +03:00
pozhiloy-enotik
57e0f872ec Multiplayer doors unlock fix 2022-05-13 20:32:27 +02:00
ALittlePatate
bdc4af6742 Merge pull request #3 from pozhiloy-enotik/master
Binds
2022-05-12 20:09:07 +02:00
pozhiloy-enotik
b0b6a92600 Binds 2022-05-12 17:56:24 +02:00
ALittlePatate
24c78c366e Merge pull request #2 from pozhiloy-enotik/master
Flight improvements
2022-05-11 21:25:56 +02:00
pozhiloy-enotik
375d47af6a Player.GetPlayer() 2022-05-11 15:30:51 +02:00
pozhiloy-enotik
4724506017 Replaced arrows with WASD 2022-05-11 15:27:56 +02:00
pozhiloy-enotik
0ac4c99a8e Replaced "else if" with "if" 2022-05-11 15:26:51 +02:00
ALittlePatate
b99350a897 Removed unused stuff + easter egg, need to fix chat spam 2022-05-10 21:43:46 +02:00
ALittlePatate
da117c754c Merge pull request #1 from pozhiloy-enotik/master
You can fly even in lobby
2022-05-10 19:35:40 +02:00
pozhiloy-enotik
fe6ab58fd6 Update StateHelper.cs 2022-05-10 15:33:53 +03:00
pozhiloy-enotik
dbb597f03b Fly in lobby 2022-05-10 15:30:12 +03:00
pozhiloy-enotik
2b9be131f6 IsInGameOrLobby 2022-05-10 15:29:16 +03:00
ALittlePatate
b97933a0f8 Exp changer update 2022-05-08 19:31:17 +02:00
ALittlePatate
e9efd3af9c Added an exp modifier, exp persists ! 2022-05-08 19:30:09 +02:00
ALittlePatate
a7e3ee435e Unlock cursor crashing the game fixed 2022-05-08 18:43:21 +02:00
ALittlePatate
06c6b1e334 Now unlocks the cursor when the menu is opened 2022-05-08 18:18:53 +02:00
ALittlePatate
4a2515e238 surely nothing important 2022-05-08 17:11:38 +02:00
ALittlePatate
e1117d68e1 Update README.md 2022-04-03 11:10:16 +02:00
ALittlePatate
7340c53813 Always medkit added 2022-04-03 11:09:43 +02:00
ALittlePatate
f8e57df71d Fixed the fly 2022-03-28 18:28:44 +02:00
ALittlePatate
0bee338e79 Deleted old code 2022-03-27 19:33:15 +02:00
ALittlePatate
20e598c569 Re-wrote IsInGame function with good code practice 2022-03-27 19:20:07 +02:00
ALittlePatate
8b17b26353 Added Random Sound 2022-03-27 14:24:24 +02:00
ALittlePatate
7587cffca4 Added Random Scream 2022-03-27 14:22:48 +02:00
ALittlePatate
4df7828b9b Deleted GodMode test, wasn't working 2022-03-27 12:35:45 +02:00
ALittlePatate
dcb9407aff Updated the link to Melonloader 2022-03-27 12:33:08 +02:00
ALittlePatate
a4abceb466 Added the link to the UC thread 2022-03-26 16:50:28 +01:00
ALittlePatate
0e0005d5a9 Added the unlock all feature 2022-03-26 16:34:26 +01:00
ALittlePatate
14ae3e1c43 Added an Unlock All and commented out the test godmode for UC release 2022-03-26 16:31:21 +01:00
ALittlePatate
c0858f7eae Merge branch 'master' of https://github.com/ALittlePatate/DevourClient 2022-03-26 13:38:16 +01:00
ALittlePatate
3c245213c7 Now using PlayEnding instead of PlayWinEnding 2022-03-26 13:36:31 +01:00
19 changed files with 4548 additions and 612 deletions

2
.gitignore vendored
View File

@@ -1,4 +1,6 @@
#Visual studio stuff #Visual studio stuff
.vs .vs
.git
DevourClient/DevourClient.csproj
DevourClient/bin DevourClient/bin
DevourClient/obj DevourClient/obj

View File

@@ -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

1811
DevourClient/ClientMain.cs Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -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>

View File

@@ -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.PlayWinEnding("InnWin"); }
} break;
catch }
{ }
try
{ public static void SpawnAzazel(PrefabId _azazelPrefabId)
survival_class.PlayWinEnding("AsylumWin"); {
} if (!Il2CppPhoton.Bolt.BoltNetwork.IsServer)
catch {
{ Hacks.Misc.ShowMessageBox("You need to be host to spawn stuff !");
try return;
{ }
survival_class.PlayWinEnding("TownWin");
} GameObject _localPlayer = Helpers.Entities.LocalPlayer_.p_GameObject;
catch
{ if (_localPlayer != null)
survival_class.PlayWinEnding("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");
}
}
}

View File

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

View File

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

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

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

View File

@@ -1,22 +1,469 @@
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()
{
while (isRunning)
{
Azazels = Il2Cpp.SurvivalAzazelBehaviour.FindObjectsOfType<Il2Cpp.SurvivalAzazelBehaviour>();
// Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f);
}
}
public static void StartAllCoroutines()
{
isRunning = true;
}
public static void StopAllCoroutines()
{
try
{
isRunning = false;
foreach (var coroutine in activeCoroutines)
{
if (coroutine != null)
{
MelonCoroutines.Stop(coroutine);
}
}
activeCoroutines.Clear();
CleanupCachedObjects();
MelonLogger.Msg("All coroutines stopped and cleaned up successfully.");
}
catch (System.Exception ex)
{
MelonLogger.Error($"Error stopping coroutines: {ex.Message}");
}
}
public static void CleanupCachedObjects()
{
try
{
if (Players != null)
{
foreach (var player in Players)
{
if (player != null)
{
player.p_GameObject = null;
}
}
}
Players = null;
GoatsAndRats = null;
SurvivalInteractables = null;
Keys = null;
Demons = null;
Spiders = null;
Ghosts = null;
Azazels = null;
Boars = null;
Corpses = null;
Crows = null;
Lumps = null;
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}");
}
}
public static void RegisterCoroutine(object coroutine)
{
if (coroutine != null && !activeCoroutines.Contains(coroutine))
{
activeCoroutines.Add(coroutine);
}
}
}
}

View File

@@ -1,36 +1,132 @@
using HarmonyLib; using HarmonyLib;
using Il2Cpp;
namespace DevourClient.Hooks namespace DevourClient.Hooks
{ {
public class Hooks public class Hooks
{ {
/* [HarmonyPatch(typeof(Il2Cpp.NolanBehaviour), "OnAttributeUpdateValue")]
[HarmonyPatch(typeof(UIPerkSelectionType))] static class NolanBehaviour_UV
[HarmonyPatch(nameof(UIPerkSelectionType.SetLocked))] //annotation boiler plate to tell Harmony what to patch. Refer to docs.
static class UIPerkSelectionType_SetLocked_Patch
{ {
static void Prefix(ref bool locked, ref int cost) [HarmonyPrefix]
static void Prefix(ref Il2CppOpsive.UltimateCharacterController.Traits.Attribute attribute)
{ {
MelonLoader.MelonLogger.Msg("cost : "+cost); if (ClientMain.unlimitedUV && attribute.m_Name == "Battery")
MelonLoader.MelonLogger.Msg("locked : " + locked); {
attribute.m_Value = 100.0f;
locked = false; return;
cost = 0; }
}
}
[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(NolanBehaviour))] [HarmonyPatch(typeof(Il2CppHorror.Menu))]
[HarmonyPatch(nameof(NolanBehaviour.SetIsBeingKnockedOut))] //annotation boiler plate to tell Harmony what to patch. Refer to docs. [HarmonyPatch(nameof(Il2CppHorror.Menu.SetupPerk))] //annotation boiler plate to tell Harmony what to patch. Refer to docs.
static class NolanBehaviour_SetIsBeingKnockedOut_Patch static class Horror_Menu_SetupPerk_Patch
{ {
static void Prefix(ref bool enable) static void Prefix(ref Il2Cpp.CharacterPerk perk)
{ {
MelonLoader.MelonLogger.Msg("called ! : " + enable); /*
enable = false; public int cost { get; set; }
public bool isOwned { get; set; }
public bool isHidden { get; set; }
*/
//MelonLoader.MelonLogger.Msg("cost : " + perk.cost);
//MelonLoader.MelonLogger.Msg("isOwned : " + perk.isOwned);
//MelonLoader.MelonLogger.Msg("isHidden : " + perk.isHidden);
perk.cost = 0;
perk.isOwned = true;
perk.isHidden = false;
return; return;
} }
} }
[HarmonyPatch(typeof(Il2CppHorror.Menu))]
[HarmonyPatch(nameof(Il2CppHorror.Menu.SetupOutfit))] //annotation boiler plate to tell Harmony what to patch. Refer to docs.
static class Horror_Menu_SetupOutfit_Patch
{
static void Prefix(ref Il2Cpp.CharacterOutfit outfit)
{
/*
public ulong currentPrice;
public ulong basePrice;
public bool isOwned;
public bool isHidden;
*/
//MelonLoader.MelonLogger.Msg("basePrice : " + outfit.basePrice);
//MelonLoader.MelonLogger.Msg("currentPrice : " + outfit.currentPrice);
//MelonLoader.MelonLogger.Msg("isOwned : " + outfit.isOwned);
//MelonLoader.MelonLogger.Msg("isHidden : " + outfit.isHidden);
outfit.isOwned = true;
outfit.isHidden = false;
return;
}
}
[HarmonyPatch(typeof(Il2Cpp.OptionsHelpers))]
[HarmonyPatch(nameof(Il2Cpp.OptionsHelpers.IsRobeUnlocked))] //annotation boiler plate to tell Harmony what to patch. Refer to docs.
static class OptionsHelpers_IsRobeUnlocked_Patch
{
static bool Prefix(ref string robe)
{
//MelonLoader.MelonLogger.Msg("robe : " + robe);
robe = "Default";
return true;
}
}
[HarmonyPatch(typeof(Il2CppHorror.Menu))]
[HarmonyPatch(nameof(Il2CppHorror.Menu.SetupFlashlight))] //annotation boiler plate to tell Harmony what to patch. Refer to docs.
static class Horror_Menu_SetLocked_Patch
{
static void Prefix(Il2Cpp.CharacterFlashlight flashlight)
{
/*
public bool isHidden { get; set; }
public int cost { get; set; }
public bool requiresPurchase { get; set; }
public bool isOwned { get; set; }
*/
//MelonLoader.MelonLogger.Msg("isHidden : " + flashlight.isHidden);
//MelonLoader.MelonLogger.Msg("cost : " + flashlight.cost);
//MelonLoader.MelonLogger.Msg("requiresPurchase : " + flashlight.requiresPurchase);
//MelonLoader.MelonLogger.Msg("isOwned : " + flashlight.isOwned);
flashlight.isHidden = false;
flashlight.cost = 0;
flashlight.requiresPurchase = false;
flashlight.isOwned = true;
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;
}
}
} }
} }

View File

@@ -0,0 +1,789 @@
using System.Collections.Generic;
namespace DevourClient.Localization
{
public enum Language
{
English,
Chinese,
French,
German,
Spanish,
Japanese,
Korean,
Russian,
Portuguese,
Italian
}
public static class MultiLanguageSystem
{
public static Language CurrentLanguage { get; set; } = Language.English;
private static readonly Dictionary<Language, string> LanguageDisplayNames = new Dictionary<Language, string>
{
{ Language.English, "English" },
{ Language.Chinese, "简体中文" },
{ Language.French, "Français" },
{ Language.German, "Deutsch" },
{ Language.Spanish, "Español" },
{ Language.Japanese, "日本語" },
{ Language.Korean, "한국어" },
{ Language.Russian, "Русский" },
{ Language.Portuguese, "Português" },
{ Language.Italian, "Italiano" }
};
private static readonly Dictionary<string, Dictionary<Language, string>> Translations =
new Dictionary<string, Dictionary<Language, string>>();
static MultiLanguageSystem()
{
InitializeTranslations();
}
private static void InitializeTranslations()
{
AddTranslation("Key",
cn: "钥匙", fr: "Clé", de: "Schlüssel", es: "Llave",
ja: "鍵", ko: "열쇠", ru: "Ключ", pt: "Chave", it: "Chiave");
AddTranslation("Hay",
cn: "干草", fr: "Foin", de: "Heu", es: "Heno",
ja: "干し草", ko: "건초", ru: "Сено", pt: "Feno", it: "Fieno");
AddTranslation("FirstAid",
cn: "急救包", fr: "Trousse de premiers soins", de: "Erste Hilfe", es: "Botiquín",
ja: "救急箱", ko: "응급처치", ru: "Аптечка", pt: "Primeiros socorros", it: "Pronto soccorso");
AddTranslation("Battery",
cn: "电池", fr: "Batterie", de: "Batterie", es: "Batería",
ja: "バッテリー", ko: "배터리", ru: "Батарея", pt: "Bateria", it: "Batteria");
AddTranslation("Gasoline",
cn: "汽油", fr: "Essence", de: "Benzin", es: "Gasolina",
ja: "ガソリン", ko: "휘발유", ru: "Бензин", pt: "Gasolina", it: "Benzina");
AddTranslation("Fuse",
cn: "保险丝", fr: "Fusible", de: "Sicherung", es: "Fusible",
ja: "ヒューズ", ko: "퓨즈", ru: "Предохранитель", pt: "Fusível", it: "Fusibile");
AddTranslation("Food",
cn: "食物", fr: "Nourriture", de: "Essen", es: "Comida",
ja: "食べ物", ko: "음식", ru: "Еда", pt: "Comida", it: "Cibo");
AddTranslation("RottenFood",
cn: "腐烂食物", fr: "Nourriture pourrie", de: "Verdorbenes Essen", es: "Comida podrida",
ja: "腐った食べ物", ko: "썩은 음식", ru: "Гнилая еда", pt: "Comida podre", it: "Cibo marcio");
AddTranslation("Bone",
cn: "骨头", fr: "Os", de: "Knochen", es: "Hueso",
ja: "骨", ko: "뼈", ru: "Кость", pt: "Osso", it: "Osso");
AddTranslation("Bleach",
cn: "漂白剂", fr: "Eau de Javel", de: "Bleichmittel", es: "Lejía",
ja: "漂白剤", ko: "표백제", ru: "Отбеливатель", pt: "Alvejante", it: "Candeggina");
AddTranslation("Matchbox",
cn: "火柴盒", fr: "Boîte d'allumettes", de: "Streichholzschachtel", es: "Caja de cerillas",
ja: "マッチ箱", ko: "성냥갑", ru: "Спички", pt: "Caixa de fósforos", it: "Scatola di fiammiferi");
AddTranslation("Spade",
cn: "铲子", fr: "Pelle", de: "Spaten", es: "Pala",
ja: "シャベル", ko: "삽", ru: "Лопата", pt: "Pá", it: "Vanga");
AddTranslation("Cake",
cn: "蛋糕", fr: "Gâteau", de: "Kuchen", es: "Pastel",
ja: "ケーキ", ko: "케이크", ru: "Торт", pt: "Bolo", it: "Torta");
AddTranslation("MusicBox",
cn: "音乐盒", fr: "Boîte à musique", de: "Spieluhr", es: "Caja de música",
ja: "オルゴール", ko: "오르골", ru: "Музыкальная шкатулка", pt: "Caixa de música", it: "Carillon");
AddTranslation("MusicBox-Idle",
cn: "音乐盒", fr: "Boîte à musique", de: "Spieluhr", es: "Caja de música",
ja: "オルゴール", ko: "오르골", ru: "Музыкальная шкатулка", pt: "Caixa de música", it: "Carillon");
AddTranslation("Coin",
cn: "硬币", fr: "Pièce", de: "Münze", es: "Moneda",
ja: "コイン", ko: "동전", ru: "Монета", pt: "Moeda", it: "Moneta");
// 仪式物品
AddTranslation("Egg",
cn: "鸡蛋", fr: "Œuf", de: "Ei", es: "Huevo",
ja: "卵", ko: "달걀", ru: "Яйцо", pt: "Ovo", it: "Uovo");
for (int i = 1; i <= 10; i++)
{
AddTranslation($"Egg-Clean-{i}",
cn: $"鸡蛋-{i}", fr: $"Œuf-{i}", de: $"Ei-{i}", es: $"Huevo-{i}",
ja: $"卵-{i}", ko: $"달걀-{i}", ru: $"Яйцо-{i}", pt: $"Ovo-{i}", it: $"Uovo-{i}");
}
AddTranslation("RitualBook",
cn: "仪式书", fr: "Livre rituel", de: "Ritualbuch", es: "Libro ritual",
ja: "儀式の本", ko: "의식서", ru: "Ритуальная книга", pt: "Livro ritual", it: "Libro rituale");
AddTranslation("DollHead",
cn: "玩偶头", fr: "Tête de poupée", de: "Puppenkopf", es: "Cabeza de muñeca",
ja: "人形の頭", ko: "인형 머리", ru: "Голова куклы", pt: "Cabeça de boneca", it: "Testa di bambola");
AddTranslation("Head",
cn: "头颅", fr: "Tête", de: "Kopf", es: "Cabeza",
ja: "頭", ko: "머리", ru: "Голова", pt: "Cabeça", it: "Testa");
AddTranslation("CleanHead",
cn: "干净的头颅", fr: "Tête propre", de: "Sauberer Kopf", es: "Cabeza limpia",
ja: "きれいな頭", ko: "깨끗한 머리", ru: "Чистая голова", pt: "Cabeça limpa", it: "Testa pulita");
AddTranslation("Goat",
cn: "山羊", fr: "Chèvre", de: "Ziege", es: "Cabra",
ja: "ヤギ", ko: "염소", ru: "Коза", pt: "Cabra", it: "Capra");
AddTranslation("Rat",
cn: "老鼠", fr: "Rat", de: "Ratte", es: "Rata",
ja: "ネズミ", ko: "쥐", ru: "Крыса", pt: "Rato", it: "Ratto");
AddTranslation("Pig",
cn: "猪", fr: "Cochon", de: "Schwein", es: "Cerdo",
ja: "豚", ko: "돼지", ru: "Свинья", pt: "Porco", it: "Maiale");
AddTranslation("Azazel",
cn: "Azazel", fr: "Azazel", de: "Azazel", es: "Azazel",
ja: "Azazel", ko: "Azazel", ru: "Azazel", pt: "Azazel", it: "Azazel");
AddTranslation("Demon",
cn: "恶魔", fr: "Démon", de: "Dämon", es: "Demonio",
ja: "悪魔", ko: "악마", ru: "Демон", pt: "Demônio", it: "Demone");
AddTranslation("Spider",
cn: "蜘蛛", fr: "Araignée", de: "Spinne", es: "Araña",
ja: "クモ", ko: "거미", ru: "Паук", pt: "Aranha", it: "Ragno");
AddTranslation("Ghost",
cn: "鬼魂", fr: "Fantôme", de: "Geist", es: "Fantasma",
ja: "幽霊", ko: "유령", ru: "Призрак", pt: "Fantasma", it: "Fantasma");
AddTranslation("Boar",
cn: "野猪", fr: "Sanglier", de: "Wildschwein", es: "Jabalí",
ja: "イノシシ", ko: "멧돼지", ru: "Кабан", pt: "Javali", it: "Cinghiale");
AddTranslation("Corpse",
cn: "尸体", fr: "Cadavre", de: "Leiche", es: "Cadáver",
ja: "死体", ko: "시체", ru: "Труп", pt: "Cadáver", it: "Cadavere");
AddTranslation("Crow",
cn: "乌鸦", fr: "Corbeau", de: "Krähe", es: "Cuervo",
ja: "カラス", ko: "까마귀", ru: "Ворона", pt: "Corvo", it: "Corvo");
AddTranslation("Lump",
cn: "肿块", fr: "Masse", de: "Klumpen", es: "Bulto",
ja: "塊", ko: "덩어리", ru: "Комок", pt: "Caroço", it: "Grumo");
AddTranslation("Monkey",
cn: "猴子", fr: "Singe", de: "Affe", es: "Mono",
ja: "猿", ko: "원숭이", ru: "Обезьяна", pt: "Macaco", it: "Scimmia");
AddTranslation("Inmate",
cn: "囚犯", fr: "Détenu", de: "Häftling", es: "Recluso",
ja: "囚人", ko: "수감자", ru: "Заключенный", pt: "Detento", it: "Detenuto");
AddTranslation("AzazelSam",
cn: "Azazel-Sam", fr: "Azazel-Sam", de: "Azazel-Sam", es: "Azazel-Sam",
ja: "Azazel-Sam", ko: "Azazel-Sam", ru: "Azazel-Sam", pt: "Azazel-Sam", it: "Azazel-Sam");
AddTranslation("AzazelMolly",
cn: "Azazel-Molly", fr: "Azazel-Molly", de: "Azazel-Molly", es: "Azazel-Molly",
ja: "Azazel-Molly", ko: "Azazel-Molly", ru: "Azazel-Molly", pt: "Azazel-Molly", it: "Azazel-Molly");
AddTranslation("AzazelAnna",
cn: "Azazel-Anna", fr: "Azazel-Anna", de: "Azazel-Anna", es: "Azazel-Anna",
ja: "Azazel-Anna", ko: "Azazel-Anna", ru: "Azazel-Anna", pt: "Azazel-Anna", it: "Azazel-Anna");
AddTranslation("AzazelZara",
cn: "Azazel-Zara", fr: "Azazel-Zara", de: "Azazel-Zara", es: "Azazel-Zara",
ja: "Azazel-Zara", ko: "Azazel-Zara", ru: "Azazel-Zara", pt: "Azazel-Zara", it: "Azazel-Zara");
AddTranslation("AzazelNathan",
cn: "Azazel-Nathan", fr: "Azazel-Nathan", de: "Azazel-Nathan", es: "Azazel-Nathan",
ja: "Azazel-Nathan", ko: "Azazel-Nathan", ru: "Azazel-Nathan", pt: "Azazel-Nathan", it: "Azazel-Nathan");
AddTranslation("AzazelApril",
cn: "Azazel-April", fr: "Azazel-April", de: "Azazel-April", es: "Azazel-April",
ja: "Azazel-April", ko: "Azazel-April", ru: "Azazel-April", pt: "Azazel-April", it: "Azazel-April");
AddTranslation("AzazelKai",
cn: "Azazel-Kai", fr: "Azazel-Kai", de: "Azazel-Kai", es: "Azazel-Kai",
ja: "Azazel-Kai", ko: "Azazel-Kai", ru: "Azazel-Kai", pt: "Azazel-Kai", it: "Azazel-Kai");
AddTranslation("Sam",
cn: "萨姆", fr: "Sam", de: "Sam", es: "Sam",
ja: "サム", ko: "샘", ru: "Сэм", pt: "Sam", it: "Sam");
AddTranslation("Anna",
cn: "安娜", fr: "Anna", de: "Anna", es: "Anna",
ja: "アンナ", ko: "안나", ru: "Анна", pt: "Anna", it: "Anna");
AddTranslation("Zara",
cn: "扎拉", fr: "Zara", de: "Zara", es: "Zara",
ja: "ザラ", ko: "자라", ru: "Зара", pt: "Zara", it: "Zara");
AddTranslation("Devour",
cn: "农舍", fr: "Ferme", de: "Bauernhof", es: "Granja",
ja: "農家", ko: "농가", ru: "Ферма", pt: "Fazenda", it: "Fattoria");
AddTranslation("Farmhouse",
cn: "农舍", fr: "Ferme", de: "Bauernhof", es: "Granja",
ja: "農家", ko: "농가", ru: "Ферма", pt: "Fazenda", it: "Fattoria");
AddTranslation("Molly",
cn: "精神病院", fr: "Asile", de: "Anstalt", es: "Asilo",
ja: "精神病院", ko: "정신병원", ru: "Психбольница", pt: "Asilo", it: "Manicomio");
AddTranslation("Asylum",
cn: "精神病院", fr: "Asile", de: "Anstalt", es: "Asilo",
ja: "精神病院", ko: "정신병원", ru: "Психбольница", pt: "Asilo", it: "Manicomio");
AddTranslation("Inn",
cn: "旅馆", fr: "Auberge", de: "Gasthaus", es: "Posada",
ja: "旅館", ko: "여관", ru: "Гостиница", pt: "Pousada", it: "Locanda");
AddTranslation("Town",
cn: "小镇", fr: "Ville", de: "Stadt", es: "Pueblo",
ja: "町", ko: "마을", ru: "Город", pt: "Cidade", it: "Città");
AddTranslation("Slaughterhouse",
cn: "屠宰场", fr: "Abattoir", de: "Schlachthaus", es: "Matadero",
ja: "屠殺場", ko: "도살장", ru: "Бойня", pt: "Matadouro", it: "Macello");
AddTranslation("Manor",
cn: "庄园", fr: "Manoir", de: "Herrenhaus", es: "Mansión",
ja: "邸宅", ko: "저택", ru: "Усадьба", pt: "Solar", it: "Villa");
AddTranslation("Carnival",
cn: "嘉年华", fr: "Carnaval", de: "Karneval", es: "Carnaval",
ja: "カーニバル", ko: "카니발", ru: "Карнавал", pt: "Carnaval", it: "Carnevale");
AddTranslation("Menu",
cn: "菜单", fr: "Menu", de: "Menü", es: "Menú",
ja: "メニュー", ko: "메뉴", ru: "Меню", pt: "Menu", it: "Menu");
AddTranslation("Player",
cn: "玩家", fr: "Joueur", de: "Spieler", es: "Jugador",
ja: "プレイヤー", ko: "플레이어", ru: "Игрок", pt: "Jogador", it: "Giocatore");
AddTranslation("Door",
cn: "门", fr: "Porte", de: "Tür", es: "Puerta",
ja: "ドア", ko: "문", ru: "Дверь", pt: "Porta", it: "Porta");
AddTranslation("Gate",
cn: "大门", fr: "Portail", de: "Tor", es: "Portal",
ja: "門", ko: "대문", ru: "Ворота", pt: "Portão", it: "Cancello");
AddTranslation("Altar",
cn: "祭坛", fr: "Autel", de: "Altar", es: "Altar",
ja: "祭壇", ko: "제단", ru: "Алтарь", pt: "Altar", it: "Altare");
AddTranslation("Fountain",
cn: "喷泉", fr: "Fontaine", de: "Brunnen", es: "Fuente",
ja: "噴水", ko: "분수", ru: "Фонтан", pt: "Fonte", it: "Fontana");
AddTranslation("Mirror",
cn: "镜子", fr: "Miroir", de: "Spiegel", es: "Espejo",
ja: "鏡", ko: "거울", ru: "Зеркало", pt: "Espelho", it: "Specchio");
AddTranslation("Cage",
cn: "笼子", fr: "Cage", de: "Käfig", es: "Jaula",
ja: "檻", ko: "우리", ru: "Клетка", pt: "Gaiola", it: "Gabbia");
AddTranslation("Big Flashlight",
cn: "大手电筒", fr: "Grande lampe", de: "Große Taschenlampe", es: "Linterna grande",
ja: "大型懐中電灯", ko: "큰 손전등", ru: "Большой фонарик", pt: "Lanterna grande", it: "Grande torcia");
AddTranslation("Fullbright",
cn: "全亮", fr: "Luminosité max", de: "Vollhelligkeit", es: "Brillo completo",
ja: "フルブライト", ko: "전체 밝기", ru: "Полная яркость", pt: "Brilho total", it: "Luminosità piena");
AddTranslation("Unlimited UV Light",
cn: "无限紫外线", fr: "UV illimitée", de: "Unbegrenzte UV", es: "UV ilimitada",
ja: "無限UV", ko: "무제한 UV", ru: "Безлимитный УФ", pt: "UV ilimitada", it: "UV illimitata");
AddTranslation("Crosshair",
cn: "准星", fr: "Réticule", de: "Fadenkreuz", es: "Punto de mira",
ja: "照準", ko: "조준점", ru: "Прицел", pt: "Mira", it: "Mirino");
AddTranslation("Flashlight Color",
cn: "手电筒颜色", fr: "Couleur lampe", de: "Taschenlampenfarbe", es: "Color linterna",
ja: "懐中電灯の色", ko: "손전등 색상", ru: "Цвет фонарика", pt: "Cor da lanterna", it: "Colore torcia");
AddTranslation("TP items to you",
cn: "传送物品到你", fr: "TP objets vers vous", de: "TP Gegenstände zu dir", es: "TP objetos a ti",
ja: "アイテムをテレポート", ko: "아이템 텔레포트", ru: "ТП предметы к вам", pt: "TP itens para você", it: "TP oggetti a te");
AddTranslation("Freeze azazel",
cn: "冻结 Azazel", fr: "Geler Azazel", de: "Azazel einfrieren", es: "Congelar Azazel",
ja: "Azazelを凍結", ko: "Azazel 얼리기", ru: "Заморозить Azazel", pt: "Congelar Azazel", it: "Congela Azazel");
AddTranslation("Azazel & Demons",
cn: "Azazel 和恶魔", fr: "Azazel et démons", de: "Azazel & Dämonen", es: "Azazel y demonios",
ja: "Azazelと悪魔", ko: "Azazel과 악마", ru: "Azazel и демоны", pt: "Azazel e demônios", it: "Azazel e demoni");
AddTranslation("Instant Win",
cn: "瞬间胜利", fr: "Victoire instantanée", de: "Sofortiger Sieg", es: "Victoria instantánea",
ja: "即勝利", ko: "즉시 승리", ru: "Мгновенная победа", pt: "Vitória instantânea", it: "Vittoria istantanea");
AddTranslation("Burn a ritual object",
cn: "燃烧一个仪式物品", fr: "Brûler un objet rituel", de: "Ritualobjekt verbrennen", es: "Quemar objeto ritual",
ja: "儀式の物を燃やす", ko: "의식 물체 태우기", ru: "Сжечь ритуальный объект", pt: "Queimar objeto ritual", it: "Brucia oggetto rituale");
AddTranslation("Burn all ritual objects",
cn: "燃烧所有仪式物品", fr: "Brûler tous les objets", de: "Alle Objekte verbrennen", es: "Quemar todos los objetos",
ja: "すべての物を燃やす", ko: "모든 물체 태우기", ru: "Сжечь все объекты", pt: "Queimar todos os objetos", it: "Brucia tutti gli oggetti");
AddTranslation("Force Start Game",
cn: "强制开始游戏", fr: "Forcer le démarrage", de: "Spiel erzwingen", es: "Forzar inicio",
ja: "強制開始", ko: "강제 시작", ru: "Принудительный старт", pt: "Forçar início", it: "Forza avvio");
AddTranslation("TP to Azazel",
cn: "传送到 Azazel", fr: "TP vers Azazel", de: "TP zu Azazel", es: "TP a Azazel",
ja: "Azazelへテレポート", ko: "Azazel로 텔레포트", ru: "ТП к Azazel", pt: "TP para Azazel", it: "TP ad Azazel");
AddTranslation("Despawn Demons",
cn: "移除恶魔", fr: "Retirer démons", de: "Dämonen entfernen", es: "Eliminar demonios",
ja: "悪魔を削除", ko: "악마 제거", ru: "Удалить демонов", pt: "Remover demônios", it: "Rimuovi demoni");
AddTranslation("Despawn Inmates",
cn: "移除囚犯", fr: "Retirer détenus", de: "Häftlinge entfernen", es: "Eliminar reclusos",
ja: "囚人を削除", ko: "수감자 제거", ru: "Удалить заключенных", pt: "Remover detentos", it: "Rimuovi detenuti");
AddTranslation("Clean The Fountains",
cn: "清洁喷泉", fr: "Nettoyer fontaines", de: "Brunnen reinigen", es: "Limpiar fuentes",
ja: "噴水を掃除", ko: "분수 청소", ru: "Очистить фонтаны", pt: "Limpar fontes", it: "Pulisci fontane");
AddTranslation("Despawn Spiders",
cn: "移除蜘蛛", fr: "Retirer araignées", de: "Spinnen entfernen", es: "Eliminar arañas",
ja: "クモを削除", ko: "거미 제거", ru: "Удалить пауков", pt: "Remover aranhas", it: "Rimuovi ragni");
AddTranslation("Despawn Ghosts",
cn: "移除幽灵", fr: "Retirer fantômes", de: "Geister entfernen", es: "Eliminar fantasmas",
ja: "ゴーストを削除", ko: "유령 제거", ru: "Удалить призраков", pt: "Remover fantasmas", it: "Rimuovi fantasmi");
AddTranslation("Despawn Boars",
cn: "移除野猪", fr: "Retirer sangliers", de: "Wildschweine entfernen", es: "Eliminar jabalíes",
ja: "イノシシを削除", ko: "멧돼지 제거", ru: "Удалить кабанов", pt: "Remover javalis", it: "Rimuovi cinghiali");
AddTranslation("Despawn Corpses",
cn: "移除尸体", fr: "Retirer cadavres", de: "Leichen entfernen", es: "Eliminar cadáveres",
ja: "死体を削除", ko: "시체 제거", ru: "Удалить трупы", pt: "Remover cadáveres", it: "Rimuovi cadaveri");
AddTranslation("Despawn Crows",
cn: "移除乌鸦", fr: "Retirer corbeaux", de: "Krähen entfernen", es: "Eliminar cuervos",
ja: "カラスを削除", ko: "까마귀 제거", ru: "Удалить воронов", pt: "Remover corvos", it: "Rimuovi corvi");
AddTranslation("Despawn Lumps",
cn: "移除肿块", fr: "Retirer masses", de: "Klumpen entfernen", es: "Eliminar bultos",
ja: "塊を削除", ko: "덩어리 제거", ru: "Удалить комки", pt: "Remover massas", it: "Rimuovi grumi");
AddTranslation("Switch realm",
cn: "切换领域", fr: "Changer de royaume", de: "Reich wechseln", es: "Cambiar reino",
ja: "領域を切り替え", ko: "영역 전환", ru: "Сменить мир", pt: "Trocar reino", it: "Cambia regno");
AddTranslation("Switch realm (house)",
cn: "切换领域(房屋)", fr: "Changer (maison)", de: "Reich wechseln (Haus)", es: "Cambiar (casa)",
ja: "領域切替(家)", ko: "영역 전환 (집)", ru: "Сменить (дом)", pt: "Trocar (casa)", it: "Cambia (casa)");
AddTranslation("Infinite mirrors",
cn: "无限镜子", fr: "Miroirs infinis", de: "Unendliche Spiegel", es: "Espejos infinitos",
ja: "無限の鏡", ko: "무한 거울", ru: "Бесконечные зеркала", pt: "Espelhos infinitos", it: "Specchi infiniti");
AddTranslation("Despawn Monkeys",
cn: "移除猴子", fr: "Retirer singes", de: "Affen entfernen", es: "Eliminar monos",
ja: "サルを削除", ko: "원숭이 제거", ru: "Удалить обезьян", pt: "Remover macacos", it: "Rimuovi scimmie");
AddTranslation("Load Map:",
cn: "加载地图:", fr: "Charger carte:", de: "Karte laden:", es: "Cargar mapa:",
ja: "マップ読込:", ko: "맵 로드:", ru: "Загрузить карту:", pt: "Carregar mapa:", it: "Carica mappa:");
AddTranslation("Player ESP",
cn: "玩家透视", fr: "ESP joueur", de: "Spieler ESP", es: "ESP jugador",
ja: "プレイヤーESP", ko: "플레이어 ESP", ru: "ESP игрока", pt: "ESP jogador", it: "ESP giocatore");
AddTranslation("Skeleton ESP",
cn: "骨骼透视", fr: "ESP squelette", de: "Skelett ESP", es: "ESP esqueleto",
ja: "スケルトンESP", ko: "스켈레톤 ESP", ru: "ESP скелета", pt: "ESP esqueleto", it: "ESP scheletro");
AddTranslation("Player Snapline",
cn: "玩家连线", fr: "Ligne joueur", de: "Spieler-Linie", es: "Línea jugador",
ja: "プレイヤーライン", ko: "플레이어 라인", ru: "Линия к игроку", pt: "Linha jogador", it: "Linea giocatore");
AddTranslation("Player ESP Color",
cn: "玩家透视颜色", fr: "Couleur ESP joueur", de: "Spieler ESP Farbe", es: "Color ESP jugador",
ja: "プレイヤーESP色", ko: "플레이어 ESP 색상", ru: "Цвет ESP игрока", pt: "Cor ESP jogador", it: "Colore ESP giocatore");
AddTranslation("Azazel ESP",
cn: "Azazel 透视", fr: "ESP Azazel", de: "Azazel ESP", es: "ESP Azazel",
ja: "Azazel ESP", ko: "Azazel ESP", ru: "ESP Azazel", pt: "ESP Azazel", it: "ESP Azazel");
AddTranslation("Azazel Snapline",
cn: "Azazel 连线", fr: "Ligne Azazel", de: "Azazel-Linie", es: "Línea Azazel",
ja: "Azazelライン", ko: "Azazel 라인", ru: "Линия к Azazel", pt: "Linha Azazel", it: "Linea Azazel");
AddTranslation("Azazel ESP Color",
cn: "Azazel 透视颜色", fr: "Couleur ESP Azazel", de: "Azazel ESP Farbe", es: "Color ESP Azazel",
ja: "Azazel ESP色", ko: "Azazel ESP 색상", ru: "Цвет ESP Azazel", pt: "Cor ESP Azazel", it: "Colore ESP Azazel");
AddTranslation("Item ESP",
cn: "物品透视", fr: "ESP objet", de: "Gegenstands-ESP", es: "ESP objeto",
ja: "アイテムESP", ko: "아이템 ESP", ru: "ESP предметов", pt: "ESP item", it: "ESP oggetto");
AddTranslation("Goat/Rat ESP",
cn: "山羊/老鼠透视", fr: "ESP chèvre/rat", de: "Ziege/Ratte ESP", es: "ESP cabra/rata",
ja: "ヤギ/ネズミESP", ko: "염소/쥐 ESP", ru: "ESP козы/крысы", pt: "ESP cabra/rato", it: "ESP capra/ratto");
AddTranslation("Demon ESP",
cn: "恶魔透视", fr: "ESP démon", de: "Dämon ESP", es: "ESP demonio",
ja: "悪魔ESP", ko: "악마 ESP", ru: "ESP демона", pt: "ESP demônio", it: "ESP demone");
AddTranslation("Unlimited Stamina",
cn: "无限耐力", fr: "Endurance illimitée", de: "Unbegrenzte Ausdauer", es: "Resistencia ilimitada",
ja: "無限スタミナ", ko: "무제한 스태미나", ru: "Безлимитная выносливость", pt: "Resistência ilimitada", it: "Resistenza illimitata");
AddTranslation("Walk In Lobby",
cn: "大厅行走", fr: "Marcher dans le lobby", de: "Im Lobby laufen", es: "Caminar en lobby",
ja: "ロビーで歩く", ko: "로비에서 걷기", ru: "Ходить в лобби", pt: "Andar no lobby", it: "Camminare in lobby");
AddTranslation("Fly",
cn: "飞行", fr: "Voler", de: "Fliegen", es: "Volar",
ja: "飛行", ko: "비행", ru: "Полет", pt: "Voar", it: "Volare");
AddTranslation("Fly Speed",
cn: "飞行速度", fr: "Vitesse vol", de: "Fluggeschwindigkeit", es: "Velocidad vuelo",
ja: "飛行速度", ko: "비행 속도", ru: "Скорость полета", pt: "Velocidade voo", it: "Velocità volo");
AddTranslation("Fast Move",
cn: "快速移动", fr: "Déplacement rapide", de: "Schnelle Bewegung", es: "Movimiento rápido",
ja: "高速移動", ko: "빠른 이동", ru: "Быстрое движение", pt: "Movimento rápido", it: "Movimento veloce");
AddTranslation("Speed Multiplier",
cn: "速度倍数", fr: "Multiplicateur vitesse", de: "Geschwindigkeitsmultiplikator", es: "Multiplicador velocidad",
ja: "速度倍率", ko: "속도 배율", ru: "Множитель скорости", pt: "Multiplicador velocidade", it: "Moltiplicatore velocità");
AddTranslation("Auto Respawn",
cn: "自动重生", fr: "Réapparition auto", de: "Auto-Respawn", es: "Reaparición auto",
ja: "自動リスポーン", ko: "자동 부활", ru: "Авто-возрождение", pt: "Respawn automático", it: "Respawn automatico");
AddTranslation("Exp Modifier",
cn: "经验修改", fr: "Modificateur XP", de: "Erfahrungsmodifikator", es: "Modificador exp",
ja: "経験値変更", ko: "경험치 수정", ru: "Модификатор опыта", pt: "Modificador exp", it: "Modificatore exp");
AddTranslation("Exp Value",
cn: "经验值", fr: "Valeur XP", de: "Erfahrungswert", es: "Valor exp",
ja: "経験値", ko: "경험치 값", ru: "Значение опыта", pt: "Valor exp", it: "Valore exp");
AddTranslation("Unlock Achievements",
cn: "解锁成就", fr: "Débloquer succès", de: "Erfolge freischalten", es: "Desbloquear logros",
ja: "実績解除", ko: "업적 잠금 해제", ru: "Разблокировать достижения", pt: "Desbloquear conquistas", it: "Sblocca obiettivi");
AddTranslation("Unlock Doors",
cn: "解锁门", fr: "Déverrouiller portes", de: "Türen öffnen", es: "Desbloquear puertas",
ja: "ドアを開ける", ko: "문 잠금 해제", ru: "Открыть двери", pt: "Desbloquear portas", it: "Sblocca porte");
AddTranslation("Teleport Keys",
cn: "传送钥匙", fr: "Téléporter clés", de: "Schlüssel teleportieren", es: "Teletransportar llaves",
ja: "鍵をテレポート", ko: "열쇠 텔레포트", ru: "Телепорт ключей", pt: "Teletransportar chaves", it: "Teletrasporta chiavi");
AddTranslation("Play Random Sound",
cn: "播放随机音效", fr: "Jouer son aléatoire", de: "Zufälligen Sound abspielen", es: "Reproducir sonido aleatorio",
ja: "ランダム音再生", ko: "랜덤 사운드 재생", ru: "Воспроизвести случайный звук", pt: "Reproduzir som aleatório", it: "Riproduci suono casuale");
AddTranslation("Spam Chat",
cn: "刷屏聊天", fr: "Spam chat", de: "Chat spammen", es: "Spam chat",
ja: "チャットスパム", ko: "채팅 도배", ru: "Спам в чате", pt: "Spam no chat", it: "Spam chat");
AddTranslation("Spoof Name",
cn: "伪装名字", fr: "Usurper nom", de: "Namen fälschen", es: "Falsificar nombre",
ja: "名前偽装", ko: "이름 위장", ru: "Подменить имя", pt: "Falsificar nome", it: "Falsifica nome");
AddTranslation("Spoof Server Name",
cn: "伪装服务器名", fr: "Usurper nom serveur", de: "Servernamen fälschen", es: "Falsificar nombre servidor",
ja: "サーバー名偽装", ko: "서버 이름 위장", ru: "Подменить имя сервера", pt: "Falsificar nome servidor", it: "Falsifica nome server");
AddTranslation("Spoof Level",
cn: "伪装等级", fr: "Usurper niveau", de: "Level fälschen", es: "Falsificar nivel",
ja: "レベル偽装", ko: "레벨 위장", ru: "Подменить уровень", pt: "Falsificar nível", it: "Falsifica livello");
AddTranslation("Level",
cn: "等级", fr: "Niveau", de: "Level", es: "Nivel",
ja: "レベル", ko: "레벨", ru: "Уровень", pt: "Nível", it: "Livello");
AddTranslation("Players",
cn: "玩家", fr: "Joueurs", de: "Spieler", es: "Jugadores",
ja: "プレイヤー", ko: "플레이어", ru: "Игроки", pt: "Jogadores", it: "Giocatori");
AddTranslation("Teleport to",
cn: "传送到", fr: "Téléporter vers", de: "Teleportieren zu", es: "Teletransportar a",
ja: "テレポート先", ko: "텔레포트", ru: "Телепорт к", pt: "Teletransportar para", it: "Teletrasporta a");
AddTranslation("Kill",
cn: "击杀", fr: "Tuer", de: "Töten", es: "Matar",
ja: "キル", ko: "죽이기", ru: "Убить", pt: "Matar", it: "Uccidi");
AddTranslation("Revive",
cn: "复活", fr: "Réanimer", de: "Wiederbeleben", es: "Revivir",
ja: "蘇生", ko: "부활", ru: "Воскресить", pt: "Reviver", it: "Rianima");
AddTranslation("Visuals",
cn: "视觉", fr: "Visuels", de: "Visuals", es: "Visuales",
ja: "ビジュアル", ko: "비주얼", ru: "Визуалы", pt: "Visuais", it: "Visivi");
AddTranslation("Entities",
cn: "实体", fr: "Entités", de: "Entitäten", es: "Entidades",
ja: "エンティティ", ko: "엔티티", ru: "Сущности", pt: "Entidades", it: "Entità");
AddTranslation("Map",
cn: "地图", fr: "Carte", de: "Karte", es: "Mapa",
ja: "マップ", ko: "맵", ru: "Карта", pt: "Mappa", it: "Mappa");
AddTranslation("ESP",
cn: "透视", fr: "ESP", de: "ESP", es: "ESP",
ja: "ESP", ko: "ESP", ru: "ESP", pt: "ESP", it: "ESP");
AddTranslation("Items",
cn: "物品", fr: "Objets", de: "Gegenstände", es: "Objetos",
ja: "アイテム", ko: "아이템", ru: "Предметы", pt: "Itens", it: "Oggetti");
AddTranslation("Misc",
cn: "杂项", fr: "Divers", de: "Sonstiges", es: "Varios",
ja: "その他", ko: "기타", ru: "Разное", pt: "Diversos", it: "Varie");
AddTranslation("First aid",
cn: "急救包", fr: "Premiers soins", de: "Erste Hilfe", es: "Primeros auxilios",
ja: "救急箱", ko: "응급처치", ru: "Первая помощь", pt: "Primeiros socorros", it: "Pronto soccorso");
AddTranslation("Ritual Objects",
cn: "仪式物品", fr: "Objets rituels", de: "Rituelle Objekte", es: "Objetos rituales",
ja: "儀式の品", ko: "의식 물품", ru: "Ритуальные предметы", pt: "Objetos rituais", it: "Oggetti rituali");
AddTranslation("Spawnable Prefabs",
cn: "可生成物体", fr: "Préfabriqués générables", de: "Erzeugbare Objekte", es: "Objetos generables",
ja: "生成可能なオブジェクト", ko: "생성 가능한 오브젝트", ru: "Создаваемые объекты", pt: "Objetos geráveis", it: "Oggetti generabili");
for (int i = 1; i <= 10; i++)
{
AddTranslation($"Egg-{i}",
cn: $"鸡蛋-{i}", fr: $"Œuf-{i}", de: $"Ei-{i}", es: $"Huevo-{i}",
ja: $"卵-{i}", ko: $"달걀-{i}", ru: $"Яйцо-{i}", pt: $"Ovo-{i}", it: $"Uovo-{i}");
}
AddTranslation("Ritual Book",
cn: "仪式书", fr: "Livre rituel", de: "Ritualbuch", es: "Libro ritual",
ja: "儀式の本", ko: "의식서", ru: "Ритуальная книга", pt: "Livro ritual", it: "Libro rituale");
AddTranslation("Doll Head",
cn: "玩偶头", fr: "Tête de poupée", de: "Puppenkopf", es: "Cabeza de muñeca",
ja: "人形の頭", ko: "인형 머리", ru: "Голова куклы", pt: "Cabeça de boneca", it: "Testa di bambola");
AddTranslation("Animal_Gate",
cn: "动物大门", fr: "Porte des animaux", de: "Tiertor", es: "Puerta de animales",
ja: "動物のゲート", ko: "동물 문", ru: "Ворота для животных", pt: "Portão de animais", it: "Cancello degli animali");
AddTranslation("AsylumDoor",
cn: "精神病院门", fr: "Porte d'asile", de: "Asyltür", es: "Puerta de asilo",
ja: "精神病院のドア", ko: "정신병원 문", ru: "Дверь приюта", pt: "Porta do asilo", it: "Porta dell'asilo");
AddTranslation("AsylumDoubleDoor",
cn: "精神病院双开门", fr: "Double porte d'asile", de: "Asyl-Doppeltür", es: "Puerta doble de asilo",
ja: "精神病院の二重ドア", ko: "정신병원 이중문", ru: "Двойная дверь приюта", pt: "Porta dupla do asilo", it: "Doppia porta dell'asilo");
AddTranslation("AsylumWhiteDoor",
cn: "精神病院白门", fr: "Porte blanche d'asile", de: "Weiße Asyltür", es: "Puerta blanca de asilo",
ja: "精神病院の白いドア", ko: "정신병원 흰색 문", ru: "Белая дверь приюта", pt: "Porta branca do asilo", it: "Porta bianca dell'asilo");
AddTranslation("DevourDoorBack",
cn: "后门", fr: "Porte arrière", de: "Hintertür", es: "Puerta trasera",
ja: "裏口", ko: "뒷문", ru: "Задняя дверь", pt: "Porta traseira", it: "Porta posteriore");
AddTranslation("DevourDoorMain",
cn: "主门", fr: "Porte principale", de: "Haupttür", es: "Puerta principal",
ja: "正面玄関", ko: "정문", ru: "Главная дверь", pt: "Porta principal", it: "Porta principale");
AddTranslation("DevourDoorRoom",
cn: "房间门", fr: "Porte de chambre", de: "Zimmertür", es: "Puerta de habitación",
ja: "部屋のドア", ko: "방문", ru: "Дверь комнаты", pt: "Porta do quarto", it: "Porta della stanza");
AddTranslation("Elevator_Door",
cn: "电梯门", fr: "Porte d'ascenseur", de: "Aufzugstür", es: "Puerta de ascensor",
ja: "エレベーターのドア", ko: "엘리베이터 문", ru: "Дверь лифта", pt: "Porta do elevador", it: "Porta dell'ascensore");
AddTranslation("InnDoor",
cn: "旅馆门", fr: "Porte d'auberge", de: "Gasthoftür", es: "Puerta de posada",
ja: "旅館のドア", ko: "여관 문", ru: "Дверь гостиницы", pt: "Porta da pousada", it: "Porta della locanda");
AddTranslation("InnDoubleDoor",
cn: "旅馆双开门", fr: "Double porte d'auberge", de: "Gasthof-Doppeltür", es: "Puerta doble de posada",
ja: "旅館の二重ドア", ko: "여관 이중문", ru: "Двойная дверь гостиницы", pt: "Porta dupla da pousada", it: "Doppia porta della locanda");
AddTranslation("InnShojiDoor",
cn: "旅馆障子门", fr: "Porte shoji d'auberge", de: "Gasthof-Shoji-Tür", es: "Puerta shoji de posada",
ja: "旅館の障子", ko: "여관 장지문", ru: "Сёдзи дверь гостиницы", pt: "Porta shoji da pousada", it: "Porta shoji della locanda");
AddTranslation("InnShrine",
cn: "旅馆神社", fr: "Sanctuaire d'auberge", de: "Gasthof-Schrein", es: "Santuario de posada",
ja: "旅館の神社", ko: "여관 신사", ru: "Святилище гостиницы", pt: "Santuário da pousada", it: "Santuario della locanda");
AddTranslation("InnWardrobe",
cn: "旅馆衣柜", fr: "Armoire d'auberge", de: "Gasthof-Kleiderschrank", es: "Armario de posada",
ja: "旅館のワードローブ", ko: "여관 옷장", ru: "Шкаф гостиницы", pt: "Guarda-roupa da pousada", it: "Armadio della locanda");
AddTranslation("InnWoodenDoor",
cn: "旅馆木门", fr: "Porte en bois d'auberge", de: "Gasthof-Holztür", es: "Puerta de madera de posada",
ja: "旅館の木製ドア", ko: "여관 나무문", ru: "Деревянная дверь гостиницы", pt: "Porta de madeira da pousada", it: "Porta di legno della locanda");
AddTranslation("PigExcrement",
cn: "猪粪", fr: "Excréments de porc", de: "Schweinekot", es: "Excremento de cerdo",
ja: "豚の排泄物", ko: "돼지 배설물", ru: "Свиной навоз", pt: "Excremento de porco", it: "Escrementi di maiale");
AddTranslation("SlaughterhouseFireEscapeDoor",
cn: "屠宰场消防门", fr: "Porte de secours d'abattoir", de: "Schlachthof-Feuerschutztür", es: "Puerta de escape de matadero",
ja: "屠殺場の非常口", ko: "도축장 비상구", ru: "Пожарная дверь бойни", pt: "Porta de incêndio do matadouro", it: "Porta antincendio del mattatoio");
AddTranslation("SurvivalAltarMolly",
cn: "莫莉祭坛", fr: "Autel de Molly", de: "Molly-Altar", es: "Altar de Molly",
ja: "モリーの祭壇", ko: "몰리 제단", ru: "Алтарь Молли", pt: "Altar de Molly", it: "Altare di Molly");
AddTranslation("SurvivalAltarSlaughterhouse",
cn: "屠宰场祭坛", fr: "Autel d'abattoir", de: "Schlachthof-Altar", es: "Altar de matadero",
ja: "屠殺場の祭壇", ko: "도축장 제단", ru: "Алтарь бойни", pt: "Altar do matadouro", it: "Altare del mattatoio");
AddTranslation("SurvivalAltarTown",
cn: "小镇祭坛", fr: "Autel de ville", de: "Stadt-Altar", es: "Altar de pueblo",
ja: "町の祭壇", ko: "마을 제단", ru: "Алтарь города", pt: "Altar da cidade", it: "Altare della città");
AddTranslation("SurvivalCultist",
cn: "邪教徒", fr: "Cultiste", de: "Kultist", es: "Cultista",
ja: "カルト信者", ko: "광신도", ru: "Культист", pt: "Cultista", it: "Cultista");
AddTranslation("SurvivalKai",
cn: "凯", fr: "Kai", de: "Kai", es: "Kai",
ja: "カイ", ko: "카이", ru: "Кай", pt: "Kai", it: "Kai");
AddTranslation("SurvivalNathan",
cn: "内森", fr: "Nathan", de: "Nathan", es: "Nathan",
ja: "ネイサン", ko: "네이선", ru: "Натан", pt: "Nathan", it: "Nathan");
AddTranslation("SurvivalMolly",
cn: "莫莉", fr: "Molly", de: "Molly", es: "Molly",
ja: "モリー", ko: "몰리", ru: "Молли", pt: "Molly", it: "Molly");
AddTranslation("SurvivalApril",
cn: "艾普尔", fr: "April", de: "April", es: "April",
ja: "エイプリル", ko: "에이프릴", ru: "Эйприл", pt: "April", it: "April");
AddTranslation("SurvivalFrank",
cn: "弗兰克", fr: "Frank", de: "Frank", es: "Frank",
ja: "フランク", ko: "프랭크", ru: "Фрэнк", pt: "Frank", it: "Frank");
AddTranslation("SurvivalRose",
cn: "罗斯", fr: "Rose", de: "Rose", es: "Rose",
ja: "ローズ", ko: "로즈", ru: "Роуз", pt: "Rose", it: "Rose");
AddTranslation("SurvivalSmashableWindow",
cn: "可破坏窗户", fr: "Fenêtre cassable", de: "Zerbrechliches Fenster", es: "Ventana rompible",
ja: "破壊可能な窓", ko: "파괴 가능한 창문", ru: "Разбиваемое окно", pt: "Janela quebrável", it: "Finestra distruttibile");
AddTranslation("TownDoor",
cn: "小镇门", fr: "Porte de ville", de: "Stadttür", es: "Puerta de pueblo",
ja: "町のドア", ko: "마을 문", ru: "Дверь города", pt: "Porta da cidade", it: "Porta della città");
AddTranslation("TownDoor2",
cn: "小镇门2", fr: "Porte de ville 2", de: "Stadttür 2", es: "Puerta de pueblo 2",
ja: "町のドア2", ko: "마을 문2", ru: "Дверь города 2", pt: "Porta da cidade 2", it: "Porta della città 2");
AddTranslation("TownPentagram",
cn: "小镇五芒星", fr: "Pentagramme de ville", de: "Stadt-Pentagramm", es: "Pentagrama de pueblo",
ja: "町の五芒星", ko: "마을 오각별", ru: "Пентаграмма города", pt: "Pentagrama da cidade", it: "Pentagramma della città");
AddTranslation("TrashCan",
cn: "垃圾桶", fr: "Poubelle", de: "Mülleimer", es: "Papelera",
ja: "ゴミ箱", ko: "쓰레기통", ru: "Мусорный бак", pt: "Lixeira", it: "Cestino");
AddTranslation("Truck_Shutter",
cn: "卡车卷帘门", fr: "Volet de camion", de: "LKW-Rolltor", es: "Persiana de camión",
ja: "トラックのシャッター", ko: "트럭 셔터", ru: "Ставни грузовика", pt: "Persiana de caminhão", it: "Serranda del camion");
AddTranslation("TV",
cn: "电视", fr: "Télévision", de: "Fernseher", es: "Televisión",
ja: "テレビ", ko: "TV", ru: "Телевизор", pt: "Televisão", it: "Televisione");
}
private static void AddTranslation(string english,
string cn = null, string fr = null, string de = null, string es = null,
string ja = null, string ko = null, string ru = null, string pt = null, string it = null)
{
var translations = new Dictionary<Language, string>
{
{ Language.English, english }
};
if (cn != null) translations[Language.Chinese] = cn;
if (fr != null) translations[Language.French] = fr;
if (de != null) translations[Language.German] = de;
if (es != null) translations[Language.Spanish] = es;
if (ja != null) translations[Language.Japanese] = ja;
if (ko != null) translations[Language.Korean] = ko;
if (ru != null) translations[Language.Russian] = ru;
if (pt != null) translations[Language.Portuguese] = pt;
if (it != null) translations[Language.Italian] = it;
Translations[english] = translations;
}
public static string Translate(string englishText)
{
if (string.IsNullOrEmpty(englishText))
return englishText;
if (CurrentLanguage == Language.English)
return englishText;
if (Translations.TryGetValue(englishText, out var languageDict))
{
if (languageDict.TryGetValue(CurrentLanguage, out var translation))
{
return translation;
}
}
return englishText;
}
public static string GetLanguageDisplayName(Language language)
{
return LanguageDisplayNames.TryGetValue(language, out var name) ? name : language.ToString();
}
public static Language[] GetAllLanguages()
{
return (Language[])System.Enum.GetValues(typeof(Language));
}
public static int GetTotalTranslationCount()
{
return Translations.Count;
}
public static void AddCustomTranslation(string englishText, Language language, string translation)
{
if (!Translations.ContainsKey(englishText))
{
Translations[englishText] = new Dictionary<Language, string>
{
{ Language.English, englishText }
};
}
Translations[englishText][language] = translation;
}
}
}

View File

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

View File

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

View File

@@ -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")]

View File

@@ -1,16 +1,43 @@
using UnityEngine; using UnityEngine;
using DevourClient.Localization;
namespace DevourClient.Settings
{ namespace DevourClient.Settings
public class Settings {
{ public class Settings
public static bool menu_enable = false; {
public static float width = Screen.width / 2f; public static bool menu_enable = false;
public static float height = Screen.height / 2f; public static float width = Screen.width / 2f;
public static float x = 0; public static float height = Screen.height / 2f;
public static float y = 0; public static float x = 0;
public static Color flashlight_color = new Color(1.00f, 1.00f, 1.00f, 1); public static float y = 0;
public static float speed = 1f; public static Color flashlight_color = new Color(1.00f, 1.00f, 1.00f, 1);
public const string message_to_spam = "Deez Nutz"; 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 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 Language selectedLanguage = Language.English;
public static bool showLanguageSelector = false;
public static KeyCode GetKey()
{
Thread.Sleep(50);
foreach (KeyCode vkey in System.Enum.GetValues(typeof(KeyCode)))
{
if (Input.GetKey(vkey))
{
if (vkey != KeyCode.Delete)
{
return vkey;
}
}
}
return KeyCode.None;
}
}
}

268
README.md
View File

@@ -1,102 +1,166 @@
# The Town Update # Unknowncheats thread [here](https://www.unknowncheats.me/forum/other-fps-games/475950-devour-multihack-update.html)
Everything should be 100% fixed and working for the last update of Devour, have fun !
Also if you pay attention to the code you'll see a "Hooks" file that contains a Prefix for SetIsBeingKnockedOut, this would normally sets a godmode but as i'm a pussy i'm too scared to test this so yeah, you may be in godmode 24/7. Please create an issue for the feadback of this feature. # DevourClient
# DevourClient Very based cheat for the game Devour.
I wasn't home for 2 days so i made that, i learnt a lot about C# programming and about Unity IL2CPP game hacking. ## Detection rate
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. You can find the log in the directory "C:\Users\%USERNAME%\AppData\LocalLow\Straight Back Games\DEVOUR", and it's interesting that this game has the detect function and can tell the cheat engine you are using, and notice that “This Game has been MODIFIED using MelonLoader. DO NOT report any issues to the Game Developers! ~”
Also don't mind french comments lol, google translate is your friend !
And if you are playing with a game developer, they will know who is using cheats in this lobby by some function in their client.
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
But you will never get banned by using cheats, they choose to ignore that.
## 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 ! ## Menu
![menu screenshot](Screenshots/menu.png)
## 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). ## Features
* An IMGUI menu thanks to UnityEngine 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).
* Fully compatible with the new IL2CPP version of the game * An IMGUI menu thanks to UnityEngine
* Detects if you're in game (with bad code lol), so no chances of crashing on main menu by activating features * Fully compatible with the new IL2CPP version of the game
* Detects the map you are playing on (useful for the instant win) * Detects if you're in game (with bad code lol), so no chances of crashing on main menu by activating features
* Big Flashlight (allows your flashlight to light a lot more) * Detects the map you are playing on (useful for the instant win)
* Flashlight color customization (with a home made color picker) * Big Flashlight (allows your flashlight to light a lot more)
* 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)) * Flashlight color customization (with a home made color picker)
* 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) * Unlimited UV light (thanks to [@jadis0x](https://github.com/jadis0x))
* Doors unlocker (should work fine, though it doesn't seem to work sometimes) * 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))
* Keys teleporter (broken, works sometimes but doesn't TP all the keys for some reasons) * 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)
* LV 70 (puts you to the max level of the game !) * Doors unlocker (should work fine, though it doesn't seem to work sometimes)
* LV 666 (secret level, thanks to the guy who told me it exists lol) * Keys teleporter
* Steam name spoofer (sets it to "patate", again no input text :/) * LV spoofer
* Server name spoofer (sets it to "patate on top !", again no input text :/) * Fly
* 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.
* 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)
## Installation * Always carrying a medkit
* Change your exp at the end of the game, changing it is permanant !
0. Download the [release version](https://github.com/ALittlePatate/DevourClient/releases/) or [build it from source](https://github.com/ALittlePatate/DevourClient#building-from-source). * Player ESP (with a home made color picker)
1. Install [MelonLoader](https://github.com/LavaGang/MelonLoader/releases/tag/v0.4.3) to Devour. * Player skeleton ESP
2. Start your game. A cmd should appear, don't close it, MelonLoader is installing and decompiling Devour's game assemblies. * Player snaplines (with a home made color picker)
3. Wait for the process to finish, once it's done close the game. * Azazel ESP (with a home made color picker)
4. Put the DevourClient.dll file inside `C:\Program Files (x86)\Steam\steamapps\common\Devour\Mods` folder. * Azazel Skeleton ESP
5. Start the game, now you have successfully installed DevourClient. Use INSERT to open the menu * Azazel snapline (with a home made color picker)
* 10 languages supported (English, 简体中文, Français, Deutsch, Español, 日本語, 한국어, Русский, Português, Italiano) with in-game language switcher in Misc tab. Check it in misc table!
## Uninstallation * Item ESP (with multi-language translation)
* Demon ESP (with multi-language translation)
0. Delete the folders `MelonLoader`, `Mods`, `Plugins`, `UserData`, and the file `version.dll` from `C:\Program Files (x86)\Steam\steamapps\common\Devour` * Goat/Rat ESP (with multi-language translation)
* TP all the items to your position ! (thanks to [@jadis0x](https://github.com/jadis0x))
## Building from source * Spawn any item/entity to your position
* Walk in the lobby
0. Clone the repository * Change the player's speed
1. Install MelonLoader (see [Installation](https://github.com/ALittlePatate/DevourClient#installation)) * Fullbright
2. Open the solution file in Visual Studio (i used 2019, i don't know about the compatibility with the other versions) * Infinite mirrors (Manor update)
3. Go to : Project --> Add a reference --> Browse --> Click on the browse button in the down right corner of the window. * Switch between realms (Manor update)
4. Add those files : * 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)
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\MelonLoader.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\0Harmony.dll` ## English Installation Tutorial
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\UnityEngine.IMGUIModule.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\UnityEngine.InputLegacyModule.dll` 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>
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\bolt.user.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\bolt.dll` ## French Installation Tutorial
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\UnityEngine.HotReloadModule.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\UnityEngine.UI.dll` For my French fellas out there, 1tap2times made a French video tutorial for the installation of the Mod : [link](https://vimeo.com/789315436)<br>
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\UnityEngine.CoreModule.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\Il2Cppmscorlib.dll` ## German Video Installation Tutorial
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\Assembly-CSharp.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\Opsive.UltimateCharacterController.dll` For my German friends, KiwiJuice02 made a german video tutorial right here : [link](https://www.youtube.com/watch?v=Ntablvo6y-I)<br>
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\UnityENgine.InputModule.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Dependencies\Il2CppAssemblyGenerator\Il2CppUnhollower\UnhollowerBaseLib.dll` In order to get all of this working you need to generate the DevourClient.dll file by building the source code.<br>
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Dependencies\Il2CppAssemblyGenerator\Il2CppUnhollower\UnhollowerRuntimeLib.dll`
5. Build the solutions in Release | Any CPU mode 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).
## Contact 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
You can add me on discord at patate#1252
## 中文安装指南
## Code used 如果你只是想要安装这个插件,直接在游戏里使用的话
For teaching me the basics : 1、安装 .net 6 的运行环境 → (https://dotnet.microsoft.com/en-us/download/dotnet/6.0)
* [A Begginner's Guide To Hacking Unity Games](https://www.unknowncheats.me/wiki/A_Beginner%27s_Guide_To_Hacking_Unity_Games)
2、安装melonloader → (https://github.com/LavaGang/MelonLoader/releases)
For teaching me about the MelonLoader mods API and Il2Cpp specifications : 版本无限制尽量选择新版即可。打开melonloader页面后点击devour进入安装界面全部默认即可无需勾选或修改其他选项点击install进行安装安装过程中可能需要vpn支持
* [MelonLoader's quickstart documentation](https://melonwiki.xyz/#/modders/quickstart)
* [MelonLoader's Il2Cpp differences chapter in the documentation](https://melonwiki.xyz/#/modders/il2cppdifferences) 3、安装dll文件 → 从本项目的release中下载最新的dll文件然后将此文件添加到你的devour的安装目录中的mods文件夹里不知道目录的情况下可以在steam中右键devour选择“管理”-“浏览本地文件”即可)
For teaching me about the UnityEngine API : 4、运行devour → 如果安装成功你会看到一个windows窗口进行各类安装提示后自动进入游戏。点击insert键即可打开和关闭devourclient窗口
* [Unity User Manual 2020.3 (LTS)](https://docs.unity3d.com/Manual/index.html)
ps:有些电脑在安装melonloader之后会出现fatal error的提示这个我目前并没有碰到过。但是出现这个提示的主要原因基本是melonloader安装过程中提取到devour根目录的melonloader文件夹里的文件出现了问题比较简单的解决办法就是1在别人的同系统同位宽x86x32的电脑里拷贝出来他的melonloader文件夹然后直接粘贴到自己的电脑里。2将melonloader文件夹完全删除然后重装。
For decompiling and looking in the source code of the game :
* [dnSpy : a .NET debugger and assembly editor](https://github.com/dnSpy/dnSpy) 如果你想要对代码进行修改和开发请按照下面的”building from source“的步骤逐步进行
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) ## Uninstallation
## Contributing 0. Delete the folders `MelonLoader`, `Mods`, `Plugins`, `UserData`, and the file `version.dll` from `C:\Program Files (x86)\Steam\steamapps\common\Devour`
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 ! ## Building from source
## License 0. Clone the repository (or Code -> Download Zip)
1. Install [.NET 6 SDK and runtime](https://dotnet.microsoft.com/en-us/download/dotnet/6.0).
[GPL 3.0](https://www.gnu.org/licenses/gpl-3.0.md) 2. Install [MelonLoader](https://github.com/LavaGang/MelonLoader/releases) V0.7.1 (go to Settings -> tick "Show ALPHA Pre-Releases") to Devour.
3. Start your game. A cmd should appear, don't close it, MelonLoader is installing and decompiling Devour's game assemblies.
4. Wait for the process to finish, once it's done close the game.
5. Open the solution file (DevourClient.sln) in Visual Studio
6. Go to : Project --> Add a reference --> Browse --> Click on the browse button in the down right corner of the window.
7. Add those files :
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\net6\MelonLoader.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\net6\0Harmony.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\net6\Il2CppInterop.Runtime.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Assembly-CSharp.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2CppOpsive.UltimateCharacterController.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2CppBehaviorDesigner.Runtime.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppbolt.user.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppbolt.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppmscorlib.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.IMGUIModule.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.InputLegacyModule.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.HotReloadModule.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.UI.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.UIModule.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.CoreModule.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.InputModule.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppudpkit.common.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppudpkit.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppudpkit.platform.photon.dll`
* `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
You can add me on discord at _.patate or on the [discord server](https://discord.gg/2amMFvqjYd)
## Code used
For teaching me the basics :
* [A Begginner's Guide To Hacking Unity Games](https://www.unknowncheats.me/wiki/A_Beginner%27s_Guide_To_Hacking_Unity_Games)
For teaching me about the MelonLoader mods API and Il2Cpp specifications :
* [MelonLoader's quickstart documentation](https://melonwiki.xyz/#/modders/quickstart)
* [MelonLoader's Il2Cpp differences chapter in the documentation](https://melonwiki.xyz/#/modders/il2cppdifferences)
For teaching me about the UnityEngine API :
* [Unity User Manual 2020.3 (LTS)](https://docs.unity3d.com/Manual/index.html)
For decompiling and looking in the source code of the game :
* [dnSpy : a .NET debugger and assembly editor](https://github.com/dnSpy/dnSpy)
For teaching me the basics about Devour game hacking, and i pasted the Key TP hack and the non working part of the Achievements Unlocker from it :
* [DevourCheatMonoInjector](https://github.com/Glatrix/DevourCheatMonoInjector)
Game's last update before il2cpp :
* https://steamdb.info/depot/1274571/history/?changeid=M:1960656865974212833
## Contributing
Open an [issue](https://github.com/ALittlePatate/DevourClient/issues/new) or make a [pull request](https://github.com/ALittlePatate/DevourClient/pulls), i'll be glad to improve my project with you !
## License
[GPL 3.0](https://www.gnu.org/licenses/gpl-3.0.md)

BIN
Screenshots/menu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 611 KiB

View 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()