Update CStrike extension and gamedata on windows for latest CS:GO update (irc, r= psychonic)
authorRuben Gonzalez <drifter01620@gmail.com>
Sat Feb 08 20:04:12 2014 -0500 (2014-02-08)
changeset 42375e3965aa4498
parent 4236 843313c70517
child 4238 bb02aa3e5b95
Update CStrike extension and gamedata on windows for latest CS:GO update (irc, r= psychonic)
extensions/cstrike/forwards.cpp
extensions/cstrike/natives.cpp
extensions/cstrike/util_cstrike.cpp
gamedata/sm-cstrike.games/game.csgo.txt
     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  			}