Advertisement
Kyance

SAMP - GameGuard

Feb 21st, 2015
1,213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 50.15 KB | None | 0 0
  1. #define FILTERSCRIPT
  2.  
  3. #include <a_samp>
  4. #include <foreach>
  5. #include <sqlitei>
  6. #include <zcmd>
  7.  
  8. #define RCON_PASSWORD               "changeme"
  9.  
  10. #define LEAVETYPE_KICK              0
  11. #define LEAVETYPE_EXPLOIT           1
  12. #define LEAVETYPE_CHEAT             2
  13. #define LEAVETYPE_UNTRUSTED         3
  14. #define LEAVETYPE_BANNED            4
  15. #define LEAVETYPE_ADVERTISEMENT     5
  16. #define LEAVETYPE_FAIL_LOGIN         6
  17.  
  18. #define MINUTES_5                   300000
  19. #define MINUTES_10                  600000
  20. #define MINUTES_15                  900000
  21. #define MINUTES_30                  1800000
  22.  
  23. #define HOURS_1                     3600000
  24.  
  25. #define MAX_PLAYER_IP               16
  26.  
  27. //#define DIALOG_CLOSEALL           -1
  28. #define DIALOG_REQUESTANSWER        2000
  29. #define DIALOG_RCON                 2001
  30. #define DIALOG_SETTINGS             2002
  31. #define DIALOG_SETTINGS_QUESTION    2003
  32. #define DIALOG_SETTINGS_ANSWER      2004
  33. #define DIALOG_SETTINGS_ADMIN       2005
  34. #define DIALOG_SETTINGS_ADMIN2      2006
  35.  
  36. enum playerInfo
  37. {
  38.     dbID,
  39.     Untrusted, TimesDied,
  40.     DialogWarns, DeathWarns,
  41.     TextWarns, StateWarns,
  42.     ShotWarns, VehicleWarns,
  43.    
  44.     TotalWarns,
  45.  
  46.     TimesShot, LastShot, BulletsToDesync,
  47.     VehicleID, LastEntered,
  48.  
  49.     EditingDialog,
  50.    
  51.     Name[ 24 ], IP[ 16 ],
  52.    
  53.     sQuestion[ 48 ], sAnswer[ 48 ],
  54.  
  55.     LastDetection[ 16 ],
  56.    
  57.     bool:QASetup,
  58.     bool:RequestAnswer,
  59.     bool:LoggedIn,
  60.     bool:AlreadyConnected,
  61.     bool:RCONAdmin
  62. };
  63. enum gameguardInfo
  64. {
  65.     KICK_DELAY,
  66.    
  67.     MAX_UNTRUSTED_WARNS,
  68.    
  69.     MAX_DIALOG_WARNS, MAX_TEXT_WARNS,
  70.     MAX_DEATH_WARNS, MAX_STATE_WARNS,
  71.     MAX_VEHICLE_WARNS,
  72.    
  73.     MAX_SHOT_WARNS, MAX_DESYNC_BULLETS, MAX_BULLETS,
  74.    
  75.     bool:ENABLED, bool:DESYNC,
  76.     bool:USE_RCON2
  77. };
  78. new
  79.     pInfo[ MAX_PLAYERS ][ playerInfo ],
  80.     gInfo[ gameguardInfo ]
  81. ;
  82. new
  83.     DB:Database
  84. ;
  85.  
  86.  
  87. #if defined FILTERSCRIPT
  88.  
  89. public OnFilterScriptInit()
  90. {
  91.     print("\nGameGuard: loading");
  92.    
  93.     Database = db_open("gameguard.db");
  94.  
  95.     // ---- USERS
  96.     db_query(Database,
  97.     "CREATE TABLE IF NOT EXISTS users (userid INTEGER PRIMARY KEY AUTOINCREMENT,\
  98.     username VARCHAR(24),\
  99.     ip VARCHAR(16),\
  100.     untrusted INTEGER DEFAULT 0 NOT NULL,\
  101.     laston INTEGER DEFAULT 0 NOT NULL,\
  102.     question VARCHAR(48),\
  103.     answer VARCHAR(48)\
  104.     )");
  105.    
  106.     // ---- BANS
  107.     db_query(Database,
  108.     "CREATE TABLE IF NOT EXISTS banned (banid INTEGER PRIMARY KEY AUTOINCREMENT,\
  109.     bannedname VARCHAR(24),\
  110.     bannedip VARCHAR(16),\
  111.     banreason VARCHAR(48),\
  112.     date INTEGER DEFAULT 0 NOT NULL,\
  113.     time INTEGER DEFAULT 0 NOT NULL\
  114.     )");
  115.    
  116.     if(!strcmp(RCON_PASSWORD, "changeme"))
  117.     {
  118.         print("GameGuard: Please change 'RCON_PASSWORD' in the script!");
  119.         print("GameGuard: RCON is currently disabled.");
  120.     }
  121.    
  122.     gInfo[ KICK_DELAY ] = 300; //300 ms
  123.     gInfo[ MAX_DIALOG_WARNS ] = 5, gInfo[ MAX_DEATH_WARNS ] = 5, gInfo[ MAX_UNTRUSTED_WARNS ] = 5;
  124.     gInfo[ MAX_TEXT_WARNS ] = 5, gInfo[ MAX_STATE_WARNS ] = 5, gInfo[ MAX_SHOT_WARNS ] = 5;
  125.     gInfo[ MAX_VEHICLE_WARNS ] = 5;
  126.     gInfo[ MAX_DESYNC_BULLETS ] = 5, gInfo[ MAX_BULLETS ] = 10;
  127.    
  128.     gInfo[ ENABLED ] = true, gInfo[ DESYNC ] = false;
  129.     gInfo[ USE_RCON2 ] = true;
  130.    
  131.     print("- - - - - - - - SETTINGS - - - - - - - -");
  132.     printf("GameGuard: 2nd RCON Password is set to %s", RCON_PASSWORD);
  133.     printf("GameGuard: Max Untrusted Warns is set to %d", gInfo[ MAX_UNTRUSTED_WARNS ]);
  134.     printf("GameGuard: Kick Delay is set to %d ms", gInfo[ KICK_DELAY ]);
  135.     printf("GameGuard: Max Bullets is set to %d (per second)", gInfo[ MAX_BULLETS ]);
  136.     printf("GameGuard: Max Dialog Warns is set to %d", gInfo[ MAX_DIALOG_WARNS ]);
  137.     printf("GameGuard: Max Death Warns is set to %d", gInfo[ MAX_DEATH_WARNS ]);
  138.     printf("GameGuard: Max Text Warns is set to %d", gInfo[ MAX_TEXT_WARNS ]);
  139.     printf("GameGuard: Max State Warns is set to %d", gInfo[ MAX_STATE_WARNS ]);
  140.     printf("GameGuard: Max Vehicle Warns is set to %d", gInfo[ MAX_VEHICLE_WARNS ]);
  141.     printf("GameGuard: Max Shot Warns is set to %d", gInfo[ MAX_SHOT_WARNS ]);
  142.     printf("GameGuard: Max Desync Bullets is set to %d", gInfo[ MAX_DESYNC_BULLETS ]);
  143.        
  144.     foreach(Player, i)
  145.     {
  146.         OnPlayerConnect(i);
  147.            
  148.         if(IsPlayerAdmin(i))
  149.         {
  150.             ShowPlayerDialog(i, DIALOG_RCON, DIALOG_STYLE_INPUT, "{72FA80}GAMEGUARD: {FFFFFF}RCON Login", "{FFFFFF}You're required to enter the 2nd {72FA80}RCON Password{FFFFFF}.\nIf you fail to do so, you'll be kicked", "Accept", "Cancel");
  151.         }
  152.     }
  153.     return 1;
  154. }
  155. public OnFilterScriptExit()
  156. {
  157.     print("GameGuard: unloading");
  158.     db_close(Database);
  159.     return 1;
  160. }
  161.  
  162. #endif
  163.  
  164.  
  165. public OnPlayerConnect(playerid)
  166. {
  167.     if(gInfo[ ENABLED ] == true)
  168.     {
  169.         GetPlayerName(playerid, pInfo[ playerid ][ Name ], MAX_PLAYER_NAME+1);
  170.         GetPlayerIp(playerid, pInfo[ playerid ][ IP ], MAX_PLAYER_IP+1);
  171.         format(pInfo[ playerid ][ LastDetection ], 3, "\0");
  172.        
  173.         if(!IsPlayerNPC(playerid))
  174.         {
  175.             SendClientMessage(playerid, -1, "{72FA80}GAMEGUARD: {FFFFFF}GameGuard is enabled in this server.");
  176.             if(pInfo[ playerid ][ AlreadyConnected ] == false)
  177.             {
  178.                 new
  179.                     Query[ 128 ], string[ 118 ],
  180.                     DBResult:Result
  181.                 ;
  182.                 pInfo[ playerid ][ AlreadyConnected ] = true;
  183.  
  184.                 format(Query, sizeof(Query), "SELECT * FROM banned WHERE bannedname = '%s' OR bannedip = '%s'", DB_Escape(pInfo[ playerid ][ Name ]), pInfo[ playerid ][ IP ]);
  185.                 Result = db_query(Database, Query);
  186.                 if(db_num_rows(Result))
  187.                 {
  188.                     new
  189.                         banreason[ 48 ]
  190.                     ;
  191.                     db_get_field_assoc(Result, "banreason", banreason, 48);
  192.                     format(string, sizeof(string), "{72FA80}GAMEGUARD: {FFFFFF}This account is banned: {72FA80}%s{FFFFFF}.", banreason);
  193.                     SendClientMessage(playerid, -1, string), SendLeaveMessage(playerid, LEAVETYPE_BANNED);
  194.                    
  195.                     BlockIpAddressEx(pInfo[ playerid ][ IP ], HOURS_1, playerid);
  196.                 }
  197.                 else
  198.                 {
  199.                     format(Query, sizeof(Query), "SELECT * FROM users WHERE username = '%s' LIMIT 0, 1", DB_Escape(pInfo[ playerid ][ Name ]));
  200.                     Result = db_query(Database, Query);
  201.                     if(db_num_rows(Result))
  202.                     {
  203.                         db_get_field_assoc(Result, "untrusted", Query, 3); pInfo[ playerid ][ Untrusted ] = strval(Query);
  204.                         if(pInfo[ playerid ][ Untrusted ] < gInfo[ MAX_UNTRUSTED_WARNS ])
  205.                         {
  206.                             db_get_field_assoc(Result, "userid", Query, 8); pInfo[ playerid ][ dbID ] = strval(Query);
  207.  
  208.                             db_get_field_assoc(Result, "question", pInfo[ playerid ][ sQuestion ], 48);
  209.                             db_get_field_assoc(Result, "answer", pInfo[ playerid ][ sAnswer ], 48);
  210.  
  211.                             if(strlen(pInfo[ playerid ][ sQuestion ]) >= 7 && strlen(pInfo[ playerid ][ sAnswer ]) >= 1)
  212.                             {
  213.                                 pInfo[ playerid ][ QASetup ] = true;
  214.  
  215.                                 new
  216.                                     tempip[ 16 ]
  217.                                 ;
  218.                                 db_get_field_assoc(Result, "ip", tempip, MAX_PLAYER_IP);
  219.  
  220.                                 if(strcmp(tempip, pInfo[ playerid ][ IP ], true))
  221.                                 {
  222.                                     pInfo[ playerid ][ RequestAnswer ] = true;
  223.                                     pInfo[ playerid ][ LoggedIn ] = false;
  224.                                 }
  225.                                 else
  226.                                 {
  227.                                     pInfo[ playerid ][ RequestAnswer ] = false;
  228.                                     pInfo[ playerid ][ LoggedIn ] = true;
  229.                                 }
  230.                             }
  231.                             else
  232.                             {
  233.                                 SendClientMessage(playerid, -1, "{72FA80}GAMEGUARD: {FFFFFF}For your account safety, setup a secret question in /settings!");
  234.                                
  235.                                 format(pInfo[ playerid ][ sQuestion ], 4, "N/A");
  236.                                 format(pInfo[ playerid ][ sAnswer ], 4, "N/A");
  237.                             }
  238.                         }
  239.                         else if(pInfo[ playerid ][ Untrusted ] >= gInfo[ MAX_UNTRUSTED_WARNS ])
  240.                         {
  241.                             SendLeaveMessage(playerid, LEAVETYPE_UNTRUSTED);
  242.                             Ban_(playerid, "Untrusted");
  243.                         }
  244.                     }
  245.                     else
  246.                     {
  247.                         new
  248.                             year, month, day
  249.                         ;
  250.                         getdate(year, month, day);
  251.  
  252.                         format(Query, sizeof(Query), "INSERT INTO users (username, ip, laston) VALUES ('%s', '%s', '%d/%d/%d')",
  253.                         DB_Escape(pInfo[ playerid ][ Name ]), pInfo[ playerid ][ IP ], year, month, day);
  254.                         db_query(Database, Query);
  255.                        
  256.                         format(Query, sizeof(Query), "SELECT userid FROM users WHERE username = '%s' LIMIT 0, 1", DB_Escape(pInfo[ playerid ][ Name ]));
  257.                         Result = db_query(Database, Query);
  258.                         if(db_num_rows(Result))
  259.                         {
  260.                             db_get_field_assoc(Result, "userid", Query, 8); pInfo[ playerid ][ dbID ] = strval(Query);
  261.                            
  262.                             pInfo[ playerid ][ LoggedIn ] = true;
  263.                         }
  264.                         format(pInfo[ playerid ][ sQuestion ], 4, "N/A");
  265.                         format(pInfo[ playerid ][ sAnswer ], 4, "N/A");
  266.                     }
  267.                 }
  268.                 db_free_result(Result);
  269.             }
  270.             else
  271.             {
  272.                 SendLeaveMessage(playerid, LEAVETYPE_EXPLOIT);
  273.                 BlockIpAddressEx(pInfo[ playerid ][ IP ], HOURS_1, playerid, LEAVETYPE_EXPLOIT);
  274.             }
  275.         }
  276.         else
  277.         {
  278.             if(strcmp(pInfo[ playerid ][ IP ], "127.0.0.1"))
  279.             {
  280.                 SendLeaveMessage(playerid, LEAVETYPE_EXPLOIT);
  281.                 BlockIpAddressEx(pInfo[ playerid ][ IP ], HOURS_1, playerid, LEAVETYPE_EXPLOIT);
  282.             }
  283.         }
  284.     }
  285.     return 1;
  286. }
  287. public OnPlayerDisconnect(playerid, reason)
  288. {
  289.     if(gInfo[ ENABLED ] == true)
  290.     {
  291.         if(pInfo[ playerid ][ LoggedIn ] == true)
  292.         {
  293.             new
  294.                 Query[ 128 ],
  295.                 year, month, day
  296.             ;
  297.             getdate(year, month, day);
  298.             format(Query, sizeof(Query), "UPDATE users SET ip = '%s', untrusted = %d, laston = '%d/%d/%d' WHERE userid = %d",
  299.             pInfo[ playerid ][ IP ], pInfo[ playerid ][ Untrusted ], year, month, day, pInfo[ playerid ][ dbID ]);
  300.             db_query(Database, Query);
  301.         }
  302.     }
  303.     for(new i; i < _: playerInfo; ++i) pInfo[ playerid ][ playerInfo: i ] = 0;
  304.     return 1;
  305. }
  306.  
  307.  
  308. public OnPlayerRequestSpawn(playerid)
  309. {
  310.     if(gInfo[ ENABLED ] == true)
  311.     {
  312.         if(pInfo[ playerid ][ RequestAnswer ] == true && pInfo[ playerid ][ QASetup ] == true)
  313.         {
  314.             new
  315.                 string[ 228 ]
  316.             ;
  317.             SendClientMessage(playerid, -1, "{72FA80}GAMEGUARD: {FFFFFF}IP's differ - Type the answer of your secret question.");
  318.  
  319.             format(string, sizeof( string ), "{FFFFFF}Your last login IP, and your current IP ( {72FA80}%s{FFFFFF} ) don't match!\nYou're requested to type in your answer of your secret question!\nQuestion: {72FA80}%s{FFFFFF}",
  320.             pInfo[ playerid ][ IP ], pInfo[ playerid ][ sQuestion ]);
  321.  
  322.             ShowPlayerDialog(playerid, DIALOG_REQUESTANSWER, DIALOG_STYLE_INPUT, "{72FA80}GAMEGUARD: {FFFFFF}Secret Answer", string, "Accept", "Cancel");
  323.             return 0;
  324.         }
  325.     }
  326.     if(gInfo[ DESYNC ] == true)
  327.     {
  328.         if(pInfo[ playerid ][ TotalWarns ] > 6)
  329.         {
  330.             return 0;
  331.         }
  332.     }
  333.     return 1;
  334. }
  335. public OnPlayerSpawn(playerid)
  336. {
  337.     if(gInfo[ ENABLED ] == true)
  338.     {
  339.         if(pInfo[ playerid ][ RequestAnswer ] == true)
  340.         {
  341.             SendLeaveMessage(playerid, LEAVETYPE_KICK);
  342.             BlockIpAddressEx(pInfo[ playerid ][ IP ], MINUTES_5, playerid);
  343.         }
  344.     }
  345.     return 1;
  346. }
  347. public OnPlayerDeath(playerid, killerid, reason)
  348. {
  349.     if(gInfo[ ENABLED ] == true)
  350.     {
  351.         pInfo[ playerid ][ TimesDied ]++;
  352.         if(pInfo[ playerid ][ TimesDied ] > 2)
  353.         {
  354.             pInfo[ playerid ][ TimesDied ] = 0, pInfo[ playerid ][ DeathWarns ]++, pInfo[ playerid ][ TotalWarns ]++;
  355.             if(pInfo[ playerid ][ DeathWarns ] >= gInfo[ MAX_DEATH_WARNS ])
  356.             {
  357.                 SendLeaveMessage(playerid, LEAVETYPE_CHEAT);
  358.                 BlockIpAddressEx(pInfo[ playerid ][ IP ], HOURS_1, playerid, LEAVETYPE_CHEAT);
  359.             }
  360.             format(pInfo[ playerid ][ LastDetection ], 10, "Fake-Kill");
  361.         }
  362.     }
  363.     if(gInfo[ DESYNC ] == true)
  364.     {
  365.         if(pInfo[ playerid ][ TotalWarns ] > 6)
  366.         {
  367.             return 0;
  368.         }
  369.     }
  370.     return 1;
  371. }
  372.  
  373. public OnPlayerCommandReceived(playerid, cmdtext[])
  374. {
  375.     if(gInfo[ ENABLED ] == true)
  376.     {
  377.         if(gInfo[ USE_RCON2 ] == true)
  378.         {
  379.             if(IsPlayerAdmin(playerid) && pInfo[ playerid ][ RCONAdmin ] == false)
  380.             {
  381.                 return 0;
  382.             }
  383.         }
  384.         else if(pInfo[ playerid ][ LoggedIn ] == false)
  385.         {
  386.             return 0;
  387.         }
  388.        
  389.         if(strfind(".", cmdtext, true))
  390.         {
  391.             new
  392.                 dots,
  393.                 numbers,
  394.                 colons
  395.             ;
  396.             for(new i; i < strlen(cmdtext); i++)
  397.             {
  398.                 if(cmdtext[i] == '.')
  399.                 {
  400.                     dots++;
  401.                 }
  402.                 else if(cmdtext[i] <= '9' || cmdtext[i] >= '0')
  403.                 {
  404.                     numbers++;
  405.                 }
  406.                 else if(cmdtext[i] == ':')
  407.                 {
  408.                     colons++;
  409.                 }
  410.                 else continue;
  411.             }
  412.             if(dots == 3 && colons >= 0 && numbers >= 6)
  413.             {
  414.                 format(pInfo[ playerid ][ LastDetection ], 15, "Advertisement");
  415.                 pInfo[ playerid ][ TextWarns ]++, pInfo[ playerid ][ TotalWarns ]++;
  416.                 if(pInfo[ playerid ][ TextWarns ] < gInfo[ MAX_TEXT_WARNS ] )
  417.                 {
  418.                     return 0;
  419.                 }
  420.                 else
  421.                 {
  422.                     BlockIpAddressEx(pInfo[ playerid ][ IP ], MINUTES_30, playerid, LEAVETYPE_ADVERTISEMENT);
  423.                     SendLeaveMessage(playerid, LEAVETYPE_KICK);
  424.                     return 0;
  425.                 }
  426.             }
  427.         }
  428.     }
  429.     if(gInfo[ DESYNC ] == true)
  430.     {
  431.         if(pInfo[ playerid ][ TotalWarns ] > 6)
  432.         {
  433.             return 0;
  434.         }
  435.     }
  436.     return 1;
  437. }
  438. public OnPlayerText(playerid, text[])
  439. {
  440.     if(gInfo[ ENABLED ] == true)// && gInfo[ USE_RCON2 ] == true)
  441.     {
  442.         if(gInfo[ USE_RCON2 ] == true)
  443.         {
  444.             if(IsPlayerAdmin(playerid) && pInfo[ playerid ][ RCONAdmin ] == false)
  445.             {
  446.                 return 0;
  447.             }
  448.         }
  449.         else if(pInfo[ playerid ][ LoggedIn ] == false)
  450.         {
  451.             return 0;
  452.         }
  453.        
  454.         if(strfind(".", text, true))
  455.         {
  456.             new
  457.                 dots,
  458.                 numbers,
  459.                 colons
  460.             ;
  461.             for(new i; i < strlen(text); i++)
  462.             {
  463.                 if(text[i] == '.')
  464.                 {
  465.                     dots++;
  466.                 }
  467.                 else if(text[i] <= '9' || text[i] >= '0')
  468.                 {
  469.                     numbers++;
  470.                 }
  471.                 else if(text[i] == ':')
  472.                 {
  473.                     colons++;
  474.                 }
  475.                 else continue;
  476.             }
  477.             if(dots == 3 && colons >= 0 && numbers >= 6)
  478.             {
  479.                 format(pInfo[ playerid ][ LastDetection ], 15, "Advertisement");
  480.                 pInfo[ playerid ][ TextWarns ]++, pInfo[ playerid ][ TotalWarns ]++;
  481.                 if(pInfo[ playerid ][ TextWarns ] < gInfo[ MAX_TEXT_WARNS ] )
  482.                 {
  483.                     SendClientMessage(playerid, -1, "{72FA80}GAMEGUARD: {FFFFFF}Advertising is not allowed!");
  484.                 }
  485.                 else
  486.                 {
  487.                     BlockIpAddressEx(pInfo[ playerid ][ IP ], MINUTES_30, playerid, LEAVETYPE_ADVERTISEMENT);
  488.                     SendLeaveMessage(playerid, LEAVETYPE_KICK);
  489.                 }
  490.                 return 0;
  491.             }
  492.         }
  493.     }
  494.     if(gInfo[ DESYNC ] == true)
  495.     {
  496.         if(pInfo[ playerid ][ TotalWarns ] > 6)
  497.         {
  498.             return 0;
  499.         }
  500.     }
  501.     return 1;
  502. }
  503. public OnRconLoginAttempt(ip[], password[], success)
  504. {
  505.     if(strcmp(RCON_PASSWORD, "changeme"))
  506.     {
  507.         if(gInfo[ ENABLED ] == true)
  508.         {
  509.             if(!success)
  510.             {
  511.                 foreach(Player, i)
  512.                 {
  513.                     if(strcmp(ip, pInfo[ i ][ IP ])) continue;
  514.                     else BlockIpAddressEx(ip, HOURS_1, i, LEAVETYPE_FAIL_LOGIN), SendLeaveMessage(i, LEAVETYPE_KICK);
  515.                 }
  516.             }
  517.             else
  518.             {
  519.                 if(gInfo[ USE_RCON2 ] == true)
  520.                 {
  521.                     foreach(Player, i)
  522.                     {
  523.                         if(strcmp(ip, pInfo[ i ][ IP ])) continue;
  524.                         else ShowPlayerDialog(i, DIALOG_RCON, DIALOG_STYLE_INPUT, "{72FA80}GAMEGUARD: {FFFFFF}RCON Login", "{FFFFFF}You're required to enter the 2nd {72FA80}RCON Password{FFFFFF}.\nIf you fail to do so, you'll be kicked", "Accept", "Cancel");
  525.                     }
  526.                 }
  527.             }
  528.         }
  529.     }
  530.     else
  531.     {
  532.         foreach(Player, i)
  533.         {
  534.             if(strcmp(ip, pInfo[ i ][ IP ])) continue;
  535.             else BlockIpAddressEx(ip, MINUTES_5, i, LEAVETYPE_KICK), SendLeaveMessage(i, LEAVETYPE_KICK), SendClientMessage(i, -1, "{72FA80}GAMEGUARD: {FFFFFF}RCON is disabled!");
  536.         }
  537.     }
  538.     return 1;
  539. }
  540.  
  541. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  542. {
  543.         switch(dialogid)
  544.         {
  545.             case DIALOG_REQUESTANSWER:
  546.             {
  547.                 if(response)
  548.                 {
  549.                     if(strcmp(pInfo[ playerid ][ sAnswer ], inputtext, false))
  550.                     {
  551.                         new
  552.                             string[ 228 ]
  553.                         ;
  554.  
  555.                         pInfo[ playerid ][ DialogWarns ]++, pInfo[ playerid ][ TotalWarns ]++;
  556.  
  557.                         format(string, sizeof(string), "{72FA80}GAMEGUARD: {FFFFFF}Invalid Secret Answer. (%d/%d)", pInfo[ playerid ][ DialogWarns ], gInfo[ MAX_DIALOG_WARNS ]);
  558.                         SendClientMessage(playerid, -1, string);
  559.                         if(pInfo[ playerid ][ DialogWarns ] < gInfo[ MAX_DIALOG_WARNS ])
  560.                         {
  561.                             format(string, sizeof( string ), "{FFFFFF}Your last login IP, and your current IP ( {72FA80}%s{FFFFFF} ) don't match!\nYou're requested to type in your answer of your secret question!\nQuestion: {72FA80}%s{FFFFFF}",
  562.                             pInfo[ playerid ][ IP ], pInfo[ playerid ][ sQuestion ]);
  563.  
  564.                             ShowPlayerDialog(playerid, DIALOG_REQUESTANSWER, DIALOG_STYLE_INPUT, "{72FA80}GAMEGUARD: {FFFFFF}Invalid Secret Answer", string, "Accept", "Cancel");
  565.                         }
  566.                         else
  567.                         {
  568.                             SendLeaveMessage(playerid, LEAVETYPE_KICK);
  569.                             BlockIpAddressEx(pInfo[ playerid ][ IP ], MINUTES_5, playerid);
  570.                         }
  571.                     }
  572.                     else
  573.                     {
  574.                         pInfo[ playerid ][ RequestAnswer ] = false;
  575.                         pInfo[ playerid ][ LoggedIn ] = true;
  576.  
  577.                         SendClientMessage(playerid, -1, "{72FA80}GAMEGUARD: {FFFFFF}Secret Answer accepted!");
  578.                     }
  579.                 }
  580.                 else
  581.                 {
  582.                     SendLeaveMessage(playerid, LEAVETYPE_KICK);
  583.                     BlockIpAddressEx(pInfo[ playerid ][ IP ], MINUTES_15, playerid);
  584.                 }
  585.             }
  586.             case DIALOG_RCON:
  587.             {
  588.                 if(gInfo[ USE_RCON2 ] == true)
  589.                 {
  590.                     if(response)
  591.                     {
  592.                         if(strcmp(inputtext, RCON_PASSWORD))
  593.                         {
  594.                             new
  595.                                 string[ 57 ]
  596.                             ;
  597.  
  598.                             pInfo[ playerid ][ DialogWarns ]++, pInfo[ playerid ][ TotalWarns ]++;
  599.                             format(string, sizeof(string), "{72FA80}GAMEGUARD: {FFFFFF}Invalid RCON Password. (%d/%d)", pInfo[ playerid ][ DialogWarns ], gInfo[ MAX_DIALOG_WARNS ]);
  600.                             SendClientMessage(playerid, -1, string);
  601.  
  602.                             if(pInfo[ playerid ][ DialogWarns ] < gInfo[ MAX_DIALOG_WARNS ])
  603.                             {
  604.                                 ShowPlayerDialog(playerid, DIALOG_RCON, DIALOG_STYLE_INPUT, "{72FA80}GAMEGUARD: {FFFFFF}RCON Login", "{FFFFFF}You're required to enter the 2nd {72FA80}RCON Password{FFFFFF}.\nIf you fail to do so, you'll be kicked", "Accept", "Cancel");
  605.                             }
  606.                             else
  607.                             {
  608.                                 SendLeaveMessage(playerid, LEAVETYPE_KICK);
  609.                                 BlockIpAddressEx(pInfo[ playerid ][ IP ], HOURS_1, playerid, LEAVETYPE_FAIL_LOGIN);
  610.                             }
  611.                         }
  612.                         else
  613.                         {
  614.                             pInfo[ playerid ][ RCONAdmin ] = true;
  615.                             SendClientMessage(playerid, -1, "{72FA80}GAMEGUARD: {FFFFFF}Password Accepted.");
  616.                         }
  617.                     }
  618.                     else
  619.                     {
  620.                         SendLeaveMessage(playerid, LEAVETYPE_KICK);
  621.                         BlockIpAddressEx(pInfo[ playerid ][ IP ], HOURS_1, playerid, LEAVETYPE_FAIL_LOGIN);
  622.                     }
  623.                 }
  624.             }
  625.             case DIALOG_SETTINGS:
  626.             {
  627.                 if(response)
  628.                 {
  629.                     new
  630.                         string[ 386 ]
  631.                     ;
  632.                     switch(listitem)
  633.                     {
  634.                         case 0:
  635.                         {
  636.                             if(strlen(pInfo[ playerid ][ sQuestion ]) >= 7)
  637.                             {
  638.                                 format(string, sizeof(string), "{FFFFFF}Enter a new {72FA80}Secret Question {FFFFFF}below!\nYour current Secret Question is {72FA80}%s",
  639.                                 pInfo[ playerid ][ sQuestion ]);
  640.                             }
  641.                             else
  642.                             {
  643.                                 format(string, sizeof(string), "{FFFFFF}Set up your {72FA80}Secret Question {FFFFFF}below!\n* Make sure you'll remember the question & the answer!");
  644.                             }
  645.                             ShowPlayerDialog(playerid, DIALOG_SETTINGS_QUESTION, DIALOG_STYLE_INPUT, "{72FA80}GAMEGUARD: {FFFFFF}Secret Question", string, "Accept", "Back");
  646.                         }
  647.                         case 1:
  648.                         {
  649.                             if(strlen(pInfo[ playerid ][ sAnswer ]) >= 1)
  650.                             {
  651.                                 format(string, sizeof(string), "{FFFFFF}Enter a new {72FA80}Secret Answer {FFFFFF}below!\nYour current Secret Answer is {72FA80}%s",
  652.                                 pInfo[ playerid ][ sAnswer ]);
  653.                             }
  654.                             else
  655.                             {
  656.                                 format(string, sizeof(string), "{FFFFFF}Set up your {72FA80}Secret Answer {FFFFFF}below!\n* Make sure you'll remember the question & the answer!");
  657.                             }
  658.                             ShowPlayerDialog(playerid, DIALOG_SETTINGS_ANSWER, DIALOG_STYLE_INPUT, "{72FA80}GAMEGUARD: {FFFFFF}Secret Answer", string, "Accept", "Back");
  659.                         }
  660.                         case 2:
  661.                         {
  662.                             if(pInfo[ playerid ][ RCONAdmin ] == true)
  663.                             {
  664.                                 format(string, sizeof(string), "{FFFFFF}Kick Delay: {72FA80}%d ms\n{FFFFFF}Max. Dialog Warnings: {72FA80}%d\n{FFFFFF}Max. Death Warnings: {72FA80}%d\n{FFFFFF}Max. Text Warnings: {72FA80}%d\n{FFFFFF}Max. State Warnings: {72FA80}%d\n{FFFFFF}Max. Shot Warnings: {72FA80}%d\n{FFFFFF}Max. Vehicle Warnings: {72FA80}%d\n{FFFFFF}2nd RCON: {72FA80}%s\n{FFFFFF}GameGuard: {72FA80}%s\n{FFFFFF}DeSync: {72FA80}%s",
  665.                                 gInfo[ KICK_DELAY ], gInfo[ MAX_DIALOG_WARNS ], gInfo[ MAX_DEATH_WARNS ], gInfo[ MAX_TEXT_WARNS ], gInfo[ MAX_STATE_WARNS ], gInfo[ MAX_SHOT_WARNS ], gInfo[ MAX_VEHICLE_WARNS ], RCON2_STATUS(), GAMEGUARD_STATUS(), DESYNC_STATUS());
  666.                                
  667.                                 ShowPlayerDialog(playerid, DIALOG_SETTINGS_ADMIN, DIALOG_STYLE_LIST, "{72FA80}GAMEGUARD: {FFFFFF}GameGuard Settings", string, "Edit", "Back");
  668.                             }
  669.                         }
  670.                         case 3:
  671.                         {
  672.                             if(pInfo[ playerid ][ RCONAdmin ] == true)
  673.                             {
  674.                                 new
  675.                                     dstring[ 999 ], count
  676.                                 ;
  677.                                 foreach(Player, i)
  678.                                 {
  679.                                     if(strlen(pInfo[ i ][ LastDetection ]) <= 3 && pInfo[ i ][ TotalWarns ] <= 2)
  680.                                     {
  681.                                         continue;
  682.                                     }
  683.                                     else
  684.                                     {
  685.                                         count++;
  686.                                         format(dstring, sizeof(dstring), "%s%s({72FA80}%d{FFFFFF}) | {72FA80}%s{FFFFFF} | {72FA80}%s {FFFFFF}({72FA80}%d total detections{FFFFFF})\n",
  687.                                         dstring, pInfo[ i ][ Name ], i, pInfo[ i ][ IP ], pInfo[ i ][ LastDetection ], pInfo[ i ][ TotalWarns ]);
  688.                                     }
  689.  
  690.                                 }
  691.                                 if(count)
  692.                                 {
  693.                                     ShowPlayerDialog(playerid, DIALOG_SETTINGS_ADMIN, DIALOG_STYLE_LIST, "{72FA80}GAMEGUARD: {FFFFFF}Detected Players", dstring, "Edit", "Back");
  694.                                 }
  695.                                 else
  696.                                 {
  697.                                     ShowPlayerDialog(playerid, DIALOG_SETTINGS_ADMIN, DIALOG_STYLE_LIST, "{72FA80}GAMEGUARD: {FFFFFF}Detected Players", "Nobody has been detected.", "Edit", "Back");
  698.                                 }
  699.                             }
  700.                         }
  701.                     }
  702.                 }
  703.             }
  704.             case DIALOG_SETTINGS_QUESTION:
  705.             {
  706.                 new
  707.                     string[ 228 ]
  708.                 ;
  709.                 if(response)
  710.                 {
  711.                     if(strlen(inputtext) >= 8)
  712.                     {
  713.                         new
  714.                             Query[ 98 ]
  715.                         ;
  716.                         format(Query, sizeof(Query), "UPDATE users SET question = '%s' WHERE userid = %d", DB_Escape(inputtext), pInfo[ playerid ][ dbID ]);
  717.                         db_query(Database, Query);
  718.  
  719.                         format(string, sizeof(string), "{72FA80}GAMEGUARD: {FFFFFF}Secret Question changed to {72FA80}%s", inputtext);
  720.                         SendClientMessage(playerid, -1, string);
  721.  
  722.                         format(pInfo[ playerid ][ sQuestion ], 48, "%s", inputtext);
  723.                         if(strlen(pInfo[ playerid ][ sQuestion ]) > 0 && strlen(pInfo[ playerid ][ sAnswer ]) > 0)
  724.                         {
  725.                             pInfo[ playerid ][ QASetup ] = true;
  726.                         }
  727.                         if(strlen(pInfo[ playerid ][ sAnswer ]) >= 1)
  728.                         {
  729.                             format(string, sizeof(string), "{FFFFFF}Enter a new {72FA80}Secret Answer {FFFFFF}below!\nYour current Secret Answer is {72FA80}%s",
  730.                             pInfo[ playerid ][ sAnswer ]);
  731.                         }
  732.                         else
  733.                         {
  734.                             format(string, sizeof(string), "{FFFFFF}Set up your {72FA80}Secret Answer {FFFFFF}below!\n* Make sure you'll remember the question & the answer!");
  735.                         }
  736.                         ShowPlayerDialog(playerid, DIALOG_SETTINGS_ANSWER, DIALOG_STYLE_INPUT, "{72FA80}GAMEGUARD: {FFFFFF}Secret Answer", string, "Accept", "Back");
  737.                     }
  738.                     else
  739.                     {
  740.                         SendClientMessage(playerid, -1, "{72FA80}GAMEGUARD: {FFFFFF}The Question must have at-least 8 characters!");
  741.                         if(pInfo[ playerid ][ RCONAdmin ] == false)
  742.                         {
  743.                             format(string, sizeof(string), "{FFFFFF}Secret Question - {72FA80}%s\n{FFFFFF}Secret Answer - {72FA80}%s",
  744.                             pInfo[ playerid ][ sQuestion ], pInfo[ playerid ][ sAnswer ]);
  745.                         }
  746.                         else
  747.                         {
  748.                             format(string, sizeof(string), "{FFFFFF}Secret Question - {72FA80}%s\n{FFFFFF}Secret Answer - {72FA80}%s\n{FFFFFF}GameGuard Settings\nDetected Players",
  749.                             pInfo[ playerid ][ sQuestion ], pInfo[ playerid ][ sAnswer ]);
  750.                         }
  751.                         ShowPlayerDialog(playerid, DIALOG_SETTINGS, DIALOG_STYLE_LIST, "{72FA80}GAMEGUARD: {FFFFFF}Account Settings", string, "Select", "Close");
  752.                     }
  753.                 }
  754.                 else
  755.                 {
  756.                     if(pInfo[ playerid ][ RCONAdmin ] == false)
  757.                     {
  758.                         format(string, sizeof(string), "{FFFFFF}Secret Question - {72FA80}%s\n{FFFFFF}Secret Answer - {72FA80}%s",
  759.                         pInfo[ playerid ][ sQuestion ], pInfo[ playerid ][ sAnswer ]);
  760.                     }
  761.                     else
  762.                     {
  763.                         format(string, sizeof(string), "{FFFFFF}Secret Question - {72FA80}%s\n{FFFFFF}Secret Answer - {72FA80}%s\n{FFFFFF}GameGuard Settings\nDetected Players",
  764.                         pInfo[ playerid ][ sQuestion ], pInfo[ playerid ][ sAnswer ]);
  765.                     }
  766.                     ShowPlayerDialog(playerid, DIALOG_SETTINGS, DIALOG_STYLE_LIST, "{72FA80}GAMEGUARD: {FFFFFF}Account Settings", string, "Select", "Close");
  767.                 }
  768.             }
  769.             case DIALOG_SETTINGS_ANSWER:
  770.             {
  771.                 new
  772.                     string[ 228 ]
  773.                 ;
  774.                 if(response)
  775.                 {
  776.                     if(strlen(inputtext) >= 1)
  777.                     {
  778.                         new
  779.                             Query[ 98 ]
  780.                         ;
  781.                         format(Query, sizeof(Query), "UPDATE users SET answer = '%s' WHERE userid = %d", DB_Escape(inputtext), pInfo[ playerid ][ dbID ]);
  782.                         db_query(Database, Query);
  783.  
  784.                         format(string, sizeof(string), "{72FA80}GAMEGUARD: {FFFFFF}Secret Answer changed to {72FA80}%s", inputtext);
  785.                         SendClientMessage(playerid, -1, string);
  786.  
  787.                         format(pInfo[ playerid ][ sAnswer ], 48, "%s", inputtext);
  788.                         if(strlen(pInfo[ playerid ][ sQuestion ]) > 0 && strlen(pInfo[ playerid ][ sAnswer ]) > 0)
  789.                         {
  790.                             pInfo[ playerid ][ QASetup ] = true;
  791.                         }
  792.                         if(pInfo[ playerid ][ RCONAdmin ] == false)
  793.                         {
  794.                             format(string, sizeof(string), "{FFFFFF}Secret Question - {72FA80}%s\n{FFFFFF}Secret Answer - {72FA80}%s",
  795.                             pInfo[ playerid ][ sQuestion ], pInfo[ playerid ][ sAnswer ]);
  796.                         }
  797.                         else
  798.                         {
  799.                             format(string, sizeof(string), "{FFFFFF}Secret Question - {72FA80}%s\n{FFFFFF}Secret Answer - {72FA80}%s\n{FFFFFF}GameGuard Settings\nDetected Players",
  800.                             pInfo[ playerid ][ sQuestion ], pInfo[ playerid ][ sAnswer ]);
  801.                         }
  802.                         ShowPlayerDialog(playerid, DIALOG_SETTINGS, DIALOG_STYLE_LIST, "{72FA80}GAMEGUARD: {FFFFFF}Account Settings", string, "Select", "Close");
  803.                     }
  804.                     else
  805.                     {
  806.                         SendClientMessage(playerid, -1, "{72FA80}GAMEGUARD: {FFFFFF}The Answer must have at-least 1 character!");
  807.                         if(pInfo[ playerid ][ RCONAdmin ] == false)
  808.                         {
  809.                             format(string, sizeof(string), "{FFFFFF}Secret Question - {72FA80}%s\n{FFFFFF}Secret Answer - {72FA80}%s",
  810.                             pInfo[ playerid ][ sQuestion ], pInfo[ playerid ][ sAnswer ]);
  811.                         }
  812.                         else
  813.                         {
  814.                             format(string, sizeof(string), "{FFFFFF}Secret Question - {72FA80}%s\n{FFFFFF}Secret Answer - {72FA80}%s\n{FFFFFF}GameGuard Settings\nDetected Players",
  815.                             pInfo[ playerid ][ sQuestion ], pInfo[ playerid ][ sAnswer ]);
  816.                         }
  817.                         ShowPlayerDialog(playerid, DIALOG_SETTINGS, DIALOG_STYLE_LIST, "{72FA80}GAMEGUARD: {FFFFFF}Account Settings", string, "Select", "Close");
  818.                     }
  819.                 }
  820.                 else
  821.                 {
  822.                     if(pInfo[ playerid ][ RCONAdmin ] == false)
  823.                     {
  824.                         format(string, sizeof(string), "{FFFFFF}Secret Question - {72FA80}%s\n{FFFFFF}Secret Answer - {72FA80}%s",
  825.                         pInfo[ playerid ][ sQuestion ], pInfo[ playerid ][ sAnswer ]);
  826.                     }
  827.                     else
  828.                     {
  829.                         format(string, sizeof(string), "{FFFFFF}Secret Question - {72FA80}%s\n{FFFFFF}Secret Answer - {72FA80}%s\n{FFFFFF}GameGuard Settings\nDetected Players",
  830.                         pInfo[ playerid ][ sQuestion ], pInfo[ playerid ][ sAnswer ]);
  831.                     }
  832.                     ShowPlayerDialog(playerid, DIALOG_SETTINGS, DIALOG_STYLE_LIST, "{72FA80}GAMEGUARD: {FFFFFF}Account Settings", string, "Select", "Close");
  833.                 }
  834.             }
  835.             case DIALOG_SETTINGS_ADMIN:
  836.             {
  837.                 new
  838.                     string[ 386 ]
  839.                 ;
  840.                 if(response)
  841.                 {
  842.                     switch(listitem)
  843.                     {
  844.                         case 0:
  845.                         {
  846.                             pInfo[ playerid ][ EditingDialog ] = 1;
  847.                            
  848.                             format(string, sizeof(string), "{FFFFFF}Type in a new value for the {72FA80}kick delay\n{FFFFFF}The current delay is: {72FA80}%d ms",
  849.                             gInfo[ KICK_DELAY ]);
  850.                            
  851.                             ShowPlayerDialog(playerid, DIALOG_SETTINGS_ADMIN2, DIALOG_STYLE_INPUT, "{72FA80}GAMEGUARD: {FFFFFF}GameGuard Settings", string, "Accept", "Back");
  852.                         }
  853.                         case 1:
  854.                         {
  855.                             pInfo[ playerid ][ EditingDialog ] = 2;
  856.                            
  857.                             format(string, sizeof(string), "{FFFFFF}Type in a new value for the {72FA80}Max. Dialog Warnings\n{FFFFFF}The current value is: {72FA80}%d",
  858.                             gInfo[ MAX_DIALOG_WARNS ]);
  859.  
  860.                             ShowPlayerDialog(playerid, DIALOG_SETTINGS_ADMIN2, DIALOG_STYLE_INPUT, "{72FA80}GAMEGUARD: {FFFFFF}GameGuard Settings", string, "Accept", "Back");
  861.                         }
  862.                         case 2:
  863.                         {
  864.                             pInfo[ playerid ][ EditingDialog ] = 3;
  865.                            
  866.                             format(string, sizeof(string), "{FFFFFF}Type in a new value for the {72FA80}Max. Death Warnings\n{FFFFFF}The current value is: {72FA80}%d",
  867.                             gInfo[ MAX_DEATH_WARNS ]);
  868.  
  869.                             ShowPlayerDialog(playerid, DIALOG_SETTINGS_ADMIN2, DIALOG_STYLE_INPUT, "{72FA80}GAMEGUARD: {FFFFFF}GameGuard Settings", string, "Accept", "Back");
  870.                         }
  871.                         case 3:
  872.                         {
  873.                             pInfo[ playerid ][ EditingDialog ] = 4;
  874.  
  875.                             format(string, sizeof(string), "{FFFFFF}Type in a new value for the {72FA80}Max. Text Warnings\n{FFFFFF}The current value is: {72FA80}%d",
  876.                             gInfo[ MAX_TEXT_WARNS ]);
  877.  
  878.                             ShowPlayerDialog(playerid, DIALOG_SETTINGS_ADMIN2, DIALOG_STYLE_INPUT, "{72FA80}GAMEGUARD: {FFFFFF}GameGuard Settings", string, "Accept", "Back");
  879.                         }
  880.                         case 4:
  881.                         {
  882.                             pInfo[ playerid ][ EditingDialog ] = 5;
  883.  
  884.                             format(string, sizeof(string), "{FFFFFF}Type in a new value for the {72FA80}Max. State Warnings\n{FFFFFF}The current value is: {72FA80}%d",
  885.                             gInfo[ MAX_STATE_WARNS ]);
  886.  
  887.                             ShowPlayerDialog(playerid, DIALOG_SETTINGS_ADMIN2, DIALOG_STYLE_INPUT, "{72FA80}GAMEGUARD: {FFFFFF}GameGuard Settings", string, "Accept", "Back");
  888.                         }
  889.                         case 5:
  890.                         {
  891.                             pInfo[ playerid ][ EditingDialog ] = 6;
  892.  
  893.                             format(string, sizeof(string), "{FFFFFF}Type in a new value for the {72FA80}Max. Shot Warnings\n{FFFFFF}The current value is: {72FA80}%d",
  894.                             gInfo[ MAX_SHOT_WARNS ]);
  895.  
  896.                             ShowPlayerDialog(playerid, DIALOG_SETTINGS_ADMIN2, DIALOG_STYLE_INPUT, "{72FA80}GAMEGUARD: {FFFFFF}GameGuard Settings", string, "Accept", "Back");
  897.                         }
  898.                         case 6:
  899.                         {
  900.                             pInfo[ playerid ][ EditingDialog ] = 7;
  901.  
  902.                             format(string, sizeof(string), "{FFFFFF}Type in a new value for the {72FA80}Max. Vehicle Warnings\n{FFFFFF}The current value is: {72FA80}%d",
  903.                             gInfo[ MAX_VEHICLE_WARNS ]);
  904.  
  905.                             ShowPlayerDialog(playerid, DIALOG_SETTINGS_ADMIN2, DIALOG_STYLE_INPUT, "{72FA80}GAMEGUARD: {FFFFFF}GameGuard Settings", string, "Accept", "Back");
  906.                         }
  907.                         case 7:
  908.                         {
  909.                             if(gInfo[ USE_RCON2 ] == true)
  910.                             {
  911.                                 gInfo[ USE_RCON2 ] = false;
  912.                             }
  913.                             else
  914.                             {
  915.                                 gInfo[ USE_RCON2 ] = true;
  916.                             }
  917.                            
  918.                             format(string, sizeof(string), "{FFFFFF}Kick Delay: {72FA80}%d ms\n{FFFFFF}Max. Dialog Warnings: {72FA80}%d\n{FFFFFF}Max. Death Warnings: {72FA80}%d\n{FFFFFF}Max. Text Warnings: {72FA80}%d\n{FFFFFF}Max. State Warnings: {72FA80}%d\n{FFFFFF}Max. Shot Warnings: {72FA80}%d\n{FFFFFF}Max. Vehicle Warnings: {72FA80}%d\n{FFFFFF}2nd RCON: {72FA80}%s\n{FFFFFF}GameGuard: {72FA80}%s\n{FFFFFF}DeSync: {72FA80}%s",
  919.                             gInfo[ KICK_DELAY ], gInfo[ MAX_DIALOG_WARNS ], gInfo[ MAX_DEATH_WARNS ], gInfo[ MAX_TEXT_WARNS ], gInfo[ MAX_STATE_WARNS ], gInfo[ MAX_SHOT_WARNS ], gInfo[ MAX_VEHICLE_WARNS ], RCON2_STATUS(), GAMEGUARD_STATUS(), DESYNC_STATUS());
  920.  
  921.                             ShowPlayerDialog(playerid, DIALOG_SETTINGS_ADMIN, DIALOG_STYLE_LIST, "{72FA80}GAMEGUARD: {FFFFFF}GameGuard Settings", string, "Edit", "Back");
  922.                         }
  923.                         case 8:
  924.                         {
  925.                             if(gInfo[ ENABLED ] == true)
  926.                             {
  927.                                 gInfo[ ENABLED ] = false;
  928.                             }
  929.                             else
  930.                             {
  931.                                 gInfo[ ENABLED ] = true;
  932.                                 gInfo[ DESYNC ] = false;
  933.                             }
  934.                            
  935.                             format(string, sizeof(string), "{FFFFFF}Kick Delay: {72FA80}%d ms\n{FFFFFF}Max. Dialog Warnings: {72FA80}%d\n{FFFFFF}Max. Death Warnings: {72FA80}%d\n{FFFFFF}Max. Text Warnings: {72FA80}%d\n{FFFFFF}Max. State Warnings: {72FA80}%d\n{FFFFFF}Max. Shot Warnings: {72FA80}%d\n{FFFFFF}Max. Vehicle Warnings: {72FA80}%d\n{FFFFFF}2nd RCON: {72FA80}%s\n{FFFFFF}GameGuard: {72FA80}%s\n{FFFFFF}DeSync: {72FA80}%s",
  936.                             gInfo[ KICK_DELAY ], gInfo[ MAX_DIALOG_WARNS ], gInfo[ MAX_DEATH_WARNS ], gInfo[ MAX_TEXT_WARNS ], gInfo[ MAX_STATE_WARNS ], gInfo[ MAX_SHOT_WARNS ], gInfo[ MAX_VEHICLE_WARNS ], RCON2_STATUS(), GAMEGUARD_STATUS(), DESYNC_STATUS());
  937.  
  938.                             ShowPlayerDialog(playerid, DIALOG_SETTINGS_ADMIN, DIALOG_STYLE_LIST, "{72FA80}GAMEGUARD: {FFFFFF}GameGuard Settings", string, "Edit", "Back");
  939.                         }
  940.                         case 9:
  941.                         {
  942.                             if(gInfo[ DESYNC ] == true)
  943.                             {
  944.                                 gInfo[ DESYNC ] = false;
  945.                             }
  946.                             else
  947.                             {
  948.                                 gInfo[ DESYNC ] = true;
  949.                                 gInfo[ ENABLED ] = false;
  950.                             }
  951.  
  952.                             format(string, sizeof(string), "{FFFFFF}Kick Delay: {72FA80}%d ms\n{FFFFFF}Max. Dialog Warnings: {72FA80}%d\n{FFFFFF}Max. Death Warnings: {72FA80}%d\n{FFFFFF}Max. Text Warnings: {72FA80}%d\n{FFFFFF}Max. State Warnings: {72FA80}%d\n{FFFFFF}Max. Shot Warnings: {72FA80}%d\n{FFFFFF}Max. Vehicle Warnings: {72FA80}%d\n{FFFFFF}2nd RCON: {72FA80}%s\n{FFFFFF}GameGuard: {72FA80}%s\n{FFFFFF}DeSync: {72FA80}%s",
  953.                             gInfo[ KICK_DELAY ], gInfo[ MAX_DIALOG_WARNS ], gInfo[ MAX_DEATH_WARNS ], gInfo[ MAX_TEXT_WARNS ], gInfo[ MAX_STATE_WARNS ], gInfo[ MAX_SHOT_WARNS ], gInfo[ MAX_VEHICLE_WARNS ], RCON2_STATUS(), GAMEGUARD_STATUS(), DESYNC_STATUS());
  954.  
  955.                             ShowPlayerDialog(playerid, DIALOG_SETTINGS_ADMIN, DIALOG_STYLE_LIST, "{72FA80}GAMEGUARD: {FFFFFF}GameGuard Settings", string, "Edit", "Back");
  956.                         }
  957.                     }
  958.                 }
  959.                 else
  960.                 {
  961.                     if(pInfo[ playerid ][ RCONAdmin ] == false)
  962.                     {
  963.                         format(string, sizeof(string), "{FFFFFF}Secret Question - {72FA80}%s\n{FFFFFF}Secret Answer - {72FA80}%s",
  964.                         pInfo[ playerid ][ sQuestion ], pInfo[ playerid ][ sAnswer ]);
  965.                     }
  966.                     else
  967.                     {
  968.                         format(string, sizeof(string), "{FFFFFF}Secret Question - {72FA80}%s\n{FFFFFF}Secret Answer - {72FA80}%s\n{FFFFFF}GameGuard Settings\nDetected Players",
  969.                         pInfo[ playerid ][ sQuestion ], pInfo[ playerid ][ sAnswer ]);
  970.                     }
  971.                     ShowPlayerDialog(playerid, DIALOG_SETTINGS, DIALOG_STYLE_LIST, "{72FA80}GAMEGUARD: {FFFFFF}Account Settings", string, "Select", "Close");
  972.                 }
  973.             }
  974.             case DIALOG_SETTINGS_ADMIN2:
  975.             {
  976.                 new
  977.                     string[ 366 ]
  978.                 ;
  979.                 if(response)
  980.                 {
  981.                     switch(pInfo[ playerid ][ EditingDialog ])
  982.                     {
  983.                         case 1:
  984.                         {
  985.                             if(strval(inputtext) < 100 || strval(inputtext) > 500)
  986.                             {
  987.                                 SendClientMessage(playerid, -1, "{72FA80}GAMEGUARD: {FFFFFF}The time must be between 100ms and 500ms!");
  988.                             }
  989.                             else
  990.                             {
  991.                                 gInfo[ KICK_DELAY ] = strval(inputtext);
  992.                                
  993.                                 format(string, sizeof(string), "{72FA80}GAMEGUARD: {FFFFFF}You've set the Kick Delay to %d ms!", gInfo[ KICK_DELAY ]);
  994.                                 SendClientMessage(playerid, -1, string);
  995.                             }
  996.                         }
  997.                         case 2:
  998.                         {
  999.                             if(strval(inputtext) < 3 || strval(inputtext) > 10)
  1000.                             {
  1001.                                 SendClientMessage(playerid, -1, "{72FA80}GAMEGUARD: {FFFFFF}The value must be between 3 and 10!");
  1002.                             }
  1003.                             else
  1004.                             {
  1005.                                 gInfo[ MAX_DIALOG_WARNS ] = strval(inputtext);
  1006.  
  1007.                                 format(string, sizeof(string), "{72FA80}GAMEGUARD: {FFFFFF}You've set the Max. Dialog Warnings to %d!", gInfo[ MAX_DIALOG_WARNS ]);
  1008.                                 SendClientMessage(playerid, -1, string);
  1009.                             }
  1010.                         }
  1011.                         case 3:
  1012.                         {
  1013.                             if(strval(inputtext) < 5 || strval(inputtext) > 15)
  1014.                             {
  1015.                                 SendClientMessage(playerid, -1, "{72FA80}GAMEGUARD: {FFFFFF}The value must be between 5 and 15!");
  1016.                             }
  1017.                             else
  1018.                             {
  1019.                                 gInfo[ MAX_DEATH_WARNS ] = strval(inputtext);
  1020.  
  1021.                                 format(string, sizeof(string), "{72FA80}GAMEGUARD: {FFFFFF}You've set the Max. Death Warnings to %d!", gInfo[ MAX_DEATH_WARNS ]);
  1022.                                 SendClientMessage(playerid, -1, string);
  1023.                             }
  1024.                         }
  1025.                         case 4:
  1026.                         {
  1027.                             if(strval(inputtext) < 5 || strval(inputtext) > 10)
  1028.                             {
  1029.                                 SendClientMessage(playerid, -1, "{72FA80}GAMEGUARD: {FFFFFF}The value must be between 5 and 10!");
  1030.                             }
  1031.                             else
  1032.                             {
  1033.                                 gInfo[ MAX_TEXT_WARNS ] = strval(inputtext);
  1034.  
  1035.                                 format(string, sizeof(string), "{72FA80}GAMEGUARD: {FFFFFF}You've set the Max. Text Warnings to %d!", gInfo[ MAX_TEXT_WARNS ]);
  1036.                                 SendClientMessage(playerid, -1, string);
  1037.                             }
  1038.                         }
  1039.                         case 5:
  1040.                         {
  1041.                             if(strval(inputtext) < 5 || strval(inputtext) > 15)
  1042.                             {
  1043.                                 SendClientMessage(playerid, -1, "{72FA80}GAMEGUARD: {FFFFFF}The value must be between 5 and 15!");
  1044.                             }
  1045.                             else
  1046.                             {
  1047.                                 gInfo[ MAX_STATE_WARNS ] = strval(inputtext);
  1048.  
  1049.                                 format(string, sizeof(string), "{72FA80}GAMEGUARD: {FFFFFF}You've set the Max. State Warnings to %d!", gInfo[ MAX_STATE_WARNS ]);
  1050.                                 SendClientMessage(playerid, -1, string);
  1051.                             }
  1052.                         }
  1053.                         case 6:
  1054.                         {
  1055.                             if(strval(inputtext) < 5 || strval(inputtext) > 15)
  1056.                             {
  1057.                                 SendClientMessage(playerid, -1, "{72FA80}GAMEGUARD: {FFFFFF}The value must be between 5 and 15!");
  1058.                             }
  1059.                             else
  1060.                             {
  1061.                                 gInfo[ MAX_SHOT_WARNS ] = strval(inputtext);
  1062.  
  1063.                                 format(string, sizeof(string), "{72FA80}GAMEGUARD: {FFFFFF}You've set the Max. Shot Warnings to %d!", gInfo[ MAX_SHOT_WARNS ]);
  1064.                                 SendClientMessage(playerid, -1, string);
  1065.                             }
  1066.                         }
  1067.                         case 7:
  1068.                         {
  1069.                             if(strval(inputtext) < 5 || strval(inputtext) > 10)
  1070.                             {
  1071.                                 SendClientMessage(playerid, -1, "{72FA80}GAMEGUARD: {FFFFFF}The value must be between 5 and 10!");
  1072.                             }
  1073.                             else
  1074.                             {
  1075.                                 gInfo[ MAX_VEHICLE_WARNS ] = strval(inputtext);
  1076.  
  1077.                                 format(string, sizeof(string), "{72FA80}GAMEGUARD: {FFFFFF}You've set the Max. Vehicle Warnings to %d!", gInfo[ MAX_VEHICLE_WARNS ]);
  1078.                                 SendClientMessage(playerid, -1, string);
  1079.                             }
  1080.                         }
  1081.                     }
  1082.                     format(string, sizeof(string), "{FFFFFF}Kick Delay: {72FA80}%d ms\n{FFFFFF}Max. Dialog Warnings: {72FA80}%d\n{FFFFFF}Max. Death Warnings: {72FA80}%d\n{FFFFFF}Max. Text Warnings: {72FA80}%d\n{FFFFFF}Max. State Warnings: {72FA80}%d\n{FFFFFF}Max. Shot Warnings: {72FA80}%d\n{FFFFFF}Max. Vehicle Warnings: {72FA80}%d\n{FFFFFF}2nd RCON: {72FA80}%s\n{FFFFFF}GameGuard: {72FA80}%s\n{FFFFFF}DeSync: {72FA80}%s",
  1083.                     gInfo[ KICK_DELAY ], gInfo[ MAX_DIALOG_WARNS ], gInfo[ MAX_DEATH_WARNS ], gInfo[ MAX_TEXT_WARNS ], gInfo[ MAX_STATE_WARNS ], gInfo[ MAX_SHOT_WARNS ], gInfo[ MAX_VEHICLE_WARNS ], RCON2_STATUS(), GAMEGUARD_STATUS(), DESYNC_STATUS());
  1084.  
  1085.                     ShowPlayerDialog(playerid, DIALOG_SETTINGS_ADMIN, DIALOG_STYLE_LIST, "{72FA80}GAMEGUARD: {FFFFFF}GameGuard Settings", string, "Edit", "Back");
  1086.                     pInfo[ playerid ][ EditingDialog ] = 0;
  1087.                 }
  1088.                 else
  1089.                 {
  1090.                     format(string, sizeof(string), "{FFFFFF}Kick Delay: {72FA80}%d ms\n{FFFFFF}Max. Dialog Warnings: {72FA80}%d\n{FFFFFF}Max. Death Warnings: {72FA80}%d\n{FFFFFF}Max. Text Warnings: {72FA80}%d\n{FFFFFF}Max. State Warnings: {72FA80}%d\n{FFFFFF}Max. Shot Warnings: {72FA80}%d\n{FFFFFF}Max. Vehicle Warnings: {72FA80}%d\n{FFFFFF}2nd RCON: {72FA80}%s\n{FFFFFF}GameGuard: {72FA80}%s\n{FFFFFF}DeSync: {72FA80}%s",
  1091.                     gInfo[ KICK_DELAY ], gInfo[ MAX_DIALOG_WARNS ], gInfo[ MAX_DEATH_WARNS ], gInfo[ MAX_TEXT_WARNS ], gInfo[ MAX_STATE_WARNS ], gInfo[ MAX_SHOT_WARNS ], gInfo[ MAX_VEHICLE_WARNS ], RCON2_STATUS(), GAMEGUARD_STATUS(), DESYNC_STATUS());
  1092.  
  1093.                     ShowPlayerDialog(playerid, DIALOG_SETTINGS_ADMIN, DIALOG_STYLE_LIST, "{72FA80}GAMEGUARD: {FFFFFF}GameGuard Settings", string, "Edit", "Back");
  1094.                 }
  1095.             }
  1096.         }
  1097.         return 1;
  1098. }
  1099.  
  1100. public OnPlayerStateChange(playerid, newstate, oldstate)
  1101. {
  1102.     if(gInfo[ ENABLED ] == true)
  1103.     {
  1104.         if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
  1105.         {
  1106.             new
  1107.                 vID
  1108.             ;
  1109.             vID = GetPlayerVehicleID(playerid);
  1110.            
  1111.             if(vID != pInfo[ playerid ][ VehicleID ] && gettime()-pInfo[ playerid ][ LastEntered ] < 2)
  1112.             {
  1113.                 format(pInfo[ playerid ][ LastDetection ], 9, "Car-Warp");
  1114.                 pInfo[ playerid ][ StateWarns ]++, pInfo[ playerid ][ TotalWarns ]++;
  1115.                 if(pInfo[ playerid ][ StateWarns ] >= gInfo[ MAX_STATE_WARNS ])
  1116.                 {
  1117.                     SendLeaveMessage(playerid, LEAVETYPE_CHEAT);
  1118.                     BlockIpAddressEx(pInfo[ playerid ][ IP ], HOURS_1, playerid, LEAVETYPE_CHEAT);
  1119.                 }
  1120.             }
  1121.             pInfo[ playerid ][ VehicleID ] = vID;
  1122.             pInfo[ playerid ][ LastEntered ] = gettime();
  1123.         }
  1124.     }
  1125.     return 1;
  1126. }
  1127. public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
  1128. {
  1129.     if(gInfo[ ENABLED ] == true)
  1130.     {
  1131.         if(weaponid != 38 && weaponid != 30 && weaponid != 31 && weaponid != 28 && weaponid != 32)
  1132.         {
  1133.             if(gettime() - pInfo[ playerid ][ LastShot ] <= 1)
  1134.             {
  1135.                 pInfo[ playerid ][ TimesShot ]++;
  1136.             }
  1137.             else
  1138.             {
  1139.                 pInfo[ playerid ][ TimesShot ] = 0;
  1140.             }
  1141.            
  1142.             if(pInfo[ playerid ][ TimesShot ] >= gInfo[ MAX_BULLETS ])
  1143.             {
  1144.                 format(pInfo[ playerid ][ LastDetection ], 11, "Rapid-Fire");
  1145.                 if(pInfo[ playerid ][ BulletsToDesync ] >= 1)
  1146.                 {
  1147.                     pInfo[ playerid ][ BulletsToDesync ]--;
  1148.                     return 0;
  1149.                 }
  1150.                 else
  1151.                 {
  1152.                     pInfo[ playerid ][ BulletsToDesync ] = gInfo[ MAX_DESYNC_BULLETS ];
  1153.                     return 0;
  1154.                     /*pInfo[ playerid ][ ShotWarns ]++, pInfo[ playerid ][ TotalWarns ]++;
  1155.                     if(pInfo[ playerid ][ ShotWarns ] >= gInfo[ MAX_SHOT_WARNS ])
  1156.                     {
  1157.                         SendLeaveMessage(playerid, LEAVETYPE_CHEAT);
  1158.                         BlockIpAddressEx(pInfo[ playerid ][ IP ], HOURS_1, playerid, LEAVETYPE_CHEAT);
  1159.                     }*/
  1160.                 }
  1161.             }
  1162.             pInfo[ playerid ][ LastShot ] = gettime();
  1163.         }
  1164.         if(hittype == BULLET_HIT_TYPE_PLAYER)
  1165.         {
  1166.             if(!IsPlayerInAnyVehicle(playerid) && !IsPlayerInAnyVehicle(hitid))
  1167.             {
  1168.                 if(GetPlayerSurfingVehicleID(playerid) == INVALID_VEHICLE_ID && GetPlayerSurfingVehicleID(playerid) == INVALID_VEHICLE_ID)
  1169.                 {
  1170.                     new
  1171.                         Float:fOriginX, Float:fOriginY, Float:fOriginZ,
  1172.                         Float:fHitPosX, Float:fHitPosY, Float:fHitPosZ
  1173.                     ;
  1174.                     GetPlayerLastShotVectors(playerid, fOriginX, fOriginY, fOriginZ, fHitPosX, fHitPosY, fHitPosZ);
  1175.                    
  1176.                     if(!IsPlayerInRangeOfPoint(hitid, 3.0, fX, fY, fZ))
  1177.                     {
  1178.                         format(pInfo[ playerid ][ LastDetection ], 14, "Silent Aimbot");
  1179.                         if(pInfo[ playerid ][ BulletsToDesync ] >= 1)
  1180.                         {
  1181.                             pInfo[ playerid ][ BulletsToDesync ]--;
  1182.                             return 0;
  1183.                         }
  1184.                         else
  1185.                         {
  1186.                             pInfo[ playerid ][ BulletsToDesync ] = gInfo[ MAX_DESYNC_BULLETS ];
  1187.                             return 0;
  1188.                         }
  1189.                     }
  1190.                 }
  1191.             }
  1192.         }
  1193.     }
  1194.     if(gInfo[ DESYNC ] == true)
  1195.     {
  1196.         if(pInfo[ playerid ][ TotalWarns ] > 6)
  1197.         {
  1198.             return 0;
  1199.         }
  1200.     }
  1201.     return 1;
  1202. }
  1203.  
  1204. public OnVehicleMod(playerid, vehicleid, componentid)
  1205. {
  1206.     if(gInfo[ ENABLED ] == true)
  1207.     {
  1208.         if(GetPlayerInterior(playerid) == 0)
  1209.         {
  1210.             format(pInfo[ playerid ][ LastDetection ], 12, "Car modding");
  1211.             pInfo[ playerid ][ VehicleWarns ]++, pInfo[ playerid ][ TotalWarns ]++;
  1212.             if(pInfo[ playerid ][ VehicleWarns ] >= gInfo[ MAX_VEHICLE_WARNS ])
  1213.             {
  1214.                 SendLeaveMessage(playerid, LEAVETYPE_CHEAT);
  1215.                 BlockIpAddressEx(pInfo[ playerid ][ IP ], HOURS_1, playerid, LEAVETYPE_CHEAT);
  1216.             }
  1217.             return 0;
  1218.         }
  1219.     }
  1220.     if(gInfo[ DESYNC ] == true)
  1221.     {
  1222.         if(pInfo[ playerid ][ TotalWarns ] > 6)
  1223.         {
  1224.             return 0;
  1225.         }
  1226.     }
  1227.     return 1;
  1228. }
  1229.  
  1230. public OnPlayerUpdate(playerid)
  1231. {
  1232.     if(gInfo[ DESYNC ] == true)
  1233.     {
  1234.         if(pInfo[ playerid ][ TotalWarns ] > 6)
  1235.         {
  1236.             return 0;
  1237.         }
  1238.     }
  1239.     return 1;
  1240. }
  1241.  
  1242. CMD:settings(playerid, params[])
  1243. {
  1244.     new
  1245.         string[ 228 ]
  1246.     ;
  1247.     if(pInfo[ playerid ][ RCONAdmin ] == false)
  1248.     {
  1249.         format(string, sizeof(string), "{FFFFFF}Secret Question - {72FA80}%s\n{FFFFFF}Secret Answer - {72FA80}%s",
  1250.         pInfo[ playerid ][ sQuestion ], pInfo[ playerid ][ sAnswer ]);
  1251.            
  1252.         ShowPlayerDialog(playerid, DIALOG_SETTINGS, DIALOG_STYLE_LIST, "{72FA80}GAMEGUARD: {FFFFFF}Account Settings", string, "Select", "Close");
  1253.     }
  1254.     else
  1255.     {
  1256.         format(string, sizeof(string), "{FFFFFF}Secret Question - {72FA80}%s\n{FFFFFF}Secret Answer - {72FA80}%s\n{FFFFFF}GameGuard Settings\nDetected Players",
  1257.         pInfo[ playerid ][ sQuestion ], pInfo[ playerid ][ sAnswer ]);
  1258.            
  1259.         ShowPlayerDialog(playerid, DIALOG_SETTINGS, DIALOG_STYLE_LIST, "{72FA80}GAMEGUARD: {FFFFFF}Account Settings", string, "Select", "Close");
  1260.     }
  1261.     return 1;
  1262. }
  1263.  
  1264. CMD:test(playerid,params[])
  1265. {
  1266.     RepairVehicle(GetPlayerVehicleID(playerid));
  1267.     SetVehicleVelocity(GetPlayerVehicleID(playerid),500,500,5);
  1268.     return 1;
  1269. }
  1270. DB_Escape(text[])
  1271. {
  1272.     new
  1273.         ret[80* 2],
  1274.         ch,
  1275.         i,
  1276.         j
  1277.     ;
  1278.     while ((ch = text[i++]) && j < sizeof (ret))
  1279.     {
  1280.         if (ch == '\'')
  1281.         {
  1282.             if (j < sizeof (ret) - 2)
  1283.             {
  1284.                 ret[j++] = '\'';
  1285.                 ret[j++] = '\'';
  1286.             }
  1287.         }
  1288.         else if (j < sizeof (ret))
  1289.         {
  1290.             ret[j++] = ch;
  1291.         }
  1292.         else
  1293.         {
  1294.             j++;
  1295.         }
  1296.     }
  1297.     ret[sizeof (ret) - 1] = '\0';
  1298.     return ret;
  1299. }
  1300. SendLeaveMessage(playerid, leavetype = LEAVETYPE_KICK)
  1301. {
  1302.     new
  1303.         string[ 108 ]
  1304.     ;
  1305.     switch(leavetype)
  1306.     {
  1307.         case LEAVETYPE_KICK:
  1308.         {
  1309.             format(string, sizeof(string), "{72FA80}GAMEGUARD: {FFFFFF}Player %s left the game ({72FA80}Kicked{FFFFFF})",
  1310.             pInfo[ playerid ][ Name ]);
  1311.         }
  1312.         case LEAVETYPE_EXPLOIT:
  1313.         {
  1314.             format(string, sizeof(string), "{72FA80}GAMEGUARD: {FFFFFF}Player %s left the game ({72FA80}Exploit Usage{FFFFFF})",
  1315.             pInfo[ playerid ][ Name ]);
  1316.         }
  1317.         case LEAVETYPE_CHEAT:
  1318.         {
  1319.             format(string, sizeof(string), "{72FA80}GAMEGUARD: {FFFFFF}Player %s left the game ({72FA80}Cheat Usage{FFFFFF})",
  1320.             pInfo[ playerid ][ Name ]);
  1321.         }
  1322.         case LEAVETYPE_UNTRUSTED:
  1323.         {
  1324.             format(string, sizeof(string), "{72FA80}GAMEGUARD: {FFFFFF}Player %s left the game ({72FA80}Untrusted{FFFFFF})",
  1325.             pInfo[ playerid ][ Name ]);
  1326.         }
  1327.         case LEAVETYPE_BANNED:
  1328.         {
  1329.             format(string, sizeof(string), "{72FA80}GAMEGUARD: {FFFFFF}Player %s left the game ({72FA80}Banned{FFFFFF})",
  1330.             pInfo[ playerid ][ Name ]);
  1331.         }
  1332.     }
  1333.     SendClientMessageToAll(-1, string);
  1334. }
  1335.  
  1336.  
  1337. BlockIpAddressEx(ip[], blocktime, playerid = INVALID_PLAYER_ID, blocktype = LEAVETYPE_BANNED)
  1338. {
  1339.     pInfo[ playerid ][ Untrusted ]++;
  1340.    
  1341.     BlockIpAddress(ip, blocktime);
  1342.     if(playerid != INVALID_PLAYER_ID)
  1343.     {
  1344.         if(pInfo[ playerid ][ Untrusted ] >= gInfo[ MAX_UNTRUSTED_WARNS ])
  1345.         {
  1346.             switch(blocktype)
  1347.             {
  1348.                 case LEAVETYPE_EXPLOIT: Ban_(playerid, "Exploit Infraction");
  1349.                 case LEAVETYPE_CHEAT: Ban_(playerid, "Cheat Infraction");
  1350.                 case LEAVETYPE_UNTRUSTED: Ban_(playerid, "Untrusted Account");
  1351.                 case LEAVETYPE_ADVERTISEMENT: Ban_(playerid, "Advertising");
  1352.                 case LEAVETYPE_FAIL_LOGIN: Ban_(playerid, "Failed RCON Login");
  1353.             }
  1354.         }
  1355.         else
  1356.         {
  1357.             SetTimerEx("KickEx", gInfo[ KICK_DELAY ], false, "i", playerid);
  1358.         }
  1359.     }
  1360. }
  1361. Ban_(playerid, reason[])
  1362. {
  1363.     new
  1364.         Query[ 224 ],
  1365.         day, month, year,
  1366.         second, minute, hour
  1367.     ;
  1368.     getdate(day, month, year);
  1369.     gettime(hour, minute, second);
  1370.    
  1371.     format(Query, sizeof( Query ), "INSERT INTO banned (bannedname, bannedip, banreason, date, time) VALUES ('%s', '%s', '%s', '%d/%d/%d', '%d:%d:%d')",
  1372.     DB_Escape(pInfo[ playerid ][ Name ]), pInfo[ playerid ][ IP ], DB_Escape(reason), day, month, year, hour, minute, second);
  1373.    
  1374.     db_query(Database, Query);
  1375.    
  1376.     SetTimerEx("KickEx", gInfo[ KICK_DELAY ], false, "i", playerid);
  1377. }
  1378.  
  1379. RCON2_STATUS()
  1380. {
  1381.     new
  1382.         status[ 9 ]
  1383.     ;
  1384.     switch(gInfo[ USE_RCON2 ])
  1385.     {
  1386.         case true:
  1387.         {
  1388.             status = "Enabled";
  1389.         }
  1390.         case false:
  1391.         {
  1392.             status = "Disabled";
  1393.         }
  1394.     }
  1395.     return status;
  1396. }
  1397. GAMEGUARD_STATUS()
  1398. {
  1399.     new
  1400.         status[ 9 ]
  1401.     ;
  1402.     switch(gInfo[ ENABLED ])
  1403.     {
  1404.         case true:
  1405.         {
  1406.             status = "Enabled";
  1407.         }
  1408.         case false:
  1409.         {
  1410.             status = "Disabled";
  1411.         }
  1412.     }
  1413.     return status;
  1414. }
  1415. DESYNC_STATUS()
  1416. {
  1417.     new
  1418.         status[ 9 ]
  1419.     ;
  1420.     switch(gInfo[ DESYNC ])
  1421.     {
  1422.         case true:
  1423.         {
  1424.             status = "Enabled";
  1425.         }
  1426.         case false:
  1427.         {
  1428.             status = "Disabled";
  1429.         }
  1430.     }
  1431.     return status;
  1432. }
  1433.  
  1434.  
  1435. forward KickEx(playerid);
  1436. public KickEx(playerid)
  1437. {
  1438.     Kick(playerid);
  1439.     return 1;
  1440. }
  1441.  
  1442. /*GetPlayerSpeed(playerid)
  1443. {
  1444.     new Float:velocity[ 4 ];
  1445.     if(IsPlayerInAnyVehicle(playerid))
  1446.     {
  1447.         GetVehicleVelocity(GetPlayerVehicleID(playerid), velocity[ 0 ], velocity[ 1 ], velocity[ 2 ]);
  1448.     }
  1449.     else
  1450.     {
  1451.         GetPlayerVelocity(playerid, velocity[ 0 ], velocity[ 1 ], velocity[ 2 ]);
  1452.     }
  1453.     velocity[3] = floatsqroot(floatpower(floatabs(velocity[ 0 ]), 2.0) + floatpower(floatabs(velocity[ 1 ]), 2.0) + floatpower(floatabs(velocity[ 2 ]), 2.0)) * 181.03625;
  1454.     return floatround(velocity[ 3 ]);
  1455. }
  1456.  
  1457. forward SpeedCheck(playerid);
  1458. public SpeedCheck(playerid)
  1459. {
  1460.     if(pInfo[ playerid ][ LoggedIn ] == false) return 1;
  1461.     else if(gInfo[ ENABLED ] == false)
  1462.     {
  1463.         KillTimer(pInfo[ playerid ][ Timer ]);
  1464.         pInfo[ playerid ][ Timer ] = -1;
  1465.     }
  1466.     else
  1467.     {
  1468.         if(IsPlayerInAnyVehicle( playerid ))
  1469.         {
  1470.             if(GetPlayerSpeed( playerid ) >= 271)
  1471.             {
  1472.                 new
  1473.                     vehicleID,
  1474.                     Float:velocity[ 3 ]
  1475.                 ;
  1476.                 vehicleID = GetPlayerVehicleID(playerid);
  1477.                 GetVehicleVelocity(vehicleID, velocity[ 0 ], velocity[ 1 ], velocity[ 2 ]);
  1478.                 do
  1479.                 {
  1480.                     SetVehicleVelocity(vehicleID, velocity[ 0 ]/2, velocity[ 1 ]/2, velocity[ 2 ]/2);
  1481.                 }
  1482.                 while(GetPlayerSpeed( playerid ) >= 271);
  1483.             }
  1484.         }
  1485.     }
  1486.     return 1;
  1487. }*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement