Advertisement
kaZax

Gamemode SA-MP Avergo DM

Mar 18th, 2014
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 78.29 KB | None | 0 0
  1. // Author mail: kazax.samp@gmail.com
  2. // skype: avg.kazax
  3.  
  4. #include <a_samp>       // Главный инклуд
  5. #include <a_mysql>      // База данных
  6. #include <streamer>     // Стример объектов
  7. #include <zcmd>         // Командный процессор
  8. #include <mailer>       // Отправка писем на почту
  9. #include <sscanf2>      // Получение данных из переменной
  10.  
  11. #undef MAX_PLAYERS
  12. #define MAX_PLAYERS     50
  13. #define MAX_HOUSES      500
  14.  
  15. AntiDialogHack(playerid, dialogid, style, caption[], info[], button1[], button2[]){
  16.     SetPVarInt(playerid,"DialogID",dialogid);
  17.     return ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2);
  18. }
  19.  
  20. #define ShowPlayerDialog AntiDialogHack
  21.  
  22. #define GameModeName    "DM/TDM/DRIFT/RACE"
  23. #define ServerName      "[RUS] Battle of the Gods | BOTG | 0.3z"
  24. #define MapName         "Los Santos"
  25.  
  26. #define MAX_FLOOD       5
  27.  
  28. #define CreatePickup    GetError
  29. #define DestroyPickup   GetError
  30. #define CreateObject    CreateDynamicObject
  31.  
  32. #define RACE_OFF        0
  33. #define RACE_START      1
  34. #define RACE_WORKS      2
  35. #define RACE_COUNT      3
  36.  
  37. #define PRESSED(%0)     (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
  38. #define HOLDING(%0)     ((newkeys & (%0)) == (%0))
  39.  
  40. /*
  41. CREATE TABLE IF NOT EXISTS `avergo_users`(
  42. `id` int(11) NOT NULL AUTO_INCREMENT,
  43. `name` varchar(24) NOT NULL,
  44. `pass` varchar(48) NOT NULL,
  45. `date` varchar(24) NOT NULL,
  46. `lastip` varchar(24) NOT NULL,
  47. `skinid` int(4) NOT NULL,
  48. `admin` int(2) NOT NULL,
  49. `mute` int(9) NOT NULL,
  50. `freeze` int(9) NOT NULL,
  51. `banned` int(1) NOT NULL,
  52. `kills` int(11) NOT NULL,
  53. `deaths` int(11) NOT NULL,
  54. `money` int(11) NOT NULL,
  55. `level` int(11) NOT NULL,
  56. `txt` int(2) NOT NULL,
  57. `rwinned` int(11) NOT NULL,
  58. PRIMARY KEY (`id`))
  59.  
  60. CREATE TABLE IF NOT EXISTS `avergo_logs` (
  61. `id` int(11) NOT NULL AUTO_INCREMENT,
  62. `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  63. `log` varchar(512) NOT NULL,
  64. PRIMARY KEY (`id`))
  65.  
  66. CREATE TABLE IF NOT EXISTS `avergo_houses` (
  67. `hID` int(11) NOT NULL,
  68. `hOwner` varchar(24) NOT NULL,
  69. `hName` varchar(24) NOT NULL,
  70. `hInt` int(2) NOT NULL,
  71. `hLock` int(2) NOT NULL,
  72. `hCost` int(11) NOT NULL,
  73. `hSafe` int(11) NOT NULL,
  74. `hPos1` float NOT NULL,
  75. `hPos2` float NOT NULL,
  76. `hPos3` float NOT NULL,
  77. PRIMARY KEY (`hID`))
  78. */
  79.  
  80. #define SQL_DEBUG       0
  81. #define SQL_PORT        3306
  82. #define SQL_HOST        "127.0.0.1"
  83. #define SQL_DB          "databasename"
  84. #define SQL_USER        "user"
  85. #define SQL_PASS        "pass"
  86.  
  87. #define D_LOGIN         0
  88. #define D_REGISTER      1
  89. #define D_ADMINS        2
  90. #define D_REPORT        3
  91. #define D_MENU          4
  92. #define D_DMZONES       5
  93. #define D_EXIT_DM       6
  94. #define D_ACCOUNT       7
  95. #define D_ACCOUNT_INFO  8
  96. #define D_BUYHOUSE      9
  97. #define D_HOUSEMENU     10
  98. #define D_INTERIOR      11
  99. #define D_SAFE          12
  100. #define D_SAFE_PUT      13
  101. #define D_SAFE_TAKE     14
  102. #define D_HOUSENAME     15
  103. #define D_HOUSEENTER    16
  104. #define D_ACMDS         17
  105. #define D_CMDS          18
  106.  
  107. new PlayerColors[200] = {
  108.     0xFF8C13FF,0xC715FFFF,0x20B2AAFF,0xDC143CFF,0x6495EDFF,0xf0e68cFF,0x778899FF,0xFF1493FF,0xF4A460FF,
  109.     0xEE82EEFF,0xFFD720FF,0x8b4513FF,0x4949A0FF,0x148b8bFF,0x14ff7fFF,0x556b2fFF,0x0FD9FAFF,0x10DC29FF,
  110.     0x534081FF,0x0495CDFF,0xEF6CE8FF,0xBD34DAFF,0x247C1BFF,0x0C8E5DFF,0x635B03FF,0xCB7ED3FF,0x65ADEBFF,
  111.     0x5C1ACCFF,0xF2F853FF,0x11F891FF,0x7B39AAFF,0x53EB10FF,0x54137DFF,0x275222FF,0xF09F5BFF,0x3D0A4FFF,
  112.     0x22F767FF,0xD63034FF,0x9A6980FF,0xDFB935FF,0x3793FAFF,0x90239DFF,0xE9AB2FFF,0xAF2FF3FF,0x057F94FF,
  113.     0xB98519FF,0x388EEAFF,0x028151FF,0xA55043FF,0x0DE018FF,0x93AB1CFF,0x95BAF0FF,0x369976FF,0x18F71FFF,
  114.     0x4B8987FF,0x491B9EFF,0x829DC7FF,0xBCE635FF,0xCEA6DFFF,0x20D4ADFF,0x2D74FDFF,0x3C1C0DFF,0x12D6D4FF,
  115.     0x48C000FF,0x2A51E2FF,0xE3AC12FF,0xFC42A8FF,0x2FC827FF,0x1A30BFFF,0xB740C2FF,0x42ACF5FF,0x2FD9DEFF,
  116.     0xFAFB71FF,0x05D1CDFF,0xC471BDFF,0x94436EFF,0xC1F7ECFF,0xCE79EEFF,0xBD1EF2FF,0x93B7E4FF,0x3214AAFF,
  117.     0x184D3BFF,0xAE4B99FF,0x7E49D7FF,0x4C436EFF,0xFA24CCFF,0xCE76BEFF,0xA04E0AFF,0x9F945CFF,0xDCDE3DFF,
  118.     0x10C9C5FF,0x70524DFF,0x0BE472FF,0x8A2CD7FF,0x6152C2FF,0xCF72A9FF,0xE59338FF,0xEEDC2DFF,0xD8C762FF,
  119.     0xD8C762FF,0xFF8C13FF,0xC715FFFF,0x20B2AAFF,0xDC143CFF,0x6495EDFF,0xf0e68cFF,0x778899FF,0xFF1493FF,
  120.     0xF4A460FF,0xEE82EEFF,0xFFD720FF,0x8b4513FF,0x4949A0FF,0x148b8bFF,0x14ff7fFF,0x556b2fFF,0x0FD9FAFF,
  121.     0x10DC29FF,0x534081FF,0x0495CDFF,0xEF6CE8FF,0xBD34DAFF,0x247C1BFF,0x0C8E5DFF,0x635B03FF,0xCB7ED3FF,
  122.     0x65ADEBFF,0x5C1ACCFF,0xF2F853FF,0x11F891FF,0x7B39AAFF,0x53EB10FF,0x54137DFF,0x275222FF,0xF09F5BFF,
  123.     0x3D0A4FFF,0x22F767FF,0xD63034FF,0x9A6980FF,0xDFB935FF,0x3793FAFF,0x90239DFF,0xE9AB2FFF,0xAF2FF3FF,
  124.     0x057F94FF,0xB98519FF,0x388EEAFF,0x028151FF,0xA55043FF,0x0DE018FF,0x93AB1CFF,0x95BAF0FF,0x369976FF,
  125.     0x18F71FFF,0x4B8987FF,0x491B9EFF,0x829DC7FF,0xBCE635FF,0xCEA6DFFF,0x20D4ADFF,0x2D74FDFF,0x3C1C0DFF,
  126.     0x12D6D4FF,0x48C000FF,0x2A51E2FF,0xE3AC12FF,0xFC42A8FF,0x2FC827FF,0x1A30BFFF,0xB740C2FF,0x42ACF5FF,
  127.     0x2FD9DEFF,0xFAFB71FF,0x05D1CDFF,0xC471BDFF,0x94436EFF,0xC1F7ECFF,0xCE79EEFF,0xBD1EF2FF,0x93B7E4FF,
  128.     0x3214AAFF,0x184D3BFF,0xAE4B99FF,0x7E49D7FF,0x4C436EFF,0xFA24CCFF,0xCE76BEFF,0xA04E0AFF,0x9F945CFF,
  129.     0xDCDE3DFF,0x10C9C5FF,0x70524DFF,0x0BE472FF,0x8A2CD7FF,0x6152C2FF,0xCF72A9FF,0xE59338FF,0xEEDC2DFF,
  130.     0xD8C762FF,0xD8C762FF
  131. };
  132. new CarName[212][] = {
  133.     "Landstalker","Bravura","Buffalo","Linerunner","Pereniel","Sentinel","Dumper","Firetruck","Trashmaster","Stretch","Manana","Infernus",
  134.     "Voodoo","Pony","Mule","Cheetah","Ambulance","Leviathan","Moonbeam","Esperanto","Taxi","Washington","Bobcat","Mr Whoopee","BF Injection",
  135.     "Hunter","Premier","Enforcer","Securicar","Banshee","PRandomColor()ator","Bus","Rhino","Barracks","Hotknife","Trailer","Previon","Coach","Cabbie",
  136.     "Stallion","Rumpo","RC Bandit","Romero","Packer","Monster","Admiral","Squalo","Seasparrow","Pizzaboy","Tram","Trailer","Turismo","Speeder",
  137.     "Reefer","Tropic","Flatbed","Yankee","Caddy","Solair","Berkley's RC Van","Skimmer","PCJ-600","Faggio","Freeway","RC Baron","RC Raider",
  138.     "Glendale","Oceanic","Sanchez","Sparrow","Patriot","Quad","Coastguard","Dinghy","Hermes","Sabre","Rustler","ZR3 50","Walton","Regina",
  139.     "Comet","BMX","Burrito","Camper","Marquis","Baggage","Dozer","Maverick","News Chopper","Rancher","FBI Rancher","Virgo","color()wood",
  140.     "Jetmax","Hotring","Sandking","Blista Compact","Police Maverick","Boxville","Benson","Mesa","RC Goblin","Hotring Racer A","Hotring Racer B",
  141.     "Bloodring Banger","Rancher","Super GT","Elegant","Journey","Bike","Mountain Bike","Beagle","Cropdust","Stunt","Tanker","RoadTrain",
  142.     "Nebula","Majestic","Buccaneer","Shamal","Hydra","FCR-900","NRG-500","HPV1000","Cement Truck","Tow Truck","Fortune","Cadrona","FBI Truck",
  143.     "Willard","Forklift","Tractor","Combine","Feltzer","Remington","Slamvan","Blade","Freight","Streak","Vortex","Vincent","Bullet","Clover",
  144.     "Sadler","Firetruck","Hustler","Intruder","Primo","Cargobob","Tampa","Sunrise","Merit","Utility","Nevada","Yosemite","Windsor","Monster A",
  145.     "Monster B","Uranus","Jester","Sultan","Stratum","Elegy","Raindance","RC Tiger","Flash","Tahoma","Savanna","Bandito","Freight","Trailer",
  146.     "Kart","Mower","Duneride","Sweeper","Broadway","Tornado","AT-400","DFT-30","Huntley","Stafford","BF-400","Newsvan","Tug","Trailer A","Emperor",
  147.     "Wayfarer","Euros","Hotdog","Club","Trailer B","Trailer C","Andromada","Dodo","RC Cam","Launch","Police Car (LSPD)","Police Car (SFPD)",
  148.     "Police Car (LVPD)","Police Ranger","Picador","S.W.A.T. Van","Alpha","Phoenix","Glendale","Sadler","Luggage Trailer A","Luggage Trailer B",
  149.     "Stair Trailer","Boxville","Farm Plow","Utility Trailer"
  150. };
  151. enum PlayerInfo{
  152.     sqlid,
  153.     admin,
  154.     name[24],
  155.     pass[48],
  156.     regdata[48],
  157.     lastip[24],
  158.     skinid,
  159.     mute,
  160.     freeze,
  161.     banned,
  162.     kills,
  163.     deaths,
  164.     money,
  165.     level,
  166.     bool:logged,
  167.     indm,
  168.     PlayerText:stats,
  169.     txt,
  170.     bool:rJoined,
  171.     rCheckpoint,
  172.     rWinned,
  173.     bool:HaveHouse,
  174.     HouseID,
  175.     CurrenthID,
  176.     bool:InHouse,
  177.     Flood,
  178.     CarID,
  179.     Saved,
  180.     cWeapon,
  181.     cAmmo,
  182.     cDetect
  183. };
  184. enum RaceInfo{
  185.     rPrice,
  186.     rPlayers[4],
  187.     rTimer,
  188.     rStage,
  189.     rCarID,
  190.     rCar[4],
  191.     rCount
  192. };
  193. enum HouseInfo{
  194.     hID,
  195.     hOwner[24],
  196.     hName[24],
  197.     hInt,
  198.     hLock,
  199.     hCost,
  200.     hSafe,
  201.     Float:hPos[3],
  202.     Text3D:hTxt,
  203.     hPickup,
  204.     bool:hLoaded,
  205.     bool:hHaveOwner
  206. };
  207. enum ServerInfo{
  208.     MySQLHandle,
  209.     bool:AntiDDos,
  210.     Registered,
  211.     Houses
  212. };
  213.  
  214. new sStruct[ServerInfo];
  215. new hStruct[MAX_HOUSES][HouseInfo];
  216. new pStruct[MAX_PLAYERS][PlayerInfo];
  217. new rStruct[RaceInfo];
  218.  
  219. main(){
  220.     print("******************");
  221.     print("* 01.01.2014     *");
  222.     print("* SA:MP Gamemode *");
  223.     print("* Author: kaZax  *");
  224.     print("* Death Match    *");
  225.     print("******************");
  226. }
  227.  
  228. forward SendQuery();
  229. forward AccountsCount();
  230. forward LoadPlayerData(playerid);
  231. forward CreateAccount(playerid);
  232. forward OnServerUpdate();
  233. forward ActivateAntiDDos();
  234. forward CheckRace();
  235. forward RaceCount();
  236. forward LoadAllHouses();
  237. forward bool:IsValidWeapon(weaponid);
  238.  
  239. public OnGameModeInit(){
  240.     new count = GetTickCount();
  241.     ConnectMySQL();
  242.     LoadAllSkins();
  243.     LoadObjects();
  244.     StartTimers();
  245.     SetGameModeText(GameModeName);
  246.     SendRconCommand("hostname "ServerName"");
  247.     SendRconCommand("mapname "MapName"");
  248.     UsePlayerPedAnims();
  249.     DisableInteriorEnterExits();
  250.     new vehicles = LoadStaticVehiclesFromFile("vehicles.txt");
  251.     printf("** Мод загружен за: %d мс", GetTickCount() - count);
  252.     printf("** Всего авто добавлено: %d", vehicles);
  253.     return 1;
  254. }
  255. public OnGameModeExit(){
  256.     print("** Выгрузка мода");
  257.     SaveAllHouses();
  258.     for(new i;i<MAX_PLAYERS;i++)if(IsPlayerConnected(i))Savestructure(i);
  259.     return 1;
  260. }
  261. public OnPlayerConnect(playerid){
  262.     if(GetTickCount() - GetPVarInt(playerid,"PlayerConnect") <= 500)return BanEx(playerid,"Flood:PlayerConnect");
  263.     SetPVarInt(playerid,"PlayerConnect",GetTickCount());
  264.     GetPlayerName(playerid,pStruct[playerid][name],24);
  265.     Clearstructure(playerid);
  266.     LoadPlayerTextDraw(playerid);
  267.     Loadstructure(playerid);
  268.     GetPlayerIp(playerid,pStruct[playerid][lastip],24);
  269.     SetPlayerColor(playerid, PlayerColors[playerid]);
  270.     SetPVarInt(playerid,"SkinChange",1);
  271.     SendDeathMessage(INVALID_PLAYER_ID, playerid, 200);
  272.     TogglePlayerSpectating(playerid,1);
  273.     for(new id;id<MAX_HOUSES;id++){
  274.         if(hStruct[id][hLoaded] == false)continue;
  275.         if(!strcmp(hStruct[id][hOwner], pStruct[playerid][name], true)){
  276.             pStruct[playerid][HouseID] = id;
  277.             pStruct[playerid][HaveHouse] = true;
  278.             break;
  279.         }
  280.     }
  281.     return 1;
  282. }
  283. public LoadPlayerData(playerid){
  284.     if(IsPlayerConnected(playerid))
  285.     {
  286.         new rows, fields;
  287.         cache_get_data(rows, fields, sStruct[MySQLHandle]);
  288.         if(rows)
  289.         {
  290.             pStruct[playerid][sqlid] = cache_get_row_int(0,0,sStruct[MySQLHandle]);
  291.             cache_get_row(0, 2, pStruct[playerid][pass], sStruct[MySQLHandle], 48);
  292.             cache_get_row(0, 3, pStruct[playerid][regdata], sStruct[MySQLHandle], 24);
  293.             pStruct[playerid][skinid] = cache_get_row_int(0,5,sStruct[MySQLHandle]);
  294.             pStruct[playerid][admin] = cache_get_row_int(0,6,sStruct[MySQLHandle]);
  295.             pStruct[playerid][mute] = cache_get_row_int(0,7,sStruct[MySQLHandle]);
  296.             pStruct[playerid][freeze] = cache_get_row_int(0,8,sStruct[MySQLHandle]);
  297.             pStruct[playerid][banned] = cache_get_row_int(0,9,sStruct[MySQLHandle]);
  298.             pStruct[playerid][kills] = cache_get_row_int(0,10,sStruct[MySQLHandle]);
  299.             pStruct[playerid][deaths] = cache_get_row_int(0,11,sStruct[MySQLHandle]);
  300.             pStruct[playerid][money] = cache_get_row_int(0,12,sStruct[MySQLHandle]);
  301.             pStruct[playerid][level] = cache_get_row_int(0,13,sStruct[MySQLHandle]);
  302.             pStruct[playerid][txt] = cache_get_row_int(0,14,sStruct[MySQLHandle]);
  303.             pStruct[playerid][rWinned] = cache_get_row_int(0,15,sStruct[MySQLHandle]);
  304.             ShowLoginDialog(playerid);
  305.         }
  306.         else ShowRegisterDialog(playerid);
  307.     }
  308.     return 1;
  309. }
  310. public OnPlayerDisconnect(playerid,reason){
  311.     if(pStruct[playerid][rJoined]){
  312.         new str[64];
  313.         format(str,sizeof str,"%s[%d] покинул гонку.",pStruct[playerid][name],playerid);
  314.         SendClientMessageToAll(color(),str);
  315.         for(new i;i<4;i++){
  316.             if(rStruct[rPlayers][i] != playerid)continue;
  317.             rStruct[rPlayers][i] = INVALID_PLAYER_ID;
  318.         }
  319.     }
  320.     Savestructure(playerid);
  321.     Clearstructure(playerid);
  322.     SendDeathMessage(INVALID_PLAYER_ID, playerid, 201);
  323.     return 1;
  324. }
  325. public OnPlayerRequestClass(playerid,classid){
  326.     if(GetPVarInt(playerid,"SkinChange") && pStruct[playerid][skinid] != -1){
  327.         SetPlayerSkin(playerid,pStruct[playerid][skinid]);
  328.         DeletePVar(playerid,"SkinChange");
  329.     }
  330.     SetPlayerPos(playerid,1984.4445,157.9501,55.9384);
  331.     SetPlayerCameraPos(playerid,1984.4445,160.9501,55.9384);
  332.     SetPlayerCameraLookAt(playerid,1984.4445,157.9501,55.9384);
  333.     SetPlayerFacingAngle(playerid,0.0);
  334.     return 1;
  335. }
  336. public OnPlayerUpdate(playerid){
  337.     ResetPlayerMoney(playerid);
  338.     GivePlayerMoney(playerid,pStruct[playerid][money]);
  339.     return 1;
  340. }
  341. public OnPlayerSpawn(playerid){
  342.     if(pStruct[playerid][logged] == false)return KickEx(playerid,"Не залогинен");
  343.     if(pStruct[playerid][Flood] >= MAX_FLOOD)return KickEx(playerid,"Flood:Spawn");
  344.     pStruct[playerid][Flood]++;
  345.     if(pStruct[playerid][indm] != -1)return PidorVXoditV_DM(playerid,pStruct[playerid][indm],false);
  346.     pStruct[playerid][indm] = -1;
  347.     SetPlayerPosEx(playerid,2395.8320,-1544.2620,23.9925,0,0);
  348.     ResetPlayerWeapons(playerid);
  349.     GiveWeapon(playerid,24,500);
  350.     GiveWeapon(playerid,25,500);
  351.     GiveWeapon(playerid,29,500);
  352.     GiveWeapon(playerid,33,500);
  353.     return 1;
  354. }
  355. public OnPlayerDeath(playerid,killerid,reason){
  356.     if(pStruct[playerid][Flood] >= MAX_FLOOD)return KickEx(playerid,"Flood:Death");
  357.     pStruct[playerid][Flood]++;
  358.     SendDeathMessage(killerid, playerid, reason);
  359.     pStruct[playerid][deaths]++;
  360.     if(killerid != INVALID_PLAYER_ID)
  361.     {
  362.         pStruct[killerid][kills] ++;
  363.         pStruct[killerid][money] += 100;
  364.         if(pStruct[killerid][kills] % 50 == 0){
  365.             pStruct[killerid][level] += 1;
  366.             new str[128];
  367.             format(str,sizeof str,"%s[%d] перешел на %d уровень! Число убийств: %d",pStruct[playerid][name],playerid,pStruct[playerid][level],pStruct[playerid][kills]);
  368.             SendClientMessageToAll(color(),str);
  369.         }
  370.         UpdateStatsString(killerid);
  371.     }
  372.     UpdateStatsString(playerid);
  373.     if(pStruct[playerid][rJoined] && IsPlayerInRaceVehicle(playerid)){
  374.         new str[128];
  375.         format(str,sizeof str,"Race: %s[%d] умер на гонке.",pStruct[playerid][name],playerid);
  376.         SendClientMessageToAll(color(),str);
  377.         pStruct[playerid][rJoined] = false;
  378.     }
  379.     return 1;
  380. }
  381. public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart){
  382.     if(bodypart == 9)PlayAudioStreamForPlayer(playerid, "http://load.samp-ru.org/files/headshot.mp3",20.0,0);
  383.     return 1;
  384. }
  385. public OnServerUpdate(){
  386.     for(new i;i<MAX_PLAYERS;i++){
  387.         if(!IsPlayerConnected(i))continue;
  388.         pStruct[i][Flood] = 0;
  389.         if(pStruct[i][mute]){
  390.             if(pStruct[i][mute] == 1){
  391.                 SendClientMessage(i,color(),"Бан чата снят.");
  392.                 PlayAudioStreamForPlayer(i,"http://load.samp-ru.org/files/mute_off.mp3");
  393.             }
  394.             pStruct[i][mute]--;
  395.         }
  396.         if(pStruct[i][freeze]){
  397.             if(pStruct[i][freeze] == 1){
  398.                 TogglePlayerControllable(i,1);
  399.                 SendClientMessage(i,color(),"Разморожен.");
  400.                 PlayAudioStreamForPlayer(i,"http://load.samp-ru.org/files/mute_off.mp3");
  401.             }
  402.             pStruct[i][freeze]--;
  403.         }
  404.         if(pStruct[i][Saved])pStruct[i][Saved]--;
  405.     }
  406.     return 1;
  407. }
  408. public OnPlayerCommandText(playerid, cmdtext[]){
  409.     return 0;
  410. }
  411. public OnPlayerCommandReceived(playerid,cmdtext[]){
  412.     if(pStruct[playerid][Flood] >= MAX_FLOOD)return KickEx(playerid,"Flood:Command");
  413.     pStruct[playerid][Flood]++;
  414.     new str[128];
  415.     format(str,sizeof str,"Слежка %s[%d]: %s",pStruct[playerid][name],playerid,cmdtext);
  416.     SendMessageToAdmins(0xBEBEBEFF,str,pStruct[playerid][admin]);
  417.     if(pStruct[playerid][logged] == false)return 0;
  418.     return 1;
  419. }
  420. public OnPlayerCommandPerformed(playerid, cmdtext[], success){
  421.     if(!success) SendClientMessage(playerid, color(), "Неизвестная команда! {FFD700}Используйте: /cmds");
  422.     return 1;
  423. }
  424. public OnPlayerStateChange(playerid, newstate, oldstate){
  425.     if(newstate == PLAYER_STATE_DRIVER){
  426.         if(pStruct[playerid][Flood] >= MAX_FLOOD)return KickEx(playerid,"Flood:Car");
  427.         pStruct[playerid][Flood]++;
  428.     }
  429.     return 1;
  430. }
  431. public OnPlayerText(playerid, text[]){
  432.     if(pStruct[playerid][Flood] >= MAX_FLOOD)return KickEx(playerid,"Flood:Text");
  433.     pStruct[playerid][Flood]++;
  434.     if(pStruct[playerid][logged] == false)return 0;
  435.     new str[256];
  436.     if(text[0] == '#'){
  437.         if(IsPlayerAdmin(playerid) || pStruct[playerid][admin]){
  438.             format(str,sizeof str,"{00FF00}[A] {FFFFFF}%s{00FF00}[id: %d][Level: %d]: {FFFF00}%s",pStruct[playerid][name],playerid,pStruct[playerid][admin],text[1]);
  439.             SendMessageToAdmins(1,str,0);
  440.             return 0;
  441.         }
  442.     }
  443.     if(pStruct[playerid][mute]){
  444.         format(str,sizeof str,"Вы не можете писать в чат. Осталось %d секунд.",pStruct[playerid][mute]);
  445.         SendClientMessage(playerid,color(),str);
  446.         return 0;
  447.     }
  448.     format(str,sizeof str,"%s [ID: %d]: {FFFFFF}%s",pStruct[playerid][name],playerid,text);
  449.     SendClientMessageToAll(GetPlayerColor(playerid),str);
  450.     return 0;
  451. }
  452. public OnVehicleMod(playerid,vehicleid,componentid){
  453.     if(GetPlayerInterior(playerid) == 0){
  454.         BanEx(playerid, "Tuning Hacks");
  455.     }
  456.     return 1;
  457. }
  458. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  459. {
  460.     if(PRESSED(KEY_YES))ShowServerMenu(playerid);
  461.     if((newkeys == 1 || newkeys == 9 || newkeys == 33 && oldkeys != 1 || oldkeys != 9 || oldkeys != 33) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)AddVehicleComponent(GetPlayerVehicleID(playerid),1010);
  462.     if(HOLDING(KEY_FIRE)){
  463.         pStruct[playerid][cWeapon] = GetPlayerWeapon(playerid);
  464.         pStruct[playerid][cAmmo] = GetPlayerAmmo(playerid);
  465.         if(!IsValidWeapon(pStruct[playerid][cWeapon]))return 0;
  466.         if(pStruct[playerid][cWeapon] == GetPlayerWeapon(playerid) && pStruct[playerid][cAmmo] == GetPlayerAmmo(playerid)){
  467.             if(pStruct[playerid][cDetect] > 3)SendMail( "kazax@samp-ru.org", "report@avergo.net", pStruct[playerid][name], "Report System", "Палево в читах аммо" );
  468.             pStruct[playerid][cDetect]++;
  469.         }
  470.     }
  471.     return 1;
  472. }
  473. public SendQuery(){
  474.     return 1;
  475. }
  476. public CreateAccount(playerid){
  477.     pStruct[playerid][sqlid] = mysql_insert_id();
  478.     return 1;
  479. }
  480. public AccountsCount(){
  481.     new rows, fields;
  482.     cache_get_data(rows, fields, sStruct[MySQLHandle]);
  483.     printf("** Аккаунтов всего: %d", rows);
  484.     sStruct[Registered] = rows;
  485.     return 1;
  486. }
  487. public ActivateAntiDDos(){
  488.     sStruct[AntiDDos] = true;
  489.     return print("** sStruct[AntiDDos] activated!");
  490. }
  491. public OnDialogResponse(playerid,dialogid,response,listitem,inputtext[]){
  492.     if(GetPVarInt(playerid,"DialogID") != dialogid)return 0;
  493.     for(new q;q<strlen(inputtext);q++){
  494.         if(inputtext[q] == '%'){
  495.             inputtext[q] = '#';
  496.         }
  497.     }
  498.     if(dialogid == D_LOGIN){
  499.         if(!response)return KickEx(playerid,"Отказался вводить пароль");
  500.         if(strcmp(pStruct[playerid][pass], inputtext, false) || strlen(inputtext) == 0)return ShowLoginDialog(playerid,true);
  501.         Login(playerid);
  502.         return 1;
  503.     }
  504.     if(dialogid == D_REGISTER){
  505.         if(strlen(inputtext) < 4)return ShowRegisterDialog(playerid);
  506.         format(pStruct[playerid][pass],48,"%s",inputtext);
  507.         pStruct[playerid][logged] = true;
  508.         pStruct[playerid][money] = 1000;
  509.         new query[384],Year, Month, Day;
  510.         getdate(Year, Month, Day);
  511.         format(pStruct[playerid][regdata],24,"%02d/%02d/%d", Day, Month, Year);
  512.         format(query,sizeof(query),"INSERT INTO `avergo_users`(`name`, `pass`, `date`, `lastip`, `skinid`, `admin`, `mute`, `freeze`, `banned`, `kills`, `deaths`, `money`, `level`, `txt`,`rwinned`) VALUES (\'%s\',\'%s\',\'%s\',\'%s\',\'%d\',\'%d\',\'%d\',\'%d\',\'%d\',\'%d\',\'%d\',\'%d\',\'%d\',\'%d\',\'%d\')",
  513.         pStruct[playerid][name],pStruct[playerid][pass],pStruct[playerid][regdata],pStruct[playerid][lastip],pStruct[playerid][skinid],pStruct[playerid][admin],pStruct[playerid][mute],pStruct[playerid][freeze],pStruct[playerid][banned],pStruct[playerid][kills],pStruct[playerid][deaths],pStruct[playerid][money],pStruct[playerid][level],pStruct[playerid][txt],pStruct[playerid][rWinned]);
  514.         mysql_function_query(sStruct[MySQLHandle],query, false, "CreateAccount","d", playerid);
  515.         format(query,sizeof query,"Ваш пароль: %s | Дата регистраций: %s",pStruct[playerid][pass],pStruct[playerid][regdata]);
  516.         SendClientMessage(playerid,color(),"Успешная регистрация!");
  517.         SendClientMessage(playerid,color(),query);
  518.         TogglePlayerSpectating(playerid,0);
  519.         UpdateStatsString(playerid);
  520.         PlayerTextDrawShow(playerid, pStruct[playerid][stats]);
  521.         sStruct[Registered]++;
  522.         return 1;
  523.     }
  524.     if(pStruct[playerid][logged] == false)return 0;
  525.     if(dialogid == D_MENU){
  526.         if(!response)return 0;
  527.         switch(listitem){
  528.         case 0:{
  529.                 new str[128],txton[24];
  530.                 if(pStruct[playerid][txt])format(txton,sizeof txton,"{00ff00}Вкл");
  531.                 else format(txton,sizeof txton,"{ff0000}Выкл");
  532.                 format(str,sizeof str,"[0] Текстдравы\t%s\n[1] Информация\n[2] Сохранить данные",txton);
  533.                 ShowPlayerDialog(playerid,D_ACCOUNT,DIALOG_STYLE_LIST,"Мой аккаунт",str,"Выбрать","Отмена");
  534.             }
  535.         case 1:ShowPlayerDialog(playerid,D_DMZONES,DIALOG_STYLE_LIST,"DM Зоны","[0] Deagle\n[1] Jungle","Войти","Я Зассал");
  536.         case 2:{
  537.             if(pStruct[playerid][HaveHouse] == false)return SendClientMessage(playerid,color(),"У вас нет дома! Бомж!");
  538.             new str[128],lock[12];
  539.             if(hStruct[pStruct[playerid][HouseID]][hLock])format(lock,sizeof lock,"Закрыта");
  540.             else format(lock,sizeof lock,"Открыта");
  541.             format(str,sizeof str,"[0] Продать\n\
  542.                                   [1] Интерьер:\t{00ff00}%d\n\
  543.                                   [2] Сейф:\t{00ff00}%d$\n\
  544.                                   [3] Дверь:\t{00ff00}%s\n\
  545.                                   [4] Название:\t{00ff00}%s",hStruct[pStruct[playerid][HouseID]][hInt]+1,hStruct[pStruct[playerid][HouseID]][hSafe],lock,hStruct[pStruct[playerid][HouseID]][hName]);
  546.             ShowPlayerDialog(playerid,D_HOUSEMENU,DIALOG_STYLE_LIST,"Меню дома",str,"Выбрать","Отмена");
  547.             }
  548.         }
  549.         return 1;
  550.     }
  551.     if(dialogid == D_HOUSEMENU){
  552.         if(!response)return 0;
  553.         switch(listitem){
  554.         case 0:
  555.             {
  556.                 format(hStruct[pStruct[playerid][HouseID]][hOwner],24,"None");
  557.                 pStruct[playerid][money] += hStruct[pStruct[playerid][HouseID]][hCost] * 80/100;
  558.                 UpdateHouse(pStruct[playerid][HouseID]);
  559.                 pStruct[playerid][HouseID] = -1;
  560.                 pStruct[playerid][HaveHouse] = false;
  561.             }
  562.         case 1:ShowPlayerDialog(playerid,D_INTERIOR,DIALOG_STYLE_LIST,"Интерьер дома","Интерьер № {FFFF00}0\nИнтерьер № {FFFF00}1\nИнтерьер № {FFFF00}2\nИнтерьер № {FFFF00}3\nИнтерьер № {FFFF00}4\nИнтерьер № {FFFF00}5\nИнтерьер № {FFFF00}6\nИнтерьер № {FFFF00}7\nИнтерьер № {FFFF00}8","Выбрать","Отмена");
  563.         case 2:
  564.             {
  565.                 if(pStruct[playerid][InHouse] && pStruct[playerid][CurrenthID] == pStruct[playerid][HouseID])ShowPlayerDialog(playerid,D_SAFE,DIALOG_STYLE_LIST,"Сейф дома","[0] Положить деньги\n[1] Снять деньги","Выбрать","Отмена");
  566.                 else SendClientMessage(playerid,color(),"Для того чтобы пользоваться сейфом войдите в свой дом!");
  567.             }
  568.         case 3:
  569.             {
  570.                 if(hStruct[pStruct[playerid][HouseID]][hLock])hStruct[pStruct[playerid][HouseID]][hLock] = 0;
  571.                 else hStruct[pStruct[playerid][HouseID]][hLock] = 1;
  572.             }
  573.         case 4:ShowPlayerDialog(playerid,D_HOUSENAME,DIALOG_STYLE_INPUT,"Название дома","Введите название дома не больше 24 символов","Ввести","Отмена");
  574.         }
  575.         return 1;
  576.     }
  577.     if(dialogid == D_HOUSEENTER){
  578.         if(!response)return 0;
  579.         EnterTheHouse(playerid,pStruct[playerid][CurrenthID],true);
  580.         return 1;
  581.     }
  582.     if(dialogid == D_HOUSENAME){
  583.         if(!response)return 0;
  584.         if(!strlen(inputtext) || strlen(inputtext) > 24)return ShowPlayerDialog(playerid,D_HOUSENAME,DIALOG_STYLE_INPUT,"Название дома","Введите название дома не больше {ff0000}24 символов","Ввести","Отмена");
  585.         format(hStruct[pStruct[playerid][HouseID]][hName],24,"%s",inputtext);
  586.         UpdateHouse(pStruct[playerid][HouseID]);
  587.         new str[128];
  588.         format(str,sizeof str,"Новое название дома: %s",inputtext);
  589.         SendClientMessage(playerid,color(),str);
  590.         return 1;
  591.     }
  592.     if(dialogid == D_SAFE){
  593.         if(!response)return 0;
  594.         if(listitem == 0)ShowPlayerDialog(playerid,D_SAFE_PUT,DIALOG_STYLE_INPUT,"Сейф","Введите суммы которую хотите положить в сейф дома:","Положить","Отмена");
  595.         if(listitem == 1)ShowPlayerDialog(playerid,D_SAFE_TAKE,DIALOG_STYLE_INPUT,"Сейф","Введите суммы которую хотите взять с сейфа:","Взять","Отмена");
  596.         return 1;
  597.     }
  598.     if(dialogid == D_SAFE_TAKE){
  599.         if(!response)return 0;
  600.         if(!strval(inputtext))return ShowPlayerDialog(playerid,D_SAFE_TAKE,DIALOG_STYLE_INPUT,"Сейф","Введите суммы которую хотите взять с сейфа:","Взять","Отмена");
  601.         if(strval(inputtext) > hStruct[pStruct[playerid][HouseID]][hSafe])return SendClientMessage(playerid,color(),"В сейфе нет таких денег!");
  602.         hStruct[pStruct[playerid][HouseID]][hSafe] -= strval(inputtext);
  603.         pStruct[playerid][money] += strval(inputtext);
  604.         SendClientMessage(playerid,color(),"Успешно!");
  605.         return 1;
  606.     }
  607.     if(dialogid == D_SAFE_PUT){
  608.         if(!response)return 0;
  609.         if(!strval(inputtext))return ShowPlayerDialog(playerid,D_SAFE_PUT,DIALOG_STYLE_INPUT,"Сейф","Введите суммы которую хотите положить в сейф дома:","Положить","Отмена");
  610.         if(strval(inputtext) > pStruct[playerid][money])return SendClientMessage(playerid,color(),"У вас нет таких денег!");
  611.         hStruct[pStruct[playerid][HouseID]][hSafe] += strval(inputtext);
  612.         pStruct[playerid][money] -= strval(inputtext);
  613.         SendClientMessage(playerid,color(),"Успешно!");
  614.         return 1;
  615.     }
  616.     if(dialogid == D_INTERIOR){
  617.         if(!response)return 0;
  618.         if(pStruct[playerid][money] < 3000)return SendClientMessage(playerid,color(),"У вас не хватает денег на смену интерьера! Нужно {00ff00}3000$");
  619.         pStruct[playerid][money] -= 3000;
  620.         hStruct[pStruct[playerid][HouseID]][hInt] = listitem;
  621.         EnterTheHouse(playerid,pStruct[playerid][HouseID],false);
  622.         for(new i;i<MAX_PLAYERS;i++){
  623.             if(!IsPlayerConnected(i) || !pStruct[i][InHouse])continue;
  624.             if(pStruct[playerid][HouseID] == pStruct[i][CurrenthID])EnterTheHouse(playerid,pStruct[playerid][HouseID],false);
  625.         }
  626.         return 1;
  627.     }
  628.     if(dialogid == D_ACCOUNT){
  629.         if(!response)return 0;
  630.         if(listitem == 0){
  631.             if(pStruct[playerid][txt]){
  632.                 pStruct[playerid][txt] = 0;
  633.                 PlayerTextDrawHide(playerid,pStruct[playerid][stats]);
  634.             }
  635.             else{
  636.                 pStruct[playerid][txt] = 1;
  637.                 PlayerTextDrawShow(playerid,pStruct[playerid][stats]);
  638.             }
  639.         }
  640.         if(listitem == 1){
  641.             ShowPlayerInfo(playerid,playerid);
  642.         }
  643.         if(listitem == 2){
  644.             if(!pStruct[playerid][Saved]){
  645.                 pStruct[playerid][Saved] = 300000;
  646.                 Savestructure(playerid);
  647.                 SendClientMessage(playerid,color(),"Ваши данные успешно сохранены!");
  648.             }
  649.             else SendClientMessage(playerid,color(),"Сохранять данные можно каждые 5 минут. Данные сохраняются при выходе.");
  650.         }
  651.         return 1;
  652.     }
  653.     if(dialogid == D_DMZONES){
  654.         if(!response)return 0;
  655.         PidorVXoditV_DM(playerid,listitem,true);
  656.         return 1;
  657.     }
  658.     if(dialogid == D_REPORT){
  659.         if(!response)return 0;
  660.         new message[512];
  661.         format(message,sizeof message,"Игрок: %s\nСообщение: %s",pStruct[playerid][name],inputtext);
  662.         SendMail( "kazax@samp-ru.org", "report@avergo.net", pStruct[playerid][name], "Report System", message );
  663.         format(message,sizeof message,"Сообщение: [%s] Статус: {00ff00}Отправлено на почту администратора.",inputtext);
  664.         SendClientMessage(playerid,color(),message);
  665.         return 1;
  666.     }
  667.     if(dialogid == D_EXIT_DM){
  668.         if(!response)return 0;
  669.         pStruct[playerid][indm] = -1;
  670.         OnPlayerSpawn(playerid);
  671.         return 1;
  672.     }
  673.     if(dialogid == D_BUYHOUSE){
  674.         if(!response)return 0;
  675.         new id = pStruct[playerid][CurrenthID];
  676.         if(pStruct[playerid][money] < hStruct[id][hCost])return SendClientMessage(playerid,color(),"У вас не хватает денег на покупку");
  677.         pStruct[playerid][money] -= hStruct[id][hCost];
  678.         format(hStruct[id][hOwner],24,"%s",pStruct[playerid][name]);
  679.         hStruct[id][hHaveOwner] = true;
  680.         pStruct[playerid][HouseID] = id;
  681.         pStruct[playerid][HaveHouse] = true;
  682.         UpdateHouse(id);
  683.         return 1;
  684.     }
  685.     return 0;
  686. }
  687. public CheckRace(){
  688.     if(rStruct[rStage] != RACE_WORKS){
  689.         if(rStruct[rPlayers][1] == INVALID_PLAYER_ID){
  690.             SendClientMessageToAll(color(),"Race: Не набралось нужное количество игроков. Гонка отменена.");
  691.             for(new i;i<4;i++){
  692.                 if(!IsPlayerConnected(rStruct[rPlayers][i]))continue;
  693.                 pStruct[rStruct[rPlayers][i]][rJoined] = false;
  694.             }
  695.             StopRace();
  696.             rStruct[rStage] = RACE_OFF;
  697.         }
  698.         else{
  699.             SendClientMessageToAll(color(),"Race: Начинаем гонку!");
  700.             StartRace();
  701.         }
  702.     }
  703.     return 1;
  704. }
  705. public OnPlayerExitVehicle(playerid, vehicleid)
  706. {
  707.     if(pStruct[playerid][rJoined] && IsPlayerInRaceVehicle(playerid)){
  708.         new str[128];
  709.         format(str,sizeof str,"Race: %s[%d] покинул свое авто. Дисквалифицирован!",pStruct[playerid][name],playerid);
  710.         SendClientMessageToAll(color(),str);
  711.         pStruct[playerid][rJoined] = false;
  712.         DisablePlayerRaceCheckpoint(playerid);
  713.         OnPlayerSpawn(playerid);
  714.     }
  715.     return 1;
  716. }
  717. public OnPlayerEnterRaceCheckpoint(playerid)
  718. {
  719.     if(pStruct[playerid][rCheckpoint] >= 5){
  720.         new str[128];
  721.         format(str,sizeof str,"Race: %s[%d] победитель!!! Получает приз {00ff00}%d$",pStruct[playerid][name],playerid,rStruct[rPrice]);
  722.         SendClientMessageToAll(color(),str);
  723.         for(new i;i<4;i++){
  724.             if(!IsPlayerConnected(rStruct[rPlayers][i]))continue;
  725.             OnPlayerSpawn(rStruct[rPlayers][i]);
  726.             pStruct[rStruct[rPlayers][i]][rJoined] = false;
  727.             DisablePlayerRaceCheckpoint(rStruct[rPlayers][i]);
  728.         }
  729.         StopRace();
  730.         rStruct[rStage] = RACE_OFF;
  731.         pStruct[playerid][money] += rStruct[rPrice];
  732.         pStruct[playerid][rWinned]++;
  733.         return 1;
  734.     }
  735.     if(pStruct[playerid][rJoined])CreateRaceCheckpoints(playerid);
  736.     return 1;
  737. }
  738. public RaceCount(){
  739.     if(rStruct[rCount] > 0){
  740.         new str[6];
  741.         format(str,sizeof str,"...%d",rStruct[rCount]);
  742.         for(new i;i<4;i++)GameTextForPlayer(rStruct[rPlayers][i],str,600,4);
  743.         rStruct[rCount]-=1;
  744.     }
  745.     else{
  746.         for(new i;i<4;i++){
  747.             TogglePlayerControllable(rStruct[rPlayers][i],1);
  748.             pStruct[rStruct[rPlayers][i]][rCheckpoint] = 0;
  749.             CreateRaceCheckpoints(rStruct[rPlayers][i]);
  750.             GameTextForPlayer(rStruct[rPlayers][i],"~g~ Go! Go! Go!",400,4);
  751.             KillTimer(rStruct[rTimer]);
  752.         }
  753.     }
  754.     return 1;
  755. }
  756. public LoadAllHouses(){
  757.     new rows, fields;
  758.     cache_get_data(rows, fields, sStruct[MySQLHandle]);
  759.     while(rows--){
  760.         hStruct[sStruct[Houses]][hID] = cache_get_row_int(sStruct[Houses],0,sStruct[MySQLHandle]);
  761.         cache_get_row(sStruct[Houses], 1, hStruct[sStruct[Houses]][hOwner], sStruct[MySQLHandle], 24);
  762.         cache_get_row(sStruct[Houses], 2, hStruct[sStruct[Houses]][hName], sStruct[MySQLHandle], 24);
  763.         hStruct[sStruct[Houses]][hInt] = cache_get_row_int(sStruct[Houses],3,sStruct[MySQLHandle]);
  764.         hStruct[sStruct[Houses]][hLock] = cache_get_row_int(sStruct[Houses],4,sStruct[MySQLHandle]);
  765.         hStruct[sStruct[Houses]][hCost] = cache_get_row_int(sStruct[Houses],5,sStruct[MySQLHandle]);
  766.         hStruct[sStruct[Houses]][hSafe] = cache_get_row_int(sStruct[Houses],6,sStruct[MySQLHandle]);
  767.         hStruct[sStruct[Houses]][hPos][0] = cache_get_row_float(sStruct[Houses],7,sStruct[MySQLHandle]);
  768.         hStruct[sStruct[Houses]][hPos][1] = cache_get_row_float(sStruct[Houses],8,sStruct[MySQLHandle]);
  769.         hStruct[sStruct[Houses]][hPos][2] = cache_get_row_float(sStruct[Houses],9,sStruct[MySQLHandle]);
  770.         hStruct[sStruct[Houses]][hLoaded] = true;
  771.         UpdateHouse(sStruct[Houses]);
  772.         sStruct[Houses]++;
  773.     }
  774.     return printf("** sStruct[Houses]: %d",sStruct[Houses]);
  775. }
  776. public OnPlayerPickUpDynamicPickup(playerid, pickupid){
  777.     if(pStruct[playerid][Flood] >= MAX_FLOOD)return KickEx(playerid,"Flood:Pickup");
  778.     pStruct[playerid][Flood]++;
  779.     for(new id;id<MAX_HOUSES;id++){
  780.         if(hStruct[id][hLoaded] == false)continue;
  781.         if(hStruct[id][hPickup] == pickupid){
  782.             pStruct[playerid][CurrenthID] = id;
  783.             if(hStruct[id][hHaveOwner]){
  784.                 if(hStruct[id][hLock] && id != pStruct[playerid][HouseID])return SendClientMessage(playerid,color(),"Дом закрыт!");
  785.                 else return ShowPlayerDialog(playerid,D_HOUSEENTER,DIALOG_STYLE_MSGBOX,"Дом","{ffffff}Этот дом открыт!\nВойти?","Да","Нет");
  786.             }
  787.             else if(pStruct[playerid][HaveHouse] == false){
  788.                 new str[128];
  789.                 format(str,sizeof str,"{00ff00}Дом №:\t{ffff00}%d{00ff00}\nЦена:\t\t{ffff00}%d$\n{00ff00}Купить?",id,hStruct[id][hCost]);
  790.                 return ShowPlayerDialog(playerid,D_BUYHOUSE,DIALOG_STYLE_MSGBOX,"Покупка дома",str,"Да","Нет");
  791.             }
  792.         }
  793.     }
  794.     return 1;
  795. }
  796.  
  797. /*getVehicleSpeed(vehicleid){
  798.     new Float: v[3];
  799.     GetVehicleVelocity( vehicleid, v[0], v[1], v[2] );
  800.     return floatround( 200.0 * floatsqroot( v[0]*v[0] + v[1]*v[1] + v[2]*v[2] ), floatround_floor );
  801. } */
  802. bool:IsValidWeapon(weaponid)
  803. {
  804.     if(weaponid == 19 || weaponid == 20 || weaponid == 21 || weaponid < 16 || weaponid > 38) return false;
  805.     return true;
  806. }
  807. ShowPlayerInfo(playerid,showid){
  808.     #define text "\
  809.             {FFA500}SQLID:\t\t{ffffff}%d\n\
  810.             {FFA500}Admin:\t\t\t{ffffff}%d\n\
  811.             {FFA500}IP:\t\t\t{ffffff}%s\n\
  812.             {FFA500}SkinID:\t\t\t{ffffff}%d\n\
  813.             {FFA500}Заткнут:\t\t{ffffff}%d {FFA500}сек\n\
  814.             {FFA500}Заморожен:\t\t{ffffff}%s\n\
  815.             {FFA500}Убийств:\t\t{ffffff}%d\n\
  816.             {FFA500}Смертей:\t\t{ffffff}%d\n\
  817.             {FFA500}Деньги:\t\t{ffffff}%d\n\
  818.             {FFA500}Уровень:\t\t{ffffff}%d\n\
  819.             {FFA500}Текстдравы:\t\t{ffffff}%s\n\
  820.             {FFA500}Гонок выиграно:\t{ffffff}%d"
  821.     new str[512],txton[24],freezed[24];
  822.     if(pStruct[playerid][txt])format(txton,sizeof txton,"Вкл");
  823.     else format(txton,sizeof txton,"Выкл");
  824.     if(pStruct[playerid][freeze])format(freezed,sizeof freezed,"Да");
  825.     else format(freezed,sizeof freezed,"Нет");
  826.     format(str,sizeof str,text,
  827.     pStruct[playerid][sqlid],
  828.     pStruct[playerid][admin],
  829.     pStruct[playerid][lastip],
  830.     GetPlayerSkin(playerid),
  831.     pStruct[playerid][mute],
  832.     freezed,
  833.     pStruct[playerid][kills],
  834.     pStruct[playerid][deaths],
  835.     pStruct[playerid][money],
  836.     pStruct[playerid][level],
  837.     txton,
  838.     pStruct[playerid][rWinned]);
  839.     ShowPlayerDialog(showid,D_ACCOUNT_INFO,DIALOG_STYLE_MSGBOX,"Информация",str,"Okay","");
  840.     #undef text
  841. }
  842. EnterTheHouse(playerid,houseid,bool:msg){
  843.     switch(hStruct[houseid][hInt]){
  844.     case 0:SetPlayerPosEx(playerid,140.17,1366.07,1083.65,5,houseid+1);
  845.     case 1:SetPlayerPosEx(playerid,2324.53,-1149.54,1050.71,12,houseid+1);
  846.     case 2:SetPlayerPosEx(playerid,235.34,1186.68,1080.26,3,houseid+1);
  847.     case 3:SetPlayerPosEx(playerid,24.04,1340.17,1084.38,10,houseid+1);
  848.     case 4:SetPlayerPosEx(playerid,2196.85,-1204.25,1049.02,6,houseid+1);
  849.     case 5:SetPlayerPosEx(playerid,-260.49,1456.75,1084.37,4,houseid+1);
  850.     case 6:SetPlayerPosEx(playerid,83.03,1322.28,1083.87,9,houseid+1);
  851.     case 7:SetPlayerPosEx(playerid,2317.89,-1026.76,1050.22,9,houseid+1);
  852.     case 8:SetPlayerPosEx(playerid,2495.98,-1692.08,1014.74,3,houseid+1);
  853.     }
  854.     pStruct[playerid][InHouse] = true;
  855.     if(msg)SendClientMessage(playerid,color(),"Выход из дома: /exit");
  856.     return 1;
  857. }
  858. SendMessageToAdmins(color,text[],lvl){
  859.     for(new i;i<MAX_PLAYERS;i++){
  860.         if(IsPlayerConnected(i) && pStruct[i][admin]){
  861.             if(pStruct[i][admin] > lvl)SendClientMessage(i,color,text);
  862.         }
  863.     }
  864. }
  865. SaveAllHouses(){
  866.     new str[256];
  867.     for(new id=0;id<MAX_HOUSES;id++){
  868.         if(hStruct[id][hLoaded] == false)continue;
  869.         format(str,sizeof str,"UPDATE `avergo_houses` SET `hOwner`='%s',`hName`='%s',`hInt`='%d',`hLock`='%d',`hCost`='%d',`hSafe`='%d',`hPos1`='%f',`hPos2`='%f',`hPos3`='%f' WHERE hID='%d'",
  870.         hStruct[id][hOwner],hStruct[id][hName],hStruct[id][hInt],hStruct[id][hLock],hStruct[id][hCost],hStruct[id][hSafe],hStruct[id][hPos][0],hStruct[id][hPos][1],hStruct[id][hPos][2],id);
  871.         mysql_function_query(sStruct[MySQLHandle],str, false, "SendQuery","");
  872.     }
  873. }
  874. UpdateHouse(id){
  875.     new str[256];
  876.     if(IsValidDynamicPickup(hStruct[id][hPickup]))DestroyDynamicPickup(hStruct[id][hPickup]);
  877.     if(!strcmp(hStruct[id][hOwner], "None", true)){
  878.         format(str,sizeof str,"{FFFFFF}Дом №: {FFA500}%d\n{FFFFFF}Продается за: {FFA500}%d{228B22}$",id,hStruct[id][hCost]);
  879.         hStruct[id][hHaveOwner] = false;
  880.         hStruct[id][hPickup] = CreateDynamicPickup(1273,23,hStruct[id][hPos][0],hStruct[id][hPos][1],hStruct[id][hPos][2],-1,-1,-1,50.0);
  881.     }
  882.     else{
  883.         format(str,sizeof str,"{FFFFFF}Дом №: {FFA500}%d\n{FFFFFF}Владелец: {FFA500}%s\n{FFFFFF}Название:\n{FFA500}%s",id,hStruct[id][hOwner],hStruct[id][hName]);
  884.         hStruct[id][hHaveOwner] = true;
  885.         hStruct[id][hPickup] = CreateDynamicPickup(1272,23,hStruct[id][hPos][0],hStruct[id][hPos][1],hStruct[id][hPos][2],-1,-1,-1,50.0);
  886.     }
  887.     if(IsValidDynamic3DTextLabel(hStruct[id][hTxt]))UpdateDynamic3DTextLabelText(hStruct[id][hTxt], 1, str);
  888.     else hStruct[id][hTxt] = CreateDynamic3DTextLabel(str,1,hStruct[id][hPos][0],hStruct[id][hPos][1],hStruct[id][hPos][2],20,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,0,-1,-1,-1,20.0);
  889. }
  890. CreateHouseOnBD(id){
  891.     new str[256];
  892.     format(str,sizeof str,"INSERT INTO avergo_houses(hID,hOwner,hName,hInt,hLock,hCost,hSafe,hPos1,hPos2,hPos3) VALUES ('%d','%s','%s','%d','%d','%d','%d','%f','%f','%f')",
  893.     id,hStruct[id][hOwner],hStruct[id][hName],hStruct[id][hInt],hStruct[id][hLock],hStruct[id][hCost],hStruct[id][hSafe],hStruct[id][hPos][0],hStruct[id][hPos][1],hStruct[id][hPos][2]);
  894.     mysql_function_query(sStruct[MySQLHandle],str, false, "SendQuery","");
  895.     return 1;
  896. }
  897. ConnectMySQL(){
  898.     mysql_debug(SQL_DEBUG);
  899.     sStruct[MySQLHandle] = mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS, SQL_PORT);
  900.     mysql_function_query(sStruct[MySQLHandle],"SELECT * FROM `avergo_users`", true, "AccountsCount","");
  901.     mysql_function_query(sStruct[MySQLHandle],"SELECT * FROM `avergo_houses`", true, "LoadAllHouses","");
  902.     return 1;
  903. }
  904. ShowServerMenu(playerid){
  905.     if(pStruct[playerid][indm] != -1)ShowPlayerDialog(playerid,D_EXIT_DM,DIALOG_STYLE_MSGBOX,"Выход","Покинуть DM Зону?","Зассал","Нет");
  906.     else{
  907.         ShowPlayerDialog(playerid,D_MENU,DIALOG_STYLE_LIST,"Меню","\
  908.         [1] Мой аккаунт\n\
  909.         [2] DM Зоны\n\
  910.         [3] Управление домом","Выбрать","Отмена");
  911.     }
  912. }
  913. LoadPlayerTextDraw(playerid){
  914.     pStruct[playerid][stats] = CreatePlayerTextDraw(playerid, 499.0, 101.0, "");
  915.     PlayerTextDrawFont(playerid, pStruct[playerid][stats], 1);
  916.     PlayerTextDrawLetterSize(playerid, pStruct[playerid][stats], 0.34, 1.5);
  917.     PlayerTextDrawSetOutline(playerid, pStruct[playerid][stats], 1);
  918.     PlayerTextDrawColor(playerid, pStruct[playerid][stats], color());
  919.     PlayerTextDrawAlignment(playerid, pStruct[playerid][stats], 1);
  920. }
  921. UpdateStatsString(playerid){
  922.     new string[128];
  923.     format(string, sizeof(string), "Level: %d Exp: %d/%d~n~Deaths: %d Kills: %d", pStruct[playerid][level],pStruct[playerid][kills],pStruct[playerid][level] * 50,pStruct[playerid][deaths], pStruct[playerid][kills]);
  924.     PlayerTextDrawSetString(playerid, pStruct[playerid][stats], string);
  925. }
  926. PidorVXoditV_DM(pidorid,dmid,bool:msga){
  927.     // dmid == 0 ; Deagle
  928.     // dmid == 1 ; Jungle
  929.     new msg[128];
  930.     ResetPlayerWeapons(pidorid);
  931.     pStruct[pidorid][indm] = dmid;
  932.     switch(dmid){
  933.     case 0:{
  934.             if(msga)format(msg,sizeof msg,"<| %s[%d] |> вошел в DM Deagle.",pStruct[pidorid][name],pidorid);
  935.             GiveWeapon(pidorid,WEAPON_DEAGLE,10000);
  936.             switch(random(4)){
  937.             case 0:SetPlayerPosEx(pidorid,1059.8849,-1190.5916,61.6891,0,0);
  938.             case 1:SetPlayerPosEx(pidorid,1060.4604,-1149.3961,61.7377,0,0);
  939.             case 2:SetPlayerPosEx(pidorid,1101.3984,-1147.9451,61.7377,0,0);
  940.             case 3:SetPlayerPosEx(pidorid,1102.9519,-1190.0281,61.7377,0,0);
  941.             }
  942.         }
  943.     case 1:{
  944.             if(msga)format(msg,sizeof msg,"<| %s[%d] |> вошел в DM Jungle.",pStruct[pidorid][name],pidorid);
  945.             GiveWeapon(pidorid,WEAPON_DEAGLE,10000);
  946.             GiveWeapon(pidorid,WEAPON_MOLTOV,2);
  947.             GiveWeapon(pidorid,WEAPON_AK47,10000);
  948.             GiveWeapon(pidorid,WEAPON_SHOTGSPA,10000);
  949.             switch(random(3)){
  950.             case 0:SetPlayerPosEx(pidorid,4168.6938,-1644.1786,12.1646,0,0);
  951.             case 1:SetPlayerPosEx(pidorid,4242.0464,-1666.7699,12.0825,0,0);
  952.             case 2:SetPlayerPosEx(pidorid,4202.3188,-1692.3127,12.0825,0,0);
  953.             }
  954.         }
  955.     }
  956.     if(msga)SendClientMessageToAll(color(),msg);
  957.     return 1;
  958. }
  959. StartTimers(){
  960.     SetTimer("OnServerUpdate",1000,true);
  961.     SetTimer("ActivateAntiDDos",5000,false);
  962.     return print("** Таймеры запущены");
  963. }
  964. Savestructure(playerid){
  965.     if(pStruct[playerid][logged]){
  966.         new query[384];
  967.         format(query,sizeof(query),"UPDATE `avergo_users` SET `pass`='%s',`lastip`='%s',`skinid`='%d',`admin`='%d',`mute`='%d',`freeze`='%d',`banned`='%d',`kills`='%d',`deaths`='%d',`money`='%d',`level`='%d',`txt`='%d',`rwinned`='%d' WHERE id='%d'",
  968.         pStruct[playerid][pass],pStruct[playerid][lastip],GetPlayerSkin(playerid),pStruct[playerid][admin],pStruct[playerid][mute],pStruct[playerid][freeze],pStruct[playerid][banned],pStruct[playerid][kills],pStruct[playerid][deaths],pStruct[playerid][money],pStruct[playerid][level],pStruct[playerid][txt],pStruct[playerid][rWinned],pStruct[playerid][sqlid]);
  969.         mysql_function_query(sStruct[MySQLHandle],query, false, "SendQuery","");
  970.         return 1;
  971.     }
  972.     return 0;
  973. }
  974. Clearstructure(playerid){
  975.     pStruct[playerid][sqlid] = -1;
  976.     pStruct[playerid][admin] = 0;
  977.     format(pStruct[playerid][pass],48,"");
  978.     pStruct[playerid][skinid] = -1;
  979.     pStruct[playerid][mute] = 0;
  980.     pStruct[playerid][freeze] = 0;
  981.     pStruct[playerid][banned] = 0;
  982.     pStruct[playerid][kills] = 0;
  983.     pStruct[playerid][deaths] = 0;
  984.     pStruct[playerid][logged] = false;
  985.     pStruct[playerid][indm] = -1;
  986.     pStruct[playerid][level] = 1;
  987.     pStruct[playerid][txt] = 1;
  988.     pStruct[playerid][rJoined] = false;
  989.     pStruct[playerid][rCheckpoint] = 0;
  990.     pStruct[playerid][rWinned] = 0;
  991.     pStruct[playerid][HouseID] = 0;
  992.     pStruct[playerid][CurrenthID] = -1;
  993.     pStruct[playerid][InHouse] = false;
  994.     pStruct[playerid][Flood] = 0;
  995.     pStruct[playerid][CarID] = INVALID_VEHICLE_ID;
  996.     pStruct[playerid][Saved] = 0;
  997.     pStruct[playerid][cWeapon] = 0;
  998.     pStruct[playerid][cAmmo] = 0;
  999.     pStruct[playerid][cDetect] = 0;
  1000.     SetPVarInt(playerid,"Dos",0);
  1001. }
  1002. LoadAllSkins(){
  1003.     for(new i;i<300;i++){
  1004.         AddPlayerClass(i,0,0,0,0,0,0,0,0,0,0);
  1005.     }
  1006. }
  1007. Loadstructure(playerid){
  1008.     new query[128];
  1009.     format(query,sizeof(query),"SELECT * FROM `avergo_users` WHERE name = '%s'",pStruct[playerid][name]);
  1010.     mysql_function_query(sStruct[MySQLHandle],query, true, "LoadPlayerData","d", playerid);
  1011. }
  1012. KickEx(playerid,reason[]){
  1013.     new str[256];
  1014.     format(str,sizeof str,"Игрок %s[%d] был кикнут системой. (%s)",pStruct[playerid][name],playerid,reason);
  1015.     SendClientMessageToAll(color(),str);
  1016.     WriteLog(str);
  1017.     return Kick(playerid);
  1018. }
  1019. WriteLog(str[]){
  1020.     new query[512];
  1021.     format(query,sizeof(query),"INSERT INTO `avergo_logs`(`log`) VALUES (\'%s\')",str);
  1022.     mysql_function_query(sStruct[MySQLHandle],query, false, "SendQuery","");
  1023.     return 1;
  1024. }
  1025. Login(playerid){
  1026.     pStruct[playerid][logged] = true;
  1027.     TogglePlayerSpectating(playerid,0);
  1028.     if(pStruct[playerid][banned]){
  1029.         SendClientMessage(playerid,color(),"Ваш аккаунт забанен!");
  1030.         BanEx(playerid,"Account is banned");
  1031.         return ;
  1032.     }
  1033.     SetPlayerScore(playerid,pStruct[playerid][kills]);
  1034.     SendClientMessage(playerid,color(),"Добро пожаловать на BOTG!");
  1035.     SendClientMessage(playerid,color(),"Главное меню сервера на кнопку Y (/mm)");
  1036.     SendClientMessage(playerid,color(),"Предложения/баги пишите в /report");
  1037.     UpdateStatsString(playerid);
  1038.     if(pStruct[playerid][txt])PlayerTextDrawShow(playerid, pStruct[playerid][stats]);
  1039. }
  1040. LoadStaticVehiclesFromFile(const filename[]){
  1041.     new File:file_ptr;
  1042.     new line[256];
  1043.     new var_from_line[64];
  1044.     new vehicletype;
  1045.     new Float:SpawnX;
  1046.     new Float:SpawnY;
  1047.     new Float:SpawnZ;
  1048.     new Float:SpawnRot;
  1049.    new Color1, Color2;
  1050.     new index;
  1051.     new vehicles_loaded;
  1052.     file_ptr = fopen(filename,filemode:io_read);
  1053.     if(!file_ptr) return 0;
  1054.     vehicles_loaded = 0;
  1055.     while(fread(file_ptr,line,256) > 0)
  1056.     {
  1057.         index = 0;
  1058.         index = token_by_delim(line,var_from_line,',',index);
  1059.         if(index == (-1)) continue;
  1060.         vehicletype = strval(var_from_line);
  1061.         if(vehicletype < 400 || vehicletype > 611) continue;
  1062.         index = token_by_delim(line,var_from_line,',',index+1);
  1063.         if(index == (-1)) continue;
  1064.         SpawnX = floatstr(var_from_line);
  1065.         index = token_by_delim(line,var_from_line,',',index+1);
  1066.         if(index == (-1)) continue;
  1067.         SpawnY = floatstr(var_from_line);
  1068.         index = token_by_delim(line,var_from_line,',',index+1);
  1069.         if(index == (-1)) continue;
  1070.         SpawnZ = floatstr(var_from_line);
  1071.         index = token_by_delim(line,var_from_line,',',index+1);
  1072.         if(index == (-1)) continue;
  1073.         SpawnRot = floatstr(var_from_line);
  1074.         index = token_by_delim(line,var_from_line,',',index+1);
  1075.         if(index == (-1)) continue;
  1076.         Color1 = strval(var_from_line);
  1077.         index = token_by_delim(line,var_from_line,';',index+1);
  1078.         Color2 = strval(var_from_line);
  1079.         AddStaticVehicleEx(vehicletype,SpawnX,SpawnY,SpawnZ,SpawnRot,Color1,Color2,(30*60));   
  1080.         vehicles_loaded++;
  1081.     }
  1082.  
  1083.     fclose(file_ptr);
  1084.     printf("Loaded %d vehicles from: %s",vehicles_loaded,filename);
  1085.     return vehicles_loaded;
  1086. }
  1087. token_by_delim(const string[], return_str[], delim, start_index){
  1088.     new x=0;
  1089.     while(string[start_index] != EOS && string[start_index] != delim) {
  1090.         return_str[x] = string[start_index];
  1091.         x++;
  1092.         start_index++;
  1093.     }
  1094.     return_str[x] = EOS;
  1095.     if(string[start_index] == EOS) start_index = (-1);
  1096.     return start_index;
  1097. }
  1098. GiveWeapon(playerid,weaponid,ammo){
  1099.     GivePlayerWeapon(playerid,weaponid,ammo);
  1100.     return 1;
  1101. }
  1102. ShowLoginDialog(playerid,bool:warning = false){
  1103.     new str[512];
  1104.     if(warning){
  1105.         format(str,sizeof str,"{FF0000}==============================================\n\
  1106.         {ffffff}| Добро пожаловать на Russian Death Match!\n\
  1107.         {ffffff}| Всего зарегистрировано игроков: %d\n\
  1108.         {ffffff}| Введите свой пароль для входа на сервер:\n\
  1109.         {ffffff}| Не правильный пароль!\n\
  1110.         {FF0000}==============================================",sStruct[Registered]);
  1111.     }
  1112.     else{
  1113.         format(str,sizeof str,"{00FF00}==============================================\n\
  1114.         {ffffff}| Добро пожаловать на Russian Death Match!\n\
  1115.         {ffffff}| Всего зарегистрировано игроков: %d\n\
  1116.         {ffffff}| Введите свой пароль для входа на сервер:\n\
  1117.         {00FF00}==============================================",sStruct[Registered]);
  1118.     }
  1119.     return ShowPlayerDialog(playerid,D_LOGIN,DIALOG_STYLE_INPUT,"Авторизация",str,"< Ввести >","< Выход >");
  1120. }
  1121. ShowRegisterDialog(playerid){
  1122.     new str[512];
  1123.     format(str,sizeof str,"{00FF00}==============================================\n{ffffff}| Добро пожаловать на сервер BOTG!\n{ffffff}| Всего зарегистрировано игроков: %d\n{ffffff}| Введите свой пароль для регистраций на сервере:\n{ffffff}| Ваш пароль должен содержать не менее чем 4 символов.\n{00FF00}==============================================",sStruct[Registered]);
  1124.     return ShowPlayerDialog(playerid,D_REGISTER,DIALOG_STYLE_INPUT,"Регистрация",str,"< Ввести >","< Выход >");
  1125. }
  1126. color(){
  1127.     return 0x11FF00FF+random(0xFF)*pow((0xF+1),2);
  1128. }
  1129. pow(v,s){
  1130.     if(!s) return s;
  1131.     new t=1;
  1132.     new r=v;
  1133.     while(t<s)
  1134.     {
  1135.         r*=v;
  1136.         t++;
  1137.     }
  1138.     return r;
  1139. }
  1140. IsRaceCar(model){
  1141.     switch(model)
  1142.     {
  1143.     case 443,448,461,462,463,468,521,522,
  1144.         523,581,586,481,509,510,430,446,
  1145.         452,453,454,472,473,484,493,595,
  1146.         417,425,447,465,469,487,488,497,
  1147.         501,548,563,406,444,556,557,573,
  1148.         460,464,476,511,512,513,519,520,
  1149.         539,553,577,592,593,471:return 1;
  1150.     }
  1151.     return 0;
  1152. }
  1153. StartRace(){
  1154.     KillTimer(rStruct[rTimer]);
  1155.     if(IsPlayerConnected(rStruct[rPlayers][0]))rStruct[rCar][0] = CreateVehicle(rStruct[rCarID],335.9109,-1646.2317,32.8562,262.0183,128,128,999999); // race_1
  1156.     if(IsPlayerConnected(rStruct[rPlayers][1]))rStruct[rCar][1] = CreateVehicle(rStruct[rCarID],324.3786,-1644.6122,32.8705,261.4973,129,129,999999); // race_2
  1157.     if(IsPlayerConnected(rStruct[rPlayers][2]))rStruct[rCar][2] = CreateVehicle(rStruct[rCarID],334.8986,-1641.0206,32.8277,263.2744,130,130,999999); // race_3
  1158.     if(IsPlayerConnected(rStruct[rPlayers][3]))rStruct[rCar][3] = CreateVehicle(rStruct[rCarID],319.4552,-1639.2094,32.8532,263.4655,131,131,999999); // race_4
  1159.     for(new i;i<4;i++){
  1160.         if(!IsPlayerConnected(rStruct[rPlayers][i]))continue;
  1161.         SetPlayerInterior(rStruct[rPlayers][i],0);
  1162.         SetPlayerVirtualWorld(rStruct[rPlayers][i],0);
  1163.         PutPlayerInVehicle(rStruct[rPlayers][i], rStruct[rCar][i], 0);
  1164.         TogglePlayerControllable(rStruct[rPlayers][i],0);
  1165.     }
  1166.     rStruct[rCount] = 5;
  1167.     rStruct[rTimer] = SetTimer("RaceCount",5000,true);
  1168.     rStruct[rStage] = RACE_WORKS;
  1169.     return 1;
  1170. }
  1171. CreateRaceCheckpoints(playerid){
  1172.     switch(pStruct[playerid][rCheckpoint]){
  1173.         case 0:SetPlayerRaceCheckpoint(playerid,0,535.9774,-1665.1848,18.2109,534.4357,-1418.8213,15.6329,15);
  1174.         case 1:SetPlayerRaceCheckpoint(playerid,0,534.4357,-1418.8213,15.6329,1060.2518,-1400.7173,13.1459,15);
  1175.         case 2:SetPlayerRaceCheckpoint(playerid,0,1060.2518,-1400.7173,13.1459,1058.9830,-1145.7006,23.4229,15);
  1176.         case 3:SetPlayerRaceCheckpoint(playerid,0,1058.9830,-1145.7006,23.4229,1349.7616,-1148.2290,23.3753,15);
  1177.         case 4:SetPlayerRaceCheckpoint(playerid,1,1349.7616,-1148.2290,23.3753,1371.0981,-941.3430,33.8672,15);
  1178.     }
  1179.     pStruct[playerid][rCheckpoint]++;
  1180. }
  1181. StopRace(){
  1182.     for(new i;i<4;i++){
  1183.         DestroyVehicle(rStruct[rCar][i]);
  1184.         DisablePlayerRaceCheckpoint(rStruct[rPlayers][i]);
  1185.     }
  1186. }
  1187. LoadObjects(){
  1188.     CreateObject(18759, 1082.27258, -1170.10962, 59.19857,   0.00000, 0.00000, 0.00000);
  1189.     CreateObject(17864, 4203.108887, -1662.351196, 9.542965, 0.0000, 0.0000, 0.0000);
  1190.     //Jungle [For DM and TDM]
  1191.     CreateObject(17864, 4203.000000, -1633.000000, 10.000000, 0.0000, 0.0000, 0.0000);
  1192.     CreateObject(17864, 4202.899902, -1603.300781, 10.399994, 0.0000, 0.0000, 0.0000);
  1193.     CreateObject(17864, 4164.903809, -1662.387573, 9.555874, 0.0000, 0.0000, 0.0000);
  1194.     CreateObject(17864, 4164.919922, -1632.302612, 9.917000, 0.0000, 0.0000, 0.0000);
  1195.     CreateObject(17864, 4164.914551, -1603.488647, 10.327705, 0.0000, 0.0000, 0.0000);
  1196.     CreateObject(17864, 4165.182129, -1692.049438, 9.119066, 0.0000, 0.0000, 0.0000);
  1197.     CreateObject(17864, 4203.171387, -1691.804932, 9.161652, 0.0000, 0.0000, 0.0000);
  1198.     CreateObject(17864, 4241.291504, -1691.942871, 9.035635, 0.0000, 0.0000, 0.0000);
  1199.     CreateObject(17864, 4241.151855, -1660.648804, 9.541903, 0.0000, 0.0000, 0.0000);
  1200.     CreateObject(17864, 4241.101074, -1630.603027, 9.988836, 0.0000, 0.0000, 0.0000);
  1201.     CreateObject(17864, 4241.082520, -1603.185547, 10.364004, 0.0000, 0.0000, 0.0000);
  1202.     CreateObject(1683, 4224.729492, -1615.330078, 11.217764, 338.4104, 24.0642, 64.4577);
  1203.     CreateObject(664, 4234.795898, -1622.820435, 7.597896, 0.0000, 0.0000, 0.0000);
  1204.     CreateObject(664, 4258.219727, -1589.301514, 18.022781, 0.0000, 0.0000, 235.4857);
  1205.     CreateObject(688, 4212.084961, -1618.470825, 10.554691, 0.0000, 0.0000, 0.0000);
  1206.     CreateObject(688, 4236.235352, -1609.770630, 10.179461, 0.0000, 0.0000, 45.5501);
  1207.     CreateObject(688, 4216.221191, -1609.681030, 10.570307, 0.0000, 0.0000, 97.9758);
  1208.     CreateObject(689, 4232.865723, -1595.235107, 14.843340, 0.0000, 0.0000, 304.1366);
  1209.     CreateObject(17029, 4248.204590, -1582.740845, 11.067765, 0.0000, 0.0000, 206.1607);
  1210.     CreateObject(17029, 4258.798340, -1617.936768, 6.561999, 0.0000, 0.0000, 120.2170);
  1211.     CreateObject(17029, 4264.029297, -1650.064453, 9.930723, 0.0000, 0.0000, 120.2170);
  1212.     CreateObject(17029, 4241.132813, -1697.980591, 10.621599, 0.0000, 0.0000, 66.0727);
  1213.     CreateObject(17029, 4199.752441, -1712.842529, 8.297617, 0.0000, 0.0000, 32.5548);
  1214.     CreateObject(17029, 4159.946289, -1699.276123, 6.477360, 0.0000, 0.0000, 334.9728);
  1215.     CreateObject(17029, 4148.031250, -1658.330444, 6.174082, 0.0000, 0.0000, 282.5475);
  1216.     CreateObject(17029, 4150.702148, -1612.827026, 10.683632, 0.0000, 0.0000, 279.1097);
  1217.     CreateObject(17029, 4180.450684, -1591.055908, 7.243537, 0.0000, 0.0000, 218.0897);
  1218.     CreateObject(17029, 4208.252441, -1586.336426, 9.322004, 0.0000, 0.0000, 211.2141);
  1219.     CreateObject(688, 4188.407715, -1630.723877, 10.300560, 0.0000, 0.0000, 0.0000);
  1220.     CreateObject(688, 4193.757324, -1636.891846, 10.293558, 0.0000, 0.0000, 0.0000);
  1221.     CreateObject(688, 4199.258301, -1643.553101, 10.088747, 0.0000, 0.0000, 0.0000);
  1222.     CreateObject(688, 4206.528809, -1650.417969, 10.050646, 0.0000, 0.0000, 0.0000);
  1223.     CreateObject(688, 4214.880859, -1654.648071, 10.072086, 0.0000, 0.0000, 0.0000);
  1224.     CreateObject(688, 4222.226074, -1664.361084, 9.804857, 0.0000, 0.0000, 0.0000);
  1225.     CreateObject(688, 4217.191406, -1660.394409, 9.853991, 0.0000, 0.0000, 0.0000);
  1226.     CreateObject(688, 4220.100098, -1672.939819, 9.644855, 0.0000, 0.0000, 0.0000);
  1227.     CreateObject(688, 4221.840332, -1672.769043, 9.671789, 0.0000, 0.0000, 0.0000);
  1228.     CreateObject(688, 4218.496582, -1680.680664, 9.638523, 0.0000, 0.0000, 0.0000);
  1229.     CreateObject(688, 4218.403809, -1687.556641, 10.613482, 0.0000, 0.0000, 0.0000);
  1230.     CreateObject(688, 4185.846680, -1637.615479, 10.204729, 0.0000, 0.0000, 0.0000);
  1231.     CreateObject(688, 4190.574707, -1645.191895, 10.110624, 0.0000, 0.0000, 0.0000);
  1232.     CreateObject(688, 4197.507813, -1651.582642, 10.009247, 0.0000, 0.0000, 0.0000);
  1233.     CreateObject(688, 4203.262695, -1657.865234, 9.878462, 0.0000, 0.0000, 0.0000);
  1234.     CreateObject(688, 4209.300781, -1664.846680, 9.701262, 0.0000, 0.0000, 0.0000);
  1235.     CreateObject(688, 4211.017090, -1672.325806, 9.634821, 0.0000, 0.0000, 0.0000);
  1236.     CreateObject(688, 4208.018555, -1680.798950, 9.658691, 0.0000, 0.0000, 0.0000);
  1237.     CreateObject(658, 4189.663574, -1636.707275, 6.427950, 0.0000, 0.0000, 0.0000);
  1238.     CreateObject(658, 4190.401367, -1645.876953, 9.582941, 0.0000, 0.0000, 0.0000);
  1239.     CreateObject(658, 4196.386719, -1650.176636, 7.304234, 0.0000, 0.0000, 0.0000);
  1240.     CreateObject(658, 4200.842773, -1654.964355, 6.983436, 0.0000, 0.0000, 0.0000);
  1241.     CreateObject(658, 4205.780273, -1660.284302, 5.576230, 0.0000, 0.0000, 0.0000);
  1242.     CreateObject(658, 4207.409668, -1665.778076, 5.717142, 0.0000, 0.0000, 0.0000);
  1243.     CreateObject(658, 4214.979004, -1671.239624, 4.424974, 0.0000, 0.0000, 0.0000);
  1244.     CreateObject(658, 4210.820801, -1679.994141, 6.011795, 0.0000, 0.0000, 0.0000);
  1245.     CreateObject(800, 4184.065918, -1692.066162, 12.805120, 0.0000, 0.0000, 0.0000);
  1246.     CreateObject(800, 4187.585449, -1689.348633, 11.868803, 0.0000, 0.0000, 71.3332);
  1247.     CreateObject(801, 4182.896973, -1687.911621, 9.182002, 0.0000, 0.0000, 0.0000);
  1248.     CreateObject(803, 4177.067383, -1689.553345, 10.677214, 0.0000, 0.0000, 0.0000);
  1249.     CreateObject(804, 4180.183594, -1687.769043, 10.355478, 0.0000, 0.0000, 62.7389);
  1250.     CreateObject(818, 4165.123535, -1614.547852, 16.074409, 0.0000, 0.0000, 0.0000);
  1251.     CreateObject(818, 4167.103516, -1619.682861, 13.290346, 0.0000, 0.0000, 0.0000);
  1252.     CreateObject(818, 4168.309082, -1619.126343, 13.911998, 0.0000, 0.0000, 0.0000);
  1253.     CreateObject(818, 4168.501953, -1620.735596, 11.618527, 0.0000, 0.0000, 0.0000);
  1254.     CreateObject(818, 4172.362793, -1619.236206, 12.359555, 0.0000, 0.0000, 0.0000);
  1255.     CreateObject(818, 4171.444336, -1621.432739, 11.812219, 0.0000, 0.0000, 0.0000);
  1256.     CreateObject(822, 4172.621582, -1679.063843, 11.590391, 0.0000, 0.0000, 28.3614);
  1257.     CreateObject(822, 4174.230469, -1677.239746, 11.594109, 0.0000, 0.0000, 28.3614);
  1258.     CreateObject(822, 4199.485840, -1665.776001, 11.759916, 0.0000, 0.0000, 28.3614);
  1259.     CreateObject(822, 4195.325195, -1664.215454, 11.016867, 0.0000, 0.0000, 64.4578);
  1260.     CreateObject(873, 4175.638184, -1630.955811, 11.892777, 0.0000, 0.0000, 0.0000);
  1261.     CreateObject(873, 4173.715332, -1627.023315, 11.802841, 0.0000, 0.0000, 174.4658);
  1262.     CreateObject(873, 4170.419922, -1632.222656, 11.378857, 0.0000, 0.0000, 186.4979);
  1263.     CreateObject(874, 4174.414063, -1629.232178, 11.938376, 0.0000, 0.0000, 0.0000);
  1264.     CreateObject(8836, 4220.290039, -1632.153687, 12.127916, 0.0000, 0.0000, 0.0000);
  1265.     CreateObject(8836, 4220.027344, -1637.078247, 12.018527, 0.0000, 0.0000, 0.0000);
  1266.     CreateObject(8836, 4226.513672, -1633.863525, 12.078214, 0.0000, 0.0000, 306.7149);
  1267.     CreateObject(9153, 4180.330566, -1661.426270, 14.061169, 0.0000, 0.0000, 33.5180);
  1268.     CreateObject(647, 4171.834473, -1628.737183, 11.910480, 0.0000, 0.0000, 0.0000);
  1269.     CreateObject(647, 4176.197266, -1630.514648, 11.877828, 0.0000, 0.0000, 0.0000);
  1270.     CreateObject(647, 4172.699219, -1633.010864, 11.720899, 0.0000, 0.0000, 0.0000);
  1271.     CreateObject(1218, 4212.624023, -1627.588135, 10.928268, 40.3935, 239.6788, 154.6987);
  1272.     CreateObject(1218, 4212.332520, -1627.387085, 10.431797, 39.5341, 271.4780, 188.2168);
  1273.     CreateObject(1222, 4212.067383, -1628.519287, 10.675183, 0.0000, 0.0000, 0.0000);
  1274.     CreateObject(1222, 4211.019531, -1626.911743, 10.420916, 259.4460, 161.3666, 2.4746);
  1275.     CreateObject(2780, 4222.215820, -1620.167847, 10.765604, 0.0000, 0.0000, 0.0000);
  1276.     CreateObject(3461, 4212.090820, -1628.531128, 9.655496, 0.0000, 0.0000, 0.0000);
  1277.     CreateObject(3461, 4217.263184, -1623.766724, 13.712317, 71.3332, 0.0000, 321.3253);
  1278.     CreateObject(3461, 4215.707520, -1626.719360, 8.439608, 7.7349, 0.0000, 321.3253);
  1279.     CreateObject(3461, 4220.835938, -1625.463623, 14.030025, 182.9561, 0.0000, 321.3253);
  1280.     CreateObject(3461, 4217.566406, -1629.044556, 16.462524, 79.8237, 0.0000, 321.3253);
  1281.     CreateObject(918, 4242.319336, -1647.717529, 10.132179, 0.0000, 0.0000, 0.0000);
  1282.     CreateObject(918, 4242.182129, -1647.224365, 9.924934, 261.1648, 271.4780, 17.1887);
  1283.     CreateObject(3461, 4242.262207, -1647.483154, 8.181537, 0.0000, 0.0000, 0.0000);
  1284.     CreateObject(3461, 4240.961914, -1647.359253, 7.839777, 0.0000, 0.0000, 0.0000);
  1285.     CreateObject(3461, 4240.279297, -1647.382690, 8.174280, 0.0000, 0.0000, 0.0000);
  1286.     CreateObject(3461, 4239.666016, -1646.448853, 8.173217, 0.0000, 0.0000, 0.0000);
  1287.     CreateObject(3461, 4238.616211, -1645.565918, 8.187388, 0.0000, 0.0000, 0.0000);
  1288.     CreateObject(3461, 4238.900879, -1646.990356, 8.170744, 0.0000, 0.0000, 0.0000);
  1289.     CreateObject(647, 4220.498535, -1634.330566, 11.820221, 0.0000, 0.0000, 36.0963);
  1290.     CreateObject(647, 4226.610840, -1631.568604, 11.744338, 0.0000, 0.0000, 36.0963);
  1291.     CreateObject(647, 4228.044434, -1634.024536, 11.716819, 0.0000, 0.0000, 36.0963);
  1292.     CreateObject(647, 4225.833496, -1633.849365, 11.710730, 0.0000, 0.0000, 36.0963);
  1293.     CreateObject(647, 4233.779785, -1627.340332, 11.941751, 0.0000, 0.0000, 36.0963);
  1294.     CreateObject(647, 4233.659180, -1622.621948, 11.355304, 0.0000, 0.0000, 36.0963);
  1295.     CreateObject(647, 4237.471191, -1627.569702, 11.656716, 0.0000, 0.0000, 36.0963);
  1296.     CreateObject(745, 4212.211914, -1643.980225, 10.378855, 0.0000, 0.0000, 36.0963);
  1297.     CreateObject(745, 4216.067383, -1640.731445, 9.785460, 0.0000, 0.0000, 85.0842);
  1298.     CreateObject(745, 4209.976563, -1637.493042, 9.521328, 0.0000, 0.0000, 48.1285);
  1299.     CreateObject(746, 4209.179688, -1642.461670, 10.980800, 0.0000, 0.0000, 141.8071);
  1300.     CreateObject(879, 4186.029785, -1616.561768, 10.552260, 0.0000, 0.0000, 0.0000);
  1301.     CreateObject(746, 4197.501465, -1642.614380, 11.002655, 0.0000, 0.0000, 0.0000);
  1302.     CreateObject(746, 4206.760254, -1653.833740, 10.899881, 0.0000, 0.0000, 26.6425);
  1303.     return print("** Объекты загружены.");
  1304. }
  1305. IsPlayerInRaceVehicle(playerid){
  1306.     new vehicleid = GetPlayerVehicleID(playerid);
  1307.     if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)return 0;
  1308.     if(rStruct[rCar][0] == vehicleid)return 1;
  1309.     if(rStruct[rCar][1] == vehicleid)return 1;
  1310.     if(rStruct[rCar][2] == vehicleid)return 1;
  1311.     if(rStruct[rCar][3] == vehicleid)return 1;
  1312.     return 0;
  1313. }
  1314. SetPlayerPosEx(playerid,Float:x,Float:y,Float:z,int,vw){
  1315.     SetPlayerPos(playerid,x,y,z);
  1316.     SetPlayerInterior(playerid,int);
  1317.     SetPlayerVirtualWorld(playerid,vw);
  1318. }
  1319.  
  1320. CMD:join(playerid,params[]){
  1321.     if(rStruct[rStage] == RACE_OFF)return SendClientMessage(playerid,color(),"Сначала начните гонку: /startrace");
  1322.     if(rStruct[rStage] == RACE_WORKS)return SendClientMessage(playerid,color(),"Подождите пока закончится гонка.");
  1323.     if(pStruct[playerid][rJoined])return SendClientMessage(playerid,color(),"Вы уже участвуете в гонке!");
  1324.     new str[128];
  1325.     if(rStruct[rPlayers][0] == INVALID_PLAYER_ID){
  1326.         rStruct[rPlayers][0] = playerid;
  1327.         pStruct[playerid][rJoined] = true;
  1328.         format(str,sizeof str,"Race: %s[%d] зарегистрировался в гонке. Нужно еще 3 гонщика.",pStruct[playerid][name],playerid);
  1329.         SendClientMessageToAll(color(),str);
  1330.         return 1;
  1331.     }
  1332.     if(rStruct[rPlayers][1] == INVALID_PLAYER_ID){
  1333.         rStruct[rPlayers][1] = playerid;
  1334.         pStruct[playerid][rJoined] = true;
  1335.         format(str,sizeof str,"Race: %s[%d] зарегистрировался в гонке. Нужно еще 2 гонщика.",pStruct[playerid][name],playerid);
  1336.         SendClientMessageToAll(color(),str);
  1337.         return 1;
  1338.     }
  1339.     if(rStruct[rPlayers][2] == INVALID_PLAYER_ID){
  1340.         rStruct[rPlayers][2] = playerid;
  1341.         pStruct[playerid][rJoined] = true;
  1342.         format(str,sizeof str,"Race: %s[%d] зарегистрировался в гонке. Нужно еще 1 гонщик.",pStruct[playerid][name],playerid);
  1343.         SendClientMessageToAll(color(),str);
  1344.         return 1;
  1345.     }
  1346.     if(rStruct[rPlayers][3] == INVALID_PLAYER_ID){
  1347.         rStruct[rPlayers][3] = playerid;
  1348.         pStruct[playerid][rJoined] = true;
  1349.         format(str,sizeof str,"Race: %s[%d] зарегистрировался в гонке. Начинаем гонку!",pStruct[playerid][name],playerid);
  1350.         SendClientMessageToAll(color(),str);
  1351.         StartRace();
  1352.         return 1;
  1353.     }
  1354.     return 1;
  1355. }
  1356. CMD:startrace(playerid,params[]){
  1357.     if(rStruct[rStage])return SendClientMessage(playerid,color(),"Гонку уже начали войти: /join");
  1358.     if(sscanf(params,"dd",rStruct[rPrice],rStruct[rCarID]))return SendClientMessage(playerid,color(),"CMD: /startrace [price] [carid]");
  1359.     if(rStruct[rPrice] > 10000)return SendClientMessage(playerid,color(),"CMD: Приз не больше 10000$");
  1360.     if(rStruct[rCarID] < 400 || rStruct[rCarID] > 611)return SendClientMessage(playerid,color(),"CMD: Ид авто от 400 до 611");
  1361.     if(IsRaceCar(rStruct[rCarID]))return SendClientMessage(playerid,color(),"CMD: Это авто не подходит для гонки!");
  1362.     rStruct[rStage] = RACE_START;
  1363.     for(new i;i<4;i++)rStruct[rPlayers][i] = INVALID_PLAYER_ID;
  1364.     new str[128];
  1365.     format(str,sizeof str,"Race: Начинаются гонки 1 место приз {00ff00}%d$ На тачках: %s",rStruct[rPrice],CarName[rStruct[rCarID]-400]);
  1366.     SendClientMessageToAll(color(),str);
  1367.     SendClientMessageToAll(color(),"Race: 2 минуты на сборы гонщиков. Участники введите /join");
  1368.     rStruct[rTimer] = SetTimer("CheckRace",2*60000,false);
  1369.     return 1;
  1370. }
  1371. CMD:sethealth(playerid,params[]){
  1372.     if(pStruct[playerid][admin] < 2)return SendClientMessage(playerid,color(),"Команда для администраторов выше 2 уровня!");
  1373.     if(!strlen(params[0]))return SendClientMessage(playerid,color(),"CMD: /sethealth [id] [health]");
  1374.     if(!IsPlayerConnected(strval(params[0])))return SendClientMessage(playerid,color(),"Игрок не подключен!");
  1375.     if(!strlen(params[1]))return SendClientMessage(playerid,color(),"CMD: /sethealth [id] [health]");
  1376.     if(strval(params[1]) > 100)return SendClientMessage(playerid,color(),"Количество жизни не больше 100!");
  1377.     SetPlayerHealth(strval(params[0]),strval(params[1]));
  1378.     new str[48];
  1379.     format(str,sizeof str,"Health: %d",strval(params[1]));
  1380.     GameTextForPlayer(strval(params[0]),str,3000,1);
  1381.     return 1;
  1382. }
  1383. CMD:giveweapon(playerid,params[]){
  1384.     if(pStruct[playerid][admin] < 2)return SendClientMessage(playerid,color(),"Команда для администраторов выше 2 уровня!");
  1385.     if(sscanf(params,"ddd",params[0],params[1],params[2]))return SendClientMessage(playerid,color(),"CMD: /giveweapon [id] [weaponid] [ammo]");
  1386.     if(!IsPlayerConnected(params[0]))return SendClientMessage(playerid,color(),"Игрок не подключен!");
  1387.     if(params[1] > 46)return SendClientMessage(playerid,color(),"Weaponid не больше 46");
  1388.     GiveWeapon(params[0],params[1],params[2]);
  1389.     new str[128],gunname[32];
  1390.     switch(params[1]){
  1391.     case 18:gunname = "Molotov";
  1392.     case 44:gunname = "Night Vis Goggles";
  1393.     case 45:gunname = "Thermal Goggles";
  1394.     default:GetWeaponName(params[1],gunname,sizeof gunname);
  1395.     }
  1396.     format(str,sizeof str,"%s[%d] получил %s патроны: %d",pStruct[params[0]][name],params[0],gunname,params[2]);
  1397.     SendClientMessage(playerid,color(),str);
  1398.     format(str,sizeof str,"Вы получил %s патроны: %d",gunname,params[2]);
  1399.     SendClientMessage(params[0],color(),str);
  1400.     return 1;
  1401. }
  1402. CMD:car(playerid,params[]){
  1403.     if(pStruct[playerid][admin] < 2)return SendClientMessage(playerid,color(),"Команда для администраторов выше 2 уровня!");
  1404.     if(sscanf(params,"ddd",params[0],params[1],params[2]))return SendClientMessage(playerid,color(),"CMD: /car [id] [color1] [color2]");
  1405.     if(params[0] > 611 || params[0] < 400)return SendClientMessage(playerid,color(),"ID не меньше 400 не больше 611!");
  1406.     new str[128],Float:pp[4];
  1407.     GetPlayerPos(playerid,pp[0],pp[1],pp[2]);
  1408.     GetPlayerFacingAngle(playerid,pp[3]);
  1409.     if(pStruct[playerid][CarID] != INVALID_VEHICLE_ID)DestroyVehicle(pStruct[playerid][CarID]);
  1410.     pStruct[playerid][CarID] = CreateVehicle(params[0],pp[0],pp[1],pp[2],pp[3],params[1],params[2],500000);
  1411.     PutPlayerInVehicle(playerid, pStruct[playerid][CarID], 0);
  1412.     format(str,sizeof str,"Наколдовано: %s Model ID: %d",CarName[params[0]-400],params[0]);
  1413.     SendClientMessage(playerid,color(),str);
  1414.     return 1;
  1415. }
  1416. CMD:gmx(playerid,params[]){
  1417.     if(pStruct[playerid][admin] < 5)return SendClientMessage(playerid,color(),"Команда для администраторов выше 5 уровня!");
  1418.    GameModeExit();
  1419.     return 1;
  1420. }
  1421. CMD:mm(playerid,params[]){
  1422.     ShowServerMenu(playerid);
  1423.     return 1;
  1424. }
  1425. CMD:report(playerid,params[]){
  1426.     ShowPlayerDialog(playerid,D_REPORT,DIALOG_STYLE_INPUT,"Сообщение","{ffff00}Введите ваше сообшение администратору","Отправить","Отмена");
  1427.     return 1;
  1428. }
  1429. CMD:unmute(playerid,params[]){
  1430.     if(pStruct[playerid][admin] < 2)return SendClientMessage(playerid,color(),"Команда для администраторов выше 2 уровня");
  1431.     if(sscanf(params,"d",params[0]))return SendClientMessage(playerid,color(),"CMD: /unmute [id]");
  1432.     if(!IsPlayerConnected(params[0]))return SendClientMessage(playerid,color(),"Игрок не подключен!");
  1433.     if(!pStruct[playerid][mute])return SendClientMessage(playerid,color(),"Игрок не заткнут!");
  1434.     pStruct[params[0]][mute] = 1;
  1435.     new str[128];
  1436.     format(str,sizeof str,"Игрок %s[%d] может писать в чат.",pStruct[params[0]][name],params[0]);
  1437.     SendClientMessage(playerid,color(),str);
  1438.     return 1;
  1439. }
  1440. CMD:mute(playerid,params[]){
  1441.     if(pStruct[playerid][admin] < 2)return SendClientMessage(playerid,color(),"Команда для администраторов выше 2 уровня");
  1442.     new reason[64];
  1443.     if(sscanf(params,"ds[64]d",params[0],reason,params[2]))return SendClientMessage(playerid,color(),"CMD: /mute [id] [причина] [время] (в секундах)");
  1444.     if(!IsPlayerConnected(params[0]))return SendClientMessage(playerid,color(),"Игрок не подключен!");
  1445.     if(params[2] < 10)return SendClientMessage(playerid,color(),"Время не меньше 10 секунд.");
  1446.     pStruct[params[0]][mute] = params[2];
  1447.     new str[256];
  1448.     format(str,sizeof str,"Администратор %s[%d] заткнул игрока %s[%d]. Причина: %s На %d секунд.",pStruct[playerid][name],playerid,pStruct[params[0]][name],params[0],reason,params[2]);
  1449.     SendClientMessageToAll(color(),str);
  1450.     return 1;
  1451. }
  1452. CMD:setadmin(playerid,params[]){
  1453.     if(!IsPlayerAdmin(playerid))return SendClientMessage(playerid,color(),"Команда для RCON администраторов!");
  1454.     if(sscanf(params,"dd",params[0],params[1]))return SendClientMessage(playerid,color(),"CMD: /setadmin [id] [lvl]");
  1455.     if(!IsPlayerConnected(params[0]))return SendClientMessage(playerid,color(),"Игрок не подключен!");
  1456.     if(params[1] > 5)return SendClientMessage(playerid,color(),"Админ уровень не больше 5!");
  1457.     pStruct[params[0]][admin] = params[1];
  1458.     new msg[256];
  1459.     format(msg,sizeof msg,"Вы получили админ права уровнем: %d",params[1]);
  1460.     SendClientMessage(params[0],color(),msg);
  1461.     format(msg,sizeof msg,"%s[%d] получил админ права уровнем: %d",pStruct[params[0]][name],params[0],params[1]);
  1462.     SendClientMessage(playerid,color(),msg);
  1463.     return 1;
  1464. }
  1465. CMD:admins(playerid,params[]){
  1466.     new admins[2048],str[64];
  1467.     for(new i;i<MAX_PLAYERS;i++){
  1468.         if(IsPlayerConnected(playerid) && pStruct[i][admin]){
  1469.             format(str,sizeof str,"{00FF00}%s | LVL: %d | ID: %d\n",pStruct[i][name],pStruct[i][admin],i);
  1470.             strcat(admins,str);
  1471.         }
  1472.     }
  1473.     if(!strlen(admins))admins = "Все администраторы offline";
  1474.     ShowPlayerDialog(playerid,D_ADMINS,DIALOG_STYLE_MSGBOX,"Admins online",admins,"Ok","");
  1475.     return 1;
  1476. }
  1477. CMD:freeze(playerid,params[]){
  1478.     if(pStruct[playerid][admin] < 2)return SendClientMessage(playerid,color(),"Команда для администраторов выше 2 уровня");
  1479.     if(sscanf(params,"ds[64]d",params[0],params[1],params[2]))return SendClientMessage(playerid,color(),"CMD: /freeze [id] [reason] [time]");
  1480.     if(!IsPlayerConnected(params[0]))return SendClientMessage(playerid,color(),"Игрок не подключен!");
  1481.     if(params[2] < 10)return SendClientMessage(playerid,color(),"Время не меньше 10 секунд");
  1482.     TogglePlayerControllable(params[0],0);
  1483.     pStruct[params[0]][freeze] = params[2];
  1484.     new str[128];
  1485.     format(str,sizeof str,"Администратор %s[%d] заморозил игрока %s[%d]. Причина: %s Время: %d (сек)",pStruct[playerid][name],playerid,pStruct[params[0]][name],params[0],params[1],params[2]);
  1486.     SendClientMessageToAll(color(),str);
  1487.     return 1;
  1488. }
  1489. CMD:unfreeze(playerid,params[]){
  1490.     if(pStruct[playerid][admin] < 2)return SendClientMessage(playerid,color(),"Команда для администраторов выше 2 уровня");
  1491.     if(sscanf(params,"d",params[0]))return SendClientMessage(playerid,color(),"CMD: /unfreeze [id]");
  1492.     if(!IsPlayerConnected(params[0]))return SendClientMessage(playerid,color(),"Игрок не подключен!");
  1493.     if(!pStruct[playerid][freeze])return SendClientMessage(playerid,color(),"Игрок не заморожен!");
  1494.     pStruct[params[0]][freeze] = 1;
  1495.     new str[128];
  1496.     format(str,sizeof str,"Игрок %s[%d] разморожен.",pStruct[params[0]][name],params[0]);
  1497.     SendClientMessage(playerid,color(),str);
  1498.     return 1;
  1499. }
  1500. CMD:chouse(playerid,params[]){
  1501.     if(pStruct[playerid][admin] < 5)return SendClientMessage(playerid,color(),"Вы не главный администратор!");
  1502.     if(MAX_HOUSES == sStruct[Houses])return SendClientMessage(playerid,color(),"Лимит домов!");
  1503.     if(GetPlayerInterior(playerid) != 0)return SendClientMessage(playerid,color(),"Для создание дома выйдите на улицу!");
  1504.     if(sscanf(params,"dd",params[0],params[1]))return SendClientMessage(playerid,color(),"CMD: /chouse [цена] [интерьер]");
  1505.     if(params[0] > 100000 || params[0] < 10000)return SendClientMessage(playerid,color(),"Цена не меньше 10000$ не больше 100000$");
  1506.     if(params[1] > 8)return SendClientMessage(playerid,color(),"Интерьер от 0 до 9");
  1507.     GetPlayerPos(playerid,hStruct[sStruct[Houses]][hPos][0],hStruct[sStruct[Houses]][hPos][1],hStruct[sStruct[Houses]][hPos][2]);
  1508.     format(hStruct[sStruct[Houses]][hOwner],24,"None");
  1509.     format(hStruct[sStruct[Houses]][hName],24,"None");
  1510.     hStruct[sStruct[Houses]][hCost] = params[0];
  1511.     hStruct[sStruct[Houses]][hInt] = params[1];
  1512.     hStruct[sStruct[Houses]][hLoaded] = true;
  1513.     UpdateHouse(sStruct[Houses]);
  1514.     CreateHouseOnBD(sStruct[Houses]);
  1515.     new str[64];
  1516.     format(str,sizeof str,"House ID: %d | Цена: %d | Интерьер: %d",sStruct[Houses],hStruct[sStruct[Houses]][hCost],hStruct[sStruct[Houses]][hInt]);
  1517.     SendClientMessage(playerid,color(),str);
  1518.     sStruct[Houses]++;
  1519.     return 1;
  1520. }
  1521. CMD:exit(playerid,params[]){
  1522.     if(pStruct[playerid][InHouse] == false)return SendClientMessage(playerid,color(),"Вы не входили в дом!");
  1523.     pStruct[playerid][InHouse] = false;
  1524.     SetPlayerPosEx(playerid,hStruct[pStruct[playerid][CurrenthID]][hPos][0],hStruct[pStruct[playerid][CurrenthID]][hPos][1],hStruct[pStruct[playerid][CurrenthID]][hPos][2],0,0);
  1525.     return 1;
  1526. }
  1527. CMD:savebase(playerid,params[]){
  1528.     if(pStruct[playerid][admin] < 5)return SendClientMessage(playerid,color(),"Вы не главный администратор!");
  1529.     SaveAllHouses();
  1530.     for(new i;i<MAX_PLAYERS;i++)if(IsPlayerConnected(i))Savestructure(i);
  1531.     SendClientMessage(playerid,color(),"База данных успешно сохранена!");
  1532.     return 1;
  1533. }
  1534. CMD:setmoney(playerid,params[]){
  1535.     if(pStruct[playerid][admin] < 4)return SendClientMessage(playerid,color(),"Команда для администраторов выше 4 уровня");
  1536.     if(sscanf(params,"dd",params[0],params[1]))return SendClientMessage(playerid,color(),"CMD: /setmoney [id] [money]");
  1537.     if(!IsPlayerConnected(params[0]))return SendClientMessage(playerid,color(),"Игрок не подключен!");
  1538.     if(params[1] > 1000000)return SendClientMessage(playerid,color(),"Money не больше 1000000");
  1539.     pStruct[params[0]][money] = params[1];
  1540.     new str[256];
  1541.     format(str,256,"Администратор %s[%d] изменил количество ваших денег на: %d",pStruct[playerid][name],playerid,params[1]);
  1542.     SendClientMessage(params[0],color(),str);
  1543.     format(str,128,"%s[%d] Money: %d",pStruct[params[0]][name],params[0],params[1]);
  1544.     SendClientMessage(playerid,color(),str);
  1545.     return 1;
  1546. }
  1547. CMD:givemoney(playerid,params[]){
  1548.     if(sscanf(params,"dd",params[0],params[1]))return SendClientMessage(playerid,color(),"CMD: /givecash [id] [money]");
  1549.     if(!IsPlayerConnected(params[0]))return SendClientMessage(playerid,color(),"Игрок не подключен!");
  1550.     if(pStruct[playerid][money] < params[1])return SendClientMessage(playerid,color(),"У вас нет таких денег!");
  1551.     pStruct[params[0]][money] += params[1];
  1552.     pStruct[playerid][money] -= params[1];
  1553.     new str[128];
  1554.     format(str,sizeof str,"%s[%d] передал вам {00ff00}%d$",pStruct[playerid][name],playerid,params[1]);
  1555.     SendClientMessage(params[0],color(),str);
  1556.     format(str,sizeof str,"%s[%d] получил {00ff00}%d$",pStruct[params[0]][name],params[0],params[1]);
  1557.     SendClientMessage(playerid,color(),str);
  1558.     return 1;
  1559. }
  1560. CMD:goto(playerid,params[]){
  1561.     if(pStruct[playerid][admin] < 3)return SendClientMessage(playerid,color(),"Команда для администратора выше 2 уровня!");
  1562.     if(sscanf(params,"d",params[0]))return SendClientMessage(playerid,color(),"CMD: /goto [id]");
  1563.     if(!IsPlayerConnected(params[0]))return SendClientMessage(playerid,color(),"Игрок не подключен!");
  1564.     new str[128],Float:pos[3],int,vw;
  1565.     GetPlayerPos(params[0],pos[0],pos[1],pos[2]);
  1566.     int = GetPlayerInterior(params[0]);
  1567.     vw = GetPlayerVirtualWorld(params[0]);
  1568.     if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER){
  1569.         new id = GetPlayerVehicleID(playerid);
  1570.         SetVehiclePos(id,pos[0],pos[1],pos[2]);
  1571.         LinkVehicleToInterior(id,int);
  1572.         SetVehicleVirtualWorld(id,vw);
  1573.     }
  1574.     else SetPlayerPosEx(playerid,pos[0],pos[1],pos[2],int,vw);
  1575.     format(str,sizeof str,"Администратор %s[%d] телепортировался к тебе.",pStruct[playerid][name],playerid);
  1576.     SendClientMessage(params[0],color(),str);
  1577.     return 1;
  1578. }
  1579. CMD:get(playerid,params[]){
  1580.     if(pStruct[playerid][admin] < 3)return SendClientMessage(playerid,color(),"Команда для администратора выше 2 уровня!");
  1581.     if(sscanf(params,"d",params[0]))return SendClientMessage(playerid,color(),"CMD: /get [id]");
  1582.     if(!IsPlayerConnected(params[0]))return SendClientMessage(playerid,color(),"Игрок не подключен!");
  1583.     new str[128],Float:pos[3],int,vw;
  1584.     GetPlayerPos(playerid,pos[0],pos[1],pos[2]);
  1585.     int = GetPlayerInterior(playerid);
  1586.     vw = GetPlayerVirtualWorld(playerid);
  1587.     if(GetPlayerState(params[0]) == PLAYER_STATE_DRIVER){
  1588.         new id = GetPlayerVehicleID(params[0]);
  1589.         SetVehiclePos(id,pos[0],pos[1],pos[2]);
  1590.         LinkVehicleToInterior(id,int);
  1591.         SetVehicleVirtualWorld(id,vw);
  1592.     }
  1593.     else SetPlayerPosEx(params[0],pos[0],pos[1],pos[2],int,vw);
  1594.     format(str,sizeof str,"Администратор %s[%d] телепортировал вас к себе.",pStruct[playerid][name],playerid);
  1595.     SendClientMessage(params[0],color(),str);
  1596.     return 1;
  1597. }
  1598. CMD:getinfo(playerid,params[]){
  1599.     if(pStruct[playerid][admin] < 3)return SendClientMessage(playerid,color(),"Команда для администратора выше 2 уровня!");
  1600.     if(sscanf(params,"d",params[0]))return SendClientMessage(playerid,color(),"CMD: /getinfo [id]");
  1601.     if(!IsPlayerConnected(params[0]))return SendClientMessage(playerid,color(),"Игрок не подключен!");
  1602.     ShowPlayerInfo(params[0],playerid);
  1603.     return 1;
  1604. }
  1605. CMD:acmds(playerid,params[]){
  1606.     if(!pStruct[playerid][admin])return SendClientMessage(playerid,color(),"Команда для администраторов.");
  1607.     new text[] = "\
  1608.     {FFFF00}[0] {FFFFFF}/sethealth [id] [health]\n\
  1609.     {FFFF00}[1] {FFFFFF}/giveweapon [id] [weapid] [ammo]\n\
  1610.     {FFFF00}[2] {FFFFFF}/car [modelid] [color1] [color2]\n\
  1611.     {FFFF00}[3] {FFFFFF}/unmute [id]\n\
  1612.     {FFFF00}[4] {FFFFFF}/mute [id] [reason] [time]\n\
  1613.     {FFFF00}[5] {FFFFFF}/freeze [id] [reason] [time]\n\
  1614.     {FFFF00}[6] {FFFFFF}/unfreeze [id]\n\
  1615.     {FFFF00}[7] {FFFFFF}/setmoney [id] [money]\n\
  1616.     {FFFF00}[8] {FFFFFF}/goto [id]\n\
  1617.     {FFFF00}[9] {FFFFFF}/get [id]\n\
  1618.     {FFFF00}[10] {FFFFFF}/getinfo [id]";
  1619.     ShowPlayerDialog(playerid,D_ACMDS,DIALOG_STYLE_MSGBOX,"Админ команды",text,"Okay","");
  1620.     return 1;
  1621. }
  1622. CMD:cmds(playerid,params[]){
  1623.     new text[] = "\
  1624.     {00FF00}[0] {FFFFFF}/join\n\
  1625.     {00FF00}[1] {FFFFFF}/startrace [price] [carid]\n\
  1626.     {00FF00}[2] {FFFFFF}/mm\n\
  1627.     {00FF00}[3] {FFFFFF}/report\n\
  1628.     {00FF00}[4] {FFFFFF}/admins\n\
  1629.     {00FF00}[5] {FFFFFF}/exit\n\
  1630.     {00FF00}[6] {FFFFFF}/givemoney [id] [money]";
  1631.     ShowPlayerDialog(playerid,D_CMDS,DIALOG_STYLE_MSGBOX,"Команды",text,"Okay","");
  1632.     return 1;
  1633. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement