Skip to content

Commit

Permalink
crashing issues fixed
Browse files Browse the repository at this point in the history
Fixed random crashes occurring while ESP is active. Tested extensively on several maps without crash reports. I believe the issue is resolved
  • Loading branch information
jadis0x committed Jun 28, 2024
1 parent a462aa0 commit c99f820
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 26 deletions.
40 changes: 30 additions & 10 deletions lib/private/ClientHelper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,28 @@ bool IsHost()
return app::BoltNetwork_get_IsServer(NULL);
}

app::Survival* GetSurvivalObject()
{
static app::Survival* cachedSurvival = nullptr;

if (cachedSurvival == nullptr || Object::IsNull((app::Object_1*)cachedSurvival)) {
cachedSurvival = Object::FindObjectOfType<app::Survival>("Survival");
}

return cachedSurvival;
}

app::OptionsHelpers* GetOptionsHelpersObject()
{
static app::OptionsHelpers* cachedOptionsHelpers = nullptr;

if (cachedOptionsHelpers == nullptr || Object::IsNull((app::Object_1*)cachedOptionsHelpers)) {
cachedOptionsHelpers = Object::FindObjectOfType<app::OptionsHelpers>("OptionsHelpers");
}

return cachedOptionsHelpers;
}

bool IsLocalPlayer(app::NolanBehaviour* player)
{
auto boltEntity = app::EntityBehaviour_get_entity((app::EntityBehaviour*)player, NULL);
Expand Down Expand Up @@ -59,7 +81,7 @@ bool IsPlayerCrawling(app::GameObject* go)

bool IsInGame()
{
app::OptionsHelpers* optionsHelpers = Object::FindObjectOfType<app::OptionsHelpers>("OptionsHelpers");
app::OptionsHelpers* optionsHelpers = GetOptionsHelpersObject();

if (optionsHelpers)
return optionsHelpers->fields._inGame_k__BackingField;
Expand All @@ -69,20 +91,17 @@ bool IsInGame()

bool IsSequencePlaying()
{
app::Survival* survival = Object::FindObjectOfType<app::Survival>("Survival");
app::Survival* survival = GetSurvivalObject();

// Return false if the object was not found.
if (survival == nullptr) return false;

if (app::Survival_IsEndingPlaying != nullptr || app::Survival_IsJumpScarePlaying != nullptr || app::Survival_StartingToPlayFailEnding != nullptr) {
bool isEndingPlaying = app::Survival_IsEndingPlaying(survival, nullptr);
bool isJumpScarePlaying = app::Survival_IsJumpScarePlaying(survival, nullptr);
bool isStartingToPlayFailEnding = app::Survival_StartingToPlayFailEnding(survival, nullptr);
// Check if any of the sequences are playing and return the result directly.
if (app::Survival_IsEndingPlaying && app::Survival_IsEndingPlaying(survival, nullptr)) return true;
if (app::Survival_IsJumpScarePlaying && app::Survival_IsJumpScarePlaying(survival, nullptr)) return true;
if (app::Survival_StartingToPlayFailEnding && app::Survival_StartingToPlayFailEnding(survival, nullptr)) return true;

// Return true if any sequence is playing.
return isEndingPlaying || isJumpScarePlaying || isStartingToPlayFailEnding;
}

// If none of the sequences are playing, return false.
return false;
}

Expand All @@ -98,6 +117,7 @@ app::GameObject* GetAzazel(app::Survival* survival)
}



std::string SceneName()
{
if (app::SaveHelpers_get_singleton != nullptr) {
Expand Down
5 changes: 2 additions & 3 deletions lib/public/ClientHelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,14 @@
bool IsSinglePlayer();
bool IsOnline();
bool IsHost();
app::Survival* GetSurvivalObject();
app::OptionsHelpers* GetOptionsHelpersObject();
bool IsLocalPlayer(app::NolanBehaviour* player);
bool IsPlayerCrawling();
bool IsPlayerCrawling(app::GameObject* go);
bool IsInGame();
bool IsSequencePlaying();

app::GameObject* GetAzazel(app::Survival* survival);

std::string SceneName();
std::string GetAzazelName();

float Time_DeltaTime();
6 changes: 5 additions & 1 deletion lib/public/UnityEngine/Transform.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ namespace Transform {
{
if (!component) return nullptr;

return app::Component_get_transform((app::Component*)component, nullptr);
if (app::Component_get_transform != nullptr) {
return app::Component_get_transform((app::Component*)component, nullptr);
}

return nullptr;
}
}
8 changes: 4 additions & 4 deletions user/features/esp/esp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ void DrawNameESP(app::Vector3 pos, std::string name, ImColor color)
void ComputePositionAndDrawESP(app::Object_1__Array* ents, ImColor color, bool use_prefab = false, std::string name = "") {
for (int i = 0; i < ents->max_length; i++) {
app::Object_1 *ent = ents->vector[i];
if (ent == nullptr)
if (Object::IsNull(ent))
continue;

app::Transform* _transform = Transform::GetTransform(ent);
Expand Down Expand Up @@ -144,22 +144,22 @@ void ESP::RunItemsESP() {
ImColor col = ImColor{ settings::item_esp_color[0], settings::item_esp_color[1], settings::item_esp_color[2], settings::item_esp_color[3] };

app::Object_1__Array *ents = Object::FindObjectsOfType("SurvivalInteractable", "");
if (ents != nullptr && ents->vector[0] != nullptr) {
if (ents != nullptr || !Object::IsNull(ents->vector[0])) {
ComputePositionAndDrawESP(ents, col, true);
}

if (SceneName() != "Menu")
return;
ents = Object::FindObjectsOfType("KeyBehaviour", "");
if (ents != nullptr && ents->vector[0] != nullptr) {
if (ents != nullptr || !Object::IsNull(ents->vector[0])) {
ComputePositionAndDrawESP(ents, col, false, "Key");
}
}

void ESP::RunGoatsESP() {
app::Object_1__Array *goats = Object::FindObjectsOfType("GoatBehaviour", "");

if (goats == nullptr || goats->vector[0] == nullptr)
if (goats == nullptr || Object::IsNull(goats->vector[0]))
return;

ComputePositionAndDrawESP(goats, ImColor{ settings::goat_esp_color[0], settings::goat_esp_color[1], settings::goat_esp_color[2], settings::goat_esp_color[3] });
Expand Down
18 changes: 10 additions & 8 deletions user/hooks/hooks.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -766,17 +766,19 @@ HRESULT __stdcall hookD3D11Present(IDXGISwapChain* pSwapChain, UINT SyncInterval
if (settings::player_esp)
ESP::RunPlayersESP();

if (settings::goat_esp && SceneName() != "Menu")
ESP::RunGoatsESP();
if (IsInGame() && !IsSequencePlaying()) {
if (settings::goat_esp && SceneName() != "Menu")
ESP::RunGoatsESP();

if (settings::item_esp && SceneName() != "Menu")
ESP::RunItemsESP();
if (settings::item_esp && SceneName() != "Menu")
ESP::RunItemsESP();

if (settings::demon_esp)
ESP::RunDemonESP();
if (settings::demon_esp)
ESP::RunDemonESP();

if (settings::azazel_esp && SceneName() != "Menu")
ESP::RunAzazelESP();
if (settings::azazel_esp && SceneName() != "Menu")
ESP::RunAzazelESP();
}

ImGui::GetIO().MouseDrawCursor = open_menu;

Expand Down

0 comments on commit c99f820

Please sign in to comment.