diff --git a/gamedata/core.games/engine.mcv.txt b/gamedata/core.games/engine.mcv.txt index 10254d9e9..77cf29f70 100644 --- a/gamedata/core.games/engine.mcv.txt +++ b/gamedata/core.games/engine.mcv.txt @@ -1,45 +1,41 @@ -/** - * Do not edit this file. Any changes will be overwritten by the gamedata - * updater or by upgrading your SourceMod install. - * - * To override data in this file, create a subdirectory named "custom" and - * place your own gamedata file(s) inside of it. Such files will be parsed - * after SM's own. - * - * For more information, see http://wiki.alliedmods.net/Gamedata_Updating_(SourceMod) - */ - "Games" { - /* CGlobalEntityList */ - "#default" - { - "#supported" - { - "engine" "mcv" - } - - "Offsets" - { - /* Offset into LevelShutdown */ - "gEntList" - { - "windows" "33" - } + /* CGlobalEntityList */ + /* Windows - get gEntList from offset into CServerGameDLL::LevelShutdown and then get EntInfo offset from gamedata */ + /* Linux - get gEntList directly from exported symbol and then get the EntInfo offset from gamedata */ - "EntInfo" - { - "windows" "4" - } - } - - "Signatures" - { - "LevelShutdown" - { - "library" "server" - "windows" "\x56\x8B\x35\x2A\x2A\x2A\x2A\x8B\xCE\x8B\x06\xFF\x90\x84\x00\x00\x00\xE8\x2A\x2A\x2A\x2A\xE8" - } - } - } + "#default" + { + "Signatures" + { + /* gEntList symbol */ + "gEntList" + { + "library" "server" + "linux64" "@gEntList" + } + + "LevelShutdown" + { + "library" "server" + "windows64" "IDK" + } + } + + "Offsets" + { + /* Offset into LevelShutdown of gEntList */ + "gEntList" + { + "windows64" "IDK" + } + + /* gEntList->m_EntPtrArray[] offset */ + "EntInfo" + { + "linux64" "8" + "windows64" "8" + } + } + } } diff --git a/gamedata/sdkhooks.games/engine.mcv.txt b/gamedata/sdkhooks.games/engine.mcv.txt index 334bd5c49..8bdaaff6c 100644 --- a/gamedata/sdkhooks.games/engine.mcv.txt +++ b/gamedata/sdkhooks.games/engine.mcv.txt @@ -1,112 +1,166 @@ "Games" { - "#default" - { - "Offsets" - { - "Blocked" - { - "windows" "106" - } - "EndTouch" - { - "windows" "104" - } - "FireBullets" - { - "windows" "118" - } - "GetMaxHealth" - { - "windows" "122" - } - "OnTakeDamage" - { - "windows" "68" - } - "OnTakeDamage_Alive" - { - "windows" "306" - } - "PreThink" - { - "windows" "376" - } - "PostThink" - { - "windows" "377" - } - "Reload" - { - "windows" "295" - } - "SetTransmit" - { - "windows" "23" - } - "ShouldCollide" - { - "windows" "18" - } - "Spawn" - { - "windows" "25" - } - "StartTouch" - { - "windows" "102" - } - "Think" - { - "windows" "52" - } - "Touch" - { - "windows" "103" - } - "TraceAttack" - { - "windows" "66" - } - "Use" - { - "windows" "101" - } - "VPhysicsUpdate" - { - "windows" "157" - } - "Weapon_CanSwitchTo" - { - "windows" "297" - } - "Weapon_CanUse" - { - "windows" "291" - } - "Weapon_Drop" - { - "windows" "294" - } - "Weapon_Equip" - { - "windows" "292" - } - "Weapon_Switch" - { - "windows" "296" - } - } - } - - "#default" - { - "Offsets" - { - "EntityListeners" - { - "windows" "196644" - } - } - } + "#default" + { + "Offsets" + { + // "[L0/W0] L107 W108 CBaseEntity::Blocked(CBaseEntity*)", + "Blocked" + { + "linux64" "107" + "windows64" "108" + } + // "[L0/W0] L105 W106 CBaseEntity::EndTouch(CBaseEntity*)", + "EndTouch" + { + "linux64" "105" + "windows64" "106" + } + // "[L0/W0] L119 W120 CBaseEntity::FireBullets(FireBulletsInfo_t const&)", + "FireBullets" + { + "linux64" "119" + "windows64" "120" + } + // "[L0/W0] L123 W124 CBaseEntity::GetMaxHealth(void)", + "GetMaxHealth" + { + "linux64" "123" + "windows64" "124" + } + // "[L0/W0] L69 W70 CBaseEntity::OnTakeDamage(CTakeDamageInfo const&)", + "OnTakeDamage" + { + "linux64" "69" + "windows64" "70" + } + // Only seems to exist on bot functions?? + // "[L0/W0] L307 W306 CAI_BaseNPC::OnTakeDamage_Alive(CTakeDamageInfo const&)", + // "OnTakeDamage_Alive" + // { + // "windows" "306" + // } + + + // "[L0/W0] L376 W375 CBasePlayer::PreThink(void)", + "PreThink" + { + "linux64" "376" + "windows64" "375" + } + // "[L0/W0] L377 W376 CBasePlayer::PostThink(void)", + "PostThink" + { + "linux64" "377" + "windows64" "376" + } + // CBaseCombatWeapon::FinishReload ????? + // "[L0/W0] L294 W296 CBaseCombatWeapon::FinishReload(void)", + "Reload" + { + "linux64" "294" + "windows64" "296" + } + // "[L0/W0] L24 W24 CBaseEntity::SetTransmit(CCheckTransmitInfo *,bool)", + "SetTransmit" + { + "linux64" "24" + "windows64" "24" + } + // "[L0/W0] L19 W19 CBaseEntity::ShouldCollide(int,int)", + "ShouldCollide" + { + "linux64" "19" + "windows64" "19" + } + // "[L0/W0] L32 W27 CBaseEntity::Spawn(void)", + // "[L0/W0] L26 W26 CBaseCombatCharacter::Spawn(void)", + "Spawn" + { + "linux64" "26" + "windows64" "26" + } + // "[L0/W0] L103 W104 CBaseEntity::StartTouch(CBaseEntity*)", + "StartTouch" + { + "linux64" "103" + "windows64" "104" + } + // "[L0/W0] L53 W55 CBaseEntity::Think(void)", + "Think" + { + "linux64" "53" + "windows64" "55" + } + // "[L0/W0] L104 W105 CBaseEntity::Touch(CBaseEntity*)", + "Touch" + { + "linux64" "104" + "windows64" "105" + } + // "[L0/W0] L67 W68 CBaseEntity::TraceAttack(CTakeDamageInfo const&,Vector const&,CGameTrace *)", + "TraceAttack" + { + "linux64" "67" + "windows64" "68" + } + // "[L0/W0] L102 W103 CBaseEntity::Use(CBaseEntity*,CBaseEntity*,USE_TYPE,float)", + "Use" + { + "linux64" "102" + "windows64" "103" + } + // "[L0/W0] L158 W157 CBaseEntity::VPhysicsUpdate(IPhysicsObject *)", + "VPhysicsUpdate" + { + "linux64" "158" + "windows64" "157" + } + // "[L0/W0] L299 W298 CBaseCombatCharacter::Weapon_CanSwitchTo(CBaseCombatWeapon *)", + "Weapon_CanSwitchTo" + { + "linux64" "299" + "windows64" "298" + } + // "[L0/W0] L292 W291 CBaseCombatCharacter::Weapon_CanUse(CBaseCombatWeapon *)", + "Weapon_CanUse" + { + "linux64" "292" + "windows64" "291" + } + // "[L0/W0] L296 W295 CBaseCombatCharacter::Weapon_Drop(CBaseCombatWeapon *,Vector const*,Vector const*)", + "Weapon_Drop" + { + "linux64" "296" + "windows64" "295" + } + // "[L0/W0] L293 W292 CBaseCombatCharacter::Weapon_Equip(CBaseCombatWeapon *)", + "Weapon_Equip" + { + "linux64" "293" + "windows64" "292" + } + // "[L0/W0] L297 W296 CBaseCombatCharacter::Weapon_Switch(CBaseCombatWeapon *,int)", + "Weapon_Switch" + { + "linux64" "297" + "windows64" "296" + } + } + + } + + "#default" + { + "Offsets" + { + "EntityListeners" + { + // 49159 + // 98322 + "windows" "196644" + "linux64" "49159" + } + } + } } diff --git a/gamedata/sdktools.games/engine.mcv.txt b/gamedata/sdktools.games/engine.mcv.txt index 7448835e4..4ac91e0df 100644 --- a/gamedata/sdktools.games/engine.mcv.txt +++ b/gamedata/sdktools.games/engine.mcv.txt @@ -1,494 +1,266 @@ -/** - * Do not edit this file. Any changes will be overwritten by the gamedata - * updater or by upgrading your SourceMod install. - * - * To override data in this file, create a subdirectory named "custom" and - * place your own gamedata file(s) inside of it. Such files will be parsed - * after SM's own. - * - * For more information, see http://wiki.alliedmods.net/Gamedata_Updating_(SourceMod) - */ - "Games" { - /* Sounds */ - "#default" - { - "Keys" - { - "SlapSoundCount" "6" - "SlapSound1" "physics/flesh/vietnam_flesh_impact_bullet1.wav" - "SlapSound2" "physics/flesh/vietnam_flesh_impact_bullet2.wav" - "SlapSound3" "physics/flesh/vietnam_flesh_impact_bullet3.wav" - "SlapSound4" "physics/flesh/vietnam_flesh_impact_bullet4.wav" - "SlapSound5" "physics/flesh/vietnam_flesh_impact_bullet5.wav" - "SlapSound6" "physics/flesh/vietnam_flesh_impact_bullet6.wav" - } - } - - /* General Temp Entities */ - "#default" - { - "Offsets" - { - /* Offset into CBaseTempEntity signature address */ - "s_pTempEntities" - { - "windows" "16" - } - "GetTEName" - { - "windows" "4" - } - "GetTENext" - { - "windows" "8" - } - "TE_GetServerClass" - { - "windows" "0" - } - } - -/* -.text:000000018004A500 ; int sub_18004A500() -.text:000000018004A500 sub_18004A500 proc near ; DATA XREF: .rdata:0000000180654E70↓o -.text:000000018004A500 ; .pdata:0000000180C2E714↓o -.text:000000018004A500 sub rsp, 28h -.text:000000018004A504 lea rdx, aShotgunShot ; "Shotgun Shot" // <--- uniq string -.text:000000018004A50B lea rcx, qword_180B89850 -.text:000000018004A512 call sub_1803C6210 // <--- CBaseTempEntity::CBaseTempEntity -.text:000000018004A517 lea rax, ??_7CTEFireBullets@@6B@ ; const CTEFireBullets::`vftable' -.text:000000018004A51E mov cs:dword_180B89884, 0FFFFFFFFh + "#default" + { + "Keys" + { + "SlapSoundCount" "6" + "SlapSound1" "physics/flesh/vietnam_flesh_impact_bullet1.wav" + "SlapSound2" "physics/flesh/vietnam_flesh_impact_bullet2.wav" + "SlapSound3" "physics/flesh/vietnam_flesh_impact_bullet3.wav" + "SlapSound4" "physics/flesh/vietnam_flesh_impact_bullet4.wav" + "SlapSound5" "physics/flesh/vietnam_flesh_impact_bullet5.wav" + "SlapSound6" "physics/flesh/vietnam_flesh_impact_bullet6.wav" + "GameRulesProxy" "CVietnamGameRulesProxy" + "GameRulesDataTable" "vietnam_gamerules" + } + + "Signatures" + { + /* This signature sometimes has multiple matches, but this + * does not matter as g_pGameRules is involved in all of them. + * The same g_pGameRules offset applies to each match. + * + * Sometimes this block of bytes is at the beginning of the static + * CreateGameRulesObject function and sometimes it is in the middle + * of an entirely different function. This depends on the game. + */ + "CreateGameRulesObject" + { + "library" "server" + "windows64" "\x55\x8B\xEC\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x74\x2A\x8B\x01\x6A\x01" + } + "g_pGameRules" + { + "library" "server" + "linux64" "@g_pGameRules" + } + } + "Signatures" + { + /* CBaseServer object for IServer interface */ + "sv" + { + "library" "engine" + "linux64" "@sv" + } + } + + /* General Temp Entities */ + "Offsets" + { + /* Offset into CBaseTempEntity signature address */ + "s_pTempEntities" + { + "windows64" "16" + } + "GetTEName" + { + "windows64" "4" + } + "GetTENext" + { + "windows64" "8" + } + "TE_GetServerClass" + { + "windows64" "0" + } + + /* Offset into IVEngineServer::CreateFakeClient */ + //"sv" + //{ + // // "windows64" "8" + //} + /** + * CBaseClient::SetUserCVar(char const*,char const*); + * linux64 offset straight from VTable dump. + * windows64 offset is crazy. Found the windows64 SetName function using string "(%d)%-.*s" (aD_S in IDA) + * Cross referenced back to the vtable and counted manually (SetUserCvar is 1 higher, offsets start from 1) + */ + "SetUserCvar" + { + "linux64" "69" + "windows64" "61" + } + /** + * CBaseClient::SetName(char const*); + * linux64 offset straight from VTable dump. + * Has string "(%d)%-0.*s" + */ + "SetClientName" + { + "linux64" "68" + "windows64" "60" + } + /** + * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. + * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. + * linux64: mov byte ptr [esi+0B0h], 0 + * Win: mov byte ptr [esi+0B0h], 0 + * + * MCV: This has been moved into CBaseClient::UpdateUserSettings(), rest of the details are still relevant. + */ + "InfoChanged" + { + "linux64" "59" + // "windows64" "46" <-- ?? + } -QWORD *__fastcall sub_1803C6210(_QWORD *a1, __int64 a2) -{ - _QWORD *result; // rax - - a1[1] = a2; - *a1 = &CBaseTempEntity::`vftable'; - a1[2] = qword_180B76B10; - result = a1; - qword_180B76B10 = (__int64)a1; - return result; -} - - -void __fastcall CBaseTempEntity::CBaseTempEntity(CBaseTempEntity *this, const char *a2) -{ - __int64 v2; // rdx - - *((_QWORD *)this + 1) = a2; - *(_QWORD *)this = &`vtable for'CBaseTempEntity + 2; - v2 = CBaseTempEntity::s_pTempEntities; - CBaseTempEntity::s_pTempEntities = this; - *((_QWORD *)this + 2) = v2; -} - -== - - - - "Signatures" - { - "CBaseTempEntity" - { - "library" "server" - /* Signature for sub_1803C6210: - 48 8D 05 51 FD 3C 00 - \x48\x8D\x05\x51\xFD\x3C\x00 - */ - // "windows" "\x55\x8B\xEC\x8B\x45\x08\x89\x41\x04\xC7\x01" - // Wrong? - "windows" "\x48\x8D\x05\x51\xFD\x3C\x00" - } - } - } - - /* CGlobalEntityList */ - "#default" - { - "Signatures" - { - /* Functions in CGlobalEntityList */ - - // "NULL entity in global entity list!\n" - /* - __int64 __fastcall sub_8DFF50(__int64 a1, _DWORD *a2, _BYTE *a3) - { - ... - - while ( 1 ) - { - while ( 1 ) - { - v10 = *v8; - if ( *v8 ) - break; - DevWarning("NULL entity in global entity list!\n"); // <--- - - ... - - */ - // "env_credits" - /* - __int64 sub_9098B0() - { - __int64 result; // rax - - result = sub_8DFF50((__int64)&qword_1857200, 0LL, "env_credits"); // <--- - if ( result ) - return sub_89D0C0(result + 1296, result, result, 0.0); - return result; - } - */ - "FindEntityByClassname" - { - "library" "server" - "linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc" - "windows" "\x55\x8B\xEC\x53\x56\x8B\xF1\x8B\x4D\x08\x57\x85\xC9\x74\x2A\x8B\x01\xFF\x50\x08\x8B\x00\x83\xF8\xFF\x75\x2A\xB8\xFF\x1F\x00\x00\x8D\x04\x40\x8B\x74\xC6\x10\xEB\x2A\x0F\xB7\xC0\x8D\x04\x40\x8B\x74\xC6\x10\xEB\x2A\x8B\xB6\x04\x00\x03\x00\x85\xF6\x74\x2A\x8B\x7D\x0C" - } - } - } - - /* General GameRules */ - "#default" - { - "Keys" - { - // "GameRulesProxy" "CVietnamGameRulesProxy" - // "GameRulesDataTable" "vietnam_gamerules" - } - } - - /* IServer interface pointer */ - "linux" "@_sv" - - "#default" - { - "Keys" - { - /* Signature for the beginning of IVEngineServer::CreateFakeClient. - * - * The engine binary is not actually scanned in order to look for - * this. SourceHook is used to used to determine the address of the - * function and this signature is used to verify that it contains - * the expected code. A pointer to sv (IServer interface) is used - * here. - */ - // "CreateFakeClient_Windows" "\x55\x8B\xEC\x56\xFF\x75\x08\xB9" - } - - "Offsets" - { - /* Offset into IVEngineServer::CreateFakeClient */ - "sv" - { - // "windows" "8" - } - } - - } - - /* EntityFactoryDictionary function */ - "#default" - { - "Signatures" - { - // Signature for _ZN24CEntityFactoryDictionary14InstallFactoryEP14IEntityFactoryPKc: - // 48 89 54 24 10 48 83 EC 28 49 8B D0 - // \x48\x89\x54\x24\x10\x48\x83\xEC\x28\x49\x8B\xD0 - /* - 180B161B8: using guessed type __int64 qword_180B161B8; - Signature for sub_180369600: - 48 83 EC 28 8B 05 CE A9 7F 00 - \x48\x83\xEC\x28\x8B\x05\xCE\xA9\x7F\x00 - - Probably wrong. - */ - "EntityFactory" - { - "library" "server" - //"windows" "\xA1\x2A\x2A\x2A\x2A\xA8\x01\x0F\x85\x2A\x2A\x2A\x2A\x83\xC8\x01" - "windows" "\x48\x83\xEC\x28\x8B\x05\xCE\xA9\x7F\x00" - } - } - } - - /* CBaseEntityOutput::FireOutput */ - // "(%0.2f) output: (%s,%s) -> (%s,%s,%.1f)(%s)\n" - "#default" - { - "Signatures" - { - "FireOutput" - { - "library" "server" - // Signature for sub_1801CCDA0: - // 4C 8B DC 55 41 56 41 57 49 8D AB E8 FE FF FF - "windows" "\x4C\x8B\xDC\x55\x41\x56\x41\x57\x49\x8D\xAB\xE8\xFE\xFF\xFF" - // "windows" "\x55\x8B\xEC\x81\xEC\x44\x01\x00\x00\x8B\xC1" - "linux" "@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f" - } - } - } - - /* CBaseAnimating::LookupAttachment */ - // "blood_left" - both instances are right before a call - /* - - lea rsi, aBloodLeft ; "blood_left" - call sub_80E740 <-- calls this function - - ...which is: - - ; Attributes: bp-based frame - - sub_80E740 proc near - - var_30= qword ptr -30h - var_28= qword ptr -28h - - ; __unwind { - push rbp - mov rbp, rsp - push r13 - mov r13, rcx - push r12 - mov r12, rdx - push rbx - mov rbx, rdi - sub rsp, 18h - mov [rbp+var_30], r8 - mov [rbp+var_28], r9 - call LookupAttachment // <--- - mov r9, [rbp+var_28] - mov rcx, r13 - mov rdx, r12 - mov r8, [rbp+var_30] - add rsp, 18h - mov rdi, rbx - mov esi, eax - pop rbx - pop r12 - pop r13 - pop rbp - jmp sub_80BCA0 - ; } // starts at 80E740 - sub_80E740 endp - - - - __int64 __fastcall sub_80E690(__int64 a1) - { - CStudioHdr *v2; // rdi - - v2 = *(CStudioHdr **)(a1 + 1632); - if ( !v2 ) - { - if ( sub_842720(a1) ) - sub_80BE80(a1); - v2 = *(CStudioHdr **)(a1 + 1632); - if ( !v2 ) - return 0LL; - } - if ( *(_QWORD *)v2 ) - return (unsigned int)sub_F0BFD0(v2) + 1; - else - return 0LL; - } - - - this was found by working backwards from the existing windows signature from forever ago. how did that get there? i have literally no idea. - - */ - "#default" - { - "Signatures" - { - "LookupAttachment" - { - "library" "server" - "windows" "\x55\x8B\xEC\x56\x8B\xF1\x83\xBE\xF4\x04\x00\x00\x00\x75\x2A\xE8\x2A\x2A\x2A\x2A\x85\xC0\x74\x2A\x8B\xCE\xE8\x2A\x2A\x2A\x2A\x8B\x86\xF4\x04\x00\x00\x5E\x85\xC0\x74\x2A\x83\x38\x00\x74\x2A\xFF\x75\x08\x50\xE8\x2A\x2A\x2A\x2A\x83\xC4\x08\x40" - "linux" "@_ZN14CBaseAnimating16LookupAttachmentEPKc" - } - } - } - - /* SetUserInfo data */ - "#default" - { - "Offsets" - { - /** - * CBaseClient::SetUserCVar(char const*,char const*); - * Linux offset straight from VTable dump. - * Windows offset is crazy. Found the windows SetName function using string "(%d)%-.*s" (aD_S in IDA) - * Cross referenced back to the vtable and counted manually (SetUserCvar is 1 higher, offsets start from 1) - */ - "SetUserCvar" - { - "linux" "69" - "windows" "61" - } - /** - * CBaseClient::SetName(char const*); - * Linux offset straight from VTable dump. - * Has string "(%d)%-0.*s" - */ - "SetClientName" - { - "linux" "68" - "windows" "60" - } - /** - * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. - * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. - * Linux: mov byte ptr [esi+0B0h], 0 - * Win: mov byte ptr [esi+0B0h], 0 - * - * MCV: This has been moved into CBaseClient::UpdateUserSettings(), rest of the details are still relevant. - */ - "InfoChanged" - { - "linux" "59" - // "windows" "46" <-- ?? - } - } - } - - "#default" - { - "Keys" - { - // Netprop on the team entity for team score - "m_iScore" "m_scoreTotal" - } - "Offsets" - { - // "[L0/W0] L20 W20 CBaseEntity::SetOwnerEntity(CBaseEntity*)", - "SetOwnerEntity" - { - "linux" "20" - "windows" "20" - } - // "[L0/W0] L462 W462 CVietnam_Player::GiveNamedItem(char const*,int,bool,bool,Vector const*)", - "GiveNamedItem" - { - "linux" "462" - "windows" "462" - } - // "[L0/W0] L305 W304 CBaseCombatCharacter::RemovePlayerItem(CBaseCombatWeapon *)", - "RemovePlayerItem" - { - "linux" "305" - "windows" "304" - } - // "[L0/W0] L301 W300 CBaseCombatCharacter::Weapon_GetSlot(int)", - "Weapon_GetSlot" - { - "linux" "301" - "windows" "300" - } - // "[L0/W0] L230 W229 CBaseAnimating::Ignite(float,bool,float,bool,CBaseEntity *,string_t)", - "Ignite" - { - "linux" "230" - "windows" "229" - } - // This might be broken, CZombie is the only instance i could find! - // "[L0/W0] L233 W232 CZombie::Extinguish(void)", - "Extinguish" - { - "linux" "233" - "windows" "232" - } - // "[L0/W0] L115 W114 CBaseEntity::Teleport(Vector const*,QAngle const*,Vector const*,bool)", - "Teleport" - { - "linux" "115" - "windows" "114" - } + // "[L0/W0] L20 W20 CBaseEntity::SetOwnerEntity(CBaseEntity*)", + "SetOwnerEntity" + { + "linux64" "20" + "windows64" "20" + } + // "[L0/W0] L462 W462 CVietnam_Player::GiveNamedItem(char const*,int,bool,bool,Vector const*)", + "GiveNamedItem" + { + "linux64" "462" + "windows64" "462" + } + // "[L0/W0] L305 W304 CBaseCombatCharacter::RemovePlayerItem(CBaseCombatWeapon *)", + "RemovePlayerItem" + { + "linux64" "305" + "windows64" "304" + } + // "[L0/W0] L301 W300 CBaseCombatCharacter::Weapon_GetSlot(int)", + "Weapon_GetSlot" + { + "linux64" "301" + "windows64" "300" + } + // "[L0/W0] L230 W229 CBaseAnimating::Ignite(float,bool,float,bool,CBaseEntity *,string_t)", + "Ignite" + { + "linux64" "230" + "windows64" "229" + } + // This might be broken, CZombie is the only instance i could find! + // "[L0/W0] L233 W232 CZombie::Extinguish(void)", + "Extinguish" + { + "linux64" "233" + "windows64" "232" + } + // "[L0/W0] L115 W114 CBaseEntity::Teleport(Vector const*,QAngle const*,Vector const*,bool)", + "Teleport" + { + "linux64" "115" + "windows64" "114" + } // Unsure which of these to use, so let's try the bool bool one first // "[L0/W0] L511 W512 CBasePlayer::CommitSuicide(bool,bool)", // "[L0/W0] L512 W511 CBasePlayer::CommitSuicide(Vector const&,bool,bool)", - "CommitSuicide" - { - "linux" "511" - "windows" "512" - } + "CommitSuicide" + { + "linux64" "511" + "windows64" "512" + } // "[L0/W0] L141 W140 CBaseEntity::GetVelocity(Vector *,Vector *)", - "GetVelocity" - { - "linux" "140" - "windows" "140" - } + "GetVelocity" + { + "linux64" "140" + "windows64" "140" + } // "[L0/W0] L132 W131 CBaseEntity::EyeAngles(void)", - "EyeAngles" - { - "linux" "132" - "windows" "131" - } + "EyeAngles" + { + "linux64" "132" + "windows64" "131" + } // "[L0/W0] L42 W41 CBaseEntity::AcceptInput(char const*,CBaseEntity*,CBaseEntity*,variant_t,int)", - "AcceptInput" - { - "linux" "42" - "windows" "41" - } + "AcceptInput" + { + "linux64" "42" + "windows64" "41" + } // "[L0/W0] L28 W29 CBaseEntity::SetModel(char const*)", - "SetEntityModel" - { - "linux" "28" - "windows" "27" - } + "SetEntityModel" + { + "linux64" "28" + "windows64" "27" + } // "[L0/W0] L293 W292 CBaseCombatCharacter::Weapon_Equip(CBaseCombatWeapon *)", - "WeaponEquip" - { - "linux" "293" - "windows" "292" - } + "WeaponEquip" + { + "linux64" "293" + "windows64" "292" + } // "[L0/W0] L39 W41 CBaseEntity::Activate(void)", - "Activate" - { - "linux" "39" - "windows" "41" - } - // "[L0/W0] L482 W482 CBasePlayer::PlayerRunCommand(CUserCmd *,IMoveHelper *)", - "PlayerRunCmd" - { - "linux" "482" - "windows" "482" - } + "Activate" + { + "linux64" "39" + "windows64" "41" + } + // "[L0/W0] L482 W482 CBasePlayer::PlayerRunCommand(CUserCmd *,IMoveHelper *)", + "PlayerRunCmd" + { + "linux64" "482" + "windows64" "482" + } // "[L0/W0] L286 W285 CBaseCombatCharacter::GiveAmmo(int,int,bool)", - "GiveAmmo" - { - "linux" "286" - "windows" "285" - } + "GiveAmmo" + { + "linux64" "286" + "windows64" "285" + } // "[L0/W0] L224 W223 CBaseAnimating::GetAttachment(int,matrix3x4_t &)", - "GetAttachment" - { - "linux" "224" - "windows" "223" - } - } - "Signatures" - { - /** - * CNetworkStringTableContainer::WriteBaselines - * "Index error writing string table baseline %s\n" - * "CNetworkStringTableContainer::WriteBaselines" - * "infested" - */ - "WriteBaselines" - { - "library" "engine" - "windows" "\x4C\x8B\xDC\x53\x57\x41\x55" - "linux" "@_ZN28CNetworkStringTableContainer14WriteBaselinesEPKcR8bf_writei" - } - } - } + "GetAttachment" + { + "linux64" "224" + "windows64" "223" + } + } + + + "Signatures" + { + "CBaseTempEntity" + { + "library" "server" + "windows64" "\x48\x8D\x05\x51\xFD\x3C\x00" + "linux64" "@_ZN15CBaseTempEntityC2EPKc" + } + + // "NULL entity in global entity list!\n" + "FindEntityByClassname" + { + "library" "server" + "windows64" "\x55\x8B\xEC\x53\x56\x8B\xF1\x8B\x4D\x08\x57\x85\xC9\x74\x2A\x8B\x01\xFF\x50\x08\x8B\x00\x83\xF8\xFF\x75\x2A\xB8\xFF\x1F\x00\x00\x8D\x04\x40\x8B\x74\xC6\x10\xEB\x2A\x0F\xB7\xC0\x8D\x04\x40\x8B\x74\xC6\x10\xEB\x2A\x8B\xB6\x04\x00\x03\x00\x85\xF6\x74\x2A\x8B\x7D\x0C" + "linux64" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc" + } + + "EntityFactory" + { + "library" "server" + "windows64" "\x48\x83\xEC\x28\x8B\x05\xCE\xA9\x7F\x00" + "linux64" "@_ZN24CEntityFactoryDictionary14InstallFactoryEP14IEntityFactoryPKc" + } + + "FireOutput" + { + "library" "server" + "windows64" "\x4C\x8B\xDC\x55\x41\x56\x41\x57\x49\x8D\xAB\xE8\xFE\xFF\xFF" + "linux64" "@_ZN17CBaseEntityOutput10FireOutputE9variant_tP11CBaseEntityS2_f" + } + "LookupAttachment" + { + "library" "server" + "windows64" "\x55\x8B\xEC\x56\x8B\xF1\x83\xBE\xF4\x04\x00\x00\x00\x75\x2A\xE8\x2A\x2A\x2A\x2A\x85\xC0\x74\x2A\x8B\xCE\xE8\x2A\x2A\x2A\x2A\x8B\x86\xF4\x04\x00\x00\x5E\x85\xC0\x74\x2A\x83\x38\x00\x74\x2A\xFF\x75\x08\x50\xE8\x2A\x2A\x2A\x2A\x83\xC4\x08\x40" + "linux64" "@_ZN14CBaseAnimating16LookupAttachmentEPKc" + } + + "WriteBaselines" + { + "library" "engine" + "windows64" "\x4C\x8B\xDC\x53\x57\x41\x55" + "linux64" "@_ZN28CNetworkStringTableContainer14WriteBaselinesEPKcR8bf_writei" + } + } + } }