From 9b9e3d98f2d0c2d0fa203c5b7958d4c54c9ec62e Mon Sep 17 00:00:00 2001 From: KyleSanderson Date: Wed, 29 Jan 2014 02:31:11 -0700 Subject: [PATCH] Use Client AuthString for CSteamID if available. --- Extension/extension.cpp | 22 +++++++++++++++++++++- Extension/extension.h | 1 + Extension/gsnatives.cpp | 7 ++++++- Extension/ssnatives.cpp | 11 ++++++++--- 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/Extension/extension.cpp b/Extension/extension.cpp index aca7e9b..f22a574 100644 --- a/Extension/extension.cpp +++ b/Extension/extension.cpp @@ -30,6 +30,7 @@ */ #include "extension.h" +#include /** * @file extension.cpp @@ -65,11 +66,30 @@ void SteamWorks::SDK_OnUnload() delete this->pSWGameData; } +CSteamID SteamWorks::CreateCommonCSteamID(IGamePlayer *pPlayer, const cell_t *params, unsigned char universeplace = 2, unsigned char typeplace = 3) +{ + EUniverse universe = k_EUniversePublic; + EAccountType type = k_EAccountTypeIndividual; + + const char *pAuth = pPlayer->GetAuthString(false); /* We're not using this for Auth. */ + if (pAuth == NULL || pAuth[0] == '\0' || strlen(pAuth) < 11 || pAuth[6] == 'I') + { + return this->CreateCommonCSteamID(pPlayer->GetSteamAccountID(false), params, universeplace, typeplace); + } + + universe = static_cast(atoi(&pAuth[6])); + if (universe == k_EUniverseInvalid) + { + universe = k_EUniversePublic; /* Legacy Engine shim. */ + } + + return CSteamID(pPlayer->GetSteamAccountID(false), universe, type); +} + CSteamID SteamWorks::CreateCommonCSteamID(uint32_t authid, const cell_t *params, unsigned char universeplace = 2, unsigned char typeplace = 3) { EUniverse universe = k_EUniversePublic; EAccountType type = k_EAccountTypeIndividual; - if (params[0] >= universeplace) { universe = static_cast(params[universeplace]); diff --git a/Extension/extension.h b/Extension/extension.h index 8c8d4ed..a2738b6 100644 --- a/Extension/extension.h +++ b/Extension/extension.h @@ -128,6 +128,7 @@ public: //public: /* IClientListener */ //virtual void OnClientDisconnecting(int client); public: + CSteamID CreateCommonCSteamID(IGamePlayer *pPlayer, const cell_t *params, unsigned char universeplace, unsigned char typeplace); CSteamID CreateCommonCSteamID(uint32_t authid, const cell_t *params, unsigned char universeplace, unsigned char typeplace); public: diff --git a/Extension/gsnatives.cpp b/Extension/gsnatives.cpp index 9535d66..95486b2 100644 --- a/Extension/gsnatives.cpp +++ b/Extension/gsnatives.cpp @@ -29,6 +29,11 @@ static ISteamGameServer *GetGSPointer(void) return g_SteamWorks.pSWGameServer->GetGameServer(); } +static CSteamID CreateCommonCSteamID(IGamePlayer *pPlayer, const cell_t *params, unsigned char universeplace = 2, unsigned char typeplace = 3) +{ + return g_SteamWorks.CreateCommonCSteamID(pPlayer, params, universeplace, typeplace); +} + static CSteamID CreateCommonCSteamID(uint32_t authid, const cell_t *params, unsigned char universeplace = 2, unsigned char typeplace = 3) { return g_SteamWorks.CreateCommonCSteamID(authid, params, universeplace, typeplace); @@ -171,7 +176,7 @@ static cell_t sm_UserHasLicenseForApp(IPluginContext *pContext, const cell_t *pa return pContext->ThrowNativeError("Client index %d is invalid", params[1]); } - CSteamID checkid = CreateCommonCSteamID(pPlayer->GetSteamAccountID(false), params); + CSteamID checkid = CreateCommonCSteamID(pPlayer, params); return pServer->UserHasLicenseForApp(checkid, params[2]); } diff --git a/Extension/ssnatives.cpp b/Extension/ssnatives.cpp index 598ae58..0764b11 100644 --- a/Extension/ssnatives.cpp +++ b/Extension/ssnatives.cpp @@ -29,6 +29,11 @@ static ISteamGameServerStats *GetServerStatsPointer(void) return g_SteamWorks.pSWGameServer->GetServerStats(); } +static CSteamID CreateCommonCSteamID(IGamePlayer *pPlayer, const cell_t *params, unsigned char universeplace = 2, unsigned char typeplace = 3) +{ + return g_SteamWorks.CreateCommonCSteamID(pPlayer, params, universeplace, typeplace); +} + static CSteamID CreateCommonCSteamID(uint32_t authid, const cell_t *params, unsigned char universeplace = 2, unsigned char typeplace = 3) { return g_SteamWorks.CreateCommonCSteamID(authid, params, universeplace, typeplace); @@ -63,7 +68,7 @@ static cell_t sm_RequestUserStats(IPluginContext *pContext, const cell_t *params return pContext->ThrowNativeError("Client index %d is invalid", params[1]); } - CSteamID checkid = CreateCommonCSteamID(pPlayer->GetSteamAccountID(false), params); + CSteamID checkid = CreateCommonCSteamID(pPlayer, params); return pStats->RequestUserStats(checkid) != k_uAPICallInvalid ? 1 : 0; } @@ -88,7 +93,7 @@ static cell_t sm_GetStatCell(IPluginContext *pContext, const cell_t *params) cell_t *pValue; pContext->LocalToPhysAddr(params[3], &pValue); - CSteamID checkid = CreateCommonCSteamID(pPlayer->GetSteamAccountID(false), params, 4, 5); + CSteamID checkid = CreateCommonCSteamID(pPlayer, params, 4, 5); return pStats->GetUserStat(checkid, pName, pValue) ? 1 : 0; } @@ -131,7 +136,7 @@ static cell_t sm_GetStatFloat(IPluginContext *pContext, const cell_t *params) cell_t *pValue; pContext->LocalToPhysAddr(params[3], &pValue); - CSteamID checkid = CreateCommonCSteamID(pPlayer->GetSteamAccountID(false), params, 4, 5); + CSteamID checkid = CreateCommonCSteamID(pPlayer, params, 4, 5); float fValue; bool bResult = pStats->GetUserStat(checkid, pName, &fValue);