Advertisement
Guest User

AQRC v1.0 by White_116

a guest
Oct 16th, 2013
462
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.11 KB | None | 0 0
  1. /*============================================================================*\
  2.                 Anti Quick Re Connect v 1.0 by White_116
  3.                             Date: 16.10.13
  4. ================================================================================
  5. native AQRC_Ban(playerid, reason[]);
  6. native AQRC_Kick(playerid);
  7. native AQRC_UnBanIP(iip);
  8. native AQRC_ScriptInit();
  9. native AQRC_ScriptExit();
  10. native AQRC_OnPlayerConnect(playerid);
  11. native AQRC_OnPlayerDisconnect(playerid, reason);
  12. native AQRC_OnPlayerUpdate(playerid);
  13. native int2ip(iip, szIP[]);
  14. native ip2int(szIP[]);
  15. \*============================================================================*/
  16. #include <a_samp>
  17. new ReConnectTime=15000; // мсек. после дисконекта, после котороых снова можно конектится (15 стандарт)
  18. new DB:DATABASE;
  19. new DBResult:RESULT;
  20. new BanReason[MAX_PLAYERS][128];
  21. new IP[MAX_PLAYERS][16];
  22.  
  23. new TimeKB[MAX_PLAYERS char];
  24. new TypeKB[MAX_PLAYERS char];
  25. new TimerKB[MAX_PLAYERS]={-1,...};
  26. //==============================================================================
  27. //Конвертируют ип в число и обратно.
  28. //==============================================================================
  29. #define int2ip(%0,%1) format(%1, sizeof(%1), "%i.%i.%i.%i", (%0 >>> 24), ((%0 >>> 16) & 255), ((%0 >>> 8) & 255), (%0 & 255))// bjiadokc
  30. stock ip2int(const szIP[])// RyDeR`
  31. {
  32.     new aiBytes[1],iPos;
  33.     aiBytes{0} = strval(szIP[iPos]);
  34.     while(szIP[iPos] != EOS && szIP[iPos++] != '.') {}
  35.     aiBytes{1} = strval(szIP[iPos]);
  36.     while(szIP[iPos] != EOS && szIP[iPos++] != '.') {}
  37.     aiBytes{2} = strval(szIP[iPos]);
  38.     while(szIP[iPos] != EOS && szIP[iPos++] != '.') {}
  39.     aiBytes{3} = strval(szIP[iPos]);
  40.     return aiBytes[0];
  41. }
  42. //==============================================================================
  43. //Разбанит указаный ид в БД и в samp.ban
  44. //==============================================================================
  45. forward AQRC_UnBanIP(iip);
  46. public  AQRC_UnBanIP(iip)
  47. {
  48.     new QUERY[128],ip[16];
  49.     int2ip(iip,ip);
  50.     format(QUERY, sizeof(QUERY), "DELETE FROM `aqrc` WHERE `ip` = '%i'",iip);
  51.     db_free_result(db_query(DATABASE, QUERY));
  52.     format(QUERY, sizeof(QUERY), "AQRC_UnBanIP %s", ip);
  53.     SendRconCommand(QUERY);
  54.     //printf("===AQRC=== %s",QUERY);
  55. }
  56. //==============================================================================
  57. //Фикс кика для сервера Х версии
  58. //==============================================================================
  59. forward Kick2(playerid);
  60. public Kick2(playerid)
  61. {
  62.     TimerKB[playerid]=-1;
  63.     Kick(playerid);
  64. }
  65.  
  66. stock AQRC_Kick(playerid)
  67. {
  68.     if(TimerKB[playerid]== -1)
  69.     {
  70.         TimerKB[playerid]=SetTimerEx("KickEx2", 2000, false, "i", playerid);
  71.         TypeKB{playerid}=1;
  72.         TimeKB{playerid}=2;
  73.     }
  74. }
  75. //==============================================================================
  76. //Фикс бана для сервера Х версии
  77. //==============================================================================
  78. forward Ban2(playerid);
  79. public Ban2(playerid)
  80. {
  81.     TimerKB[playerid]=-1;
  82.     if(BanReason[playerid][0])return BanEx(playerid,BanReason[playerid]);
  83.     else return Ban(playerid);
  84. }
  85.  
  86. stock AQRC_Ban(playerid, reason[]="~")
  87. {
  88.     if(TimerKB[playerid]== -1)
  89.     {
  90.         TimerKB[playerid]=SetTimerEx("Ban2", 2000, false, "i", playerid);
  91.         TimeKB{playerid}=2;
  92.     }
  93.     TypeKB{playerid}=2;
  94.     strdel(BanReason[playerid], 0, 128);
  95.     if(reason[0]!='~')strcat(BanReason[playerid], reason);
  96.     return 1;
  97. }
  98.  
  99. //==============================================================================
  100. //Откроет БД. Создаст таблицы если нет, разбанит игроков если упал сервер.
  101. //==============================================================================
  102. stock AQRC_ScriptInit()
  103. {
  104.     DATABASE=db_open("DB.db");
  105.     db_free_result(db_query(DATABASE, "CREATE TABLE IF NOT EXISTS `aqrc` (ip INTEGER)"));
  106.     RESULT=db_query(DATABASE,  "SELECT `ip` FROM `aqrc`");
  107.     new VALUE[11], i=db_num_rows(RESULT);
  108.     for(new x; x < i; x++)
  109.     {
  110.         db_get_field_assoc(RESULT, "ip", VALUE, 11);
  111.         AQRC_UnBanIP(strval(VALUE));
  112.         db_next_row(RESULT);
  113.     }
  114.     db_free_result(RESULT);
  115.     return 1;
  116. }
  117. //==============================================================================
  118. //Закроет БД.
  119. //==============================================================================
  120. stock AQRC_ScriptExit()
  121. {
  122.     db_close(DATABASE);
  123.     return 1;
  124. }
  125. //==============================================================================
  126. //Фикс кика/бана для Х версии. Если игрок теоретически забанен то будет расинхронизорован.
  127. //==============================================================================
  128. stock AQRC_OnPlayerUpdate(playerid)
  129. {
  130.     if(TimeKB{playerid}==2)
  131.     {
  132.         TimeKB{playerid}--;
  133.         return 0;
  134.     }
  135.     else if(TimeKB{playerid}==1)
  136.     {
  137.         if(TypeKB{playerid}==1)return Kick(playerid);
  138.         else
  139.         {
  140.             if(BanReason[playerid][0])return BanEx(playerid, BanReason[playerid]);
  141.             else return Ban(playerid);
  142.         }
  143.     }
  144.     return 1;
  145. }
  146. //==============================================================================
  147. //Проверяет игрока на двойной коннект. Не допускает более одного соединения с ип адреса.
  148. //==============================================================================
  149. stock AQRC_OnPlayerConnect(playerid)
  150. {
  151. //----------------------        AntiDoublConnect        ------------------------
  152.     if(IP[playerid][0] != 0)return 1;
  153. //----------------------        AntiMultiConnect        ------------------------
  154.     GetPlayerIp(playerid,IP[playerid],16);
  155.     for(new x=MAX_PLAYERS; x--;)
  156.     if(x != playerid)
  157.     if(IP[x][0] != 0)
  158.     if(!strcmp(IP[playerid],IP[x]))return 2;
  159.     return 0;
  160. }
  161. //==============================================================================
  162. //Банит игрока после его выхода. Если был тайм оут то его не банит.
  163. //==============================================================================
  164. stock AQRC_OnPlayerDisconnect(playerid, reason)
  165. {
  166. //----------------------        AntiQuikReConnect       ------------------------
  167.     if(reason == 0)
  168.     {
  169.         IP[playerid][0]=0;
  170.         return 1;
  171.     }
  172.     else if(reason == 2)
  173.     {
  174. //----------------------            FixKickBan          ------------------------
  175.         new rn=TypeKB{playerid};
  176.         if(TimerKB[playerid]!= -1)KillTimer(TimerKB[playerid]);
  177.         TimerKB[playerid]=-1;
  178.         TypeKB{playerid}=0;
  179.         TimeKB{playerid}=0;
  180.         if(rn>1)return 1;
  181.     }
  182.     new QUERY[128],ip=ip2int(IP[playerid]);
  183.     format(QUERY, sizeof(QUERY), "banip %s", IP[playerid]);
  184.     SendRconCommand(QUERY);
  185.     printf("===AQRC=== %s",QUERY);
  186.     format(QUERY,sizeof(QUERY),"INSERT INTO `aqrc` (ip) VALUES ('%i')", ip);
  187.     db_free_result(db_query(DATABASE, QUERY));
  188.     SetTimerEx("AQRC_UnBanIP", ReConnectTime, 0, "i", ip);
  189. //----------------------        AntiDoublConnect        ------------------------
  190.     IP[playerid][0]=0;
  191.     return 1;
  192. }
  193. //==========================            EOS             ========================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement