HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /*
  2.  
  3.  *
  4.  
  5.  * Author: Cheesy Peteza
  6.  
  7.  * Date: 18-Mar-2004
  8.  
  9.  *
  10.  
  11.  *
  12.  
  13.  * Description: A generic AFK Kicker that should work with nearly all Half-Life mods.
  14.  
  15.  * Tested with Natural-Selection v3.0 beta 3, Counter-Strike 1.6 and Day of Defeat.
  16.  
  17.  *
  18.  
  19.  * Cvars:
  20.  
  21.  * mp_afktime 90 Time a player is allowed to be AFK in seconds before they are kicked. (minimum 30 sec)
  22.  
  23.  * They time is only accumulated while they are alive.
  24.  
  25.  * mp_afkminplayers 8 Minimum number of players required to be on the server before the plugin starts kicking.
  26.  
  27.  *
  28.  
  29.  *
  30.  
  31.  * Requirements: AMXModX
  32.  
  33.  *
  34.  
  35.  *
  36.  
  37.  */
  38.  
  39.  
  40.  
  41. #include <amxmodx>
  42.  
  43.  
  44.  
  45. #define MIN_AFK_TIME 30 // I use this incase stupid admins accidentally set mp_afktime to something silly.
  46.  
  47. #define WARNING_TIME 15 // Start warning the user this many seconds before they are about to be kicked.
  48.  
  49. #define CHECK_FREQ 5 // This is also the warning message frequency.
  50.  
  51.  
  52.  
  53. new g_oldangles[33][3]
  54.  
  55. new g_afktime[33]
  56.  
  57. new bool:g_spawned[33] = {true, ...}
  58.  
  59.  
  60.  
  61. public plugin_init() {
  62.  
  63. register_plugin("AFK Kicker","1.0b","Cheesy Peteza")
  64.  
  65. register_cvar("afk_version", "1.0b", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY)
  66.  
  67.  
  68.  
  69. register_cvar("mp_afktime", "90") // Kick people AFK longer than this time
  70.  
  71. register_cvar("mp_afkminplayers", "8") // Only kick AFKs when there is atleast this many players on the server
  72.  
  73. set_task(float(CHECK_FREQ),"checkPlayers",_,_,_,"b")
  74.  
  75. register_event("ResetHUD", "playerSpawned", "be")
  76.  
  77. }
  78.  
  79.  
  80.  
  81. public checkPlayers() {
  82.  
  83. for (new i = 1; i <= get_maxplayers(); i++) {
  84.  
  85. if (is_user_alive(i) && is_user_connected(i) && !is_user_bot(i) && !is_user_hltv(i) && g_spawned[i]) {
  86.  
  87. new newangle[3]
  88.  
  89. get_user_origin(i, newangle)
  90.  
  91.  
  92.  
  93. if ( newangle[0] == g_oldangles[i][0] && newangle[1] == g_oldangles[i][1] && newangle[2] == g_oldangles[i][2] ) {
  94.  
  95. g_afktime[i] += CHECK_FREQ
  96.  
  97. check_afktime(i)
  98.  
  99. } else {
  100.  
  101. g_oldangles[i][0] = newangle[0]
  102.  
  103. g_oldangles[i][1] = newangle[1]
  104.  
  105. g_oldangles[i][2] = newangle[2]
  106.  
  107. g_afktime[i] = 0
  108.  
  109. }
  110.  
  111. }
  112.  
  113. }
  114.  
  115. return PLUGIN_HANDLED
  116.  
  117. }
  118.  
  119.  
  120.  
  121. check_afktime(id) {
  122.  
  123. new numplayers = get_playersnum()
  124.  
  125. new minplayers = get_cvar_num("mp_afkminplayers")
  126.  
  127.  
  128.  
  129. if (numplayers >= minplayers) {
  130.  
  131. new maxafktime = get_cvar_num("mp_afktime")
  132.  
  133. if (maxafktime < MIN_AFK_TIME) {
  134.  
  135. log_amx("cvar mp_afktime %i tul alacsony. Minimum ertek %i.", maxafktime, MIN_AFK_TIME)
  136.  
  137. maxafktime = MIN_AFK_TIME
  138.  
  139. set_cvar_num("mp_afktime", MIN_AFK_TIME)
  140.  
  141. }
  142.  
  143.  
  144.  
  145. if ( maxafktime-WARNING_TIME <= g_afktime[id] < maxafktime) {
  146.  
  147. new timeleft = maxafktime - g_afktime[id]
  148.  
  149. client_print(id, print_chat, "[AFK Kicker] Van %i masodperc, hogy meg mozdul, vagy ki leszel rugva mert AFK vagy!", timeleft)
  150.  
  151. } else if (g_afktime[id] > maxafktime) {
  152.  
  153. new name[32]
  154.  
  155. get_user_name(id, name, 31)
  156.  
  157. client_print(0, print_chat, "[AFK Kicker] %s kirugva, mert AFK volt %i masodpercig!", name, maxafktime)
  158.  
  159. log_amx("%s kirugva, mert AFK volt %i masodpercig!", name, maxafktime)
  160.  
  161. server_cmd("kick #%d ^"Kickelve lettel! AFK voltal %i masodpercig!^"", get_user_userid(id), maxafktime)
  162.  
  163. }
  164.  
  165. }
  166.  
  167. }
  168.  
  169.  
  170.  
  171. public client_connect(id) {
  172.  
  173. g_afktime[id] = 0
  174.  
  175. return PLUGIN_HANDLED
  176.  
  177. }
  178.  
  179.  
  180.  
  181. public client_putinserver(id) {
  182.  
  183. g_afktime[id] = 0
  184.  
  185. return PLUGIN_HANDLED
  186.  
  187. }
  188.  
  189.  
  190.  
  191. public playerSpawned(id) {
  192.  
  193. g_spawned[id] = false
  194.  
  195. new sid[1]
  196.  
  197. sid[0] = id
  198.  
  199. set_task(0.75, "delayedSpawn",_, sid, 1) // Give the player time to drop to the floor when spawning
  200.  
  201. return PLUGIN_HANDLED
  202.  
  203. }
  204.  
  205.  
  206.  
  207. public delayedSpawn(sid[]) {
  208.  
  209. get_user_origin(sid[0], g_oldangles[sid[0]])
  210.  
  211. g_spawned[sid[0]] = true
  212.  
  213. return PLUGIN_HANDLED
  214.  
  215. }