From 54b0f00610b8cc84f3c4f6cf78be9798493f524c Mon Sep 17 00:00:00 2001 From: nullifiedcat Date: Fri, 5 May 2017 23:59:45 +0300 Subject: [PATCH] better skinchanger --- src/hacks/SkinChanger.cpp | 24 ++++++++++++++++-------- src/netvars.cpp | 2 +- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/hacks/SkinChanger.cpp b/src/hacks/SkinChanger.cpp index 0850bc10..f483f0b7 100644 --- a/src/hacks/SkinChanger.cpp +++ b/src/hacks/SkinChanger.cpp @@ -142,16 +142,24 @@ void FrameStageNotify(int stage) { } if (stage != FRAME_NET_UPDATE_POSTDATAUPDATE_START) return; - int handle = CE_INT(g_pLocalPlayer->entity, netvar.hActiveWeapon); - int eid = handle & 0xFFF; - IClientEntity* entity = g_IEntityList->GetClientEntity(eid); - if (!entity || entity->IsDormant()) return; + int* weapon_list = (int*)((unsigned)(RAW_ENT(LOCAL_E)) + netvar.hMyWeapons); + int my_weapon = CE_INT(g_pLocalPlayer->entity, netvar.hActiveWeapon); + IClientEntity* my_weapon_ptr = g_IEntityList->GetClientEntity(my_weapon & 0xFFF); static IClientEntity* last_weapon_out = nullptr; - if ((last_weapon_out != entity) || !cookie.Check()) { - GetModifier(NET_INT(entity, netvar.iItemDefinitionIndex)).Apply(eid); - cookie.Update(eid); + for (int i = 0; i < 5; i++) { + int handle = weapon_list[i]; + int eid = handle & 0xFFF; + if (eid < 32 || eid > HIGHEST_ENTITY) continue; + //logging::Info("eid, %i", eid); + IClientEntity* entity = g_IEntityList->GetClientEntity(eid); + if (!entity) continue; + if ((my_weapon_ptr != last_weapon_out) || !cookie.Check()) { + GetModifier(NET_INT(entity, netvar.iItemDefinitionIndex)).Apply(eid); + } } - last_weapon_out = entity; + if ((my_weapon_ptr != last_weapon_out) || !cookie.Check()) + cookie.Update(my_weapon & 0xFFF); + last_weapon_out = my_weapon_ptr; } static CatVar show_debug_info(CV_SWITCH, "skinchanger_debug", "1", "Debug Skinchanger"); diff --git a/src/netvars.cpp b/src/netvars.cpp index e8294c58..c2eb0072 100644 --- a/src/netvars.cpp +++ b/src/netvars.cpp @@ -17,6 +17,7 @@ void NetVars::Init() { this->iTeamNum = gNetvars.get_offset("DT_BaseEntity", "m_iTeamNum"); this->vViewOffset = gNetvars.get_offset("DT_BasePlayer", "localdata", "m_vecViewOffset[0]"); this->hActiveWeapon = gNetvars.get_offset("DT_BaseCombatCharacter", "m_hActiveWeapon"); + this->hMyWeapons = gNetvars.get_offset("DT_BaseCombatCharacter", "m_hMyWeapons"); this->iHitboxSet = gNetvars.get_offset("DT_BaseAnimating", "m_nHitboxSet"); this->vVelocity = gNetvars.get_offset("DT_BasePlayer", "localdata", "m_vecVelocity[0]"); this->movetype = gNetvars.get_offset("DT_BaseEntity", "movetype"); @@ -77,7 +78,6 @@ void NetVars::Init() { this->vecPunchAngle = gNetvars.get_offset("DT_BasePlayer", "localdata", "m_Local", "m_vecPunchAngle"); this->vecPunchAngleVel = gNetvars.get_offset("DT_BasePlayer", "localdata", "m_Local", "m_vecPunchAngleVel"); this->hThrower = gNetvars.get_offset("DT_BaseGrenade", "m_hThrower"); - this->hMyWeapons = gNetvars.get_offset("DT_BaseCombatCharacter", "m_hMyWeapons"); this->iObserverMode = gNetvars.get_offset("DT_BasePlayer", "m_iObserverMode"); this->hObserverTarget = gNetvars.get_offset("DT_BasePlayer", "m_hObserverTarget"); this->deadflag = gNetvars.get_offset("DT_BasePlayer", "pl", "deadflag");