224 Commits
2.0 ... 3.0

Author SHA1 Message Date
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
16 changed files with 2575 additions and 395 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

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>
<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> </Project>

View File

@@ -3,84 +3,311 @@ 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;
using System.Linq;
using System.Collections.Generic;
using Il2CppOpsive.UltimateCharacterController.Character;
using Il2CppPhoton.Bolt;
namespace DevourClient.Hacks namespace DevourClient.Hacks
{ {
public class Misc public class Misc
{ {
public static void Fly(float speed) //normal speed 0.5f public static void Fly(float speed) //normal speed 5f
{ {
NolanBehaviour Nolan = UnityEngine.Object.FindObjectOfType<NolanBehaviour>(); Il2Cpp.NolanBehaviour nb = Player.GetPlayer();
Vector3 PlayerAngles = Nolan.transform.position; Vector3 pos = nb.transform.position;
Il2Cpp.RewiredHelpers helpers = UnityEngine.Object.FindObjectOfType<Il2Cpp.RewiredHelpers>();
if (Input.GetKey((KeyCode)System.Enum.Parse(typeof(KeyCode), helpers.GetCurrentBinding("Move Up").ToString().Replace(" ", ""))))
{
pos += nb.transform.forward * speed * Time.deltaTime;
}
if (Input.GetKey((KeyCode)System.Enum.Parse(typeof(KeyCode), helpers.GetCurrentBinding("Move Down").ToString().Replace(" ", ""))))
{
pos += -nb.transform.forward * speed * Time.deltaTime;
}
if (Input.GetKey((KeyCode)System.Enum.Parse(typeof(KeyCode), helpers.GetCurrentBinding("Move Right").ToString().Replace(" ", ""))))
{
pos += nb.transform.right * speed * Time.deltaTime;
}
if (Input.GetKey((KeyCode)System.Enum.Parse(typeof(KeyCode), helpers.GetCurrentBinding("Move Left").ToString().Replace(" ", ""))))
{
pos += -nb.transform.right * speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.Space)) if (Input.GetKey(KeyCode.Space))
{
pos += nb.transform.up * speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.LeftControl))
{
pos += -nb.transform.up * speed * Time.deltaTime;
}
nb.locomotion.SetPosition(pos, false);
}
public static void WalkInLobby(bool walk)
{
GameObject LocalPlayer = Helpers.Entities.LocalPlayer_.p_GameObject;
if (LocalPlayer == null)
{ {
PlayerAngles.y += speed; return;
} }
if (Input.GetKey(KeyCode.LeftShift))
//GetComponent called only once as AddComponent returns a component
UltimateCharacterLocomotionHandler cmp = Helpers.Entities.LocalPlayer_.p_GameObject.GetComponent<UltimateCharacterLocomotionHandler>();
if (cmp == null)
{ {
PlayerAngles.y -= speed; cmp = LocalPlayer.AddComponent<UltimateCharacterLocomotionHandler>();
} cmp.enabled = false;
if (Input.GetKey(KeyCode.LeftArrow)) }
cmp.enabled = walk;
}
public static void BurnRitualObj(string map, bool burnAll)
{
switch (map)
{
case "Inn":
Il2Cpp.InnMapController _innMapController = UnityEngine.Object.FindObjectOfType<Il2Cpp.InnMapController>();
if (!_innMapController) {
return;
}
if (burnAll){
_innMapController.SetProgressTo(10);
}
else{
_innMapController.IncreaseProgress();
}
break;
case "Slaughterhouse":
Il2Cpp.SlaughterhouseAltarController _slaughterhouseAltarController = UnityEngine.Object.FindObjectOfType<Il2Cpp.SlaughterhouseAltarController>();
if (!_slaughterhouseAltarController) {
return;
}
if (burnAll)
{
_slaughterhouseAltarController.BurnGoat();
}
else
{
_slaughterhouseAltarController.SkipToGoat(10);
}
break;
default:
Il2Cpp.SurvivalObjectBurnController _altar = UnityEngine.Object.FindObjectOfType<Il2Cpp.SurvivalObjectBurnController>();
if (!_altar) {
return;
}
if (burnAll)
{
_altar.SkipToGoat(10);
}
else
{
_altar.BurnGoat();
}
break;
}
}
public static void SpawnAzazel(PrefabId _azazelPrefabId)
{
if (!Il2CppPhoton.Bolt.BoltNetwork.IsServer)
{ {
PlayerAngles.x -= speed; MelonLogger.Msg("You need to be host to spawn stuff !");
} return;
if (Input.GetKey(KeyCode.RightArrow))
{
PlayerAngles.x += speed;
}
if (Input.GetKey(KeyCode.UpArrow))
{
PlayerAngles.z += speed;
}
if (Input.GetKey(KeyCode.DownArrow))
{
PlayerAngles.z -= speed;
} }
Nolan.locomotion.SetPosition(PlayerAngles, false); GameObject _azazel;
Vector3 pos = Player.GetPlayer().transform.position;
_azazel = BoltNetwork.Instantiate(_azazelPrefabId, new Vector3(pos.x, pos.y, pos.z + 1f), Quaternion.identity);
_azazel.gameObject.GetComponent<Il2Cpp.SurvivalAzazelBehaviour>().Spawn();
} }
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);
Il2CppHorror.Menu.ShowCanvasGroup(_menu.loadingCanvasGroup, true);
Il2CppHorror.Menu.ShowCanvasGroup(_menu.hostCanvasGroup, false);
Il2CppHorror.Menu.ShowCanvasGroup(_menu.mainMenuCanvasGroup, false);
}
public static void SetSteamName(string name) public static void SetSteamName(string name)
{ {
Horror.Menu Menu_ = UnityEngine.Object.FindObjectOfType<Horror.Menu>(); Il2CppHorror.Menu Menu_ = UnityEngine.Object.FindObjectOfType<Il2CppHorror.Menu>();
if (Menu_ == null)
{
return;
}
Menu_.steamName = name; Menu_.steamName = name;
} }
public static void SetServerName(string name) public static void SetServerName(string name)
{ {
Horror.Menu Menu_ = UnityEngine.Object.FindObjectOfType<Horror.Menu>(); Il2CppHorror.Menu Menu_ = UnityEngine.Object.FindObjectOfType<Il2CppHorror.Menu>();
if (Menu_ == null)
{
return;
}
Menu_.serverNameText.text = name; Menu_.serverNameText.text = name;
} }
public static void BigFlashlight(bool reset) public static void BigFlashlight(bool reset)
{ {
//Ohhhh yes, that's some great code, don't you like try and catches ? Il2Cpp.NolanBehaviour Nolan = Player.GetPlayer();
//it's for fixing a glitch that activates the big flashlight during the loading of a map if (Nolan == null)
//so the things are not loaded and it throws a shit ton of errors in the console
try
{
NolanBehaviour Nolan = UnityEngine.Object.FindObjectOfType<NolanBehaviour>();
Light flashlightSpot = Nolan.flashlightSpot;
if (reset)
{
flashlightSpot.intensity = 1.5f;
flashlightSpot.range = 9f;
}
else
{
flashlightSpot.intensity = 1.5f;
flashlightSpot.range = 200f;
}
}
catch
{ {
return; 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) public static void FlashlightColor(Color color)
{ {
NolanBehaviour Nolan = UnityEngine.Object.FindObjectOfType<NolanBehaviour>(); Il2Cpp.NolanBehaviour Nolan = Player.GetPlayer();
Light flashlightSpot = Nolan.flashlightSpot; Light flashlightSpot = Nolan.flashlightSpot;
flashlightSpot.color = color; flashlightSpot.color = color;
@@ -88,12 +315,12 @@ namespace DevourClient.Hacks
public static void TPKeys() public static void TPKeys()
{ {
NolanBehaviour Nolan = UnityEngine.Object.FindObjectOfType<NolanBehaviour>(); //TOFIX: spawn manually the missing key in slaughterhouse
Il2Cpp.NolanBehaviour Nolan = Player.GetPlayer();
foreach (KeyBehaviour keyBehaviour in UnityEngine.Object.FindObjectsOfType<KeyBehaviour>()) foreach (Il2Cpp.KeyBehaviour keyBehaviour in Helpers.Entities.Keys)
{ {
bool flag = keyBehaviour == null; if (keyBehaviour == null)
if (flag)
{ {
return; return;
} }
@@ -103,52 +330,183 @@ namespace DevourClient.Hacks
public static void SetRank(int rank) public static void SetRank(int rank)
{ {
NolanRankController NolanRank = UnityEngine.Object.FindObjectOfType<NolanRankController>(); Il2Cpp.NolanRankController NolanRank = UnityEngine.Object.FindObjectOfType<Il2Cpp.NolanRankController>();
if (NolanRank == null)
{
return;
}
NolanRank.SetRank(rank); NolanRank.SetRank(rank);
} }
public static void MessageSpam(string message) public static void MessageSpam(string message)
{ {
//TOFIX : not spamming anymore :/
if (Helpers.Player.IsInGame()) if (Helpers.Player.IsInGame())
{ {
GameUI game_ui_class = UnityEngine.Object.FindObjectOfType<GameUI>(); Il2Cpp.GameUI game_ui_class = UnityEngine.Object.FindObjectOfType<Il2Cpp.GameUI>();
game_ui_class.textChatInput.text = message; game_ui_class.textChatInput.text = message;
game_ui_class.OnChatMessageSubmit(); game_ui_class.OnChatMessageSubmit();
} }
else else
{ {
Horror.Menu menu_class = UnityEngine.Object.FindObjectOfType<Horror.Menu>(); Il2CppHorror.Menu menu_class = UnityEngine.Object.FindObjectOfType<Il2CppHorror.Menu>();
menu_class.textChatInput.text = message; menu_class.textChatInput.text = message;
menu_class.OnChatMessageSubmit(); menu_class.OnChatMessageSubmit();
} }
} }
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 ShowMessageBox(string message)
{
//not used, might be useful, some day
Il2CppHorror.Menu menu = UnityEngine.Object.FindObjectOfType<Il2CppHorror.Menu>();
menu.ShowMessageModal(message);
}
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() public static void InstantWin()
{ {
Survival survival_class = UnityEngine.Object.FindObjectOfType<Survival>(); Il2Cpp.Survival survival_class = UnityEngine.Object.FindObjectOfType<Il2Cpp.Survival>();
try string map_name = Map.GetMapName(Map.GetActiveScene());
if (map_name == "Menu")
{ {
survival_class.PlayWinEnding("InnWin"); return;
}
catch
{
try
{
survival_class.PlayWinEnding("AsylumWin");
}
catch
{
try
{
survival_class.PlayWinEnding("TownWin");
}
catch
{
survival_class.PlayWinEnding("Win");
}
}
} }
if (map_name == "Farmhouse")
{
survival_class.PlayEnding("Win");
return;
}
survival_class.PlayEnding(map_name+"Win");
} }
} }
} }

View File

@@ -4,41 +4,30 @@
{ {
public static void Achievements() public static void Achievements()
{ {
AchievementHelpers ah = UnityEngine.Object.FindObjectOfType<AchievementHelpers>(); Il2Cpp.AchievementHelpers ah = UnityEngine.Object.FindObjectOfType<Il2Cpp.AchievementHelpers>();
/* string[] achievements = { "STAT_NUM_BLEACH_USED", "ACH_WON_TOWN_COOP", "ACH_WON_TOWN_HARD", "ACH_WON_SLAUGHTERHOUSE_SP", "ACH_WON_SP", "ACH_WON_SLAUGHTERHOUSE_NIGHTMARE", "ACH_WON_SLAUGHTERHOUSE_NIGHTMARE_SP", "ACH_WON_SLAUGHTERHOUSE_HARD", "ACH_WON_SLAUGHTERHOUSE_HARD_SP", "ACH_WON_NO_MEDKITS", "ACH_WON_SLAUGHTERHOUSE_COOP", "ACH_WON_NO_BATTERIES", "ACH_WON_NO_KNOCKOUT_COOP", "ACH_WON_NIGHTMARE_NO_BATTERIES", "ACH_WON_NIGHTMARE_NO_MEDKITS", "ACH_WON_MOLLY_NIGHTMARE_SP", "ACH_WON_MOLLY_SP", "ACH_WON_TOWN_NIGHTMARE_SP", "ACH_WON_TOWN_SP", "ACH_WON_TOWN_HARD_SP", "ACH_WON_TOWN_NIGHTMARE", "ACH_UNLOCKED_CAGE", "ACH_WIN_NIGHTMARE", "ACH_SURVIVED_TO_7_GOATS", "ACH_UNLOCKED_ATTIC_CAGE", "ACH_SURVIVED_TO_3_GOATS", "ACH_SURVIVED_TO_5_GOATS", "ACH_STAGGERED_SAM_20_TIMES", "ACH_STAGGERED_ZARA_20_TIMES", "ACH_STAGGERED_MOLLY_20_TIMES", "ACH_STAGGERED_NATHAN_20_TIMES", "ACH_REVIVED_20_PLAYERS", "ACH_STAGGERED_ANNA_20_TIMES", "ACH_NEVER_KNOCKED_OUT", "ACH_ONLY_ONE_KNOCKED_OUT", "ACH_LOST", "ACH_LURED_20_GOATS", "ACH_WON_MOLLY_HARD_SP", "ACH_WON_MOLLY_NIGHTMARE", "ACH_WON_MOLLY_COOP", "ACH_WON_MOLLY_HARD", "ACH_WON_INN_NIGHTMARE_SP", "ACH_WON_INN_SP", "ACH_WON_INN_HARD_SP", "ACH_WON_INN_NIGHTMARE", "ACH_WON_INN_COOP", "ACH_WON_INN_HARD", "ACH_WON_HARD_NO_MEDKITS", "ACH_WON_HARD_SP", "ACH_WON_HARD", "ACH_WON_HARD_NO_BATTERIES", "ACH_WIN_NIGHTMARE_SP", "ACH_WON_COOP", "ACH_ALL_ROSES", "ACH_BEAT_GAME_5_TIMES", "ACH_ALL_NOTES_READ", "ACH_ALL_PATCHES", "ACH_ALL_CLIPBOARDS_READ", "ACH_ALL_HORSESHOES", "ACH_ALL_BARBED_WIRES", "ACH_ALL_CHERRY_BLOSSOM", "ACH_20_POOPS_SEARCHED", "ACH_20_TRASH_CANS_KICKED", "ACH_100_GASOLINE_USED", "ACH_20_BLEACH_USED", "ACH_100_EGGS_DESTROYED", "ACH_100_FUSES_USED", "ACH_1000_PIGS_DESTROYED", "ACH_100_BOOKS_CURSED", "ACH_KNOCKED_OUT_IN_HIDING", "ACH_KNOCKOUT_OUT_BY_DEMON", "ACH_KNOCKED_OUT_20_TIMES", "ACH_KNOCKED_OUT_BY_ANNA", "ACH_FRIED_20_DEMONS", "ACH_FRIED_RAT", "ACH_FRIED_100_CORPSES", "ACH_FRIED_100_INMATES", "ACH_FRIED_1000_GHOSTS", "ACH_FRIED_1000_SPIDERS", "ACH_CALM_MOLLY_10_TIMES", "ACH_FRIED_1000_BOARS", "ACH_CALMED_ANNA", "ACH_CALMED_ANNA_10_TIMES", "ACH_BEAT_GAME_5_TIMES_IN_NIGHTMARE_MODE", "ACH_BURNT_GOAT", "ACH_1000_BOOKS_DESTROYED" };
string[] 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++) for (int i = 0; i < achievements.Length; i++)
{ {
ah.GetType().GetField(names[i], System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).SetValue(ah, true); //Causing a crash. ah.Unlock(achievements[i]);
}
*/
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]);
} }
} }
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

@@ -10,28 +10,67 @@ namespace DevourClient.Helpers
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); Texture2D texture = new Texture2D(1, 1);
texture.SetPixel(0, 0, color); texture.SetPixel(0, 0, color_to_draw);
texture.Apply(); texture.Apply();
GUI.skin.box.normal.background = texture; GUIStyle boxStyle = new GUIStyle(GUI.skin.box);
GUI.Box(position, GUIContent.none); boxStyle.normal.background = texture;
GUI.Box(position, GUIContent.none, boxStyle);
} }
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)
{
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();
return result;
}
public static Texture2D GetCircularTexture(int width, int height)
{
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();
return texture;
}
} }
} }

View File

@@ -0,0 +1,48 @@
namespace DevourClient.Helpers
{
class Map
{
public static string GetActiveScene()
{
return UnityEngine.SceneManagement.SceneManager.GetActiveScene().name;
}
public static string GetMapName(string sceneName)
{
switch (sceneName)
{
case "Devour":
return "Farmhouse";
case "Molly":
return "Asylum";
case "Inn":
return "Inn";
case "Town":
return "Town";
case "Slaughterhouse":
return "Slaughterhouse";
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,143 @@
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);
public static void DrawString(Vector2 position, Color color, string label, bool centered = true)
{
var content = new GUIContent(label);
var size = StringStyle.CalcSize(content);
var upperLeft = centered ? position - size / 2f : position;
Color color2 = GUI.color;
GUI.color = color;
GUI.Label(new Rect(upperLeft, size), content);
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) //fix the crash maybe
{
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,21 +1,325 @@
namespace DevourClient.Helpers using UnityEngine;
using Il2CppOpsive.UltimateCharacterController.Character;
using System.Collections.Generic;
using System.Collections;
using MelonLoader;
using Il2CppPhoton.Bolt;
namespace DevourClient.Helpers
{ {
public class BasePlayer
{
public GameObject p_GameObject { get; set; } = default!;
public string Name { get; set; } = default!;
public string Id { get; set; } = default!;
public void Kill()
{
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>();
_reviveInteractable.Interact(nb.gameObject);
}
public void Jumpscare()
{
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>();
try
{
ucl.SetPosition(p_GameObject.transform.position);
}
catch { return; }
}
}
public class Player public class Player
{ {
public static bool IsInGame() public static bool IsInGame()
{ {
//Code pas très beau ici Il2Cpp.OptionsHelpers optionsHelpers = UnityEngine.Object.FindObjectOfType<Il2Cpp.OptionsHelpers>();
//La variable gameStarted dans la classe Horror.Menu n'existe plus quand on lance une game return optionsHelpers.inGame;
//Donc si elle existe on retourne sa valeur (qui est false) }
//Et si elle existe pas (donc si on est ingame) on retourne true
try public static bool IsInGameOrLobby()
{
return GetPlayer() != null;
}
public static Il2Cpp.NolanBehaviour GetPlayer()
{
if (Entities.LocalPlayer_.p_GameObject == null)
{ {
Horror.Menu menu_class = UnityEngine.ScriptableObject.FindObjectOfType<Horror.Menu>(); return null!;
return menu_class.gameStarted;
} }
catch
return Entities.LocalPlayer_.p_GameObject.GetComponent<Il2Cpp.NolanBehaviour>();
}
public static bool IsPlayerCrawling()
{
Il2Cpp.NolanBehaviour nb = Player.GetPlayer();
if (nb == null)
{ {
return true; 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 IEnumerator GetLocalPlayer()
{
for (;;)
{
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()
{
for (;;)
{
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()
{
for (;;)
{
GoatsAndRats = Il2Cpp.GoatBehaviour.FindObjectsOfType<Il2Cpp.GoatBehaviour>();
// Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f);
}
}
public static IEnumerator GetSurvivalInteractables()
{
for (;;)
{
SurvivalInteractables = Il2Cpp.SurvivalInteractable.FindObjectsOfType<Il2Cpp.SurvivalInteractable>();
// Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f);
}
}
public static IEnumerator GetKeys()
{
for (;;)
{
Keys = Il2Cpp.KeyBehaviour.FindObjectsOfType<Il2Cpp.KeyBehaviour>();
// Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f);
}
}
public static IEnumerator GetDemons()
{
for (;;)
{
Demons = Il2Cpp.SurvivalDemonBehaviour.FindObjectsOfType<Il2Cpp.SurvivalDemonBehaviour>();
// Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f);
}
}
public static IEnumerator GetSpiders()
{
for (;;)
{
Spiders = Il2Cpp.SpiderBehaviour.FindObjectsOfType<Il2Cpp.SpiderBehaviour>();
// Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f);
}
}
public static IEnumerator GetGhosts()
{
for (;;)
{
Ghosts = Il2Cpp.GhostBehaviour.FindObjectsOfType<Il2Cpp.GhostBehaviour>();
// Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f);
}
}
public static IEnumerator GetBoars()
{
for (; ; )
{
Boars = Il2Cpp.BoarBehaviour.FindObjectsOfType<Il2Cpp.BoarBehaviour>();
// Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f);
}
}
public static IEnumerator GetCorpses()
{
for (; ; )
{
Corpses = Il2Cpp.CorpseBehaviour.FindObjectsOfType<Il2Cpp.CorpseBehaviour>();
// Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f);
}
}
public static IEnumerator GetAzazels()
{
/*
* ikr AzazelS, because in case we spawn multiple we want the esp to render all of them
*/
for (;;)
{
Azazels = Il2Cpp.SurvivalAzazelBehaviour.FindObjectsOfType<Il2Cpp.SurvivalAzazelBehaviour>();
// Wait 5 seconds before caching objects again.
yield return new WaitForSeconds(5f);
} }
} }
} }

View File

@@ -1,34 +1,121 @@
using HarmonyLib; using HarmonyLib;
using DevourClient;
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 (Load.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 (Load.exp_modifier)
{
__result.totalExp = (int)Load.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;
}
}
[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.basePrice = 0;
outfit.currentPrice = 0;
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; return;
} }
} }

File diff suppressed because it is too large Load Diff

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

@@ -10,7 +10,30 @@ namespace DevourClient.Settings
public static float x = 0; public static float x = 0;
public static float y = 0; public static float y = 0;
public static Color flashlight_color = new Color(1.00f, 1.00f, 1.00f, 1); public static Color flashlight_color = new Color(1.00f, 1.00f, 1.00f, 1);
public static Color player_esp_color = new Color(0.00f, 1.00f, 0.00f, 1);
public static Color azazel_esp_color = new Color(1.00f, 0.00f, 0.00f, 1);
public static float speed = 1f; public static float speed = 1f;
public const string message_to_spam = "Deez Nutz"; public const string message_to_spam = "Deez Nutz";
public static KeyCode flyKey = KeyCode.None;
public static Vector2 itemsScrollPosition = Vector2.zero;
public static Vector2 rituelObjectsScrollPosition = Vector2.zero;
public static Vector2 stuffsScrollPosition = Vector2.zero;
public static KeyCode GetKey()
{
Thread.Sleep(50); //TOFIX tried using anyKeydown, no success
foreach (KeyCode vkey in System.Enum.GetValues(typeof(KeyCode)))
{
if (Input.GetKey(vkey))
{
if (vkey != KeyCode.Delete)
{
return vkey;
}
}
}
return KeyCode.None;
}
} }
} }

110
README.md
View File

@@ -1,20 +1,16 @@
# 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
I wasn't home for 2 days so i made that, i learnt a lot about C# programming and about Unity IL2CPP game hacking. Very based cheat for the game Devour.
DevourClient is a rather uncommon cheat for Devour, i've seen multiple cheats for this game but they all had some boring features such as ESP and stuff.
This cheat hasn't many features and some of them may broke with the time, but hey, spaming the chat with "Deez Nutz" is funny.
Also don't mind french comments lol, google translate is your friend !
ps : my computer was really bad so i couldn't do a lot of testing in game because it required too much time to load
## Detection rate ## Detection rate
Well at this point i don't really know, i think there is some sort of native Unity anti cheat template but it doesn't seem active. You're fine, no anti cheat ! Well at this point i don't really know, i think there is some sort of native Unity anti cheat template but it doesn't seem active. You're fine, no anti cheat !
## Menu
![menu screenshot](Screenshots/menu.png)
## Features ## Features
Everything about spoofing ehre (steam name, server name, level...) will persist if you don't uncheck it (it will be reseted when you'll restart the game obv). Everything about spoofing ehre (steam name, server name, level...) will persist if you don't uncheck it (it will be reseted when you'll restart the game obv).
* An IMGUI menu thanks to UnityEngine * An IMGUI menu thanks to UnityEngine
@@ -23,25 +19,45 @@ Everything about spoofing ehre (steam name, server name, level...) will persist
* Detects the map you are playing on (useful for the instant win) * Detects the map you are playing on (useful for the instant win)
* Big Flashlight (allows your flashlight to light a lot more) * Big Flashlight (allows your flashlight to light a lot more)
* Flashlight color customization (with a home made color picker) * Flashlight color customization (with a home made color picker)
* Unlimited UV light (thanks to [@jadis0x](https://github.com/jadis0x))
* A chat spammer for Lobby and InGame chat (i couldn't do a text entry because of the limitations of [Il2CppAssemblyUnhollower](https://github.com/knah/Il2CppAssemblyUnhollower)) * A chat spammer for Lobby and InGame chat (i couldn't do a text entry because of the limitations of [Il2CppAssemblyUnhollower](https://github.com/knah/Il2CppAssemblyUnhollower))
* Achievements unlocker (couldn't do all of them, my code is crashing for some reasons at some point, i may fix it, for now it's commented out) * Achievements unlocker (couldn't do all of them, my code is crashing for some reasons at some point, i may fix it, for now it's commented out)
* Doors unlocker (should work fine, though it doesn't seem to work sometimes) * Doors unlocker (should work fine, though it doesn't seem to work sometimes)
* Keys teleporter (broken, works sometimes but doesn't TP all the keys for some reasons) * Keys teleporter
* LV 70 (puts you to the max level of the game !) * LV spoofer
* LV 666 (secret level, thanks to the guy who told me it exists lol)
* Steam name spoofer (sets it to "patate", again no input text :/) * Steam name spoofer (sets it to "patate", again no input text :/)
* Server name spoofer (sets it to "patate on top !", again no input text :/) * Server name spoofer (sets it to "patate on top !", again no input text :/)
* Fly !! YES ! YOU CAN FLY ! You can also change the speed of it (left shift : down, space : up, up arrow : forward, back arrow : backward, left arrow : left, right arrow : right) * Fly
* Unlock all, including flashlights, perks, outfits. Active by default, can't be turned off, no persistance.
* Instant Win (allows you to win instantaniously on any map, works in singleplayer, but not as a client. May be working as host) * Instant Win (allows you to win instantaniously on any map, works in singleplayer, but not as a client. May be working as host)
* Random Sound (make your character play a random acting sound)
* Always carrying a medkit
* Change your exp at the end of the game, changing it is permanant !
* Player ESP (with a home made color picker)
* Player skeleton ESP
* Player snaplines (with a home made color picker)
* Azazel ESP (with a home made color picker)
* Azazel Skeleton ESP
* Azazel snapline (with a home made color picker)
* Item ESP
* Demon ESP
* Goat/Rat ESP
* TP all the items to your position ! (thanks to [@jadis0x](https://github.com/jadis0x))
* Spawn any item/entity to your position
* Walk in the lobby
* Change the player's speed
* Fullbright
* Create a lobby with no player limit
## Installation ## Installation
For my French fellas out there, 1tap2times made a French video tutorial for the installation of the Mod : [link](https://vimeo.com/789315436)<br>
For my German friends, KiwiJuice02 made a german video tutorial right here : [link](https://www.youtube.com/watch?v=Ntablvo6y-I)<br>
In order to get all of this working you need to generate the DevourClient.dll file by building the source code.
0. Download the [release version](https://github.com/ALittlePatate/DevourClient/releases/) or [build it from source](https://github.com/ALittlePatate/DevourClient#building-from-source). 0. Install [.NET 6 SDK and runtime](https://dotnet.microsoft.com/en-us/download/dotnet/6.0).
1. Install [MelonLoader](https://github.com/LavaGang/MelonLoader/releases/tag/v0.4.3) to Devour. 1. [Build the cheat from source](https://github.com/ALittlePatate/DevourClient#building-from-source).
2. Start your game. A cmd should appear, don't close it, MelonLoader is installing and decompiling Devour's game assemblies. 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. Wait for the process to finish, once it's done close the game. 3. Start the game, now you have successfully installed DevourClient. Use INSERT to open the menu
4. Put the DevourClient.dll file inside `C:\Program Files (x86)\Steam\steamapps\common\Devour\Mods` folder.
5. Start the game, now you have successfully installed DevourClient. Use INSERT to open the menu
## Uninstallation ## Uninstallation
@@ -49,31 +65,40 @@ Everything about spoofing ehre (steam name, server name, level...) will persist
## Building from source ## Building from source
0. Clone the repository 0. Clone the repository (or Code -> Download Zip)
1. Install MelonLoader (see [Installation](https://github.com/ALittlePatate/DevourClient#installation)) 1. Install [MelonLoader](https://github.com/LavaGang/MelonLoader/releases) V0.6.0 (go to Settings -> tick "Show ALPHA Pre-Releases") to Devour.
2. Open the solution file in Visual Studio (i used 2019, i don't know about the compatibility with the other versions) 2. Start your game. A cmd should appear, don't close it, MelonLoader is installing and decompiling Devour's game assemblies.
3. Go to : Project --> Add a reference --> Browse --> Click on the browse button in the down right corner of the window. 3. Wait for the process to finish, once it's done close the game.
4. Add those files : 4. Open the solution file (DevourClient.sln) in Visual Studio
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\MelonLoader.dll` 5. Go to : Project --> Add a reference --> Browse --> Click on the browse button in the down right corner of the window.
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\0Harmony.dll` 6. Add those files :
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\UnityEngine.IMGUIModule.dll` * `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\net6\MelonLoader.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\UnityEngine.InputLegacyModule.dll` * `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\net6\0Harmony.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\bolt.user.dll` * `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\net6\Il2CppInterop.Runtime.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\bolt.dll` * `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Assembly-CSharp.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\UnityEngine.HotReloadModule.dll` * `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2CppOpsive.UltimateCharacterController.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\UnityEngine.UI.dll` * `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2CppBehaviorDesigner.Runtime.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\UnityEngine.CoreModule.dll` * `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppbolt.user.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\Il2Cppmscorlib.dll` * `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppbolt.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\Assembly-CSharp.dll` * `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\Il2Cppmscorlib.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\Opsive.UltimateCharacterController.dll` * `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.IMGUIModule.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Managed\UnityENgine.InputModule.dll` * `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.InputLegacyModule.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Dependencies\Il2CppAssemblyGenerator\Il2CppUnhollower\UnhollowerBaseLib.dll` * `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.HotReloadModule.dll`
* `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Dependencies\Il2CppAssemblyGenerator\Il2CppUnhollower\UnhollowerRuntimeLib.dll` * `C:\Program Files (x86)\Steam\steamapps\common\Devour\MelonLoader\Il2CppAssemblies\UnityEngine.UI.dll`
5. Build the solutions in Release | Any CPU mode * `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`
7. Build the solutions in Release | Any CPU
## Contact ## Contact
You can add me on discord at patate#1252 You can add me on discord at patate#1252 or on the [discord server](https://discord.gg/2amMFvqjYd)
## Code used ## Code used
@@ -93,6 +118,9 @@ For decompiling and looking in the source code of the game :
For teaching me the basics about Devour game hacking, and i pasted the Key TP hack and the non working part of the Achievements Unlocker from it : For teaching me the basics about Devour game hacking, and i pasted the Key TP hack and the non working part of the Achievements Unlocker from it :
* [DevourCheatMonoInjector](https://github.com/Glatrix/DevourCheatMonoInjector) * [DevourCheatMonoInjector](https://github.com/Glatrix/DevourCheatMonoInjector)
Game's last update before il2cpp :
* https://steamdb.info/depot/1274571/history/?changeid=M:1960656865974212833
## Contributing ## Contributing
Open an [issue](https://github.com/ALittlePatate/DevourClient/issues/new) or make a [pull request](https://github.com/ALittlePatate/DevourClient/pulls), i'll be glad to improve my project with you ! Open an [issue](https://github.com/ALittlePatate/DevourClient/issues/new) or make a [pull request](https://github.com/ALittlePatate/DevourClient/pulls), i'll be glad to improve my project with you !

BIN
Screenshots/menu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 544 KiB

View File

@@ -0,0 +1,28 @@
"""
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', 'a')
o.write("string[] achievements = {")
tot = 0
for i in data['ScriptString']:
v = i["Value"]
if "ACH_" in v :
o.write('"'+v+'", ')
tot+=1
o.write("};")
print(f"{tot} achievements")
# Closing files
o.close()
f.close()