Fixed userid serialization hook

Fixed #135
This commit is contained in:
asmodai 2016-01-24 00:17:13 +03:00
parent 4b12ceb8e1
commit 7c1c541d8f
4 changed files with 21 additions and 15 deletions

View File

@ -544,10 +544,14 @@ void Decal_Init(void)
char pszPathID[2][15] = { "DEFAULTGAME", "GAME" };
Draw_DecalShutdown();
for (i = 0; i < 2; i++)
for (i = 0; i < ARRAYSIZE(pszPathID); i++)
{
hfile = FS_OpenPathID("decals.wad", "rb", pszPathID[i]);
#ifdef REHLDS_FIXES
if (i == ARRAYSIZE(pszPathID) - 1 && !hfile)
#else
if (i == 0 && !hfile)
#endif
Sys_Error("Couldn't find '%s' in \"%s\" search path\n", "decals.wad", pszPathID[i]);
filesize = FS_Size(hfile);
@ -567,8 +571,8 @@ void Decal_Init(void)
for (i = 0; i < sv_decalnamecount; i++)
{
Q_memset(&sv_decalnames[i], 0, sizeof(decalname_t));
Q_strncpy(sv_decalnames[i].name, Draw_DecalName(i), 15);
sv_decalnames[i].name[15] = 0;
Q_strncpy(sv_decalnames[i].name, Draw_DecalName(i), sizeof sv_decalnames[i].name - 1);
sv_decalnames[i].name[sizeof sv_decalnames[i].name - 1] = 0;
}
}

View File

@ -4820,6 +4820,9 @@ void SV_ExtractFromUserinfo(client_t *cl)
*p = ' ';
}
// Fix name to not start with '#', so it will not resemble userid
for (char *p = newname; *p == '#'; p++) *p = ' ';
#ifdef REHLDS_FIXES
Q_StripUnprintableAndSpace(newname);
#else // REHLDS_FIXES
@ -4831,9 +4834,6 @@ void SV_ExtractFromUserinfo(client_t *cl)
Q_UnicodeRepair(newname);
}
// Fix name to not start with '#', so it will not resemble userid
for (char *p = newname; *p == '#'; p++) *p = ' ';
if (newname[0] == '\0' || !Q_stricmp(newname, "console")
#ifdef REHLDS_FIXES
|| Q_strstr(newname, "..") != NULL)
@ -5841,6 +5841,11 @@ USERID_t *SV_StringToUserID(const char *str)
return &id;
}
void SV_SerializeSteamid(USERID_t* id, USERID_t* serialized)
{
*serialized = *id;
}
/* <ab410> ../engine/sv_main.c:7799 */
void SV_BanId_f(void)
{
@ -5953,10 +5958,8 @@ void SV_BanId_f(void)
userfilters[i].banTime = banTime;
userfilters[i].banEndTime = (banTime == 0.0f) ? 0.0f : banTime * 60.0f + realtime;
Q_memcpy(&userfilters[i].userid, id, sizeof(USERID_t));
// give 3-rd party plugins a chance to serialize ID
g_RehldsHookchains.m_SerializeSteamId.callChain(NULL, &userfilters[i].userid);
g_RehldsHookchains.m_SerializeSteamId.callChain(SV_SerializeSteamid, id, &userfilters[i].userid);
if (banTime == 0.0f)
Q_sprintf(szreason, "permanently");

View File

@ -35,7 +35,7 @@
#include "model.h"
#define REHLDS_API_VERSION_MAJOR 2
#define REHLDS_API_VERSION_MINOR 6
#define REHLDS_API_VERSION_MINOR 7
//Steam_NotifyClientConnect hook
typedef IHookChain<qboolean, IGameClient*, const void*, unsigned int> IRehldsHook_Steam_NotifyClientConnect;
@ -78,8 +78,8 @@ typedef IHookChain<qboolean, IGameClient*> IRehldsHook_Steam_NotifyBotConnect;
typedef IHookChainRegistry<qboolean, IGameClient*> IRehldsHookRegistry_Steam_NotifyBotConnect;
//SerializeSteamId
typedef IVoidHookChain<USERID_t*> IRehldsHook_SerializeSteamId;
typedef IVoidHookChainRegistry<USERID_t*> IRehldsHookRegistry_SerializeSteamId;
typedef IVoidHookChain<USERID_t*, USERID_t*> IRehldsHook_SerializeSteamId;
typedef IVoidHookChainRegistry<USERID_t*, USERID_t*> IRehldsHookRegistry_SerializeSteamId;
//SV_CompareUserID hook
typedef IHookChain<qboolean, USERID_t*, USERID_t*> IRehldsHook_SV_CompareUserID;
@ -169,7 +169,6 @@ typedef IHookChainRegistry<int> IRehldsHookRegistry_SV_TransferConsistencyInfo;
typedef IHookChain<bool, uint64, const char *, uint32> IRehldsHook_Steam_GSBUpdateUserData;
typedef IHookChainRegistry<bool, uint64, const char *, uint32> IRehldsHookRegistry_Steam_GSBUpdateUserData;
//BUpdateUserData
class IRehldsHookchains {
public:
virtual ~IRehldsHookchains() { }

View File

@ -72,8 +72,8 @@ typedef IHookChainImpl<qboolean, IGameClient*> CRehldsHook_Steam_NotifyBotConnec
typedef IHookChainRegistryImpl<qboolean, IGameClient*> CRehldsHookRegistry_Steam_NotifyBotConnect;
//SerializeSteamId
typedef IVoidHookChainImpl<USERID_t*> CRehldsHook_SerializeSteamId;
typedef IVoidHookChainRegistryImpl<USERID_t*> CRehldsHookRegistry_SerializeSteamId;
typedef IVoidHookChainImpl<USERID_t*, USERID_t*> CRehldsHook_SerializeSteamId;
typedef IVoidHookChainRegistryImpl<USERID_t*, USERID_t*> CRehldsHookRegistry_SerializeSteamId;
//SV_CompareUserID hook
typedef IHookChainImpl<qboolean, USERID_t*, USERID_t*> CRehldsHook_SV_CompareUserID;