Update CStrike extension and gamedata on windows for latest CS:GO update (irc, r= psychonic)
Update CStrike extension and gamedata on windows for latest CS:GO update (irc, r= psychonic)
1.1 --- a/extensions/cstrike/forwards.cpp Sat Feb 08 20:00:52 2014 -0500
1.2 +++ b/extensions/cstrike/forwards.cpp Sat Feb 08 20:04:12 2014 -0500
1.3 @@ -21,6 +21,13 @@
1.4
1.5 int weaponNameOffset = -1;
1.6
1.7 +//Windows CS:GO
1.8 +// int __userpurge HandleCommand_Buy_Internal<eax>(int a1<ecx>, float a2<xmm0>, int a3, int a4, char a5)
1.9 +// a1 - this
1.10 +// a2 - CCSGameRules::GetWarmupPeriodEndTime(g_pGameRules)
1.11 +// a3 - weapon
1.12 +// a4 - unknown
1.13 +// a5 - bRebuy
1.14 #if SOURCE_ENGINE == SE_CSGO
1.15 DETOUR_DECL_MEMBER3(DetourHandleBuy, int, const char *, weapon, int, iUnknown, bool, bRebuy)
1.16 #else
1.17 @@ -69,7 +76,7 @@
1.18 {
1.19 int price = DETOUR_MEMBER_CALL(DetourWeaponPrice)(szAttribute, pEconItem);
1.20
1.21 - if(lastclient == -1 || strcmp(szAttribute, "in_game_price") != 0)
1.22 + if(lastclient == -1 || strcmp(szAttribute, "in game price") != 0)
1.23 return price;
1.24
1.25 const char *weapon_name = reinterpret_cast<char *>(this+weaponNameOffset);
1.26 @@ -78,6 +85,7 @@
1.27 }
1.28 #endif
1.29
1.30 +#if SOURCE_ENGINE != SE_CSGO || !defined(WIN32)
1.31 DETOUR_DECL_MEMBER2(DetourTerminateRound, void, float, delay, int, reason)
1.32 {
1.33 if (g_pIgnoreTerminateDetour)
1.34 @@ -86,6 +94,30 @@
1.35 DETOUR_MEMBER_CALL(DetourTerminateRound)(delay, reason);
1.36 return;
1.37 }
1.38 +#else
1.39 +//Windows CSGO
1.40 +//char __userpurge TerminateRound<al>(unsigned int a1<ecx>, signed int a2<edi>, unsigned int a3<xmm1>, int a4)
1.41 +// a1 - this
1.42 +// a2 - unknown
1.43 +// a3 - delay
1.44 +// a4 - reason
1.45 +DETOUR_DECL_MEMBER1(DetourTerminateRound, void, int, reason)
1.46 +{
1.47 + float delay;
1.48 +
1.49 + if (g_pIgnoreTerminateDetour)
1.50 + {
1.51 + g_pIgnoreTerminateDetour = false;
1.52 + return DETOUR_MEMBER_CALL(DetourTerminateRound)(reason);
1.53 + }
1.54 +
1.55 + //Save the delay
1.56 + __asm
1.57 + {
1.58 + movss delay, xmm1
1.59 + }
1.60 +#endif
1.61 +
1.62 float orgdelay = delay;
1.63 int orgreason = reason;
1.64
1.65 @@ -98,10 +130,26 @@
1.66 if (result >= Pl_Handled)
1.67 return;
1.68
1.69 +#if SOURCE_ENGINE != SE_CSGO || !defined(WIN32)
1.70 if (result == Pl_Changed)
1.71 return DETOUR_MEMBER_CALL(DetourTerminateRound)(delay, reason);
1.72
1.73 return DETOUR_MEMBER_CALL(DetourTerminateRound)(orgdelay, orgreason);
1.74 +#else
1.75 + if (result == Pl_Changed)
1.76 + {
1.77 + __asm
1.78 + {
1.79 + movss xmm1, delay
1.80 + }
1.81 + return DETOUR_MEMBER_CALL(DetourTerminateRound)(reason);
1.82 + }
1.83 + __asm
1.84 + {
1.85 + movss xmm1, orgdelay
1.86 + }
1.87 + return DETOUR_MEMBER_CALL(DetourTerminateRound)(orgreason);
1.88 +#endif
1.89 }
1.90
1.91 DETOUR_DECL_MEMBER3(DetourCSWeaponDrop, void, CBaseEntity *, weapon, bool, something, bool, toss)
2.1 --- a/extensions/cstrike/natives.cpp Sat Feb 08 20:00:52 2014 -0500
2.2 +++ b/extensions/cstrike/natives.cpp Sat Feb 08 20:04:12 2014 -0500
2.3 @@ -46,6 +46,12 @@
2.4 code; \
2.5 g_RegNatives.Register(pWrapper);
2.6
2.7 +#define GET_MEMSIG(name) \
2.8 + if (!g_pGameConf->GetMemSig(name, &addr) || !addr) \
2.9 + { \
2.10 + return pContext->ThrowNativeError("Failed to locate function"); \
2.11 + }
2.12 +
2.13 inline CBaseEntity *GetCBaseEntity(int num, bool isplayer)
2.14 {
2.15 edict_t *pEdict = gamehelpers->EdictOfIndex(num);
2.16 @@ -150,6 +156,7 @@
2.17
2.18 static cell_t CS_SwitchTeam(IPluginContext *pContext, const cell_t *params)
2.19 {
2.20 +#if SOURCE_ENGINE != SE_CSGO || !defined(WIN32)
2.21 static ICallWrapper *pWrapper = NULL;
2.22 if (!pWrapper)
2.23 {
2.24 @@ -174,6 +181,41 @@
2.25 vptr += sizeof(CBaseEntity *);
2.26 *(int *)vptr = params[2];
2.27 pWrapper->Execute(vstk, NULL);
2.28 +#else
2.29 + if (g_pSDKTools == NULL)
2.30 + {
2.31 + return pContext->ThrowNativeError("SDKTools interface not found. TerminateRound native disabled.");
2.32 + }
2.33 +
2.34 + static void *addr = NULL;
2.35 + if(!addr)
2.36 + {
2.37 + GET_MEMSIG("SwitchTeam");
2.38 + }
2.39 +
2.40 + void *gamerules = g_pSDKTools->GetGameRules();
2.41 + if (gamerules == NULL)
2.42 + {
2.43 + return pContext->ThrowNativeError("GameRules not available. SwitchTeam native disabled.");
2.44 + }
2.45 +
2.46 + CBaseEntity *pEntity;
2.47 + if (!(pEntity=GetCBaseEntity(params[1], true)))
2.48 + {
2.49 + return pContext->ThrowNativeError("Client index %d is not valid", params[1]);
2.50 + }
2.51 +
2.52 + int team = params[2];
2.53 +
2.54 + __asm
2.55 + {
2.56 + push team
2.57 + mov ecx, pEntity
2.58 + mov ebx, gamerules
2.59 +
2.60 + call addr
2.61 + }
2.62 +#endif
2.63
2.64 return 1;
2.65 }
2.66 @@ -248,7 +290,7 @@
2.67 {
2.68 if (g_pSDKTools == NULL)
2.69 {
2.70 - smutils->LogError(myself, "SDKTools interface not found. TerminateRound native disabled.");
2.71 + return pContext->ThrowNativeError("SDKTools interface not found. TerminateRound native disabled.");
2.72 }
2.73 else if (g_pSDKTools->GetInterfaceVersion() < 2)
2.74 {
2.75 @@ -256,6 +298,13 @@
2.76 return pContext->ThrowNativeError("SDKTools interface is outdated. TerminateRound native disabled.");
2.77 }
2.78
2.79 + void *gamerules = g_pSDKTools->GetGameRules();
2.80 + if (gamerules == NULL)
2.81 + {
2.82 + return pContext->ThrowNativeError("GameRules not available. TerminateRound native disabled.");
2.83 + }
2.84 +
2.85 +#if SOURCE_ENGINE != SE_CSGO || !defined(WIN32)
2.86 static ICallWrapper *pWrapper = NULL;
2.87
2.88 if (!pWrapper)
2.89 @@ -271,12 +320,6 @@
2.90 pWrapper = g_pBinTools->CreateCall(addr, CallConv_ThisCall, NULL, pass, 2))
2.91 }
2.92
2.93 - void *gamerules = g_pSDKTools->GetGameRules();
2.94 - if (gamerules == NULL)
2.95 - {
2.96 - return pContext->ThrowNativeError("GameRules not available. TerminateRound native disabled.");
2.97 - }
2.98 -
2.99 if (params[3] == 1 && g_pTerminateRoundDetoured)
2.100 g_pIgnoreTerminateDetour = true;
2.101
2.102 @@ -290,7 +333,30 @@
2.103 *(int*)vptr = params[2];
2.104
2.105 pWrapper->Execute(vstk, NULL);
2.106 +#else
2.107 + static void *addr = NULL;
2.108
2.109 + if(!addr)
2.110 + {
2.111 + GET_MEMSIG("TerminateRound");
2.112 + }
2.113 +
2.114 + if (params[3] == 1 && g_pTerminateRoundDetoured)
2.115 + g_pIgnoreTerminateDetour = true;
2.116 +
2.117 + float delay = sp_ctof(params[1]);
2.118 + int reason = params[2];
2.119 + signed int unknown = 1;//We might want to find what this is?
2.120 + __asm
2.121 + {
2.122 + push reason
2.123 + movss xmm1, delay
2.124 + mov edi, unknown
2.125 + mov ecx, gamerules
2.126 + call addr
2.127 + }
2.128 +
2.129 +#endif
2.130 return 1;
2.131 }
2.132
2.133 @@ -385,7 +451,7 @@
2.134
2.135 *(void **)vptr = info;
2.136 vptr += sizeof(void *);
2.137 - *(const char **)vptr = "in_game_price";
2.138 + *(const char **)vptr = "in game price";
2.139 vptr += sizeof(const char **);
2.140 *(CEconItemView **)vptr = NULL;
2.141
3.1 --- a/extensions/cstrike/util_cstrike.cpp Sat Feb 08 20:00:52 2014 -0500
3.2 +++ b/extensions/cstrike/util_cstrike.cpp Sat Feb 08 20:04:12 2014 -0500
3.3 @@ -44,8 +44,17 @@
3.4 code; \
3.5 g_RegNatives.Register(pWrapper);
3.6
3.7 +#define GET_MEMSIG(name, defaultret) \
3.8 + if (!g_pGameConf->GetMemSig(name, &addr) || !addr) \
3.9 + { \
3.10 + g_pSM->LogError(myself, "Failed to locate function."); \
3.11 + return defaultret;\
3.12 + }
3.13 +
3.14 void *GetWeaponInfo(int weaponID)
3.15 {
3.16 + void *info;
3.17 +#if SOURCE_ENGINE != SE_CSGO || !defined(WIN32)
3.18 static ICallWrapper *pWrapper = NULL;
3.19 if (!pWrapper)
3.20 {
3.21 @@ -61,8 +70,6 @@
3.22 pWrapper = g_pBinTools->CreateCall(addr, CallConv_Cdecl, &retpass, pass, 1))
3.23 }
3.24
3.25 - void *info;
3.26 -
3.27 unsigned char vstk[sizeof(int)];
3.28 unsigned char *vptr = vstk;
3.29
3.30 @@ -70,11 +77,30 @@
3.31
3.32 pWrapper->Execute(vstk, &info);
3.33
3.34 +
3.35 +#else
3.36 + static void *addr = NULL;
3.37 +
3.38 + if(!addr)
3.39 + {
3.40 + GET_MEMSIG("GetWeaponInfo", 0);
3.41 + }
3.42 +
3.43 + __asm
3.44 + {
3.45 + mov ecx, weaponID
3.46 + call addr
3.47 + mov info, eax
3.48 + }
3.49 +#endif
3.50 return info;
3.51 }
3.52
3.53 const char *GetTranslatedWeaponAlias(const char *weapon)
3.54 {
3.55 + const char *alias = NULL;
3.56 +
3.57 +#if SOURCE_ENGINE != SE_CSGO || !defined(WIN32)
3.58 static ICallWrapper *pWrapper = NULL;
3.59
3.60 if (!pWrapper)
3.61 @@ -90,20 +116,35 @@
3.62 retpass.size = sizeof(const char *); \
3.63 pWrapper = g_pBinTools->CreateCall(addr, CallConv_Cdecl, &retpass, pass, 1))
3.64 }
3.65 - const char *ret = NULL;
3.66
3.67 unsigned char vstk[sizeof(const char *)];
3.68 unsigned char *vptr = vstk;
3.69
3.70 *(const char **)vptr = weapon;
3.71
3.72 - pWrapper->Execute(vstk, &ret);
3.73 + pWrapper->Execute(vstk, &alias);
3.74 +#else
3.75 + static void *addr = NULL;
3.76 +
3.77 + if(!addr)
3.78 + {
3.79 + GET_MEMSIG("GetTranslatedWeaponAlias", weapon);
3.80 + }
3.81
3.82 - return ret;
3.83 + __asm
3.84 + {
3.85 + mov ecx, weapon
3.86 + call addr
3.87 + mov alias, eax
3.88 + }
3.89 +#endif
3.90 + return alias;
3.91 }
3.92
3.93 int AliasToWeaponID(const char *weapon)
3.94 {
3.95 + int weaponID = 0;
3.96 +#if SOURCE_ENGINE != SE_CSGO || !defined(WIN32)
3.97 static ICallWrapper *pWrapper = NULL;
3.98
3.99 if (!pWrapper)
3.100 @@ -119,7 +160,6 @@
3.101 retpass.size = sizeof(int); \
3.102 pWrapper = g_pBinTools->CreateCall(addr, CallConv_Cdecl, &retpass, pass, 1))
3.103 }
3.104 - int weaponID = 0;
3.105
3.106 unsigned char vstk[sizeof(const char *)];
3.107 unsigned char *vptr = vstk;
3.108 @@ -127,12 +167,28 @@
3.109 *(const char **)vptr = weapon;
3.110
3.111 pWrapper->Execute(vstk, &weaponID);
3.112 +#else
3.113 + static void *addr = NULL;
3.114
3.115 + if(!addr)
3.116 + {
3.117 + GET_MEMSIG("AliasToWeaponID", 0);
3.118 + }
3.119 +
3.120 + __asm
3.121 + {
3.122 + mov ecx, weapon
3.123 + call addr
3.124 + mov weaponID, eax
3.125 + }
3.126 +#endif
3.127 return weaponID;
3.128 }
3.129
3.130 const char *WeaponIDToAlias(int weaponID)
3.131 {
3.132 + const char *alias = NULL;
3.133 +#if SOURCE_ENGINE != SE_CSGO || !defined(WIN32)
3.134 static ICallWrapper *pWrapper = NULL;
3.135
3.136 if (!pWrapper)
3.137 @@ -148,16 +204,30 @@
3.138 retpass.size = sizeof(const char *); \
3.139 pWrapper = g_pBinTools->CreateCall(addr, CallConv_Cdecl, &retpass, pass, 1))
3.140 }
3.141 - const char *ret = NULL;
3.142
3.143 unsigned char vstk[sizeof(int)];
3.144 unsigned char *vptr = vstk;
3.145
3.146 *(int *)vptr = GetRealWeaponID(weaponID);
3.147
3.148 - pWrapper->Execute(vstk, &ret);
3.149 -
3.150 - return ret;
3.151 + pWrapper->Execute(vstk, &alias);
3.152 +#else
3.153 + static void *addr = NULL;
3.154 +
3.155 + if(!addr)
3.156 + {
3.157 + GET_MEMSIG("WeaponIDToAlias", 0);
3.158 + }
3.159 +
3.160 + int realWeaponID = GetRealWeaponID(weaponID);
3.161 + __asm
3.162 + {
3.163 + mov ecx, realWeaponID
3.164 + call addr
3.165 + mov alias, eax
3.166 + }
3.167 +#endif
3.168 + return alias;
3.169 }
3.170 int GetRealWeaponID(int weaponId)
3.171 {
4.1 --- a/gamedata/sm-cstrike.games/game.csgo.txt Sat Feb 08 20:00:52 2014 -0500
4.2 +++ b/gamedata/sm-cstrike.games/game.csgo.txt Sat Feb 08 20:04:12 2014 -0500
4.3 @@ -32,7 +32,7 @@
4.4 //Offset into CheckRestartRound
4.5 "CTTeamScoreOffset"
4.6 {
4.7 - "windows" "97"
4.8 + "windows" "98"
4.9 "linux" "124"
4.10 "mac" "150"
4.11 }
4.12 @@ -45,7 +45,7 @@
4.13 }
4.14 "ClanTagOffset"
4.15 {
4.16 - "windows" "15"
4.17 + "windows" "12"
4.18 "linux" "41"
4.19 "mac" "22"
4.20 }
4.21 @@ -55,49 +55,49 @@
4.22 "RoundRespawn"
4.23 {
4.24 "library" "server"
4.25 - "windows" "\x55\x8B\xEC\x83\xEC\x2A\x56\x8B\xF1\x8B\x0D\x2A\x2A\x2A\x2A\x57\xE8\x2A\x2A\x2A\x2A\x84\xC0\x0F"
4.26 + "windows" "\x55\x8B\xEC\x83\xEC\x08\x56\x8B\xF1\x8B\x0D\x2A\x2A\x2A\x2A\x57\x8B\x01\xFF\x50\x2A\x83"
4.27 "linux" "@_ZN9CCSPlayer12RoundRespawnEv"
4.28 "mac" "@_ZN9CCSPlayer12RoundRespawnEv"
4.29 }
4.30 "SwitchTeam"
4.31 {
4.32 "library" "server"
4.33 - "windows" "\x55\x8B\xEC\x83\xEC\x2A\x56\x57\x8B\x7D\x2A\x57\x8B\xF1\xE8\x2A\x2A\x2A\x2A\x83\xC4"
4.34 + "windows" "\x55\x8B\xEC\x83\xEC\x0C\x56\x8B\x75\x2A\x57\x8B\xF9\x85\xF6\x0F\x88\x2A\x2A\x2A\x2A\x3B\x35\x2A\x2A\x2A\x2A\x0F\x8D\x2A\x2A\x2A\x2A\xA1\x2A\x2A\x2A\x2A\x83"
4.35 "linux" "@_ZN9CCSPlayer10SwitchTeamEi"
4.36 "mac" "@_ZN9CCSPlayer10SwitchTeamEi"
4.37 }
4.38 "HandleCommand_Buy_Internal"
4.39 {
4.40 "library" "server"
4.41 - "windows" "\x55\x8B\xEC\x81\x2A\x2A\x2A\x2A\x2A\x53\x56\x57\x6A\x00\x8B\xF1\xE8"
4.42 + "windows" "\x55\x8B\xEC\x83\xE4\x2A\x81\xEC\x2A\x2A\x2A\x2A\x83\x3D\x2A\x2A\x2A\x2A\x00\x53\x56\x57\x8B\xF9"
4.43 "linux" "@_ZN9CCSPlayer26HandleCommand_Buy_InternalEPKcib"
4.44 "mac" "@_ZN9CCSPlayer26HandleCommand_Buy_InternalEPKcib"
4.45 }
4.46 "CSWeaponDrop"//Wildcard first 6 bytes for CS:S DM
4.47 {
4.48 "library" "server"
4.49 - "windows" "\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x53\x56\x57\x8B\x7D\x08\x6A\x00\x68"
4.50 + "windows" "\x2A\x2A\x2A\x2A\x2A\x2A\x81\xEC\x2A\x2A\x2A\x2A\x56\x8B\x75\x2A\x57\x6A\x00\x68"
4.51 "linux" "@_ZN9CCSPlayer12CSWeaponDropEP17CBaseCombatWeaponbb"
4.52 "mac" "@_ZN9CCSPlayer12CSWeaponDropEP17CBaseCombatWeaponbb"
4.53 }
4.54 "TerminateRound"
4.55 {
4.56 "library" "server"
4.57 - "windows" "\x55\x8B\xEC\x83\xEC\x2A\x53\x8B\xD9\x8B\x2A\x2A\x2A\x2A\x2A\x56\x57\x33\xFF\x89"
4.58 + "windows" "\x55\x8B\xEC\x83\x2A\x2A\x83\x2A\x2A\x53\x56\x8B\xF1\xF3\x0F\x2A\x2A\x2A\x2A\x57\x33\xFF\x89\x2A\x2A\x2A\xC7\x2A\x2A\x2A\x00\x00\x00\x00"
4.59 "linux" "@_ZN12CCSGameRules14TerminateRoundEfi"
4.60 "mac" "@_ZN12CCSGameRules14TerminateRoundEfi"
4.61 }
4.62 "GetTranslatedWeaponAlias"
4.63 {
4.64 "library" "server"
4.65 - "windows" "\x55\x8B\xEC\x56\x57\x8B\x2A\x2A\x33\xF6\x8D\x9B\x2A\x2A\x2A\x2A\x8B\x04\xF5\x2A\x2A\x2A\x2A\x57\x50\xE8\x2A\x2A\x2A\x2A\x83\xC4\x2A\x85\xC0\x74\x2A\x46\x83\xFE\x2A\x72\x2A\x8B\xC7\x5F\x5E\x5D\xC3"
4.66 + "windows" "\x55\x8B\xEC\x83\xEC\x08\x53\x33\xC0\x89\x4D\xF8\x56\x57\x89\x45\xFC\x33\xDB\x8B\xB3\x2A\x2A\x2A\x2A\x3B\xF1\x74\x2A\x8B\xF9\x90\x0F\xB6\x06\x0F\xB6\x17\x3B\xC2\x75\x2A\x85\xC0\x75\x2A\x8B\x45\xFC\x5F\x5E\x5B\x8B\x04\xC5\x2A\x2A\x2A\x2A\x8B\xE5\x5D\xC3\x85\xD2\x74\x2A\x8D\x48\xBF\x83\xF9\x19\x77\x2A\x83\xC0\x20\x8D\x4A\xBF\x83\xF9\x19\x77\x2A\x83\xC2\x20\x3B\xC2\x75\x2A\x0F\xB6\x46\x01\x83\xC6\x02\x0F\xB6\x57\x01\x83\xC7\x02\x3B\xC2\x75\x2A\x85\xC0\x75\x2A\x8B\x45\xFC\x5F\x5E\x5B\x8B\x04\xC5\x2A\x2A\x2A\x2A\x8B\xE5\x5D\xC3\x85\xD2\x74\x2A\x8D\x48\xBF\x83\xF9\x19\x77\x2A\x83\xC0\x20\x8D\x4A\xBF\x83\xF9\x19\x77\x2A\x83\xC2\x20\x3B\xC2\x0F\x84\x2A\x2A\x2A\x2A\x2B\xC2\x85\xC0\x74\x2A\xFF\x45\xFC\x83\xC3\x08\x8B\x4D\xF8\x81\xFB\xC0\x00\x00\x00\x0F\x82\x2A\x2A\x2A\x2A\x5F\x5E\x8B\xC1\x5B\x8B\xE5\x5D\xC3"
4.67 "linux" "@_Z24GetTranslatedWeaponAliasPKc"
4.68 "mac" "@_Z24GetTranslatedWeaponAliasPKc"
4.69 }
4.70 "GetWeaponInfo"
4.71 {
4.72 "library" "server"
4.73 - "windows" "\x55\x8B\xEC\x8B\x4D\x2A\x33\xC0\x85\xC9\x74"
4.74 + "windows" "\x55\x8B\xEC\x83\xEC\x08\x33\xC0\xEB\x2A\x8D\x9B\x00\x00\x00\x00\x39\x0C\xC5\x2A\x2A\x2A\x2A\x74\x2A\x40\x83\xF8\x38\x72\x2A\x33\xC0"
4.75 "linux" "@_Z13GetWeaponInfo10CSWeaponID"
4.76 "mac" "@_Z13GetWeaponInfo10CSWeaponID"
4.77 }
4.78 @@ -105,28 +105,28 @@
4.79 "CheckWinLimit"
4.80 {
4.81 "library" "server"
4.82 - "windows" "\x55\x8B\xEC\x83\xEC\x2A\x56\x57\x8B\xF9\x8B\x0D\x2A\x2A\x2A\x2A\x81\xF9\x2A\x2A\x2A\x2A\x75\x2A\x8B"
4.83 + "windows" "\x55\x8B\xEC\x83\xE4\xF8\x83\xEC\x64\x53\x56\x57\x8B\xF9\x8B\x0D\x2A\x2A\x2A\x2A\x81\xF9"
4.84 "linux" "@_ZN12CCSGameRules17CheckRestartRoundEv"
4.85 "mac" "@_ZN12CCSGameRules17CheckRestartRoundEv"
4.86 }
4.87 "AliasToWeaponID"
4.88 {
4.89 "library" "server"
4.90 - "windows" "\x55\x8B\xEC\x57\x8B\x2A\x2A\x85\xFF\x75\x2A\x33\xC0\x5F\x5D\xC3\x56\x33\xF6\x8B\x04\xF5"
4.91 + "windows" "\x55\x8B\xEC\x83\xEC\x08\x57\x8B\xF9\x33\xC0"
4.92 "linux" "@_Z15AliasToWeaponIDPKc"
4.93 "mac" "@_Z15AliasToWeaponIDPKc"
4.94 }
4.95 "WeaponIDToAlias"
4.96 {
4.97 "library" "server"
4.98 - "windows" "\x55\x8B\xEC\x8B\x4D\x08\x33\xC0\xEB\x2A\x8D\x9B\x00\x00\x00\x00\x39\x0C\xC5\x2A\x2A\x2A\x2A\x74\x2A\x40\x83\xF8\x38\x72\x2A\x33\xC0\x5D\xC3\x8B\x04\xC5\x2A\x2A\x2A\x2A\x6A\x5F"
4.99 + "windows" "\x33\xC0\x39\x0C\xC5\x2A\x2A\x2A\x2A\x74\x2A\x40\x83\xF8\x38\x72\x2A\x33\xC0\xC3\x6A\x5F"
4.100 "linux" "@_Z15WeaponIDToAliasi"
4.101 "mac" "@_Z15WeaponIDToAliasi"
4.102 }
4.103 "SetClanTag"
4.104 {
4.105 "library" "server"
4.106 - "windows" "\x55\x8B\xEC\x8B\x2A\x2A\x85\xC0\x74\x2A\x6A\x10\x50\x81\xC1\x2A\x2A\x2A\x2A\x51"
4.107 + "windows" "\x55\x8B\xEC\x8B\x55\x08\x85\xD2\x74\x2A\x8D\x81\xDC\x1F\x00\x00"
4.108 "linux" "@_ZN9CCSPlayer10SetClanTagEPKc"
4.109 "mac" "@_ZN9CCSPlayer10SetClanTagEPKc"
4.110 }
4.111 @@ -134,14 +134,14 @@
4.112 "GetAttributeInt"
4.113 {
4.114 "library" "server"
4.115 - "windows" "\x2A\x2A\x2A\x2A\x2A\x2A\x08\x56\x57\x8B\xF1\x50\x8D\x4D\xFC\x51\xE8\x2A\x2A\x2A\x2A\x8B\x4D\x0C\x0F\x57\xC0\x8B\x7D\xFC\x83\xC4\x08\xF3\x0F\x11\x45\x08\x85\xC9\x74\x2A\x80\x2A\x2A\x00\x74\x2A\x57\x8D\x55\x08\x52\xE8\x2A\x2A\x2A\x2A\x84\xC0\x75\x2A\x57\x8B\xCE\xE8\x2A\x2A\x2A\x2A\x83\xF8\xFF\x74\x2A\x83\xF8\xFF\x7E\x2A\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x04\x81\x83\x2A\x2A\x05"
4.116 + "windows" "\x2A\x2A\x2A\x2A\x2A\x2A\x83\xEC\x1C\x53\x8B\x5D\x0C\xC7\x44\x24\x04\x00\x00\x00\x00\x56\x8B\xF1\x89\x74\x24\x0C\x57\x8B\x7D\x08\x85\xDB\x74\x2A\x80\x7B\x44\x00\x74\x2A\x57\xE8\x2A\x2A\x2A\x2A\x8B\xC8\xE8\x2A\x2A\x2A\x2A\x89\x44\x24\x14\xE8\x2A\x2A\x2A\x2A\x8B\x70\x08\xE8\x2A\x2A\x2A\x2A\x3B\x70\x08\x74\x2A\x57\xE8\x2A\x2A\x2A\x2A\x8B\xC8\xE8\x2A\x2A\x2A\x2A\xEB\x2A\x8B\x44\x24\x14\x85\xC0\x74\x2A\x89\x44\x24\x1C\x8D\x4C\x24\x18\x8D\x44\x24\x0C\xC7\x44\x24\x18\x2A\x2A\x2A\x2A\x89\x44\x24\x20\x8B\x03\x51\x8B\xCB\xC6\x44\x24\x28\x00\xFF\x50\x64\x80\x7C\x24\x24\x00\x74\x2A\x8B\x44\x24\x0C"
4.117 "linux" "@_ZNK16FileWeaponInfo_t15GetAttributeIntEPKcPK13CEconItemView"
4.118 "mac" "@_ZNK16FileWeaponInfo_t15GetAttributeIntEPKcPK13CEconItemView"
4.119 }
4.120 "SetModelFromClass"
4.121 {
4.122 "library" "server"
4.123 - "windows" "\x55\x8B\xEC\x51\x53\x56\x8B\xF1\x57\xB9\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x8B\xD8"
4.124 + "windows" "\x55\x8B\xEC\x83\xEC\x08\x56\x57\x8B\xF9\xC7\x45\xFC\x2A\x2A\x2A\x2A\x8B\x87"
4.125 "linux" "@_ZN9CCSPlayer17SetModelFromClassEv"
4.126 "mac" "@_ZN9CCSPlayer17SetModelFromClassEv"
4.127 }