From 1c724d96bfa6615506ff73e10ce29dba0e633d61 Mon Sep 17 00:00:00 2001 From: nullifiedcat Date: Fri, 28 Apr 2017 15:37:58 +0300 Subject: [PATCH] GUI now draws above everything including casual screen & loading fix #79 --- src/hooks/PaintTraverse.cpp | 2 +- src/netvars.cpp | 8 ++++---- src/playerresource.cpp | 28 +++++++++++++++++----------- src/playerresource.h | 2 +- 4 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/hooks/PaintTraverse.cpp b/src/hooks/PaintTraverse.cpp index edeab6db..ccc25d39 100644 --- a/src/hooks/PaintTraverse.cpp +++ b/src/hooks/PaintTraverse.cpp @@ -44,7 +44,6 @@ void PaintTraverse_hook(void* p, unsigned int vp, bool fr, bool ar) { g_ISurface->SetCursorAlwaysVisible(vis); } - if (call_default) SAFE_CALL(((PaintTraverse_t*)hooks::hkPanel->GetMethod(hooks::offPaintTraverse))(p, vp, fr, ar)); // To avoid threading problems. @@ -75,6 +74,7 @@ void PaintTraverse_hook(void* p, unsigned int vp, bool fr, bool ar) { ResetStrings(); if (vp != panel_focus) return; + g_IPanel->SetTopmostPopup(panel_focus, true); if (!draw_flag) return; draw_flag = false; diff --git a/src/netvars.cpp b/src/netvars.cpp index 7f76373e..24912ad0 100644 --- a/src/netvars.cpp +++ b/src/netvars.cpp @@ -22,10 +22,10 @@ void NetVars::Init() { this->movetype = gNetvars.get_offset("DT_BaseEntity", "movetype"); this->m_Collision = gNetvars.get_offset("DT_BaseEntity", "m_Collision"); if (TF2) { - res_m_iTeam = gNetvars.get_offset("DT_TFPlayerResource", "baseclass", "m_iTeam"); + res_iTeam = gNetvars.get_offset("DT_TFPlayerResource", "baseclass", "m_iTeam"); + this->res_iMaxBuffedHealth = gNetvars.get_offset("DT_TFPlayerResource", "m_iMaxBuffedHealth"); m_angEyeAngles = gNetvars.get_offset("DT_TFPlayer", "tfnonlocaldata", "m_angEyeAngles[0]"); this->bGlowEnabled = gNetvars.get_offset("DT_TFPlayer", "m_bGlowEnabled"); - this->iMaxBuffedHealth = gNetvars.get_offset("DT_TFPlayerResource", "m_iMaxBuffedHealth"); //this->iDecapitations = gNetvars.get_offset("DT_TFPlayer", "m_Shared", "m_iDecapitations"); //this->flReloadPriorNextFire = gNetvars.get_offset("DT_TFWeaponBase", "LocalActiveTFWeaponData", "m_flReloadPriorNextFire"); //this->flObservedCritChance = gNetvars.get_offset("DT_TFWeaponBase", "LocalActiveTFWeaponData", "m_flObservedCritChance"); @@ -38,6 +38,8 @@ void NetVars::Init() { this->m_flStealthNoAttackExpire = gNetvars.get_offset("DT_TFPlayer", "m_Shared", "tfsharedlocaldata", "m_flStealthNoAttackExpire"); } if (TF2 || TF2C) { + this->res_iMaxHealth = gNetvars.get_offset("DT_TFPlayerResource", "m_iMaxHealth"); + this->res_iPlayerClass = gNetvars.get_offset("DT_TFPlayerResource", "m_iPlayerClass"); this->m_bReadyToBackstab = gNetvars.get_offset("DT_TFWeaponKnife", "m_bReadyToBackstab"); this->m_bDucked = gNetvars.get_offset("DT_TFPlayer", "localdata", "m_Local", "m_bDucked"); this->m_flDuckTimer = gNetvars.get_offset("DT_TFPlayer", "m_Shared", "m_flDuckTimer"); @@ -52,13 +54,11 @@ void NetVars::Init() { this->iBuildingHealth = gNetvars.get_offset("DT_BaseObject", "m_iHealth"); this->iBuildingMaxHealth = gNetvars.get_offset("DT_BaseObject", "m_iMaxHealth"); this->iReloadMode = gNetvars.get_offset("DT_TFWeaponBase", "m_iReloadMode"); - this->iMaxHealth = gNetvars.get_offset("DT_TFPlayerResource", "m_iMaxHealth"); this->Rocket_iDeflected = gNetvars.get_offset("DT_TFBaseRocket", "m_iDeflected"); this->Grenade_iDeflected = gNetvars.get_offset("DT_TFWeaponBaseGrenadeProj", "m_iDeflected"); this->nForceTauntCam = gNetvars.get_offset("DT_TFPlayer", "m_nForceTauntCam"); this->Rocket_bCritical = gNetvars.get_offset("DT_TFProjectile_Rocket", "m_bCritical"); this->Grenade_bCritical = gNetvars.get_offset("DT_TFWeaponBaseGrenadeProj", "m_bCritical"); - this->iPlayerClass = gNetvars.get_offset("DT_TFPlayerResource", "m_iPlayerClass"); this->angEyeAngles = gNetvars.get_offset("DT_TFPlayer", "tfnonlocaldata", "m_angEyeAngles[0]"); this->iWeaponState = gNetvars.get_offset("DT_WeaponMinigun", "m_iWeaponState"); this->flChargeLevel = gNetvars.get_offset("DT_WeaponMedigun", "NonLocalTFWeaponMedigunData", "m_flChargeLevel"); diff --git a/src/playerresource.cpp b/src/playerresource.cpp index 929dd8da..50aef161 100644 --- a/src/playerresource.cpp +++ b/src/playerresource.cpp @@ -8,41 +8,47 @@ #include "common.h" void TFPlayerResource::Update() { - m_pEntity = 0; + entity = 0; for (int i = 0; i < HIGHEST_ENTITY; i++) { - CachedEntity* ent = ENTITY(i); - if (CE_GOOD(ent) && ent->m_iClassID == (TF ? g_pClassID->CTFPlayerResource : g_pClassID->CPlayerResource)) { - m_pEntity = ent; + IClientEntity* ent = g_IEntityList->GetClientEntity(i); + if (ent && ent->GetClientClass()->m_ClassID == (TF ? g_pClassID->CTFPlayerResource : g_pClassID->CPlayerResource)) { + entity = i; + return; } } } int TFPlayerResource::GetMaxHealth(CachedEntity* player) { - if (!m_pEntity) return 0; if (HL2DM) return 100; + IClientEntity* ent = g_IEntityList->GetClientEntity(entity); + if (!ent || ent->GetClientClass()->m_ClassID != (TF ? g_pClassID->CTFPlayerResource : g_pClassID->CPlayerResource)) return 0; int idx = player->m_IDX; if (idx >= 64 || idx < 0) return 0; - return *(int*)((unsigned int)RAW_ENT(m_pEntity) + netvar.iMaxHealth + 4 * idx); + return *(int*)((unsigned)ent + netvar.iMaxHealth + 4 * idx); } int TFPlayerResource::GetMaxBuffedHealth(CachedEntity* player) { if (!TF2) return GetMaxHealth(player); - if (!m_pEntity) return 0; + IClientEntity* ent = g_IEntityList->GetClientEntity(entity); + if (!ent || ent->GetClientClass()->m_ClassID != (TF ? g_pClassID->CTFPlayerResource : g_pClassID->CPlayerResource)) return 0; int idx = player->m_IDX; if (idx >= 64 || idx < 0) return 0; - return *(int*)((unsigned int)RAW_ENT(m_pEntity) + netvar.iMaxBuffedHealth + 4 * idx); + return *(int*)((unsigned)ent + netvar.iMaxBuffedHealth + 4 * idx); } int TFPlayerResource::GetTeam(int idx) { if (idx >= 64 || idx < 0) return 0; - return *(int*)((unsigned int)RAW_ENT(m_pEntity) + netvar.res_m_iTeam + 4 * idx); + IClientEntity* ent = g_IEntityList->GetClientEntity(entity); + if (!ent || ent->GetClientClass()->m_ClassID != (TF ? g_pClassID->CTFPlayerResource : g_pClassID->CPlayerResource)) return 0; + return *(int*)((unsigned)ent + netvar.res_m_iTeam + 4 * idx); } int TFPlayerResource::GetClass(CachedEntity* player) { - if (CE_BAD(m_pEntity)) return 0; + IClientEntity* ent = g_IEntityList->GetClientEntity(entity); + if (!ent || ent->GetClientClass()->m_ClassID != (TF ? g_pClassID->CTFPlayerResource : g_pClassID->CPlayerResource)) return 0; int idx = player->m_IDX; if (idx >= 64 || idx < 0) return 0; - return *(int*)((unsigned int)RAW_ENT(m_pEntity) + netvar.iPlayerClass + 4 * idx); + return *(int*)((unsigned)ent + netvar.iPlayerClass + 4 * idx); } diff --git a/src/playerresource.h b/src/playerresource.h index 91498bf0..3d814fb8 100644 --- a/src/playerresource.h +++ b/src/playerresource.h @@ -18,7 +18,7 @@ public: int GetClass(CachedEntity* player); int GetTeam(int idx); - CachedEntity* m_pEntity; + int entity; }; extern TFPlayerResource* g_pPlayerResource;