Merge pull request #313 from alliedmodders/set-client-name
Add SetClientName native.
This commit is contained in:
		
							parent
							
								
									491d24a028
								
							
						
					
					
						commit
						fc2addf11e
					
				| @ -50,6 +50,9 @@ | |||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| SH_DECL_HOOK6(IServerGameDLL, LevelInit, SH_NOATTRIB, false, bool, const char *, const char *, const char *, const char *, bool, bool); | SH_DECL_HOOK6(IServerGameDLL, LevelInit, SH_NOATTRIB, false, bool, const char *, const char *, const char *, const char *, bool, bool); | ||||||
|  | #if SOURCE_ENGINE == SE_CSS | ||||||
|  | SH_DECL_HOOK1_void_vafmt(IVEngineServer, ClientCommand, SH_NOATTRIB, 0, edict_t *); | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| SDKTools g_SdkTools;		/**< Global singleton for extension's main interface */ | SDKTools g_SdkTools;		/**< Global singleton for extension's main interface */ | ||||||
| IServerGameEnts *gameents = NULL; | IServerGameEnts *gameents = NULL; | ||||||
| @ -261,6 +264,10 @@ bool SDKTools::SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlen, bool | |||||||
| #endif | #endif | ||||||
| 	GET_V_IFACE_ANY(GetEngineFactory, soundemitterbase, ISoundEmitterSystemBase, SOUNDEMITTERSYSTEM_INTERFACE_VERSION); | 	GET_V_IFACE_ANY(GetEngineFactory, soundemitterbase, ISoundEmitterSystemBase, SOUNDEMITTERSYSTEM_INTERFACE_VERSION); | ||||||
| 
 | 
 | ||||||
