Jyothiranands

Jyothiranand's Admin ( MySQL )

Oct 5th, 2018
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.     *****************************-
  3.     Scripter: Jyothiranand. S
  4.     Credits:-
  5.     Gammix - Ban System
  6.     *****************************-
  7. */
  8. #include <a_samp>
  9. #include <a_mysql>
  10. #include <kickbanfix>
  11. #include <zcmd>
  12. #include <easydialog>
  13. #include <sscanf2>
  14. #include <TimestampToDate>
  15.  
  16. new connection = -1;
  17.  
  18. native WP_Hash(buffer[], len, const str[]);
  19.  
  20. #define SQL_HOST "localhost"
  21. #define SQL_USER "root"
  22. #define SQL_DBSE "jadmin"
  23. #define SQL_PASS ""
  24.  
  25. #define DIALOG_LOGIN 1
  26. #define DIALOG_REGISTER 2
  27. #define DIALOG_ADMINCMDS 3
  28. #define DIALOG_COMMANDS 4
  29. #define DIALOG_ADMINS 5
  30. #define DIALOG_STATS 6
  31.  
  32. #define WHITE 0xFFFFFFAA
  33. #define GREY 0xAFAFAFAA
  34. #define RED 0xFF0000AA
  35. #define YELLOW 0xFFFF00AA
  36. #define LIGHTBLUE 0x33CCFFAA
  37.  
  38. #define CHAT_WHITE "{FFFFFF}"
  39. #define CHAT_GREY "{AFAFAF}"
  40. #define CHAT_RED "{FF0000}"
  41. #define CHAT_YELLOW "{FFFF00}"
  42. #define CHAT_LIGHTBLUE "{33CCFF}"
  43.  
  44. enum playerInfo
  45. {
  46.     jID,
  47.     jName[MAX_PLAYER_NAME],
  48.     jPassword[129],
  49.     jScore,
  50.     jMoney,
  51.     jKills,
  52.     jDeaths,
  53.     jWanted,
  54.     jMutedTime,
  55.     jLevel,
  56.     jVIP,
  57.     jHelper,
  58.     jLoginAttempts,
  59.     jWarns,
  60.     jVeh,
  61.     onDuty,
  62.     bool:jLogged
  63. };
  64. new PlayerData[MAX_PLAYERS][playerInfo];
  65.  
  66. #define COLOR_WHITE (0xFFFFFFFF)
  67. #define COL_WHITE "{FFFFFF}"
  68.  
  69. #define COLOR_RED (0xFF0400FF)
  70. #define COL_RED "{FF0400}"
  71.  
  72. #define COLOR_TOMATO (0xFF6347FF)
  73. #define COL_TOMATO "{FF6347}"
  74.  
  75. #define COLOR_PINK (0xFF0090FF)
  76. #define COL_PINK "{FF0090}"
  77.  
  78. #define COLOR_GREEN (0x6AFF2AFF)
  79. #define COL_GREEN "{6AFF2A}"
  80.  
  81. const KICK_DELAY = 50; // in ms
  82.  
  83. const BAN_MASK = (-1 << (32 - (/*this is the CIDR ip detection range [def: 26]*/26)));
  84.  
  85. new DB:banDatabase;
  86.  
  87. new banTargetID[MAX_PLAYERS];
  88. new banTargetDays[MAX_PLAYERS];
  89. new banTargetReason[MAX_PLAYERS][64];
  90.  
  91. new unbanTargetID[MAX_PLAYERS];
  92. new unbanTargetName[MAX_PLAYERS][MAX_PLAYER_NAME];
  93. new unbanTargetIp[MAX_PLAYERS][18];
  94.  
  95. new Text:banTextDraw[2];
  96.  
  97. new TotalConnectedPlayers;
  98.  
  99. forward OnAccountDataLoaded(playerid);
  100. forward OnAccountCreate(playerid);
  101. forward KickPlayer(playerid);
  102. forward MuteCheck();
  103. native IsValidVehicle(vehicleid);
  104.  
  105. main(){}
  106.  
  107. public OnFilterScriptInit()
  108. {
  109.     mysql_log(LOG_ERROR | LOG_WARNING, LOG_TYPE_HTML);
  110.     connection = mysql_connect(SQL_HOST, SQL_USER, SQL_DBSE, SQL_PASS);
  111.     print("..............................");
  112.     print("..............................");
  113.     print("JAdmin :: by :: Jyothiranand.S");
  114.     print("..............................");
  115.     print("..............................");
  116.     banDatabase = db_open("bans.db");
  117.  
  118.     db_query(banDatabase, "PRAGMA synchronous = NORMAL");
  119.     db_query(banDatabase, "PRAGMA journal_mode = WAL");
  120.  
  121.     db_query(banDatabase, "CREATE TABLE IF NOT EXISTS `users` \
  122.         (`id` INTEGER PRIMARY KEY, \
  123.         `name` VARCHAR(24), \
  124.         `ip` VARCHAR(18), \
  125.         `longip` INTEGER, \
  126.         `expire_timestamp` INTEGER, \
  127.         `register_timestamp` INTEGER, \
  128.         `last_activity_timestamp` INTEGER, \
  129.         `admin` VRACHAR(24), \
  130.         `reason` VARCHAR(128)\
  131.     )");
  132.  
  133.     banTextDraw[0] = TextDrawCreate(0.000000, 0.000000, "_");
  134.     TextDrawBackgroundColor(banTextDraw[0], 255);
  135.     TextDrawFont(banTextDraw[0], 1);
  136.     TextDrawLetterSize(banTextDraw[0], 0.000000, 480.000000);
  137.     TextDrawColor(banTextDraw[0], -1);
  138.     TextDrawSetOutline(banTextDraw[0], 0);
  139.     TextDrawSetProportional(banTextDraw[0], 1);
  140.     TextDrawSetShadow(banTextDraw[0], 1);
  141.     TextDrawUseBox(banTextDraw[0], 1);
  142.     TextDrawBoxColor(banTextDraw[0], 255);
  143.     TextDrawTextSize(banTextDraw[0], 640.000000, 0.000000);
  144.     TextDrawSetSelectable(banTextDraw[0], 0);
  145.  
  146.     banTextDraw[1] = TextDrawCreate(310.000000, 200.000000, "~r~You are banned!");
  147.     TextDrawAlignment(banTextDraw[1], 2);
  148.     TextDrawBackgroundColor(banTextDraw[1], 255);
  149.     TextDrawFont(banTextDraw[1], 1);
  150.     TextDrawLetterSize(banTextDraw[1], 1.400000, 8.000000);
  151.     TextDrawColor(banTextDraw[1], -1);
  152.     TextDrawSetOutline(banTextDraw[1], 0);
  153.     TextDrawSetProportional(banTextDraw[1], 1);
  154.     TextDrawSetShadow(banTextDraw[1], 1);
  155.     TextDrawSetSelectable(banTextDraw[1], 0);
  156.    
  157.     SetTimer("MuteCheck", 1000, true);
  158.     return 1;
  159. }
  160.  
  161. public OnFilterScriptExit()
  162. {
  163.     for(new i = 0; i <MAX_PLAYERS; i++)
  164.     {
  165.         OnPlayerDisconnect(i, 1);
  166.     }
  167.     mysql_close(connection);
  168.     db_close(banDatabase);
  169.     return 1;
  170. }
  171.  
  172. public OnPlayerText(playerid, text[])
  173. {
  174.     if(PlayerData[playerid][jLogged] == false) return 0;
  175.     if(PlayerData[playerid][jMutedTime] >= 1)
  176.     {
  177.         new msg[128];
  178.         format(msg, sizeof(msg), CHAT_RED"You are muted! "CHAT_YELLOW"Wait for %i seconds.", PlayerData[playerid][jMutedTime]);
  179.         SendClientMessage(playerid, -1, msg);
  180.     }
  181.     return 1;
  182. }
  183.  
  184. public OnPlayerConnect(playerid)
  185. {
  186.     TotalConnectedPlayers++;
  187.     new name[MAX_PLAYER_NAME];
  188.     new ip[18];
  189.     GetPlayerName(playerid, name, sizeof name);
  190.     GetPlayerIp(playerid, ip, sizeof ip);
  191.  
  192.     new string[150];
  193.     format(string, sizeof string, "SELECT * FROM `users` WHERE `name` = '%s' OR `ip` = '%s' OR (`longip` != 0 AND (`longip` & %i) = %i) LIMIT 1", name, ip, BAN_MASK, (Ban_GetLongIP(ip) & BAN_MASK));
  194.     new DBResult:result = db_query(banDatabase, string);
  195.     if (db_num_rows(result) != 0)
  196.     {
  197.         if (db_get_field_assoc_int(result, "expire_timestamp") != 0 && db_get_field_assoc_int(result, "expire_timestamp") <= gettime())
  198.         {
  199.             format(string, sizeof string, "DELETE FROM `users` WHERE `id` = %i", db_get_field_assoc_int(result, "id"));
  200.             db_query(banDatabase, string);
  201.  
  202.             format(string, sizeof string, "Welcome back to server, its been %s since your ban was lifted.", ReturnTimelapse(db_get_field_assoc_int(result, "expire_timestamp"), gettime()));
  203.             SendClientMessage(playerid, COLOR_GREEN, string);
  204.         }
  205.         else
  206.         {
  207.             format(string, sizeof string, "UPDATE `users` SET `last_activity_timestamp` = %i WHERE `id` = %i", gettime(), db_get_field_assoc_int(result, "id"));
  208.             db_query(banDatabase, string);
  209.  
  210.             for (new i; i < 100; i++)
  211.             {
  212.                 SendClientMessage(playerid, -1, "");
  213.             }
  214.  
  215.             new admin[MAX_PLAYER_NAME];
  216.             db_get_field_assoc(result, "admin", admin, sizeof admin);
  217.             new reason[128];
  218.             db_get_field_assoc(result, "reason", reason, sizeof reason);
  219.  
  220.             if (db_get_field_assoc_int(result, "expire_timestamp") == 0)
  221.             {
  222.                 format(string, sizeof string, "You are still banned from server | Admin who banned you: %s | Banned on: %s | Timeleft for unban: Never (permanent ban)", admin, ReturnDate(db_get_field_assoc_int(result, "register_timestamp")));
  223.                 SendClientMessageToAll(COLOR_RED, string);
  224.             }
  225.             else
  226.             {
  227.                 format(string, sizeof string, "You are still banned from server | Admin who banned you: %s | Banned on: %s | Timeleft for unban: %s", admin, ReturnDate(db_get_field_assoc_int(result, "register_timestamp")), ReturnTimelapse(gettime(), db_get_field_assoc_int(result, "expire_timestamp")));
  228.                 SendClientMessageToAll(COLOR_RED, string);
  229.             }
  230.             format(string, sizeof string, "Reason for ban: %s", reason);
  231.             SendClientMessageToAll(COLOR_RED, string);
  232.  
  233.             TextDrawShowForPlayer(playerid, banTextDraw[0]);
  234.             TextDrawShowForPlayer(playerid, banTextDraw[1]);
  235.             return Kick(banTargetID[playerid], KICK_DELAY);
  236.         }
  237.     }
  238.     db_free_result(result);
  239.     PlayerData[playerid][jScore] = 0;
  240.     PlayerData[playerid][jMoney] = 0;
  241.     PlayerData[playerid][jKills] = 0;
  242.     PlayerData[playerid][jDeaths] = 0;
  243.     PlayerData[playerid][jWanted] = 0;
  244.     PlayerData[playerid][jMutedTime] = 0;
  245.     PlayerData[playerid][jLevel] = 0;
  246.     PlayerData[playerid][jVIP] = 0;
  247.     PlayerData[playerid][jHelper] = 0;
  248.     PlayerData[playerid][jLoginAttempts] = 0;
  249.     PlayerData[playerid][jWarns] = 0;
  250.     PlayerData[playerid][jVeh] = INVALID_VEHICLE_ID;
  251.     PlayerData[playerid][onDuty] = 0;
  252.     PlayerData[playerid][jLogged] = false;
  253.     new jQuery[128];
  254.     GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
  255.     mysql_format(connection, jQuery, sizeof(jQuery), "SELECT * FROM `player` WHERE `name` = '%e' LIMIT 1", PlayerData[playerid][jName]);
  256.     mysql_tquery(connection, jQuery, "OnAccountDataLoaded", "i", playerid);
  257.    
  258.     new msg[128];
  259.     format(msg, sizeof(msg), CHAT_YELLOW"%s(%i) "CHAT_GREY"has connected to the server"CHAT_LIGHTBLUE" (Total Players: %i)", PlayerData[playerid][jName], playerid, TotalConnectedPlayers);
  260.     SendClientMessageToAll(-1, msg);
  261.     return 1;
  262. }
  263.  
  264. public OnPlayerDisconnect(playerid, reason)
  265. {
  266.     TotalConnectedPlayers--;
  267.     new jQuery[256], msg[128];
  268.     GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
  269.     mysql_format(connection, jQuery, sizeof(jQuery), "UPDATE `player` SET `score` = '%i',`money` = '%i',`kills` = '%i',`deaths` = '%i',`wanted` = '%i',`mutedtime` = '%i',`level` = '%i',`vip` = '%i',`helper` = '%i' WHERE `name` = '%e'", GetPlayerScore(playerid),
  270.     GetPlayerMoney(playerid), PlayerData[playerid][jKills], PlayerData[playerid][jDeaths], GetPlayerWantedLevel(playerid), PlayerData[playerid][jMutedTime], PlayerData[playerid][jLevel], PlayerData[playerid][jVIP], PlayerData[playerid][jHelper], PlayerData[playerid][jName]);
  271.     mysql_query(connection, jQuery);
  272.     switch(reason)
  273.     {
  274.         case 0: format(msg, sizeof(msg), CHAT_YELLOW"%s(%i) "CHAT_RED"left the server"CHAT_LIGHTBLUE" (Timeout / Crash).", PlayerData[playerid][jName], playerid);
  275.         case 1: format(msg, sizeof(msg), CHAT_YELLOW"%s(%i) "CHAT_RED"left the server"CHAT_LIGHTBLUE" (Quit). ", PlayerData[playerid][jName], playerid);
  276.         case 2: format(msg, sizeof(msg), CHAT_YELLOW"%s(%i) "CHAT_RED"left the server"CHAT_LIGHTBLUE" (Kick / Ban).", PlayerData[playerid][jName], playerid);
  277.     }
  278.     SendClientMessageToAll(-1, msg);
  279.     return 1;
  280. }
  281.  
  282. public OnPlayerDeath(playerid, killerid, reason)
  283. {
  284.     if(killerid == INVALID_PLAYER_ID) return 0;
  285.     if(PlayerData[killerid][jLogged] == false) return 0;
  286.     if(PlayerData[playerid][jLogged] == false) return 0;
  287.     PlayerData[killerid][jKills]++;
  288.     PlayerData[playerid][jDeaths]++;
  289.     return 1;
  290. }
  291.  
  292. public OnPlayerRequestSpawn(playerid)
  293. {
  294.     if(PlayerData[playerid][jLogged] == false) return 0;
  295.     return 1;
  296. }
  297.  
  298. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  299. {
  300.     switch(dialogid)
  301.     {
  302.         case DIALOG_LOGIN:
  303.         {
  304.             if(!response) return Kick(playerid);
  305.             new hashed_pass[129], string[128];
  306.             WP_Hash(hashed_pass, sizeof(hashed_pass), inputtext);
  307.             if(strcmp(hashed_pass, PlayerData[playerid][jPassword]) == 0)
  308.             {
  309.                 PlayerData[playerid][jLogged] = true;
  310.                 format(string, sizeof(string), CHAT_YELLOW"%s(%i) "CHAT_GREY"has logged in to the server!", PlayerData[playerid][jName], playerid);
  311.                 SendClientMessageToAll(-1, string);
  312.                 SetPlayerScore(playerid, PlayerData[playerid][jScore]);
  313.                 ResetPlayerMoney(playerid);
  314.                 GivePlayerMoney(playerid, PlayerData[playerid][jMoney]);
  315.                 SetPlayerWantedLevel(playerid, PlayerData[playerid][jWanted]);
  316.             }
  317.             else
  318.             {
  319.                 PlayerData[playerid][jLoginAttempts]++;
  320.                 if(PlayerData[playerid][jLoginAttempts] >= 3)
  321.                 {
  322.                     SendClientMessage(playerid, RED, "You have been kicked for (3/3) login attempts.");
  323.                     DelayKick(playerid);
  324.                 }
  325.                 else
  326.                 {
  327.                     format(string, sizeof(string), CHAT_RED"Wrong password! (%i/3) attempts left.", PlayerData[playerid][jName], playerid);
  328.                     ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", string, "Login", "Leave");
  329.                 }
  330.             }
  331.         }
  332.         case DIALOG_REGISTER:
  333.         {
  334.             if(!response) return Kick(playerid);
  335.             if(strlen(inputtext) <= 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Register", CHAT_RED"Your password must be greater than 3 characters!", "Register", "Leave");
  336.             WP_Hash(PlayerData[playerid][jPassword], 129, inputtext);
  337.             new jQuery[300];
  338.             mysql_format(connection, jQuery, sizeof(jQuery), "INSERT INTO `player` (`name`, `password`) VALUES ('%e', '%e')", PlayerData[playerid][jName], PlayerData[playerid][jPassword]);
  339.             mysql_tquery(connection, jQuery, "OnAccountCreate", "i", playerid);
  340.         }
  341.     }
  342.     return 1;
  343. }
  344.  
  345. public OnAccountDataLoaded(playerid)
  346. {
  347.     new string[128];
  348.     if(cache_num_rows() > 0)
  349.     {
  350.         PlayerData[playerid][jID] = cache_get_field_content_int(0, "id");
  351.         cache_get_field_content(0, "password", PlayerData[playerid][jPassword], connection, 129);
  352.         PlayerData[playerid][jScore] = cache_get_field_content_int(0, "score");
  353.         PlayerData[playerid][jMoney] = cache_get_field_content_int(0, "money");
  354.         PlayerData[playerid][jKills] = cache_get_field_content_int(0, "kills");
  355.         PlayerData[playerid][jDeaths] = cache_get_field_content_int(0, "deaths");
  356.         PlayerData[playerid][jWanted] = cache_get_field_content_int(0, "wanted");
  357.         PlayerData[playerid][jMutedTime] = cache_get_field_content_int(0, "mutedtime");
  358.         PlayerData[playerid][jLevel] = cache_get_field_content_int(0, "level");
  359.         PlayerData[playerid][jVIP] = cache_get_field_content_int(0, "vip");
  360.         PlayerData[playerid][jHelper] = cache_get_field_content_int(0, "helper");
  361.         format(string, sizeof(string), CHAT_YELLOW"Welcome back '%s'. This name is already registered in the server.\n"CHAT_GREY"Type password below to login:", PlayerData[playerid][jName]);
  362.         ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", string, "Login", "Leave");
  363.     }
  364.     else
  365.     {
  366.         format(string, sizeof(string), CHAT_YELLOW"Welcome back '%s'. This name is not registered in the server.\n"CHAT_GREY"Type password below to register:", PlayerData[playerid][jName]);
  367.         ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Register", string, "Register", "Leave");
  368.     }
  369.     return 1;
  370. }
  371.  
  372. public OnAccountCreate(playerid)
  373. {
  374.     new string[128];
  375.     PlayerData[playerid][jID] = cache_insert_id();
  376.     format(string, sizeof(string), CHAT_YELLOW"%s(%i) "CHAT_WHITE"has registered to the server!", PlayerData[playerid][jName], playerid);
  377.     SendClientMessageToAll(-1, string);
  378.     return 1;
  379. }
  380.  
  381. public KickPlayer(playerid)
  382. {
  383.     Kick(playerid);
  384.     return 1;
  385. }
  386.  
  387. public MuteCheck()
  388. {
  389.     for(new i = 0; i <MAX_PLAYERS; i++)
  390.     {
  391.         if(PlayerData[i][jMutedTime] >= 1)
  392.         {
  393.             PlayerData[i][jMutedTime]--;
  394.             if(PlayerData[i][jMutedTime] <= 0) return SendClientMessage(i, RED, "You have been unmuted by the server.");
  395.         }
  396.     }
  397.     return 1;
  398. }
  399.  
  400. Ban_GetLongIP(const ip[])
  401. {
  402.     new len = strlen(ip);
  403.     if (!(len > 0 && len < 17))
  404.     {
  405.         return 0;
  406.     }
  407.  
  408.     new count;
  409.     new pos;
  410.     new dest[3];
  411.     new val[4];
  412.     for (new i; i < len; i++)
  413.     {
  414.         if (ip[i] == '.' || i == len)
  415.         {
  416.             strmid(dest, ip, pos, i);
  417.             pos = (i + 1);
  418.  
  419.             val[count] = strval(dest);
  420.             if (!(0 <= val[count] <= 255))
  421.             {
  422.                 return 0;
  423.             }
  424.  
  425.             count++;
  426.             if (count > 3)
  427.             {
  428.                 return 0;
  429.             }
  430.         }
  431.     }
  432.  
  433.     if (count != 3)
  434.     {
  435.         return 0;
  436.     }
  437.     return ((val[0] * 16777216) + (val[1] * 65536) + (val[2] * 256) + (val[3]));
  438. }
  439.  
  440. ReturnDate(timestamp)
  441. {
  442.     new year, month, day, unused;
  443.     TimestampToDate(timestamp, year, month, day, unused, unused, unused, 0);
  444.  
  445.     static monthname[15];
  446.     switch (month)
  447.     {
  448.         case 1: monthname = "January";
  449.         case 2: monthname = "February";
  450.         case 3: monthname = "March";
  451.         case 4: monthname = "April";
  452.         case 5: monthname = "May";
  453.         case 6: monthname = "June";
  454.         case 7: monthname = "July";
  455.         case 8: monthname = "August";
  456.         case 9: monthname = "September";
  457.         case 10: monthname = "October";
  458.         case 11: monthname = "November";
  459.         case 12: monthname = "December";
  460.     }
  461.  
  462.     new date[30];
  463.     format(date, sizeof (date), "%i %s, %i", day, monthname, year);
  464.     return date;
  465. }
  466.  
  467. ReturnTimelapse(start, till)
  468. {
  469.     new ret[32];
  470.     new seconds = till - start;
  471.  
  472.     const
  473.         MINUTE = 60,
  474.         HOUR = 60 * MINUTE,
  475.         DAY = 24 * HOUR,
  476.         MONTH = 30 * DAY;
  477.  
  478.     if (seconds == 1)
  479.         format(ret, sizeof(ret), "a second");
  480.     if (seconds < (1 * MINUTE))
  481.         format(ret, sizeof(ret), "%i seconds", seconds);
  482.     else if (seconds < (2 * MINUTE))
  483.         format(ret, sizeof(ret), "a minute");
  484.     else if (seconds < (45 * MINUTE))
  485.         format(ret, sizeof(ret), "%i minutes", (seconds / MINUTE));
  486.     else if (seconds < (90 * MINUTE))
  487.         format(ret, sizeof(ret), "an hour");
  488.     else if (seconds < (24 * HOUR))
  489.         format(ret, sizeof(ret), "%i hours", (seconds / HOUR));
  490.     else if (seconds < (48 * HOUR))
  491.         format(ret, sizeof(ret), "a day");
  492.     else if (seconds < (30 * DAY))
  493.         format(ret, sizeof(ret), "%i days", (seconds / DAY));
  494.     else if (seconds < (12 * MONTH))
  495.     {
  496.         new months = floatround(seconds / DAY / 30);
  497.         if (months <= 1)
  498.             format(ret, sizeof(ret), "a month");
  499.         else
  500.             format(ret, sizeof(ret), "%i months", months);
  501.     }
  502.     else
  503.     {
  504.         new years = floatround(seconds / DAY / 365);
  505.         if (years <= 1)
  506.             format(ret, sizeof(ret), "a year");
  507.         else
  508.             format(ret, sizeof(ret), "%i years", years);
  509.     }
  510.     return ret;
  511. }
  512.  
  513. DelayKick(playerid)
  514. {
  515.     SetTimerEx("KickPlayer", 500, false, "i", playerid);
  516.     return 1;
  517. }
  518.  
  519. //Admin Commands
  520. CMD:acmds(playerid, params[])
  521. {
  522.     new msg[700];
  523.     if(PlayerData[playerid][jLogged] == false) return 0;
  524.     if(PlayerData[playerid][jLevel] < 1) return 0;
  525.     if(PlayerData[playerid][jLevel] >= 1)
  526.     {
  527.         strcat(msg, CHAT_GREY"Admin Level 1:-\n"CHAT_YELLOW"/slap, /warn, /kick, /goto, /bring, /setvw");
  528.         strcat(msg, CHAT_YELLOW"/rac, /veh, /fixveh, /mute, /unmute\n\n");
  529.         strcat(msg, CHAT_GREY"Admin Level 2:-\n"CHAT_YELLOW"/slay, /spawn, /aheal, /jetpack, /setw\n");
  530.         strcat(msg, CHAT_YELLOW"/getip, /teleport, /giveweapon, /disarm, /clearchat, /aod\n\n");
  531.         strcat(msg, CHAT_GREY"Admin Level 3:-\n"CHAT_YELLOW"/sethealth, /setarmour, /setallhealth, /setallarmour\n");
  532.         strcat(msg, CHAT_YELLOW"/settime, /freeze, /unfreeze, /announce\n\n");
  533.         strcat(msg, CHAT_GREY"Admin Level 4:-\n"CHAT_YELLOW"/givecash, /giveallcash, /setskin, /setallskin\n");
  534.         strcat(msg, CHAT_YELLOW"/setmoney, /resetmoney, /ban, /searchban\n\n");
  535.         strcat(msg, CHAT_GREY"Admin Level 5:-\n"CHAT_YELLOW"/setlevel, /sethelper, /setvip, /setwanted, /restart\n\n\n");
  536.         strcat(msg, CHAT_GREY"            For chatting with other admins, use /a <text>.");
  537.         ShowPlayerDialog(playerid, DIALOG_ADMINCMDS, DIALOG_STYLE_MSGBOX, "Admin Commands", msg, "Close", "");
  538.     }
  539.     return 1;
  540. }
  541.  
  542. CMD:a(playerid, params[])
  543. {
  544.     new textmsg[128], string[400];
  545.     if(PlayerData[playerid][jLogged] == false) return 0;
  546.     if(PlayerData[playerid][jLevel] >= 1)
  547.     {
  548.         if(sscanf(params, "s[128]", textmsg)) return SendClientMessage(playerid, RED, "USAGE: /a <text>");
  549.         GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
  550.         format(string, sizeof(string), "ADMIN CHAT: %s(%i): %s", PlayerData[playerid][jName], playerid, textmsg);
  551.         for(new i = 0; i <MAX_PLAYERS; i++)
  552.         {
  553.             if(PlayerData[i][jLevel] >= 1)
  554.             {
  555.                 SendClientMessage(i, -1, string);
  556.             }
  557.         }
  558.     }
  559.     else return 0;
  560.     return 1;
  561. }
  562.  
  563. CMD:slap(playerid, params[])
  564. {
  565.     new playerID, Float:playerX, Float:playerY, Float:playerZ, msg[150];
  566.     if(PlayerData[playerid][jLogged] == false) return 0;
  567.     if(PlayerData[playerid][jLevel] >= 1)
  568.     {
  569.         if(sscanf(params, "i", playerID)) return SendClientMessage(playerid, RED, "USAGE: /slap <playerid>");
  570.         if(PlayerData[playerID][jLevel] >= PlayerData[playerid][jLevel]) return SendClientMessage(playerid, RED, "You cannot use this command to your higher level or at your level.");
  571.         if(GetPlayerState(playerID) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, RED, "That player is not on foot.");
  572.         if(PlayerData[playerID][jLogged] == false) return 0;
  573.         GetPlayerPos(playerID, playerX, playerY, playerZ);
  574.         SetPlayerPos(playerID, playerX, playerY, playerZ+8.0);
  575.         GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
  576.         format(msg, sizeof(msg), CHAT_RED"You have been slapped by"CHAT_GREY" administrator: "CHAT_YELLOW"%s(%i)", PlayerData[playerid][jName], playerid);
  577.         SendClientMessage(playerID, -1, msg);
  578.         GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  579.         format(msg, sizeof(msg), CHAT_RED"You have slapped"CHAT_YELLOW" %s(%i)", PlayerData[playerID][jName], playerID);
  580.         SendClientMessage(playerid, -1, msg);
  581.     }
  582.     else return 0;
  583.     return 1;
  584. }
  585.  
  586. CMD:warn(playerid, params[])
  587. {
  588.     new playerID, reason[128], msg[200];
  589.     if(PlayerData[playerid][jLogged] == false) return 0;
  590.     if(PlayerData[playerid][jLevel] >= 1)
  591.     {
  592.         if(sscanf(params, "is[128]", playerID, reason)) return SendClientMessage(playerid, RED, "USAGE: /warn <playerid> <reason>");
  593.         if(PlayerData[playerID][jLogged] == false) return 0;
  594.         if(PlayerData[playerID][jLevel] >= PlayerData[playerid][jLevel]) return SendClientMessage(playerid, RED, "You cannot use this command to your higher level or at your level.");
  595.         GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  596.         format(msg, sizeof(msg), CHAT_GREY"Administrator: "CHAT_RED"have warned"CHAT_YELLOW" %s(%i)"CHAT_RED" REASON: %s", PlayerData[playerID][jName], playerID, reason);
  597.         SendClientMessageToAll(-1, msg);
  598.         PlayerData[playerID][jWarns]++;
  599.         if(PlayerData[playerID][jWarns] >= 3)
  600.         {
  601.             SendClientMessage(playerID, RED, "You have been kicked for exceed warnings!");
  602.             DelayKick(playerID);
  603.         }
  604.         GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
  605.         for(new i = 0; i <MAX_PLAYERS; i++)
  606.         {
  607.             if(PlayerData[i][jLevel] >= 1)
  608.             {
  609.                 format(msg, sizeof(msg), CHAT_RED"ADMINISTRATOR WARNING: %s(%i) have warned %s(%i).", PlayerData[playerid][jName], playerid, PlayerData[playerID][jName], playerID);
  610.                 SendClientMessage(i, -1, msg);
  611.             }
  612.         }
  613.     }
  614.     else return 0;
  615.     return 1;
  616. }
  617.  
  618. CMD:kick(playerid, params[])
  619. {
  620.     new playerID, reason[128], msg[200];
  621.     if(PlayerData[playerid][jLogged] == false) return 0;
  622.     if(PlayerData[playerid][jLevel] >= 1)
  623.     {
  624.         if(sscanf(params, "is[128]", playerID, reason)) return SendClientMessage(playerid, RED, "USAGE: /kick <playerid> <reason>");
  625.         if(PlayerData[playerID][jLogged] == false) return 0;
  626.         if(PlayerData[playerID][jLevel] >= PlayerData[playerid][jLevel]) return SendClientMessage(playerid, RED, "You cannot use this command to your higher level or at your level.");
  627.         GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  628.         format(msg, sizeof(msg), CHAT_GREY"Administrator: "CHAT_RED"have kicked"CHAT_YELLOW" %s(%i)"CHAT_RED" REASON: %s", PlayerData[playerID][jName], playerID, reason);
  629.         SendClientMessageToAll(-1, msg);
  630.         for(new i = 0; i <MAX_PLAYERS; i++)
  631.         {
  632.             if(PlayerData[i][jLevel] >= 1)
  633.             {
  634.                 format(msg, sizeof(msg), CHAT_RED"ADMINISTRATOR WARNING: %s(%i) have warned %s(%i).", PlayerData[playerid][jName], playerid, PlayerData[playerID][jName], playerID);
  635.             }
  636.         }
  637.     }
  638.     else return 0;
  639.     return 1;
  640. }
  641.  
  642. CMD:goto(playerid, params[])
  643. {
  644.     new playerID, Float:x, Float:y, Float:z, msg[128];
  645.     if(PlayerData[playerid][jLogged] == false) return 0;
  646.     if(PlayerData[playerid][jLevel] >= 1)
  647.     {
  648.         if(sscanf(params, "i", playerID)) return SendClientMessage(playerid, RED, "USAGE: /goto <playerid>");
  649.         if(PlayerData[playerID][jLogged] == false) return 0;
  650.         if(playerID == playerid) return 0;
  651.         if(GetPlayerState(playerID) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, RED, "This player is not on foot!");
  652.         if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, RED, "You must be on foot to use this command!");
  653.         GetPlayerPos(playerID, x, y, z);
  654.         SetPlayerPos(playerid, x+2.0, y+2.0, z);
  655.         GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  656.         format(msg, sizeof(msg), CHAT_LIGHTBLUE"You have been teleported to"CHAT_YELLOW" %s(%i).", PlayerData[playerID][jName], playerID);
  657.         SendClientMessage(playerid, -1, msg);
  658.         GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
  659.         format(msg, sizeof(msg), CHAT_GREY"Administrator "CHAT_YELLOW"%s(%i) "CHAT_LIGHTBLUE"has teleported to you.", PlayerData[playerid][jName], playerID);
  660.         SendClientMessage(playerID, -1, msg);
  661.         for(new i = 0; i <MAX_PLAYERS; i++)
  662.         {
  663.             if(PlayerData[i][jLevel] >= 1)
  664.             {
  665.                 format(msg, sizeof(msg), CHAT_GREY"ADMINISTRATOR WARNING: "CHAT_RED"%s(%i) have teleported %s(%i).", PlayerData[playerid][jName], playerid, PlayerData[playerID][jName], playerID);
  666.                 SendClientMessage(i, -1, msg);
  667.             }
  668.         }
  669.     }
  670.     else return 0;
  671.     return 1;
  672. }
  673.  
  674. CMD:bring(playerid, params[])
  675. {
  676.     new playerID, Float:x, Float:y, Float:z, msg[128];
  677.     if(PlayerData[playerid][jLogged] == false) return 0;
  678.     if(PlayerData[playerid][jLevel] >= 1)
  679.     {
  680.         if(sscanf(params, "i", playerID)) return SendClientMessage(playerid, RED, "USAGE: /bring <playerid>");
  681.         if(PlayerData[playerID][jLogged] == false) return 0;
  682.         if(playerID == playerid) return 0;
  683.         if(GetPlayerState(playerID) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, RED, "This player is not on foot!");
  684.         if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, RED, "You must be on foot to use this command!");
  685.         GetPlayerPos(playerid, x, y, z);
  686.         SetPlayerPos(playerID, x+2.0, y+2.0, z);
  687.         GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
  688.         format(msg, sizeof(msg), CHAT_LIGHTBLUE"You have been teleported to"CHAT_YELLOW" %s(%i).", PlayerData[playerid][jName], playerid);
  689.         SendClientMessage(playerID, -1, msg);
  690.         GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  691.         format(msg, sizeof(msg), CHAT_YELLOW"%s(%i) "CHAT_LIGHTBLUE"has been teleported to you.", PlayerData[playerID][jName], playerID);
  692.         SendClientMessage(playerid, -1, msg);
  693.         for(new i = 0; i <MAX_PLAYERS; i++)
  694.         {
  695.             if(PlayerData[i][jLevel] >= 1)
  696.             {
  697.                 format(msg, sizeof(msg), CHAT_RED"ADMINISTRATOR WARNING: %s(%i) teleported %s(%i) to him.", PlayerData[playerid][jName], playerid, PlayerData[playerID][jName], playerID);
  698.                 SendClientMessage(i, -1, msg);
  699.             }
  700.         }
  701.     }
  702.     else return 0;
  703.     return 1;
  704. }
  705.  
  706. CMD:setvw(playerid, params[])
  707. {
  708.     new playerID, vwID, msg[128];
  709.     if(PlayerData[playerid][jLogged] == false) return 0;
  710.     if(PlayerData[playerid][jLevel] >= 1)
  711.     {
  712.         if(sscanf(params, "ii", playerID, vwID)) return SendClientMessage(playerid, RED, "USAGE: /setvw <playerid> <world id>");
  713.         if(vwID > 2147483647) return SendClientMessage(playerid, RED, "You cannot type number greater than 2,147,483,647. Its maximum.");
  714.         if(vwID < 0) return SendClientMessage(playerid, RED, "You cannot type number less than 0.");
  715.         SetPlayerVirtualWorld(playerID, vwID);
  716.         format(msg, sizeof(msg), CHAT_YELLOW"Administrator "CHAT_LIGHTBLUE"has set your virtual world to %i.", vwID);
  717.         SendClientMessage(playerID, -1, msg);
  718.         GetPlayerName(playerid, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  719.         format(msg, sizeof(msg), CHAT_LIGHTBLUE"You have set "CHAT_YELLOW"%s's(%i) virtual world to %i.", PlayerData[playerID][jName], playerID, vwID);
  720.         SendClientMessage(playerid, -1, msg);
  721.         GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
  722.         for(new i =0; i <MAX_PLAYERS; i++)
  723.         {
  724.             if(PlayerData[i][jLevel] >= 1)
  725.             {
  726.                 format(msg, sizeof(msg), CHAT_RED"ADMINISTRATOR WARNING: %s(%i) has set %s's(%i) virtual world to %i.", PlayerData[playerid][jName], playerid, PlayerData[playerID][jName], playerID, vwID);
  727.                 SendClientMessage(i, -1, msg);
  728.             }
  729.         }
  730.     }
  731.     else return 0;
  732.     return 1;
  733. }
  734.  
  735. CMD:rac(playerid, params[])
  736. {
  737.     new msg[128];
  738.     if(PlayerData[playerid][jLogged] == false) return 0;
  739.     if(PlayerData[playerid][jLevel] >= 1)
  740.     {
  741.         for(new maxveh = 0; maxveh <MAX_VEHICLES; maxveh++)
  742.         {
  743.             SetVehicleToRespawn(maxveh);
  744.             format(msg, sizeof(msg), CHAT_GREY"ADMINISTRATOR have respawned all vehicles.");
  745.             SendClientMessageToAll(-1, msg);
  746.         }
  747.     }
  748.     else return 0;
  749.     return 1;
  750. }
  751.  
  752. CMD:veh(playerid, params[])
  753. {
  754.     new vehicleID, Float:X, Float:Y, Float:Z, Float:A, colorfirst, colorsecond, msg[128];
  755.     if(PlayerData[playerid][jLogged] == false) return 0;
  756.     if(PlayerData[playerid][jLevel] >= 1)
  757.     {
  758.         if(sscanf(params, "iii", vehicleID, colorfirst, colorsecond)) return SendClientMessage(playerid, RED, "USAGE: /veh <vehicleID> <color1> <color2>");
  759.         if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return 0;
  760.         if(vehicleID < 400) return SendClientMessage(playerid, RED, "You have typed wrong vehicle ID.");
  761.         if(vehicleID > 611) return SendClientMessage(playerid, RED, "You have typed wrong vehicle ID.");
  762.         GetPlayerPos(playerid, X, Y, Z);
  763.         GetPlayerFacingAngle(playerid, A);
  764.         if(IsValidVehicle(PlayerData[playerid][jVeh]))
  765.         {
  766.             DestroyVehicle(PlayerData[playerid][jVeh]);
  767.         }
  768.         CreateVehicle(vehicleID, X+2.0, Y+2.0, Z, A, colorfirst, colorsecond, 0, 0);
  769.         format(msg, sizeof(msg), CHAT_RED"You have created vehicle ID %i with color %i and color %i.", vehicleID, colorfirst, colorsecond);
  770.         SendClientMessage(playerid, -1, msg);
  771.         GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
  772.         for(new i = 0; i <MAX_PLAYERS; i++)
  773.         {
  774.             if(PlayerData[i][jLevel] >= 1)
  775.             {
  776.                 format(msg, sizeof(msg), CHAT_RED"ADMINISTRATOR WARNING: %s(%i) spawned a vehicle.", PlayerData[playerid][jName], playerid);
  777.                 SendClientMessage(i, -1, msg);
  778.             }
  779.         }
  780.     }
  781.     else return 0;
  782.     return 1;
  783. }
  784.  
  785. CMD:fixveh(playerid, params[])
  786. {
  787.     new msg[128];
  788.     if(PlayerData[playerid][jLogged] == false) return 0;
  789.     if(PlayerData[playerid][jLevel] >= 1)
  790.     {
  791.         if(IsPlayerInAnyVehicle(playerid))
  792.         {
  793.             RepairVehicle(GetPlayerVehicleID(playerid));
  794.             format(msg, sizeof(msg), CHAT_YELLOW"You have repaired this vehicle.");
  795.             SendClientMessage(playerid, -1, msg);
  796.         }
  797.         else return SendClientMessage(playerid, RED, "You must be in vehicle to use this command!");
  798.     }
  799.     else return 0;
  800.     return 1;
  801. }
  802.  
  803. CMD:mute(playerid, params[])
  804. {
  805.     new playerID, seconds, reason[128], msg[256];
  806.     if(PlayerData[playerid][jLogged] == false) return 0;
  807.     if(PlayerData[playerid][jLevel] >= 1)
  808.     {
  809.         if(sscanf(params, "iis[128]", playerID, seconds, reason)) return SendClientMessage(playerid, RED, "USAGE: /mute <playerid> <seconds> <reason>");
  810.         if(PlayerData[playerID][jLogged] == false) return 0;
  811.         if(playerID == playerid) return 0;
  812.         if(PlayerData[playerID][jLevel] >= PlayerData[playerid][jLevel]) return SendClientMessage(playerid, RED, "You cannot use this command to higher level or at your level!");
  813.         GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  814.         format(msg, sizeof(msg), CHAT_RED"An administrator "CHAT_YELLOW"have muted %s(%i) for %i seconds, REASON: %s.", PlayerData[playerID][jName], playerID, seconds, reason);
  815.         SendClientMessageToAll(-1, msg);
  816.         GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
  817.         PlayerData[playerID][jMutedTime] = seconds;
  818.         for(new i = 0; i <MAX_PLAYERS; i++)
  819.         {
  820.             if(PlayerData[i][jLevel] >= 1)
  821.             {
  822.                 format(msg, sizeof(msg), CHAT_RED"%s(%i) muted %s(%i) for %s.", PlayerData[playerid][jName], playerid, PlayerData[playerID][jName], playerID, reason);
  823.                 SendClientMessage(i, -1, msg);
  824.             }
  825.         }
  826.     }
  827.     else return 0;
  828.     return 1;
  829. }
  830.  
  831. CMD:unmute(playerid, params[])
  832. {
  833.     new playerID, msg[128];
  834.     if(PlayerData[playerid][jLogged] == false) return 0;
  835.     if(PlayerData[playerid][jLevel] >= 1)
  836.     {
  837.         if(sscanf(params, "i", playerID)) return SendClientMessage(playerid, RED, "USAGE: /unmute <playerid>");
  838.         if(PlayerData[playerID][jLogged] == false) return 0;
  839.         if(PlayerData[playerID][jMutedTime] <= 0) return SendClientMessage(playerid, RED, "This player is not muted!");
  840.         GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  841.         if(PlayerData[playerID][jMutedTime] >= 1)
  842.         {
  843.             format(msg, sizeof(msg), CHAT_RED"You have unmuted "CHAT_YELLOW"%s(%i).", PlayerData[playerID][jName], playerID);
  844.             SendClientMessage(playerid, -1, msg);
  845.             SendClientMessage(playerID, GREY, "You have been unmuted by an administrator.");
  846.         }
  847.     }
  848.     else return 0;
  849.     return 1;
  850. }
  851.  
  852. CMD:slay(playerid, params[])
  853. {
  854.     new playerID, reason[128], msg[256];
  855.     if(PlayerData[playerid][jLogged] == false) return 0;
  856.     if(PlayerData[playerid][jLevel] >= 2)
  857.     {
  858.         if(sscanf(params, "is[128]", playerID, reason)) return SendClientMessage(playerid, RED, "USAGE: /slay <playerid> <reason>");
  859.         if(PlayerData[playerID][jLogged] == false) return 0;
  860.         if(playerID == playerid) return 0;
  861.         if(GetPlayerState(playerID) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, RED, "This player must be on foot.");
  862.         GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  863.         format(msg, sizeof(msg), CHAT_RED"An administrator has slayed "CHAT_YELLOW"%s(%i), REASON: %s.", PlayerData[playerID][jName], playerID, reason);
  864.         SendClientMessageToAll(-1, msg);
  865.         GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
  866.         for(new i = 0; i <MAX_PLAYERS; i++)
  867.         {
  868.             if(PlayerData[i][jLevel] >= 1)
  869.             {
  870.                 format(msg, sizeof(msg), CHAT_RED"ADMINISTRATOR WARNING: %s(%i) have slayed %s(%i) REASON: %s.", PlayerData[playerid][jName], playerid, PlayerData[playerID][jName], playerID);
  871.                 SendClientMessage(i, -1, msg);
  872.             }
  873.         }
  874.     }
  875.     else return 0;
  876.     return 1;
  877. }
  878.  
  879. CMD:spawn(playerid, params[])
  880. {
  881.     new playerID, msg[128];
  882.     if(PlayerData[playerid][jLogged] == false) return 0;
  883.     if(PlayerData[playerid][jLevel] >= 2)
  884.     {
  885.         if(sscanf(params, "i", playerID)) return SendClientMessage(playerid, RED, "USAGE: /spawn <playerid>");
  886.         if(PlayerData[playerID][jLogged] == false) return 0;
  887.         SpawnPlayer(playerID);
  888.         SendClientMessage(playerID, GREY, "You have been spawned by an administrator.");
  889.         GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  890.         format(msg, sizeof(msg), CHAT_RED"You have spawned "CHAT_YELLOW"%s(%i).", PlayerData[playerID][jName], playerID);
  891.         SendClientMessage(playerid, -1, msg);
  892.     }
  893.     else return 0;
  894.     return 1;
  895. }
  896.  
  897. CMD:aheal(playerid, params[])
  898. {
  899.     new playerID, msg[128];
  900.     if(PlayerData[playerid][jLogged] == false) return 0;
  901.     if(PlayerData[playerid][jLevel] >= 2)
  902.     {
  903.         if(sscanf(params, "i", playerID)) return SendClientMessage(playerid, RED, "USAGE: /aheal <playerid>");
  904.         if(PlayerData[playerID][jLogged] == false) return 0;
  905.         SetPlayerHealth(playerID, 100);
  906.         SendClientMessage(playerID, GREY, "You have been healed by an administrator.");
  907.         GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  908.         format(msg, sizeof(msg), CHAT_RED"You have healed "CHAT_YELLOW"%s(%i).", PlayerData[playerID][jName], playerID);
  909.         SendClientMessage(playerid, -1, msg);
  910.     }
  911.     else return 0;
  912.     return 1;
  913. }
  914.  
  915. CMD:jetpack(playerid, params[])
  916. {
  917.     if(PlayerData[playerid][jLogged] == false) return 0;
  918.     if(PlayerData[playerid][jLevel] >= 2)
  919.     {
  920.         if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, RED, "You must be on foot to use this command!");
  921.         SetPlayerSpecialAction(playerid, SPECIAL_ACTION_USEJETPACK);
  922.         SendClientMessage(playerid, RED, "You've spawned jetpack.");
  923.     }
  924.     else return 0;
  925.     return 1;
  926. }
  927.  
  928. CMD:setw(playerid, params[])
  929. {
  930.     new playerID, wID, msg[128];
  931.     if(PlayerData[playerid][jLogged] == false) return 0;
  932.     if(PlayerData[playerid][jLevel] >= 2)
  933.     {
  934.         if(sscanf(params, "ii", playerID, wID)) return SendClientMessage(playerid, RED, "USAGE: /setw <playerid> <1-20>");
  935.         if(wID < 1) return SendClientMessage(playerid, RED, "Weather ID cannot be less than 1.");
  936.         if(wID > 20) return SendClientMessage(playerid, RED, "Weather ID cannot be greater than 20.");
  937.         if(PlayerData[playerid][jLogged] == false) return 0;
  938.         SetPlayerWeather(playerID, wID);
  939.         format(msg, sizeof(msg), CHAT_YELLOW"An administrator has set your weather ID to "CHAT_YELLOW"%i.", wID);
  940.         SendClientMessage(playerID, -1, msg);
  941.         format(msg, sizeof(msg), CHAT_RED"You have set %s's(%i) weather ID to %i", wID);
  942.         SendClientMessage(playerid, -1, msg);
  943.     }
  944.     else return 0;
  945.     return 1;
  946. }
  947.  
  948. CMD:getip(playerid, params[])
  949. {
  950.     new playerID, findip[16], msg[128];
  951.     if(PlayerData[playerid][jLogged] == false) return 0;
  952.     if(PlayerData[playerid][jLevel] >= 2)
  953.     {
  954.         if(sscanf(params, "i", playerID)) return SendClientMessage(playerid, RED, "USAGE: /getip <playerid>");
  955.         GetPlayerIp(playerID, findip, sizeof(findip));
  956.         GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  957.         format(msg, sizeof(msg), CHAT_RED"%s's(%i) IP: %s.", PlayerData[playerID][jName], playerID, findip);
  958.         SendClientMessage(playerid, -1, msg);
  959.     }
  960.     else return 0;
  961.     return 1;
  962. }
  963.  
  964. CMD:teleport(playerid, params[])
  965. {
  966.     new Float:x, Float:y, Float:z, msg[128];
  967.     if(PlayerData[playerid][jLogged] == false) return 0;
  968.     if(PlayerData[playerid][jLevel] >= 2)
  969.     {
  970.         if(sscanf(params, "iii", x, y, z)) return SendClientMessage(playerid, RED, "USAGE: /teleport <x> <y> <z>");
  971.         SetPlayerPos(playerid, x, y, z);
  972.         format(msg, sizeof(msg), CHAT_RED"You have been teleported to %f, %f, %f.", x, y, z);
  973.         SendClientMessage(playerid, -1, msg);
  974.     }
  975.     else return 0;
  976.     return 1;
  977. }
  978.  
  979. CMD:giveweapon(playerid, params[])
  980. {
  981.     new playerID, weaponID, ammo, msg[128];
  982.     if(PlayerData[playerid][jLogged] == false) return 0;
  983.     if(PlayerData[playerid][jLevel] >= 2)
  984.     {
  985.         if(sscanf(params, "iii", playerID, weaponID, ammo)) return SendClientMessage(playerid, RED, "USAGE: /giveweapon <playerid> <weaponid> <ammo>");
  986.         if(GetPlayerState(playerID) != PLAYER_STATE_ONFOOT) return 0;
  987.         if(weaponID < 1) return SendClientMessage(playerid, RED, "The weapon ID you typed was wrong!");
  988.         if(weaponID > 46) return SendClientMessage(playerid, RED, "The weapon ID you typed was wrong!");
  989.         GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  990.         format(msg, sizeof(msg), CHAT_RED"You have given %s(%i) weapon ID: %i with ammo: %i.", PlayerData[playerID][jName], playerID, weaponID, ammo);
  991.         SendClientMessage(playerid, -1, msg);
  992.         GivePlayerWeapon(playerID, weaponID, ammo);
  993.     }
  994.     else return 0;
  995.     return 1;
  996. }
  997.  
  998. CMD:disarm(playerid, params[])
  999. {
  1000.     new playerID, msg[128];
  1001.     if(PlayerData[playerid][jLogged] == false) return 0;
  1002.     if(PlayerData[playerid][jLevel] >= 2)
  1003.     {
  1004.         if(sscanf(params, "i", playerID)) return SendClientMessage(playerid, RED, "USAGE: /disarm <playerid>");
  1005.         GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  1006.         format(msg, sizeof(msg), CHAT_RED"You have disarmed %s(%i).", PlayerData[playerID][jName], playerID);
  1007.         SendClientMessage(playerid, -1, msg);
  1008.         ResetPlayerWeapons(playerID);
  1009.     }
  1010.     else return 0;
  1011.     return 1;
  1012. }
  1013.  
  1014. CMD:clearchat(playerid, params[])
  1015. {
  1016.     if(PlayerData[playerid][jLogged] == false) return 0;
  1017.     if(PlayerData[playerid][jLevel] >= 2)
  1018.     {
  1019.         SendClientMessageToAll(-1, "");
  1020.         SendClientMessageToAll(-1, "");
  1021.         SendClientMessageToAll(-1, "");
  1022.         SendClientMessageToAll(-1, "");
  1023.         SendClientMessageToAll(-1, "");
  1024.         SendClientMessageToAll(-1, "");
  1025.         SendClientMessageToAll(-1, "");
  1026.         SendClientMessageToAll(-1, "");
  1027.         SendClientMessageToAll(-1, "");
  1028.         SendClientMessageToAll(-1, "");
  1029.         SendClientMessageToAll(-1, "");
  1030.         SendClientMessageToAll(-1, "");
  1031.         SendClientMessageToAll(-1, "");
  1032.         SendClientMessageToAll(-1, "");
  1033.         SendClientMessageToAll(-1, "");
  1034.         SendClientMessageToAll(-1, "");
  1035.         SendClientMessageToAll(WHITE, "Administrator cleared the chat!");
  1036.     }
  1037.     else return 0;
  1038.     return 1;
  1039. }
  1040.  
  1041. CMD:aod(playerid, params[])
  1042. {
  1043.     if(PlayerData[playerid][jLogged] == false) return 0;
  1044.     if(PlayerData[playerid][jLevel] >= 2)
  1045.     {
  1046.         if(PlayerData[playerid][onDuty] >= 1)
  1047.         {
  1048.             SendClientMessage(playerid, RED, "You are now off duty.");
  1049.             PlayerData[playerid][onDuty] = 0;
  1050.         }
  1051.         else
  1052.         {
  1053.             if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, RED, "You must be on foot to use this command!");
  1054.             SendClientMessage(playerid, GREY, "You are now on duty.");
  1055.             SetPlayerHealth(playerid, 100000000);
  1056.             PlayerData[playerid][onDuty] = 1;
  1057.         }
  1058.     }
  1059.     else return 0;
  1060.     return 1;
  1061. }
  1062.  
  1063. CMD:sethealth(playerid, params[])
  1064. {
  1065.     new playerID, amount, msg[128];
  1066.     if(PlayerData[playerid][jLogged] == false) return 0;
  1067.     if(PlayerData[playerid][jLevel] >= 3)
  1068.     {
  1069.         if(sscanf(params, "ii", playerID, amount)) return SendClientMessage(playerid, RED, "USAGE: /sethealth <playerid> <amount>");
  1070.         if(PlayerData[playerID][jLogged] == false) return 0;
  1071.         if(GetPlayerState(playerID) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, RED, "This player must be on foot to use this command.");
  1072.         SetPlayerHealth(playerID, amount);
  1073.         GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  1074.         format(msg, sizeof(msg), CHAT_RED"You have set "CHAT_YELLOW"%s's(%i) health to %i.", PlayerData[playerID][jName], playerID, amount);
  1075.         SendClientMessage(playerid, -1, msg);
  1076.         format(msg, sizeof(msg), CHAT_RED"An administrator has set your health to %i.", amount);
  1077.         SendClientMessage(playerID, -1, msg);
  1078.     }
  1079.     else return 0;
  1080.     return 1;
  1081. }
  1082.  
  1083. CMD:setarmour(playerid, params[])
  1084. {
  1085.     new playerID, amount, msg[128];
  1086.     if(PlayerData[playerid][jLogged] == false) return 0;
  1087.     if(PlayerData[playerid][jLevel] >= 3)
  1088.     {
  1089.         if(sscanf(params, "ii", playerID, amount)) return SendClientMessage(playerid, RED, "USAGE: /setarmour <playerid> <amount>");
  1090.         if(PlayerData[playerID][jLogged] == false) return 0;
  1091.         if(GetPlayerState(playerID) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, RED, "This player must be on foot to use this command.");
  1092.         SetPlayerArmour(playerID, amount);
  1093.         GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  1094.         format(msg, sizeof(msg), CHAT_RED"You have set "CHAT_YELLOW"%s's(%i) armour to %i.", PlayerData[playerID][jName], playerID, amount);
  1095.         SendClientMessage(playerid, -1, msg);
  1096.         format(msg, sizeof(msg), CHAT_RED"An administrator has set your armour to %i.", amount);
  1097.         SendClientMessage(playerID, -1, msg);
  1098.     }
  1099.     else return 0;
  1100.     return 1;
  1101. }
  1102.  
  1103. CMD:setallhealth(playerid, params[])
  1104. {
  1105.     new amount, msg[128];
  1106.     if(PlayerData[playerid][jLogged] == false) return 0;
  1107.     if(PlayerData[playerid][jLevel] >= 3)
  1108.     {
  1109.         if(sscanf(params, "i", amount)) return SendClientMessage(playerid, RED, "USAGE: /setallhealth <amount>");
  1110.         for(new i = 0; i <MAX_PLAYERS; i++)
  1111.         {
  1112.             SetPlayerHealth(i, amount);
  1113.         }
  1114.         format(msg, sizeof(msg), CHAT_RED"You have set all player's health to %i.", amount);
  1115.         SendClientMessage(playerid, -1, msg);
  1116.         format(msg, sizeof(msg), CHAT_RED"An administrator have set all player's health to %i.", amount);
  1117.         SendClientMessageToAll(-1, msg);
  1118.     }
  1119.     else return 0;
  1120.     return 1;
  1121. }
  1122.  
  1123. CMD:setallarmour(playerid, params[])
  1124. {
  1125.     new amount, msg[128];
  1126.     if(PlayerData[playerid][jLogged] == false) return 0;
  1127.     if(PlayerData[playerid][jLevel] >= 3)
  1128.     {
  1129.         if(sscanf(params, "i", amount)) return SendClientMessage(playerid, RED, "USAGE: /setallarmour <amount>");
  1130.         for(new i = 0; i <MAX_PLAYERS; i++)
  1131.         {
  1132.             SetPlayerArmour(i, amount);
  1133.         }
  1134.         format(msg, sizeof(msg), CHAT_RED"You have set all player's armour to %i.", amount);
  1135.         SendClientMessage(playerid, -1, msg);
  1136.         format(msg, sizeof(msg), CHAT_RED"An administrator have set all player's armour to %i.", amount);
  1137.         SendClientMessageToAll(-1, msg);
  1138.     }
  1139.     else return 0;
  1140.     return 1;
  1141. }
  1142.  
  1143. CMD:settime(playerid, params[])
  1144. {
  1145.     new playerID, hours, minutes, msg[128];
  1146.     if(PlayerData[playerid][jLogged] == false) return 0;
  1147.     if(PlayerData[playerid][jLevel] >= 3)
  1148.     {
  1149.         if(sscanf(params, "ii", playerID, hours, minutes)) return SendClientMessage(playerid, RED, "USAGE: /settime <playerid> <hours> <minutes>");
  1150.         if(PlayerData[playerID][jLogged] == false) return 0;
  1151.         SetPlayerTime(playerID, hours, minutes);
  1152.         GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  1153.         format(msg, sizeof(msg), CHAT_RED"You have set %s's(%i) time to : hours - %i, minutes - %i.", PlayerData[playerID][jName], playerID, hours, minutes);
  1154.         SendClientMessage(playerid, -1, msg);
  1155.         format(msg, sizeof(msg), CHAT_RED"An administrator have set your time to"CHAT_YELLOW" hours - %i, minutes - %i.", hours, minutes);
  1156.         SendClientMessage(playerID, -1, msg);
  1157.     }
  1158.     else return 0;
  1159.     return 1;
  1160. }
  1161.  
  1162. CMD:freeze(playerid, params[])
  1163. {
  1164.     new playerID, string[128];
  1165.     if(PlayerData[playerid][jLogged] == false) return 0;
  1166.     if(PlayerData[playerid][jLevel] >= 3)
  1167.     {
  1168.         if(sscanf(params, "i", playerID)) return SendClientMessage(playerid, RED, "USAGE: /freeze <playerid>");
  1169.         if(PlayerData[playerID][jLogged] == false) return 0;
  1170.         TogglePlayerControllable(playerID, 0);
  1171.         GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  1172.         format(string, sizeof(string), CHAT_RED"You have freezed %s(%i).", PlayerData[playerID][jName], playerID);
  1173.         SendClientMessage(playerid, -1, string);
  1174.         SendClientMessage(playerID, RED, "You have been freeze by an administrator.");
  1175.     }
  1176.     else return 0;
  1177.     return 1;
  1178. }
  1179.  
  1180. CMD:unfreeze(playerid, params[])
  1181. {
  1182.     new playerID, string[128];
  1183.     if(PlayerData[playerid][jLogged] == false) return 0;
  1184.     if(PlayerData[playerid][jLevel] >= 3)
  1185.     {
  1186.         if(sscanf(params, "i", playerID)) return SendClientMessage(playerid, RED, "USAGE: /unfreeze <playerid>");
  1187.         TogglePlayerSpectating(playerID, 1);
  1188.         GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  1189.         format(string, sizeof(string), CHAT_RED"You have unfreezed %s(%i).", PlayerData[playerID][jName], playerID);
  1190.         SendClientMessage(playerid, -1, string);
  1191.         SendClientMessage(playerID, -1, "You have been unfreezed by an administrator.");
  1192.     }
  1193.     else return 0;
  1194.     return 1;
  1195. }
  1196.  
  1197. CMD:announce(playerid, params[])
  1198. {
  1199.     new textmsg[256], string[300];
  1200.     if(PlayerData[playerid][jLogged] == false) return 0;
  1201.     if(PlayerData[playerid][jLevel] >= 3)
  1202.     {
  1203.         if(sscanf(params, "s[256]", textmsg)) return SendClientMessage(playerid, RED, "USAGE: /announce <text>");
  1204.         format(string, sizeof(string), "Administrator Announcement: %s", textmsg);
  1205.         SendClientMessageToAll(-1, string);
  1206.     }
  1207.     else return 0;
  1208.     return 1;
  1209. }
  1210.  
  1211. CMD:givecash(playerid, params[])
  1212. {
  1213.     new playerID, amount, msg[128];
  1214.     if(PlayerData[playerid][jLogged] == false) return 0;
  1215.     if(PlayerData[playerid][jLevel] >= 4)
  1216.     {
  1217.         if(sscanf(params, "ii", playerID, amount)) return SendClientMessage(playerid, RED, "USAGE: /givecash <playerid> <amount>");
  1218.         if(PlayerData[playerID][jLogged] == false) return 0;
  1219.         GivePlayerMoney(playerID, amount);
  1220.         GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  1221.         format(msg, sizeof(msg), CHAT_RED"You have given $%i to %s(%i).", amount, PlayerData[playerID][jName], playerID);
  1222.         SendClientMessage(playerid, -1, msg);
  1223.         format(msg, sizeof(msg), CHAT_RED"An administrator has given you $%i.", amount);
  1224.         SendClientMessage(playerID, -1, msg);
  1225.         for(new i = 0; i <MAX_PLAYERS; i++)
  1226.         {
  1227.             if(PlayerData[i][jLevel] >= 1)
  1228.             {
  1229.                 format(msg, sizeof(msg), CHAT_RED"ADMINISTRATOR WARNING: %s(%i) has given $%i to %s(%i).", PlayerData[playerid][jName], playerid, amount, PlayerData[playerID][jName], playerID);
  1230.                 SendClientMessage(i, -1, msg);
  1231.             }
  1232.         }
  1233.     }
  1234.     else return 0;
  1235.     return 1;
  1236. }
  1237.  
  1238. CMD:giveallcash(playerid, params[])
  1239. {
  1240.     new amount, msg[128];
  1241.     if(PlayerData[playerid][jLogged] == false) return 0;
  1242.     if(PlayerData[playerid][jLevel] >= 4)
  1243.     {
  1244.         if(sscanf(params, "i", amount)) return SendClientMessage(playerid, RED, "USAGE: /giveallcash <amount>");
  1245.         for(new i = 0; i <MAX_PLAYERS; i++)
  1246.         {
  1247.             GivePlayerMoney(i, amount);
  1248.             format(msg, sizeof(msg), CHAT_RED"An administrator have given $%i to all players.", amount);
  1249.             SendClientMessageToAll(-1, msg);
  1250.         }
  1251.     }
  1252.     else return 0;
  1253.     return 1;
  1254. }
  1255.  
  1256. CMD:setskin(playerid, params[])
  1257. {
  1258.     new playerID, skinID, msg[128];
  1259.     if(PlayerData[playerid][jLogged] == false) return 0;
  1260.     if(PlayerData[playerid][jLevel] >= 4)
  1261.     {
  1262.         if(sscanf(params, "ii", playerID, skinID)) return SendClientMessage(playerid, RED, "USAGE: /setskin <playerid> <skinid>");
  1263.         if(GetPlayerState(playerID) != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, RED, "This player must be on foot to use this command.");
  1264.         if(skinID < 0) return SendClientMessage(playerid, RED, "The skin ID you typed was wrong, you can type in range 0-299.");
  1265.         if(skinID > 299) return SendClientMessage(playerid, RED, "The skin ID you typed was wrong, you can type in range 0-299.");
  1266.         SetPlayerSkin(playerID, skinID);
  1267.         format(msg, sizeof(msg), CHAT_RED"An administrator has set your skin to "CHAT_YELLOW"%i", skinID);
  1268.         SendClientMessage(playerID, -1, msg);
  1269.         GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  1270.         format(msg, sizeof(msg), CHAT_RED"You have set %s's(%i) skin ID to %i.", PlayerData[playerID][jName], playerID, skinID);
  1271.         SendClientMessage(playerid, -1, msg);
  1272.     }
  1273.     else return 0;
  1274.     return 1;
  1275. }
  1276.  
  1277. CMD:setallskin(playerid, params[])
  1278. {
  1279.     new skinID, msg[128];
  1280.     if(PlayerData[playerid][jLogged] == false) return 0;
  1281.     if(PlayerData[playerid][jLevel] >= 4)
  1282.     {
  1283.         if(sscanf(params, "i", skinID)) return SendClientMessage(playerid, RED, "USAGE: /setallskin <skinid>");
  1284.         if(skinID < 0) return SendClientMessage(playerid, RED, "The skin ID you typed was wrong, you can type in rage 0-299.");
  1285.         if(skinID > 299) return SendClientMessage(playerid, RED, "The skin ID you typed was wrong, you can type in rage 0-299.");
  1286.         for(new i = 0; i <MAX_PLAYERS; i++)
  1287.         {
  1288.             SetPlayerSkin(i, skinID);
  1289.             format(msg, sizeof(msg), CHAT_RED"An administrator has set all player's skin ID to "CHAT_YELLOW"%i.", skinID);
  1290.             SendClientMessageToAll(-1, msg);
  1291.         }
  1292.     }
  1293.     else return 0;
  1294.     return 1;
  1295. }
  1296.  
  1297. CMD:setmoney(playerid, params[])
  1298. {
  1299.     new playerID, amount, msg[128];
  1300.     if(PlayerData[playerid][jLogged] == false) return 0;
  1301.     if(PlayerData[playerid][jLevel] >= 4)
  1302.     {
  1303.         if(sscanf(params, "ii", playerID, amount)) return SendClientMessage(playerid, RED, "USAGE: /setmoney <playerid> <amount>");
  1304.         if(PlayerData[playerID][jLogged] == false) return 0;
  1305.         ResetPlayerMoney(playerID);
  1306.         GivePlayerMoney(playerID, amount);
  1307.         GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  1308.         format(msg, sizeof(msg), CHAT_RED"You have set %s's(%i) money to %i", PlayerData[playerID][jName], playerID, amount);
  1309.         GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
  1310.         for(new i = 0; i <MAX_PLAYERS; i++)
  1311.         {
  1312.             if(PlayerData[i][jLevel] >= 1)
  1313.             {
  1314.                 format(msg, sizeof(msg), CHAT_RED"%s(%i) has set %s's(%i) money to %i.", PlayerData[playerid][jName], playerid, PlayerData[playerID][jName], playerID, amount);
  1315.                 SendClientMessage(i, -1, msg);
  1316.             }
  1317.         }
  1318.     }
  1319.     else return 0;
  1320.     return 1;
  1321. }
  1322.  
  1323. CMD:resetmoney(playerid, params[])
  1324. {
  1325.     new playerID, msg[128];
  1326.     if(PlayerData[playerid][jLogged] == false) return 0;
  1327.     if(PlayerData[playerid][jLevel] >= 4)
  1328.     {
  1329.         if(sscanf(params, "i", playerID)) return SendClientMessage(playerid, RED, "USAGE: /resetmoney <playerid>");
  1330.         if(PlayerData[playerID][jLogged] == false) return 0;
  1331.         ResetPlayerMoney(playerID);
  1332.         GetPlayerName(playerID, PlayerData[playerid][jName], MAX_PLAYER_NAME);
  1333.         format(msg, sizeof(msg), CHAT_RED"You have resetted %s's(%i) money.", PlayerData[playerID][jName], playerID);
  1334.         SendClientMessage(playerid, -1, msg);
  1335.         GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
  1336.         for(new i = 0; i <MAX_PLAYERS; i++)
  1337.         {
  1338.             if(PlayerData[i][jLevel] >= 1)
  1339.             {
  1340.                 format(msg, sizeof(msg), CHAT_RED"ADMINISTRATOR WARNING: %s(%i) has reset %s's(%i) money.", PlayerData[playerid][jName], playerid, PlayerData[playerID][jName], playerID);
  1341.                 SendClientMessage(i, -1, msg);
  1342.             }
  1343.         }
  1344.     }
  1345.     else return 0;
  1346.     return 1;
  1347. }
  1348.  
  1349. CMD:ban(playerid, params[])
  1350. {
  1351.     if(PlayerData[playerid][jLogged] == false) return 0;
  1352.     if(PlayerData[playerid][jLevel] < 4) return 0;
  1353.  
  1354.     new targetid;
  1355.     new reason[64];
  1356.     new days;
  1357.     if (sscanf(params, "uis[64]", targetid, days, reason))
  1358.     {
  1359.         SendClientMessage(playerid, COLOR_WHITE, "Usage: /ban [id/name] [days] [reason]");
  1360.         return SendClientMessage(playerid, COLOR_WHITE, "Note: 0 days means a permanent ban from server.");
  1361.     }
  1362.  
  1363.     if (!IsPlayerConnected(targetid))
  1364.     {
  1365.         return SendClientMessage(playerid, COLOR_TOMATO, "Target player isn't online.");
  1366.     }
  1367.  
  1368.     if (days < 0 || days > 365)
  1369.     {
  1370.         return SendClientMessage(playerid, COLOR_TOMATO, "Number of days cannot be negative or greater than 365 days i.e. a year! [0 = permanent ban]");
  1371.     }
  1372.  
  1373.     if (strlen(reason) < 4)
  1374.     {
  1375.         return SendClientMessage(playerid, COLOR_TOMATO, "Invalid reason entered.");
  1376.     }
  1377.  
  1378.     banTargetID[playerid] = targetid;
  1379.     banTargetDays[playerid] = days;
  1380.     format(banTargetReason[playerid], sizeof banTargetReason[], reason);
  1381.  
  1382.     new name[MAX_PLAYER_NAME];
  1383.     new ip[18];
  1384.     GetPlayerName(targetid, name, sizeof name);
  1385.     GetPlayerIp(targetid, ip, sizeof ip);
  1386.  
  1387.     new string[1024] = ""COL_WHITE"You are about to ban a player! Please confirm the following\ncredentials and click \""COL_PINK"Ban"COL_WHITE"\" if they are correct, else click \""COL_TOMATO"Cancel"COL_WHITE"\".";
  1388.     if (days != 0)
  1389.     {
  1390.         format(string, sizeof string, "%s\n\n- "COL_PINK"Player: "COL_WHITE"%s (IP: %s)\n- "COL_PINK"Type: "COL_WHITE"Temporary - %i days\n- "COL_PINK"Reason: "COL_WHITE"%s",
  1391.             string, name, ip, days, reason);
  1392.     }
  1393.     else
  1394.     {
  1395.         format(string, sizeof string, "%s\n\n- "COL_PINK"Player: "COL_WHITE"%s (IP: %s)\n- "COL_PINK"Type: "COL_WHITE"Permanent\n- "COL_PINK"Reason: "COL_WHITE"%s",
  1396.             string, name, ip, reason);
  1397.     }
  1398.     strcat(string, "\n\n"COL_WHITE"Admin Note: If the cheat player used is challengable, make sure you have\nsome kind of evidence in case a ban appeal is posted.");
  1399.  
  1400.     return Dialog_Show(playerid, BAN_PLAYER, DIALOG_STYLE_MSGBOX, "Ban A Player...", string, "Ban", "Cancel");
  1401. }
  1402.  
  1403. CMD:searchban(playerid, params[])
  1404. {
  1405.     if(PlayerData[playerid][jLogged] == false) return 0;
  1406.     if(PlayerData[playerid][jLevel] < 4) return 0;
  1407.     if (!params[0] || params[0] == ' ' || strlen(params) < 4)
  1408.     {
  1409.         return SendClientMessage(playerid, COLOR_WHITE, "Usage: /searchban [name/ip]");
  1410.     }
  1411.     new bool:nameEntered;
  1412.     for (new i; params[i] != EOS; i++)
  1413.     {
  1414.         if (params[i] == '.' || params[i] >= '0' && params[i] <= '9')
  1415.         {
  1416.             continue;
  1417.         }
  1418.         nameEntered = true;
  1419.         break;
  1420.     }
  1421.  
  1422.     new string[1024];
  1423.     if (nameEntered)
  1424.     {
  1425.         format(string, sizeof string, "SELECT * FROM `users` WHERE `name` = '%s' LIMIT 1", params);
  1426.     }
  1427.     else
  1428.     {
  1429.         if (!Ban_GetLongIP(params))
  1430.         {
  1431.             return SendClientMessage(playerid, COLOR_TOMATO, "Invalid IP. Address entered.");
  1432.         }
  1433.         format(string, sizeof string, "SELECT * FROM `users` WHERE (`longip` != 0 AND (`longip` & %i) = %i) LIMIT 1", BAN_MASK, (Ban_GetLongIP(params) & BAN_MASK));
  1434.     }
  1435.     new DBResult:result = db_query(banDatabase, string);
  1436.     if (db_num_rows(result) == 0)
  1437.     {
  1438.         if (nameEntered)
  1439.         {
  1440.             SendClientMessage(playerid, COLOR_TOMATO, "The player you are looking for is not banned.");
  1441.         }
  1442.         else
  1443.         {
  1444.             SendClientMessage(playerid, COLOR_TOMATO, "The IP. you entered is not banned.");
  1445.         }
  1446.         return db_free_result(result);
  1447.     }
  1448.     if (db_get_field_assoc_int(result, "expire_timestamp") != 0 && db_get_field_assoc_int(result, "expire_timestamp") <= gettime())
  1449.     {
  1450.         format(string, sizeof string, "DELETE FROM `users` WHERE `id` = %i", db_get_field_assoc_int(result, "id"));
  1451.         db_query(banDatabase, string);
  1452.        
  1453.         new name[MAX_PLAYER_NAME];
  1454.         db_get_field_assoc(result, "name", name, sizeof name);
  1455.         format(string, sizeof string, "\"%s\"'s ban was lifted %s ago.", name, ReturnTimelapse(db_get_field_assoc_int(result, "expire_timestamp"), gettime()));
  1456.         SendClientMessage(playerid, COLOR_GREEN, string);
  1457.  
  1458.         return db_free_result(result);
  1459.     }
  1460.  
  1461.     unbanTargetID[playerid] = db_get_field_assoc_int(result, "id");
  1462.  
  1463.     db_get_field_assoc(result, "name", unbanTargetName[playerid], sizeof unbanTargetName[]);
  1464.     db_get_field_assoc(result, "ip", unbanTargetIp[playerid], sizeof unbanTargetIp[]);
  1465.     new reason[64];
  1466.     db_get_field_assoc(result, "reason", reason, sizeof reason);
  1467.     new admin[MAX_PLAYER_NAME];
  1468.     db_get_field_assoc(result, "admin", admin, sizeof admin);
  1469.  
  1470.     format(string, sizeof string, ""COL_WHITE"Showing ban result for your search \""COL_TOMATO"%s"COL_WHITE"\".\nIf you want to unban this player personally, click \""COL_PINK"Unban"COL_WHITE"\"; or click \""COL_TOMATO"Close"COL_WHITE"\" to close this dialog!", params);
  1471.     if (db_get_field_assoc_int(result, "expire_timestamp") != 0)
  1472.     {
  1473.         format(string, sizeof string, "%s\n\n- "COL_PINK"Player: "COL_WHITE"%s (IP: %s)\n- "COL_PINK"Dated: "COL_WHITE"%s (%s ago)\n- "COL_PINK"Timeleft For Unban: "COL_WHITE"%s\n- "COL_PINK"Admin Who Banned: "COL_WHITE"%s\n- "COL_PINK"Reason: "COL_WHITE"%s",
  1474.         string, unbanTargetName[playerid], unbanTargetIp[playerid], ReturnDate(db_get_field_assoc_int(result, "register_timestamp")), ReturnTimelapse(db_get_field_assoc_int(result, "register_timestamp"), gettime()), ReturnTimelapse(gettime(), db_get_field_assoc_int(result, "expire_timestamp")), admin, reason);
  1475.     }
  1476.     else
  1477.     {
  1478.         format(string, sizeof string, "%s\n\n- "COL_PINK"Player: "COL_WHITE"%s (IP: %s)\n- "COL_PINK"Dated: "COL_WHITE"%s (%s ago)\n- "COL_PINK"Timeleft For Unban: "COL_WHITE"Never (permanent ban)\n- "COL_PINK"Admin Who Banned: "COL_WHITE"%s\n- "COL_PINK"Reason: "COL_WHITE"%s",
  1479.         string, unbanTargetName[playerid], unbanTargetIp[playerid], ReturnDate(db_get_field_assoc_int(result, "register_timestamp")), ReturnTimelapse(db_get_field_assoc_int(result, "register_timestamp"), gettime()), admin, reason);
  1480.     }
  1481.     format(string, sizeof string, "%s\n\n"COL_WHITE"Player last active was on \"%s\" during ban time period!", string, ReturnDate(db_get_field_assoc_int(result, "last_activity_timestamp")));
  1482.  
  1483.     db_free_result(result);
  1484.  
  1485.     return Dialog_Show(playerid, SEARCH_BANNED_PLAYER, DIALOG_STYLE_MSGBOX, "Search result for banned Player / IP...", string, "Close", "UnBan");
  1486. }
  1487.  
  1488. CMD:setlevel(playerid, params[])
  1489. {
  1490.     new playerID, aLevel, msg[128];
  1491.     if(PlayerData[playerid][jLogged] == false) return 0;
  1492.     if(PlayerData[playerid][jLevel] >= 5)
  1493.     {
  1494.         if(sscanf(params, "ii", playerID, aLevel)) return SendClientMessage(playerid, RED, "USAGE: /setlevel <playerid> <level>");
  1495.         if(PlayerData[playerID][jLogged] == false) return 0;
  1496.         PlayerData[playerID][jLevel] = aLevel;
  1497.         GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
  1498.         format(msg, sizeof(msg), CHAT_RED"%s(%i) has set you to admin level %i.", PlayerData[playerid][jName], playerid, aLevel);
  1499.         SendClientMessage(playerid, -1, msg);
  1500.         GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  1501.         format(msg, sizeof(msg), CHAT_RED"You have set %s's(%i) admin level to %i.", PlayerData[playerID][jName], playerID, aLevel);
  1502.         SendClientMessage(playerID, -1, msg);
  1503.     }
  1504.     else return 0;
  1505.     return 1;
  1506. }
  1507.  
  1508. CMD:sethelper(playerid, params[])
  1509. {
  1510.     new playerID, hLevel, msg[128];
  1511.     if(PlayerData[playerid][jLogged] == false) return 0;
  1512.     if(PlayerData[playerid][jLevel] >= 5)
  1513.     {
  1514.         if(sscanf(params, "ii", playerID, hLevel)) return SendClientMessage(playerid, RED, "USAGE: /sethelper <playerid> <level>");
  1515.         if(PlayerData[playerID][jLogged] == false) return 0;
  1516.         PlayerData[playerID][jHelper] = hLevel;
  1517.         GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
  1518.         format(msg, sizeof(msg), CHAT_RED"%s(%i) has set you to helper level %i.", PlayerData[playerid][jName], playerid, hLevel);
  1519.         SendClientMessage(playerID, -1, msg);
  1520.         format(msg, sizeof(msg), CHAT_RED"You have set %s's(%i) helper level to %i.", PlayerData[playerID][jName], playerid, hLevel);
  1521.         SendClientMessage(playerid, -1, msg);
  1522.     }
  1523.     else return 0;
  1524.     return 1;
  1525. }
  1526.  
  1527. CMD:setvip(playerid, params[])
  1528. {
  1529.     new playerID, vLevel, msg[128];
  1530.     if(PlayerData[playerid][jLogged] == false) return 0;
  1531.     if(PlayerData[playerid][jLevel] >= 5)
  1532.     {
  1533.         if(sscanf(params, "ii", playerID, vLevel)) return SendClientMessage(playerid, RED, "USAGE: /setvip <playerid> <level>");
  1534.         if(PlayerData[playerID][jLogged] == false) return 0;
  1535.         PlayerData[playerID][jVIP] = vLevel;
  1536.         GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
  1537.         format(msg, sizeof(msg), CHAT_RED"%s(%i) has set you to vip level %i.", PlayerData[playerid][jName], playerid, vLevel);
  1538.         SendClientMessage(playerID, -1, msg);
  1539.         GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  1540.         format(msg, sizeof(msg), CHAT_RED"You have set %s's(%i) vip level to %i.", PlayerData[playerid][jName], playerid, vLevel);
  1541.         SendClientMessage(playerid, -1, msg);
  1542.     }
  1543.     else return 0;
  1544.     return 1;
  1545. }
  1546.  
  1547. CMD:setwanted(playerid, params[])
  1548. {
  1549.     new playerID, wLevel, msg[128];
  1550.     if(PlayerData[playerid][jLogged] == false) return 0;
  1551.     if(PlayerData[playerid][jLevel] >= 5)
  1552.     {
  1553.         if(sscanf(params, "ii", playerID, wLevel)) return SendClientMessage(playerid, RED, "USAGE: /setwanted <playerid> <wanted level>");
  1554.         if(PlayerData[playerID][jLogged] == false) return 0;
  1555.         SetPlayerWantedLevel(playerID, wLevel);
  1556.         GetPlayerName(playerid, PlayerData[playerid][jName], MAX_PLAYER_NAME);
  1557.         format(msg, sizeof(msg), CHAT_RED"%s(%i) has set your wanted level to %i.", PlayerData[playerid][jName], playerid, wLevel);
  1558.         SendClientMessage(playerID, -1, msg);
  1559.         GetPlayerName(playerID, PlayerData[playerID][jName], MAX_PLAYER_NAME);
  1560.         format(msg, sizeof(msg), CHAT_RED"You have set %s's(%i) wanted level to %i.", PlayerData[playerID][jName], playerID, wLevel);
  1561.         SendClientMessage(playerid, -1, msg);
  1562.     }
  1563.     else return 0;
  1564.     return 1;
  1565. }
  1566.  
  1567. CMD:restart(playerid, params[])
  1568. {
  1569.     if(PlayerData[playerid][jLogged] == false) return 0;
  1570.     if(PlayerData[playerid][jLevel] >= 5)
  1571.     {
  1572.         SendRconCommand("gmx");
  1573.     }
  1574.     else return 0;
  1575.     return 1;
  1576. }
  1577.  
  1578. //Player Commands
  1579. CMD:cmds(playerid, params[])
  1580. {
  1581.     new str[128];
  1582.     if(PlayerData[playerid][jLogged] == false) return 0;
  1583.     strcat(str, "/admins, /stats.");
  1584.     ShowPlayerDialog(playerid, DIALOG_COMMANDS, DIALOG_STYLE_MSGBOX, "Server Commands", str, "Close", "");
  1585.     return 1;
  1586. }
  1587.  
  1588. CMD:admins(playerid, params[])
  1589. {
  1590.     new string[256];
  1591.     if(PlayerData[playerid][jLogged] == false) return 0;
  1592.     for(new i = 0; i <MAX_PLAYERS; i++)
  1593.     {
  1594.         if(PlayerData[i][jLevel] >= 1)
  1595.         {
  1596.             GetPlayerName(i, PlayerData[i][jName], MAX_PLAYER_NAME);
  1597.             format(string, sizeof(string), CHAT_YELLOW"%s(%i) - Level %i", PlayerData[i][jName], i, PlayerData[i][jLevel]);
  1598.             ShowPlayerDialog(playerid, DIALOG_ADMINS, DIALOG_STYLE_MSGBOX, "Server Admins", string, "Close", "");
  1599.         }
  1600.         SendClientMessage(playerid, RED, "No Admins Online.");
  1601.     }
  1602.     return 1;
  1603. }
  1604.  
  1605. CMD:stats(playerid, params[])
  1606. {
  1607.     new string[1500];
  1608.     if(PlayerData[playerid][jLogged] == false) return 0;
  1609.     format(string, sizeof(string), CHAT_GREY"Score: "CHAT_YELLOW"%i\n"CHAT_GREY"Money: "CHAT_YELLOW"%i\n"CHAT_GREY"Wanted Level: "CHAT_YELLOW"%i\n"CHAT_GREY"Kills: "CHAT_YELLOW"%i\n"CHAT_GREY"Deaths: "CHAT_YELLOW"%i\n"CHAT_GREY"Admin: "CHAT_YELLOW"%i\n"CHAT_GREY"VIP: "CHAT_YELLOW"%i\n"CHAT_GREY"Helper: "CHAT_YELLOW"%i\n",
  1610.     GetPlayerScore(playerid), GetPlayerMoney(playerid), GetPlayerWantedLevel(playerid), PlayerData[playerid][jKills], PlayerData[playerid][jDeaths], PlayerData[playerid][jLevel], PlayerData[playerid][jVIP], PlayerData[playerid][jHelper]);
  1611.     ShowPlayerDialog(playerid, DIALOG_STATS, DIALOG_STYLE_MSGBOX, "Your Stats", string, "Close", "");
  1612.     return 1;
  1613. }
  1614.  
  1615. Dialog:BAN_PLAYER(playerid, response, listitem, inputtext[])
  1616. {
  1617.     if (!IsPlayerConnected(banTargetID[playerid]))
  1618.     {
  1619.         return SendClientMessage(playerid, COLOR_TOMATO, "The player you were trying to ban left the server recently.");
  1620.     }
  1621.  
  1622.     new string[512];
  1623.     if (!response)
  1624.     {
  1625.         new name[MAX_PLAYER_NAME];
  1626.         GetPlayerName(banTargetID[playerid], name, sizeof name);
  1627.         format(string, sizeof string, "Ban on %s was canceled by you!", name);
  1628.         return SendClientMessage(playerid, COLOR_TOMATO, string);
  1629.     }
  1630.  
  1631.     new name[MAX_PLAYER_NAME];
  1632.     new ip[18];
  1633.     GetPlayerName(banTargetID[playerid], name, sizeof name);
  1634.     GetPlayerIp(banTargetID[playerid], ip, sizeof ip);
  1635.  
  1636.     new admin[MAX_PLAYER_NAME];
  1637.     GetPlayerName(playerid, admin, sizeof admin);
  1638.  
  1639.     for (new i; i < 100; i++)
  1640.     {
  1641.         SendClientMessage(banTargetID[playerid], -1, "");
  1642.     }
  1643.  
  1644.     if (banTargetDays[playerid] != 0)
  1645.     {
  1646.         format(string, sizeof string, "\"%s\" has been banned by admin \"%s\" for %i days; for reason: %s.", name, admin, banTargetDays[playerid], banTargetReason[playerid]);
  1647.         SendClientMessageToAll(COLOR_RED, string);
  1648.     }
  1649.     else
  1650.     {
  1651.         format(string, sizeof string, "\"%s\" has been permanently banned by admin \"%s\"; for reason: %s.", name, admin, banTargetReason[playerid]);
  1652.         SendClientMessageToAll(COLOR_RED, string);
  1653.     }
  1654.  
  1655.     format(string, sizeof string, "INSERT INTO `users`(`name`, `ip`, `longip`, `expire_timestamp`, `register_timestamp`, `last_activity_timestamp`, `admin`, `reason`) VALUES('%s', '%s', %i, %i, %i, %i, '%s', '%s')", name, ip, Ban_GetLongIP(ip), (banTargetDays[playerid] == 0) ? (0) : (gettime() + (banTargetDays[playerid] * 24 * 60 * 60)), gettime(), gettime(), name, banTargetReason[playerid]);
  1656.     db_query(banDatabase, string);
  1657.  
  1658.     TextDrawShowForPlayer(playerid, banTextDraw[0]);
  1659.     TextDrawShowForPlayer(playerid, banTextDraw[1]);
  1660.     return Kick(banTargetID[playerid], KICK_DELAY);
  1661. }
  1662.  
  1663. Dialog:SEARCH_BANNED_PLAYER(playerid, response, listitem, inputtext[])
  1664. {
  1665.     if (response)
  1666.     {
  1667.         return 1;
  1668.     }
  1669.  
  1670.     new string[256];
  1671.     format(string, sizeof string, "DELETE FROM `users` WHERE `name` = '%s' OR `ip` = '%s' OR `longip` != 0 AND (`longip` & %i) = %i", unbanTargetName[playerid], unbanTargetIp[playerid], BAN_MASK, (Ban_GetLongIP(unbanTargetIp[playerid]) & BAN_MASK));
  1672.     db_query(banDatabase, string);
  1673.  
  1674.     format(string, sizeof string, "You have unbanned player \"%s\" successfully!", unbanTargetName[playerid]);
  1675.     return SendClientMessage(playerid, COLOR_GREEN, string);
  1676. }
  1677.  
  1678. /* SQL Tables */
  1679. CREATE TABLE IF NOT EXISTS `player` (`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,`name` varchar(25),`password` varchar(129),`score` int(11) NOT NULL DEFAULT '0',`money` int(11) NOT NULL DEFAULT '0',`kills` int(11) NOT NULL DEFAULT '0',`deaths` int(11) NOT NULL DEFAULT '0',`wanted` int(11) NOT NULL DEFAULT '0',`mutedtime` int(11) NOT NULL DEFAULT '0',`level` int(11) NOT NULL DEFAULT '0',`vip` int(11) NOT NULL DEFAULT '0',`helper` int(11) NOT NULL DEFUALT '0')
Add Comment
Please, Sign In to add comment