351 lines
11 KiB
C#
351 lines
11 KiB
C#
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>();
|
|
|
|
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 IEnumerator GetLocalPlayer()
|
|
{
|
|
while (true)
|
|
{
|
|
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 (true)
|
|
{
|
|
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 (true)
|
|
{
|
|
GoatsAndRats = Il2Cpp.GoatBehaviour.FindObjectsOfType<Il2Cpp.GoatBehaviour>();
|
|
|
|
// Wait 5 seconds before caching objects again.
|
|
yield return new WaitForSeconds(5f);
|
|
}
|
|
}
|
|
|
|
public static IEnumerator GetSurvivalInteractables()
|
|
{
|
|
while (true)
|
|
{
|
|
SurvivalInteractables = Il2Cpp.SurvivalInteractable.FindObjectsOfType<Il2Cpp.SurvivalInteractable>();
|
|
|
|
// Wait 5 seconds before caching objects again.
|
|
yield return new WaitForSeconds(5f);
|
|
}
|
|
}
|
|
|
|
public static IEnumerator GetKeys()
|
|
{
|
|
while (true)
|
|
{
|
|
Keys = Il2Cpp.KeyBehaviour.FindObjectsOfType<Il2Cpp.KeyBehaviour>();
|
|
|
|
// Wait 5 seconds before caching objects again.
|
|
yield return new WaitForSeconds(5f);
|
|
}
|
|
}
|
|
|
|
public static IEnumerator GetDemons()
|
|
{
|
|
while (true)
|
|
{
|
|
Demons = Il2Cpp.SurvivalDemonBehaviour.FindObjectsOfType<Il2Cpp.SurvivalDemonBehaviour>();
|
|
|
|
// Wait 5 seconds before caching objects again.
|
|
yield return new WaitForSeconds(5f);
|
|
}
|
|
}
|
|
|
|
public static IEnumerator GetSpiders()
|
|
{
|
|
while (true)
|
|
{
|
|
Spiders = Il2Cpp.SpiderBehaviour.FindObjectsOfType<Il2Cpp.SpiderBehaviour>();
|
|
|
|
// Wait 5 seconds before caching objects again.
|
|
yield return new WaitForSeconds(5f);
|
|
}
|
|
}
|
|
|
|
public static IEnumerator GetGhosts()
|
|
{
|
|
while (true)
|
|
{
|
|
Ghosts = Il2Cpp.GhostBehaviour.FindObjectsOfType<Il2Cpp.GhostBehaviour>();
|
|
|
|
// Wait 5 seconds before caching objects again.
|
|
yield return new WaitForSeconds(5f);
|
|
}
|
|
}
|
|
|
|
public static IEnumerator GetBoars()
|
|
{
|
|
while (true)
|
|
{
|
|
Boars = Il2Cpp.BoarBehaviour.FindObjectsOfType<Il2Cpp.BoarBehaviour>();
|
|
|
|
// Wait 5 seconds before caching objects again.
|
|
yield return new WaitForSeconds(5f);
|
|
}
|
|
}
|
|
|
|
public static IEnumerator GetCorpses()
|
|
{
|
|
while (true)
|
|
{
|
|
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
|
|
*/
|
|
while (true)
|
|
{
|
|
Azazels = Il2Cpp.SurvivalAzazelBehaviour.FindObjectsOfType<Il2Cpp.SurvivalAzazelBehaviour>();
|
|
|
|
// Wait 5 seconds before caching objects again.
|
|
yield return new WaitForSeconds(5f);
|
|
}
|
|
}
|
|
}
|
|
}
|