| ConnorMcLeod |
06-13-2012 00:43 |
Re: Blocking name change...
PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#define VERSION "0.0.1"
new g_iMaxPlayers
#define IsPlayer(%0) ( 1 <= %0 <= g_iMaxPlayers )
static const name[] = "name"
new g_iChangeNickForward
new g_iFirstNickForward
new g_bitSilentNameChangeAtSpawn
#define MarkSilentNameChangeAtSpawn(%0) g_bitSilentNameChangeAtSpawn |= 1<<(%0&31)
#define ClearSilentNameChangeAtSpawn(%0) g_bitSilentNameChangeAtSpawn &= ~(1<<(%0&31))
#define IsSilentNameChangeAtSpawn(%0) g_bitSilentNameChangeAtSpawn & 1<<(%0&31)
const XO_PLAYER = 5
const XO_PLAYER_STRING = 20
const m_bChangeNameAtRespawn = 224
const m_szNewName = 897 // 224,25 * 4
public plugin_init()
{
register_plugin("Name Change", VERSION, "ConnorMcLeod")
register_forward(FM_ClientUserInfoChanged, "ClientUserInfoChanged")
RegisterHam(Ham_Spawn, "player", "CBasePlayer_Spawn_Pre", false)
g_iChangeNickForward = CreateMultiForward("client_name_change", ET_STOP, FP_CELL, FP_STRING, FP_STRING)
g_iFirstNickForward = CreateMultiForward("client_name_change", ET_IGNORE, FP_CELL, FP_STRING, FP_STRING)
g_iMaxPlayers = get_maxplayers()
}
public plugin_natives()
{
register_library("clientname")
register_native("set_user_name", "set_user_name")
}
public set_user_name(iPlugin /* , iParams */ ) // set_user_name(id, szName, bool:bSilent = false, bool:bDeadInstantChange = false)
{
new id = get_param(1)
if( !IsPlayer(id) )
{
log_error(AMX_ERR_NATIVE, "Player out of range (%d)", id)
}
/* if( !is_user_connected(id) )
{
log_error(AMX_ERR_NATIVE, "Invalid player %d", id)
}*/
new szNewName[32]
get_string(2, szNewName, charsmax(szNewName))
set_user_info(id, name, szNewName)
if( get_param(3) )
{
if( is_user_alive(id) )
{
set_pev(id, pev_netname, szNewName)
}
else if( get_param(4) )
{
MarkSilentNameChangeAtSpawn(id)
}
}
else if( get_param(3) )
{
MarkSilentNameChangeAtSpawn
}
else if( get_param(4) )
{
set_pev(id, pev_deadflag, DEAD_NO)
}
return 1
}
public CBasePlayer_Spawn_Pre( id )
{
if( IsSilentNameChangeAtSpawn(id) )
{
new szNewName[32]
get_pdata_string(id, m_szNewName, szNewName, charsmax(szNewName), 0, XO_PLAYER_STRING)
set_pev(id, pev_netname, szNewName)
set_pdata_string(id, m_szNewName, "", -1, XO_PLAYER_STRING)
set_pdata_int(id, m_bChangeNameAtRespawn,
get_pdata_int(id, m_bChangeNameAtRespawn, XO_PLAYER) & ~(1<<0),
XO_PLAYER )
ClearSilentNameChangeAtSpawn(id)
}
}
public ClientUserInfoChanged(id)
{
new szOldName[32], szNewName[32]
pev(id, pev_netname, szOldName, charsmax(szOldName))
if( szOldName[0] )
{
/* if( !is_user_alive(id) )
{
return FMRES_IGNORED
}*/
get_user_info(id, name, szNewName, charsmax(szNewName))
if( !equal(szOldName, szNewName)
&& ( is_user_alive(id) || get_pdata_int(id, m_bChangeNameAtRespawn, XO_PLAYER) & ~(1<<0) ) )
{
new iRet
ExecuteForward(g_iChangeNickForward, iRet, id, szOldName, szNewName)
if( iRet == PLUGIN_HANDLED )
{
set_user_info(id, name, szOldName)
return FMRES_HANDLED
}
}
}
else if( get_user_info(id, name, szNewName, charsmax(szNewName)) )
{
new iRet
ExecuteForward(g_iFirstNickForward, iRet, id, szOldName, szNewName)
}
return FMRES_IGNORED
}
|