HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /*
  2. Server Connect Message
  3.  
  4. - Current version: 0.7.0 -
  5.  
  6. - Description -
  7.  
  8. Basically it displays a message when players connect.
  9.  
  10. - Cvars -
  11.  
  12. amx_connect_msg_on < 1 / 0> < On / Off> < Def: 1 >
  13. amx_connect_msg_on < # > < Symbol used to seperate message lines. > < Def: '$' >
  14. amx_conmsg < Message(max 191 symbols) > < Connect Message. Use the 'Token' to seperate lines(works just like /n and ^n) > < Def: "Welcome to my server!$Enjoy playing here.$Please, don't cheat!" >
  15. amx_connect_store_type < 1 / 2 > < SteamID / IP. The method how plugin saves player info for reconnect. I made it for IP so that non-steam users could also use this. > < Def: 1 >
  16.  
  17. */
  18.  
  19. #include <amxmodx>
  20.  
  21. #define VERSION "0.7.0"
  22.  
  23. #define MAXPLAYERS 32 + 1
  24.  
  25. //Cells for user info storage
  26. #define TEMP_CELLS 33
  27.  
  28. //Time after player reconnect to remove player info. Used to remove it if player disconnects after reconnect
  29. #define RECONNECT_TASK_TIME 3.0
  30.  
  31. //User info store methods
  32. enum
  33. {
  34. STORE_STEAM = 1,
  35. STORE_IP
  36. }
  37.  
  38. //Connect Messages are stored here
  39. new g_Messages[3][192]
  40.  
  41. //Cells currently occupied by user info's
  42. new g_CurCells
  43.  
  44. //A multi-dimensional array that holds player info
  45. new g_PlayerReconnectInfo[TEMP_CELLS][33]
  46.  
  47. //Cvars
  48. new c_OnOff,c_Message,c_Token,c_StoreType
  49.  
  50. public plugin_init() {
  51.  
  52. register_plugin("Server Connect Message",VERSION,"shine")
  53.  
  54. register_cvar("servconmsg",VERSION,FCVAR_SERVER|FCVAR_SPONLY)
  55.  
  56. //Cvars
  57. c_OnOff = register_cvar("amx_connect_msg_on","1")
  58. c_Token = register_cvar("amx_connect_msg_token","$")
  59. c_Message = register_cvar("amx_conmsg","Udvozollek a szerveren!$Gyere es jatsz velunk.$Ja es ne hackelj!")
  60. c_StoreType = register_cvar("amx_connect_store_type","1") //1 - steamid, 2 - ip
  61.  
  62. new tStr[192],Token[2]
  63.  
  64. //Get Connect Messages from cvars
  65. get_pcvar_string(c_Message,tStr,191)
  66. get_pcvar_string(c_Token,Token,1)
  67.  
  68. //Write them to a global array
  69. for(new i=0;i < 3;i++) strtok(tStr,g_Messages[i],191,tStr,191,Token[0])
  70. }
  71.  
  72. public client_connect(id) {
  73.  
  74. //Check if user hasn't already been forced to reconnect and check if he isn't a bot
  75. if(!CheckReconnect(id) && get_pcvar_num(c_OnOff) && !is_user_bot(id)) {
  76.  
  77. //Set player cvars
  78. static i
  79.  
  80. for(i = 1; i < 3; i++) client_cmd(id,"scr_connectmsg%d ^"%s^"",i,g_Messages[i])
  81.  
  82. client_cmd(id,"scr_connectmsg ^"%s^"",g_Messages[0])
  83.  
  84. //Store player Info
  85. switch(get_pcvar_num(c_StoreType)) {
  86.  
  87. case STORE_STEAM : {
  88.  
  89. get_user_authid(id,g_PlayerReconnectInfo[g_CurCells],32)
  90. }
  91.  
  92. case STORE_IP : {
  93.  
  94. get_user_ip(id,g_PlayerReconnectInfo[g_CurCells],32)
  95. }
  96. }
  97.  
  98. //Set the time the user info will be automatically removed if user doesn't reconnect
  99. set_task(RECONNECT_TASK_TIME,"RemoveCell",_,g_PlayerReconnectInfo[g_CurCells],32)
  100.  
  101. g_CurCells++
  102.  
  103. //Force user to reconnect
  104. client_cmd(id,"reconnect")
  105. }
  106. }
  107.  
  108. public RemoveCell(Data[]) {
  109.  
  110. new i
  111.  
  112. for(i = 0; i < g_CurCells; i++) {
  113.  
  114. if(equal(Data,g_PlayerReconnectInfo[i])) {
  115.  
  116. MoveCellsUp(i)
  117. }
  118. }
  119. }
  120.  
  121.  
  122. public client_disconnect(id) remove_task(id)
  123.  
  124. //Make a 1 second delay after user has joined the game to remove those connect messages
  125. public client_putinserver(id) if(get_pcvar_num(c_OnOff) && !is_user_bot(id)) set_task(1.0,"ClearPlayerMessages",id)
  126.  
  127. public ClearPlayerMessages(id) {
  128.  
  129. //Reset player cvars
  130. new i
  131.  
  132. for(i = 1; i < 3; i++) client_cmd(id,"scr_connectmsg%d ^"^"",i)
  133.  
  134. client_cmd(id,"scr_connectmsg ^"^"")
  135. }
  136.  
  137. public CheckReconnect(id) {
  138.  
  139. new SteamID_IP[33],i
  140.  
  141. switch(get_pcvar_num(c_StoreType)) {
  142.  
  143. case STORE_STEAM : {
  144.  
  145. get_user_authid(id,SteamID_IP,32)
  146. }
  147.  
  148. case STORE_IP : {
  149.  
  150. get_user_ip(id,SteamID_IP,32)
  151. }
  152. }
  153.  
  154. //Compare every info cell to player info. If it matches then return true and clean his info cell.
  155. for(i = 0; i < g_CurCells; i++) {
  156.  
  157. if(equal(SteamID_IP,g_PlayerReconnectInfo[i])) {
  158.  
  159. MoveCellsUp(i)
  160.  
  161. return true
  162. }
  163. }
  164.  
  165. //If no matching info was found - return false
  166. return false
  167. }
  168.  
  169. public MoveCellsUp(Line) {
  170.  
  171. new i
  172.  
  173. for(i = Line; i < g_CurCells - 1; i++) {
  174.  
  175. copy(g_PlayerReconnectInfo[i],191,g_PlayerReconnectInfo[i+1])
  176. }
  177.  
  178. g_CurCells--
  179. }
  180.