HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1.  
  2. /*
  3. - Disconnect Reason -
  4. by bugsy
  5. */
  6.  
  7. #include <amxmodx>
  8. #include <amxmisc>
  9. #include <orpheu>
  10.  
  11. new const Version[] = "0.6";
  12.  
  13. enum ReasonCodes
  14. {
  15. DR_TIMEDOUT,
  16. DR_DROPPED,
  17. DR_KICKED,
  18. DR_LEVELCHANGE,
  19. DR_OTHER
  20. }
  21. new const DisconnectMessages[ ReasonCodes ][] =
  22. {
  23. "A Kapcsolat Megszakadt",
  24. "Lecsatlakozott",
  25. "Kirugva",
  26. "BOT",
  27. ""
  28. };
  29. enum DisconnectData
  30. {
  31. ReasonCode,
  32. ReasonMessage[ 50 ]
  33. }
  34.  
  35. new g_pEnabled , bool:g_bEnabled , g_szName[ 33 ][ 33 ] , g_DisconnectInfo[ DisconnectData ] , g_iFwdDisconnect;
  36.  
  37. public plugin_init()
  38. {
  39. register_plugin( "Disconnect Reason" , Version , "bugsy" );
  40.  
  41. g_pEnabled = register_cvar( "dr_enabled" , "1" );
  42. register_cvar( "disconnectreason_version" , Version , ( FCVAR_SERVER | FCVAR_SPONLY ) );
  43.  
  44. OrpheuRegisterHook( OrpheuGetFunction( "SV_DropClient" ) , "SV_DropClient" );
  45.  
  46. register_message( get_user_msgid( "TextMsg" ) , "fw_MsgTextMsg" );
  47.  
  48. g_iFwdDisconnect = CreateMultiForward( "client_disconnect_reason", ET_CONTINUE , FP_CELL , FP_CELL , FP_STRING );
  49. }
  50.  
  51. public client_putinserver( id )
  52. {
  53. get_user_name( id , g_szName[ id ] , charsmax( g_szName[] ) );
  54. }
  55.  
  56. public OrpheuHookReturn:SV_DropClient( a , b , const szMessage[] )
  57. {
  58. if ( ( g_bEnabled = bool:!!get_pcvar_num( g_pEnabled ) ) )
  59. {
  60. copy( g_DisconnectInfo[ ReasonMessage ] , charsmax( g_DisconnectInfo[ ReasonMessage ] ) , szMessage );
  61.  
  62. new ReasonCodes:rcReason;
  63. for ( rcReason = DR_TIMEDOUT ; rcReason < ReasonCodes ; rcReason++ )
  64. {
  65. if ( equal( szMessage , DisconnectMessages[ rcReason ] ) )
  66. break;
  67. }
  68.  
  69. g_DisconnectInfo[ ReasonCode ] = _:rcReason;
  70. }
  71. }
  72.  
  73. public client_disconnect( id )
  74. {
  75. new iReturn;
  76. ExecuteForward( g_iFwdDisconnect , iReturn , id , g_DisconnectInfo[ ReasonCode ] , g_DisconnectInfo[ ReasonMessage ] );
  77.  
  78. if ( g_bEnabled )
  79. {
  80. console_print( 0 , "* %s lecsatlakozott - Indok: [ %s ]" , g_szName[ id ] , g_DisconnectInfo[ ReasonMessage ] );
  81. ChatNotify( id );
  82. }
  83. }
  84.  
  85. public fw_MsgTextMsg( iMsgID , iMsgDest , iMsgArgs )
  86. {
  87. static szMessage[ 19 ];
  88. return ( g_bEnabled && get_msg_arg_string( 2 , szMessage , charsmax( szMessage ) ) && equal( szMessage , "#Game_disconnected" ) ) ? PLUGIN_HANDLED : PLUGIN_CONTINUE;
  89. }
  90.  
  91. ChatNotify( iDisconnectID )
  92. {
  93. static szMessage[ 100 ] , iMsgSayText;
  94. formatex( szMessage , charsmax( szMessage ) , "^1*^3 %s ^1lecsatlakozott - Indok: [^4 %s ^1]" , g_szName[ iDisconnectID ] , g_DisconnectInfo[ ReasonMessage ] );
  95.  
  96. emessage_begin( MSG_BROADCAST , iMsgSayText ? iMsgSayText : ( iMsgSayText = get_user_msgid( "SayText" ) ) , _ , 0 );
  97. ewrite_byte( iDisconnectID );
  98. ewrite_string( szMessage );
  99. emessage_end();
  100. }
  101. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  102. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
  103. */
  104.