HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2. #include <celltrie>
  3. #include <hamsandwich>
  4. #include <orpheu>
  5. #include <orpheu_stocks>
  6.  
  7. #define MAX_PLAYERS 32
  8. #define VERSION "1.4-nokill"
  9.  
  10. //----------------------------------------------------------------------------------------------
  11. new _pg_is_h
  12. #define _IsHuman(%1) ( _pg_is_h & 1<<%1 )
  13. #define _SetHuman(%1) _pg_is_h |= 1<<%1
  14. #define _SetNotHuman(%1) _pg_is_h &= ~( 1<<%1 )
  15. //----------------------------------------------------------------------------------------------
  16. new _pg_spawned
  17. #define _HasSpawned(%1) ( _pg_spawned & 1<<%1 )
  18. #define _SetSpawned(%1) _pg_spawned |= 1<<%1
  19. #define _SetNotSpawned(%1) _pg_spawned &= ~(1<<%1)
  20. #define _ResetSpawned() _pg_spawned = 0
  21. //----------------------------------------------------------------------------------------------
  22. new _pg_block
  23. #define _IsBlocked(%1) ( _pg_block & 1<<%1 )
  24. #define _SetBlock(%1) _pg_block |= 1<<%1
  25. #define _SetNoBlock(%1) _pg_block &= ~(1<<%1)
  26. #define _ResetBlocked() _pg_block = 0
  27. //----------------------------------------------------------------------------------------------
  28.  
  29. new g_pGameRules
  30.  
  31. new bool:g_stored_ips
  32. new g_p_ip[MAX_PLAYERS+1][16]
  33. new Trie:g_trie_ips
  34.  
  35. new Float:g_late_spawn_time_limit
  36.  
  37. new pcvar_spawn_time
  38. new pcvar_enabled
  39.  
  40. new bool:g_block_late_spawn
  41. new g_enabled
  42.  
  43. public plugin_init(){
  44. register_plugin("BlockReconnectRespawn", VERSION, "Sylwester")
  45. register_cvar("brr_ver", VERSION, FCVAR_SERVER)
  46.  
  47. RegisterHam(Ham_Spawn, "player", "Player_Spawn", 1)
  48.  
  49. register_event("HLTV", "event_new_round", "a", "1=0", "2=0")
  50. register_logevent("logevent_round_start", 2, "1=Round_Start")
  51. pcvar_spawn_time = register_cvar("brr_spawn_time", "0")
  52. pcvar_enabled = register_cvar("brr_enabled", "1")
  53.  
  54. OrpheuRegisterHookFromObject(g_pGameRules,"FPlayerCanRespawn","CGameRules","OnFPlayerCanRespawn")
  55. g_trie_ips = TrieCreate()
  56. }
  57.  
  58.  
  59. public plugin_precache()
  60. OrpheuRegisterHook(OrpheuGetFunction("InstallGameRules"),"OnInstallGameRules",OrpheuHookPost)
  61.  
  62.  
  63. public OnInstallGameRules()
  64. g_pGameRules = OrpheuGetReturn()
  65.  
  66.  
  67. public OrpheuHookReturn:OnFPlayerCanRespawn(gamerules, id){
  68. if(!_IsHuman(id) || _HasSpawned(id))
  69. return OrpheuIgnored
  70. if(_IsBlocked(id)){
  71. OrpheuSetReturn(false)
  72. return OrpheuSupercede
  73. }
  74.  
  75. if(g_block_late_spawn && g_late_spawn_time_limit < get_gametime()){
  76. OrpheuSetReturn(false)
  77. return OrpheuSupercede
  78. }
  79. return OrpheuIgnored
  80. }
  81.  
  82.  
  83. public Player_Spawn(id){
  84. if(!_IsHuman(id) || !is_user_alive(id))
  85. return
  86. _SetSpawned(id)
  87. }
  88.  
  89.  
  90. public logevent_round_start(){
  91. g_enabled = get_pcvar_num(pcvar_enabled)
  92. new late_spawn_time = get_pcvar_num(pcvar_spawn_time)
  93. if(late_spawn_time <= 0){
  94. g_block_late_spawn = false
  95. return
  96. }
  97. g_block_late_spawn = true
  98. g_late_spawn_time_limit = get_gametime()+float(late_spawn_time)
  99. }
  100.  
  101.  
  102. public event_new_round(){
  103. if(g_stored_ips){
  104. TrieClear(g_trie_ips)
  105. g_stored_ips = false
  106. }
  107. _ResetSpawned()
  108. _ResetBlocked()
  109. g_block_late_spawn = false
  110. }
  111.  
  112.  
  113. public client_putinserver(id){
  114. if(is_user_bot(id) || is_user_hltv(id))
  115. return
  116. _SetHuman(id)
  117. get_user_ip(id, g_p_ip[id], 15)
  118. if(g_enabled && TrieKeyExists(g_trie_ips, g_p_ip[id])){
  119. _SetBlock(id)
  120. }
  121. }
  122.  
  123.  
  124. public client_disconnect(id){
  125. if(_HasSpawned(id) && !_IsBlocked(id) && g_enabled){
  126. g_stored_ips = true
  127. TrieSetCell(g_trie_ips, g_p_ip[id], 0)
  128. }
  129. _SetNoBlock(id)
  130. _SetNotSpawned(id)
  131. _SetNotHuman(id)
  132. }
  133.  
  134.  
  135. public plugin_end(){
  136. TrieDestroy(g_trie_ips)
  137. }