SecretBoss

sbAdmin - Advanced MySQL Administration system

Nov 14th, 2015
1,104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 151.47 KB | None | 0 0
  1.                                                                                                                                                                             /*
  2.                      _       _       _           _
  3.                  ___| |__   /_\   __| |_ __ ___ (_)_ __
  4.                 / __| '_ \ //_\\ / _` | '_ ` _ \| | '_ \
  5.                 \__ \ |_) /  _  \ (_| | | | | | | | | | |
  6.                 |___/_.__/\_/ \_/\__,_|_| |_| |_|_|_| |_|
  7.                 SecretBoss Administration System - Version 1.1
  8.                 Based on MySQL (Special thanks to ThePhenix)
  9.                 Check changelog for updates
  10.                
  11.                 Every command and feature that it is added on
  12.                 this system is double checked, since it is the
  13.                 first version it may have some bugs, so please
  14.                 report them on forums
  15.                
  16.                 Special thanks to Gammix for his GAdmin system
  17.                 and some ideas and macros I got from him.
  18.                
  19.                 Also I would like to thanks all the guys who
  20.                 helped me with their includes, functions etc.
  21.                                                                                                                                                                             */
  22.  
  23.  
  24. // Includes
  25. #include <a_samp>           // SAMP Teamds
  26. #include <easyDialog>       // Emmet_
  27. #include <sscanf2>          // Emmet_
  28. #include <izcmd>            // Yashas
  29. #include <easy-mysql>       // ThePhenix
  30. #include <timestamptodate>  // Jochemd
  31. #include <streamer>         // Incognito
  32.  
  33. // MySQL Configuration
  34. #define MYSQL_HOST                          "localhost"         // Your MySQL's Host
  35. #define MYSQL_USER                          "root"              // Your MySQL's Username
  36. #define MYSQL_DATABASE                      "sbadmin"           // Your MySQL's Database
  37. #define MYSQL_PASSWORD                      ""                  // Your MySQL's Password
  38. #define mysql_debugging_enabled             true                // Enable debug mode if you want change it
  39.  
  40. #define PLAYERS_TABLE                       "accounts"          // Table where all accounts will be saved
  41. #define BANS_TABLE                          "bans"              // Table where all Bans will be saved
  42.  
  43. // Configuration
  44. #define READ_COMMANDS                                           // Comment to disable admins from reading commands
  45. //#define REQUIRE_LOGIN                                           // Comment to disable players from forcing to login
  46. //#define REQUIRE_REGISTER                                        // Comment to disable players from forcing to register
  47. #define LOGIN_ATTEMPTS                      3                   // Max login attemps (Use 0 to disable it)
  48. #define MAX_WARNS                           3                   // Max Warnings (After that number player will be kicked)
  49.  
  50. #define SAVE_LOGS                                               // Comment to disable log system
  51. #if defined SAVE_LOGS
  52.     #define LOGFILE                         "sbAdmin/Logs/"     // Place where Logs will be saved (If log system is on)
  53. #endif
  54.  
  55. #define MAX_ADMIN_LEVELS                    5                   // Max admin levels where a player can get
  56. #define MAX_VIP_LEVELS                      3                   // Max VIP levels where a player can get
  57.  
  58. #define SPECTATE_TEXTDRAW                                       // Comment to disable textdraws when you spec a player
  59. #define USE_ANTIADVERT                                          // Comment to disable anti advert system by SickAttack
  60.  
  61.  
  62. /*
  63.     Default Admin Levels are 5, (3 for VIPS)
  64.     if you are going to remove or add some
  65.     then yoy must change the defines and
  66.     commands to your own
  67. */
  68. #define LEVEL1                              "Trial Admin"       // Name for level 1 admin
  69. #define LEVEL2                              "Senior Admin"      // Name for level 2 admin
  70. #define LEVEL3                              "General Admin"     // Name for level 3 admin
  71. #define LEVEL4                              "Head Admin"        // Name for level 4 admin
  72. #define LEVEL5                              "Director"          // Name for level 5 admin
  73.  
  74. #define VIP1                                "Bronze VIP"        // Name for VIP Level 1
  75. #define VIP2                                "Silver VIP"        // Name for VIP Level 2
  76. #define VIP3                                "Gold VIP"          // Name for VIP Level 3
  77.  
  78. // Colors
  79. #define COLOR_WHITE                         0xFFFFFFFF
  80. #define COLOR_RED                           0xFF0000FF
  81. #define COLOR_CYAN                          0x33CCFFFF
  82. #define COLOR_LIGHTRED                      0xFF6347FF
  83. #define COLOR_LIGHTGREEN                    0x9ACD32FF
  84. #define COLOR_YELLOW                        0xFFFF00FF
  85. #define COLOR_GREY                          0xAFAFAFFF
  86. #define COLOR_PURPLE                        0xD0AEEBFF
  87. #define COLOR_LIGHTYELLOW                   0xF5DEB3FF
  88. #define COLOR_DARKBLUE                      0x1394BFFF
  89. #define COLOR_ORANGE                        0xFFA500FF
  90. #define COLOR_LIME                          0x00FF00FF
  91. #define COLOR_GREEN                         0x33CC33FF
  92. #define COLOR_BLUE                          0x2641FEFF
  93. #define COLOR_LIGHTBLUE                     0x007FFFFF
  94. #define COLOR_SERVER                        0xFFFF90FF
  95.  
  96. #define white                               "{FFFFFF}"
  97. #define lightblue                           "{33CCFF}"
  98. #define grey                                "{AFAFAF}"
  99. #define orange                              "{FF8000}"
  100. #define black                               "{2C2727}"
  101. #define red                                 "{FF0000}"
  102. #define yellow                              "{FFFF00}"
  103. #define green                               "{33CC33}"
  104. #define blue                                "{0080FF}"
  105. #define purple                              "{D526D9}"
  106. #define pink                                "{FF80FF}"
  107. #define brown                               "{A52A2A}"
  108.  
  109. // Other defines & Macros
  110. new sb_string[144];
  111.  
  112. #define Server(%0,%1) \
  113.     SendClientMessage(%0, COLOR_SERVER, "[sbAdmin]: {FFFFFF}"%1)
  114.  
  115. #define Usage(%0,%1) \
  116.     SendClientMessage(%0, COLOR_GREY, "Usage: {FFFFFF}/"%1)
  117.  
  118. #define Error(%0,%1) \
  119.     SendClientMessage(%0, COLOR_LIGHTRED, "[ERROR]: {FFFFFF}"%1)
  120.  
  121. #define LevelCheck(%0,%1); \
  122.     if(GetLevel(%0) < %1 && ! IsPlayerAdmin(%0)) \
  123.         return (format(sb_string, sizeof(sb_string), "[ERROR]: You must be level %i admin to use this command.", %1), \
  124.             SendClientMessage(%0, COLOR_LIGHTRED, sb_string));
  125.            
  126. #define VipCheck(%0,%1); \
  127.     if(GetVipLevel(%0) < %1 && ! IsPlayerAdmin(%0)) \
  128.         return (format(sb_string, sizeof(sb_string), "[ERROR]: You must be VIP level %i to use this command.", %1), \
  129.             SendClientMessage(%0, COLOR_LIGHTRED, sb_string));
  130.  
  131. #define HelperCheck(%1); \
  132.     if(!IsPlayerHelper(%1)) \
  133.         return Error(playerid, "You must be a Helper to use this command");
  134.                
  135. #define LOOP_PLAYERS(%0) \
  136.             for(new %0 = 0, _%0 = GetPlayerPoolSize(); %0 <= _%0, IsPlayerConnected(%0); %0++)
  137.  
  138. #if !defined IsValidWeapon
  139.     #define IsValidWeapon(%0) (%0 < 47)
  140. #endif
  141.  
  142. // Some variables
  143.  
  144. new Text:announceTD;
  145.  
  146. //=================================================
  147.  
  148. enum sbAdmin
  149. {
  150.     // Saved data
  151.     id,                 // Account ID
  152.     username[24],       // Registered username
  153.     password[114],      // Hashed password
  154.     ip[16],             // IP
  155.     score,              // Score
  156.     level,              // Admin Level
  157.     helper,             // Helper Level
  158.     cash,               // Cash/Money
  159.     vip,                // VIP Level
  160.     kills,              // Kills
  161.     deaths,             // Deaths
  162.     ohours,             // Online Hours
  163.     ominutes,           // Online Minutes
  164.     oseconds,           // Online Seconds
  165.     wanteds,            // Wanteds
  166.     mutedsec,           // Muted seconds
  167.     cmdmutedsec,        // Command muted seconds
  168.     jailedsec,          // Jailed seconds
  169.     warns,              // Total warns
  170.    
  171.     // Not saved data
  172.     loggedin,           // Checks if player is logged in
  173.     attempts,           // Counts login attempts
  174.     avehicle,           // Counts admin vehicles
  175.     thours,             // total hours
  176.     tminutes,           // total minutes
  177.     tseconds,           // total seconds
  178.     updatetimer,        // Timer that is called each 1 sec
  179.     specdata[2],        // Data that are used for Spectate system
  180.     Float:specpos[4],   // Data that are used for Spectate system
  181.     specid,             // Spectate ID
  182.     bool:spec,          // Check for IsPlayerSpectating
  183.     Float:pos[3],       // Data that are used for Spectate system
  184.     int,                // Interior
  185.     #if defined SPECTATE_TEXTDRAW
  186.         PlayerText:specTD,
  187.     #endif
  188.     vw,                 // Virtual World
  189.     jailed              // Checks if player is jailed
  190. };
  191. new User[MAX_PLAYERS][sbAdmin];
  192.  
  193. //=================================================
  194.  
  195. new sbVehicles[212][] =
  196. {
  197.     {"Landstalker"},{"Bravura"},{"Buffalo"},{"Linerunner"},{"Perrenial"},{"Sentinel"},{"Dumper"},
  198.     {"Firetruck"},{"Trashmaster"},{"Stretch"},{"Manana"},{"Infernus"},{"Voodoo"},{"Pony"},{"Mule"},
  199.     {"Cheetah"},{"Ambulance"},{"Leviathan"},{"Moonbeam"},{"Esperanto"},{"Taxi"},{"Washington"},
  200.     {"Bobcat"},{"Mr Whoopee"},{"BF Injection"},{"Hunter"},{"Premier"},{"Enforcer"},{"Securicar"},
  201.     {"Banshee"},{"Predator"},{"Bus"},{"Rhino"},{"Barracks"},{"Hotknife"},{"Trailer 1"},{"Previon"},
  202.     {"Coach"},{"Cabbie"},{"Stallion"},{"Rumpo"},{"RC Bandit"},{"Romero"},{"Packer"},{"Monster"},
  203.     {"Admiral"},{"Squalo"},{"Seasparrow"},{"Pizzaboy"},{"Tram"},{"Trailer 2"},{"Turismo"},
  204.     {"Speeder"},{"Reefer"},{"Tropic"},{"Flatbed"},{"Yankee"},{"Caddy"},{"Solair"},{"Berkley's RC Van"},
  205.     {"Skimmer"},{"PCJ-600"},{"Faggio"},{"Freeway"},{"RC Baron"},{"RC Raider"},{"Glendale"},{"Oceanic"},
  206.     {"Sanchez"},{"Sparrow"},{"Patriot"},{"Quad"},{"Coastguard"},{"Dinghy"},{"Hermes"},{"Sabre"},
  207.     {"Rustler"},{"ZR-350"},{"Walton"},{"Regina"},{"Comet"},{"BMX"},{"Burrito"},{"Camper"},{"Marquis"},
  208.     {"Baggage"},{"Dozer"},{"Maverick"},{"News Chopper"},{"Rancher"},{"FBI Rancher"},{"Virgo"},{"Greenwood"},
  209.     {"Jetmax"},{"Hotring"},{"Sandking"},{"Blista Compact"},{"Police Maverick"},{"Boxville"},{"Benson"},
  210.     {"Mesa"},{"RC Goblin"},{"Hotring Racer A"},{"Hotring Racer B"},{"Bloodring Banger"},{"Rancher"},
  211.     {"Super GT"},{"Elegant"},{"Journey"},{"Bike"},{"Mountain Bike"},{"Beagle"},{"Cropdust"},{"Stunt"},
  212.     {"Tanker"}, {"Roadtrain"},{"Nebula"},{"Majestic"},{"Buccaneer"},{"Shamal"},{"Hydra"},{"FCR-900"},
  213.     {"NRG-500"},{"HPV1000"},{"Cement Truck"},{"Tow Truck"},{"Fortune"},{"Cadrona"},{"FBI Truck"},
  214.     {"Willard"},{"Forklift"},{"Tractor"},{"Combine"},{"Feltzer"},{"Remington"},{"Slamvan"},
  215.     {"Blade"},{"Freight"},{"Streak"},{"Vortex"},{"Vincent"},{"Bullet"},{"Clover"},{"Sadler"},
  216.     {"Firetruck LA"},{"Hustler"},{"Intruder"},{"Primo"},{"Cargobob"},{"Tampa"},{"Sunrise"},{"Merit"},
  217.     {"Utility"},{"Nevada"},{"Yosemite"},{"Windsor"},{"Monster A"},{"Monster B"},{"Uranus"},{"Jester"},
  218.     {"Sultan"},{"Stratum"},{"Elegy"},{"Raindance"},{"RC Tiger"},{"Flash"},{"Tahoma"},{"Savanna"},
  219.     {"Bandito"},{"Freight Flat"},{"Streak Carriage"},{"Kart"},{"Mower"},{"Duneride"},{"Sweeper"},
  220.     {"Broadway"},{"Tornado"},{"AT-400"},{"DFT-30"},{"Huntley"},{"Stafford"},{"BF-400"},{"Newsvan"},
  221.     {"Tug"},{"Trailer 3"},{"Emperor"},{"Wayfarer"},{"Euros"},{"Hotdog"},{"Club"},{"Freight Carriage"},
  222.     {"Trailer 3"},{"Andromada"},{"Dodo"},{"RC Cam"},{"Launch"},{"Police Car (LSPD)"},{"Police Car (SFPD)"},
  223.     {"Police Car (LVPD)"},{"Police Ranger"},{"Picador"},{"S.W.A.T. Van"},{"Alpha"},{"Phoenix"},{"Glendale"},
  224.     {"Sadler"},{"Luggage Trailer A"},{"Luggage Trailer B"},{"Stair Trailer"},{"Boxville"},{"Farm Plow"},
  225.     {"Utility Trailer"}
  226. };
  227.  
  228. //=================================================
  229.  
  230. public OnFilterScriptInit()
  231. {
  232.     print("\n\n_________________________________________________________________");
  233.     print("                        sbAdmin                                    \n");
  234.     print("[sbAdmin]: Attempting to load administration system                  ");
  235.     SQL::Connect(MYSQL_HOST, MYSQL_USER, MYSQL_DATABASE, MYSQL_PASSWORD);
  236.  
  237.     if(!SQL::ExistsTable(""PLAYERS_TABLE""))
  238.     {
  239.         new handle = SQL::Open(SQL::CREATE, ""PLAYERS_TABLE"");
  240.         SQL::AddTableEntry(handle, "id", SQL_TYPE_INT, 11, true);
  241.         SQL::AddTableEntry(handle, "username", SQL_TYPE_VCHAR, 24);
  242.         SQL::AddTableEntry(handle, "password", SQL_TYPE_VCHAR, 114);
  243.         SQL::AddTableEntry(handle, "ip", SQL_TYPE_VCHAR, 24);
  244.         SQL::AddTableEntry(handle, "score", SQL_TYPE_INT);
  245.         SQL::AddTableEntry(handle, "cash", SQL_TYPE_INT);
  246.         SQL::AddTableEntry(handle, "kills", SQL_TYPE_INT);
  247.         SQL::AddTableEntry(handle, "deaths", SQL_TYPE_INT);
  248.         SQL::AddTableEntry(handle, "vip", SQL_TYPE_INT);
  249.         SQL::AddTableEntry(handle, "level", SQL_TYPE_INT);
  250.         SQL::AddTableEntry(handle, "helper", SQL_TYPE_INT);
  251.         SQL::AddTableEntry(handle, "hours", SQL_TYPE_INT);
  252.         SQL::AddTableEntry(handle, "minutes", SQL_TYPE_INT);
  253.         SQL::AddTableEntry(handle, "seconds", SQL_TYPE_INT);
  254.         SQL::AddTableEntry(handle, "wanteds", SQL_TYPE_INT);
  255.         SQL::AddTableEntry(handle, "laston", SQL_TYPE_VCHAR, 48);
  256.         SQL::AddTableEntry(handle, "joined", SQL_TYPE_VCHAR, 48);
  257.         SQL::AddTableEntry(handle, "mutedsec", SQL_TYPE_INT);
  258.         SQL::AddTableEntry(handle, "cmdmutedsec", SQL_TYPE_INT);
  259.         SQL::AddTableEntry(handle, "jailedsec", SQL_TYPE_INT);
  260.         SQL::AddTableEntry(handle, "warns", SQL_TYPE_INT);
  261.        
  262.         SQL::Close(handle);
  263.         print("[sbAdmin]: '"PLAYERS_TABLE"' table created successfully!");
  264.     }
  265.     else if(SQL::ExistsTable(""PLAYERS_TABLE""))
  266.     {
  267.         printf("[sbAdmin]: Total %d accounts loaded from '"PLAYERS_TABLE"'", SQL::CountRows(""PLAYERS_TABLE""));
  268.     }
  269.     if(!SQL::ExistsTable(""BANS_TABLE""))
  270.     {
  271.         new handle = SQL::Open(SQL::CREATE, ""BANS_TABLE"");
  272.         SQL::AddTableEntry(handle, "ban_id", SQL_TYPE_INT, 11, true);
  273.         SQL::AddTableEntry(handle, "ban_username", SQL_TYPE_VCHAR, 24);
  274.         SQL::AddTableEntry(handle, "ban_ip", SQL_TYPE_VCHAR, 24);
  275.         SQL::AddTableEntry(handle, "ban_by", SQL_TYPE_VCHAR, 24);
  276.         SQL::AddTableEntry(handle, "ban_on", SQL_TYPE_VCHAR, 24);
  277.         SQL::AddTableEntry(handle, "ban_reason", SQL_TYPE_VCHAR, 24);
  278.         SQL::AddTableEntry(handle, "ban_expire", SQL_TYPE_INT);
  279.         SQL::Close(handle);
  280.        
  281.         print("[sbAdmin]: '"BANS_TABLE"' table created successfully!");
  282.     }
  283.     else if(SQL::ExistsTable(""BANS_TABLE""))
  284.     {
  285.         printf("[sbAdmin]: Total %d bans loaded from '"BANS_TABLE"'", SQL::CountRows(""BANS_TABLE""));
  286.     }
  287.    
  288.     print("[sbAdmin]: sbAdmin Administration system loaded successfully         ");
  289.     print("[sbAdmin]: Version: 1.1 | Author: SecretBoss                         ");
  290.     print("\n                       sbAdmin                                     ");
  291.     print("_________________________________________________________________\n\n");
  292.    
  293.     // Place the maps
  294.     PlaceMaps();
  295.    
  296.     // Build text
  297.     BuildTextdraws();
  298.     return 1;
  299. }
  300.  
  301. //=================================================
  302.  
  303. public OnPlayerConnect(playerid)
  304. {
  305.     // Hide Spectate textdraw (If it is enabled)
  306.     #if defined SPECTATE_TEXTDRAW
  307.         PlayerTextDrawHide(playerid, User[playerid][specTD]);
  308.     #endif
  309.    
  310.     // Ban Checking system
  311.     new
  312.         string[6][24],
  313.         string2[156],
  314.         expire,
  315.         DIALOG[676]
  316.     ;
  317.  
  318.     if(SQL::RowExistsEx(""BANS_TABLE"", "ban_username", GetName(playerid)))
  319.     {
  320.         new handle = SQL::OpenEx(SQL::READ, ""BANS_TABLE"", "ban_username", GetName(playerid));
  321.         SQL::ReadString(handle, "ban_username", string[1], 24);
  322.         SQL::ReadString(handle, "ban_ip", string[2], 24);
  323.         SQL::ReadString(handle, "ban_by", string[3], 24);
  324.         SQL::ReadString(handle, "ban_on", string[4], 24);
  325.         SQL::ReadString(handle, "ban_reason", string[5], 24);
  326.         SQL::ReadInt(handle, "ban_expire", expire);
  327.         SQL::Close(handle);
  328.  
  329.         if(expire > gettime() || expire == 0)
  330.         {
  331.  
  332.             strcat(DIALOG, ""white"Your account is banned from this server,\n\n");
  333.  
  334.             format(string2, sizeof(string2), ""white"Username: "red"%s\n", string[1]);
  335.             strcat(DIALOG, string2);
  336.  
  337.             format(string2, sizeof(string2), ""white"IP: "red"%s\n", string[2]);
  338.             strcat(DIALOG, string2);
  339.  
  340.             format(string2, sizeof(string2), ""white"Banned by: "red"%s\n", string[3]);
  341.             strcat(DIALOG, string2);
  342.  
  343.             format(string2, sizeof(string2), ""white"Reason: "red"%s\n", string[5]);
  344.             strcat(DIALOG, string2);
  345.  
  346.             format(string2, sizeof(string2), ""white"Ban date: "red"%s\n", string[4]);
  347.             strcat(DIALOG, string2);
  348.  
  349.             new expire2[68];
  350.             if(expire == 0) expire2 = "PERMANENT";
  351.             else expire2 = ConvertTime(expire);
  352.             format(string2, sizeof(string2), ""white"Timeleft: "red"%s\n\n", expire2);
  353.             strcat(DIALOG, string2);
  354.  
  355.             strcat(DIALOG, ""white"If you think that you got banned wrongfully, please make an appeal on our forums.\n");
  356.             strcat(DIALOG, "Make sure you saved this box by pressing F8.");
  357.  
  358.             Dialog_Show(playerid, dialogUnused, DIALOG_STYLE_MSGBOX, "Notice", DIALOG, "Close", "");
  359.             DelayKick(playerid);
  360.  
  361.             return true;
  362.         }
  363.         else
  364.         {
  365.             SQL::DeleteRowEx(""BANS_TABLE"", "ban_username", GetName(playerid));
  366.             Server(playerid, "Your account's ban has expired.");
  367.         }
  368.     }
  369.  
  370.     else if(SQL::RowExistsEx(""BANS_TABLE"", "ban_ip", GetIP(playerid)))
  371.     {
  372.         new handle = SQL::OpenEx(SQL::READ, ""BANS_TABLE"", "ban_ip", GetIP(playerid));
  373.         SQL::ReadString(handle, "ban_username", string[1], 24);
  374.         SQL::ReadString(handle, "ban_ip", string[2], 24);
  375.         SQL::ReadString(handle, "ban_by", string[3], 24);
  376.         SQL::ReadString(handle, "ban_on", string[4], 24);
  377.         SQL::ReadString(handle, "ban_reason", string[5], 24);
  378.         SQL::ReadInt(handle, "ban_expire", expire);
  379.         SQL::Close(handle);
  380.  
  381.         if(expire > gettime() || expire == 0)
  382.         {
  383.            
  384.             strcat(DIALOG, ""white"Your IP is banned from this server,\n\n");
  385.  
  386.             format(string2, sizeof(string2), ""white"Username: "red"%s\n", string[1]);
  387.             strcat(DIALOG, string2);
  388.  
  389.             format(string2, sizeof(string2), ""white"IP: "red"%s\n", string[2]);
  390.             strcat(DIALOG, string2);
  391.  
  392.             format(string2, sizeof(string2), ""white"Banned by: "red"%s\n", string[3]);
  393.             strcat(DIALOG, string2);
  394.  
  395.             format(string2, sizeof(string2), ""white"Reason: "red"%s\n", string[5]);
  396.             strcat(DIALOG, string2);
  397.  
  398.             format(string2, sizeof(string2), ""white"Ban date: "red"%s\n", string[4]);
  399.             strcat(DIALOG, string2);
  400.  
  401.             new expire2[68];
  402.             if(expire == 0) expire2 = "PERMANENT";
  403.             else expire2 = ConvertTime(expire);
  404.             format(string2, sizeof(string2), ""white"Timeleft: "red"%s\n\n", expire2);
  405.             strcat(DIALOG, string2);
  406.  
  407.             strcat(DIALOG, ""white"If you think that you got banned wrongfully, please make an appeal on our forums.\n");
  408.             strcat(DIALOG, "Make sure you saved this box by pressing F8.");
  409.  
  410.             Dialog_Show(playerid, dialogUnused, DIALOG_STYLE_MSGBOX, "Notice", DIALOG, "Close", "");
  411.             DelayKick(playerid);
  412.            
  413.             return true;
  414.         }
  415.         else
  416.         {
  417.             SQL::DeleteRowEx(""BANS_TABLE"", "ban_username", GetName(playerid));
  418.             Server(playerid, "Your IP's ban has expired.");
  419.         }
  420.     }
  421.    
  422.     // Setting up the variables
  423.     // Saved Data
  424.     User[playerid][score] = 0;
  425.     User[playerid][cash] = 0;
  426.     User[playerid][kills] = 0;
  427.     User[playerid][deaths] = 0;
  428.     User[playerid][level] = 0;
  429.     User[playerid][helper] = 0;
  430.     User[playerid][vip] = 0;
  431.     User[playerid][wanteds] = 0;
  432.     User[playerid][ohours] = 0;
  433.     User[playerid][ominutes] = 0;
  434.     User[playerid][oseconds] = 0;
  435.     User[playerid][mutedsec] = 0;
  436.     User[playerid][cmdmutedsec] = 0;
  437.     User[playerid][jailedsec] = 0;
  438.     User[playerid][warns] = 0;
  439.    
  440.     // Not saved data
  441.     User[playerid][loggedin] = 0;
  442.     User[playerid][attempts] = 0;
  443.     User[playerid][jailed] = 0;
  444.    
  445.     // Spectate System
  446.     User[playerid][specdata][0] = 0;
  447.     User[playerid][specdata][1] = 0;
  448.     User[playerid][specpos][0] = 0.0;
  449.     User[playerid][specpos][1] = 0.0;
  450.     User[playerid][specpos][2] = 0.0;
  451.     User[playerid][specpos][3] = 0.0;
  452.     User[playerid][specid] = INVALID_PLAYER_ID;
  453.     User[playerid][spec] = false;
  454.     User[playerid][pos][0] = 0.0;
  455.     User[playerid][pos][1] = 0.0;
  456.     User[playerid][pos][2] = 0.0;
  457.     User[playerid][int] = 0;
  458.     User[playerid][vw] = 0;
  459.  
  460.     #if defined SPECTATE_TEXTDRAW
  461.         User[playerid][specTD] = CreatePlayerTextDraw(playerid,17.000000, 170.000000, "~r~Spectate information");
  462.         PlayerTextDrawBackgroundColor(playerid, User[playerid][specTD], 255);
  463.         PlayerTextDrawFont(playerid, User[playerid][specTD], 1);
  464.         PlayerTextDrawLetterSize(playerid, User[playerid][specTD], 0.130000, 0.699998);
  465.         PlayerTextDrawColor(playerid, User[playerid][specTD], -1);
  466.         PlayerTextDrawSetOutline(playerid, User[playerid][specTD], 1);
  467.         PlayerTextDrawSetProportional(playerid, User[playerid][specTD], 1);
  468.         PlayerTextDrawSetSelectable(playerid, User[playerid][specTD], 0);
  469.     #endif
  470.    
  471.     // PunishmentHandle Timer
  472.     User[playerid][updatetimer] = SetTimerEx("OnPlayerUpdater", 1000, true, "i", playerid);
  473.    
  474.     if(SQL::RowExistsEx(""PLAYERS_TABLE"", "username", GetName(playerid)))
  475.     {
  476.         // Get the player password and ID.
  477.         new handle = SQL::OpenEx(SQL::READ, ""PLAYERS_TABLE"", "username", GetName(playerid));
  478.         SQL::ReadString(handle, "password", User[playerid][password], 114);
  479.         SQL::ReadInt(handle, "id", User[playerid][id]);
  480.         SQL::Close(handle);
  481.        
  482.         //Show the login dialog
  483.         Dialog_Show(playerid, dialogLogin, DIALOG_STYLE_PASSWORD, "Login", ""grey"Welcome back "red"%s"grey",\n\nPlease insert your password bellow.", "Login", "Leave", GetName(playerid));
  484.     }
  485.     else
  486.     {
  487.         // Show the register dialog
  488.         Dialog_Show(playerid, dialogRegister, DIALOG_STYLE_PASSWORD, "Register", ""grey"Welcome "red"%s"grey",\n\nPlease insert your password bellow.", "Register", "Leave", GetName(playerid));
  489.     }
  490.     return 1;
  491. }
  492.  
  493. //=================================================
  494.  
  495. Dialog:dialogRegister(playerid, response, listitem, inputtext[])
  496. {
  497.     if(!response)
  498.     {
  499.         #if defined REQUIRE_REGISTER
  500.             Server(playerid, "This server require players to register");
  501.             DelayKick(playerid);
  502.         #else
  503.             new guestname[94];
  504.             format(guestname, sizeof(guestname), "[Guest]%s", GetName(playerid));
  505.             SetPlayerName(playerid, guestname);
  506.  
  507.             User[playerid][loggedin] = 0;
  508.  
  509.             Server(playerid, "You have joined the server as guest.");
  510.         #endif
  511.     }
  512.     if(response)
  513.     {
  514.         if(strlen(inputtext) < 5)
  515.         {
  516.             Dialog_Show(playerid, dialogRegister, DIALOG_STYLE_PASSWORD, "Register", ""grey"Welcome "red"%s"grey",\n\nPlease insert your password bellow.\n\n"red"Invalid password (5+ letter).", "Register", "Leave", GetName(playerid));
  517.             return 1;
  518.         }
  519.  
  520.         SHA256_PassHash(inputtext, "", User[playerid][password], 114);
  521.         new handle = SQL::Open(SQL::INSERT, ""PLAYERS_TABLE"");
  522.         SQL::ToggleAutoIncrement(handle, true);
  523.         SQL::WriteString(handle, "username", GetName(playerid));
  524.         SQL::WriteString(handle, "password", User[playerid][password]);
  525.         SQL::WriteString(handle, "ip", GetIP(playerid));
  526.         SQL::WriteInt(handle, "cash", 0);
  527.         SQL::WriteInt(handle, "score", 0);
  528.         SQL::WriteInt(handle, "vip", 0);
  529.         SQL::WriteInt(handle, "level", 0);
  530.         SQL::WriteInt(handle, "helper", 0);
  531.         SQL::WriteInt(handle, "kills", 0);
  532.         SQL::WriteInt(handle, "deaths", 0);
  533.         SQL::WriteInt(handle, "wanteds", 0);
  534.         SQL::WriteInt(handle, "mutedsec", 0);
  535.         SQL::WriteInt(handle, "cmdmutedsec", 0);
  536.         SQL::WriteInt(handle, "jailedsec", 0);
  537.         SQL::WriteInt(handle, "warns", 0);
  538.         SQL::WriteInt(handle, "hours", 0);
  539.         SQL::WriteInt(handle, "minutes", 0);
  540.         SQL::WriteInt(handle, "seconds", 0);
  541.  
  542.         new DATE[18], date[3];
  543.         getdate(date[0], date[1], date[2]);
  544.         format(DATE, sizeof(DATE), "%i/%i/%i", date[2], date[1], date[0]);
  545.  
  546.         SQL::WriteString(handle, "laston", DATE);
  547.         SQL::WriteString(handle, "joined", DATE);
  548.         User[playerid][id] = SQL::Close(handle);
  549.  
  550.         Server(playerid, "You have successfully registered on our server.");
  551.  
  552.         User[playerid][loggedin] = 1;
  553.     }
  554.     return 1;
  555. }
  556.  
  557. //=================================================
  558.  
  559. Dialog:dialogLogin(playerid, response, listitem, inputtext[])
  560. {
  561.     if(!response)
  562.     {
  563.         #if defined REQUIRE_LOGIN
  564.             Server(playerid, "This server require players to login");
  565.             DelayKick(playerid);
  566.         #else
  567.             new guestname[94];
  568.             format(guestname, sizeof(guestname), "[Guest]%s", GetName(playerid));
  569.             SetPlayerName(playerid, guestname);
  570.            
  571.             User[playerid][loggedin] = 0;
  572.            
  573.             Server(playerid, "You have joined the server as guest.");
  574.         #endif
  575.     }
  576.     if(response)
  577.     {
  578.         new hash[114];
  579.         SHA256_PassHash(inputtext, "", hash, 114);
  580.         if(!strcmp(hash, User[playerid][password]))
  581.         {
  582.             //Load player data
  583.             new handle = SQL::Open(SQL::READ, ""PLAYERS_TABLE"", "id", User[playerid][id]);
  584.             SQL::ReadInt(handle, "score", User[playerid][score]);
  585.             SQL::ReadInt(handle, "cash", User[playerid][cash]);
  586.             SQL::ReadInt(handle, "kills", User[playerid][kills]);
  587.             SQL::ReadInt(handle, "deaths", User[playerid][deaths]);
  588.             SQL::ReadInt(handle, "level", User[playerid][level]);
  589.             SQL::ReadInt(handle, "helper", User[playerid][helper]);
  590.             SQL::ReadInt(handle, "vip", User[playerid][vip]);
  591.             SQL::ReadInt(handle, "wanteds", User[playerid][wanteds]);
  592.             SQL::ReadInt(handle, "mutedsec", User[playerid][mutedsec]);
  593.             SQL::ReadInt(handle, "cmdmutedsec", User[playerid][cmdmutedsec]);
  594.             SQL::ReadInt(handle, "jailedsec", User[playerid][jailedsec]);
  595.             SQL::ReadInt(handle, "warns", User[playerid][warns]);
  596.  
  597.             SQL::ReadInt(handle, "hours", User[playerid][ohours]);
  598.             SQL::ReadInt(handle, "minutes", User[playerid][ominutes]);
  599.             SQL::ReadInt(handle, "seconds", User[playerid][oseconds]);
  600.             SQL::Close(handle);
  601.  
  602.             SetPlayerScore(playerid, User[playerid][score]);
  603.             GivePlayerMoney(playerid, User[playerid][cash]);
  604.  
  605.             if(User[playerid][jailedsec] >= 1)
  606.             {
  607.                 User[playerid][jailed] = 1;
  608.             }
  609.  
  610.  
  611.             User[playerid][loggedin] = 1;
  612.             User[playerid][attempts] = 0;
  613.  
  614.             Server(playerid, "You have successfully logged in your account");
  615.         }
  616.         else
  617.         {
  618.             Dialog_Show(playerid, dialogLogin, DIALOG_STYLE_PASSWORD, "Login", ""grey"Welcome back "red"%s"grey",\n\nPlease insert your password bellow.\n\n"red"Wrong password please try again.", "Login", "Leave", GetName(playerid));
  619.             #if defined REQUIRE_LOGIN
  620.                 #if LOGIN_ATTEMPTS > 0
  621.                     new string[114];
  622.                     User[playerid][attempts]++;
  623.                     if(User[playerid][attempts] >= LOGIN_ATTEMPTS)
  624.                     {
  625.                         format(string, sizeof(string), "* %s(%d) has been automatically kicked [Reason: Too many failed login attempts]", GetName(playerid), playerid);
  626.                         SendClientMessageToAll(COLOR_RED, string);
  627.                         DelayKick(playerid);
  628.                         return 1;
  629.                     }
  630.                     format(string, sizeof(string), "[WARNING]: "white"You have %i/"#LOGIN_ATTEMPTS" attempts left to login.", User[playerid][attempts]);
  631.                     SendClientMessage(playerid, COLOR_SERVER, string);
  632.                 #endif
  633.             #endif
  634.         }
  635.     }
  636.     return 1;
  637. }
  638.  
  639. //=================================================
  640.  
  641. public OnPlayerDisconnect(playerid, reason)
  642. {
  643.     if(User[playerid][loggedin] == 1)
  644.     {
  645.         // Getting connected time
  646.         GetPlayerConnectedTime(playerid, User[playerid][ohours], User[playerid][ominutes], User[playerid][oseconds]);
  647.  
  648.         new handle = SQL::Open(SQL::UPDATE, ""PLAYERS_TABLE"", "id", User[playerid][id]);
  649.         SQL::WriteInt(handle, "score", GetPlayerScore(playerid));
  650.         SQL::WriteInt(handle, "cash", GetPlayerMoney(playerid));
  651.         SQL::WriteInt(handle, "level", User[playerid][level]);
  652.         SQL::WriteInt(handle, "helper", User[playerid][helper]);
  653.         SQL::WriteInt(handle, "vip", User[playerid][vip]);
  654.         SQL::WriteInt(handle, "kills", User[playerid][kills]);
  655.         SQL::WriteInt(handle, "deaths", User[playerid][deaths]);
  656.         SQL::WriteInt(handle, "wanteds", User[playerid][wanteds]);
  657.         SQL::WriteInt(handle, "hours", User[playerid][ohours]);
  658.         SQL::WriteInt(handle, "minutes", User[playerid][ominutes]);
  659.         SQL::WriteInt(handle, "seconds", User[playerid][oseconds]);
  660.         SQL::WriteInt(handle, "mutedsec", User[playerid][mutedsec]);
  661.         SQL::WriteInt(handle, "cmdmutedsec", User[playerid][cmdmutedsec]);
  662.         SQL::WriteInt(handle, "jailedsec", User[playerid][jailedsec]);
  663.         SQL::WriteInt(handle, "warns", User[playerid][warns]);
  664.  
  665.         new DATE[18], date[3];
  666.         getdate(date[0], date[1], date[2]);
  667.         format(DATE, sizeof(DATE), "%i/%i/%i", date[2], date[1], date[0]);
  668.         SQL::WriteString(handle, "laston", DATE);
  669.        
  670.         SQL::Close(handle);
  671.     }
  672.    
  673.     // Kill Updater
  674.     KillTimer(User[playerid][updatetimer]);
  675.    
  676.     // Spectate System
  677.     #if defined SPECTATE_TEXTDRAW
  678.         PlayerTextDrawHide(playerid, User[playerid][specTD]);
  679.     #endif
  680.    
  681.     LOOP_PLAYERS(i)
  682.     {
  683.         if(IsPlayerSpectating(i))
  684.         {
  685.             if(User[i][spec] && User[i][specid] == playerid)
  686.             {
  687.                 UpdatePlayerSpectating(playerid, 0, true);
  688.             }
  689.         }
  690.     }
  691.     return 1;
  692. }
  693.  
  694. //=================================================
  695.  
  696. public OnPlayerRequestSpawn(playerid)
  697. {
  698.     #if defined REQUIRE_REGISTER && defined REQUIRE_LOGIN
  699.         if(User[playerid][loggedin] == 0)
  700.         {
  701.             GameTextForPlayer(playerid, "~r~You must be logged in to spawn", 5000, 3);
  702.             return 0;
  703.         }
  704.     #endif
  705.     return 1;
  706. }
  707.  
  708. //=================================================
  709.  
  710. public OnPlayerText(playerid, text[])
  711. {
  712.     // Mute System
  713.     if(IsPlayerMuted(playerid))
  714.     {
  715.         new string[144];
  716.         format(string, sizeof(string), "You are muted, %i seconds left.", User[playerid][mutedsec]);
  717.         SendClientMessage(playerid, COLOR_RED, string);
  718.         return 0;
  719.     }
  720.    
  721.     // Admin Chat system
  722.     if(GetLevel(playerid) >= 1)
  723.     {
  724.         if(text[0] == '!')
  725.         {
  726.             new string[144];
  727.             format(string, sizeof(string), "[Admin-Chat] %s(%i): "white"%s", GetName(playerid), playerid, text[1]);
  728.             SendClientMessageToAdmins(COLOR_LIGHTBLUE, string);
  729.             return 0;
  730.         }
  731.     }
  732.  
  733.     // Anti Advert system
  734.     #if defined USE_ANTIADVERT
  735.         if(IsAdvertisement(text))
  736.         {
  737.             if(GetLevel(playerid) >= 1)
  738.             {
  739.                 new string[144];
  740.                 format(string, sizeof(string), "[ALERT] "white"%s(%i) "red"has tried to advertise the IP: "white"%s", GetName(playerid), playerid, text);
  741.                 SendClientMessageToAdmins(COLOR_RED, string);
  742.             }
  743.             SendClientMessage(playerid, COLOR_RED, "Advertising is not allowed, message blocked.");
  744.  
  745.             #if defined SAVE_LOGS
  746.                 new logstring[244];
  747.                 format(logstring, sizeof(logstring), "%s tried to advertise IP %s", GetName(playerid), text);
  748.                 SaveLog("adverts.txt", logstring);
  749.             #endif
  750.             return 0;
  751.         }
  752.     #endif
  753.     return 1;
  754. }
  755.  
  756. //=================================================
  757.  
  758. public OnPlayerSpawn(playerid)
  759. {
  760.     new string[144];
  761.     if(IsPlayerMuted(playerid))
  762.     {
  763.         format(string, sizeof(string), "You are still muted, %i seconds left.", User[playerid][mutedsec]);
  764.         SendClientMessage(playerid, COLOR_RED, string);
  765.     }
  766.     if(IsPlayerCMDMuted(playerid))
  767.     {
  768.         format(string, sizeof(string), "You are still command muted, %i seconds left.", User[playerid][cmdmutedsec]);
  769.         SendClientMessage(playerid, COLOR_RED, string);
  770.     }
  771.     if(IsPlayerJailed(playerid))
  772.     {
  773.         format(string, sizeof(string), "You are still jailed, %i seconds left.", User[playerid][jailedsec]);
  774.         SendClientMessage(playerid, COLOR_RED, string);
  775.        
  776.         JailPlayer(playerid);
  777.     }
  778.    
  779.     // Hide spectate textdraw (If it is enabled
  780.     #if defined SPECTATE_TEXTDRAW
  781.         PlayerTextDrawHide(playerid, User[playerid][specTD]);
  782.     #endif
  783.    
  784.     // Check if player is being spectaing
  785.     LOOP_PLAYERS(i)
  786.     {
  787.         if(IsPlayerSpectating(i))
  788.         {
  789.             if(User[i][specid] == playerid)
  790.             {
  791.                 SetPlayerSpectating(i, playerid);
  792.             }
  793.         }
  794.     }
  795.     return 1;
  796. }
  797.  
  798. //=================================================
  799.  
  800. public OnPlayerDeath(playerid, killerid, reason)
  801. {
  802.     // Spectate system
  803.     #if defined SPECTATE_TEXTDRAW
  804.         PlayerTextDrawHide(playerid, User[playerid][specTD]);
  805.     #endif
  806.  
  807.     new Float:currentpos[3];
  808.     GetPlayerPos(playerid, currentpos[0], currentpos[1], currentpos[2]);
  809.  
  810.     LOOP_PLAYERS(i)
  811.     {
  812.         if(IsPlayerSpectating(i))
  813.         {
  814.             if(User[i][specid] == playerid)
  815.             {
  816.                 SetPlayerCameraPos(i, currentpos[0], currentpos[1], (currentpos[2] + 5.0));
  817.                 SetPlayerCameraLookAt(i, currentpos[0], currentpos[1], currentpos[2]);
  818.             }
  819.         }
  820.     }
  821.  
  822.     User[playerid][deaths] ++;       // Add 1 death to victim
  823.     User[playerid][wanteds] = 0;     // Reset player's wanteds
  824.    
  825.     if(killerid != INVALID_PLAYER_ID)
  826.     {
  827.         User[killerid][kills] ++;    // Add 1 kill to killer
  828.         User[playerid][wanteds] ++;  // Add 1 wanted to killer
  829.     }
  830.     return 1;
  831. }
  832.  
  833. //=================================================
  834.  
  835. public OnPlayerCommandReceived(playerid, cmdtext[])
  836. {
  837.     new string[144];
  838.     // Read Commands
  839.     #if defined READ_COMMANDS
  840.         LOOP_PLAYERS(i)
  841.         {
  842.             if(IsPlayerAdminEx(i) &&
  843.                 GetLevel(i) > GetLevel(playerid) &&
  844.                 i != playerid)
  845.             {
  846.                 format(string, sizeof(string), "* %s(%i) has used %s", GetName(playerid), playerid, cmdtext);
  847.                 SendClientMessage(i, COLOR_GREY, string);
  848.                
  849.                 #if defined SAVE_LOGS
  850.                     SaveLog("commands.txt", string);
  851.                 #endif
  852.             }
  853.         }
  854.     #endif
  855.    
  856.     // CMD Mute System
  857.     if(IsPlayerCMDMuted(playerid))
  858.     {
  859.         format(string, sizeof(string), "You are command muted, %i seconds left.", User[playerid][cmdmutedsec]);
  860.         SendClientMessage(playerid, COLOR_RED, string);
  861.         return 0;
  862.     }
  863.    
  864.     // Prevent Jailed players to use commands
  865.     if(IsPlayerJailed(playerid))
  866.     {
  867.         format(string, sizeof(string), "You can't use commands while your jailed, %i seconds left.", User[playerid][jailedsec]);
  868.         SendClientMessage(playerid, COLOR_RED, string);
  869.         return 0;
  870.     }
  871.     return 1;
  872. }
  873.  
  874. //=================================================
  875.  
  876. public OnPlayerStateChange(playerid, newstate, oldstate)
  877. {
  878.     LOOP_PLAYERS(i)
  879.     {
  880.         if(IsPlayerSpectating(i))
  881.         {
  882.             if(User[i][spec] && User[i][specid] == playerid)
  883.             {
  884.                 UpdatePlayerSpectating(i, 0, false);
  885.             }
  886.         }
  887.     }
  888.     return 1;
  889. }
  890.  
  891. //=================================================
  892.  
  893. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  894. {
  895.     if(User[playerid][spec] && IsPlayerAdminEx(playerid))
  896.     {
  897.         if(newkeys == KEY_LOOK_BEHIND && IsPlayerSpectating(playerid))
  898.         {
  899.             cmd_specoff(playerid, "");
  900.         }
  901.         if(newkeys == KEY_FIRE && IsPlayerSpectating(playerid))
  902.         {
  903.             UpdatePlayerSpectating(playerid, 0, false);
  904.         }
  905.         if(newkeys == KEY_ACTION && IsPlayerSpectating(playerid))
  906.         {
  907.             UpdatePlayerSpectating(playerid, 1, false);
  908.         }
  909.     }
  910.     return 1;
  911. }
  912.  
  913. //=================================================
  914.  
  915. // Player Commands
  916. CMD:sbcmds(playerid, params[])
  917. {
  918.     new DIALOG[1246+200];
  919.  
  920.     strcat(DIALOG, ""orange"sbAdmin - Player Commands\n\n");
  921.     if(GetLevel(playerid) > 0)
  922.     {
  923.         strcat(DIALOG, ""white"/acmds - "green"See all admin commands\n");
  924.     }
  925.     if(IsPlayerHelper(playerid))
  926.     {
  927.         strcat(DIALOG, ""white"/hcmds - "green"See all helper commands\n");
  928.     }
  929.     if(IsPlayerVip(playerid))
  930.     {
  931.         strcat(DIALOG, ""white"/vcmds - "green"See all VIP commands\n");
  932.     }
  933.     strcat(DIALOG, ""white"/admins - "green"See online admins (50+ score)\n");
  934.     strcat(DIALOG, ""white"/helpers - "green"See online Helpers\n");
  935.     strcat(DIALOG, ""white"/vips - "green"See online VIPs\n");
  936.     strcat(DIALOG, ""white"/report - "green"Report a player to online admins\n");
  937.     strcat(DIALOG, ""white"/stats - "green"Check your and others statistics\n");
  938.     strcat(DIALOG, ""white"/ostats - "green"Check offline player's stats\n");
  939.     strcat(DIALOG, ""white"/changepass - "green"Change your password\n");
  940.     strcat(DIALOG, ""white"/changename - "green"Change your name\n");
  941.     strcat(DIALOG, ""white"/register - "green"Register your account\n");
  942.     strcat(DIALOG, ""white"/login - "green"To your account\n");
  943.  
  944.     Dialog_Show(playerid, dialogUnused, DIALOG_STYLE_MSGBOX, "Player Commands", DIALOG, "Close", "");
  945.     return 1;
  946. }
  947.  
  948. CMD:register(playerid, params[])
  949. {
  950.     if(SQL::RowExistsEx(""PLAYERS_TABLE"", "username", GetName(playerid))) return Error(playerid, "Your username is already registered, use /login.");
  951.     if(User[playerid][loggedin] == 1) return Error(playerid, "You are already registered and logged in.");
  952.  
  953.     Dialog_Show(playerid, dialogRegister, DIALOG_STYLE_PASSWORD, "Register", ""grey"Welcome "red"%s"grey",\n\nPlease insert your password bellow.", "Register", "Leave", GetName(playerid));
  954.     return 1;
  955. }
  956.  
  957. CMD:login(playerid, params[])
  958. {
  959.     if(!SQL::RowExistsEx(""PLAYERS_TABLE"", "username", GetName(playerid))) return Error(playerid, "Your username is not registered, use /register.");
  960.     if(User[playerid][loggedin] == 1) return Error(playerid, "You are already registered and logged in.");
  961.  
  962.     Dialog_Show(playerid, dialogLogin, DIALOG_STYLE_PASSWORD, "Login", ""grey"Welcome back "red"%s"grey",\n\nPlease insert your password bellow.", "Login", "Leave", GetName(playerid));
  963.     return 1;
  964. }
  965.  
  966. CMD:changename(playerid, params[])
  967. {
  968.     Dialog_Show(playerid, dialogName, DIALOG_STYLE_INPUT, "Change Name", ""white"Hello, please insert your password before continuing.", "Next", "Close");
  969.     return 1;
  970. }
  971. Dialog:dialogName(playerid, response, listitem, inputtext[])
  972. {
  973.     if(response)
  974.     {
  975.         new hash[114];
  976.         SHA256_PassHash(inputtext, "", hash, sizeof(hash));
  977.         if(!strcmp(hash, User[playerid][password]))
  978.         {
  979.             Dialog_Show(playerid, dialogName2, DIALOG_STYLE_INPUT, "Change Name", ""white"Access granted, please insert your new name bellow.", "Change", "Close");
  980.         }
  981.         else
  982.         {
  983.             Dialog_Show(playerid, dialogName, DIALOG_STYLE_INPUT, "Change Name", ""white"Hello, please insert your password before continuing. \n\n"red"Wrong Password", "Next", "Close");
  984.         }
  985.     }
  986.     return 1;
  987. }
  988. Dialog:dialogName2(playerid, response, listitem, inputtext[])
  989. {
  990.     if(response)
  991.     {
  992.         if(strlen(inputtext) > 24)
  993.         {
  994.             Dialog_Show(playerid, dialogName2, DIALOG_STYLE_INPUT, "Change Name", ""white"Access granted, please insert your new name bellow. \n\n"red"Invalid name length", "Change", "Close");
  995.             return 1;
  996.         }
  997.        
  998.         new handle = SQL::Open(SQL::UPDATE, ""PLAYERS_TABLE"", "id", User[playerid][id]);
  999.         SQL::WriteString(handle, "username", inputtext);
  1000.         SQL::Close(handle);
  1001.        
  1002.         SetPlayerName(playerid, inputtext);
  1003.  
  1004.         Server(playerid, "You have successfully changed your name.");
  1005.     }
  1006.     return 1;
  1007. }
  1008.  
  1009. CMD:changepass(playerid, params[])
  1010. {
  1011.     Dialog_Show(playerid, dialogPassword, DIALOG_STYLE_INPUT, "Change Password", ""white"Hello, please insert your old password before continuing.", "Next", "Close");
  1012.     return 1;
  1013. }
  1014. Dialog:dialogPassword(playerid, response, listitem, inputtext[])
  1015. {
  1016.     if(response)
  1017.     {
  1018.         new hash[114];
  1019.         SHA256_PassHash(inputtext, "", hash, sizeof(hash));
  1020.         if(!strcmp(hash, User[playerid][password]))
  1021.         {
  1022.             Dialog_Show(playerid, dialogPassword2, DIALOG_STYLE_INPUT, "Change Password", ""white"Access granted, please enter your new password.", "Change", "Close");
  1023.         }
  1024.         else
  1025.         {
  1026.             Dialog_Show(playerid, dialogPassword, DIALOG_STYLE_INPUT, "Change Password", ""white"Hello, please insert your old password before continuing.\n\n"red"Wrong Password", "Next", "Close");
  1027.         }
  1028.     }
  1029.     return 1;
  1030. }
  1031. Dialog:dialogPassword2(playerid, response, listitem, inputtext[])
  1032. {
  1033.     if(response)
  1034.     {
  1035.         if(strlen(inputtext) < 5)
  1036.         {
  1037.             Dialog_Show(playerid, dialogPassword2, DIALOG_STYLE_INPUT, "Change Password", ""white"Access granted, please enter your new password.\n\n"red"Invalid Password (5+ letters)", "Change", "Close");
  1038.             return 1;
  1039.         }
  1040.  
  1041.         SHA256_PassHash(inputtext, "", User[playerid][password], 114);
  1042.         new handle = SQL::Open(SQL::UPDATE, ""PLAYERS_TABLE"", "id", User[playerid][id]);
  1043.         SQL::WriteString(handle, "password", User[playerid][password]);
  1044.         SQL::Close(handle);
  1045.        
  1046.         Server(playerid, "You have successfully changed your password.");
  1047.     }
  1048.     return 1;
  1049. }
  1050.  
  1051. CMD:ostats(playerid, params[])
  1052. {
  1053.     new name[MAX_PLAYER_NAME];
  1054.     if(sscanf(params, "s[24]", name)) return Usage(playerid, "ostats [username]");
  1055.     if(!strcmp(name, GetName(playerid))) return Error(playerid, "You can't use this command on yourself.");
  1056.     LOOP_PLAYERS(i)
  1057.     {
  1058.         if(!strcmp(name, GetName(i), false))
  1059.         {
  1060.             return Error(playerid, "The specified username is online. Try /stats instead.");
  1061.         }
  1062.     }
  1063.     if(!SQL::RowExistsEx(""PLAYERS_TABLE"", "username", name)) return Error(playerid, "Player doesn't exist in database.");
  1064.  
  1065.  
  1066.     new
  1067.         DataStr[3][48],
  1068.         DataInt[13],
  1069.         DIALOG[700],
  1070.         string[144],
  1071.         yes[4] = "Yes",
  1072.         no[3] = "No",
  1073.         Float:ratio
  1074.     ;
  1075.  
  1076.     new handle = SQL::OpenEx(SQL::READ, ""PLAYERS_TABLE"", "username", name);
  1077.     SQL::ReadString(handle, "laston", DataStr[1], 48);
  1078.     SQL::ReadString(handle, "joined", DataStr[2], 48);
  1079.    
  1080.     SQL::ReadInt(handle, "id", DataInt[1]);
  1081.     SQL::ReadInt(handle, "kills", DataInt[2]);
  1082.     SQL::ReadInt(handle, "deaths", DataInt[3]);
  1083.     SQL::ReadInt(handle, "score", DataInt[4]);
  1084.     SQL::ReadInt(handle, "cash", DataInt[5]);
  1085.     SQL::ReadInt(handle, "wanteds", DataInt[6]);
  1086.     SQL::ReadInt(handle, "level", DataInt[7]);
  1087.     SQL::ReadInt(handle, "vip", DataInt[8]);
  1088.     SQL::ReadInt(handle, "helper", DataInt[9]);
  1089.     SQL::ReadInt(handle, "ohours", DataInt[10]);
  1090.     SQL::ReadInt(handle, "ominutes", DataInt[11]);
  1091.     SQL::ReadInt(handle, "oseconds", DataInt[12]);
  1092.     SQL::Close(handle);
  1093.    
  1094.     format(string, sizeof(string), ""white"You are now viewing "green"%s's"white" stats\n\n", name);
  1095.     strcat(DIALOG, string);
  1096.    
  1097.     format(string, sizeof(string), ""white"Account ID: "green"%i\n", DataInt[1]);
  1098.     strcat(DIALOG, string);
  1099.    
  1100.     format(string, sizeof(string), ""white"Kills: "green"%i\n", DataInt[2]);
  1101.     strcat(DIALOG, string);
  1102.  
  1103.     format(string, sizeof(string), ""white"Deaths: "green"%i\n", DataInt[3]);
  1104.     strcat(DIALOG, string);
  1105.    
  1106.     if(DataInt[3] <= 0) ratio = 0.0;
  1107.     else ratio = floatdiv(DataInt[2], DataInt[3]);
  1108.     format(string, sizeof(string), ""white"K/D Ratio: "green"%0.2f\n", ratio);
  1109.     strcat(DIALOG, string);
  1110.    
  1111.     format(string, sizeof(string), ""white"Score: "green"%i\n", DataInt[4]);
  1112.     strcat(DIALOG, string);
  1113.  
  1114.     format(string, sizeof(string), ""white"Money: "green"$%i\n", DataInt[5]);
  1115.     strcat(DIALOG, string);
  1116.  
  1117.     format(string, sizeof(string), ""white"Wanteds: "green"%i\n", DataInt[6]);
  1118.     strcat(DIALOG, string);
  1119.  
  1120.     format(string, sizeof(string), ""white"Admin Level: "green"%i\n", DataInt[7]);
  1121.     strcat(DIALOG, string);
  1122.  
  1123.     format(string, sizeof(string), ""white"Vip Level: "green"%i\n", DataInt[8]);
  1124.     strcat(DIALOG, string);
  1125.    
  1126.     format(string, sizeof(string), ""white"Helper: "green"%s\n", ((DataInt[9] == 1) ? yes : no));
  1127.     strcat(DIALOG, string);
  1128.  
  1129.     format(string, sizeof(string), ""white"Online Time: "green"%02i hours %02i minutes %02i seconds\n", DataInt[10], DataInt[11], DataInt[12]);
  1130.     strcat(DIALOG, string);
  1131.    
  1132.     format(string, sizeof(string), ""white"Registered date: "green"%s\n", DataStr[1]);
  1133.     strcat(DIALOG, string);
  1134.    
  1135.     format(string, sizeof(string), ""white"Last Online: "green"%s\n", DataStr[2]);
  1136.     strcat(DIALOG, string);
  1137.    
  1138.     Dialog_Show(playerid, dialogUnused, DIALOG_STYLE_MSGBOX, "Stats", DIALOG, "Close", "");
  1139.     return 1;
  1140. }
  1141.  
  1142. CMD:stats(playerid, params[])
  1143. {
  1144.     new target;
  1145.     if(sscanf(params, "u", target))
  1146.     {
  1147.         target = playerid;
  1148.         Server(playerid, "You can also use /stats [playerid]");
  1149.     }
  1150.     if(!IsPlayerConnected(target)) return Error(playerid, "Player is not connected.");
  1151.     if(User[target][loggedin] == 0) return Error(playerid, "Player is not logged in.");
  1152.     GetPlayerConnectedTime(target, User[target][ohours], User[target][ominutes], User[target][oseconds]);
  1153.  
  1154.     new
  1155.         DIALOG[676],
  1156.         string[156],
  1157.         data[2][48],
  1158.         yes[4] = "Yes",
  1159.         no[3] = "No",
  1160.         Float:ratio
  1161.     ;
  1162.    
  1163.     new handle = SQL::OpenEx(SQL::READ, ""PLAYERS_TABLE"", "username", GetName(target));
  1164.     SQL::ReadString(handle, "joined", data[1], 48);
  1165.     SQL::Close(handle);
  1166.    
  1167.     format(string, sizeof(string), ""white"You are now viewing "green"%s(%i)'s"white" stats\n\n", GetName(target), target);
  1168.     strcat(DIALOG, string);
  1169.    
  1170.     format(string, sizeof(string), ""white"Account ID: "green"%i\n", User[target][id]);
  1171.     strcat(DIALOG, string);
  1172.    
  1173.     format(string, sizeof(string), ""white"Kills: "green"%i\n", User[target][kills]);
  1174.     strcat(DIALOG, string);
  1175.    
  1176.     format(string, sizeof(string), ""white"Deaths: "green"%i\n", User[target][deaths]);
  1177.     strcat(DIALOG, string);
  1178.    
  1179.     if(User[target][deaths] <= 0) ratio = 0.0;
  1180.     else ratio = floatdiv(User[target][kills], User[target][deaths]);
  1181.     format(string, sizeof(string), ""white"K/D Ratio: "green"%0.2f\n", ratio);
  1182.     strcat(DIALOG, string);
  1183.    
  1184.     format(string, sizeof(string), ""white"Score: "green"%i\n", GetPlayerScore(target));
  1185.     strcat(DIALOG, string);
  1186.    
  1187.     format(string, sizeof(string), ""white"Money: "green"$%i\n", GetPlayerMoney(target));
  1188.     strcat(DIALOG, string);
  1189.    
  1190.     format(string, sizeof(string), ""white"Wanteds: "green"%i\n", User[target][wanteds]);
  1191.     strcat(DIALOG, string);
  1192.    
  1193.     format(string, sizeof(string), ""white"Admin Level: "green"%i\n", User[target][level]);
  1194.     strcat(DIALOG, string);
  1195.    
  1196.     format(string, sizeof(string), ""white"Vip Level: "green"%i\n", User[target][vip]);
  1197.     strcat(DIALOG, string);
  1198.    
  1199.     format(string, sizeof(string), ""white"Helper: "green"%s\n", ((IsPlayerHelper(target)) ? yes : no));
  1200.     strcat(DIALOG, string);
  1201.    
  1202.     format(string, sizeof(string), ""white"Online Time: "green"%02i hours %02i minutes %02i seconds\n", User[target][ohours], User[target][ominutes], User[target][oseconds]);
  1203.     strcat(DIALOG, string);
  1204.    
  1205.     format(string, sizeof(string), ""white"Registered date: "green"%s\n", data[1]);
  1206.     strcat(DIALOG, string);
  1207.    
  1208.     format(string, sizeof(string), ""white"Jailed: "green"%s\n", ((IsPlayerJailed(target)) ? yes : no));
  1209.     strcat(DIALOG, string);
  1210.    
  1211.     format(string, sizeof(string), ""white"Muted: "green"%s\n", ((IsPlayerMuted(target)) ? yes : no));
  1212.     strcat(DIALOG, string);
  1213.    
  1214.     format(string, sizeof(string), ""white"Command Muted: "green"%s\n", ((IsPlayerCMDMuted(target)) ? yes : no));
  1215.     strcat(DIALOG, string);
  1216.    
  1217.     format(string, sizeof(string), ""white"Warnings: "green"%i/%i\n", User[target][warns], MAX_WARNS);
  1218.     strcat(DIALOG, string);
  1219.  
  1220.     Dialog_Show(playerid, dialogUnused, DIALOG_STYLE_MSGBOX, "Stats", DIALOG, "Close", "");
  1221.     return 1;
  1222. }
  1223.  
  1224. CMD:report(playerid, params[])
  1225. {
  1226.     new target, reason[98];
  1227.     if(sscanf(params, "us[98]", target, reason)) return Usage(playerid, "report [playerid] [reason]");
  1228.     if(strlen(reason) < 4) return Error(playerid, "The specified reason is very short.");
  1229.     if(!IsPlayerConnected(target)) return Error(playerid, "That player is not connected.");
  1230.     if(target == playerid) return Error(playerid, "You can't report yourself.");
  1231.  
  1232.     new hour, minute, second;
  1233.     gettime(hour, minute, second);
  1234.  
  1235.     new string[145];
  1236.     format(string, sizeof(string), "[%02d:%02d] %s(%i) has reported %s(%i) [Reason: %s]", hour, minute, GetName(playerid), playerid, GetName(target), target, reason);
  1237.     SendClientMessageToAdmins(COLOR_YELLOW, string);
  1238.  
  1239.     #if defined SAVE_LOGS
  1240.         SaveLog("reports.txt", string);
  1241.     #endif
  1242.    
  1243.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  1244.  
  1245.     format(string, sizeof(string), "Your report against %s(%i) has been sent to online admins.", GetName(target), target);
  1246.     SendClientMessage(playerid, COLOR_YELLOW, string);
  1247.     return 1;
  1248. }
  1249.  
  1250. CMD:admins(playerid, params[])
  1251. {
  1252.     if(GetPlayerScore(playerid) < 50) return Error(playerid, "You need 50 score to see online administrators");
  1253.     new count = 0, string[828], rank[20];
  1254.     LOOP_PLAYERS(i)
  1255.     {
  1256.         if(IsPlayerConnected(i) && IsPlayerAdminEx(i))
  1257.         {
  1258.             count ++;
  1259.             switch(GetLevel(i))
  1260.             {
  1261.                 case 1: rank = ""LEVEL1"";
  1262.                 case 2: rank = ""LEVEL2"";
  1263.                 case 3: rank = ""LEVEL3"";
  1264.                 case 4: rank = ""LEVEL4"";
  1265.                 case 5: rank = ""LEVEL5"";
  1266.             }
  1267.             format(string, sizeof(string), "%s"white"%i. %s(%i) - "orange"(%s)\n", string, count, GetName(i), i, rank);
  1268.         }
  1269.     }
  1270.     format(string, sizeof(string), "%s\n\n"white"Total Online Admins: "yellow"%i", string, count);
  1271.     if(count > 0)
  1272.     {
  1273.         Dialog_Show(playerid, dialogUnused, DIALOG_STYLE_MSGBOX, "Online Administrators", string, "OK", "");
  1274.     }
  1275.     else if(count == 0) return Error(playerid, "There are currently no admins online");
  1276.     return 1;
  1277. }
  1278.  
  1279. CMD:vips(playerid, params[])
  1280. {
  1281.     new count = 0, string[828], rank[20];
  1282.     LOOP_PLAYERS(i)
  1283.     {
  1284.         if(IsPlayerConnected(i) && IsPlayerVip(i))
  1285.         {
  1286.             count ++;
  1287.             switch(GetVipLevel(i))
  1288.             {
  1289.                 case 1: rank = ""VIP1"";
  1290.                 case 2: rank = ""VIP2"";
  1291.                 case 3: rank = ""VIP3"";
  1292.             }
  1293.             format(string, sizeof(string), "%s"white"%i. %s(%i) - "orange"(%s)\n", string, count, GetName(i), i, rank);
  1294.         }
  1295.     }
  1296.     format(string, sizeof(string), "%s\n\n"white"Total Online Vips: "yellow"%i", string, count);
  1297.     if(count > 0)
  1298.     {
  1299.         Dialog_Show(playerid, dialogUnused, DIALOG_STYLE_MSGBOX, "Online VIPs", string, "OK", "");
  1300.     }
  1301.     else if(count == 0) return Error(playerid, "There are currently no VIPs online");
  1302.     return 1;
  1303. }
  1304.  
  1305. CMD:helpers(playerid, params[])
  1306. {
  1307.     new count = 0, string[828];
  1308.     LOOP_PLAYERS(i)
  1309.     {
  1310.         if(IsPlayerConnected(i) && IsPlayerHelper(i))
  1311.         {
  1312.             count ++;
  1313.             format(string, sizeof(string), "%s"white"%i. %s(%i)\n", string, count, GetName(i), i);
  1314.         }
  1315.     }
  1316.     format(string, sizeof(string), "%s\n\n"white"Total Online Helpers: "yellow"%i", string, count);
  1317.     if(count > 0)
  1318.     {
  1319.         Dialog_Show(playerid, dialogUnused, DIALOG_STYLE_MSGBOX, "Online Helpers", string, "OK", "");
  1320.     }
  1321.     else if(count == 0) return Error(playerid, "There are currently no Helpers online");
  1322.     return 1;
  1323. }
  1324.  
  1325. // VIP Commands
  1326. CMD:vcmds(playerid, params[])
  1327. {
  1328.     VipCheck(playerid, 1);
  1329.     new DIALOG[1246+200];
  1330.  
  1331.     strcat(DIALOG, ""orange"VIP Commands\n");
  1332.     strcat(DIALOG, ""white"• VIP system is under development\n");
  1333.  
  1334.     Dialog_Show(playerid, dialogUnused, DIALOG_STYLE_MSGBOX, "VIP Commands", DIALOG, "Close", "");
  1335.     return 1;
  1336. }
  1337.  
  1338. // Helper Commands
  1339. CMD:hcmds(playerid, params[])
  1340. {
  1341.     HelperCheck(playerid);
  1342.     new DIALOG[1246+200];
  1343.  
  1344.     strcat(DIALOG, ""orange"Helper Commands\n");
  1345.     strcat(DIALOG, ""white"• Helper commands will be added soon\n");
  1346.  
  1347.     Dialog_Show(playerid, dialogUnused, DIALOG_STYLE_MSGBOX, "Helper Commands", DIALOG, "Close", "");
  1348.     return 1;
  1349. }
  1350.  
  1351.  
  1352. // Level 1 Commands
  1353. CMD:acmds(playerid, params[])
  1354. {
  1355.     LevelCheck(playerid, 1);
  1356.    
  1357.     new DIALOG[1246+546];
  1358.  
  1359.     if(GetLevel(playerid) >= 1 || IsPlayerAdmin(playerid))
  1360.     {
  1361.         strcat(DIALOG, ""orange""LEVEL1" (Level 1)\n");
  1362.         strcat(DIALOG, ""white"/acmds /spec /specoff /weapons /spawn /goto /(ann)ounce /warn /remwarns\n");
  1363.         strcat(DIALOG, ""white"/jailed /muted /cmdmuted /explode /disarm /freeze /unfreeze /slap /muted\n");
  1364.         strcat(DIALOG, ""white"/unmute /respawncars /ip /car /fix /asay /kick\n\n");
  1365.     }
  1366.     if(GetLevel(playerid) >= 2 || IsPlayerAdmin(playerid))
  1367.     {
  1368.         strcat(DIALOG, ""orange""LEVEL2" (Level 2)\n");
  1369.         strcat(DIALOG, ""white"/akill /jail /unjail /bring /cmdmute /uncmdmute /cleardwindows /ban /cc\n");
  1370.         strcat(DIALOG, ""white"/aheal /aarmour /setinterior /setworld /jetpack\n\n");
  1371.     }
  1372.     if(GetLevel(playerid) >= 3 || IsPlayerAdmin(playerid))
  1373.     {
  1374.         strcat(DIALOG, ""orange""LEVEL3" (Level 3)\n");
  1375.         strcat(DIALOG, ""white"/fakedeath /giveweapon /sethealth /setarmour /healall /armourall\n");
  1376.         strcat(DIALOG, ""white"/givecash /givescore /unban /teleplayer\n\n");
  1377.     }
  1378.     if(GetLevel(playerid) >= 4 || IsPlayerAdmin(playerid))
  1379.     {
  1380.         strcat(DIALOG, ""orange""LEVEL4" (Level 4)\n");
  1381.         strcat(DIALOG, ""white"/oban /setcash /setscore /setwanteds /setkills /setdeaths /giveallscore\n");
  1382.         strcat(DIALOG, ""white"/giveallcash /giveallweapon /setalltime /setallweath\n\n");
  1383.     }
  1384.     if(GetLevel(playerid) >= 5 || IsPlayerAdmin(playerid))
  1385.     {
  1386.         strcat(DIALOG, ""orange""LEVEL5" (Level 5)\n");
  1387.         strcat(DIALOG, ""white"/fakecmd /fakechat /removeacc /setlevel /sethelper /setvip /gmx\n\n");
  1388.     }
  1389.     strcat(DIALOG, ""orange"Use '!' specifier to speak on Admin's chat. Ex. !Hello\n");
  1390.  
  1391.     Dialog_Show(playerid, dialogUnused, DIALOG_STYLE_MSGBOX, "Admin Commands", DIALOG, "Close", "");
  1392.     return 1;
  1393. }
  1394.  
  1395. CMD:spec(playerid, params[])
  1396. {
  1397.     LevelCheck(playerid, 1);
  1398.  
  1399.     new target;
  1400.     if(sscanf(params, "u", target)) return Usage(playerid, "spec [playerid]");
  1401.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  1402.     if(!IsPlayerSpawned(target)) return Error(playerid, "The specified player is not spawned.");
  1403.     if(target == playerid) return Error(playerid, "You can't spectate to yourself.");
  1404.     if(IsPlayerSpectating(target)) return Error(playerid, "The specified player is spectating a player.");
  1405.  
  1406.     GetPlayerPos(playerid, User[playerid][pos][0], User[playerid][pos][1], User[playerid][pos][2]);
  1407.  
  1408.     #if defined SPECTATE_TEXTDRAW
  1409.         PlayerTextDrawShow(playerid, User[playerid][specTD]);
  1410.     #endif
  1411.  
  1412.     User[playerid][int] = GetPlayerInterior(playerid);
  1413.     User[playerid][vw] = GetPlayerVirtualWorld(playerid);
  1414.  
  1415.     SetPlayerSpectating(playerid, target);
  1416.     Server(playerid, "You can use LCTRL (KEY_ACTION) and RCTRL (KEY_FIRE) to switch players.");
  1417.     Server(playerid, "You can use MMB (KEY_LOOK_BEHIND) or /specoff to stop spectating.");
  1418.     return 1;
  1419. }
  1420.  
  1421. CMD:specoff(playerid, params[])
  1422. {
  1423.     LevelCheck(playerid, 1);
  1424.  
  1425.     if(!IsPlayerSpectating(playerid)) return Error(playerid, "You are not spectating anyone.");
  1426.  
  1427.     TogglePlayerSpectating(playerid, false);
  1428.  
  1429.     #if defined SPECTATE_TEXTDRAW
  1430.         PlayerTextDrawHide(playerid, User[playerid][specTD]);
  1431.     #endif
  1432.  
  1433.     User[playerid][spec] = false;
  1434.     User[playerid][specid] = INVALID_PLAYER_ID;
  1435.  
  1436.     SetPlayerPos(playerid, User[playerid][pos][0], User[playerid][pos][1], User[playerid][pos][2]);
  1437.     SetPlayerInterior(playerid, User[playerid][int]);
  1438.     SetPlayerVirtualWorld(playerid, User[playerid][vw]);
  1439.     return 1;
  1440. }
  1441.  
  1442. CMD:weapons(playerid, params[])
  1443. {
  1444.     LevelCheck(playerid, 1);
  1445.  
  1446.     new target;
  1447.     if(sscanf(params, "u", target)) return Usage(playerid, "weapons [playerid]");
  1448.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  1449.  
  1450.     new weap, ammo, count;
  1451.     for(new i = 0; i < 14; i++)
  1452.     {
  1453.         GetPlayerWeaponData(target, i, weap, ammo);
  1454.         if(ammo != 0 && weap != 0)
  1455.         {
  1456.             count++;
  1457.             break;
  1458.         }
  1459.     }
  1460.  
  1461.     if(count < 1) return Error(playerid, "Player has no weapons.");
  1462.  
  1463.     new string[144], message[144];
  1464.     format(message, sizeof(message), "%s(%i)'s Weapons: ", GetName(target), target);
  1465.     SendClientMessage(playerid, COLOR_YELLOW, message);
  1466.  
  1467.     new weaponname[28], x;
  1468.     for(new i = 0; i < 12; i++)
  1469.     {
  1470.         GetPlayerWeaponData(target, i, weap, ammo);
  1471.         if(ammo != 0 && weap != 0)
  1472.         {
  1473.             GetWeaponName(weap, weaponname, sizeof(weaponname));
  1474.             if(ammo == 65535 || ammo == 1) format(string, sizeof(string), "%s%s (1)", string, weaponname);
  1475.             else format(string, sizeof(string), "%s%s (%d)", string, weaponname, ammo);
  1476.             x++;
  1477.             if(x >= 5)
  1478.             {
  1479.                 SendClientMessage(playerid, COLOR_YELLOW, string);
  1480.                 x = 0;
  1481.                 format(string, sizeof(string), "");
  1482.             }
  1483.             else format(string, sizeof(string), "%s, ", string);
  1484.         }
  1485.     }
  1486.     if(x <= 4 && x > 0)
  1487.     {
  1488.         string[strlen(string)-3] = ')';
  1489.         SendClientMessage(playerid, COLOR_YELLOW, string);
  1490.     }
  1491.     return 1;
  1492. }
  1493.  
  1494. CMD:spawn(playerid, params[])
  1495. {
  1496.     LevelCheck(playerid, 1);
  1497.  
  1498.     new target;
  1499.     if(sscanf(params, "u", target)) return Usage(playerid, "spawn [playerid]");
  1500.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  1501.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  1502.  
  1503.     SpawnPlayer(target);
  1504.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  1505.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  1506.  
  1507.     new string[144];
  1508.     format(string, sizeof(string), "* Admin %s(%i) has spawned you.", GetName(playerid), playerid);
  1509.     SendClientMessage(target, COLOR_YELLOW, string);
  1510.    
  1511.     format(string, sizeof(string), "* You have respawned %s(%i).", GetName(target), target);
  1512.     SendClientMessage(playerid, COLOR_YELLOW, string);
  1513.     return 1;
  1514. }
  1515.  
  1516. CMD:goto(playerid, params[])
  1517. {
  1518.     LevelCheck(playerid, 1);
  1519.  
  1520.     new target;
  1521.     if(sscanf(params, "u", target)) return Usage(playerid, "goto [playerid]");
  1522.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  1523.     if(target == playerid) return Error(playerid, "You can't teleport to yourself.");
  1524.  
  1525.     new Float:currentpos[3];
  1526.     GetPlayerPos(target, currentpos[0], currentpos[1], currentpos[2]);
  1527.     SetPlayerInterior(playerid, GetPlayerInterior(target));
  1528.     SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(target));
  1529.     if(GetPlayerState(playerid) == 2)
  1530.     {
  1531.         SetVehiclePos(GetPlayerVehicleID(playerid), currentpos[0] + 2.5, currentpos[1], currentpos[2]);
  1532.         LinkVehicleToInterior(GetPlayerVehicleID(playerid), GetPlayerInterior(target));
  1533.         SetVehicleVirtualWorld(GetPlayerVehicleID(playerid), GetPlayerVirtualWorld(target));
  1534.     }
  1535.     else SetPlayerPos(playerid, currentpos[0] + 2.0, currentpos[1], currentpos[2]);
  1536.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  1537.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  1538.  
  1539.     new string[144];
  1540.     format(string, sizeof(string), "You have teleported to %s(%i)'s position.", GetName(target), target);
  1541.     SendClientMessage(playerid, COLOR_YELLOW, string);
  1542.    
  1543.     format(string, sizeof(string), "* Admin %s(%i) teleported to your location.", GetName(playerid), playerid);
  1544.     SendClientMessage(target, COLOR_YELLOW, string);
  1545.     return 1;
  1546. }
  1547.  
  1548. CMD:announce(playerid, params[]) return cmd_ann(playerid, params);
  1549. CMD:ann(playerid, params[])
  1550. {
  1551.     LevelCheck(playerid, 1);
  1552.  
  1553.     new message[144];
  1554.     if(sscanf(params, "s[35]", message)) return Usage(playerid, "ann [message]");
  1555.  
  1556.     TextDrawSetString(announceTD, message);
  1557.     TextDrawHideForAll(announceTD);
  1558.     TextDrawShowForAll(announceTD);
  1559.  
  1560.     SetTimer("hideAnnouncement", 5000, false);
  1561.     return 1;
  1562. }
  1563.  
  1564. CMD:warn(playerid, params[])
  1565. {
  1566.     LevelCheck(playerid, 2);
  1567.  
  1568.     new target, reason[128], DIALOG[600], string2[144];
  1569.     if(sscanf(params, "uS(No Reason)[128]", target, reason)) return Usage(playerid, "warn [playerid] [reason(No Reason)]");
  1570.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  1571.     if(target == playerid) return Error(playerid, "You can't warn yourself.");
  1572.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  1573.  
  1574.     User[target][warns] += 1;
  1575.  
  1576.     new string[144];
  1577.     format(string, sizeof(string), "* %s(%i) has been warned by Admin %s(%i) "orange"[Reason: %s] [Warnings: %i/%i]", GetName(target), target, GetName(playerid), playerid, reason, User[target][warns], MAX_WARNS);
  1578.     SendClientMessageToAll(COLOR_RED, string);
  1579.  
  1580.     #if defined SAVE_LOGS
  1581.         SaveLog("warns.txt", string);
  1582.     #endif
  1583.  
  1584.     if(GetPlayerWarns(target) == MAX_WARNS)
  1585.     {
  1586.         format(string, sizeof(string), "* %s(%i) has been automatically kicked [Reason: Exceeded maximum warnings] [Warnings: %i/%i]", GetName(target), target, User[target][warns], MAX_WARNS);
  1587.         SendClientMessageToAll(COLOR_RED, string);
  1588.         User[target][warns] = 0;
  1589.  
  1590.         DelayKick(target);
  1591.         return 1;
  1592.     }
  1593.  
  1594.     format(string2, sizeof(string2), "You have received a warning\n", GetName(target));
  1595.     strcat(DIALOG, string2);
  1596.  
  1597.     format(string2, sizeof(string2), ""white"Admin: "red"%s\n", GetName(playerid));
  1598.     strcat(DIALOG, string2);
  1599.  
  1600.     format(string2, sizeof(string2), ""white"Reason: "red"%s\n", reason);
  1601.     strcat(DIALOG, string2);
  1602.  
  1603.     format(string2, sizeof(string2), ""white"Total Warnings: "red"%i/%i\n\n", GetPlayerWarns(target), MAX_WARNS);
  1604.     strcat(DIALOG, string2);
  1605.  
  1606.     strcat(DIALOG, ""white"If you think that you got warned wrongfully, please place a report on our forums.\n");
  1607.  
  1608.     Dialog_Show(target, dialogUnused, DIALOG_STYLE_MSGBOX, "Notice", DIALOG, "Close", "");
  1609.     return 1;
  1610. }
  1611.  
  1612. CMD:remwarns(playerid, params[])
  1613. {
  1614.     LevelCheck(playerid, 2);
  1615.  
  1616.     new target, reason[45];
  1617.     if(sscanf(params, "u", target, reason)) return Usage(playerid, "remwarns [playerid]");
  1618.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  1619.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  1620.  
  1621.     User[target][warns] = 0;
  1622.  
  1623.     new string[144];
  1624.     format(string, sizeof(string), "* Admin %s(%i) has removed your warnings.", GetName(playerid), playerid);
  1625.     SendClientMessage(target, COLOR_YELLOW, string);
  1626.  
  1627.     format(string, sizeof(string), "* You have removed %s(%i)'s warnings.", GetName(target), target);
  1628.     SendClientMessage(playerid, COLOR_YELLOW, string);
  1629.     return 1;
  1630. }
  1631.  
  1632. CMD:jailed(playerid, params[])
  1633. {
  1634.     LevelCheck(playerid, 1);
  1635.  
  1636.     new DIALOG[98+670], string[128];
  1637.     new count = 0;
  1638.  
  1639.     LOOP_PLAYERS(i)
  1640.     {
  1641.         if(IsPlayerJailed(i))
  1642.         {
  1643.             count++;
  1644.             format(string, sizeof(string), "%i. %s - Unjail in %i secs..", count, GetName(i), User[i][jailedsec]);
  1645.             strcat(DIALOG, string);
  1646.            
  1647.         }
  1648.     }
  1649.     if(count == 0) return Error(playerid, "No jailed players found.");
  1650.  
  1651.     else
  1652.     {
  1653.         Dialog_Show(playerid, dialogUnused, DIALOG_STYLE_LIST, "Jailed Players", DIALOG, "Close", "");
  1654.     }
  1655.     return 1;
  1656. }
  1657.  
  1658. CMD:muted(playerid, params[])
  1659. {
  1660.     LevelCheck(playerid, 1);
  1661.  
  1662.     new DIALOG[98+670], string[128];
  1663.     new count = 0;
  1664.  
  1665.     LOOP_PLAYERS(i)
  1666.     {
  1667.         if(IsPlayerMuted(i))
  1668.         {
  1669.             count++;
  1670.             format(string, sizeof(string), "%i. %s - Unmute in %i secs..", count, GetName(i), User[i][mutedsec]);
  1671.             strcat(DIALOG, string);
  1672.  
  1673.         }
  1674.     }
  1675.     if(count == 0) return Error(playerid, "No muted players found.");
  1676.  
  1677.     else
  1678.     {
  1679.         Dialog_Show(playerid, dialogUnused, DIALOG_STYLE_LIST, "Muted Players", DIALOG, "Close", "");
  1680.     }
  1681.     return 1;
  1682. }
  1683.  
  1684. CMD:cmdmuted(playerid, params[])
  1685. {
  1686.     LevelCheck(playerid, 1);
  1687.  
  1688.     new DIALOG[98+670], string[128];
  1689.     new count = 0;
  1690.  
  1691.     LOOP_PLAYERS(i)
  1692.     {
  1693.         if(IsPlayerCMDMuted(i))
  1694.         {
  1695.             count++;
  1696.             format(string, sizeof(string), "%i. %s - Unmute in %i secs..", count, GetName(i), User[i][cmdmutedsec]);
  1697.             strcat(DIALOG, string);
  1698.  
  1699.         }
  1700.     }
  1701.     if(count == 0) return Error(playerid, "No command muted players found.");
  1702.  
  1703.     else
  1704.     {
  1705.         Dialog_Show(playerid, dialogUnused, DIALOG_STYLE_LIST, "Command Muted Players", DIALOG, "Close", "");
  1706.     }
  1707.     return 1;
  1708. }
  1709.  
  1710. CMD:explode(playerid, params[])
  1711. {
  1712.     LevelCheck(playerid, 1);
  1713.  
  1714.     new target;
  1715.     if(sscanf(params, "u", target)) return Usage(playerid, "explode [playerid]");
  1716.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  1717.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  1718.  
  1719.     new Float:currentpos[3];
  1720.     GetPlayerPos(target, currentpos[0], currentpos[1], currentpos[2]);
  1721.     CreateExplosion(currentpos[0], currentpos[1], currentpos[2], 12, 1.00);
  1722.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  1723.  
  1724.     new string[144];
  1725.     format(string, sizeof(string), "You have exploded %s(%i).", GetName(target), target);
  1726.     SendClientMessage(playerid, COLOR_YELLOW, string);
  1727.     return 1;
  1728. }
  1729.  
  1730. CMD:disarm(playerid, params[])
  1731. {
  1732.     LevelCheck(playerid, 1);
  1733.  
  1734.     new target;
  1735.     if(sscanf(params, "u", target)) return Usage(playerid, "disarm [playerid]");
  1736.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  1737.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  1738.  
  1739.     ResetPlayerWeapons(target);
  1740.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  1741.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  1742.  
  1743.     new string[144];
  1744.     format(string, sizeof(string), "* Admin %s(%i) has disarmed you.", GetName(playerid), playerid);
  1745.     SendClientMessage(target, COLOR_YELLOW, string);
  1746.    
  1747.     format(string, sizeof(string), "You have disarmed %s(%i).", GetName(target), target);
  1748.     SendClientMessage(playerid, COLOR_YELLOW, string);
  1749.     return 1;
  1750. }
  1751.  
  1752. CMD:freeze(playerid, params[])
  1753. {
  1754.     LevelCheck(playerid, 1);
  1755.  
  1756.     new target, reason[35];
  1757.     if(sscanf(params, "uS(No Reason)[35]", target, reason)) return Usage(playerid, "freeze [playerid] [reason(Default No Reason)]");
  1758.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  1759.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  1760.  
  1761.     TogglePlayerControllable(target, false);
  1762.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  1763.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  1764.  
  1765.     new string[144];
  1766.     format(string, sizeof(string), "* Admin %s(%i) has freezed you "orange"[Reason: %s].", GetName(playerid), playerid, reason);
  1767.     SendClientMessage(target, COLOR_RED, string);
  1768.    
  1769.     format(string, sizeof(string), "You have freezed %s(%i).", GetName(target), target);
  1770.     SendClientMessage(playerid, COLOR_RED, string);
  1771.     return 1;
  1772. }
  1773.  
  1774. CMD:unfreeze(playerid, params[])
  1775. {
  1776.     LevelCheck(playerid, 1);
  1777.  
  1778.     new target;
  1779.     if(sscanf(params, "u", target)) return Usage(playerid, "unfreeze [playerid]");
  1780.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  1781.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  1782.  
  1783.     TogglePlayerControllable(target, true);
  1784.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  1785.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  1786.  
  1787.     new string[144];
  1788.     format(string, sizeof(string), "* Admin %s(%i) has unfreezed you.", GetName(playerid), playerid);
  1789.     SendClientMessage(target, COLOR_RED, string);
  1790.    
  1791.     format(string, sizeof(string), "You have unfreezed %s(%i).", GetName(target), target);
  1792.     SendClientMessage(playerid, COLOR_RED, string);
  1793.     return 1;
  1794. }
  1795.  
  1796. CMD:slap(playerid, params[])
  1797. {
  1798.     LevelCheck(playerid, 1);
  1799.  
  1800.     new target;
  1801.     if(sscanf(params, "u", target)) return Usage(playerid, "slap [playerid]");
  1802.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  1803.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  1804.  
  1805.     new Float:currentpos[3];
  1806.     GetPlayerPos(target, currentpos[0], currentpos[1], currentpos[2]);
  1807.     SetPlayerPos(target, currentpos[0], currentpos[1], currentpos[2] + 5.0);
  1808.  
  1809.     PlayerPlaySound(playerid, 1190, 0.0, 0.0, 0.0);
  1810.     PlayerPlaySound(target, 1190, 0.0, 0.0, 0.0);
  1811.  
  1812.     new string[144];
  1813.     format(string, sizeof(string), "You have slapped %s(%i).", GetName(target), target);
  1814.     SendClientMessage(playerid, COLOR_YELLOW, string);
  1815.     return 1;
  1816. }
  1817.  
  1818. CMD:mute(playerid, params[])
  1819. {
  1820.     LevelCheck(playerid, 1);
  1821.  
  1822.     new target, time, reason[128];
  1823.     if(sscanf(params, "uI(60)S(No Reason)[128]", target, time, reason)) return Usage(playerid, "mute [playerid] [seconds(Default 60)] [reason(Default No Reason)]");
  1824.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  1825.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  1826.     if(time > 5*60 || time < 10) return Error(playerid, "Mute time is invalid (10 - 360 seconds).");
  1827.     if(target == playerid) return Error(playerid, "You cannot mute yourself.");
  1828.     if(IsPlayerMuted(target)) return Error(playerid, "The specified player is already muted.");
  1829.  
  1830.     User[target][mutedsec] = time;
  1831.    
  1832.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  1833.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  1834.  
  1835.     new string[144];
  1836.     format(string, sizeof(string), "* %s(%i) has been muted by Admin %s(%i) for %i seconds "orange"[Reason: %s]", GetName(target), target, GetName(playerid), playerid, time, reason);
  1837.     SendClientMessageToAll(COLOR_RED, string);
  1838.    
  1839.     #if defined SAVE_LOGS
  1840.         SaveLog("mutes.txt", string);
  1841.     #endif
  1842.     return 1;
  1843. }
  1844.  
  1845. CMD:unmute(playerid, params[])
  1846. {
  1847.     LevelCheck(playerid, 1);
  1848.  
  1849.     new target;
  1850.     if(sscanf(params, "u", target)) return Usage(playerid, "unmute [playerid]");
  1851.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  1852.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  1853.     if(!IsPlayerMuted(target)) return Error(playerid, "The specified player is not muted.");
  1854.  
  1855.     User[target][mutedsec] = 0;
  1856.    
  1857.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  1858.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  1859.  
  1860.     new string[144];
  1861.     format(string, sizeof(string), "* %s(%i) has been unmuted by Admin %s(%i)", GetName(target), target, GetName(playerid), playerid);
  1862.     SendClientMessageToAll(COLOR_RED, string);
  1863.     return 1;
  1864. }
  1865.  
  1866. CMD:respawncars(playerid, params[])
  1867. {
  1868.     LevelCheck(playerid, 1);
  1869.  
  1870.     for(new cars; cars < MAX_VEHICLES; cars++)
  1871.     {
  1872.         LOOP_PLAYERS(i)
  1873.         {
  1874.             PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0);
  1875.             if(GetPlayerVehicleID(i) == cars)
  1876.             {
  1877.                 if(GetPlayerState(i) == PLAYER_STATE_DRIVER)
  1878.                 {
  1879.                     if(GetLevel(playerid) < GetLevel(i))
  1880.                     {
  1881.                         SetVehicleToRespawn(cars);
  1882.                     }
  1883.                 }
  1884.                 else SetVehicleToRespawn(cars);
  1885.             }
  1886.             else SetVehicleToRespawn(cars);
  1887.         }
  1888.     }
  1889.  
  1890.     new string[144];
  1891.     format(string, sizeof(string), "* Admin %s(%i) has respawned all vehicles.", GetName(playerid), playerid);
  1892.     SendClientMessageToAll(COLOR_BLUE, string);
  1893.     return 1;
  1894. }
  1895.  
  1896. CMD:ip(playerid, params[])
  1897. {
  1898.     LevelCheck(playerid, 1);
  1899.  
  1900.     new target;
  1901.     if(sscanf(params, "u", target)) return Usage(playerid, "ip [playerid]");
  1902.     if(!IsPlayerConnected(target)) return Error(playerid, "That player is not connected");
  1903.  
  1904.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  1905.  
  1906.     new string[144];
  1907.     format(string, sizeof(string), "%s(%i)'s IP is %s", GetName(target), target, GetIP(target));
  1908.     SendClientMessage(playerid, COLOR_ORANGE, string);
  1909.     return 1;
  1910. }
  1911.  
  1912. CMD:v(playerid, params[]) return cmd_car(playerid, params);
  1913. CMD:car(playerid, params[])
  1914. {
  1915.     LevelCheck(playerid, 1);
  1916.  
  1917.     new vehicle[32], model, color[2];
  1918.     if(sscanf(params, "s[32]I(-1)I(-1)", vehicle, color[0], color[1])) return Usage(playerid, "car [name/id] [color1(optional)] [color2(optional)]");
  1919.  
  1920.     if(IsNumericString(vehicle)) model = strval(vehicle);
  1921.     else model = GetVehicleModelIDFromName(vehicle);
  1922.  
  1923.     if(model < 400 || model > 611) return Error(playerid, "Invalid vehicle ID or vehicle name");
  1924.  
  1925.     new Float:currentpos[4];
  1926.     GetPlayerPos(playerid, currentpos[0], currentpos[1], currentpos[2]);
  1927.     GetPlayerFacingAngle(playerid, currentpos[3]);
  1928.  
  1929.     if(IsPlayerInAnyVehicle(playerid)) SetPlayerPos(playerid, currentpos[0] + 3.0, currentpos[1], currentpos[2]);
  1930.  
  1931.     if(color[0] == -1) color[0] = random(256);
  1932.     if(color[1] == -1) color[1] = random(256);
  1933.  
  1934.     if(User[playerid][avehicle] != -1) RemoveAVeh(User[playerid][avehicle]);
  1935.  
  1936.     User[playerid][avehicle] = CreateVehicle(model, currentpos[0] + 3.0, currentpos[1], currentpos[2], currentpos[3], color[0], color[1], -1);
  1937.     SetVehicleVirtualWorld(User[playerid][avehicle], GetPlayerVirtualWorld(playerid));
  1938.     LinkVehicleToInterior(User[playerid][avehicle], GetPlayerInterior(playerid));
  1939.     PutPlayerInVehicle(playerid, User[playerid][avehicle], 0);
  1940.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  1941.  
  1942.     new string[144];
  1943.     format(string, sizeof(string), "You have spawned a %s(id: %i), with colors %i, %i", sbVehicles[model - 400], model, color[0], color[1]);
  1944.     SendClientMessage(playerid, COLOR_ORANGE, string);
  1945.     return 1;
  1946. }
  1947.  
  1948. CMD:fix(playerid, params[]) return cmd_repair(playerid, params);
  1949. CMD:repair(playerid, params[])
  1950. {
  1951.     LevelCheck(playerid, 1);
  1952.  
  1953.     if(IsPlayerInAnyVehicle(playerid))
  1954.     {
  1955.         RepairVehicle(GetPlayerVehicleID(playerid));
  1956.         GameTextForPlayer(playerid, "~b~~h~~h~~h~Vehicle Repaired", 5000, 3);
  1957.         SetVehicleHealth(GetPlayerVehicleID(playerid), 1000.0);
  1958.         PlayerPlaySound(playerid, 1133, 0.0, 0.0, 0.0);
  1959.         return 1;
  1960.     }
  1961.     Error(playerid, "You must be in car to use this command");
  1962.     return 1;
  1963. }
  1964.  
  1965. CMD:asay(playerid, params[])
  1966. {
  1967.     LevelCheck(playerid, 1);
  1968.  
  1969.     new message[135];
  1970.     if(sscanf(params, "s[135]", message)) return Usage(playerid, "asay [message]");
  1971.  
  1972.     new string[144];
  1973.     format(string, sizeof(string), "Admin %s(%i) says %s", GetName(playerid), playerid, message);
  1974.     SendClientMessageToAll(COLOR_RED, string);
  1975.    
  1976.     return 1;
  1977. }
  1978.  
  1979. CMD:kick(playerid, params[])
  1980. {
  1981.     LevelCheck(playerid, 1);
  1982.  
  1983.     new target, reason[45];
  1984.     if(sscanf(params, "us[128]", target, reason)) return Usage(playerid, "kick [playerid] [reason]");
  1985.     if(!IsPlayerConnected(target)) return Error(playerid, "That player is not connected.");
  1986.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  1987.     if(target == playerid) return Error(playerid, "You can't kick yourself");
  1988.  
  1989.     new message[144];
  1990.     format(message, sizeof(message), "* %s(%i) has been kicked by Admin %s(%i) "orange"[Reason: %s]", GetName(target), target, GetName(playerid), playerid, reason);
  1991.     SendClientMessageToAll(COLOR_RED, message);
  1992.  
  1993.     #if defined SAVE_LOGS
  1994.         SaveLog("kicks.txt", message);
  1995.     #endif
  1996.  
  1997.     DelayKick(target);
  1998.     return 1;
  1999. }
  2000.  
  2001. // Level 2 Commands
  2002. CMD:jetpack(playerid, params[])
  2003. {
  2004.     LevelCheck(playerid, 2);
  2005.  
  2006.     new target;
  2007.     if(sscanf(params, "u", target) || !sscanf(params, "u", target) && playerid == target)
  2008.     {
  2009.         SetPlayerSpecialAction(playerid, SPECIAL_ACTION_USEJETPACK);
  2010.         Server(playerid, "You have successfully spawned a jetpack.");
  2011.         Server(playerid, "You can also give jetpack to players with /jetpack [playerid].");
  2012.         PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2013.         return 1;
  2014.     }
  2015.  
  2016.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2017.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  2018.  
  2019.     SetPlayerSpecialAction(target, SPECIAL_ACTION_USEJETPACK);
  2020.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  2021.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2022.  
  2023.     new string[144];
  2024.     format(string, sizeof(string), "* Admin %s(%i) has given you a jetpack.", GetName(playerid), playerid);
  2025.     SendClientMessage(target, COLOR_YELLOW, string);
  2026.    
  2027.     format(string, sizeof(string), "* You have given %s(%i) a jetpack.", GetName(target), target);
  2028.     SendClientMessage(playerid, COLOR_YELLOW, string);
  2029.     return 1;
  2030. }
  2031.  
  2032. CMD:aheal(playerid, params[])
  2033. {
  2034.     LevelCheck(playerid, 2);
  2035.  
  2036.     new target;
  2037.     if(sscanf(params, "u", target)) return Usage(playerid, "aheal [playerid]");
  2038.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2039.  
  2040.     SetPlayerHealth(target, 100.0);
  2041.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  2042.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2043.  
  2044.     new string[144];
  2045.     format(string, sizeof(string), "Admin %s(%i) has healed you.", GetName(playerid), playerid);
  2046.     SendClientMessage(target, COLOR_YELLOW, string);
  2047.     format(string, sizeof(string), "You have healed %s(%i).", GetName(target), target);
  2048.     SendClientMessage(playerid, COLOR_YELLOW, string);
  2049.     return 1;
  2050. }
  2051.  
  2052. CMD:aarmour(playerid, params[])
  2053. {
  2054.     LevelCheck(playerid, 2);
  2055.  
  2056.     new target;
  2057.     if(sscanf(params, "u", target)) return Usage(playerid, "aarmour [playerid]");
  2058.     if(! IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2059.  
  2060.     SetPlayerArmour(target, 100.0);
  2061.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  2062.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2063.  
  2064.     new string[144];
  2065.     format(string, sizeof(string), "* Admin %s(%i) has armoured you.", GetName(playerid), playerid);
  2066.     SendClientMessage(target, COLOR_YELLOW, string);
  2067.     format(string, sizeof(string), "You have armoured %s(%i).", GetName(target), target);
  2068.     SendClientMessage(playerid, COLOR_YELLOW, string);
  2069.     return 1;
  2070. }
  2071.  
  2072. CMD:setinterior(playerid, params[])
  2073. {
  2074.     LevelCheck(playerid, 2);
  2075.  
  2076.     new target, interiorid;
  2077.     if(sscanf(params, "ui", target, interiorid)) return Usage(playerid, "setinterior [playerid] [interiorid]");
  2078.     if(! IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2079.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  2080.  
  2081.     SetPlayerInterior(target, interiorid);
  2082.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  2083.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2084.  
  2085.     new string[144];
  2086.     format(string, sizeof(string), "* Admin %s(%i) has setted your interior to %i.", GetName(playerid), playerid, interiorid);
  2087.     SendClientMessage(target, COLOR_YELLOW, string);
  2088.     format(string, sizeof(string), "You have setted %s(%i)'s interior to %i.", GetName(target), target, interiorid);
  2089.     SendClientMessage(playerid, COLOR_YELLOW, string);
  2090.     return 1;
  2091. }
  2092.  
  2093. CMD:setworld(playerid, params[])
  2094. {
  2095.     LevelCheck(playerid, 2);
  2096.  
  2097.     new target, worldid;
  2098.     if(sscanf(params, "ui", target, worldid)) return Usage(playerid, "setworld [playerid] [worldid]");
  2099.     if(! IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2100.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  2101.  
  2102.     SetPlayerVirtualWorld(target, id);
  2103.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  2104.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2105.  
  2106.     new string[144];
  2107.     format(string, sizeof(string), "* Admin %s(%i) has setted your virtual world to %i.", GetName(playerid), playerid, worldid);
  2108.     SendClientMessage(target, COLOR_YELLOW, string);
  2109.     format(string, sizeof(string), "You have setted %s(%i)'s virtual world to %i.", GetName(target), target, worldid);
  2110.     SendClientMessage(playerid, COLOR_YELLOW, string);
  2111.     return 1;
  2112. }
  2113.  
  2114. CMD:cc(playerid, params[])
  2115. {
  2116.     LevelCheck(playerid, 2);
  2117.  
  2118.     for(new i; i < 250; i++)
  2119.     {
  2120.         SendClientMessageToAll(-1, "");
  2121.         PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0);
  2122.     }
  2123.  
  2124.     new string[144];
  2125.     format(string, sizeof(string), "* Admin %s(%i) has cleared the chat.", GetName(playerid), playerid);
  2126.     SendClientMessageToAll(COLOR_YELLOW, string);
  2127.     return 1;
  2128. }
  2129.  
  2130. CMD:akill(playerid, params[])
  2131. {
  2132.     LevelCheck(playerid, 2);
  2133.  
  2134.     new target;
  2135.     if(sscanf(params, "u", target)) return Usage(playerid, "akill [playerid]");
  2136.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2137.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  2138.  
  2139.     SetPlayerHealth(target, 0.0);
  2140.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  2141.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2142.  
  2143.     new string[144];
  2144.     format(string, sizeof(string), "* You have killed %s(%i).", GetName(target), target);
  2145.     SendClientMessage(playerid, COLOR_YELLOW, string);
  2146.    
  2147.     format(string, sizeof(string), "* Admin %s(%i) has killed you.", GetName(playerid), playerid);
  2148.     SendClientMessage(playerid, COLOR_YELLOW, string);
  2149.     return 1;
  2150. }
  2151.  
  2152. CMD:jail(playerid, params[])
  2153. {
  2154.     LevelCheck(playerid, 2);
  2155.  
  2156.     new target, time, reason[128];
  2157.     if(sscanf(params, "uI(60)S(No Reason)[128]", target, time, reason)) return Usage(playerid, "jail [playerid] [seconds(Default 60)] [reason(Default No Reason)]");
  2158.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2159.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  2160.     if(time > 5*60 || time < 10) return Error(playerid, "Invalid jail time (10 - 360 seconds).");
  2161.     if(target == playerid) return Error(playerid, "You can't jail yourself.");
  2162.     if(IsPlayerJailed(target)) return Error(playerid, "Player is already jailed.");
  2163.  
  2164.     User[target][jailed] = 1;
  2165.     User[target][jailedsec] = time;
  2166.     JailPlayer(target);
  2167.    
  2168.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  2169.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2170.  
  2171.     new string[144];
  2172.     format(string, sizeof(string), "* %s(%i) has been jailed by Admin %s(%i) for %i seconds "orange"[Reason: %s]", GetName(target), target, GetName(playerid), playerid, time, reason);
  2173.     SendClientMessageToAll(COLOR_RED, string);
  2174.    
  2175.     #if defined SAVE_LOGS
  2176.         SaveLog("jails.txt", string);
  2177.     #endif
  2178.     return 1;
  2179. }
  2180.  
  2181. CMD:unjail(playerid, params[])
  2182. {
  2183.     LevelCheck(playerid, 2);
  2184.  
  2185.     new target;
  2186.     if(sscanf(params, "u", target)) return Usage(playerid, "unjail [playerid]");
  2187.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2188.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  2189.     if(!IsPlayerJailed(target)) return Error(playerid, "Player is not jailed.");
  2190.    
  2191.     User[target][jailed] = 0;
  2192.     User[target][jailedsec] = 0;
  2193.     UnJailPlayer(target);
  2194.    
  2195.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  2196.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2197.  
  2198.     new string[144];
  2199.     format(string, sizeof(string), "* %s(%i) has been unjailed by Admin %s(%i)", GetName(target), target, GetName(playerid), playerid);
  2200.     SendClientMessageToAll(COLOR_RED, string);
  2201.     return 1;
  2202. }
  2203.  
  2204. CMD:get(playerid, params[]) return cmd_bring(playerid, params);
  2205. CMD:bring(playerid, params[])
  2206. {
  2207.     LevelCheck(playerid, 2);
  2208.    
  2209.     new target;
  2210.     if(sscanf(params, "u", target)) return Usage(playerid, "bring [playerid]");
  2211.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2212.     if(target == playerid) return Error(playerid, "You can't bring yourself.");
  2213.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  2214.  
  2215.     new Float:currentpos[3];
  2216.     GetPlayerPos(playerid, currentpos[0], currentpos[1], currentpos[2]);
  2217.     if(GetPlayerState(target) == PLAYER_STATE_DRIVER)
  2218.     {
  2219.         SetVehiclePos(GetPlayerVehicleID(target), currentpos[0] + 3.0, currentpos[1], currentpos[2]);
  2220.         LinkVehicleToInterior(GetPlayerVehicleID(target), GetPlayerInterior(playerid));
  2221.         SetVehicleVirtualWorld(GetPlayerVehicleID(target), GetPlayerVirtualWorld(playerid));
  2222.     }
  2223.     else
  2224.     {
  2225.         SetPlayerPos(target, currentpos[0] + 2.5, currentpos[1], currentpos[2]);
  2226.     }
  2227.     SetPlayerInterior(target, GetPlayerInterior(playerid));
  2228.     SetPlayerVirtualWorld(target, GetPlayerVirtualWorld(playerid));
  2229.    
  2230.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  2231.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2232.  
  2233.     new string[144];
  2234.     format(string, sizeof(string), "* Admin %s(%i) has teleported you to his/her position.", GetName(playerid), playerid);
  2235.     SendClientMessage(target, COLOR_GREEN, string);
  2236.    
  2237.     format(string, sizeof(string), "* You have teleported %s(%i) to your position.", GetName(target), target);
  2238.     SendClientMessage(playerid, COLOR_GREEN, string);
  2239.     return 1;
  2240. }
  2241.  
  2242. CMD:cmdmute(playerid, params[])
  2243. {
  2244.     LevelCheck(playerid, 2);
  2245.  
  2246.     new target, time, reason[128];
  2247.     if(sscanf(params, "uI(60)S(No Reason)[128]", target, time, reason)) return Usage(playerid, "cmdmute [playerid] [seconds(Default 60)] [reason(Default No Reason)]");
  2248.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2249.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  2250.     if(time > 5*60 || time < 10) return Error(playerid, "CMD mute time is invalid (10 - 360 seconds).");
  2251.     if(target == playerid) return Error(playerid, "You cannot CMD mute yourself.");
  2252.     if(IsPlayerCMDMuted(playerid)) return Error(playerid, "The specified player is already CMD muted.");
  2253.  
  2254.     User[target][cmdmutedsec] = time;
  2255.  
  2256.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  2257.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2258.  
  2259.     new string[144];
  2260.     format(string, sizeof(string), "* %s(%i) has been CMD muted by Admin %s(%i) for %i seconds "orange"[Reason: %s]", GetName(target), target, GetName(playerid), playerid, time, reason);
  2261.     SendClientMessageToAll(COLOR_RED, string);
  2262.    
  2263.     #if defined SAVE_LOGS
  2264.         SaveLog("cmdmutes.txt", string);
  2265.     #endif
  2266.     return 1;
  2267. }
  2268.  
  2269. CMD:uncmdmute(playerid, params[])
  2270. {
  2271.     LevelCheck(playerid, 2);
  2272.  
  2273.     new target;
  2274.     if(sscanf(params, "u", target)) return Usage(playerid, "uncmdmute [playerid]");
  2275.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2276.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  2277.     if(!IsPlayerMuted(playerid)) return Error(playerid, "The specified player is not CMD muted.");
  2278.  
  2279.     User[target][cmdmutedsec] = 0;
  2280.  
  2281.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  2282.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2283.  
  2284.     new string[144];
  2285.     format(string, sizeof(string), "* %s(%i) has been CMD unmuted by Admin %s(%i)", GetName(target), target, GetName(playerid), playerid);
  2286.     SendClientMessageToAll(COLOR_RED, string);
  2287.     return 1;
  2288. }
  2289.  
  2290. CMD:cleardwindow(playerid, params[])
  2291. {
  2292.     LevelCheck(playerid, 2);
  2293.  
  2294.     for(new i = 0; i < 20; i++)
  2295.     {
  2296.         SendDeathMessage(6000, 5005, 255);
  2297.     }
  2298.  
  2299.     new string[144];
  2300.     format(string, sizeof(string), "* Admin %s(%i has cleared all players death window.", GetName(playerid), playerid);
  2301.     SendClientMessageToAll(COLOR_BLUE, string);
  2302.     return 1;
  2303. }
  2304.  
  2305. CMD:ban(playerid, params[])
  2306. {
  2307.     LevelCheck(playerid, 2);
  2308.  
  2309.     new target, reason[35], days;
  2310.     if(sscanf(params, "is[35]I(0)", target, reason, days)) return Usage(playerid, "ban [playerid] [reason] [days(0 for permanent ban)]");
  2311.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected, use /oban instead.");
  2312.     if(target == playerid) return Error(playerid, "You can't ban yourself.");
  2313.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You cannot use this command on higher level admin.");
  2314.     if(days < 0) return Error(playerid, "Invalid days, must be greater than 0 for temp ban, or 0 for permanent ban.");
  2315.     if(strlen(reason) < 3 || strlen(reason) > 35) return Error(playerid, "Invalid reason length, must be b/w 0-35 characters.");
  2316.  
  2317.     new bandate[18], date[3], time;
  2318.     getdate(date[0], date[1], date[2]);
  2319.     format(bandate, sizeof(bandate), "%02i/%02i/%i", date[2], date[1], date[0]);
  2320.  
  2321.     if(days == 0) time = 0;
  2322.     else time = ((days * 24 * 60 * 60) + gettime());
  2323.    
  2324.     new handle = SQL::Open(SQL::INSERT, ""BANS_TABLE"");
  2325.    
  2326.     SQL::ToggleAutoIncrement(handle, true);
  2327.     SQL::WriteString(handle, "ban_username", GetName(target));
  2328.     SQL::WriteString(handle, "ban_ip", GetIP(target));
  2329.     SQL::WriteString(handle, "ban_by", GetName(playerid));
  2330.     SQL::WriteString(handle, "ban_on", bandate);
  2331.     SQL::WriteString(handle, "ban_reason", reason);
  2332.     SQL::WriteInt(handle, "ban_expire", time);
  2333.    
  2334.     SQL::Close(handle);
  2335.  
  2336.     if(days == 0)
  2337.     {
  2338.         new string[144];
  2339.         format(string, sizeof(string), "* %s(%i) has been banned by Admin %s(%d) "orange"[Reason: %s]", GetName(target), target, GetName(playerid), playerid, reason);
  2340.         SendClientMessage(target, COLOR_RED, string);
  2341.        
  2342.         #if defined SAVE_LOGS
  2343.             SaveLog("bans.txt", string);
  2344.         #endif
  2345.     }
  2346.     else
  2347.     {
  2348.         new string[258];
  2349.         format(string, sizeof(string), "* %s(%i) has been temp banned by Admin %s(%d) "orange"[Reason: %s] [Days: %i]", GetName(target), target, GetName(playerid), playerid, reason, days);
  2350.         SendClientMessage(target, COLOR_RED, string);
  2351.        
  2352.         #if defined SAVE_LOGS
  2353.             SaveLog("bans.txt", string);
  2354.         #endif
  2355.        
  2356.         format(string, sizeof(string), "* Temp banned for %i days "orange"[Unban on %s]", days, ConvertTime(time));
  2357.         SendClientMessage(target, COLOR_RED, string);
  2358.     }
  2359.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  2360.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2361.  
  2362.     DelayKick(target);
  2363.     return 1;
  2364. }
  2365.  
  2366. // Level 3 Commands
  2367. CMD:teleplayer(playerid, params[])
  2368. {
  2369.     LevelCheck(playerid, 3);
  2370.    
  2371.     new target, target2;
  2372.     if(sscanf(params, "u", target, target2)) return Usage(playerid, "teleplayer [playerid] [targetid]");
  2373.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2374.     if(!IsPlayerConnected(target2)) return Error(playerid, "The specified player is not conected.");
  2375.     if(target == playerid) return Error(playerid, "You can't tele yourself.");
  2376.     if(target2 == playerid) return Error(playerid, "You can't tele yourself.");
  2377.    
  2378.     new Float:currentpos[3];
  2379.     GetPlayerPos(target2, currentpos[0], currentpos[1], currentpos[2]);
  2380.     if(GetPlayerState(target) == PLAYER_STATE_DRIVER)
  2381.     {
  2382.         SetVehiclePos(GetPlayerVehicleID(target), currentpos[0] + 3.0, currentpos[1], currentpos[2]);
  2383.         LinkVehicleToInterior(GetPlayerVehicleID(target), GetPlayerInterior(target2));
  2384.         SetVehicleVirtualWorld(GetPlayerVehicleID(target), GetPlayerVirtualWorld(target2));
  2385.     }
  2386.     else
  2387.     {
  2388.         SetPlayerPos(target, currentpos[0] + 2.5, currentpos[1], currentpos[2]);
  2389.     }
  2390.     SetPlayerInterior(target, GetPlayerInterior(target2));
  2391.     SetPlayerVirtualWorld(target, GetPlayerVirtualWorld(target2));
  2392.  
  2393.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2394.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  2395.     PlayerPlaySound(target2, 1057, 0.0, 0.0, 0.0);
  2396.  
  2397.     new string[144];
  2398.     format(string, sizeof(string), "* Admin %s(%i) has teleported you to %s(%i)'s position.", GetName(playerid), playerid, GetName(target2), target2);
  2399.     SendClientMessage(target, COLOR_GREEN, string);
  2400.  
  2401.     format(string, sizeof(string), "* Admin %s(%i) has teleported %s(%i) to your position.", GetName(playerid), playerid, GetName(target), target);
  2402.     SendClientMessage(target2, COLOR_GREEN, string);
  2403.    
  2404.     format(string, sizeof(string), "* You have teleported %s(%i) to %s(%i)'s position.", GetName(target), target, GetName(target2), target2);
  2405.     SendClientMessage(target, COLOR_GREEN, string);
  2406.     return 1;
  2407. }
  2408.  
  2409. CMD:fakedeath(playerid, params[])
  2410. {
  2411.     LevelCheck(playerid, 3);
  2412.  
  2413.     new target, killerid, weaponid;
  2414.     if(sscanf(params, "uui", target, killerid, weaponid)) return Usage(playerid, "fakedeath [playerid] [killerid] [weapon]");
  2415.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2416.     if(!IsPlayerConnected(killerid)) return Error(playerid, "The specified killer is not conected.");
  2417.     if(!IsValidWeapon(weaponid)) return Error(playerid, "Invalid weapon id.");
  2418.  
  2419.     new weaponname[35];
  2420.     GetWeaponName(weaponid, weaponname, sizeof(weaponname));
  2421.     SendDeathMessage(killerid, target, weaponid);
  2422.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2423.  
  2424.     new string[144];
  2425.     format(string, sizeof(string), "[FAKEDEATH] %s has killed %s with a %s", GetName(target), GetName(killerid), weaponname);
  2426.     SendClientMessage(playerid, COLOR_BLUE, string);
  2427.     return 1;
  2428. }
  2429.  
  2430. CMD:giveweapon(playerid, params[])
  2431. {
  2432.     LevelCheck(playerid, 3);
  2433.  
  2434.     new target, weapon[32], ammo;
  2435.     if(sscanf(params, "us[32]I(250)", target, weapon, ammo)) return Usage(playerid, "giveweapon [playerid] [weapon] [ammo(Default 250)]");
  2436.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2437.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't this command on this player.");
  2438.  
  2439.     new weaponid;
  2440.     if(!IsNumericString(weapon)) weaponid = GetWeaponIDFromName(weapon);
  2441.     else weaponid = strval(weapon);
  2442.  
  2443.     if(!IsValidWeapon(weaponid)) return Error(playerid, "Invalid weapon id.");
  2444.  
  2445.     GetWeaponName(weaponid, weapon, sizeof(weapon));
  2446.     GivePlayerWeapon(target, weaponid, ammo);
  2447.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  2448.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2449.  
  2450.     new string[144];
  2451.     format(string, sizeof(string), "* Admin %s(%i) has given you a %s with %i ammo.", GetName(playerid), playerid, weapon, ammo);
  2452.     SendClientMessage(target, COLOR_YELLOW, string);
  2453.     format(string, sizeof(string), "* You have given %s(%i) a %s with %i ammo.", GetName(target), target, weapon, ammo);
  2454.     SendClientMessage(playerid, COLOR_YELLOW, string);
  2455.     return 1;
  2456. }
  2457.  
  2458. CMD:sethealth(playerid, params[])
  2459. {
  2460.     LevelCheck(playerid, 3);
  2461.  
  2462.     new target, Float:amount;
  2463.     if(sscanf(params, "uf", target, amount)) return Usage(playerid, "sethealth [playerid] [amount]");
  2464.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2465.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  2466.  
  2467.     SetPlayerHealth(target, amount);
  2468.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  2469.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2470.  
  2471.     new string[144];
  2472.     format(string, sizeof(string), "* Admin %s(%i) has set your health to %0.2f.", GetName(playerid), playerid, amount);
  2473.     SendClientMessage(target, COLOR_YELLOW, string);
  2474.    
  2475.     format(string, sizeof(string), "* You have setted %s(%i)'s health to %.2f.", GetName(target), target, amount);
  2476.     SendClientMessage(playerid, COLOR_YELLOW, string);
  2477.     return 1;
  2478. }
  2479.  
  2480. CMD:setarmour(playerid, params[])
  2481. {
  2482.     LevelCheck(playerid, 3);
  2483.  
  2484.     new target, Float:amount;
  2485.     if(sscanf(params, "uf", target, amount)) return Usage(playerid, "setarmour [playerid] [amount]");
  2486.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2487.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  2488.  
  2489.     SetPlayerArmour(target, amount);
  2490.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  2491.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2492.  
  2493.     new string[144];
  2494.     format(string, sizeof(string), "* Admin %s(%i) has setted your armour to %0.2f.", GetName(playerid), playerid, amount);
  2495.     SendClientMessage(target, COLOR_YELLOW, string);
  2496.     format(string, sizeof(string), "* You have setted %s(%i)'s armour to %.2f.", GetName(target), target, amount);
  2497.     SendClientMessage(playerid, COLOR_YELLOW, string);
  2498.     return 1;
  2499. }
  2500.  
  2501. CMD:healall(playerid, params[])
  2502. {
  2503.     LevelCheck(playerid, 3);
  2504.  
  2505.     LOOP_PLAYERS(i)
  2506.     {
  2507.         SetPlayerHealth(i, 100.0);
  2508.         PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0);
  2509.     }
  2510.  
  2511.     new string[144];
  2512.     format(string, sizeof(string), "* Admin %s(%i) has healed all players.", GetName(playerid), playerid);
  2513.     SendClientMessageToAll(COLOR_BLUE, string);
  2514.     return 1;
  2515. }
  2516.  
  2517. CMD:armourall(playerid, params[])
  2518. {
  2519.     LevelCheck(playerid, 3);
  2520.  
  2521.     LOOP_PLAYERS(i)
  2522.     {
  2523.         SetPlayerArmour(i, 100.0);
  2524.         PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0);
  2525.     }
  2526.  
  2527.     new string[144];
  2528.     format(string, sizeof(string), "* Admin %s(%i) has armoured all players.", GetName(playerid), playerid);
  2529.     SendClientMessageToAll(COLOR_BLUE, string);
  2530.     return 1;
  2531. }
  2532.  
  2533. CMD:givecash(playerid, params[])
  2534. {
  2535.     LevelCheck(playerid, 3);
  2536.  
  2537.     new target, amount;
  2538.     if(sscanf(params, "ui", target, amount)) return Usage(playerid, "givecash [playerid] [amount]");
  2539.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2540.  
  2541.     GivePlayerMoney(target, amount);
  2542.    
  2543.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  2544.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2545.  
  2546.     new string[144];
  2547.     format(string, sizeof(string), "Admin %s(%i) has given you $%i cash.", GetName(playerid), playerid, amount);
  2548.     SendClientMessage(target, COLOR_YELLOW, string);
  2549.     format(string, sizeof(string), "You have given %s(%i) $%i cash.", GetName(target), target, amount);
  2550.     SendClientMessage(playerid, COLOR_YELLOW, string);
  2551.     return 1;
  2552. }
  2553.  
  2554. CMD:givescore(playerid, params[])
  2555. {
  2556.     LevelCheck(playerid, 3);
  2557.  
  2558.     new target, amount;
  2559.     if(sscanf(params, "ui", target, amount)) return Usage(playerid, "givescore [playerid] [amount]");
  2560.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2561.  
  2562.     SetPlayerScore(target, (GetPlayerScore(playerid) + amount));
  2563.  
  2564.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  2565.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2566.  
  2567.     new string[144];
  2568.     format(string, sizeof(string), "Admin %s(%i) has given you %i score.", GetName(playerid), playerid, amount);
  2569.     SendClientMessage(target, COLOR_YELLOW, string);
  2570.     format(string, sizeof(string), "You have given %s(%i) %i score.", GetName(target), target, amount);
  2571.     SendClientMessage(playerid, COLOR_YELLOW, string);
  2572.     return 1;
  2573. }
  2574.  
  2575. CMD:unban(playerid, params[])
  2576. {
  2577.     LevelCheck(playerid, 3);
  2578.  
  2579.     new name[24];
  2580.     if(sscanf(params,"s[24]", name)) return Usage(playerid, "unban [username]");
  2581.    
  2582.     if(SQL::RowExistsEx(""BANS_TABLE"", "ban_username", name))
  2583.     {
  2584.        SQL::DeleteRowEx(""BANS_TABLE"", "ban_username", name);
  2585.     }
  2586.     else return Error(playerid, "The specified username is not banned.");
  2587.  
  2588.     new string[144];
  2589.     format(string, sizeof(string), "* You have unbanned user %s successfully.", name);
  2590.     SendClientMessage(playerid, COLOR_RED, string);
  2591.  
  2592.     #if defined SAVE_LOGS
  2593.         new logstring[244];
  2594.         format(logstring, sizeof(logstring), "Admin %s unbanned %s", GetName(playerid), name);
  2595.         SaveLog("unbans.txt", logstring);
  2596.     #endif
  2597.     return 1;
  2598. }
  2599.  
  2600. // Level 4 Commands
  2601. CMD:oban(playerid, params[])
  2602. {
  2603.     LevelCheck(playerid, 4);
  2604.  
  2605.     new name[MAX_PLAYER_NAME], reason[35], days;
  2606.     if(sscanf(params, "s[24]s[35]I(0)", name, reason, days)) return Usage(playerid, "oban [username] [reason] [days(0 for permanent)]");
  2607.     if(!strcmp(name, GetName(playerid))) return Error(playerid, "You can't ban yourself.");
  2608.     LOOP_PLAYERS(i)
  2609.     {
  2610.         if(!strcmp(name, GetName(i), false))
  2611.         {
  2612.             return Error(playerid, "The specified username is online. Try /ban instead.");
  2613.         }
  2614.     }
  2615.    
  2616.     new playerIP[18], admin;
  2617.     new handle2 = SQL::OpenEx(SQL::READ, ""PLAYERS_TABLE"", "username", name);
  2618.     SQL::ReadString(handle2, "ip", playerIP, 114);
  2619.     SQL::ReadInt(handle2, "level", admin);
  2620.     SQL::Close(handle2);
  2621.    
  2622.     if(GetLevel(playerid) < admin) return Error(playerid, "You can't use this command on this player.");
  2623.    
  2624.     if(SQL::RowExistsEx(""BANS_TABLE"", "ban_username", name)) return Error(playerid, "Player is already banned.");
  2625.     if(!SQL::RowExistsEx(""PLAYERS_TABLE"", "username", name)) return Error(playerid, "Player doesn't exist in database.");
  2626.     if(days < 0) return Error(playerid, "Invalid days, must be greater than 0 for temp ban, or 0 for permanent ban.");
  2627.     if(strlen(reason) < 3 || strlen(reason) > 35) return Error(playerid, "Invalid reason length, must be b/w 0-35 characters.");
  2628.  
  2629.     new bandate[18], date[3], time;
  2630.     getdate(date[0], date[1], date[2]);
  2631.     format(bandate, sizeof(bandate), "%02i/%02i/%i", date[2], date[1], date[0]);
  2632.  
  2633.     if(days == 0) time = 0;
  2634.     else time = ((days * 24 * 60 * 60) + gettime());
  2635.    
  2636.     new handle = SQL::Open(SQL::INSERT, ""BANS_TABLE"");
  2637.     SQL::ToggleAutoIncrement(handle, true);
  2638.     SQL::WriteString(handle, "ban_username", name);
  2639.     SQL::WriteString(handle, "ban_ip", playerIP);
  2640.     SQL::WriteString(handle, "ban_by", GetName(playerid));
  2641.     SQL::WriteString(handle, "ban_on", bandate);
  2642.     SQL::WriteString(handle, "ban_reason", reason);
  2643.     SQL::WriteInt(handle, "ban_expire", time);
  2644.     SQL::Close(handle);
  2645.  
  2646.     if(days == 0)
  2647.     {
  2648.         new string[144];
  2649.         format(string, sizeof(string), "* %s has been offline banned by Admin %s(%d) "orange"[Reason: %s]", name, GetName(playerid), playerid, reason);
  2650.         SendClientMessageToAll(COLOR_RED, string);
  2651.        
  2652.         #if defined SAVE_LOGS
  2653.             SaveLog("bans.txt", string);
  2654.         #endif
  2655.     }
  2656.     else
  2657.     {
  2658.         new string[144];
  2659.         format(string, sizeof(string), "* %s has been offline temp banned by Admin %s(%d) "orange"[Reason: %s] [Days: %i]", name, GetName(playerid), playerid, reason, days);
  2660.         SendClientMessageToAll(COLOR_RED, string);
  2661.        
  2662.         #if defined SAVE_LOGS
  2663.             SaveLog("bans.txt", string);
  2664.         #endif
  2665.        
  2666.         format(string, sizeof(string), "* Banned for %i days [Unban on %s]", days, ConvertTime(time));
  2667.         SendClientMessageToAll(COLOR_RED, string);
  2668.     }
  2669.  
  2670.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2671.     return 1;
  2672. }
  2673.  
  2674. CMD:setcash(playerid, params[])
  2675. {
  2676.     LevelCheck(playerid, 4);
  2677.  
  2678.     new target, amount;
  2679.     if(sscanf(params, "ui", target, amount)) return Usage(playerid, "setcash [playerid] [amount]");
  2680.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2681.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  2682.  
  2683.     ResetPlayerMoney(target);
  2684.     GivePlayerMoney(target, amount);
  2685.    
  2686.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  2687.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2688.  
  2689.     new string[144];
  2690.     format(string, sizeof(string), "Admin %s(%i) has setted your money to $%i.", GetName(playerid), playerid, amount);
  2691.     SendClientMessage(target, COLOR_YELLOW, string);
  2692.    
  2693.     format(string, sizeof(string), "You have setted %s(%i)'s money to $%i.", GetName(target), target, amount);
  2694.     SendClientMessage(playerid, COLOR_YELLOW, string);
  2695.     return 1;
  2696. }
  2697.  
  2698. CMD:setscore(playerid, params[])
  2699. {
  2700.     LevelCheck(playerid, 4);
  2701.  
  2702.     new target, amount;
  2703.     if(sscanf(params, "ui", target, amount)) return Usage(playerid, "setscore [playerid] [amount]");
  2704.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2705.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  2706.  
  2707.     SetPlayerScore(target, amount);
  2708.  
  2709.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  2710.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2711.  
  2712.     new string[144];
  2713.     format(string, sizeof(string), "Admin %s(%i) has setted your score to %i.", GetName(playerid), playerid, amount);
  2714.     SendClientMessage(target, COLOR_YELLOW, string);
  2715.  
  2716.     format(string, sizeof(string), "You have setted %s(%i)'s score to %i.", GetName(target), target, amount);
  2717.     SendClientMessage(playerid, COLOR_YELLOW, string);
  2718.     return 1;
  2719. }
  2720.  
  2721. CMD:setwanteds(playerid, params[])
  2722. {
  2723.     LevelCheck(playerid, 4);
  2724.  
  2725.     new target, amount;
  2726.     if(sscanf(params, "ui", target, amount)) return Usage(playerid, "setwanteds [playerid] [amount]");
  2727.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2728.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  2729.  
  2730.     User[target][wanteds] = amount;
  2731.  
  2732.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  2733.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2734.  
  2735.     new string[144];
  2736.     format(string, sizeof(string), "Admin %s(%i) has setted your wanteds to %i.", GetName(playerid), playerid, amount);
  2737.     SendClientMessage(target, COLOR_YELLOW, string);
  2738.  
  2739.     format(string, sizeof(string), "You have setted %s(%i)'s wanteds to %i.", GetName(target), target, amount);
  2740.     SendClientMessage(playerid, COLOR_YELLOW, string);
  2741.     return 1;
  2742. }
  2743.  
  2744. CMD:setkills(playerid, params[])
  2745. {
  2746.     LevelCheck(playerid, 4);
  2747.  
  2748.     new target, amount;
  2749.     if(sscanf(params, "ui", target, amount)) return Usage(playerid, "setkills [playerid] [amount]");
  2750.  
  2751.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2752.  
  2753.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  2754.  
  2755.     User[target][kills] = amount;
  2756.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  2757.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2758.  
  2759.     new string[144];
  2760.     format(string, sizeof(string), "Admin %s(%i) has setted your kills to %i.", GetName(playerid), playerid, amount);
  2761.     SendClientMessage(target, COLOR_YELLOW, string);
  2762.     format(string, sizeof(string), "You have setted %s(%i)'s kills to %i.", GetName(target), target, amount);
  2763.     SendClientMessage(playerid, COLOR_YELLOW, string);
  2764.     return 1;
  2765. }
  2766.  
  2767. CMD:setdeaths(playerid, params[])
  2768. {
  2769.     LevelCheck(playerid, 4);
  2770.  
  2771.     new target, amount;
  2772.     if(sscanf(params, "ui", target, amount)) return Usage(playerid, "setdeaths [playerid] [amount]");
  2773.  
  2774.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2775.  
  2776.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  2777.  
  2778.     User[target][deaths] = amount;
  2779.    
  2780.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  2781.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2782.  
  2783.     new string[144];
  2784.     format(string, sizeof(string), "Admin %s(%i) has set your deaths to %i.", GetName(playerid), playerid, amount);
  2785.     SendClientMessage(target, COLOR_YELLOW, string);
  2786.     format(string, sizeof(string), "You have set %s(%i)'s deaths to %i.", GetName(target), target, amount);
  2787.     SendClientMessage(playerid, COLOR_YELLOW, string);
  2788.     return 1;
  2789. }
  2790.  
  2791. CMD:giveallscore(playerid, params[])
  2792. {
  2793.     LevelCheck(playerid, 4);
  2794.  
  2795.     new amount;
  2796.     if(sscanf(params, "i", amount)) return Usage(playerid, "giveallscore [amount]");
  2797.  
  2798.     LOOP_PLAYERS(i)
  2799.     {
  2800.         PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0);
  2801.         SetPlayerScore(i, GetPlayerScore(i) + amount);
  2802.     }
  2803.  
  2804.     new string[144];
  2805.     format(string, sizeof(string), "* Admin %s(%i) has given all players %i score.", GetName(playerid), playerid, amount);
  2806.     SendClientMessageToAll(COLOR_BLUE, string);
  2807.     return 1;
  2808. }
  2809.  
  2810. CMD:giveallcash(playerid, params[])
  2811. {
  2812.     LevelCheck(playerid, 4);
  2813.  
  2814.     new amount;
  2815.     if(sscanf(params, "i", amount)) return Usage(playerid, "giveallcash [amount]");
  2816.  
  2817.     LOOP_PLAYERS(i)
  2818.     {
  2819.         PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0);
  2820.         GivePlayerMoney(i, amount);
  2821.     }
  2822.  
  2823.     new string[144];
  2824.     format(string, sizeof(string), "* Admin %s(%i) has given all players $%i.", GetName(playerid), playerid, amount);
  2825.     SendClientMessageToAll(COLOR_BLUE, string);
  2826.     return 1;
  2827. }
  2828.  
  2829. CMD:giveallweapon(playerid, params[])
  2830. {
  2831.     LevelCheck(playerid, 4);
  2832.  
  2833.     new weapon[32], ammo;
  2834.     if(sscanf(params, "s[32]I(250)", weapon, ammo)) return Usage(playerid, "giveallweapon [weapon] [ammo]");
  2835.  
  2836.     new weaponid;
  2837.     if(!IsNumericString(weapon)) weaponid = GetWeaponIDFromName(weapon);
  2838.     else weaponid = strval(weapon);
  2839.  
  2840.     if(!IsValidWeapon(weaponid)) return Error(playerid, "Invalid weapon id.");
  2841.  
  2842.     GetWeaponName(weaponid, weapon, sizeof(weapon));
  2843.     LOOP_PLAYERS(i) GivePlayerWeapon(i, weaponid, ammo) && PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0);
  2844.  
  2845.     new string[144];
  2846.     format(string, sizeof(string), "* Admin %s(%i) has given all players a %s with %i ammo.", GetName(playerid), playerid, weapon, ammo);
  2847.     SendClientMessageToAll(COLOR_BLUE, string);
  2848.     return 1;
  2849. }
  2850.  
  2851. CMD:setalltime(playerid, params[])
  2852. {
  2853.     LevelCheck(playerid, 4);
  2854.  
  2855.     new hour;
  2856.     if(sscanf(params, "i", hour)) return Usage(playerid, "setalltime [hour]");
  2857.  
  2858.     if(hour < 0 || hour > 24) return Error(playerid, "Invalid time hour, must be b/w 0-24.");
  2859.  
  2860.     LOOP_PLAYERS(i)
  2861.     {
  2862.         PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0);
  2863.         SetPlayerTime(i, hour, 0);
  2864.     }
  2865.  
  2866.     new string[144];
  2867.     format(string, sizeof(string), "* Admin %s(%i) has setted all players hour to %i.", GetName(playerid), playerid, hour);
  2868.     SendClientMessageToAll(COLOR_BLUE, string);
  2869.     return 1;
  2870. }
  2871.  
  2872. CMD:setallweather(playerid, params[])
  2873. {
  2874.     LevelCheck(playerid, 4);
  2875.  
  2876.     new weatherid;
  2877.     if(sscanf(params, "i", weatherid)) return Usage(playerid, "setallweather [weatherid]");
  2878.  
  2879.     if(weatherid < 0 || weatherid > 45) return Error(playerid, "Invalid weather id, must be b/w 0-45.");
  2880.  
  2881.     LOOP_PLAYERS(i)
  2882.     {
  2883.         PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0);
  2884.         SetPlayerWeather(i, weatherid);
  2885.     }
  2886.  
  2887.     new string[144];
  2888.     format(string, sizeof(string), "* Admin %s(%i) has setted all players weather to %i.", GetName(playerid), playerid, weatherid);
  2889.     SendClientMessageToAll(COLOR_BLUE, string);
  2890.     return 1;
  2891. }
  2892.  
  2893. // Level 5 Commands
  2894. CMD:fakecmd(playerid, params[])
  2895. {
  2896.     LevelCheck(playerid, 5);
  2897.  
  2898.     new target, cmdtext[45];
  2899.     if(sscanf(params, "us[45]", target, cmdtext)) return Usage(playerid, "fakecmd [playerid] [command]");
  2900.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2901.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  2902.     if(strfind(cmdtext, "/", false) == -1) return Error(playerid, "Fake command is invalid, '/' is missing.");
  2903.  
  2904.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2905.     CallRemoteFunction("OnPlayerCommandText", "is", target, cmdtext);
  2906.  
  2907.     new string[144];
  2908.     format(string, sizeof(string), "[FAKECMD] %s(%i) used %s", GetName(target), target, cmdtext);
  2909.     SendClientMessage(playerid, COLOR_YELLOW, string);
  2910.     return 1;
  2911. }
  2912.  
  2913. CMD:fakechat(playerid, params[])
  2914. {
  2915.     LevelCheck(playerid, 5);
  2916.  
  2917.     new target, text[129];
  2918.     if(sscanf(params, "us[129]", target, text)) return Usage(playerid, "fakechat [playerid] [text]");
  2919.     if(!IsPlayerConnected(target)) return Error(playerid, "The specified player is not conected.");
  2920.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on this player.");
  2921.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2922.  
  2923.     new string[144];
  2924.     format(string, sizeof(string), "%s: {FFFFFF}%s", GetName(target), text);
  2925.     SendClientMessageToAll(GetPlayerColor(target), string);
  2926.  
  2927.     format(string, sizeof(string), "[FAKECHAT] %s(%i) typed %s", GetName(target), target, text);
  2928.     SendClientMessage(playerid, COLOR_YELLOW, string);
  2929.     return 1;
  2930. }
  2931.  
  2932. CMD:removeacc(playerid, params[])
  2933. {
  2934.     LevelCheck(playerid, 5);
  2935.  
  2936.     new name[MAX_PLAYER_NAME], admin, accountID;
  2937.     if(sscanf(params, "s[24]", name)) return Usage(playerid, "removeacc [username]");
  2938.    
  2939.     new handle = SQL::OpenEx(SQL::READ, ""PLAYERS_TABLE"", "username", name);
  2940.     SQL::ReadInt(handle, "level", admin);
  2941.     SQL::ReadInt(handle, "id", accountID);
  2942.     SQL::Close(handle);
  2943.    
  2944.     if(GetLevel(playerid) < admin) return Error(playerid, "You can't use this command on this player.");
  2945.     if(!SQL::RowExistsEx(""PLAYERS_TABLE"", "username", name)) return Error(playerid, "Player doesn't exist in database.");
  2946.     if(!strcmp(GetName(playerid), name, false)) return Error(playerid, "You can't remove your own account.");
  2947.    
  2948.     // If player is online
  2949.     LOOP_PLAYERS(i)
  2950.     {
  2951.         if(!strcmp(name, GetName(i), true))
  2952.         {
  2953.             new string[144];
  2954.             format(string, sizeof(string), "* Admin %s(%i) has removed your account from database.", GetName(playerid), playerid);
  2955.             SendClientMessage(i, COLOR_RED, string);
  2956.             DelayKick(i);
  2957.             break;
  2958.         }
  2959.     }
  2960.    
  2961.     new string2[144];
  2962.     SendClientMessage(playerid, COLOR_YELLOW, "Account removed successfully.");
  2963.     format(string2, sizeof(string2), "Account Name: %s | Account ID: %i", name, accountID);
  2964.     SendClientMessage(playerid, COLOR_YELLOW, string2);
  2965.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2966.    
  2967.     SQL::DeleteRowEx(""PLAYERS_TABLE"", "username", name);
  2968.     return 1;
  2969. }
  2970.  
  2971. CMD:setlevel(playerid, params[])
  2972. {
  2973.     LevelCheck(playerid, 5);
  2974.    
  2975.     new target, alevel;
  2976.     if(sscanf(params, "ui", target, alevel)) return Usage(playerid, "setlevel [playerid] [level]");
  2977.     if(!IsPlayerConnected(target)) return Error(playerid, "Player is not connected");
  2978.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on a higher admin");
  2979.     if(alevel < 0 || alevel > MAX_ADMIN_LEVELS) return Error(playerid, "Invalid level (0-"#MAX_ADMIN_LEVELS")");
  2980.     if(alevel == GetLevel(target)) return Error(playerid, "Player is already on this level");
  2981.  
  2982.     new string[144];
  2983.     format(string, sizeof(string), "* %s(%i) has setted your admin level to %i.", GetName(playerid), playerid, alevel);
  2984.     SendClientMessage(target, COLOR_RED, string);
  2985.    
  2986.     format(string, sizeof(string), "* %s(%i)'s admin level has been set to %i.", GetName(target), target, alevel);
  2987.     SendClientMessage(playerid, COLOR_RED, string);
  2988.    
  2989.     #if defined SAVE_LOGS
  2990.         SaveLog("staff.txt", string);
  2991.     #endif
  2992.        
  2993.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  2994.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  2995.  
  2996.     User[target][level] = alevel;
  2997.     return 1;
  2998. }
  2999.  
  3000. CMD:setvip(playerid, params[])
  3001. {
  3002.     LevelCheck(playerid, 5);
  3003.  
  3004.     new target, vlevel;
  3005.     if(sscanf(params, "ui", target, vlevel)) return Usage(playerid, "setvip [playerid] [level]");
  3006.     if(!IsPlayerConnected(target)) return Error(playerid, "Player is not connected");
  3007.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on a higher admin");
  3008.     if(vlevel < 0 || vlevel > MAX_VIP_LEVELS) return Error(playerid, "Invalid level (0-"#MAX_VIP_LEVELS")");
  3009.     if(vlevel == User[target][vip]) return Error(playerid, "Player is already on this level");
  3010.  
  3011.     new string[144];
  3012.     format(string, sizeof(string), "* %s(%i) has setted your VIP level to %i.", GetName(playerid), playerid, vlevel);
  3013.     SendClientMessage(target, COLOR_RED, string);
  3014.    
  3015.     format(string, sizeof(string), "* %s(%i)'s VIP level has been set to %i.", GetName(target), target, vlevel);
  3016.     SendClientMessage(playerid, COLOR_RED, string);
  3017.    
  3018.     #if defined SAVE_LOGS
  3019.         SaveLog("staff.txt", string);
  3020.     #endif
  3021.  
  3022.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  3023.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  3024.  
  3025.     User[target][vip] = vlevel;
  3026.     return 1;
  3027. }
  3028.  
  3029. CMD:sethelper(playerid, params[])
  3030. {
  3031.     LevelCheck(playerid, 5);
  3032.  
  3033.     new target, hlevel;
  3034.     if(sscanf(params, "ui", target, hlevel)) return Usage(playerid, "sethelper [playerid] [0/1]");
  3035.     if(!IsPlayerConnected(target)) return Error(playerid, "Player is not connected");
  3036.     if(GetLevel(playerid) < GetLevel(target)) return Error(playerid, "You can't use this command on a higher admin");
  3037.     if(hlevel < 0 || hlevel > 1) return Error(playerid, "Invalid level (0-1)");
  3038.     if(hlevel == User[target][helper]) return Error(playerid, "Player is already on this level");
  3039.  
  3040.     new string[144];
  3041.     format(string, sizeof(string), "* %s(%i) has setted your helper level to %i.", GetName(playerid), playerid, hlevel);
  3042.     SendClientMessage(target, COLOR_RED, string);
  3043.    
  3044.     format(string, sizeof(string), "* %s(%i)'s helper level has been set to %i.", GetName(target), target, hlevel);
  3045.     SendClientMessage(playerid, COLOR_RED, string);
  3046.    
  3047.     #if defined SAVE_LOGS
  3048.         SaveLog("staff.txt", string);
  3049.     #endif
  3050.  
  3051.     PlayerPlaySound(target, 1057, 0.0, 0.0, 0.0);
  3052.     PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  3053.  
  3054.     User[target][helper] = hlevel;
  3055.     return 1;
  3056. }
  3057.  
  3058. CMD:gmx(playerid, params[])
  3059. {
  3060.     LevelCheck(playerid, 5);
  3061.  
  3062.     new time;
  3063.     if(sscanf(params, "I", time)) return Usage(playerid, "gmx [seconds]");
  3064.     if(time < 0 || time > 5*60) return Error(playerid, "Invalid restart time (0 - 360 seconds).");
  3065.     if(time > 0)
  3066.     {
  3067.         new string[144];
  3068.         format(string, sizeof(string), "* Admin %s(%i) has setted the server to restart in %i seconds.", GetName(playerid), playerid, time);
  3069.         SendClientMessageToAll(COLOR_YELLOW, string);
  3070.        
  3071.         SetTimer("GMXTimer", 1000 * time, false);
  3072.     }
  3073.     else
  3074.     {
  3075.         new string[144];
  3076.         format(string, sizeof(string), "* Admin %s(%i) has setted the server to restart.", GetName(playerid), playerid);
  3077.         SendClientMessageToAll(COLOR_YELLOW, string);
  3078.  
  3079.         SendRconCommand("gmx");
  3080.     }
  3081.     return 1;
  3082. }
  3083.  
  3084. //=================================================
  3085.  
  3086. GetName(playerid)
  3087. {
  3088.     new name[24];
  3089.     GetPlayerName(playerid, name, sizeof(name));
  3090.     return name;
  3091. }
  3092.  
  3093. //=================================================
  3094.  
  3095. GetIP(playerid)
  3096. {
  3097.     new p_ip[18];
  3098.     GetPlayerIp(playerid, p_ip, sizeof(p_ip));
  3099.     return p_ip;
  3100. }
  3101.  
  3102. //=================================================
  3103.  
  3104. _TogglePlayerSpectating(playerid, set)
  3105. {
  3106.     if(set)
  3107.     {
  3108.         if(GetPlayerState(playerid) != PLAYER_STATE_SPECTATING)
  3109.         {
  3110.             TogglePlayerSpectating(playerid, true);
  3111.         }
  3112.     }
  3113.     else
  3114.     {
  3115.         if(GetPlayerState(playerid) == PLAYER_STATE_SPECTATING)
  3116.         {
  3117.             TogglePlayerSpectating(playerid, false);
  3118.         }
  3119.     }
  3120. }
  3121. #if defined _ALS_TogglePlayerSpectating
  3122.     #undef TogglePlayerSpectating
  3123. #else
  3124.     #define _ALS_TogglePlayerSpectating
  3125. #endif
  3126. #define TogglePlayerSpectating _TogglePlayerSpectating
  3127.  
  3128. //=================================================
  3129.  
  3130. ConvertTime(time)
  3131. {
  3132.     new string[68];
  3133.     new values[6];
  3134.     TimestampToDate(time, values[0], values[1], values[2], values[3], values[4], values[5], 0, 0);
  3135.     format(string, sizeof(string), "%i.%i.%i (%i hrs %i mins %i secs)", values[0], values[1], values[2], values[3], values[4], values[5]);
  3136.     return string;
  3137. }
  3138.  
  3139. //=================================================
  3140.  
  3141. SendClientMessageToAdmins(color, message[])
  3142. {
  3143.     LOOP_PLAYERS(i)
  3144.     {
  3145.         if(User[i][level] >= 1)
  3146.         {
  3147.             SendClientMessage(i, color, message);
  3148.         }
  3149.     }
  3150.     return 1;
  3151. }
  3152.  
  3153. /*SendClientMessageToHelpers(color, message[])
  3154. {
  3155.     LOOP_PLAYERS(i)
  3156.     {
  3157.         if(User[i][helper] >= 1)
  3158.         {
  3159.             SendClientMessage(i, color, message);
  3160.         }
  3161.     }
  3162.     return 1;
  3163. }
  3164.  
  3165. SendClientMessageToVips(color, message[])
  3166. {
  3167.     LOOP_PLAYERS(i)
  3168.     {
  3169.         if(User[i][vip] >= 1)
  3170.         {
  3171.             SendClientMessage(i, color, message);
  3172.         }
  3173.     }
  3174.     return 1;
  3175. }*/
  3176.  
  3177. //=================================================
  3178.  
  3179. DelayKick(playerid) return SetTimerEx("OnPlayerKicked", (10 + GetPlayerPing(playerid)), false, "i", playerid);
  3180. forward OnPlayerKicked(playerid);
  3181. public OnPlayerKicked(playerid) return Kick(playerid);
  3182.  
  3183. //=================================================
  3184.  
  3185. forward GMXTimer();
  3186. public GMXTimer()
  3187. {
  3188.     SendRconCommand("gmx");
  3189.     return 1;
  3190. }
  3191.  
  3192. //=================================================
  3193.  
  3194. IsPlayerHelper(playerid)
  3195. {
  3196.     if(User[playerid][helper] > 0 || IsPlayerAdmin(playerid)) return true;
  3197.     return false;
  3198. }
  3199.  
  3200. //=================================================
  3201.  
  3202. GetLevel(playerid)
  3203. {
  3204.     return User[playerid][level];
  3205. }
  3206.  
  3207. //=================================================
  3208.  
  3209. IsPlayerAdminEx(playerid)
  3210. {
  3211.     if(User[playerid][level] > 0 || IsPlayerAdmin(playerid)) return true;
  3212.     return false;
  3213. }
  3214.  
  3215. //=================================================
  3216.  
  3217. GetPlayerWarns(playerid)
  3218. {
  3219.     return User[playerid][warns];
  3220. }
  3221.  
  3222. //=================================================
  3223.  
  3224. GetVipLevel(playerid)
  3225. {
  3226.     return User[playerid][vip];
  3227. }
  3228.  
  3229. //=================================================
  3230.  
  3231. IsPlayerVip(playerid)
  3232. {
  3233.     if(User[playerid][vip] > 0) return true;
  3234.     return false;
  3235. }
  3236.  
  3237. //=================================================
  3238.  
  3239. GetVehicleModelIDFromName(vname[])
  3240. {
  3241.     for(new i = 0; i < 211; i++)
  3242.     {
  3243.         if(strfind(sbVehicles[i], vname, true) != -1 )
  3244.         return i + 400;
  3245.     }
  3246.     return -1;
  3247. }
  3248.  
  3249. //=================================================
  3250.  
  3251. IsNumericString(str[])
  3252. {
  3253.     new ch, i;
  3254.     while ((ch = str[i++])) if (!('0' <= ch <= '9')) return false;
  3255.     return true;
  3256. }
  3257.  
  3258. //=================================================
  3259.  
  3260. stock IsNumeric(const string[])
  3261. {
  3262.     return !sscanf(string, "{d}");
  3263. }
  3264.  
  3265. //=================================================
  3266.  
  3267. IsPlayerMuted(playerid)
  3268. {
  3269.     if(User[playerid][mutedsec] > 0) return true;
  3270.     return false;
  3271. }
  3272.  
  3273. //=================================================
  3274.  
  3275. IsPlayerCMDMuted(playerid)
  3276. {
  3277.     if(User[playerid][cmdmutedsec] > 0) return true;
  3278.     return false;
  3279. }
  3280.  
  3281. //=================================================
  3282.  
  3283. IsPlayerJailed(playerid)
  3284. {
  3285.     if(User[playerid][jailed] == 1) return true;
  3286.     return false;
  3287. }
  3288.  
  3289. //=================================================
  3290.  
  3291. SetPlayerSpectating(playerid, targetid)
  3292. {
  3293.     TogglePlayerSpectating(playerid, true);
  3294.  
  3295.     if(GetPlayerInterior(playerid) != GetPlayerInterior(targetid))
  3296.     {
  3297.         SetPlayerInterior(playerid, GetPlayerInterior(targetid));
  3298.     }
  3299.     if(GetPlayerVirtualWorld(playerid) != GetPlayerVirtualWorld(targetid))
  3300.     {
  3301.         SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(targetid));
  3302.     }
  3303.  
  3304.     if(IsPlayerInAnyVehicle(targetid))
  3305.     {
  3306.         PlayerSpectateVehicle(playerid, GetPlayerVehicleID(targetid));
  3307.     }
  3308.     else
  3309.     {
  3310.         PlayerSpectatePlayer(playerid, targetid);
  3311.     }
  3312.  
  3313.     new string[144];
  3314.     format(string, sizeof(string),"-> You are now spectating %s(%i).", GetName(targetid), targetid);
  3315.     SendClientMessage(playerid, COLOR_YELLOW, string);
  3316.  
  3317.     User[playerid][spec] = true;
  3318.     User[playerid][specid] = targetid;
  3319.     return true;
  3320. }
  3321.  
  3322. //=================================================
  3323.  
  3324. UpdatePlayerSpectating(playerid, type = 0, bool:forcestop = false)
  3325. {
  3326.     switch(type)
  3327.     {
  3328.         case 0:
  3329.         {
  3330.             new check = 0;
  3331.             LOOP_PLAYERS(i)
  3332.             {
  3333.                 if(i < User[i][specid]) i = (User[playerid][specid] + 1);
  3334.                 if(i > GetPlayerPoolSize()) i = 0, check += 1;
  3335.  
  3336.                 if(check > 1) break;
  3337.  
  3338.                 if(IsPlayerSpawned(i))
  3339.                 {
  3340.                     if(i != playerid)
  3341.                     {
  3342.                         if(!IsPlayerSpectating(i))
  3343.                         {
  3344.                             SetPlayerSpectating(playerid, i);
  3345.                             break;
  3346.                         }
  3347.                     }
  3348.                 }
  3349.             }
  3350.  
  3351.             if(forcestop)
  3352.             {
  3353.                 cmd_specoff(playerid, "");
  3354.                 Error(playerid, "There was no player to spectate further.");
  3355.             }
  3356.             else
  3357.             {
  3358.                 SetPlayerSpectating(playerid, User[playerid][specid]);
  3359.             }
  3360.         }
  3361.         case 1:
  3362.         {
  3363.             new check = 0;
  3364.             LOOP_PLAYERS(i)
  3365.             {
  3366.                 if(i > User[i][specid]) i = (User[playerid][specid] - 1);
  3367.                 if(i < 0) i = GetPlayerPoolSize(), check += 1;
  3368.  
  3369.                 if(check > 1) break;
  3370.  
  3371.                 if(IsPlayerSpawned(i))
  3372.                 {
  3373.                     if(i != playerid)
  3374.                     {
  3375.                         if(! IsPlayerSpectating(i))
  3376.                         {
  3377.                             SetPlayerSpectating(playerid, i);
  3378.                             break;
  3379.                         }
  3380.                     }
  3381.                 }
  3382.             }
  3383.  
  3384.             if(forcestop)
  3385.             {
  3386.                 cmd_specoff(playerid, "");
  3387.                 Error(playerid, "There was no player to spectate back.");
  3388.             }
  3389.             else
  3390.             {
  3391.                 SetPlayerSpectating(playerid, User[playerid][specid]);
  3392.             }
  3393.         }
  3394.         case 2:
  3395.         {
  3396.             if(GetPlayerInterior(playerid) != GetPlayerInterior(User[playerid][specid]))
  3397.             {
  3398.                 SetPlayerInterior(playerid, GetPlayerInterior(User[playerid][specid]));
  3399.             }
  3400.             if(GetPlayerVirtualWorld(playerid) != GetPlayerVirtualWorld(User[playerid][specid]))
  3401.             {
  3402.                 SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(User[playerid][specid]));
  3403.             }
  3404.  
  3405.             if(IsPlayerInAnyVehicle(User[playerid][specid]))
  3406.             {
  3407.                 PlayerSpectateVehicle(playerid, GetPlayerVehicleID(User[playerid][specid]));
  3408.             }
  3409.             else
  3410.             {
  3411.                 PlayerSpectatePlayer(playerid, User[playerid][specid]);
  3412.             }
  3413.         }
  3414.     }
  3415.     return true;
  3416. }
  3417.  
  3418. //=================================================
  3419.  
  3420. IsPlayerSpectating(playerid)
  3421. {
  3422.     if(GetPlayerState(playerid) == PLAYER_STATE_SPECTATING) return true;
  3423.     return false;
  3424. }
  3425.  
  3426. //=================================================
  3427.  
  3428. IsPlayerSpawned(playerid)
  3429. {
  3430.     switch(GetPlayerState(playerid))
  3431.     {
  3432.         case PLAYER_STATE_ONFOOT, PLAYER_STATE_DRIVER, PLAYER_STATE_PASSENGER, PLAYER_STATE_SPAWNED: return true;
  3433.         default: return false;
  3434.     }
  3435.     return false;
  3436. }
  3437.  
  3438. //=================================================
  3439.  
  3440. RemoveAVeh(vehicleid)
  3441. {
  3442.     LOOP_PLAYERS(i)
  3443.     {
  3444.         new Float:X, Float:Y, Float:Z;
  3445.         if(IsPlayerInVehicle(i, vehicleid))
  3446.         {
  3447.             RemovePlayerFromVehicle(i);
  3448.             GetPlayerPos(i, X, Y, Z);
  3449.             SetPlayerPos(i, X, Y+3, Z);
  3450.         }
  3451.         SetVehicleParamsForPlayer(vehicleid, i, 0, 1);
  3452.     }
  3453.     SetTimerEx("OnVehicleRespawned", 1000, 0, "i", vehicleid);
  3454. }
  3455.  
  3456. //=================================================
  3457.  
  3458. forward OnVehicleRespawned(vehicleid);
  3459. public OnVehicleRespawned(vehicleid) return DestroyVehicle(vehicleid);
  3460.  
  3461. //=================================================
  3462.  
  3463. forward OnPlayerUpdater(playerid);
  3464. public OnPlayerUpdater(playerid)
  3465. {
  3466.     new string[244];
  3467.     // Mute System
  3468.     if(IsPlayerMuted(playerid))
  3469.     {
  3470.         User[playerid][mutedsec] --;
  3471.     }
  3472.    
  3473.     // CMD Mute System
  3474.     if(IsPlayerCMDMuted(playerid))
  3475.     {
  3476.         User[playerid][cmdmutedsec] --;
  3477.     }
  3478.    
  3479.     // Jail system
  3480.     if(IsPlayerJailed(playerid))
  3481.     {
  3482.    
  3483.         if(User[playerid][jailedsec] >= 1)
  3484.         {
  3485.             User[playerid][jailedsec] --;
  3486.         }
  3487.         else if(User[playerid][jailedsec] <= 0)
  3488.         {
  3489.             UnJailPlayer(playerid);
  3490.         }
  3491.     }
  3492.     #if defined SPECTATE_TEXTDRAW
  3493.         if(User[playerid][spec])
  3494.         {
  3495.             if(IsPlayerConnected(User[playerid][specid]))
  3496.             {
  3497.                 new target = User[playerid][specid];
  3498.                 new arg_s[96], Float:arg_f, Float:arg_speed[3], arg_weaps[13][2];
  3499.                 strcat(string, "~r~Username: ");
  3500.                 strcat(string, "~w~");
  3501.                 strcat(string, GetName(target));
  3502.                 strcat(string, " (");
  3503.                 format(arg_s, sizeof(arg_s), "%i", target);
  3504.                 strcat(string, arg_s);
  3505.                 strcat(string, ")");
  3506.                 strcat(string, "~n~");
  3507.                 strcat(string, "~r~Health: ");
  3508.                 strcat(string, "~w~");
  3509.                 GetPlayerHealth(target, arg_f);
  3510.                 format(arg_s, sizeof(arg_s), "%0.2f", arg_f);
  3511.                 strcat(string, arg_s);
  3512.                 strcat(string, "~n~");
  3513.                 strcat(string, "~r~Armour: ");
  3514.                 strcat(string, "~w~");
  3515.                 GetPlayerArmour(target, arg_f);
  3516.                 format(arg_s, sizeof(arg_s), "%0.2f", arg_f);
  3517.                 strcat(string, arg_s);
  3518.                 strcat(string, "~n~");
  3519.                 strcat(string, "~r~Ping: ");
  3520.                 strcat(string, "~w~");
  3521.                 format(arg_s, sizeof(arg_s), "%i", GetPlayerPing(target));
  3522.                 strcat(string, arg_s);
  3523.                 strcat(string, "~n~");
  3524.                 strcat(string, "~r~IP.: ");
  3525.                 strcat(string, "~w~");
  3526.                 strcat(string, GetIP(target));
  3527.                 strcat(string, "~n~");
  3528.                 strcat(string, "~r~Skinid: ");
  3529.                 strcat(string, "~w~");
  3530.                 format(arg_s, sizeof(arg_s), "%i", GetPlayerSkin(target));
  3531.                 strcat(string, arg_s);
  3532.                 strcat(string, "~n~");
  3533.                 strcat(string, "~r~Teamid: ");
  3534.                 strcat(string, "~w~");
  3535.                 format(arg_s, sizeof(arg_s), "%i", GetPlayerTeam(target));
  3536.                 strcat(string, arg_s);
  3537.                 strcat(string, "~n~");
  3538.                 strcat(string, "~r~Money: ");
  3539.                 strcat(string, "~w~");
  3540.                 format(arg_s, sizeof(arg_s), "~g~$~w~%i", GetPlayerMoney(target));
  3541.                 strcat(string, arg_s);
  3542.                 strcat(string, "~n~");
  3543.                 strcat(string, "~r~Score: ");
  3544.                 strcat(string, "~w~");
  3545.                 format(arg_s, sizeof(arg_s), "%i", GetPlayerScore(target));
  3546.                 strcat(string, arg_s);
  3547.                 strcat(string, "~n~");
  3548.                 strcat(string, "~r~Camera target player: ");
  3549.                 strcat(string, "~w~");
  3550.                 if(GetPlayerCameraTargetPlayer(target) != INVALID_PLAYER_ID)
  3551.                 {
  3552.                     strcat(string, GetName(GetPlayerCameraTargetPlayer(target)));
  3553.                     strcat(string, " (");
  3554.                     format(arg_s, sizeof(arg_s), "%i", GetPlayerScore(target));
  3555.                     strcat(string, arg_s);
  3556.                     strcat(string, ")");
  3557.                 }
  3558.                 else
  3559.                 {
  3560.                     strcat(string, "No Player");
  3561.                 }
  3562.                 strcat(string, "~n~");
  3563.                 strcat(string, "~r~Weapon target player: ");
  3564.                 strcat(string, "~w~");
  3565.                 if(GetPlayerTargetPlayer(target) != INVALID_PLAYER_ID)
  3566.                 {
  3567.                     strcat(string, GetName(GetPlayerTargetPlayer(target)));
  3568.                     strcat(string, " (");
  3569.                     format(arg_s, sizeof(arg_s), "%i", GetPlayerScore(target));
  3570.                     strcat(string, arg_s);
  3571.                     strcat(string, ")");
  3572.                 }
  3573.                 else
  3574.                 {
  3575.                     strcat(string, "No Player");
  3576.                 }
  3577.                 strcat(string, "~n~");
  3578.                 strcat(string, "~r~Speed: ");
  3579.                 strcat(string, "~w~");
  3580.                 if(!IsPlayerInAnyVehicle(playerid))
  3581.                 {
  3582.                     GetPlayerVelocity(target, arg_speed[0], arg_speed[1], arg_speed[2]);
  3583.                     arg_f = floatsqroot((arg_speed[0] * arg_speed[0]) + (arg_speed[1] * arg_speed[1]) + (arg_speed[2] * arg_speed[2])) * 179.28625;
  3584.                     format(arg_s, sizeof(arg_s), "%0.2f MPH", arg_f);
  3585.                     strcat(string, arg_s);
  3586.                 }
  3587.                 else
  3588.                 {
  3589.                     strcat(string, "0.0 MPH");
  3590.                 }
  3591.                 strcat(string, "~n~");
  3592.                 strcat(string, "~r~Vehicle Speed: ");
  3593.                 strcat(string, "~w~");
  3594.                 if(IsPlayerInAnyVehicle(playerid))
  3595.                 {
  3596.                     GetVehicleVelocity(GetPlayerVehicleID(target), arg_speed[0], arg_speed[1], arg_speed[2]);
  3597.                     arg_f = floatsqroot((arg_speed[0] * arg_speed[0]) + (arg_speed[1] * arg_speed[1]) + (arg_speed[2] * arg_speed[2])) * 179.28625;
  3598.                     format(arg_s, sizeof(arg_s), "%0.2f MPH", arg_f);
  3599.                     strcat(string, arg_s);
  3600.                 }
  3601.                 else
  3602.                 {
  3603.                     strcat(string, "0.0 MPH");
  3604.                 }
  3605.                 strcat(string, "~n~");
  3606.                 strcat(string, "~r~Position: ");
  3607.                 strcat(string, "~w~");
  3608.                 GetPlayerPos(playerid, arg_speed[0], arg_speed[1], arg_speed[2]);
  3609.                 format(arg_s, sizeof(arg_s), "%f, %f, %f", arg_speed[0], arg_speed[1], arg_speed[2]);
  3610.                 strcat(string, arg_s);
  3611.                 strcat(string, "~n~");
  3612.                 strcat(string, "~r~~h~Weapons:");
  3613.                 strcat(string, "~w~");
  3614.                 new count = 0;
  3615.                 for(new i; i < 13; i++)
  3616.                 {
  3617.                     GetPlayerWeaponData(target, i, arg_weaps[i][0], arg_weaps[i][1]);
  3618.                     if(arg_weaps[i][0] != 0)
  3619.                     {
  3620.                         count += 1;
  3621.  
  3622.                         strcat(string, "~n~");
  3623.                         format(arg_s, sizeof(arg_s), "%i. ", count);
  3624.                         strcat(string, arg_s);
  3625.                         GetWeaponName(arg_weaps[i][0], arg_s, sizeof(arg_s));
  3626.                         strcat(string, arg_s);
  3627.                         strcat(string, " [Ammo: ");
  3628.                         format(arg_s, sizeof(arg_s), "%i", arg_weaps[i][1]);
  3629.                         strcat(string, arg_s);
  3630.                         strcat(string, "]");
  3631.                     }
  3632.                 }
  3633.                 strcat(string, "~n~");
  3634.                 strcat(string, "~n~");
  3635.                 strcat(string, "~r~You can use LCTRL (KEY_ACTION) and RCTRL (KEY_FIRE) to switch players");
  3636.                 strcat(string, "~n~");
  3637.                 strcat(string, "~r~You can use MMB (KEY_LOOK_BEHIND) or /specoff to stop spectating");
  3638.  
  3639.                 PlayerTextDrawSetString(playerid, User[playerid][specTD], string);
  3640.             }
  3641.         }
  3642.     #endif
  3643.     return 1;
  3644. }
  3645.  
  3646. //=================================================
  3647.  
  3648. forward hideAnnouncement();
  3649. public hideAnnouncement()
  3650. {
  3651.     TextDrawHideForAll(announceTD);
  3652.     return 1;
  3653. }
  3654.  
  3655. //=================================================
  3656.  
  3657. JailPlayer(playerid)
  3658. {
  3659.     LoadObjects(playerid);
  3660.  
  3661.     SetCameraBehindPlayer(playerid);
  3662.     SetPlayerPos(playerid, 1770.14, -1564.66, 1738.69);
  3663.     SetPlayerFacingAngle(playerid, 180);
  3664.     SetPlayerInterior(playerid, 3);
  3665.    
  3666.     Server(playerid, "You have been placed on jail.");
  3667.     return 1;
  3668. }
  3669.  
  3670. //=================================================
  3671.  
  3672. UnJailPlayer(playerid)
  3673. {
  3674.     User[playerid][jailed] = 0;
  3675.     SpawnPlayer(playerid);
  3676.     SetPlayerInterior(playerid, 0);
  3677.  
  3678.     Server(playerid, "You have been released from jail.");
  3679.     return 1;
  3680. }
  3681.  
  3682. //=================================================
  3683.  
  3684. LoadObjects(playerid)
  3685. {
  3686.     SetTimerEx("ObjectsLoaded", 2000, false, "i", playerid);
  3687.     TogglePlayerControllable(playerid, false);
  3688.     GameTextForPlayer(playerid, "~w~Objects ~r~Loading", 1000, 5);
  3689.     return 1;
  3690. }
  3691.  
  3692. //=================================================
  3693.  
  3694. forward ObjectsLoaded(playerid);
  3695. public ObjectsLoaded(playerid)
  3696. {
  3697.     TogglePlayerControllable(playerid, true);
  3698.     GameTextForPlayer(playerid, "~w~Objects ~g~Loaded", 4000,5);
  3699.     return 1;
  3700. }
  3701.  
  3702. //=================================================
  3703.  
  3704. GetPlayerConnectedTime(playerid, &hours, &minutes, &seconds)
  3705. {
  3706.     new connected_time = NetStats_GetConnectedTime(playerid);
  3707.     new CurrentTime[3];
  3708.  
  3709.     CurrentTime[2] = (connected_time / 1000) % 60;
  3710.     CurrentTime[1] = (connected_time / (1000 * 60)) % 60;
  3711.     CurrentTime[0] = (connected_time / (1000 * 60 * 60));
  3712.  
  3713.     new SavedTime[3];
  3714.     SavedTime[2] = SQL::GetIntEntry(""PLAYERS_TABLE"", "seconds", "id", User[playerid][id]);
  3715.     SavedTime[1] = SQL::GetIntEntry(""PLAYERS_TABLE"", "minutes", "id", User[playerid][id]);
  3716.     SavedTime[0] = SQL::GetIntEntry(""PLAYERS_TABLE"", "hours", "id", User[playerid][id]);
  3717.  
  3718.     new TotalTime[3];
  3719.     TotalTime[2] = CurrentTime[2] + SavedTime[2];
  3720.     TotalTime[1] = CurrentTime[1] + SavedTime[1];
  3721.     TotalTime[0] = CurrentTime[0] + SavedTime[0];
  3722.     if (TotalTime[2] >= 60)
  3723.     {
  3724.         TotalTime[2] = 0;
  3725.         TotalTime[1]++;
  3726.  
  3727.         if (TotalTime[1] >= 60)
  3728.         {
  3729.             TotalTime[1] = 0;
  3730.             TotalTime[2]++;
  3731.         }
  3732.     }
  3733.    
  3734.     seconds = TotalTime[2];
  3735.     minutes = TotalTime[1];
  3736.     hours = TotalTime[0];
  3737.     return true;
  3738. }
  3739.  
  3740. //=================================================
  3741.  
  3742. GetWeaponIDFromName(WeaponName[])
  3743. {
  3744.     if(strfind("molotov", WeaponName, true) != -1) return 18;
  3745.     for(new i = 0; i <= 46; i++)
  3746.     {
  3747.         switch(i)
  3748.         {
  3749.             case 0,19,20,21,44,45: continue;
  3750.             default:
  3751.             {
  3752.                 new name[32];
  3753.                 GetWeaponName(i,name,32);
  3754.                 if(strfind(name,WeaponName,true) != -1) return i;
  3755.             }
  3756.         }
  3757.     }
  3758.     return -1;
  3759. }
  3760.  
  3761. //=================================================
  3762.  
  3763. #if defined SAVE_LOGS
  3764.     forward SaveLog(filename[], text[]);
  3765.     public SaveLog(filename[], text[])
  3766.     {
  3767.         new string[256];
  3768.  
  3769.         if(!fexist(LOGFILE))
  3770.         {
  3771.             printf("[sbAdmin]: Unable to overwrite '%s' at the '%s', '%s' missing.", filename, LOGFILE, LOGFILE);
  3772.             print("No logs has been saved to your server database.");
  3773.  
  3774.             format(string, sizeof string, "[sbAdmin]: Attempting to overwrite '%s' at the '%s' which is missing.", filename, LOGFILE);
  3775.             SendClientMessageToAdmins(COLOR_RED, string);
  3776.             SendClientMessageToAdmins(-1, "[sbAdmin]: Logs will not be saved, contact an "LEVEL5"");
  3777.             return 0;
  3778.         }
  3779.  
  3780.         new File:file,
  3781.             filepath[128+40]
  3782.         ;
  3783.  
  3784.         new year, month, day;
  3785.         new hour, minute, second;
  3786.  
  3787.         getdate(year, month, day);
  3788.         gettime(hour, minute, second);
  3789.         format(filepath, sizeof(filepath), ""LOGFILE"%s", filename);
  3790.         file = fopen(filepath, io_append);
  3791.         format(string, sizeof(string),"[%02d/%02d/%02d | %02d:%02d:%02d] %s\r\n", month, day, year, hour, minute, second, text);
  3792.         fwrite(file, string);
  3793.         fclose(file);
  3794.         return 1;
  3795.     }
  3796. #endif
  3797.  
  3798. //=================================================
  3799.  
  3800. BuildTextdraws()
  3801. {
  3802.     announceTD = TextDrawCreate(320.000000, 140.000000, "");
  3803.     TextDrawAlignment(announceTD, 2);
  3804.     TextDrawBackgroundColor(announceTD, 1055);
  3805.     TextDrawFont(announceTD, 1);
  3806.     TextDrawLetterSize(announceTD, 0.329999, 1.500002);
  3807.     TextDrawColor(announceTD, -1);
  3808.     TextDrawSetOutline(announceTD, 1);
  3809.     TextDrawSetProportional(announceTD, 1);
  3810.     TextDrawSetSelectable(announceTD, 0);
  3811.     return 1;
  3812. }
  3813.  
  3814. //=================================================
  3815.  
  3816. // Special thanks to SickAttack
  3817. #if defined USE_ANTIADVERT
  3818.     IsAdvertisement(text[])
  3819.     {
  3820.         new message[128], extract[2], element[4][4], count_1, count_2, temp, bool:number_next = false, bool:next_number = false, bool:advert = false;
  3821.         strcpy(message, text, sizeof(message));
  3822.  
  3823.         for(new i = 0, j = strlen(message); i < j; i ++)
  3824.         {
  3825.             switch(message[i])
  3826.             {
  3827.                 case '0'..'9':
  3828.                 {
  3829.                     if(next_number) continue;
  3830.  
  3831.                     number_next = false;
  3832.  
  3833.                     strmid(extract, message[i], 0, 1);
  3834.                     strcat(element[count_1], extract);
  3835.                     count_2 ++;
  3836.  
  3837.                     if(count_2 == 3 || message[i + 1] == EOS)
  3838.                     {
  3839.                         strmid(extract, message[i + 1], 0, 1);
  3840.                         if(IsNumeric(extract))
  3841.                         {
  3842.                             element[0][0] = EOS;
  3843.                             element[1][0] = EOS;
  3844.                             element[2][0] = EOS;
  3845.                             element[3][0] = EOS;
  3846.                             count_1 = 0;
  3847.                             count_2 = 0;
  3848.                             next_number = true;
  3849.                             continue;
  3850.                         }
  3851.  
  3852.                         temp = strval(element[count_1]);
  3853.  
  3854.                         if(count_1 == 0)
  3855.                         {
  3856.                             if(temp <= 255)
  3857.                             {
  3858.                                 count_1 ++;
  3859.                                 count_2 = 0;
  3860.                             }
  3861.                             else
  3862.                             {
  3863.                                 element[count_1][0] = EOS;
  3864.                                 count_2 = 0;
  3865.                                 next_number = true;
  3866.                             }
  3867.                         }
  3868.                         else
  3869.                         {
  3870.                             if(temp <= 255)
  3871.                             {
  3872.                                 count_1 ++;
  3873.                                 count_2 = 0;
  3874.                             }
  3875.                             else
  3876.                             {
  3877.                                 element[0][0] = EOS;
  3878.                                 element[1][0] = EOS;
  3879.                                 element[2][0] = EOS;
  3880.                                 element[3][0] = EOS;
  3881.                                 count_1 = 0;
  3882.                                 count_2 = 0;
  3883.                                 next_number = true;
  3884.                             }
  3885.                         }
  3886.                     }
  3887.  
  3888.                     if(count_1 == 4)
  3889.                     {
  3890.                         advert = true;
  3891.                         break;
  3892.                     }
  3893.                 }
  3894.                 default:
  3895.                 {
  3896.                     next_number = false;
  3897.  
  3898.                     if(number_next) continue;
  3899.  
  3900.                     if(!isnull(element[count_1]))
  3901.                     {
  3902.                         temp = strval(element[count_1]);
  3903.  
  3904.                         if(count_1 == 0)
  3905.                         {
  3906.                             if(temp <= 255)
  3907.                             {
  3908.                                 count_1 ++;
  3909.                                 count_2 = 0;
  3910.                                 number_next = true;
  3911.                             }
  3912.                             else
  3913.                             {
  3914.                                 element[count_1][0] = EOS;
  3915.                                 count_2 = 0;
  3916.                             }
  3917.                         }
  3918.                         else
  3919.                         {
  3920.                             if(temp <= 255)
  3921.                             {
  3922.                                 count_1 ++;
  3923.                                 count_2 = 0;
  3924.                                 number_next = true;
  3925.                             }
  3926.                             else
  3927.                             {
  3928.                                 element[0][0] = EOS;
  3929.                                 element[1][0] = EOS;
  3930.                                 element[2][0] = EOS;
  3931.                                 element[3][0] = EOS;
  3932.                                 count_1 = 0;
  3933.                                 count_2 = 0;
  3934.                             }
  3935.                         }
  3936.  
  3937.                         if(count_1 == 4)
  3938.                         {
  3939.                             advert = true;
  3940.                             break;
  3941.                         }
  3942.                     }
  3943.                 }
  3944.             }
  3945.         }
  3946.         return advert;
  3947.     }
  3948. #endif
  3949.  
  3950. //=================================================
  3951.  
  3952. PlaceMaps()
  3953. {
  3954.     CreateDynamicObject(7191,1759.3388672,-1602.4755859,1734.9488525,0.0000000,359.2474365,179.9945068); //
  3955.     CreateDynamicObject(14856,1757.1634521,-1588.1893311,1735.8120117,0.0000000,0.0000000,182.0000000); //
  3956.     CreateDynamicObject(8661,1775.4768066,-1555.7030029,1733.9429932,0.0000000,0.0000000,0.0000000); //
  3957.     CreateDynamicObject(8661,1775.5107422,-1575.5996094,1733.9429932,0.0000000,0.0000000,0.0000000); //
  3958.     CreateDynamicObject(8661,1773.9160156,-1585.5395508,1743.4429932,271.9995117,179.9945068,179.9945068); //
  3959.     CreateDynamicObject(8661,1769.3701172,-1560.2636719,1743.8931885,90.0000000,179.9945068,179.9945068); //
  3960.     CreateDynamicObject(8661,1755.5429688,-1565.8349609,1743.8681641,90.0000000,164.4987183,285.4902954); //
  3961.     CreateDynamicObject(8661,1780.4873047,-1566.7968750,1743.9184570,271.9940186,179.9945068,270.7415771); //
  3962.     CreateDynamicObject(7191,1763.6158447,-1602.3254395,1734.9488525,0.0000000,359.2474365,179.9945068); //
  3963.     CreateDynamicObject(7191,1767.8378906,-1602.2255859,1734.9488525,0.0000000,359.2474365,179.9945068); //
  3964.     CreateDynamicObject(14856,1779.0579834,-1587.5596924,1735.8120117,0.0000000,0.0000000,1.2495117); //
  3965.     CreateDynamicObject(7191,1772.0864258,-1602.0699463,1734.9488525,0.0000000,359.2474365,179.9945068); //
  3966.     CreateDynamicObject(7191,1776.3354492,-1601.9881592,1734.9488525,0.0000000,359.2474365,179.9945068); //
  3967.     CreateDynamicObject(7191,1780.6092529,-1601.9577637,1734.9488525,0.0000000,359.2474365,179.9945068); //
  3968.     CreateDynamicObject(7191,1780.6083984,-1601.9570312,1738.8985596,0.0000000,359.2474365,179.9945068); //
  3969.     CreateDynamicObject(7191,1776.3553467,-1601.9653320,1738.8985596,0.0000000,359.2474365,179.9945068); //
  3970.     CreateDynamicObject(7191,1772.1040039,-1602.0228271,1738.8985596,0.0000000,359.2474365,179.9945068); //
  3971.     CreateDynamicObject(7191,1767.8559570,-1602.2055664,1738.8985596,0.0000000,359.2474365,179.9945068); //
  3972.     CreateDynamicObject(7191,1763.6304932,-1602.2875977,1738.8985596,0.0000000,359.2474365,179.9945068); //
  3973.     CreateDynamicObject(7191,1759.3823242,-1602.4952393,1738.8985596,0.0000000,359.2474365,179.9945068); //
  3974.     CreateDynamicObject(8661,1774.9119873,-1585.8381348,1737.7172852,0.0000000,0.0000000,0.0000000); //
  3975.     CreateDynamicObject(8661,1774.9062500,-1586.2128906,1737.7172852,0.0000000,179.9999390,0.0000000); //
  3976.     CreateDynamicObject(14856,1757.1630859,-1588.1884766,1739.5620117,0.0000000,0.0000000,181.9995117); //
  3977.     CreateDynamicObject(14856,1779.0576172,-1587.5595703,1739.5625000,0.0000000,0.0000000,1.2469482); //
  3978.     CreateDynamicObject(14856,1756.6878662,-1558.7972412,1735.8120117,0.0000000,0.0000000,181.4970093); //
  3979.     CreateDynamicObject(7191,1759.4707031,-1544.4438477,1734.9488525,0.0000000,359.2474365,359.9945068); //
  3980.     CreateDynamicObject(7191,1763.7202148,-1544.3764648,1734.9488525,0.0000000,359.2419434,359.9890137); //
  3981.     CreateDynamicObject(7191,1767.9682617,-1544.2838135,1734.9488525,0.0000000,359.2419434,359.9890137); //
  3982.     CreateDynamicObject(14856,1778.7756348,-1558.3518066,1735.8120117,0.0000000,0.0000000,1.2469482); //
  3983.     CreateDynamicObject(7191,1772.2685547,-1544.3099365,1734.9488525,0.0000000,359.2419434,359.9890137); //
  3984.     CreateDynamicObject(7191,1776.5231934,-1544.2121582,1734.9488525,0.0000000,359.2419434,359.9890137); //
  3985.     CreateDynamicObject(7191,1780.5192871,-1544.1015625,1734.9488525,0.0000000,359.2419434,0.4890137); //
  3986.     CreateDynamicObject(8661,1775.4921875,-1559.5787354,1737.6934814,0.0000000,0.0000000,0.0000000); //
  3987.     CreateDynamicObject(7191,1780.4685059,-1544.1010742,1738.8750000,0.0000000,359.2419434,0.4888916); //
  3988.     CreateDynamicObject(7191,1776.2663574,-1544.2237549,1738.8750000,0.0000000,359.2419434,0.4888916); //
  3989.     CreateDynamicObject(7191,1772.0139160,-1544.3225098,1738.8750000,0.0000000,359.2419434,0.4888916); //
  3990.     CreateDynamicObject(7191,1767.7136230,-1544.3187256,1738.8750000,0.0000000,359.2419434,0.4888916); //
  3991.     CreateDynamicObject(7191,1763.4619141,-1544.3909912,1738.8750000,0.0000000,359.2419434,0.4888916); //
  3992.     CreateDynamicObject(7191,1759.2349854,-1544.4659424,1738.8750000,0.0000000,359.2419434,0.4888916); //
  3993.     CreateDynamicObject(14856,1756.6875000,-1558.7968750,1739.5617676,0.0000000,0.0000000,181.4941406); //
  3994.     CreateDynamicObject(14856,1778.7753906,-1558.3515625,1739.5620117,0.0000000,0.0000000,1.2469482); //
  3995.     CreateDynamicObject(8661,1775.4921875,-1559.5781250,1737.6934814,0.0000000,179.9945068,0.0000000); //
  3996.     CreateDynamicObject(8661,1758.6054688,-1576.8515625,1741.3966064,0.0000000,180.2471924,0.0000000); //
  3997.     CreateDynamicObject(8661,1796.8046875,-1573.7988281,1737.6929932,0.0000000,0.0000000,0.0000000); //
  3998.     CreateDynamicObject(8661,1796.8046875,-1573.7988281,1737.6929932,0.0000000,180.0000000,0.0000000); //
  3999.     CreateDynamicObject(8614,1759.4495850,-1570.4389648,1736.4675293,0.0000000,0.0000000,0.0000000); //
  4000.     CreateDynamicObject(970,1774.7596436,-1569.5825195,1738.2449951,0.0000000,0.0000000,0.0000000); //
  4001.     CreateDynamicObject(970,1770.6550293,-1569.5819092,1738.2449951,0.0000000,0.0000000,0.0000000); //
  4002.     CreateDynamicObject(970,1766.5239258,-1569.5954590,1738.2449951,0.0000000,0.0000000,0.0000000); //
  4003.     CreateDynamicObject(970,1764.4404297,-1569.5966797,1738.2449951,0.0000000,0.0000000,0.0000000); //
  4004.     CreateDynamicObject(970,1760.3516846,-1569.6000977,1738.2449951,0.0000000,0.0000000,0.0000000); //
  4005.     CreateDynamicObject(970,1776.8194580,-1571.7288818,1738.2695312,0.0000000,0.0000000,90.5000000); //
  4006.     CreateDynamicObject(970,1776.8634033,-1573.7910156,1738.2449951,0.0000000,0.0000000,90.4998779); //
  4007.     CreateDynamicObject(970,1774.8477783,-1575.8577881,1738.2449951,0.0000000,0.0000000,180.4998779); //
  4008.     CreateDynamicObject(970,1770.7470703,-1575.8815918,1738.2449951,0.0000000,0.0000000,180.4998779); //
  4009.     CreateDynamicObject(970,1766.6242676,-1575.9301758,1738.2449951,0.0000000,0.0000000,180.4998779); //
  4010.     CreateDynamicObject(970,1762.4991455,-1575.9755859,1738.2449951,0.0000000,0.0000000,180.4998779); //
  4011.     CreateDynamicObject(970,1758.3935547,-1576.0017090,1738.2449951,0.0000000,0.0000000,180.4998779); //
  4012.     CreateDynamicObject(970,1754.2669678,-1576.0084229,1738.2449951,0.0000000,0.0000000,180.4998779); //
  4013.     CreateDynamicObject(970,1753.4927979,-1576.0433350,1738.2449951,0.0000000,0.0000000,180.4998779); //
  4014.     CreateDynamicObject(8661,1757.4633789,-1557.0551758,1741.3966064,0.0000000,180.2471924,0.0000000); //
  4015.     CreateDynamicObject(8661,1761.1757812,-1557.2333984,1741.4466553,0.0000000,359.7418213,0.0000000); //
  4016.     CreateDynamicObject(8661,1760.8068848,-1557.2219238,1741.3715820,0.0000000,180.2416992,0.0000000); //
  4017.     CreateDynamicObject(8661,1758.5277100,-1574.4494629,1741.5217285,0.0000000,0.2471924,0.0000000); //
  4018.     CreateDynamicObject(8661,1763.0654297,-1589.0302734,1741.5217285,0.0000000,0.2471924,0.0000000); //
  4019.     CreateDynamicObject(8661,1761.8243408,-1589.0578613,1741.3966064,0.0000000,180.2471924,0.0000000); //
  4020.     CreateDynamicObject(14387,1780.9128418,-1577.6300049,1740.5070801,0.0000000,0.0000000,92.0000000); //
  4021.     CreateDynamicObject(14387,1780.7963867,-1574.7548828,1738.7320557,0.0000000,0.0000000,91.9995117); //
  4022.     CreateDynamicObject(14387,1780.6972656,-1574.7872314,1738.7320557,0.0000000,113.9999695,269.9996338); //
  4023.     CreateDynamicObject(14387,1780.6909180,-1577.2197266,1740.2563477,0.0000000,113.9996338,269.9945068); //
  4024.     CreateDynamicObject(970,1778.5164795,-1577.0081787,1742.0205078,0.0000000,0.0000000,90.4943848); //
  4025.     CreateDynamicObject(8661,1775.0488281,-1576.2343750,1744.9672852,0.0000000,179.9945068,0.0000000); //
  4026.     CreateDynamicObject(8661,1775.4042969,-1562.4902344,1746.9672852,0.0000000,179.9945068,0.0000000); //
  4027.     CreateDynamicObject(8614,1754.3951416,-1570.4387207,1732.7175293,0.0000000,179.2500000,0.0000000); //
  4028.     CreateDynamicObject(2205,1778.9362793,-1571.5363770,1733.9429932,0.0000000,0.0000000,0.0000000); //
  4029.     CreateDynamicObject(2205,1778.0222168,-1572.8785400,1733.9429932,0.0000000,0.0000000,89.5000000); //
  4030.     CreateDynamicObject(2205,1779.3442383,-1573.8327637,1733.9429932,0.0000000,0.0000000,178.9946289); //
  4031.     CreateDynamicObject(2190,1779.5219727,-1571.4400635,1734.8795166,0.0000000,0.0000000,0.0000000); //
  4032.     CreateDynamicObject(2190,1777.9218750,-1572.6606445,1734.8795166,0.0000000,0.0000000,89.2500000); //
  4033.     CreateDynamicObject(2776,1779.9310303,-1572.2644043,1734.4404297,0.0000000,0.0000000,232.0000000); //
  4034.     CreateDynamicObject(14819,1780.7757568,-1575.8271484,1735.0928955,358.2500305,0.2501221,91.2576599); //
  4035.     CreateDynamicObject(14401,1767.8037109,-1573.5908203,1734.2686768,0.0000000,0.0000000,91.9940186); //
  4036.     CreateDynamicObject(3858,1760.9343262,-1571.0079346,1744.4094238,0.0000000,0.0000000,260.0000000); //
  4037.     CreateDynamicObject(8661,1778.7847900,-1553.5157471,1751.2926025,90.0000000,180.0054932,269.2335205); //
  4038.     CreateDynamicObject(8661,1778.3208008,-1567.1134033,1751.2425537,89.2498169,269.9998169,89.2366333); //
  4039.     CreateDynamicObject(970,1778.4766846,-1572.8826904,1742.0205078,0.0000000,0.0000000,90.9943848); //
  4040.     CreateDynamicObject(3858,1760.9335938,-1571.0078125,1744.4094238,0.0000000,0.0000000,79.9969482); //
  4041.     CreateDynamicObject(3089,1764.1071777,-1568.7672119,1742.8266602,0.0000000,0.0000000,34.0000000); //
  4042.     CreateDynamicObject(2173,1758.0897217,-1572.2486572,1741.5235596,0.0000000,0.0000000,216.0000000); //
  4043.     CreateDynamicObject(2173,1760.3353271,-1570.6602783,1741.5235596,0.0000000,0.0000000,215.9967041); //
  4044.     CreateDynamicObject(2173,1762.6174316,-1569.1575928,1741.5235596,0.0000000,0.0000000,215.2467041); //
  4045.     CreateDynamicObject(2173,1762.4538574,-1570.6696777,1741.5235596,0.0000000,0.0000000,35.4941406); //
  4046.     CreateDynamicObject(2173,1760.2321777,-1572.2497559,1741.5235596,0.0000000,0.0000000,35.4913330); //
  4047.     CreateDynamicObject(2173,1757.9882812,-1573.8432617,1741.5235596,0.0000000,0.0000000,35.4913330); //
  4048.     CreateDynamicObject(1671,1763.5197754,-1571.3277588,1741.9614258,0.0000000,0.0000000,218.0000000); //
  4049.     CreateDynamicObject(1671,1761.2962646,-1572.9020996,1741.9614258,0.0000000,0.0000000,215.4962311); //
  4050.     CreateDynamicObject(1671,1759.0114746,-1574.5195312,1741.9614258,0.0000000,0.0000000,215.4913330); //
  4051.     CreateDynamicObject(1671,1757.0166016,-1571.6016846,1741.9614258,0.0000000,0.0000000,31.4913330); //
  4052.     CreateDynamicObject(1671,1759.2440186,-1569.9787598,1741.9614258,0.0000000,0.0000000,35.4868164); //
  4053.     CreateDynamicObject(1671,1761.5261230,-1568.5364990,1741.9614258,0.0000000,0.0000000,35.4858398); //
  4054.     CreateDynamicObject(2187,1760.5855713,-1570.3542480,1741.5122070,0.0000000,0.0000000,214.0000000); //
  4055.     CreateDynamicObject(2187,1760.5849609,-1570.3535156,1742.2379150,0.0000000,0.0000000,213.9971924); //
  4056.     CreateDynamicObject(2187,1760.8128662,-1569.0754395,1742.2379150,0.0000000,0.0000000,36.4971619); //
  4057.     CreateDynamicObject(2187,1760.8125000,-1569.0751953,1741.4381104,0.0000000,0.0000000,36.4965820); //
  4058.     CreateDynamicObject(2187,1758.2767334,-1571.8021240,1742.2379150,0.0000000,0.0000000,213.9971924); //
  4059.     CreateDynamicObject(2187,1758.2763672,-1571.8017578,1741.4121094,0.0000000,0.0000000,213.9971924); //
  4060.     CreateDynamicObject(2187,1758.5090332,-1570.4970703,1741.4121094,0.0000000,0.0000000,34.2471619); //
  4061.     CreateDynamicObject(2187,1758.5087891,-1570.4970703,1742.2366943,0.0000000,0.0000000,34.2443848); //
  4062.     CreateDynamicObject(2187,1762.1694336,-1571.0229492,1741.5061035,0.0000000,0.0000000,34.0000000); //
  4063.     CreateDynamicObject(2187,1762.1689453,-1571.0224609,1742.2318115,0.0000000,0.0000000,33.9971924); //
  4064.     CreateDynamicObject(2187,1759.9272461,-1572.5755615,1742.2318115,0.0000000,0.0000000,33.9971924); //
  4065.     CreateDynamicObject(2187,1759.9267578,-1572.5751953,1741.4060059,0.0000000,0.0000000,33.9971924); //
  4066.     CreateDynamicObject(2187,1759.6702881,-1573.8476562,1742.2379150,0.0000000,0.0000000,213.9971924); //
  4067.     CreateDynamicObject(2187,1759.6699219,-1573.8476562,1741.4621582,0.0000000,0.0000000,213.9971924); //
  4068.     CreateDynamicObject(2187,1761.9296875,-1572.3258057,1742.2379150,0.0000000,0.0000000,213.9971924); //
  4069.     CreateDynamicObject(2187,1761.9296875,-1572.3251953,1741.4121094,0.0000000,0.0000000,213.9971924); //
  4070.     CreateDynamicObject(8661,1766.4588623,-1559.2015381,1751.2675781,271.2688599,168.6280518,259.3778076); //
  4071.     CreateDynamicObject(8661,1766.9233398,-1559.1123047,1751.2675781,271.2634583,168.6236572,78.8761292); //
  4072.     CreateDynamicObject(2136,1767.3325195,-1569.9263916,1741.4822998,0.0000000,0.0000000,90.0000000); //
  4073.     CreateDynamicObject(2135,1767.3481445,-1570.8608398,1741.4837646,0.0000000,0.0000000,90.0000000); //
  4074.     CreateDynamicObject(2828,1778.9792480,-1573.7318115,1734.8795166,0.0000000,0.0000000,326.0000000); //
  4075.     CreateDynamicObject(2139,1767.3896484,-1571.8475342,1741.4835205,0.0000000,0.0000000,90.0000000); //
  4076.     CreateDynamicObject(2139,1767.3603516,-1567.9683838,1741.4835205,0.0000000,0.0000000,90.0000000); //
  4077.     CreateDynamicObject(2140,1767.4088135,-1572.8157959,1741.4838867,0.0000000,0.0000000,87.0000000); //
  4078.     CreateDynamicObject(2164,1776.0461426,-1567.0831299,1741.4696045,0.0000000,0.0000000,359.2500000); //
  4079.     CreateDynamicObject(2163,1774.2558594,-1567.1708984,1741.5002441,0.0000000,0.0000000,0.0000000); //
  4080.     CreateDynamicObject(2208,1767.0778809,-1585.1064453,1741.5029297,0.0000000,0.0000000,91.5000000); //
  4081.     CreateDynamicObject(2208,1767.0032959,-1582.4022217,1741.5029297,0.0000000,0.0000000,153.4996338); //
  4082.     CreateDynamicObject(2208,1764.4655762,-1581.1422119,1741.5029297,0.0000000,0.0000000,153.4954834); //
  4083.     CreateDynamicObject(2208,1762.1202393,-1579.9860840,1741.5029297,0.0000000,0.0000000,183.4954834); //
  4084.     CreateDynamicObject(2208,1759.5886230,-1580.1437988,1741.5029297,0.0000000,0.0000000,183.4936523); //
  4085.     CreateDynamicObject(2637,1770.8051758,-1570.4884033,1741.8735352,0.0000000,0.0000000,90.0000000); //
  4086.     CreateDynamicObject(2637,1770.8111572,-1572.3884277,1741.8735352,0.0000000,0.0000000,90.0000000); //
  4087.     CreateDynamicObject(2776,1771.9637451,-1572.6562500,1741.9592285,0.0000000,0.0000000,272.0000000); //
  4088.     CreateDynamicObject(2776,1771.9259033,-1571.4854736,1741.9592285,0.0000000,0.0000000,271.9995117); //
  4089.     CreateDynamicObject(2776,1771.9973145,-1570.2535400,1741.9592285,0.0000000,0.0000000,271.9995117); //
  4090.     CreateDynamicObject(2776,1770.2476807,-1572.9060059,1741.9592285,0.0000000,0.0000000,91.9995117); //
  4091.     CreateDynamicObject(2776,1769.6883545,-1571.5091553,1741.9592285,0.0000000,0.0000000,91.9940186); //
  4092.     CreateDynamicObject(2776,1769.7230225,-1570.2498779,1741.9592285,0.0000000,0.0000000,91.9940186); //
  4093.     CreateDynamicObject(2776,1770.0451660,-1567.3060303,1741.9592285,0.0000000,0.0000000,1.7440186); //
  4094.     CreateDynamicObject(2776,1770.0449219,-1567.3056641,1742.1093750,0.0000000,0.0000000,1.7413330); //
  4095.     CreateDynamicObject(2776,1770.0449219,-1567.3056641,1742.2845459,0.0000000,0.0000000,1.7413330); //
  4096.     CreateDynamicObject(1713,1777.7474365,-1571.4503174,1741.4388428,0.0000000,0.0000000,272.0000000); //
  4097.     CreateDynamicObject(1713,1776.7827148,-1574.2749023,1741.4388428,0.0000000,0.0000000,178.9995117); //
  4098.     CreateDynamicObject(3962,1775.3117676,-1571.7060547,1741.5023193,0.0392456,90.4985352,359.7497253); //
  4099.     CreateDynamicObject(8661,1778.1085205,-1554.0021973,1751.2926025,90.0000000,179.9945068,90.9919434); //
  4100.     CreateDynamicObject(1429,1774.6732178,-1567.4151611,1742.6916504,0.0000000,0.0000000,0.0000000); //
  4101.     CreateDynamicObject(2964,1773.1020508,-1578.4581299,1741.4648438,0.0000000,0.0000000,180.0000000); //
  4102.     CreateDynamicObject(2008,1756.0985107,-1583.4029541,1741.5482178,0.0000000,0.0000000,0.0000000); //
  4103.     CreateDynamicObject(2008,1759.1009521,-1583.3901367,1741.5482178,0.0000000,0.0000000,0.0000000); //
  4104.     CreateDynamicObject(2008,1762.0266113,-1583.3752441,1741.5482178,0.0000000,0.0000000,0.0000000); //
  4105.     CreateDynamicObject(2190,1760.8291016,-1580.0938721,1742.3681641,0.0000000,0.0000000,342.0000000); //
  4106.     CreateDynamicObject(2190,1767.2740479,-1584.0732422,1742.3681641,0.0000000,0.0000000,259.9989014); //
  4107.     CreateDynamicObject(2776,1762.8975830,-1584.4860840,1742.0198975,0.0000000,0.0000000,184.0000000); //
  4108.     CreateDynamicObject(2776,1759.9997559,-1584.6210938,1742.0198975,0.0000000,0.0000000,183.9990234); //
  4109.     CreateDynamicObject(2776,1756.9647217,-1584.6823730,1742.0198975,0.0000000,0.0000000,183.9990234); //
  4110.     CreateDynamicObject(2776,1760.1267090,-1581.2440186,1742.0198975,0.0000000,0.0000000,135.9990234); //
  4111.     CreateDynamicObject(2776,1765.6030273,-1584.4368896,1742.0198975,0.0000000,0.0000000,147.9942627); //
  4112.     CreateDynamicObject(2602,1758.9934082,-1561.9260254,1734.4664307,0.0000000,0.0000000,268.0000000); //
  4113.     CreateDynamicObject(2602,1763.2186279,-1561.8996582,1734.4664307,0.0000000,0.0000000,267.9949951); //
  4114.     CreateDynamicObject(2602,1767.5178223,-1561.8721924,1734.4664307,0.0000000,0.0000000,267.9949951); //
  4115.     CreateDynamicObject(2602,1771.8062744,-1561.8575439,1734.4664307,0.0000000,0.0000000,267.9949951); //
  4116.     CreateDynamicObject(2602,1776.0793457,-1561.9962158,1734.4664307,0.0000000,0.0000000,267.9949951); //
  4117.     CreateDynamicObject(2602,1780.0523682,-1561.7204590,1734.4664307,0.0000000,0.0000000,267.9949951); //
  4118.     CreateDynamicObject(2602,1780.1115723,-1582.5888672,1734.4664307,0.0000000,0.0000000,267.9949951); //
  4119.     CreateDynamicObject(2602,1775.8510742,-1583.1767578,1734.4664307,0.0000000,0.0000000,267.9949951); //
  4120.     CreateDynamicObject(2602,1771.5657959,-1583.7680664,1734.4664307,0.0000000,0.0000000,267.9949951); //
  4121.     CreateDynamicObject(2602,1767.3300781,-1584.3520508,1734.4664307,0.0000000,0.0000000,267.9949951); //
  4122.     CreateDynamicObject(2602,1762.9997559,-1584.0653076,1734.4664307,0.0000000,0.0000000,267.9949951); //
  4123.     CreateDynamicObject(2602,1758.8037109,-1584.3908691,1734.4664307,0.0000000,0.0000000,267.9949951); //
  4124.     CreateDynamicObject(1800,1756.0372314,-1585.6010742,1733.9429932,0.0000000,0.0000000,0.0000000); //
  4125.     CreateDynamicObject(1800,1759.9868164,-1585.6198730,1733.9429932,0.0000000,0.0000000,0.0000000); //
  4126.     CreateDynamicObject(1800,1764.2355957,-1585.6398926,1733.9429932,0.0000000,0.0000000,0.0000000); //
  4127.     CreateDynamicObject(1800,1768.4360352,-1585.6601562,1733.9429932,0.0000000,0.0000000,0.0000000); //
  4128.     CreateDynamicObject(1800,1772.6612549,-1585.6807861,1733.9429932,0.0000000,0.0000000,0.0000000); //
  4129.     CreateDynamicObject(1800,1776.9354248,-1585.7015381,1733.9429932,0.0000000,0.0000000,0.0000000); //
  4130.     CreateDynamicObject(1800,1777.1528320,-1565.1075439,1733.9429932,0.0000000,0.0000000,0.0000000); //
  4131.     CreateDynamicObject(1800,1772.9020996,-1565.1015625,1733.9429932,0.0000000,0.0000000,0.0000000); //
  4132.     CreateDynamicObject(1800,1768.6270752,-1565.1192627,1733.9429932,0.0000000,0.0000000,0.0000000); //
  4133.     CreateDynamicObject(1800,1764.3767090,-1565.1132812,1733.9429932,0.0000000,0.0000000,0.0000000); //
  4134.     CreateDynamicObject(1800,1760.1014404,-1565.1063232,1733.9429932,0.0000000,0.0000000,0.0000000); //
  4135.     CreateDynamicObject(1800,1756.1010742,-1565.0988770,1733.9429932,0.0000000,0.0000000,0.0000000); //
  4136.     return 1;
  4137. }
  4138.  
  4139. //=================================================
Advertisement
Add Comment
Please, Sign In to add comment