|  | #if SOURCE_ENGINE == SE_CSS | ||||||
|  | 	SH_ADD_HOOK(IVEngineServer, ClientCommand, engine, SH_MEMBER(this, &SDKTools::OnSendClientCommand), false); | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| 	gpGlobals = ismm->GetCGlobals(); | 	gpGlobals = ismm->GetCGlobals(); | ||||||
| 	enginePatch = SH_GET_CALLCLASS(engine); | 	enginePatch = SH_GET_CALLCLASS(engine); | ||||||
| 	enginesoundPatch = SH_GET_CALLCLASS(engsound); | 	enginesoundPatch = SH_GET_CALLCLASS(engsound); | ||||||
| @ -268,6 +275,14 @@ bool SDKTools::SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlen, bool | |||||||
| 	return true; | 	return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | bool SDKTools::SDK_OnMetamodUnload(char *error, size_t maxlen) | ||||||
|  | { | ||||||
|  | #if SOURCE_ENGINE == SE_CSS | ||||||
|  | 	SH_REMOVE_HOOK(IVEngineServer, ClientCommand, engine, SH_MEMBER(this, &SDKTools::OnSendClientCommand), false); | ||||||
|  | #endif | ||||||
|  | 	return true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void SDKTools::SDK_OnAllLoaded() | void SDKTools::SDK_OnAllLoaded() | ||||||
| { | { | ||||||
| 	SM_GET_LATE_IFACE(BINTOOLS, g_pBinTools); | 	SM_GET_LATE_IFACE(BINTOOLS, g_pBinTools); | ||||||
| @ -456,6 +471,21 @@ void SDKTools::OnClientPutInServer(int client) | |||||||
| 	g_Hooks.OnClientPutInServer(client); | 	g_Hooks.OnClientPutInServer(client); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #if SOURCE_ENGINE == SE_CSS | ||||||
|  | void SDKTools::OnSendClientCommand(edict_t *pPlayer, const char *szFormat) | ||||||
|  | { | ||||||
|  | 	// Due to legacy code, CS:S still sends "name \"newname\"" to the client after a
 | ||||||
|  | 	// name change. The engine has a change hook on name causing it to reset to the 
 | ||||||
|  | 	// player's Steam name. This quashes that to make SetClientName work properly.
 | ||||||
|  | 	if (!strncmp(szFormat, "name ", 5)) | ||||||
|  | 	{ | ||||||
|  | 		RETURN_META(MRES_SUPERCEDE); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	RETURN_META(MRES_IGNORED); | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| class SDKTools_API : public ISDKTools | class SDKTools_API : public ISDKTools | ||||||
| { | { | ||||||
| public: | public: | ||||||
|  | |||||||
| @ -83,7 +83,7 @@ public: //public SDKExtension | |||||||
| public: | public: | ||||||
| #if defined SMEXT_CONF_METAMOD | #if defined SMEXT_CONF_METAMOD | ||||||
| 	virtual bool SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlen, bool late); | 	virtual bool SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlen, bool late); | ||||||
| 	//virtual bool SDK_OnMetamodUnload(char *error, size_t maxlen);
 | 	virtual bool SDK_OnMetamodUnload(char *error, size_t maxlen); | ||||||
| 	//virtual bool SDK_OnMetamodPauseChange(bool paused, char *error, size_t maxlen);
 | 	//virtual bool SDK_OnMetamodPauseChange(bool paused, char *error, size_t maxlen);
 | ||||||
| #endif | #endif | ||||||
| public: //IConCommandBaseAccessor
 | public: //IConCommandBaseAccessor
 | ||||||
| @ -101,6 +101,9 @@ public: // IVoiceServer | |||||||
| #else | #else | ||||||
| 	void OnClientCommand(edict_t *pEntity); | 	void OnClientCommand(edict_t *pEntity); | ||||||
| #endif | #endif | ||||||
|  | #if SOURCE_ENGINE == SE_CSS | ||||||
|  | 	void OnSendClientCommand(edict_t *pPlayer, const char *szFormat); | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| public: //ICommandTargetProcessor
 | public: //ICommandTargetProcessor
 | ||||||
| 	bool ProcessCommandTarget(cmd_target_info_t *info); | 	bool ProcessCommandTarget(cmd_target_info_t *info); | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ | |||||||
|  * vim: set ts=4 : |  * vim: set ts=4 : | ||||||
|  * ============================================================================= |  * ============================================================================= | ||||||
|  * SourceMod SDKTools Extension |  * SourceMod SDKTools Extension | ||||||
| * Copyright (C) 2004-2010 AlliedModders LLC.  All rights reserved. |  * Copyright (C) 2004-2010 AlliedModders LLC.  All rights reserved. | ||||||
|  * ============================================================================= |  * ============================================================================= | ||||||
|  * |  * | ||||||
|  * This program is free software; you can redistribute it and/or modify it under |  * This program is free software; you can redistribute it and/or modify it under | ||||||
| @ -1267,6 +1267,61 @@ static cell_t ActivateEntity(IPluginContext *pContext, const cell_t *params) | |||||||
| 	return 1; | 	return 1; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static cell_t SetClientName(IPluginContext *pContext, const cell_t *params) | ||||||
|  | { | ||||||
|  | 	if (iserver == NULL) | ||||||
|  | 	{ | ||||||
|  | 		return pContext->ThrowNativeError("IServer interface not supported, file a bug report."); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	IGamePlayer *player = playerhelpers->GetGamePlayer(params[1]); | ||||||
|  | 	IClient *pClient = iserver->GetClient(params[1] - 1); | ||||||
|  | 
 | ||||||
|  | 	if (player == NULL || pClient == NULL) | ||||||
|  | 	{ | ||||||
|  | 		return pContext->ThrowNativeError("Invalid client index %d", params[1]); | ||||||
|  | 	} | ||||||
|  | 	if (!player->IsConnected()) | ||||||
|  | 	{ | ||||||
|  | 		return pContext->ThrowNativeError("Client %d is not connected", params[1]); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	static ValveCall *pCall = NULL; | ||||||
|  | 	if (!pCall) | ||||||
|  | 	{ | ||||||
|  | 		ValvePassInfo params[1]; | ||||||
|  | 		InitPass(params[0], Valve_String, PassType_Basic, PASSFLAG_BYVAL); | ||||||
|  | 
 | ||||||
|  | 		if (!CreateBaseCall("SetClientName", ValveCall_Entity, NULL, params, 1, &pCall)) | ||||||
|  | 		{ | ||||||
|  | 			return pContext->ThrowNativeError("\"SetClientName\" not supported by this mod"); | ||||||
|  | 		} | ||||||
|  | 		else if (!pCall) | ||||||
|  | 		{ | ||||||
|  | 			return pContext->ThrowNativeError("\"SetClientName\" wrapper failed to initialize"); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// The IClient vtable is +4 from the CBaseClient vtable due to multiple inheritance.
 | ||||||
|  | 	void *pGameClient = (void *)((intptr_t)pClient - 4); | ||||||
|  | 
 | ||||||
|  | 	// Change the name in the engine.
 | ||||||
|  | 	START_CALL(); | ||||||
|  | 	void **ebuf = (void **)vptr; | ||||||
|  | 	*ebuf = pGameClient; | ||||||
|  | 	DECODE_VALVE_PARAM(2, vparams, 0); | ||||||
|  | 	FINISH_CALL_SIMPLE(NULL); | ||||||
|  | 
 | ||||||
|  | 	// Notify the server of the change.
 | ||||||
|  | #if SOURCE_ENGINE == SE_DOTA | ||||||
|  | 	serverClients->ClientSettingsChanged(player->GetIndex()); | ||||||
|  | #else | ||||||
|  | 	serverClients->ClientSettingsChanged(player->GetEdict()); | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | 	return 1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| static cell_t SetClientInfo(IPluginContext *pContext, const cell_t *params) | static cell_t SetClientInfo(IPluginContext *pContext, const cell_t *params) | ||||||
| { | { | ||||||
| 	if (iserver == NULL) | 	if (iserver == NULL) | ||||||
| @ -1418,6 +1473,7 @@ sp_nativeinfo_t g_Natives[] = | |||||||
| 	{"EquipPlayerWeapon",		WeaponEquip}, | 	{"EquipPlayerWeapon",		WeaponEquip}, | ||||||
| 	{"ActivateEntity",			ActivateEntity}, | 	{"ActivateEntity",			ActivateEntity}, | ||||||
| 	{"SetClientInfo",			SetClientInfo}, | 	{"SetClientInfo",			SetClientInfo}, | ||||||
|  | 	{"SetClientName",           SetClientName}, | ||||||
| 	{"GetPlayerResourceEntity", GetPlayerResourceEntity}, | 	{"GetPlayerResourceEntity", GetPlayerResourceEntity}, | ||||||
| 	{"GivePlayerAmmo",		GivePlayerAmmo}, | 	{"GivePlayerAmmo",		GivePlayerAmmo}, | ||||||
| 	{NULL,						NULL}, | 	{NULL,						NULL}, | ||||||
|  | |||||||
| @ -156,6 +156,15 @@ | |||||||
| 				"windows"	"17" | 				"windows"	"17" | ||||||
| 			} | 			} | ||||||
| 			 | 			 | ||||||
|  | 			/** | ||||||
|  | 			 * CBaseClient::SetName(char  const*); | ||||||
|  | 			 * Has string "(%d)%-0.*s" | ||||||
|  | 			 */ | ||||||
|  | 			"SetClientName" | ||||||
|  | 			{ | ||||||
|  | 				"windows"	"16" | ||||||
|  | 			} | ||||||
|  | 			 | ||||||
| 			/** | 			/** | ||||||
| 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | ||||||
| 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | ||||||
|  | |||||||
| @ -210,6 +210,17 @@ | |||||||
| 				"linux"		"64" | 				"linux"		"64" | ||||||
| 				"mac"		"64" | 				"mac"		"64" | ||||||
| 			} | 			} | ||||||
|  | 			/** | ||||||
|  | 			 * CBaseClient::SetName(char  const*); | ||||||
|  | 			 * Linux offset straight from VTable dump. | ||||||
|  | 			 * Has string "(%d)%-0.*s" | ||||||
|  | 			 */ | ||||||
|  | 			"SetClientName" | ||||||
|  | 			{ | ||||||
|  | 				"windows"	"16" | ||||||
|  | 				"linux"		"63" | ||||||
|  | 				"mac"		"63" | ||||||
|  | 			} | ||||||
| 			/** | 			/** | ||||||
| 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | ||||||
| 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | ||||||
|  | |||||||
| @ -205,6 +205,17 @@ | |||||||
| 				"linux"		"63" | 				"linux"		"63" | ||||||
| 				"mac"		"63" | 				"mac"		"63" | ||||||
| 			} | 			} | ||||||
|  | 			/** | ||||||
|  | 			 * CBaseClient::SetName(char  const*); | ||||||
|  | 			 * Linux offset straight from VTable dump. | ||||||
|  | 			 * Has string "(%d)%-0.*s" | ||||||
|  | 			 */ | ||||||
|  | 			"SetClientName" | ||||||
|  | 			{ | ||||||
|  | 				"windows"	"16" | ||||||
|  | 				"linux"		"62" | ||||||
|  | 				"mac"		"62" | ||||||
|  | 			} | ||||||
| 			/** | 			/** | ||||||
| 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | ||||||
| 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | ||||||
|  | |||||||
| @ -220,6 +220,17 @@ | |||||||
| 			"SetUserCvar" | 			"SetUserCvar" | ||||||
| 			{ | 			{ | ||||||
| 				/* Not 100% sure on this, why would windows change and not linux - TEST ME */ | 				/* Not 100% sure on this, why would windows change and not linux - TEST ME */ | ||||||
|  | 				"windows"	"28" | ||||||
|  | 				"linux"		"65" | ||||||
|  | 				"mac"		"65" | ||||||
|  | 			} | ||||||
|  | 			/** | ||||||
|  | 			 * CBaseClient::SetName(char  const*); | ||||||
|  | 			 * Linux offset straight from VTable dump. | ||||||
|  | 			 * Has string "(%d)%-0.*s" | ||||||
|  | 			 */ | ||||||
|  | 			"SetClientName" | ||||||
|  | 			{ | ||||||
| 				"windows"	"27" | 				"windows"	"27" | ||||||
| 				"linux"		"64" | 				"linux"		"64" | ||||||
| 				"mac"		"64" | 				"mac"		"64" | ||||||
|  | |||||||
| @ -193,6 +193,17 @@ | |||||||
| 				"linux"		"58" | 				"linux"		"58" | ||||||
| 				"mac"		"58" | 				"mac"		"58" | ||||||
| 			} | 			} | ||||||
|  | 			/** | ||||||
|  | 			 * CBaseClient::SetName(char  const*); | ||||||
|  | 			 * Linux offset straight from VTable dump. | ||||||
|  | 			 * Has string "(%d)%-0.*s" | ||||||
|  | 			 */ | ||||||
|  | 			"SetClientName" | ||||||
|  | 			{ | ||||||
|  | 				"windows"	"17" | ||||||
|  | 				"linux"		"57" | ||||||
|  | 				"mac"		"57" | ||||||
|  | 			} | ||||||
| 			/** | 			/** | ||||||
| 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | ||||||
| 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | ||||||
|  | |||||||
| @ -225,6 +225,15 @@ | |||||||
| 				"windows"	"17" | 				"windows"	"17" | ||||||
| 			} | 			} | ||||||
| 			 | 			 | ||||||
|  | 			/** | ||||||
|  | 			 * CBaseClient::SetName(char  const*); | ||||||
|  | 			 * Has string "(%d)%-0.*s" | ||||||
|  | 			 */ | ||||||
|  | 			"SetClientName" | ||||||
|  | 			{ | ||||||
|  | 				"windows"	"16" | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
| 			"UpdateUserSettings" | 			"UpdateUserSettings" | ||||||
| 			{ | 			{ | ||||||
| 				"windows"	"7" | 				"windows"	"7" | ||||||
|  | |||||||
| @ -250,6 +250,17 @@ | |||||||
| 			"SetUserCvar" | 			"SetUserCvar" | ||||||
| 			{ | 			{ | ||||||
| 				"windows"	"26" | 				"windows"	"26" | ||||||
|  | 				"linux"		"63" | ||||||
|  | 				"mac"		"63" | ||||||
|  | 			} | ||||||
|  | 			/** | ||||||
|  | 			 * CBaseClient::SetName(char  const*); | ||||||
|  | 			 * Linux offset straight from VTable dump. | ||||||
|  | 			 * Has string "(%d)%-0.*s" | ||||||
|  | 			 */ | ||||||
|  | 			"SetClientName" | ||||||
|  | 			{ | ||||||
|  | 				"windows"	"25" | ||||||
| 				"linux"		"62" | 				"linux"		"62" | ||||||
| 				"mac"		"62" | 				"mac"		"62" | ||||||
| 			} | 			} | ||||||
|  | |||||||
| @ -256,6 +256,16 @@ | |||||||
| 				"windows"	"17" | 				"windows"	"17" | ||||||
| 				"linux"		"53" | 				"linux"		"53" | ||||||
| 			} | 			} | ||||||
|  | 			/** | ||||||
|  | 			 * CBaseClient::SetName(char  const*); | ||||||
|  | 			 * Linux offset straight from VTable dump. | ||||||
|  | 			 * Has string "(%d)%-0.*s" | ||||||
|  | 			 */ | ||||||
|  | 			"SetClientName" | ||||||
|  | 			{ | ||||||
|  | 				"windows"	"16" | ||||||
|  | 				"linux"		"52" | ||||||
|  | 			} | ||||||
| 			/** | 			/** | ||||||
| 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | ||||||
| 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | ||||||
|  | |||||||
| @ -219,6 +219,16 @@ | |||||||
| 				"windows"	"17" | 				"windows"	"17" | ||||||
| 				"linux"		"55" | 				"linux"		"55" | ||||||
| 			} | 			} | ||||||
|  | 			/** | ||||||
|  | 			 * CBaseClient::SetName(char  const*); | ||||||
|  | 			 * Linux offset straight from VTable dump. | ||||||
|  | 			 * Has string "(%d)%-0.*s" | ||||||
|  | 			 */ | ||||||
|  | 			"SetClientName" | ||||||
|  | 			{ | ||||||
|  | 				"windows"	"16" | ||||||
|  | 				"linux"		"54" | ||||||
|  | 			} | ||||||
| 			/** | 			/** | ||||||
| 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | ||||||
| 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | ||||||
|  | |||||||
| @ -237,6 +237,17 @@ | |||||||
| 				"linux"		"58" | 				"linux"		"58" | ||||||
| 				"mac"		"58" | 				"mac"		"58" | ||||||
| 			} | 			} | ||||||
|  | 			/** | ||||||
|  | 			 * CBaseClient::SetName(char  const*); | ||||||
|  | 			 * Linux offset straight from VTable dump. | ||||||
|  | 			 * Has string "(%d)%-0.*s" | ||||||
|  | 			 */ | ||||||
|  | 			"SetClientName" | ||||||
|  | 			{ | ||||||
|  | 				"windows"	"17" | ||||||
|  | 				"linux"		"57" | ||||||
|  | 				"mac"		"57" | ||||||
|  | 			} | ||||||
| 			/** | 			/** | ||||||
| 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | ||||||
| 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | ||||||
|  | |||||||
| @ -183,6 +183,14 @@ | |||||||
| 			{ | 			{ | ||||||
| 				"windows"	"17" | 				"windows"	"17" | ||||||
| 			} | 			} | ||||||
|  | 			/** | ||||||
|  | 			 * CBaseClient::SetName(char  const*); | ||||||
|  | 			 * Has string "(%d)%-0.*s" | ||||||
|  | 			 */ | ||||||
|  | 			"SetClientName" | ||||||
|  | 			{ | ||||||
|  | 				"windows"	"16" | ||||||
|  | 			} | ||||||
| 			/** | 			/** | ||||||
| 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | ||||||
| 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | ||||||
|  | |||||||
| @ -177,6 +177,17 @@ | |||||||
| 				"linux"		"67" | 				"linux"		"67" | ||||||
| 				"mac"		"67" | 				"mac"		"67" | ||||||
| 			} | 			} | ||||||
|  | 			/** | ||||||
|  | 			 * CBaseClient::SetName(char  const*); | ||||||
|  | 			 * Linux offset straight from VTable dump. | ||||||
|  | 			 * Has string "(%d)%-0.*s" | ||||||
|  | 			 */ | ||||||
|  | 			"SetClientName" | ||||||
|  | 			{ | ||||||
|  | 				"windows"	"19" | ||||||
|  | 				"linux"		"66" | ||||||
|  | 				"mac"		"66" | ||||||
|  | 			} | ||||||
| 			/** | 			/** | ||||||
| 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | ||||||
| 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | ||||||
|  | |||||||
| @ -225,6 +225,17 @@ | |||||||
| 				"linux"		"63" | 				"linux"		"63" | ||||||
| 				"mac"		"63" | 				"mac"		"63" | ||||||
| 			} | 			} | ||||||
|  | 			/** | ||||||
|  | 			 * CBaseClient::SetName(char  const*); | ||||||
|  | 			 * Linux offset straight from VTable dump. | ||||||
|  | 			 * Has string "(%d)%-0.*s" | ||||||
|  | 			 */ | ||||||
|  | 			"SetClientName" | ||||||
|  | 			{ | ||||||
|  | 				"windows"	"16" | ||||||
|  | 				"linux"		"62" | ||||||
|  | 				"mac"		"62" | ||||||
|  | 			} | ||||||
| 			/** | 			/** | ||||||
| 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | ||||||
| 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | ||||||
|  | |||||||
| @ -102,6 +102,17 @@ | |||||||
| 				"linux"		"63" | 				"linux"		"63" | ||||||
| 				"mac"		"63" | 				"mac"		"63" | ||||||
| 			} | 			} | ||||||
|  | 			/** | ||||||
|  | 			 * CBaseClient::SetName(char  const*); | ||||||
|  | 			 * Linux offset straight from VTable dump. | ||||||
|  | 			 * Has string "(%d)%-0.*s" | ||||||
|  | 			 */ | ||||||
|  | 			"SetClientName" | ||||||
|  | 			{ | ||||||
|  | 				"windows"	"16" | ||||||
|  | 				"linux"		"62" | ||||||
|  | 				"mac"		"62" | ||||||
|  | 			} | ||||||
| 			/** | 			/** | ||||||
| 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | ||||||
| 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | ||||||
|  | |||||||
| @ -91,6 +91,17 @@ | |||||||
| 				"linux"		"58" | 				"linux"		"58" | ||||||
| 				"mac"		"58" | 				"mac"		"58" | ||||||
| 			} | 			} | ||||||
|  | 			/** | ||||||
|  | 			 * CBaseClient::SetName(char  const*); | ||||||
|  | 			 * Linux offset straight from VTable dump. | ||||||
|  | 			 * Has string "(%d)%-0.*s" | ||||||
|  | 			 */ | ||||||
|  | 			"SetClientName" | ||||||
|  | 			{ | ||||||
|  | 				"windows"	"17" | ||||||
|  | 				"linux"		"57" | ||||||
|  | 				"mac"		"57" | ||||||
|  | 			} | ||||||
| 			/** | 			/** | ||||||
| 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | ||||||
| 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | ||||||
|  | |||||||
| @ -180,6 +180,14 @@ | |||||||
| 				/* Not 100% sure on this, why would windows change and not linux - TEST ME */ | 				/* Not 100% sure on this, why would windows change and not linux - TEST ME */ | ||||||
| 				"windows"	"17" | 				"windows"	"17" | ||||||
| 			} | 			} | ||||||
|  | 			/** | ||||||
|  | 			 * CBaseClient::SetName(char  const*); | ||||||
|  | 			 * Has string "(%d)%-0.*s" | ||||||
|  | 			 */ | ||||||
|  | 			"SetClientName" | ||||||
|  | 			{ | ||||||
|  | 				"windows"	"16" | ||||||
|  | 			} | ||||||
| 			/** | 			/** | ||||||
| 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | ||||||
| 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | ||||||
|  | |||||||
| @ -125,6 +125,17 @@ | |||||||
| 				"linux"		"63" | 				"linux"		"63" | ||||||
| 				"mac"		"63" | 				"mac"		"63" | ||||||
| 			} | 			} | ||||||
|  | 			/** | ||||||
|  | 			 * CBaseClient::SetName(char  const*); | ||||||
|  | 			 * Linux offset straight from VTable dump. | ||||||
|  | 			 * Has string "(%d)%-0.*s" | ||||||
|  | 			 */ | ||||||
|  | 			"SetClientName" | ||||||
|  | 			{ | ||||||
|  | 				"windows"	"16" | ||||||
|  | 				"linux"		"62" | ||||||
|  | 				"mac"		"62" | ||||||
|  | 			} | ||||||
| 			/** | 			/** | ||||||
| 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | 			 * Offset into CBaseClient - Used by CBaseServer::UpdateUserSettings to determine when changes have been made. | ||||||
| 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | 			 * Find CBaseClient::UpdateUserSettings (strings "net_maxroutable", "cl_updaterate" etc) and the offset is set to 0 near the end. | ||||||
|  | |||||||
| @ -332,6 +332,15 @@ native ActivateEntity(entity); | |||||||
|  */ |  */ | ||||||
| native SetClientInfo(client, const String:key[], const String:value[]); | native SetClientInfo(client, const String:key[], const String:value[]); | ||||||
| 
 | 
 | ||||||
|  | /** | ||||||
|  |  * Changes a client's name. | ||||||
|  |  * | ||||||
|  |  * @param client		Player's index. | ||||||
|  |  * @param name			New name. | ||||||
|  |  * @error               Invalid client index, or client not connected. | ||||||
|  |  */ | ||||||
|  | native void SetClientName(int client, const char[] name); | ||||||
|  | 
 | ||||||
| /** | /** | ||||||
|  * Gives ammo of a certain type to a player. |  * Gives ammo of a certain type to a player. | ||||||
|  * This natives obeys the maximum amount of ammo a player can carry per ammo type. |  * This natives obeys the maximum amount of ammo a player can carry per ammo type. | ||||||
|  | |||||||
| @ -50,9 +50,6 @@ public Plugin:myinfo = | |||||||
| TopMenu hTopMenu; | TopMenu hTopMenu; | ||||||
| 
 | 
 | ||||||
| /* Used to get the SDK / Engine version. */ | /* Used to get the SDK / Engine version. */ | ||||||
| /* This is used in sm_rename and sm_changeteam */ |  | ||||||
| new EngineVersion:g_ModVersion = Engine_Unknown; |  | ||||||
| 
 |  | ||||||
| #include "playercommands/slay.sp" | #include "playercommands/slay.sp" | ||||||
| #include "playercommands/slap.sp" | #include "playercommands/slap.sp" | ||||||
| #include "playercommands/rename.sp" | #include "playercommands/rename.sp" | ||||||
| @ -66,8 +63,6 @@ public OnPluginStart() | |||||||
| 	RegAdminCmd("sm_slay", Command_Slay, ADMFLAG_SLAY, "sm_slay <#userid|name>"); | 	RegAdminCmd("sm_slay", Command_Slay, ADMFLAG_SLAY, "sm_slay <#userid|name>"); | ||||||
| 	RegAdminCmd("sm_rename", Command_Rename, ADMFLAG_SLAY, "sm_rename <#userid|name>"); | 	RegAdminCmd("sm_rename", Command_Rename, ADMFLAG_SLAY, "sm_rename <#userid|name>"); | ||||||
| 	 | 	 | ||||||
| 	g_ModVersion = GetEngineVersion(); |  | ||||||
| 	 |  | ||||||
| 	/* Account for late loading */ | 	/* Account for late loading */ | ||||||
| 	TopMenu topmenu; | 	TopMenu topmenu; | ||||||
| 	if (LibraryExists("adminmenu") && ((topmenu = GetAdminTopMenu()) != null)) | 	if (LibraryExists("adminmenu") && ((topmenu = GetAdminTopMenu()) != null)) | ||||||
|  | |||||||
| @ -37,22 +37,8 @@ PerformRename(client, target) | |||||||
| { | { | ||||||
| 	LogAction(client, target, "\"%L\" renamed \"%L\" to \"%s\")", client, target, g_NewName[target]); | 	LogAction(client, target, "\"%L\" renamed \"%L\" to \"%s\")", client, target, g_NewName[target]); | ||||||
| 
 | 
 | ||||||
| 	/* Used on OB / L4D engine */ | 	SetClientName(target, g_NewName[target]); | ||||||
| 	if (g_ModVersion != Engine_SourceSDK2006) |  | ||||||
| 	{ |  | ||||||
| 		SetClientInfo(target, "name", g_NewName[target]); |  | ||||||
| 	} |  | ||||||
| 	else /* Used on CSS and EP1 / older engine */ |  | ||||||
| 	{ |  | ||||||
| 		if (!IsPlayerAlive(target)) /* Lets tell them about the player renamed on the next round since they're dead. */ |  | ||||||
| 		{ |  | ||||||
| 			decl String:m_TargetName[MAX_NAME_LENGTH]; |  | ||||||
| 
 | 
 | ||||||
| 			GetClientName(target, m_TargetName, sizeof(m_TargetName)); |  | ||||||
| 			ReplyToCommand(client, "[SM] %t", "Dead Player Rename", m_TargetName); |  | ||||||
| 		} |  | ||||||
| 		ClientCommand(target, "name %s", g_NewName[target]); |  | ||||||
| 	} |  | ||||||
| 	g_NewName[target][0] = '\0'; | 	g_NewName[target][0] = '\0'; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -16,12 +16,6 @@ | |||||||
| 		"en"			"Rename player" | 		"en"			"Rename player" | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	"Dead Player Rename" |  | ||||||
| 	{ |  | ||||||
| 		"#format"		"{1:s}" |  | ||||||
| 		"en"			"{1} will be renamed on the next round." |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	"Slap player" | 	"Slap player" | ||||||
| 	{ | 	{ | ||||||
| 		"en"			"Slap player" | 		"en"			"Slap player" | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user