added IsNull function

IsNull(app::Object_1*): detects whether objects are null, works more efficiently than a nullptr check.
This commit is contained in:
Jadis0x
2024-05-31 23:24:48 +03:00
parent 75b119170e
commit 58e36f2eb9
4 changed files with 45 additions and 22 deletions

View File

@@ -73,6 +73,14 @@ bool IsInGame()
return false;
}
bool IsNull(app::Object_1* obj)
{
if (obj == nullptr)
return true;
return !app::Object_1_op_Implicit(obj, nullptr);
}
app::GameObject* GetAzazel(app::Survival* survival)
{
app::GameObject* ai = app::Survival_GetAzazel(survival, nullptr);

View File

@@ -8,6 +8,7 @@ bool IsLocalPlayer(app::NolanBehaviour* player);
bool IsPlayerCrawling();
bool IsPlayerCrawling(app::GameObject* go);
bool IsInGame();
bool IsNull(app::Object_1* obj);
app::GameObject* GetAzazel(app::Survival* survival);

View File

@@ -3,6 +3,7 @@
#include "Wrapper.h"
#include <vector>
#include <iostream>
#include "ClientHelper.h"
namespace Unity {
namespace GameObject {
@@ -10,14 +11,14 @@ namespace Unity {
app::Component* GetComponentByName(app::GameObject* go, const char* type);
}
namespace Math{
namespace Math {
namespace Vector3 {
std::string ToString(app::Vector3* v);
std::string ToString(app::Vector3 v);
}
}
namespace Transform{
namespace Transform {
app::Transform* Get(app::GameObject* go);
app::Vector3 Position(app::Transform* transform);
}
@@ -44,13 +45,14 @@ namespace UnityCore {
app::Object_1* obj_1 = app::Object_1_FindObjectOfType(reinterpret_cast<app::Type*>(object), nullptr);
if (obj_1) {
if (IsNull(obj_1) || obj_1 == nullptr) return nullptr;
T* foundObject = reinterpret_cast<T*>(obj_1);
if (foundObject) {
return foundObject;
}
}
}
return nullptr;
}

View File

@@ -3,6 +3,7 @@
#include "players.h"
#include <iostream>
#include "ClientHelper.h"
app::GameObject__Array* Players::GetAllPlayers()
@@ -22,6 +23,18 @@ app::GameObject__Array* Players::GetAllPlayers()
app::GameObject* Player::GetLocalPlayer()
{
static app::GameObject* cachedLocalPlayer = nullptr;
if (cachedLocalPlayer != nullptr) {
// Check if cached player is still valid
if (IsNull((app::Object_1*)cachedLocalPlayer)) {
cachedLocalPlayer = nullptr;
}
else {
return cachedLocalPlayer;
}
}
app::GameObject__Array* playerList = Players::GetAllPlayers();
app::String* NolanBehaviourStr = reinterpret_cast<app::String*>(il2cpp_string_new("NolanBehaviour"));
@@ -32,6 +45,10 @@ app::GameObject* Player::GetLocalPlayer()
for (int i = 0; i < _size; i++) {
app::GameObject* currentPlayer = playerList->vector[i];
if (IsNull((app::Object_1*)currentPlayer)) {
return nullptr;
}
else {
if (app::GameObject_GetComponentByName) {
app::Component* nbComponent = app::GameObject_GetComponentByName(currentPlayer, NolanBehaviourStr, nullptr);
@@ -39,17 +56,12 @@ app::GameObject* Player::GetLocalPlayer()
app::NolanBehaviour* nb = reinterpret_cast<app::NolanBehaviour*>(nbComponent);
if (nb) {
if (app::BoltEntity_get_IsOwner != nullptr && currentPlayer != nullptr) {
app::BoltEntity* entity = nb->fields._._._._._entity;
if (entity) {
if (app::BoltEntity_get_IsOwner(entity, nullptr)) {
if (IsLocalPlayer(nb)) {
return currentPlayer;
}
else {
return nullptr;
}
}
}
}