Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 7th, 2012  |  syntax: PAWN  |  size: 3.24 KB  |  hits: 22  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include <amxmodx>
  2. #include <fakemeta>
  3. #include <hamsandwich>
  4.  
  5. #define VERSION "0.0.1"
  6.  
  7. new g_iMaxPlayers
  8. #define IsPlayer(%0)    ( 1 <= %0 <= g_iMaxPlayers )
  9.  
  10. static const name[] = "name"
  11.  
  12. new g_iChangeNickForward
  13. new g_iFirstNickForward
  14.  
  15. new g_bitSilentNameChangeAtSpawn
  16. #define MarkSilentNameChangeAtSpawn(%0) g_bitSilentNameChangeAtSpawn |= 1<<(%0&31)
  17. #define ClearSilentNameChangeAtSpawn(%0)        g_bitSilentNameChangeAtSpawn &= ~(1<<(%0&31))
  18. #define IsSilentNameChangeAtSpawn(%0)                   g_bitSilentNameChangeAtSpawn & 1<<(%0&31)
  19.  
  20. const XO_PLAYER = 5
  21. const XO_PLAYER_STRING = 20
  22. const m_bChangeNameAtRespawn = 224
  23. const m_szNewName = 897 // 224,25 * 4
  24.  
  25. public plugin_init()
  26. {
  27.         register_plugin("Name Change", VERSION, "ConnorMcLeod")
  28.         register_forward(FM_ClientUserInfoChanged, "ClientUserInfoChanged")
  29.         RegisterHam(Ham_Spawn, "player", "CBasePlayer_Spawn_Pre", false)
  30.         g_iChangeNickForward = CreateMultiForward("client_name_change", ET_STOP, FP_CELL, FP_STRING, FP_STRING)
  31.         g_iFirstNickForward = CreateMultiForward("client_name_change", ET_IGNORE, FP_CELL, FP_STRING, FP_STRING)
  32.         g_iMaxPlayers = get_maxplayers()
  33. }
  34.  
  35. public plugin_natives()
  36. {
  37.         register_library("clientname")
  38.         register_native("set_user_name", "set_user_name")
  39. }
  40.  
  41. public set_user_name(iPlugin /* , iParams */ ) // set_user_name(id, szName, bool:bSilent = false, bool:bDeadInstantChange = false)
  42. {
  43.         new id = get_param(1)
  44.         if( !IsPlayer(id) )
  45.         {
  46.                 log_error(AMX_ERR_NATIVE, "Player out of range (%d)", id)
  47.         }
  48. /*      if( !is_user_connected(id) )
  49.         {
  50.                 log_error(AMX_ERR_NATIVE, "Invalid player %d", id)
  51.         }*/
  52.         new szNewName[32]
  53.         get_string(2, szNewName, charsmax(szNewName))
  54.         set_user_info(id, name, szNewName)
  55.         if( get_param(3) )
  56.         {
  57.                 if( is_user_alive(id) )
  58.                 {
  59.                         set_pev(id, pev_netname, szNewName)
  60.                 }
  61.                 else if( get_param(4) )
  62.                 {
  63.                         MarkSilentNameChangeAtSpawn(id)
  64.                 }
  65.         }
  66.         else if( get_param(3) )
  67.         {
  68.                 MarkSilentNameChangeAtSpawn
  69.         }
  70.         else if( get_param(4) )
  71.         {
  72.                 set_pev(id, pev_deadflag, DEAD_NO)
  73.         }
  74.         return 1
  75. }
  76.  
  77. public CBasePlayer_Spawn_Pre( id )
  78. {
  79.         if( IsSilentNameChangeAtSpawn(id) )
  80.         {
  81.                 new szNewName[32]
  82.                 get_pdata_string(id, m_szNewName, szNewName, charsmax(szNewName), 0, XO_PLAYER_STRING)
  83.                 set_pev(id, pev_netname, szNewName)
  84.                 set_pdata_string(id, m_szNewName, "", -1, XO_PLAYER_STRING)
  85.                 set_pdata_int(id, m_bChangeNameAtRespawn,
  86.                         get_pdata_int(id, m_bChangeNameAtRespawn, XO_PLAYER)  & ~(1<<0),
  87.                         XO_PLAYER )
  88.                 ClearSilentNameChangeAtSpawn(id)
  89.         }
  90. }
  91.  
  92. public ClientUserInfoChanged(id)
  93. {
  94.         new szOldName[32], szNewName[32]
  95.         pev(id, pev_netname, szOldName, charsmax(szOldName))
  96.         if( szOldName[0] )
  97.         {
  98.         /*      if( !is_user_alive(id) )
  99.                 {
  100.                         return FMRES_IGNORED
  101.                 }*/
  102.                 get_user_info(id, name, szNewName, charsmax(szNewName))
  103.  
  104.                 if( !equal(szOldName, szNewName)
  105.                 &&      ( is_user_alive(id) || get_pdata_int(id, m_bChangeNameAtRespawn, XO_PLAYER)  & ~(1<<0) )        )
  106.                 {
  107.                         new iRet
  108.                         ExecuteForward(g_iChangeNickForward, iRet, id, szOldName, szNewName)
  109.                         if( iRet == PLUGIN_HANDLED )
  110.                         {
  111.                                 set_user_info(id, name, szOldName)
  112.                                 return FMRES_HANDLED
  113.                         }
  114.                 }
  115.         }
  116.         else if( get_user_info(id, name, szNewName, charsmax(szNewName)) )
  117.         {
  118.                 new iRet
  119.                 ExecuteForward(g_iFirstNickForward, iRet, id, szOldName, szNewName)
  120.         }
  121.         return FMRES_IGNORED
  122. }