diff --git a/Extension/extension.cpp b/Extension/extension.cpp index a9d1601..41b5e8c 100644 --- a/Extension/extension.cpp +++ b/Extension/extension.cpp @@ -60,3 +60,21 @@ void SteamWorks::SDK_OnUnload() delete this->pSWGameServer; delete this->pSWGameData; } + +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]); + } + + if (params[0] >= typeplace) + { + type = static_cast(params[typeplace]); + } + + return CSteamID(authid, universe, type); +} diff --git a/Extension/extension.h b/Extension/extension.h index 269de09..3f88fce 100644 --- a/Extension/extension.h +++ b/Extension/extension.h @@ -125,6 +125,9 @@ public: #endif //public: /* IClientListener */ //virtual void OnClientDisconnecting(int client); +public: + CSteamID CreateCommonCSteamID(uint32_t authid, const cell_t *params, unsigned char universeplace, unsigned char typeplace); + public: SteamWorksForwards *pSWForward; SteamWorksGameData *pSWGameData; diff --git a/Extension/gsnatives.cpp b/Extension/gsnatives.cpp index bb1956c..9535d66 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(uint32_t authid, const cell_t *params, unsigned char universeplace = 2, unsigned char typeplace = 3) +{ + return g_SteamWorks.CreateCommonCSteamID(authid, params, universeplace, typeplace); +} + static cell_t sm_IsVACEnabled(IPluginContext *pContext, const cell_t *params) { ISteamGameServer *pServer = GetGSPointer(); @@ -166,20 +171,7 @@ static cell_t sm_UserHasLicenseForApp(IPluginContext *pContext, const cell_t *pa return pContext->ThrowNativeError("Client index %d is invalid", params[1]); } - EUniverse universe = k_EUniversePublic; - EAccountType type = k_EAccountTypeIndividual; - - if (params[0] > 2) - { - universe = static_cast(params[3]); - if (params[0] > 3) - { - type = static_cast(params[4]); - } - } - - CSteamID checkid(pPlayer->GetSteamAccountID(false), universe, type); - + CSteamID checkid = CreateCommonCSteamID(pPlayer->GetSteamAccountID(false), params); return pServer->UserHasLicenseForApp(checkid, params[2]); }