Advertisement
simeonnikolov

Untitled

Apr 21st, 2023 (edited)
1,513
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 3.36 KB | Gaming | 0 0
  1. #include <amxmodx>
  2. #include <celltrie>
  3. #include <reapi>
  4.  
  5. #define MAX_PLAYERS 32
  6. #define VERSION "1.4-nokill"
  7.  
  8. //----------------------------------------------------------------------------------------------
  9. new _pg_is_h
  10. #define _IsHuman(%1) ( _pg_is_h & 1<<%1 )
  11. #define _SetHuman(%1) _pg_is_h |= 1<<%1
  12. #define _SetNotHuman(%1) _pg_is_h &= ~( 1<<%1 )
  13. //----------------------------------------------------------------------------------------------
  14. new _pg_spawned
  15. #define _HasSpawned(%1) ( _pg_spawned & 1<<%1 )
  16. #define _SetSpawned(%1) _pg_spawned |= 1<<%1
  17. #define _SetNotSpawned(%1) _pg_spawned &= ~(1<<%1)
  18. #define _ResetSpawned() _pg_spawned = 0
  19. //----------------------------------------------------------------------------------------------
  20. new _pg_block
  21. #define _IsBlocked(%1) ( _pg_block & 1<<%1 )
  22. #define _SetBlock(%1) _pg_block |= 1<<%1
  23. #define _SetNoBlock(%1) _pg_block &= ~(1<<%1)
  24. #define _ResetBlocked() _pg_block = 0
  25. //----------------------------------------------------------------------------------------------
  26.  
  27.  
  28. new bool:g_stored_ips
  29. new g_p_ip[MAX_PLAYERS+1][16]
  30. new Trie:g_trie_ips
  31.  
  32. new Float:g_late_spawn_time_limit
  33.  
  34. new pcvar_spawn_time
  35. new pcvar_enabled
  36.  
  37. new bool:g_block_late_spawn
  38. new g_enabled
  39.  
  40. public plugin_init(){
  41.     register_plugin("BlockReconnectRespawn", VERSION, "Sylwester")
  42.     register_cvar("brr_ver", VERSION, FCVAR_SERVER)
  43.  
  44.     RegisterHookChain(RG_CBasePlayer_Spawn, "Player_Spawn", 1)
  45.    
  46.     register_event("HLTV", "event_new_round", "a", "1=0", "2=0")
  47.     register_logevent("logevent_round_start", 2, "1=Round_Start")
  48.     pcvar_spawn_time = register_cvar("brr_spawn_time", "0")
  49.     pcvar_enabled = register_cvar("brr_enabled", "1")
  50.  
  51.     RegisterHookChain(RG_CSGameRules_FPlayerCanRespawn,"OnFPlayerCanRespawn")
  52.     g_trie_ips = TrieCreate()
  53. }
  54.  
  55.  
  56. public OnFPlayerCanRespawn(id){
  57.     if(!_IsHuman(id) || _HasSpawned(id))
  58.         return HC_CONTINUE
  59.     if(_IsBlocked(id)){
  60.         SetHookChainReturn(ATYPE_INTEGER, false)
  61.         return HC_SUPERCEDE
  62.     }
  63.  
  64.     if(g_block_late_spawn && g_late_spawn_time_limit < get_gametime()){
  65.         SetHookChainReturn(ATYPE_INTEGER, false)
  66.         return HC_SUPERCEDE
  67.     }
  68.     return HC_CONTINUE
  69. }
  70.  
  71.  
  72. public Player_Spawn(id){
  73.     if(!_IsHuman(id) || !is_user_alive(id))
  74.         return
  75.     _SetSpawned(id)
  76. }
  77.  
  78.  
  79. public logevent_round_start(){
  80.     g_enabled = get_pcvar_num(pcvar_enabled)
  81.     new late_spawn_time = get_pcvar_num(pcvar_spawn_time)
  82.     if(late_spawn_time <= 0){
  83.         g_block_late_spawn = false
  84.         return
  85.     }
  86.     g_block_late_spawn = true
  87.     g_late_spawn_time_limit = get_gametime()+float(late_spawn_time)
  88. }
  89.  
  90.  
  91. public event_new_round(){
  92.     if(g_stored_ips){
  93.         TrieClear(g_trie_ips)
  94.         g_stored_ips = false
  95.     }
  96.     _ResetSpawned()
  97.     _ResetBlocked()
  98.     g_block_late_spawn = false
  99. }
  100.  
  101.  
  102. public client_putinserver(id){
  103.     if(is_user_bot(id) || is_user_hltv(id))
  104.         return
  105.     _SetHuman(id)
  106.     get_user_ip(id, g_p_ip[id], 15)
  107.     if(g_enabled && TrieKeyExists(g_trie_ips, g_p_ip[id])){
  108.         _SetBlock(id)
  109.     }
  110. }
  111.  
  112.  
  113. public client_disconnected(id){
  114.     if(_HasSpawned(id) && !_IsBlocked(id) && g_enabled){
  115.         g_stored_ips = true
  116.         TrieSetCell(g_trie_ips, g_p_ip[id], 0)
  117.     }
  118.     _SetNoBlock(id)
  119.     _SetNotSpawned(id)
  120.     _SetNotHuman(id)
  121. }
  122.  
  123.  
  124. public plugin_end(){
  125.     TrieDestroy(g_trie_ips)
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement