Advertisement
Guest User

Admin System by Nexius v2.8

a guest
Oct 29th, 2021
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Admin System by Nexius v2.8
  2.  
  3. #if defined _admsys_included
  4.     #endinput
  5. #endif
  6. #define _admsys_included
  7.  
  8. #include <a_samp>
  9.  
  10. #define ADMSYS_VERSION                      "2.8"
  11.  
  12. #if !defined ADMSYS_SHOW_KILL_LIST_FOR_ADM
  13.     #define ADMSYS_SHOW_KILL_LIST_FOR_ADM       true
  14. #endif
  15.  
  16. #if !defined ADMSYS_SEND_ACTION_MSGS_TO_ALL
  17.     #define ADMSYS_SEND_ACTION_MSGS_TO_ALL      false
  18. #endif
  19.  
  20. #if !defined ADMSYS_SEND_CONNECT_MSGS_TO_ADM
  21.     #define ADMSYS_SEND_CONNECT_MSGS_TO_ADM     false
  22. #endif
  23.  
  24. #if ADMSYS_SEND_CONNECT_MSGS_TO_ADM
  25.     #if !defined ADMSYS_CONNECT_MSG_COLOR
  26.         #define ADMSYS_CONNECT_MSG_COLOR    0xA9C4E4FF
  27.     #endif
  28. #endif
  29.  
  30. #if !defined ADMSYS_DEFAULT_COLOR
  31.     #define ADMSYS_DEFAULT_COLOR            0xFFFFFFFF
  32. #endif
  33.  
  34. #if !defined ADMSYS_ADM_CHAT_COLOR
  35.     #define ADMSYS_ADM_CHAT_COLOR           0x88AA62FF
  36. #endif
  37.  
  38. #if !defined ADMSYS_ADM_ACTION_COLOR
  39.     #define ADMSYS_ADM_ACTION_COLOR         0x2587CEFF
  40. #endif
  41.  
  42. #if !defined ADMSYS_REPORT_COLOR
  43.     #define ADMSYS_REPORT_COLOR             0xB9C9BFFF
  44. #endif
  45.  
  46. #if !defined ADMSYS_CMD_HELPER_COLOR
  47.     #define ADMSYS_CMD_HELPER_COLOR         0xD2D2D2FF
  48. #endif
  49.  
  50. #if !defined ADMSYS_ERROR_COLOR
  51.     #define ADMSYS_ERROR_COLOR              0xBB9999FF
  52. #endif
  53.  
  54. #if !defined ADMSYS_MAX_WARNS
  55.     #define ADMSYS_MAX_WARNS                2
  56. #endif
  57.  
  58. #if !defined ADMSYS_MAX_TAB_INPUT
  59.     #define ADMSYS_MAX_TAB_INPUT            8
  60. #endif
  61.  
  62. #if !defined ADMSYS_MAX_SUSPECTS_IN_TABLE
  63.     #define ADMSYS_MAX_SUSPECTS_IN_TABLE        8
  64. #endif
  65.  
  66. #if !defined ADMSYS_MAX_GIVE_PLAYERS_IN_CMD
  67.     #define ADMSYS_MAX_GIVE_PLAYERS_IN_CMD      3
  68. #endif
  69.  
  70. #define admsys_isnull(%0) ((!(%0[0])) || (((%0[0]) == '\1') && (!(%0[1]))))
  71. #define admsys_fpublic%0(%1) forward %0(%1); public %0(%1)
  72.  
  73. #if !defined CMD
  74.     #define CMD:%0(%1) forward cmd_%0(%1); public cmd_%0(%1)
  75. #endif
  76.  
  77. static const AdmSys1LvlCmds[][] =
  78. {
  79.     "Уровень 1:\n",
  80.     "/achat [текст] - Админ чат\n",
  81.     "/ahelp - Помощь по админ командам\n",
  82.     "/showstats [id] - Показать статистику игрока\n",
  83.     "/answer [id] [текст] - Ответить игроку на report\n",
  84.     "/apanel - Админ-панель со всеми доступными командами\n",
  85.     "/admins - Список администраторов онлайн\n",
  86.     "/eject [id] - Высадить игрока из транспорта"
  87. },
  88.  
  89. AdmSys2LvlCmds[][] =
  90. {
  91.     "Уровень 2:\n",
  92.     "/spec [id] - Войти в режим наблюдения за игроком\n",
  93.     "/spawnveh [id транспорта] - Телепортировать транспорт на респавн\n",
  94.     "/(un)mute [id] [время] [причина] - Выдать/снять с игрока молчанку\n",
  95.     "/asay [текст] - Сообщение в формате: 'Администратор: [текст]'\n",
  96.     "/warn [id] [причина] - Выдать предупреждение игроку\n",
  97.     "/kick [id] [причина] - Выкинуть игрока с сервера\n",
  98.     "/(un)freeze [id] - Заморозить/разморозить игрока\n",
  99.     "/slap [id] [причина] - Дать пинка игроку\n",
  100.     "/goto [id] - Телепортироваться к игроку"
  101. },
  102.  
  103. AdmSys3LvlCmds[][] =
  104. {
  105.     "Уровень 3:\n",
  106.     "/suspectlist - Список подозреваемых игроков\n",
  107.     "/gethere [id] - Телепортировать игрока к себе\n",
  108.     "/gotoveh [id транспорта] - Телепортироваться к транспорту\n",
  109.     "/gotopos [x] [y] [z] - Телепортироваться на координаты\n",
  110.     "/ban [id] [причина] - Заблокировать аккаунт игрока\n",
  111.     "/gmtest [id] - Проверка на бесконечное здоровье\n",
  112.     "/spawn [id] - Телепортировать игрока на респавн\n",
  113.     "/unwarn [id] - Снять предупреждение с игрока\n",
  114.     "/banip [IP] - Блокировка IP-адреса\n",
  115.     "/cc - Очистка чата"
  116. },
  117.  
  118. AdmSys4LvlCmds[][] =
  119. {
  120.     "Уровень 4:\n",
  121.     "/sethealth [id] [здоровье] - Установить здоровье игроку\n",
  122.     "/setarmour [id] [броня] - Установить броню игроку\n",
  123.     "/setmoney [id] [деньги] - Установить деньги игроку\n",
  124.     "/givemoney [id] [деньги] - Выдать деньги игроку\n",
  125.     "/setscore [id] [очки] - Установить очки (уровень) игроку\n",
  126.     "/setskin [id] [id скина] - Установить скин игроку\n",
  127.     "/setint [id] [интерьер] - Установить игроку интерьер\n",
  128.     "/setvw [id] [номер] - Установить игроку виртуальный мир\n",
  129.     "/giveweapon [id] [оружие] [патроны] - Выдать игроку оружие\n",
  130.     "/repairveh [id транспорта] - Отремонтировать транспорт\n",
  131.     "/unbanip [IP] - Разблокировать IP-адрес"
  132. },
  133.  
  134. AdmSys5LvlCmds[][] =
  135. {
  136.     "Уровень 5:\n",
  137.     "/getall - Телепортировать всех к себе\n",
  138.     "/setweather [номер] - Установить погоду\n",
  139.     "/settime [час] - Установить время суток\n",
  140.     "/destroyveh [id транспорта] - Уничтожить транспорт\n",
  141.     "/veh [id транспорта] [цвет 1] [цвет 2] - Создать транспорт\n",
  142.     "/sban [id] - Тихая блокировка\n",
  143.     "/skick [id] - Тихий кик"
  144. };
  145.  
  146. enum
  147. {
  148.     ADMSYS_DIALOG_TAB_PANEL = 8192,
  149.     ADMSYS_DIALOG_ANSWER,
  150.     ADMSYS_DIALOG_MUTE_TIME,
  151.     ADMSYS_DIALOG_MUTE,
  152.     ADMSYS_DIALOG_WARN,
  153.     ADMSYS_DIALOG_KICK,
  154.     ADMSYS_DIALOG_SLAP,
  155.     ADMSYS_DIALOG_BAN,
  156.     ADMSYS_DIALOG_SET_HEALTH,
  157.     ADMSYS_DIALOG_SET_ARMOUR,
  158.     ADMSYS_DIALOG_SET_MONEY,
  159.     ADMSYS_DIALOG_GIVE_MONEY,
  160.     ADMSYS_DIALOG_SET_SCORE,
  161.     ADMSYS_DIALOG_CHANGE_SKIN,
  162.     ADMSYS_DIALOG_SET_INT,
  163.     ADMSYS_DIALOG_SET_VW,
  164.     ADMSYS_DIALOG_GIVE_WEAPON,
  165.     ADMSYS_DIALOG_GIVE_WEAPON_AMMO,
  166.     ADMSYS_DIALOG_AHELP_LVL_1,
  167.     ADMSYS_DIALOG_AHELP_LVL_2,
  168.     ADMSYS_DIALOG_AHELP_LVL_3,
  169.     ADMSYS_DIALOG_AHELP_LVL_4,
  170.     ADMSYS_DIALOG_AHELP_LVL_5,
  171.     ADMSYS_DIALOG_STATS,
  172.     ADMSYS_DIALOG_APANEL,
  173.     ADMSYS_DIALOG_ACHAT,
  174.     ADMSYS_DIALOG_SPAWN_VEH,
  175.     ADMSYS_DIALOG_ASAY,
  176.     ADMSYS_DIALOG_GOTO_VEH,
  177.     ADMSYS_DIALOG_GOTO_POS,
  178.     ADMSYS_DIALOG_BAN_IP,
  179.     ADMSYS_DIALOG_REPAIR_VEH,
  180.     ADMSYS_DIALOG_UNBAN_IP,
  181.     ADMSYS_DIALOG_SET_WEATHER,
  182.     ADMSYS_DIALOG_SET_TIME,
  183.     ADMSYS_DIALOG_DESTROY_VEH,
  184.     ADMSYS_DIALOG_CREATE_VEH,
  185.     ADMSYS_DIALOG_CREATE_VEH_COL_1,
  186.     ADMSYS_DIALOG_CREATE_VEH_COL_2,
  187.     ADMSYS_DIALOG_ADMINS,
  188.     ADMSYS_DIALOG_SUSPECT_LIST,
  189.     ADMSYS_DIALOG_GMTEST
  190. }
  191.  
  192. enum asInfo
  193. {
  194.     Float:asGmTestHP,
  195.     Float:asGmTestAR,
  196.     Float:asLastAngle,
  197.     Float:asLastPos[3],
  198.     Float:asLastFloatData,
  199.     asInput[ADMSYS_MAX_TAB_INPUT],
  200.     asInput2[ADMSYS_MAX_TAB_INPUT],
  201.     asLastWeapon[13],
  202.     asLastIntData[2],
  203.     asLastAmmo[13],
  204.     asLastActionID,
  205.     asLastAction,
  206.     asLastSpecID,
  207.     asGmTestID,
  208.     asAdminLvl,
  209.     asTabPanel,
  210.     asMuteTime,
  211.     asWarns,
  212.     asSpecID,
  213.     asLastVW,
  214.     asLastInt,
  215.     asUpdTimer,
  216.     bool:asLastSpec,
  217.     bool:asIsSpawned,
  218.     bool:asIsDead,
  219.     bool:asGmTest
  220. }
  221.  
  222. static
  223.     AdmSysInfo[MAX_PLAYERS][asInfo],
  224.     SuspectList[ADMSYS_MAX_SUSPECTS_IN_TABLE] = {INVALID_PLAYER_ID, ...},
  225.  
  226.     AdmSys1LvlCmdsStr[303],
  227.     AdmSys2LvlCmdsStr[484],
  228.     AdmSys3LvlCmdsStr[460],
  229.     AdmSys4LvlCmdsStr[586],
  230.     AdmSys5LvlCmdsStr[293];
  231.  
  232. forward OnPlayerBan(playerid, gaveid, bool:sban);
  233. forward OnPlayerKick(playerid, gaveid, bool:skick);
  234. forward OnPlayerWarn(playerid, gaveid, count);
  235.  
  236. public OnGameModeInit()
  237. {
  238.     print(" ");
  239.     print(" Admin System by Nexius loaded!");
  240.     printf(" Version: %s", ADMSYS_VERSION);
  241.     print(" ");
  242.     for(new i; i < sizeof AdmSys1LvlCmds; i++) strcat(AdmSys1LvlCmdsStr, AdmSys1LvlCmds[i]);
  243.     for(new i; i < sizeof AdmSys2LvlCmds; i++) strcat(AdmSys2LvlCmdsStr, AdmSys2LvlCmds[i]);
  244.     for(new i; i < sizeof AdmSys3LvlCmds; i++) strcat(AdmSys3LvlCmdsStr, AdmSys3LvlCmds[i]);
  245.     for(new i; i < sizeof AdmSys4LvlCmds; i++) strcat(AdmSys4LvlCmdsStr, AdmSys4LvlCmds[i]);
  246.     for(new i; i < sizeof AdmSys5LvlCmds; i++) strcat(AdmSys5LvlCmdsStr, AdmSys5LvlCmds[i]);
  247.     SetTimer("UpdateMuteTime", 1000, 1);
  248.     #if defined admsys_OnGameModeInit
  249.         return admsys_OnGameModeInit();
  250.     #else
  251.         return 1;
  252.     #endif
  253. }
  254.  
  255. #if defined _ALS_OnGameModeInit
  256.     #undef OnGameModeInit
  257. #else
  258.     #define _ALS_OnGameModeInit
  259. #endif
  260. #define OnGameModeInit admsys_OnGameModeInit
  261. #if defined admsys_OnGameModeInit
  262.     forward admsys_OnGameModeInit();
  263. #endif
  264.  
  265. public OnGameModeExit()
  266. {
  267.     print(" ");
  268.     print(" Admin System by Nexius unloaded!");
  269.     print(" ");
  270.     #if defined admsys_OnGameModeExit
  271.         return admsys_OnGameModeExit();
  272.     #else
  273.         return 1;
  274.     #endif
  275. }
  276.  
  277. #if defined _ALS_OnGameModeExit
  278.     #undef OnGameModeExit
  279. #else
  280.     #define _ALS_OnGameModeExit
  281. #endif
  282. #define OnGameModeExit admsys_OnGameModeExit
  283. #if defined admsys_OnGameModeExit
  284.     forward admsys_OnGameModeExit();
  285. #endif
  286.  
  287. public OnPlayerConnect(playerid)
  288. {
  289.     AdmSysInfo[playerid][asWarns] = 0;
  290.     AdmSysInfo[playerid][asMuteTime] = 0;
  291.     AdmSysInfo[playerid][asAdminLvl] = 0;
  292.     AdmSysInfo[playerid][asUpdTimer] = -1;
  293.     AdmSysInfo[playerid][asSpecID] = INVALID_PLAYER_ID;
  294.     AdmSysInfo[playerid][asLastSpecID] = INVALID_PLAYER_ID;
  295.     AdmSysInfo[playerid][asGmTestID] = INVALID_PLAYER_ID;
  296.     AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
  297.     AdmSysInfo[playerid][asIsSpawned] = false;
  298.     AdmSysInfo[playerid][asIsDead] = false;
  299.     AdmSysInfo[playerid][asGmTest] = false;
  300.     #if ADMSYS_SEND_CONNECT_MSGS_TO_ADM
  301.         new strtmp[78], sname[MAX_PLAYER_NAME + 1], sip[16];
  302.         GetPlayerName(playerid, sname, sizeof sname);
  303.         GetPlayerIp(playerid, sip, sizeof sip);
  304.         format(strtmp, sizeof strtmp, "[IP: %s] %s[%d] подключился к серверу", sip, sname, playerid);
  305.         SendMessageToAdmins(1, ADMSYS_CONNECT_MSG_COLOR, strtmp);
  306.     #endif
  307.     #if defined admsys_OnPlayerConnect
  308.         return admsys_OnPlayerConnect(playerid);
  309.     #else
  310.         return 1;
  311.     #endif
  312. }
  313.  
  314. #if defined _ALS_OnPlayerConnect
  315.     #undef OnPlayerConnect
  316. #else
  317.     #define _ALS_OnPlayerConnect
  318. #endif
  319. #define OnPlayerConnect admsys_OnPlayerConnect
  320. #if defined admsys_OnPlayerConnect
  321.     forward admsys_OnPlayerConnect(playerid);
  322. #endif
  323.  
  324. public OnPlayerDisconnect(playerid, reason)
  325. {
  326.     AdmSysInfo[playerid][asLastAction] = 0;
  327.     KillTimer(AdmSysInfo[playerid][asUpdTimer]);
  328.     #if defined foreach
  329.         foreach(new i : Player)
  330.         {
  331.     #else
  332.         for(new i = GetPlayerPoolSize(); i >= 0; --i)
  333.         {
  334.             if(!IsPlayerConnected(i)) continue;
  335.     #endif
  336.         if(AdmSysInfo[i][asSpecID] == playerid)
  337.         {
  338.             SendClientMessage(i, ADMSYS_ERROR_COLOR, "Игрок отключился");
  339.             StopSpectating(i);
  340.         }
  341.     }
  342.     #if defined admsys_OnPlayerDisconnect
  343.         return admsys_OnPlayerDisconnect(playerid, reason);
  344.     #else
  345.         return 1;
  346.     #endif
  347. }
  348.  
  349. #if defined _ALS_OnPlayerDisconnect
  350.     #undef OnPlayerDisconnect
  351. #else
  352.     #define _ALS_OnPlayerDisconnect
  353. #endif
  354. #define OnPlayerDisconnect admsys_OnPlayerDisconnect
  355. #if defined admsys_OnPlayerDisconnect
  356.     forward admsys_OnPlayerDisconnect(playerid, reason);
  357. #endif
  358.  
  359. public OnPlayerSpawn(playerid)
  360. {
  361.     if(IsPlayerSpectating(playerid))
  362.     {
  363.         for(new i = 12; i >= 0; --i)
  364.             GivePlayerWeapon(playerid, AdmSysInfo[playerid][asLastWeapon][i], AdmSysInfo[playerid][asLastAmmo][i]);
  365.         SetPlayerPos(playerid, AdmSysInfo[playerid][asLastPos][0],
  366.         AdmSysInfo[playerid][asLastPos][1], AdmSysInfo[playerid][asLastPos][2]);
  367.         SetPlayerFacingAngle(playerid, AdmSysInfo[playerid][asLastAngle]);
  368.         SetPlayerVirtualWorld(playerid, AdmSysInfo[playerid][asLastVW]);
  369.         SetPlayerInterior(playerid, AdmSysInfo[playerid][asLastInt]);
  370.     }
  371.     AdmSysInfo[playerid][asSpecID] = INVALID_PLAYER_ID;
  372.     AdmSysInfo[playerid][asLastSpecID] = INVALID_PLAYER_ID;
  373.     AdmSysInfo[playerid][asIsSpawned] = true;
  374.     AdmSysInfo[playerid][asLastSpec] = false;
  375.     AdmSysInfo[playerid][asIsDead] = false;
  376.     #if defined foreach
  377.         foreach(new i : Player)
  378.         {
  379.     #else
  380.         for(new i = GetPlayerPoolSize(); i >= 0; --i)
  381.         {
  382.             if(!IsPlayerConnected(i)) continue;
  383.     #endif
  384.         if(AdmSysInfo[i][asSpecID] == playerid) UpdateSpectating(i);
  385.     }
  386.     #if defined admsys_OnPlayerSpawn
  387.         return admsys_OnPlayerSpawn(playerid);
  388.     #else
  389.         return 1;
  390.     #endif
  391. }
  392.  
  393. #if defined _ALS_OnPlayerSpawn
  394.     #undef OnPlayerSpawn
  395. #else
  396.     #define _ALS_OnPlayerSpawn
  397. #endif
  398. #define OnPlayerSpawn admsys_OnPlayerSpawn
  399. #if defined admsys_OnPlayerSpawn
  400.     forward admsys_OnPlayerSpawn(playerid);
  401. #endif
  402.  
  403. public OnPlayerDeath(playerid, killerid, reason)
  404. {
  405.     new interior, vw;
  406.     interior = GetPlayerInterior(playerid);
  407.     vw = GetPlayerVirtualWorld(playerid);
  408.     #if defined foreach
  409.     foreach(new i : Player)
  410.     {
  411.     #else
  412.     for(new i = GetPlayerPoolSize(); i >= 0; --i)
  413.     {
  414.         if(!IsPlayerConnected(i)) continue;
  415.     #endif
  416.         if(AdmSysInfo[i][asSpecID] == playerid)
  417.         {
  418.             SendClientMessage(i, ADMSYS_ERROR_COLOR, "Игрок умер");
  419.             SetPlayerInterior(i, interior);
  420.             SetPlayerVirtualWorld(i, vw);
  421.         }
  422.         #if ADMSYS_SHOW_KILL_LIST_FOR_ADM
  423.             if(IsPlayerAdminEx(i)) SendDeathMessageToPlayer(i, killerid, playerid, reason);
  424.         #endif
  425.     }
  426.     AdmSysInfo[playerid][asIsSpawned] = false;
  427.     AdmSysInfo[playerid][asIsDead] = true;
  428.     #if defined admsys_OnPlayerDeath
  429.         return admsys_OnPlayerDeath(playerid, killerid, reason);
  430.     #else
  431.         return 1;
  432.     #endif
  433. }
  434.  
  435. #if defined _ALS_OnPlayerDeath
  436.     #undef OnPlayerDeath
  437. #else
  438.     #define _ALS_OnPlayerDeath
  439. #endif
  440. #define OnPlayerDeath admsys_OnPlayerDeath
  441. #if defined admsys_OnPlayerDeath
  442.     forward admsys_OnPlayerDeath(playerid, killerid, reason);
  443. #endif
  444.  
  445. public OnPlayerText(playerid, text[])
  446. {
  447.     static strtmp[61];
  448.     if(AdmSysInfo[playerid][asMuteTime] > 0)
  449.     {
  450.         format(strtmp, sizeof strtmp, "Вы заглушены. До конца молчанки осталось %d минут %d секунд",
  451.         floatround(AdmSysInfo[playerid][asMuteTime] / 60, floatround_tozero), AdmSysInfo[playerid][asMuteTime] % 60);
  452.         SendClientMessage(playerid, ADMSYS_ERROR_COLOR, strtmp);
  453.         return 0;
  454.     }
  455.     #if defined admsys_OnPlayerText
  456.         return admsys_OnPlayerText(playerid, text);
  457.     #else
  458.         return 1;
  459.     #endif
  460. }
  461.  
  462. #if defined _ALS_OnPlayerText
  463.     #undef OnPlayerText
  464. #else
  465.     #define _ALS_OnPlayerText
  466. #endif
  467. #define OnPlayerText admsys_OnPlayerText
  468. #if defined admsys_OnPlayerText
  469.     forward admsys_OnPlayerText(playerid, text[]);
  470. #endif
  471.  
  472. #if !defined YCMD && !defined _I_ZCMD_INCLUDED
  473.     public OnPlayerCommandText(playerid, cmdtext[])
  474.     {
  475.         new cmd[32], pos;
  476.         static params[126];
  477.         params[0] = EOS;
  478.         while(cmdtext[pos] > ' ')
  479.         {
  480.             cmd[pos] = cmdtext[pos];
  481.             pos++;
  482.         }
  483.         while(cmdtext[pos] == ' ')
  484.         {
  485.             pos++;
  486.             if(cmdtext[pos] == '\0')
  487.             {
  488.                 params = "\1";
  489.                 break;
  490.             }
  491.         }
  492.         strcat(params, cmdtext[pos]);
  493.         if(!strcmp(cmd, "/report", true)) return admsys_cmd_report(playerid, params);
  494.         if(!strcmp(cmd, "/achat", true) || !strcmp(cmd, "/admchat", true) || !strcmp(cmd, "/adminchat", true)) return admsys_cmd_achat(playerid, params);
  495.         if(!strcmp(cmd, "/ahelp", true) || !strcmp(cmd, "/admhelp", true) || !strcmp(cmd, "/adminhelp", true)) return admsys_cmd_ahelp(playerid, params);
  496.         if(!strcmp(cmd, "/showstats", true)) return admsys_cmd_showstats(playerid, params);
  497.         if(!strcmp(cmd, "/answer", true)) return admsys_cmd_answer(playerid, params);
  498.         if(!strcmp(cmd, "/apanel", true) || !strcmp(cmd, "/admpanel", true) || !strcmp(cmd, "/adminpanel", true)) return admsys_cmd_apanel(playerid, params);
  499.         if(!strcmp(cmd, "/admins", true)) return admsys_cmd_admins(playerid, params);
  500.         if(!strcmp(cmd, "/eject", true)) return admsys_cmd_eject(playerid, params);
  501.  
  502.         if(!strcmp(cmd, "/spec", true)) return admsys_cmd_spec(playerid, params);
  503.         if(!strcmp(cmd, "/specupdate", true)) return admsys_cmd_specupdate(playerid, params);
  504.         if(!strcmp(cmd, "/specoff", true)) return admsys_cmd_specoff(playerid, params);
  505.         if(!strcmp(cmd, "/spawnveh", true) || !strcmp(cmd, "/spawnvehicle", true)) return admsys_cmd_spawnveh(playerid, params);
  506.         if(!strcmp(cmd, "/mute", true)) return admsys_cmd_mute(playerid, params);
  507.         if(!strcmp(cmd, "/unmute", true)) return admsys_cmd_unmute(playerid, params);
  508.         if(!strcmp(cmd, "/asay", true) || !strcmp(cmd, "/admsay", true) || !strcmp(cmd, "/adminsay", true)) return admsys_cmd_asay(playerid, params);
  509.         if(!strcmp(cmd, "/warn", true)) return admsys_cmd_warn(playerid, params);
  510.         if(!strcmp(cmd, "/kick", true)) return admsys_cmd_kick(playerid, params);
  511.         if(!strcmp(cmd, "/freeze", true)) return admsys_cmd_freeze(playerid, params);
  512.         if(!strcmp(cmd, "/unfreeze", true)) return admsys_cmd_unfreeze(playerid, params);
  513.         if(!strcmp(cmd, "/slap", true)) return admsys_cmd_slap(playerid, params);
  514.         if(!strcmp(cmd, "/goto", true)) return admsys_cmd_goto(playerid, params);
  515.  
  516.         if(!strcmp(cmd, "/suspectlist", true)) return admsys_cmd_suspectlist(playerid, params);
  517.         if(!strcmp(cmd, "/gethere", true) || !strcmp(cmd, "/get", true)) return admsys_cmd_gethere(playerid, params);
  518.         if(!strcmp(cmd, "/gotoveh", true) || !strcmp(cmd, "/gotovehicle", true)) return admsys_cmd_gotoveh(playerid, params);
  519.         if(!strcmp(cmd, "/gotopos", true) || !strcmp(cmd, "/gotoposition", true)) return admsys_cmd_gotopos(playerid, params);
  520.         if(!strcmp(cmd, "/ban", true)) return admsys_cmd_ban(playerid, params);
  521.         if(!strcmp(cmd, "/gmtest", true)) return admsys_cmd_gmtest(playerid, params);
  522.         if(!strcmp(cmd, "/spawn", true)) return admsys_cmd_spawn(playerid, params);
  523.         if(!strcmp(cmd, "/unwarn", true)) return admsys_cmd_unwarn(playerid, params);
  524.         if(!strcmp(cmd, "/banip", true) || !strcmp(cmd, "/blockip", true)) return admsys_cmd_banip(playerid, params);
  525.         if(!strcmp(cmd, "/cc", true) || !strcmp(cmd, "/clearchat", true)) return admsys_cmd_cc(playerid, params);
  526.  
  527.         if(!strcmp(cmd, "/sethealth", true)) return admsys_cmd_sethealth(playerid, params);
  528.         if(!strcmp(cmd, "/setarmour", true)) return admsys_cmd_setarmour(playerid, params);
  529.         if(!strcmp(cmd, "/setmoney", true)) return admsys_cmd_setmoney(playerid, params);
  530.         if(!strcmp(cmd, "/givemoney", true)) return admsys_cmd_givemoney(playerid, params);
  531.         if(!strcmp(cmd, "/setscore", true)) return admsys_cmd_setscore(playerid, params);
  532.         if(!strcmp(cmd, "/setskin", true)) return admsys_cmd_setskin(playerid, params);
  533.         if(!strcmp(cmd, "/setint", true) || !strcmp(cmd, "/setinterior", true)) return admsys_cmd_setint(playerid, params);
  534.         if(!strcmp(cmd, "/setvw", true) || !strcmp(cmd, "/setvirtualworld", true)) return admsys_cmd_setvw(playerid, params);
  535.         if(!strcmp(cmd, "/giveweapon", true)) return admsys_cmd_giveweapon(playerid, params);
  536.         if(!strcmp(cmd, "/repairveh", true) || !strcmp(cmd, "/repairvehicle", true)) return admsys_cmd_repairveh(playerid, params);
  537.         if(!strcmp(cmd, "/unbanip", true) || !strcmp(cmd, "/unblockip", true)) return admsys_cmd_unbanip(playerid, params);
  538.  
  539.         if(!strcmp(cmd, "/setweather", true)) return admsys_cmd_setweather(playerid, params);
  540.         if(!strcmp(cmd, "/getall", true)) return admsys_cmd_getall(playerid, params);
  541.         if(!strcmp(cmd, "/settime", true)) return admsys_cmd_settime(playerid, params);
  542.         if(!strcmp(cmd, "/destroyveh", true) || !strcmp(cmd, "/destroyvehicle", true)) return admsys_cmd_destroyveh(playerid, params);
  543.         if(!strcmp(cmd, "/veh", true) || !strcmp(cmd, "/vehicle", true)) return admsys_cmd_veh(playerid, params);
  544.         if(!strcmp(cmd, "/sban", true) || !strcmp(cmd, "/silentban", true)) return admsys_cmd_sban(playerid, params);
  545.         if(!strcmp(cmd, "/skick", true) || !strcmp(cmd, "/silentkick", true)) return admsys_cmd_skick(playerid, params);
  546.         #if defined admsys_OnPlayerCommandText
  547.             return admsys_OnPlayerCommandText(playerid, cmdtext);
  548.         #else
  549.             return 0;
  550.         #endif
  551.     }
  552.  
  553.     #if defined _ALS_OnPlayerCommandText
  554.         #undef OnPlayerCommandText
  555.     #else
  556.         #define _ALS_OnPlayerCommandText
  557.     #endif
  558.     #define OnPlayerCommandText admsys_OnPlayerCommandText
  559.     #if defined admsys_OnPlayerCommandText
  560.         forward admsys_OnPlayerCommandText(playerid, cmdtext[]);
  561.     #endif
  562. #endif
  563.  
  564. public OnPlayerStateChange(playerid, newstate, oldstate)
  565. {
  566.     if(newstate == PLAYER_STATE_SPECTATING)
  567.     {
  568.         #if defined foreach
  569.             foreach(new i : Player)
  570.             {
  571.         #else
  572.             for(new i = GetPlayerPoolSize(); i >= 0; --i)
  573.             {
  574.                 if(!IsPlayerConnected(i)) continue;
  575.         #endif
  576.             if(AdmSysInfo[i][asSpecID] == playerid)
  577.             {
  578.                 SendClientMessage(i, ADMSYS_ERROR_COLOR, "Игрок в режиме наблюдения");
  579.                 StopSpectating(i);
  580.             }
  581.         }
  582.     }
  583.     else if(PLAYER_STATE_DRIVER <= newstate <= PLAYER_STATE_PASSENGER || PLAYER_STATE_DRIVER <= oldstate <= PLAYER_STATE_PASSENGER)
  584.     {
  585.         #if defined foreach
  586.             foreach(new i : Player)
  587.             {
  588.         #else
  589.             for(new i = GetPlayerPoolSize(); i >= 0; --i)
  590.             {
  591.                 if(!IsPlayerConnected(i)) continue;
  592.         #endif
  593.             if(AdmSysInfo[i][asSpecID] == playerid) UpdateSpectating(i);
  594.         }
  595.     }
  596.     #if defined admsys_OnPlayerStateChange
  597.         return admsys_OnPlayerStateChange(playerid, newstate, oldstate);
  598.     #else
  599.         return 1;
  600.     #endif
  601. }
  602.  
  603. #if defined _ALS_OnPlayerStateChange
  604.     #undef OnPlayerStateChange
  605. #else
  606.     #define _ALS_OnPlayerStateChange
  607. #endif
  608. #define OnPlayerStateChange admsys_OnPlayerStateChange
  609. #if defined admsys_OnPlayerStateChange
  610.     forward admsys_OnPlayerStateChange(playerid, newstate, oldstate);
  611. #endif
  612.  
  613. public OnPlayerUpdate(playerid)
  614. {
  615.     if(GetPlayerState(playerid) == PLAYER_STATE_SPECTATING &&
  616.     AdmSysInfo[playerid][asSpecID] != INVALID_PLAYER_ID && AdmSysInfo[AdmSysInfo[playerid][asSpecID]][asIsDead])
  617.     {
  618.         new Float:pX, Float:pY, Float:pZ, Float:cX, Float:cY, Float:cZ;
  619.         GetPlayerCameraPos(AdmSysInfo[playerid][asSpecID], cX, cY, cZ);
  620.         GetPlayerPos(AdmSysInfo[playerid][asSpecID], pX, pY, pZ);
  621.         SetPlayerCameraPos(playerid, cX, cY, cZ);
  622.         SetPlayerCameraLookAt(playerid, pX, pY, pZ);
  623.     }
  624.     #if defined admsys_OnPlayerUpdate
  625.         return admsys_OnPlayerUpdate(playerid);
  626.     #else
  627.         return 1;
  628.     #endif
  629. }
  630.  
  631. #if defined _ALS_OnPlayerUpdate
  632.     #undef OnPlayerUpdate
  633. #else
  634.     #define _ALS_OnPlayerUpdate
  635. #endif
  636. #define OnPlayerUpdate admsys_OnPlayerUpdate
  637. #if defined admsys_OnPlayerUpdate
  638.     forward admsys_OnPlayerUpdate(playerid);
  639. #endif
  640.  
  641. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  642. {
  643.     switch(dialogid)
  644.     {
  645.         case ADMSYS_DIALOG_TAB_PANEL:
  646.         {
  647.             if(response)
  648.             {
  649.                 static strtmp[3];
  650.                 format(strtmp, sizeof strtmp, "%d", AdmSysInfo[playerid][asTabPanel]);
  651.                 switch(listitem)
  652.                 {
  653.                     case 0: admsys_cmd_showstats(playerid, strtmp);
  654.                     case 1:
  655.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_ANSWER, DIALOG_STYLE_INPUT, "Ответить на report", "Введите ответ на report:", "Ок", "Закрыть");
  656.                     case 2: admsys_cmd_eject(playerid, strtmp);
  657.                     case 3: admsys_cmd_spec(playerid, strtmp);
  658.                     case 4:
  659.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_MUTE_TIME, DIALOG_STYLE_INPUT, "Выдать молчанку", "Введите время молчанки:", "Ок", "Закрыть");
  660.                     case 5: admsys_cmd_unmute(playerid, strtmp);
  661.                     case 6:
  662.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_WARN, DIALOG_STYLE_INPUT, "Выдать предупреждение", "Введите причину выдачи предупреждения:", "Ок", "Закрыть");
  663.                     case 7:
  664.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_KICK, DIALOG_STYLE_INPUT, "Выкинуть с сервера", "Введите причину кика:", "Ок", "Закрыть");
  665.                     case 8: admsys_cmd_freeze(playerid, strtmp);
  666.                     case 9: admsys_cmd_unfreeze(playerid, strtmp);
  667.                     case 10:
  668.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_SLAP, DIALOG_STYLE_INPUT, "Дать пинка", "Введите причину выдачи пинка:", "Ок", "Закрыть");
  669.                     case 11: admsys_cmd_goto(playerid, strtmp);
  670.                     case 12: admsys_cmd_gethere(playerid, strtmp);
  671.                     case 13:
  672.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_BAN, DIALOG_STYLE_INPUT, "Заблокировать аккаунт", "Введите причину блокировки:", "Ок", "Закрыть");
  673.                     case 14: admsys_cmd_gmtest(playerid, strtmp);
  674.                     case 15: admsys_cmd_spawn(playerid, strtmp);
  675.                     case 16: admsys_cmd_unwarn(playerid, strtmp);
  676.                     case 17:
  677.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_HEALTH, DIALOG_STYLE_INPUT, "Установить здоровье", "Введите количество здоровья, которое вы хотите установить:", "Ок", "Закрыть");
  678.                     case 18:
  679.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_ARMOUR, DIALOG_STYLE_INPUT, "Установить броню", "Введите количество брони, которое вы хотите установить:", "Ок", "Закрыть");
  680.                     case 19:
  681.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_MONEY, DIALOG_STYLE_INPUT, "Установить деньги", "Введите количество денег, которое вы хотите установить:", "Ок", "Закрыть");
  682.                     case 20:
  683.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_GIVE_MONEY, DIALOG_STYLE_INPUT, "Выдать деньги", "Введите количество денег, которое вы хотите выдать:", "Ок", "Закрыть");
  684.                     case 21:
  685.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_SCORE, DIALOG_STYLE_INPUT, "Установить очки (уровень)", "Введите количество очков, которое вы хотите установить:", "Ок", "Закрыть");
  686.                     case 22:
  687.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_CHANGE_SKIN, DIALOG_STYLE_INPUT, "Установить скин", "Введите ID скина, который вы хотите установить:", "Ок", "Закрыть");
  688.                     case 23:
  689.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_INT, DIALOG_STYLE_INPUT, "Установить интерьер", "Введите ID интерьера, который вы хотите установить:", "Ок", "Закрыть");
  690.                     case 24:
  691.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_VW, DIALOG_STYLE_INPUT, "Установить виртуальный мир", "Введите ID виртуального мира, который вы хотите установить:", "Ок", "Закрыть");
  692.                     case 25:
  693.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_GIVE_WEAPON, DIALOG_STYLE_INPUT, "Выдать оружие", "Введите ID оружия, которое вы хотите выдать:", "Ок", "Закрыть");
  694.                     case 26: admsys_cmd_sban(playerid, strtmp);
  695.                     case 27: admsys_cmd_skick(playerid, strtmp);
  696.                 }
  697.             }
  698.             return 1;
  699.         }
  700.         case ADMSYS_DIALOG_ANSWER:
  701.         {
  702.             if(response)
  703.             {
  704.                 if(admsys_isnull(inputtext))
  705.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_ANSWER, DIALOG_STYLE_INPUT, "Ответить на report", "Введите ответ на report:", "Ок", "Закрыть");
  706.                 else
  707.                 {
  708.                     static strtmp[145];
  709.                     format(strtmp, sizeof strtmp, "%d %s", AdmSysInfo[playerid][asTabPanel], inputtext);
  710.                     AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
  711.                     admsys_cmd_answer(playerid, strtmp);
  712.                 }
  713.             }
  714.             return 1;
  715.         }
  716.         case ADMSYS_DIALOG_MUTE_TIME:
  717.         {
  718.             if(response)
  719.             {
  720.                 if(admsys_isnull(inputtext))
  721.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_MUTE_TIME, DIALOG_STYLE_INPUT, "Выдать молчанку", "Введите время молчанки:", "Ок", "Закрыть");
  722.                 else
  723.                 {
  724.                     format(AdmSysInfo[playerid][asInput], ADMSYS_MAX_TAB_INPUT, "%s", inputtext);
  725.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_MUTE, DIALOG_STYLE_INPUT, "Выдать молчанку", "Введите причину выдачи молчанки:", "Ок", "Назад");
  726.                 }
  727.             }
  728.             return 1;
  729.         }
  730.         case ADMSYS_DIALOG_MUTE:
  731.         {
  732.             if(response)
  733.             {
  734.                 if(admsys_isnull(inputtext))
  735.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_MUTE, DIALOG_STYLE_INPUT, "Выдать молчанку", "Введите причину выдачи молчанки:", "Ок", "Назад");
  736.                 else
  737.                 {
  738.                     static strtmp[145];
  739.                     format(strtmp, sizeof strtmp, "%d %s %s", AdmSysInfo[playerid][asTabPanel], AdmSysInfo[playerid][asInput], inputtext);
  740.                     AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
  741.                     admsys_cmd_mute(playerid, strtmp);
  742.                 }
  743.             }
  744.             else ShowPlayerDialog(playerid, ADMSYS_DIALOG_MUTE_TIME, DIALOG_STYLE_INPUT, "Выдать молчанку", "Введите время молчанки:", "Ок", "Закрыть");
  745.             return 1;
  746.         }
  747.         case ADMSYS_DIALOG_WARN:
  748.         {
  749.             if(response)
  750.             {
  751.                 if(admsys_isnull(inputtext))
  752.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_WARN, DIALOG_STYLE_INPUT, "Выдать предупреждение", "Введите причину выдачи предупреждения:", "Ок", "Закрыть");
  753.                 else
  754.                 {
  755.                     static strtmp[145];
  756.                     format(strtmp, sizeof strtmp, "%d %s", AdmSysInfo[playerid][asTabPanel], inputtext);
  757.                     AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
  758.                     admsys_cmd_warn(playerid, strtmp);
  759.                 }
  760.             }
  761.             return 1;
  762.         }
  763.         case ADMSYS_DIALOG_KICK:
  764.         {
  765.             if(response)
  766.             {
  767.                 if(admsys_isnull(inputtext))
  768.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_KICK, DIALOG_STYLE_INPUT, "Выкинуть с сервера", "Введите причину кика:", "Ок", "Закрыть");
  769.                 else
  770.                 {
  771.                     static strtmp[145];
  772.                     format(strtmp, sizeof strtmp, "%d %s", AdmSysInfo[playerid][asTabPanel], inputtext);
  773.                     AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
  774.                     admsys_cmd_kick(playerid, strtmp);
  775.                 }
  776.             }
  777.             return 1;
  778.         }
  779.         case ADMSYS_DIALOG_SLAP:
  780.         {
  781.             if(response)
  782.             {
  783.                 if(admsys_isnull(inputtext))
  784.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_SLAP, DIALOG_STYLE_INPUT, "Дать пинка", "Введите причину выдачи пинка:", "Ок", "Закрыть");
  785.                 else
  786.                 {
  787.                     static strtmp[145];
  788.                     format(strtmp, sizeof strtmp, "%d %s", AdmSysInfo[playerid][asTabPanel], inputtext);
  789.                     AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
  790.                     admsys_cmd_slap(playerid, strtmp);
  791.                 }
  792.             }
  793.             return 1;
  794.         }
  795.         case ADMSYS_DIALOG_BAN:
  796.         {
  797.             if(response)
  798.             {
  799.                 if(admsys_isnull(inputtext))
  800.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_BAN, DIALOG_STYLE_INPUT, "Заблокировать аккаунт", "Введите причину блокировки:", "Ок", "Закрыть");
  801.                 else
  802.                 {
  803.                     static strtmp[145];
  804.                     format(strtmp, sizeof strtmp, "%d %s", AdmSysInfo[playerid][asTabPanel], inputtext);
  805.                     AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
  806.                     admsys_cmd_ban(playerid, strtmp);
  807.                 }
  808.             }
  809.             return 1;
  810.         }
  811.         case ADMSYS_DIALOG_SET_HEALTH:
  812.         {
  813.             if(response)
  814.             {
  815.                 if(admsys_isnull(inputtext))
  816.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_HEALTH, DIALOG_STYLE_INPUT, "Установить здоровье", "Введите количество здоровья, которое вы хотите установить:", "Ок", "Закрыть");
  817.                 else
  818.                 {
  819.                     static strtmp[32];
  820.                     format(strtmp, sizeof strtmp, "%d %s", AdmSysInfo[playerid][asTabPanel], inputtext);
  821.                     AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
  822.                     admsys_cmd_sethealth(playerid, strtmp);
  823.                 }
  824.             }
  825.             return 1;
  826.         }
  827.         case ADMSYS_DIALOG_SET_ARMOUR:
  828.         {
  829.             if(response)
  830.             {
  831.                 if(admsys_isnull(inputtext))
  832.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_ARMOUR, DIALOG_STYLE_INPUT, "Установить броню", "Введите количество брони, которое вы хотите установить:", "Ок", "Закрыть");
  833.                 else
  834.                 {
  835.                     static strtmp[32];
  836.                     format(strtmp, sizeof strtmp, "%d %s", AdmSysInfo[playerid][asTabPanel], inputtext);
  837.                     AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
  838.                     admsys_cmd_setarmour(playerid, strtmp);
  839.                 }
  840.             }
  841.             return 1;
  842.         }
  843.         case ADMSYS_DIALOG_SET_MONEY:
  844.         {
  845.             if(response)
  846.             {
  847.                 if(admsys_isnull(inputtext))
  848.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_MONEY, DIALOG_STYLE_INPUT, "Установить деньги", "Введите количество денег, которое вы хотите установить:", "Ок", "Закрыть");
  849.                 else
  850.                 {
  851.                     static strtmp[32];
  852.                     format(strtmp, sizeof strtmp, "%d %s", AdmSysInfo[playerid][asTabPanel], inputtext);
  853.                     AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
  854.                     admsys_cmd_setmoney(playerid, strtmp);
  855.                 }
  856.             }
  857.             return 1;
  858.         }
  859.         case ADMSYS_DIALOG_GIVE_MONEY:
  860.         {
  861.             if(response)
  862.             {
  863.                 if(admsys_isnull(inputtext))
  864.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_GIVE_MONEY, DIALOG_STYLE_INPUT, "Выдать деньги", "Введите количество денег, которое вы хотите выдать:", "Ок", "Закрыть");
  865.                 else
  866.                 {
  867.                     static strtmp[32];
  868.                     format(strtmp, sizeof strtmp, "%d %s", AdmSysInfo[playerid][asTabPanel], inputtext);
  869.                     AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
  870.                     admsys_cmd_givemoney(playerid, strtmp);
  871.                 }
  872.             }
  873.             return 1;
  874.         }
  875.         case ADMSYS_DIALOG_SET_SCORE:
  876.         {
  877.             if(response)
  878.             {
  879.                 if(admsys_isnull(inputtext))
  880.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_SCORE, DIALOG_STYLE_INPUT, "Установить очки (уровень)", "Введите количество очков, которое вы хотите установить:", "Ок", "Закрыть");
  881.                 else
  882.                 {
  883.                     static strtmp[32];
  884.                     format(strtmp, sizeof strtmp, "%d %s", AdmSysInfo[playerid][asTabPanel], inputtext);
  885.                     AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
  886.                     admsys_cmd_setscore(playerid, strtmp);
  887.                 }
  888.             }
  889.             return 1;
  890.         }
  891.         case ADMSYS_DIALOG_CHANGE_SKIN:
  892.         {
  893.             if(response)
  894.             {
  895.                 if(admsys_isnull(inputtext))
  896.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_CHANGE_SKIN, DIALOG_STYLE_INPUT, "Установить скин", "Введите ID скина, который вы хотите установить:", "Ок", "Закрыть");
  897.                 else
  898.                 {
  899.                     static strtmp[32];
  900.                     format(strtmp, sizeof strtmp, "%d %s", AdmSysInfo[playerid][asTabPanel], inputtext);
  901.                     AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
  902.                     admsys_cmd_setskin(playerid, strtmp);
  903.                 }
  904.             }
  905.             return 1;
  906.         }
  907.         case ADMSYS_DIALOG_SET_INT:
  908.         {
  909.             if(response)
  910.             {
  911.                 if(admsys_isnull(inputtext))
  912.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_INT, DIALOG_STYLE_INPUT, "Установить интерьер", "Введите ID интерьера, который вы хотите установить:", "Ок", "Закрыть");
  913.                 else
  914.                 {
  915.                     static strtmp[32];
  916.                     format(strtmp, sizeof strtmp, "%d %s", AdmSysInfo[playerid][asTabPanel], inputtext);
  917.                     AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
  918.                     admsys_cmd_setint(playerid, strtmp);
  919.                 }
  920.             }
  921.             return 1;
  922.         }
  923.         case ADMSYS_DIALOG_SET_VW:
  924.         {
  925.             if(response)
  926.             {
  927.                 if(admsys_isnull(inputtext))
  928.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_VW, DIALOG_STYLE_INPUT, "Установить виртуальный мир", "Введите ID виртуального мира, который вы хотите установить:", "Ок", "Закрыть");
  929.                 else
  930.                 {
  931.                     static strtmp[32];
  932.                     format(strtmp, sizeof strtmp, "%d %s", AdmSysInfo[playerid][asTabPanel], inputtext);
  933.                     AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
  934.                     admsys_cmd_setvw(playerid, strtmp);
  935.                 }
  936.             }
  937.             return 1;
  938.         }
  939.         case ADMSYS_DIALOG_GIVE_WEAPON:
  940.         {
  941.             if(response)
  942.             {
  943.                 if(admsys_isnull(inputtext))
  944.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_GIVE_WEAPON, DIALOG_STYLE_INPUT, "Выдать оружие", "Введите ID оружия, которое вы хотите выдать:", "Ок", "Закрыть");
  945.                 else
  946.                 {
  947.                     format(AdmSysInfo[playerid][asInput], ADMSYS_MAX_TAB_INPUT, "%s", inputtext);
  948.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_GIVE_WEAPON_AMMO, DIALOG_STYLE_INPUT, "Выдать оружие", "Введите количество патронов, которое вы хотите выдать:", "Ок", "Назад");
  949.                 }
  950.             }
  951.             return 1;
  952.         }
  953.         case ADMSYS_DIALOG_GIVE_WEAPON_AMMO:
  954.         {
  955.             if(response)
  956.             {
  957.                 if(admsys_isnull(inputtext))
  958.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_GIVE_WEAPON_AMMO, DIALOG_STYLE_INPUT, "Выдать оружие", "Введите количество патронов, которое вы хотите выдать:", "Ок", "Назад");
  959.                 else
  960.                 {
  961.                     static strtmp[32];
  962.                     format(strtmp, sizeof strtmp, "%d %s %s", AdmSysInfo[playerid][asTabPanel], AdmSysInfo[playerid][asInput], inputtext);
  963.                     AdmSysInfo[playerid][asTabPanel] = INVALID_PLAYER_ID;
  964.                     admsys_cmd_giveweapon(playerid, strtmp);
  965.                 }
  966.             }
  967.             else ShowPlayerDialog(playerid, ADMSYS_DIALOG_GIVE_WEAPON, DIALOG_STYLE_INPUT, "Выдать оружие", "Введите ID оружия, которое вы хотите выдать:", "Ок", "Закрыть");
  968.             return 1;
  969.         }
  970.         case ADMSYS_DIALOG_AHELP_LVL_1:
  971.         {
  972.             if(response)
  973.                 ShowPlayerDialog(playerid, ADMSYS_DIALOG_AHELP_LVL_2, DIALOG_STYLE_MSGBOX, "Помощь по админ командам", AdmSys2LvlCmdsStr, "Далее", "Назад");
  974.             return 1;
  975.         }
  976.         case ADMSYS_DIALOG_AHELP_LVL_2:
  977.         {
  978.             if(response)
  979.                 ShowPlayerDialog(playerid, ADMSYS_DIALOG_AHELP_LVL_3, DIALOG_STYLE_MSGBOX, "Помощь по админ командам", AdmSys3LvlCmdsStr, "Далее", "Назад");
  980.             else
  981.                 ShowPlayerDialog(playerid, ADMSYS_DIALOG_AHELP_LVL_1, DIALOG_STYLE_MSGBOX, "Помощь по админ командам", AdmSys1LvlCmdsStr, "Далее", "Закрыть");
  982.             return 1;
  983.         }
  984.         case ADMSYS_DIALOG_AHELP_LVL_3:
  985.         {
  986.             if(response)
  987.                 ShowPlayerDialog(playerid, ADMSYS_DIALOG_AHELP_LVL_4, DIALOG_STYLE_MSGBOX, "Помощь по админ командам", AdmSys4LvlCmdsStr, "Далее", "Назад");
  988.             else
  989.                 ShowPlayerDialog(playerid, ADMSYS_DIALOG_AHELP_LVL_2, DIALOG_STYLE_MSGBOX, "Помощь по админ командам", AdmSys2LvlCmdsStr, "Далее", "Назад");
  990.             return 1;
  991.         }
  992.         case ADMSYS_DIALOG_AHELP_LVL_4:
  993.         {
  994.             if(response)
  995.                 ShowPlayerDialog(playerid, ADMSYS_DIALOG_AHELP_LVL_5, DIALOG_STYLE_MSGBOX, "Помощь по админ командам", AdmSys5LvlCmdsStr, "Ок", "Назад");
  996.             else
  997.                 ShowPlayerDialog(playerid, ADMSYS_DIALOG_AHELP_LVL_3, DIALOG_STYLE_MSGBOX, "Помощь по админ командам", AdmSys3LvlCmdsStr, "Далее", "Назад");
  998.             return 1;
  999.         }
  1000.         case ADMSYS_DIALOG_AHELP_LVL_5:
  1001.         {
  1002.             if(!response)
  1003.                 ShowPlayerDialog(playerid, ADMSYS_DIALOG_AHELP_LVL_4, DIALOG_STYLE_MSGBOX, "Помощь по админ командам", AdmSys4LvlCmdsStr, "Далее", "Назад");
  1004.             return 1;
  1005.         }
  1006.         case ADMSYS_DIALOG_APANEL:
  1007.         {
  1008.             if(response)
  1009.             {
  1010.                 switch(listitem)
  1011.                 {
  1012.                     case 0:
  1013.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_ACHAT, DIALOG_STYLE_INPUT, "Админ чат", "Напишите ваше сообщение:", "Ок", "Закрыть");
  1014.                     case 1: admsys_cmd_ahelp(playerid, "\1");
  1015.                     case 2: admsys_cmd_admins(playerid, "\1");
  1016.                     case 3:
  1017.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_SPAWN_VEH, DIALOG_STYLE_INPUT, "Телепортировать транспорт на респавн", "Введите ID транспорта, который вы хотите заспавнить:", "Ок", "Закрыть");
  1018.                     case 4:
  1019.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_ASAY, DIALOG_STYLE_INPUT, "Сообщение от администратора", "Напишите ваше сообщение:", "Ок", "Закрыть");
  1020.                     case 5: admsys_cmd_suspectlist(playerid, "\1");
  1021.                     case 6:
  1022.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_GOTO_VEH, DIALOG_STYLE_INPUT, "Телепортироваться к транспорту", "Введите ID транспорта, к которому вы хотите телепортироваться:", "Ок", "Закрыть");
  1023.                     case 7:
  1024.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_GOTO_POS, DIALOG_STYLE_INPUT, "Телепортироваться на координаты", "Введите координаты через пробел, на которые вы хотите телепортироваться:", "Ок", "Закрыть");
  1025.                     case 8:
  1026.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_BAN_IP, DIALOG_STYLE_INPUT, "Блокировка IP-адреса", "Введите IP-адрес, который вы хотите заблокировать:", "Ок", "Закрыть");
  1027.                     case 9: admsys_cmd_cc(playerid, "\1");
  1028.                     case 10:
  1029.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_REPAIR_VEH, DIALOG_STYLE_INPUT, "Отремонтировать транспорт", "Введите ID транспорта, который вы хотите отремонтировать:", "Ок", "Закрыть");
  1030.                     case 11:
  1031.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_UNBAN_IP, DIALOG_STYLE_INPUT, "Разблокировать IP-адрес", "Введите IP-адрес, который вы хотите разблокировать:", "Ок", "Закрыть");
  1032.                     case 12: admsys_cmd_getall(playerid, "\1");
  1033.                     case 13:
  1034.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_WEATHER, DIALOG_STYLE_INPUT, "Установить погоду", "Введите ID погоды, которую вы хотите установить:", "Ок", "Закрыть");
  1035.                     case 14:
  1036.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_TIME, DIALOG_STYLE_INPUT, "Установить время суток", "Введите час, который вы хотите установить:", "Ок", "Закрыть");
  1037.                     case 15:
  1038.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_DESTROY_VEH, DIALOG_STYLE_INPUT, "Уничтожить транспорт", "Введите ID транспорта, который вы хотите уничтожить:", "Ок", "Закрыть");
  1039.                     case 16:
  1040.                         ShowPlayerDialog(playerid, ADMSYS_DIALOG_CREATE_VEH, DIALOG_STYLE_INPUT, "Создать транспорт", "Введите модель транспорта, который вы хотите создать:", "Ок", "Закрыть");
  1041.                     case 17:
  1042.                     {
  1043.                         if(IsPlayerAdminEx(playerid) && AdmSysInfo[playerid][asLastAction])
  1044.                         {
  1045.                             switch(AdmSysInfo[playerid][asLastAction])
  1046.                             {
  1047.                                 case 1: SetPlayerHealth(AdmSysInfo[playerid][asLastActionID], AdmSysInfo[playerid][asLastFloatData]);
  1048.                                 case 2: SetPlayerArmour(AdmSysInfo[playerid][asLastActionID], AdmSysInfo[playerid][asLastFloatData]);
  1049.                                 case 3:
  1050.                                 {
  1051.                                     ResetPlayerMoney(AdmSysInfo[playerid][asLastActionID]);
  1052.                                     GivePlayerMoney(AdmSysInfo[playerid][asLastActionID], AdmSysInfo[playerid][asLastIntData][0]);
  1053.                                 }
  1054.                                 case 4: GivePlayerMoney(AdmSysInfo[playerid][asLastActionID], -AdmSysInfo[playerid][asLastIntData][0]);
  1055.                                 case 5: SetPlayerScore(AdmSysInfo[playerid][asLastActionID], AdmSysInfo[playerid][asLastIntData][0]);
  1056.                                 case 6: SetPlayerSkin(AdmSysInfo[playerid][asLastActionID], AdmSysInfo[playerid][asLastIntData][0]);
  1057.                                 case 7: SetPlayerInterior(AdmSysInfo[playerid][asLastActionID], AdmSysInfo[playerid][asLastIntData][0]);
  1058.                                 case 8: SetPlayerVirtualWorld(AdmSysInfo[playerid][asLastActionID], AdmSysInfo[playerid][asLastIntData][0]);
  1059.                                 case 9:
  1060.                                     GivePlayerWeapon(AdmSysInfo[playerid][asLastActionID], AdmSysInfo[playerid][asLastIntData][0], -AdmSysInfo[playerid][asLastIntData][1]);
  1061.                             }
  1062.                             AdmSysInfo[playerid][asLastAction] = 0;
  1063.                             SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Команда отменена");
  1064.                         }
  1065.                     }
  1066.                 }
  1067.             }
  1068.             return 1;
  1069.         }
  1070.         case ADMSYS_DIALOG_ACHAT:
  1071.         {
  1072.             if(response)
  1073.             {
  1074.                 if(admsys_isnull(inputtext))
  1075.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_ACHAT, DIALOG_STYLE_INPUT, "Админ чат", "Напишите ваше сообщение:", "Ок", "Закрыть");
  1076.                 else admsys_cmd_achat(playerid, inputtext);
  1077.             }
  1078.             return 1;
  1079.         }
  1080.         case ADMSYS_DIALOG_SPAWN_VEH:
  1081.         {
  1082.             if(response)
  1083.             {
  1084.                 if(admsys_isnull(inputtext)) admsys_cmd_spawnveh(playerid, "\1");
  1085.                 else admsys_cmd_spawnveh(playerid, inputtext);
  1086.             }
  1087.             return 1;
  1088.         }
  1089.         case ADMSYS_DIALOG_ASAY:
  1090.         {
  1091.             if(response)
  1092.             {
  1093.                 if(admsys_isnull(inputtext))
  1094.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_ASAY, DIALOG_STYLE_INPUT, "Сообщение от администратора", "Напишите ваше сообщение:", "Ок", "Закрыть");
  1095.                 else admsys_cmd_asay(playerid, inputtext);
  1096.             }
  1097.             return 1;
  1098.         }
  1099.         case ADMSYS_DIALOG_GOTO_VEH:
  1100.         {
  1101.             if(response)
  1102.             {
  1103.                 if(admsys_isnull(inputtext))
  1104.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_GOTO_VEH, DIALOG_STYLE_INPUT, "Телепортироваться к транспорту", "Введите ID транспорта, к которому вы хотите телепортироваться:", "Ок", "Закрыть");
  1105.                 else admsys_cmd_gotoveh(playerid, inputtext);
  1106.             }
  1107.             return 1;
  1108.         }
  1109.         case ADMSYS_DIALOG_GOTO_POS:
  1110.         {
  1111.             if(response)
  1112.             {
  1113.                 if(admsys_isnull(inputtext))
  1114.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_GOTO_POS, DIALOG_STYLE_INPUT, "Телепортироваться на координаты", "Введите координаты через пробел, на которые вы хотите телепортироваться:", "Ок", "Закрыть");
  1115.                 else admsys_cmd_gotopos(playerid, inputtext);
  1116.             }
  1117.             return 1;
  1118.         }
  1119.         case ADMSYS_DIALOG_BAN_IP:
  1120.         {
  1121.             if(response)
  1122.             {
  1123.                 if(admsys_isnull(inputtext))
  1124.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_BAN_IP, DIALOG_STYLE_INPUT, "Блокировка IP-адреса", "Введите IP-адрес, который вы хотите заблокировать:", "Ок", "Закрыть");
  1125.                 else admsys_cmd_banip(playerid, inputtext);
  1126.             }
  1127.             return 1;
  1128.         }
  1129.         case ADMSYS_DIALOG_REPAIR_VEH:
  1130.         {
  1131.             if(response)
  1132.             {
  1133.                 if(admsys_isnull(inputtext)) admsys_cmd_repairveh(playerid, "\1");
  1134.                 else admsys_cmd_repairveh(playerid, inputtext);
  1135.             }
  1136.             return 1;
  1137.         }
  1138.         case ADMSYS_DIALOG_UNBAN_IP:
  1139.         {
  1140.             if(response)
  1141.             {
  1142.                 if(admsys_isnull(inputtext))
  1143.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_UNBAN_IP, DIALOG_STYLE_INPUT, "Разблокировать IP-адрес", "Введите IP-адрес, который вы хотите разблокировать:", "Ок", "Закрыть");
  1144.                 else admsys_cmd_unbanip(playerid, inputtext);
  1145.             }
  1146.             return 1;
  1147.         }
  1148.         case ADMSYS_DIALOG_SET_WEATHER:
  1149.         {
  1150.             if(response)
  1151.             {
  1152.                 if(admsys_isnull(inputtext))
  1153.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_WEATHER, DIALOG_STYLE_INPUT, "Установить погоду", "Введите ID погоды, которую вы хотите установить:", "Ок", "Закрыть");
  1154.                 else admsys_cmd_setweather(playerid, inputtext);
  1155.             }
  1156.             return 1;
  1157.         }
  1158.         case ADMSYS_DIALOG_SET_TIME:
  1159.         {
  1160.             if(response)
  1161.             {
  1162.                 if(admsys_isnull(inputtext))
  1163.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_SET_TIME, DIALOG_STYLE_INPUT, "Установить время суток", "Введите час, который вы хотите установить:", "Ок", "Закрыть");
  1164.                 else admsys_cmd_settime(playerid, inputtext);
  1165.             }
  1166.             return 1;
  1167.         }
  1168.         case ADMSYS_DIALOG_DESTROY_VEH:
  1169.         {
  1170.             if(response)
  1171.             {
  1172.                 if(admsys_isnull(inputtext)) admsys_cmd_destroyveh(playerid, "\1");
  1173.                 else admsys_cmd_destroyveh(playerid, inputtext);
  1174.             }
  1175.             return 1;
  1176.         }
  1177.         case ADMSYS_DIALOG_CREATE_VEH:
  1178.         {
  1179.             if(response)
  1180.             {
  1181.                 if(admsys_isnull(inputtext))
  1182.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_CREATE_VEH, DIALOG_STYLE_INPUT, "Создать транспорт", "Введите модель транспорта, который вы хотите создать:", "Ок", "Закрыть");
  1183.                 else
  1184.                 {
  1185.                     format(AdmSysInfo[playerid][asInput], ADMSYS_MAX_TAB_INPUT, "%s", inputtext);
  1186.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_CREATE_VEH_COL_1, DIALOG_STYLE_INPUT, "Создать транспорт", "Введите цвет 1 для транспорта, который вы хотите создать:", "Ок", "Назад");
  1187.                 }
  1188.             }
  1189.             return 1;
  1190.         }
  1191.         case ADMSYS_DIALOG_CREATE_VEH_COL_1:
  1192.         {
  1193.             if(response)
  1194.             {
  1195.                 if(admsys_isnull(inputtext)) admsys_cmd_veh(playerid, AdmSysInfo[playerid][asInput]);
  1196.                 else
  1197.                 {
  1198.                     format(AdmSysInfo[playerid][asInput2], ADMSYS_MAX_TAB_INPUT, "%s", inputtext);
  1199.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_CREATE_VEH_COL_2, DIALOG_STYLE_INPUT, "Создать транспорт", "Введите цвет 2 для транспорта, который вы хотите создать:", "Ок", "Назад");
  1200.                 }
  1201.             }
  1202.             else ShowPlayerDialog(playerid, ADMSYS_DIALOG_CREATE_VEH, DIALOG_STYLE_INPUT, "Создать транспорт", "Введите модель транспорта, который вы хотите создать:", "Ок", "Закрыть");
  1203.             return 1;
  1204.         }
  1205.         case ADMSYS_DIALOG_CREATE_VEH_COL_2:
  1206.         {
  1207.             if(response)
  1208.             {
  1209.                 if(admsys_isnull(inputtext))
  1210.                     ShowPlayerDialog(playerid, ADMSYS_DIALOG_CREATE_VEH_COL_2, DIALOG_STYLE_INPUT, "Создать транспорт", "Введите цвет 2 для транспорта, который вы хотите создать:", "Ок", "Назад");
  1211.                 else
  1212.                 {
  1213.                     static strtmp[32];
  1214.                     format(strtmp, sizeof strtmp, "%s %s %s", AdmSysInfo[playerid][asInput], AdmSysInfo[playerid][asInput2], inputtext);
  1215.                     admsys_cmd_veh(playerid, strtmp);
  1216.                 }
  1217.             }
  1218.             else ShowPlayerDialog(playerid, ADMSYS_DIALOG_CREATE_VEH_COL_1, DIALOG_STYLE_INPUT, "Создать транспорт", "Введите цвет 1 для транспорта, который вы хотите создать:", "Ок", "Назад");
  1219.             return 1;
  1220.         }
  1221.         case ADMSYS_DIALOG_SUSPECT_LIST:
  1222.         {
  1223.             if(response && IsPlayerAdminEx(playerid, 3) && 0 <= listitem < sizeof SuspectList)
  1224.             {
  1225.                 if(!StartSpectating(playerid, SuspectList[listitem]))
  1226.                 {
  1227.                     SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок отключился");
  1228.                     admsys_cmd_suspectlist(playerid, "\1");
  1229.                 }
  1230.                 else if(AdmSysInfo[playerid][asSpecID] == SuspectList[listitem]) RemovePlayerFromSuspectList(SuspectList[listitem]);
  1231.                 else admsys_cmd_suspectlist(playerid, "\1");
  1232.             }
  1233.             return 1;
  1234.         }
  1235.     }
  1236.     #if defined admsys_OnDialogResponse
  1237.         return admsys_OnDialogResponse(playerid, dialogid, response, listitem, inputtext);
  1238.     #else
  1239.         return 0;
  1240.     #endif
  1241. }
  1242.  
  1243. #if defined _ALS_OnDialogResponse
  1244.     #undef OnDialogResponse
  1245. #else
  1246.     #define _ALS_OnDialogResponse
  1247. #endif
  1248. #define OnDialogResponse admsys_OnDialogResponse
  1249. #if defined admsys_OnDialogResponse
  1250.     forward admsys_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]);
  1251. #endif
  1252.  
  1253. public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
  1254. {
  1255.     #if defined foreach
  1256.         foreach(new i : Player)
  1257.         {
  1258.     #else
  1259.         for(new i = GetPlayerPoolSize(); i >= 0; --i)
  1260.         {
  1261.             if(!IsPlayerConnected(i)) continue;
  1262.     #endif
  1263.         if(AdmSysInfo[i][asSpecID] == playerid) UpdateSpectating(i);
  1264.     }
  1265.     #if defined admsys_OnPlayerInteriorChange
  1266.         return admsys_OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid);
  1267.     #else
  1268.         return 1;
  1269.     #endif
  1270. }
  1271.  
  1272. #if defined _ALS_OnPlayerInteriorChange
  1273.     #undef OnPlayerInteriorChange
  1274. #else
  1275.     #define _ALS_OnPlayerInteriorChange
  1276. #endif
  1277. #define OnPlayerInteriorChange admsys_OnPlayerInteriorChange
  1278. #if defined admsys_OnPlayerInteriorChange
  1279.     forward admsys_OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid);
  1280. #endif
  1281.  
  1282. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  1283. {
  1284.     if(GetPlayerState(playerid) == PLAYER_STATE_SPECTATING && AdmSysInfo[playerid][asSpecID] != INVALID_PLAYER_ID)
  1285.     {
  1286.         if(newkeys & KEY_ANALOG_LEFT)
  1287.         {
  1288.             new ud = AdmSysInfo[playerid][asSpecID];
  1289.             AdmSysInfo[playerid][asSpecID]--;
  1290.             while(!IsPlayerConnected(AdmSysInfo[playerid][asSpecID]) || IsPlayerSpectating(AdmSysInfo[playerid][asSpecID]) || AdmSysInfo[playerid][asSpecID] == playerid)
  1291.             {
  1292.                 AdmSysInfo[playerid][asSpecID]--;
  1293.                 if(AdmSysInfo[playerid][asSpecID] < 0) AdmSysInfo[playerid][asSpecID] = GetPlayerPoolSize();
  1294.                 if(AdmSysInfo[playerid][asSpecID] == ud) break;
  1295.             }
  1296.             if(AdmSysInfo[playerid][asSpecID] != ud) UpdateSpectating(playerid);
  1297.         }
  1298.         else if(newkeys & KEY_ANALOG_RIGHT)
  1299.         {
  1300.             new ud = AdmSysInfo[playerid][asSpecID];
  1301.             AdmSysInfo[playerid][asSpecID]++;
  1302.             while(!IsPlayerConnected(AdmSysInfo[playerid][asSpecID]) || IsPlayerSpectating(AdmSysInfo[playerid][asSpecID]) || AdmSysInfo[playerid][asSpecID] == playerid)
  1303.             {
  1304.                 AdmSysInfo[playerid][asSpecID]++;
  1305.                 if(AdmSysInfo[playerid][asSpecID] > GetPlayerPoolSize()) AdmSysInfo[playerid][asSpecID] = 0;
  1306.                 if(AdmSysInfo[playerid][asSpecID] == ud) break;
  1307.             }
  1308.             if(AdmSysInfo[playerid][asSpecID] != ud) UpdateSpectating(playerid);
  1309.         }
  1310.     }
  1311.     #if defined admsys_OnPlayerKeyStateChange
  1312.         return admsys_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
  1313.     #else
  1314.         return 1;
  1315.     #endif
  1316. }
  1317.  
  1318. #if defined _ALS_OnPlayerKeyStateChange
  1319.     #undef OnPlayerKeyStateChange
  1320. #else
  1321.     #define _ALS_OnPlayerKeyStateChange
  1322. #endif
  1323. #define OnPlayerKeyStateChange admsys_OnPlayerKeyStateChange
  1324. #if defined admsys_OnPlayerKeyStateChange
  1325.     forward admsys_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
  1326. #endif
  1327.  
  1328. public OnPlayerClickPlayer(playerid, clickedplayerid, source)
  1329. {
  1330.     if(IsPlayerAdminEx(playerid))
  1331.     {
  1332.         static strtmp[572], strtmp2[44], strname[MAX_PLAYER_NAME + 1];
  1333.         strtmp[0] = EOS;
  1334.         AdmSysInfo[playerid][asTabPanel] = clickedplayerid;
  1335.         GetPlayerName(clickedplayerid, strname, sizeof strname);
  1336.         format(strtmp2, sizeof strtmp2, "Админ-панель для %s", strname);
  1337.         strcat(strtmp, "Показать статистику\nОтветить на report\nВысадить из транспорта");
  1338.         if(IsPlayerAdminEx(playerid, 2)) strcat(strtmp, "\nВойти в режим наблюдения\n\
  1339.         Выдать молчанку\nСнять молчанку\nВыдать предупреждение\nВыкинуть с сервера\n\
  1340.         Заморозить\nРазморозить\nДать пинка\nТелепортироваться к игроку");
  1341.         if(IsPlayerAdminEx(playerid, 3)) strcat(strtmp, "\nТелепортировать к себе\nЗаблокировать аккаунт\n\
  1342.         Проверка на бесконечное здоровье\nТелепортировать на респавн\nСнять предупреждение");
  1343.         if(IsPlayerAdminEx(playerid, 4)) strcat(strtmp, "\nУстановить здоровье\nУстановить броню\nУстановить деньги\n\
  1344.         Выдать деньги\nУстановить очки (уровень)\nУстановить скин\nУстановить интерьер\nУстановить виртуальный мир\nВыдать оружие");
  1345.         if(IsPlayerAdminEx(playerid, 5)) strcat(strtmp, "\nТихая блокировка\nТихий кик");
  1346.         ShowPlayerDialog(playerid, ADMSYS_DIALOG_TAB_PANEL, DIALOG_STYLE_LIST, strtmp2, strtmp, "Ок", "Закрыть");
  1347.     }
  1348.     #if defined admsys_OnPlayerClickPlayer
  1349.         return admsys_OnPlayerClickPlayer(playerid, clickedplayerid, source);
  1350.     #else
  1351.         return 0;
  1352.     #endif
  1353. }
  1354.  
  1355. #if defined _ALS_OnPlayerClickPlayer
  1356.     #undef OnPlayerClickPlayer
  1357. #else
  1358.     #define _ALS_OnPlayerClickPlayer
  1359. #endif
  1360. #define OnPlayerClickPlayer admsys_OnPlayerClickPlayer
  1361. #if defined admsys_OnPlayerClickPlayer
  1362.     forward admsys_OnPlayerClickPlayer(playerid, clickedplayerid, source);
  1363. #endif
  1364.  
  1365. admsys_fpublic BanWithDelay(playerid) return Ban(playerid);
  1366.  
  1367. admsys_fpublic KickWithDelay(playerid) return Kick(playerid);
  1368.  
  1369. admsys_fpublic UpdateMuteTime()
  1370. {
  1371.     #if defined foreach
  1372.     foreach(new i : Player)
  1373.     {
  1374.     #else
  1375.     for(new i = GetPlayerPoolSize(); i >= 0; --i)
  1376.     {
  1377.         if(!IsPlayerConnected(i)) continue;
  1378.     #endif
  1379.         if(AdmSysInfo[i][asMuteTime] > 0)
  1380.         {
  1381.             AdmSysInfo[i][asMuteTime]--;
  1382.             if(AdmSysInfo[i][asMuteTime] < 1)
  1383.                 SendClientMessage(i, ADMSYS_DEFAULT_COLOR, "Время молчанки истекло");
  1384.         }
  1385.     }
  1386.     return 1;
  1387. }
  1388.  
  1389. admsys_fpublic UpdateSpecInfo(playerid)
  1390. {
  1391.     if(GetPlayerState(playerid) == PLAYER_STATE_SPECTATING && AdmSysInfo[playerid][asSpecID] != INVALID_PLAYER_ID)
  1392.     {
  1393.         static strtmp[100], sname[MAX_PLAYER_NAME + 1], sip[16];
  1394.         GetPlayerIp(AdmSysInfo[playerid][asSpecID], sip, sizeof sip);
  1395.         GetPlayerName(AdmSysInfo[playerid][asSpecID], sname, sizeof sname);
  1396.         format(strtmp, sizeof strtmp, "~w~~n~~n~~n~~n~~n~~n~Nick: %s~n~ID: %d~n~IP: %s~n~Ping: %d",
  1397.         sname, AdmSysInfo[playerid][asSpecID], sip, GetPlayerPing(AdmSysInfo[playerid][asSpecID]));
  1398.         SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(AdmSysInfo[playerid][asSpecID]));
  1399.         AdmSysInfo[playerid][asUpdTimer] = SetTimerEx("UpdateSpecInfo", 1000, false, "d", playerid);
  1400.         GameTextForPlayer(playerid, strtmp, 1500, 3);
  1401.         return 1;
  1402.     }
  1403.     return 0;
  1404. }
  1405.  
  1406. admsys_fpublic GmTest(playerid)
  1407. {
  1408.     if(AdmSysInfo[playerid][asGmTestID] != INVALID_PLAYER_ID)
  1409.     {
  1410.         if(AdmSysInfo[AdmSysInfo[playerid][asGmTestID]][asGmTest])
  1411.         {
  1412.             static strtmp[188];
  1413.             new vehid, Float:nowhp, Float:nowar, Float:hpdiff, Float:ardiff;
  1414.             vehid = GetPlayerVehicleID(AdmSysInfo[playerid][asGmTestID]);
  1415.             if(vehid) GetVehicleHealth(vehid, nowhp);
  1416.             else
  1417.             {
  1418.                 GetPlayerHealth(AdmSysInfo[playerid][asGmTestID], nowhp);
  1419.                 GetPlayerArmour(AdmSysInfo[playerid][asGmTestID], nowar);
  1420.             }
  1421.             hpdiff = AdmSysInfo[AdmSysInfo[playerid][asGmTestID]][asGmTestHP] - nowhp;
  1422.             ardiff = AdmSysInfo[AdmSysInfo[playerid][asGmTestID]][asGmTestAR] - nowar;
  1423.             if(hpdiff == 0.0 && ardiff == 0.0)
  1424.             {
  1425.                 format(strtmp, sizeof strtmp, "До:\t%.1f здоровья, %.1f брони\nПосле:\t%.1f здоровья, %.1f брони\nЗдоровье и броня не уменьшились\n\nВозможно, игрок использует GodMode.",
  1426.                 AdmSysInfo[AdmSysInfo[playerid][asGmTestID]][asGmTestHP], AdmSysInfo[AdmSysInfo[playerid][asGmTestID]][asGmTestAR], nowhp, nowar);
  1427.                 ShowPlayerDialog(playerid, ADMSYS_DIALOG_GMTEST, DIALOG_STYLE_MSGBOX, "Проверка на GodMode", strtmp, "Закрыть", "");
  1428.             }
  1429.             else
  1430.             {
  1431.                 format(strtmp, sizeof strtmp, "До:\t%.1f здоровья, %.1f брони\nПосле:\t%.1f здоровья, %.1f брони\n\
  1432.                 Здоровье уменьшилось на:\t%.1f\nБроня уменьшилась на:\t%.1f\n\nGodMode не обнаружено.\nЗдоровье и броня восстановлены.",
  1433.                 AdmSysInfo[AdmSysInfo[playerid][asGmTestID]][asGmTestHP], AdmSysInfo[AdmSysInfo[playerid][asGmTestID]][asGmTestAR], nowhp, nowar, hpdiff, ardiff);
  1434.                 ShowPlayerDialog(playerid, ADMSYS_DIALOG_GMTEST, DIALOG_STYLE_MSGBOX, "Проверка на GodMode", strtmp, "Закрыть", "");
  1435.                 if(vehid) SetVehicleHealth(vehid, AdmSysInfo[AdmSysInfo[playerid][asGmTestID]][asGmTestHP]);
  1436.                 else
  1437.                 {
  1438.                     SetPlayerHealth(AdmSysInfo[playerid][asGmTestID], AdmSysInfo[AdmSysInfo[playerid][asGmTestID]][asGmTestHP]);
  1439.                     SetPlayerArmour(AdmSysInfo[playerid][asGmTestID], AdmSysInfo[AdmSysInfo[playerid][asGmTestID]][asGmTestAR]);
  1440.                 }
  1441.             }
  1442.         }
  1443.         AdmSysInfo[AdmSysInfo[playerid][asGmTestID]][asGmTest] = false;
  1444.         AdmSysInfo[playerid][asGmTestID] = INVALID_PLAYER_ID;
  1445.     }
  1446.     return 1;
  1447. }
  1448.  
  1449. CMD:report(playerid, const params[]) return admsys_cmd_report(playerid, params);
  1450. admsys_cmd_report(playerid, const params[])
  1451. {
  1452.     static strtmp[145];
  1453.     if(AdmSysInfo[playerid][asMuteTime] > 0)
  1454.     {
  1455.         format(strtmp, sizeof strtmp, "Вы заглушены. До конца молчанки осталось %d минут %d секунд",
  1456.         floatround(AdmSysInfo[playerid][asMuteTime] / 60, floatround_tozero), AdmSysInfo[playerid][asMuteTime] % 60);
  1457.         return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, strtmp);
  1458.     }
  1459.     if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /report [текст]");
  1460.     static strname[MAX_PLAYER_NAME + 1];
  1461.     GetPlayerName(playerid, strname, sizeof strname);
  1462.     format(strtmp, sizeof strtmp, "[Report] %s[%d]: %s", strname, playerid, params);
  1463.     if(!IsPlayerAdminEx(playerid)) SendClientMessage(playerid, ADMSYS_REPORT_COLOR, strtmp);
  1464.     SendMessageToAdmins(1, ADMSYS_REPORT_COLOR, strtmp);
  1465.     return 1;
  1466. }
  1467.  
  1468. CMD:achat(playerid, const params[]) return admsys_cmd_achat(playerid, params);
  1469. CMD:admchat(playerid, const params[]) return admsys_cmd_achat(playerid, params);
  1470. CMD:adminchat(playerid, const params[]) return admsys_cmd_achat(playerid, params);
  1471. admsys_cmd_achat(playerid, const params[])
  1472. {
  1473.     if(IsPlayerAdminEx(playerid))
  1474.     {
  1475.         if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /achat [текст]");
  1476.         static strtmp[145], strname[MAX_PLAYER_NAME + 1];
  1477.         strtmp = "[Админ чат] ";
  1478.         GetPlayerName(playerid, strname, sizeof strname);
  1479.         strcat(strtmp, strname);
  1480.         strcat(strtmp, ": ");
  1481.         strcat(strtmp, params);
  1482.         SendMessageToAdmins(1, ADMSYS_ADM_CHAT_COLOR, strtmp);
  1483.     }
  1484.     return 1;
  1485. }
  1486.  
  1487. CMD:ahelp(playerid, const params[]) return admsys_cmd_ahelp(playerid, params);
  1488. CMD:admhelp(playerid, const params[]) return admsys_cmd_ahelp(playerid, params);
  1489. CMD:adminhelp(playerid, const params[]) return admsys_cmd_ahelp(playerid, params);
  1490. admsys_cmd_ahelp(playerid, const params[])
  1491. {
  1492.     #pragma unused params
  1493.     if(IsPlayerAdminEx(playerid))
  1494.         ShowPlayerDialog(playerid, ADMSYS_DIALOG_AHELP_LVL_1, DIALOG_STYLE_MSGBOX, "Помощь по админ командам", AdmSys1LvlCmdsStr, "Далее", "Закрыть");
  1495.     return 1;
  1496. }
  1497.  
  1498. CMD:showstats(playerid, params[]) return admsys_cmd_showstats(playerid, params);
  1499. admsys_cmd_showstats(playerid, params[])
  1500. {
  1501.     if(IsPlayerAdminEx(playerid))
  1502.     {
  1503.         if(admsys_isnull(params)) params[0] = playerid;
  1504.         else
  1505.         {
  1506.             if(!admsys_IsNumeric(params)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /showstats [id]");
  1507.             params[0] = strval(params);
  1508.             if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок не найден");
  1509.         }
  1510.         new Float:ghealth, Float:garmour;
  1511.         static strtmp[40], strtmp2[200], strname[MAX_PLAYER_NAME + 1], gip[16];
  1512.         GetPlayerName(params[0], strname, sizeof strname);
  1513.         GetPlayerHealth(params[0], ghealth);
  1514.         GetPlayerArmour(params[0], garmour);
  1515.         GetPlayerIp(params[0], gip, sizeof gip);
  1516.         format(strtmp, sizeof strtmp, "Информация о %s", strname);
  1517.         format(strtmp2, sizeof strtmp2, "Здоровье: %.1f\nБроня: %.1f\nДеньги: %d\nИнтерьер: %d\nВиртуальный мир: %d\nУровень розыска: %d\nIP-адрес: %s\nPing: %d\nОружие: %d\nПатроны: %d\nScore: %d\nСкин: %d",
  1518.         ghealth, garmour, GetPlayerMoney(params[0]), GetPlayerInterior(params[0]), GetPlayerVirtualWorld(params[0]), GetPlayerWantedLevel(params[0]), gip, GetPlayerPing(params[0]),
  1519.         GetPlayerWeapon(params[0]), GetPlayerAmmo(params[0]), GetPlayerScore(params[0]), GetPlayerSkin(params[0]));
  1520.         ShowPlayerDialog(playerid, ADMSYS_DIALOG_STATS, DIALOG_STYLE_MSGBOX, strtmp, strtmp2, "Ок", "");
  1521.     }
  1522.     return 1;
  1523. }
  1524.  
  1525. CMD:answer(playerid, const params[]) return admsys_cmd_answer(playerid, params);
  1526. admsys_cmd_answer(playerid, const params[])
  1527. {
  1528.     if(IsPlayerAdminEx(playerid))
  1529.     {
  1530.         if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /answer [id] [текст]");
  1531.         new pos;
  1532.         static strtmp[145];
  1533.         while(params[pos] > ' ') pos++;
  1534.         strmid(strtmp, params, 0, pos);
  1535.         if(!admsys_IsNumeric(strtmp)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /answer [id] [текст]");
  1536.         new giveid = strval(strtmp);
  1537.         if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок не найден");
  1538.         while(params[pos] == ' ') pos++;
  1539.         if(params[pos] == '\0') return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /answer [id] [текст]");
  1540.         static strname[MAX_PLAYER_NAME + 1], strname2[MAX_PLAYER_NAME + 1];
  1541.         GetPlayerName(playerid, strname, sizeof strname);
  1542.         GetPlayerName(giveid, strname2, sizeof strname2);
  1543.         format(strtmp, sizeof strtmp, "[Ответ на report %s] %s: %s", strname2, strname, params[pos]);
  1544.         SendMessageToAdmins(1, ADMSYS_REPORT_COLOR, strtmp);
  1545.         if(!IsPlayerAdminEx(giveid))
  1546.         {
  1547.             strtmp = "[Ответ на report]: ";
  1548.             strcat(strtmp, params[pos]);
  1549.             SendClientMessage(giveid, ADMSYS_REPORT_COLOR, strtmp);
  1550.         }
  1551.     }
  1552.     return 1;
  1553. }
  1554.  
  1555. CMD:apanel(playerid, const params[]) return admsys_cmd_apanel(playerid, params);
  1556. CMD:admpanel(playerid, const params[]) return admsys_cmd_apanel(playerid, params);
  1557. CMD:adminpanel(playerid, const params[]) return admsys_cmd_apanel(playerid, params);
  1558. admsys_cmd_apanel(playerid, const params[])
  1559. {
  1560.     #pragma unused params
  1561.     if(IsPlayerAdminEx(playerid))
  1562.     {
  1563.         static strtmp[476];
  1564.         strtmp[0] = EOS;
  1565.         strcat(strtmp, "Админ чат\nПомощь по админ командам\nСписок администраторов онлайн");
  1566.         if(IsPlayerAdminEx(playerid, 2)) strcat(strtmp, "\nТелепортировать транспорт на респавн\n\
  1567.         Сообщение в формате: 'Администратор: [текст]'");
  1568.         if(IsPlayerAdminEx(playerid, 3)) strcat(strtmp, "\nСписок подозреваемых игроков\n\
  1569.         Телепортироваться к транспорту\nТелепортироваться на координаты\nБлокировка IP-адреса\nОчистка чата");
  1570.         if(IsPlayerAdminEx(playerid, 4)) strcat(strtmp, "\nОтремонтировать транспорт\nРазблокировать IP-адрес");
  1571.         if(IsPlayerAdminEx(playerid, 5)) strcat(strtmp, "\nТелепортировать всех к себе\nУстановить погоду\n\
  1572.         Установить время суток\nУничтожить транспорт\nСоздать транспорт");
  1573.         strcat(strtmp, "\nОтменить последнюю команду");
  1574.         ShowPlayerDialog(playerid, ADMSYS_DIALOG_APANEL, DIALOG_STYLE_LIST, "Админ-панель", strtmp, "Ок", "Закрыть");
  1575.     }
  1576.     return 1;
  1577. }
  1578.  
  1579. CMD:admins(playerid, const params[]) return admsys_cmd_admins(playerid, params);
  1580. admsys_cmd_admins(playerid, const params[])
  1581. {
  1582.     #pragma unused params
  1583.     if(IsPlayerAdminEx(playerid))
  1584.     {
  1585.         static strtmp[306];
  1586.         strtmp[0] = EOS;
  1587.         static strtmp2[61], strtmp3[MAX_PLAYER_NAME + 1];
  1588.         #if defined foreach
  1589.         foreach(new i : Player)
  1590.         #else
  1591.         for(new i = GetPlayerPoolSize(); i >= 0; --i)
  1592.         #endif
  1593.         {
  1594.             if(IsPlayerAdminEx(i))
  1595.             {
  1596.                 GetPlayerName(i, strtmp3, sizeof strtmp3);
  1597.                 format(strtmp2, sizeof strtmp2, "Администратор %s[%d] [Уровень %d]\n", strtmp3, i, GetPlayerAdminLevel(i));
  1598.                 strcat(strtmp, strtmp2);
  1599.             }
  1600.         }
  1601.         if(strtmp[0] == '\0') strtmp = "В данный момент нет администраторов онлайн";
  1602.         ShowPlayerDialog(playerid, ADMSYS_DIALOG_ADMINS, DIALOG_STYLE_MSGBOX, "Администраторы онлайн", strtmp, "Ок", "");
  1603.     }
  1604.     return 1;
  1605. }
  1606.  
  1607. CMD:eject(playerid, const params[]) return admsys_cmd_eject(playerid, params);
  1608. admsys_cmd_eject(playerid, const params[])
  1609. {
  1610.     if(IsPlayerAdminEx(playerid))
  1611.     {
  1612.         new strtmp[67];
  1613.         if(admsys_isnull(params))
  1614.         {
  1615.             format(strtmp, sizeof strtmp, "%d", playerid);
  1616.             return admsys_cmd_eject(playerid, strtmp);
  1617.         }
  1618.         static strname[MAX_PLAYER_NAME + 1], strname2[MAX_PLAYER_NAME + 1];
  1619.         GetPlayerName(playerid, strname, sizeof strname);
  1620.         for(new i = 1, pos, oldpos, giveid, j; i <= ADMSYS_MAX_GIVE_PLAYERS_IN_CMD; i++)
  1621.         {
  1622.             while(params[pos] == ' ') pos++;
  1623.             if(params[pos])
  1624.             {
  1625.                 oldpos = pos;
  1626.                 while(params[pos] > ' ') pos++;
  1627.                 strmid(strtmp, params, oldpos, pos);
  1628.                 if(!admsys_IsNumeric(strtmp))
  1629.                 {
  1630.                     strtmp = "Используйте: /eject [id]";
  1631.                     if(i > 1)
  1632.                     {
  1633.                         for(j = 2; j <= i; j++)
  1634.                         {
  1635.                             format(strname2, sizeof strname2, " [id %d]", j);
  1636.                             strcat(strtmp, strname2);
  1637.                         }
  1638.                     }
  1639.                     return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, strtmp);
  1640.                 }
  1641.                 giveid = strval(strtmp);
  1642.                 if(!IsPlayerConnected(giveid))
  1643.                 {
  1644.                     if(i == 1) strtmp = "Игрок не найден";
  1645.                     else format(strtmp, sizeof strtmp, "Игрок %d не найден", i);
  1646.                     SendClientMessage(playerid, ADMSYS_ERROR_COLOR, strtmp);
  1647.                 }
  1648.                 else if(!IsPlayerInAnyVehicle(giveid))
  1649.                 {
  1650.                     if(i == 1)
  1651.                     {
  1652.                         if(giveid == playerid) strtmp = "Вы не в транспорте";
  1653.                         else strtmp = "Игрок не в транспорте";
  1654.                     }
  1655.                     else format(strtmp, sizeof strtmp, "Игрок %d не в транспорте", i);
  1656.                     SendClientMessage(playerid, ADMSYS_ERROR_COLOR, strtmp);
  1657.                 }
  1658.                 else
  1659.                 {
  1660.                     RemovePlayerFromVehicle(giveid);
  1661.                     GetPlayerName(giveid, strname2, sizeof strname2);
  1662.                     format(strtmp, sizeof strtmp, "Вы высадили %s[%d] из транспорта", strname2, giveid);
  1663.                     SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
  1664.                     format(strtmp, sizeof strtmp, "Администратор %s высадил вас из транспорта", strname);
  1665.                     SendClientMessage(giveid, ADMSYS_ADM_ACTION_COLOR, strtmp);
  1666.                 }
  1667.             }
  1668.         }
  1669.     }
  1670.     return 1;
  1671. }
  1672.  
  1673. CMD:spec(playerid, params[]) return admsys_cmd_spec(playerid, params);
  1674. admsys_cmd_spec(playerid, params[])
  1675. {
  1676.     if(IsPlayerAdminEx(playerid, 2))
  1677.     {
  1678.         if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /spec [id]");
  1679.         if(!strcmp(params, "off", true)) return admsys_cmd_specoff(playerid, "\1");
  1680.         if(!strcmp(params, "update", true)) return admsys_cmd_specupdate(playerid, "\1");
  1681.         if(!admsys_IsNumeric(params)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /spec [id]");
  1682.         params[0] = strval(params);
  1683.         if(!StartSpectating(playerid, params[0])) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок не найден");
  1684.     }
  1685.     return 1;
  1686. }
  1687.  
  1688. CMD:specupdate(playerid, const params[]) return admsys_cmd_specupdate(playerid, params);
  1689. admsys_cmd_specupdate(playerid, const params[])
  1690. {
  1691.     #pragma unused params
  1692.     if(IsPlayerAdminEx(playerid, 2)) UpdateSpectating(playerid);
  1693.     return 1;
  1694. }
  1695.  
  1696. CMD:specoff(playerid, const params[]) return admsys_cmd_specoff(playerid, params);
  1697. admsys_cmd_specoff(playerid, const params[])
  1698. {
  1699.     #pragma unused params
  1700.     if(IsPlayerAdminEx(playerid, 2)) StopSpectating(playerid);
  1701.     return 1;
  1702. }
  1703.  
  1704. CMD:spawnveh(playerid, params[]) return admsys_cmd_spawnveh(playerid, params);
  1705. CMD:spawnvehicle(playerid, params[]) return admsys_cmd_spawnveh(playerid, params);
  1706. admsys_cmd_spawnveh(playerid, params[])
  1707. {
  1708.     if(IsPlayerAdminEx(playerid, 2))
  1709.     {
  1710.         if(admsys_isnull(params))
  1711.         {
  1712.             if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Вы не в транспорте");
  1713.             params[0] = GetPlayerVehicleID(playerid);
  1714.         }
  1715.         else
  1716.         {
  1717.             if(!admsys_IsNumeric(params))
  1718.                 return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /spawnveh [id транспорта]");
  1719.             params[0] = strval(params);
  1720.             if(GetVehicleModel(params[0]) <= 0)
  1721.                 return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Транспортное средство не найдено");
  1722.         }
  1723.         static strtmp[28];
  1724.         SetVehicleToRespawn(params[0]);
  1725.         format(strtmp, sizeof strtmp, "Транспорт id %d заспавнен", params[0]);
  1726.         SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
  1727.     }
  1728.     return 1;
  1729. }
  1730.  
  1731. CMD:mute(playerid, const params[]) return admsys_cmd_mute(playerid, params);
  1732. admsys_cmd_mute(playerid, const params[])
  1733. {
  1734.     if(IsPlayerAdminEx(playerid, 2))
  1735.     {
  1736.         if(admsys_isnull(params))
  1737.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /mute [id] [время] [причина]");
  1738.         static strtmp[145];
  1739.         new pos, oldpos;
  1740.         while(params[pos] > ' ') pos++;
  1741.         strmid(strtmp, params, 0, pos);
  1742.         if(!admsys_IsNumeric(strtmp))
  1743.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /mute [id] [время] [причина]");
  1744.         new giveid = strval(strtmp);
  1745.         if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок не найден");
  1746.         if(AdmSysInfo[giveid][asMuteTime] > 0) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок уже заглушен");
  1747.         if(GetPlayerAdminLevel(playerid) <= GetPlayerAdminLevel(giveid) && playerid != giveid)
  1748.             return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Вы не можете применить это действие к администратору");
  1749.         while(params[pos] == ' ') pos++;
  1750.         oldpos = pos;
  1751.         while(params[pos] > ' ') pos++;
  1752.         strmid(strtmp, params, oldpos, pos);
  1753.         if(params[oldpos] == '\0' || !admsys_IsNumeric(strtmp))
  1754.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /mute [id] [время] [причина]");
  1755.         new gtime = strval(strtmp);
  1756.         if(!(1 <= gtime <= 60)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Время должно быть от 1 до 60 минут");
  1757.         while(params[pos] == ' ') pos++;
  1758.         if(params[pos] == '\0') return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /mute [id] [время] [причина]");
  1759.         static strname[MAX_PLAYER_NAME + 1], strname2[MAX_PLAYER_NAME + 1];
  1760.         AdmSysInfo[giveid][asMuteTime] = gtime * 60;
  1761.         GetPlayerName(playerid, strname, sizeof strname);
  1762.         GetPlayerName(giveid, strname2, sizeof strname2);
  1763.         format(strtmp, sizeof strtmp, "Администратор %s выдал молчанку игроку %s[%d] на %d минут. Причина: %s", strname, strname2, giveid, gtime, params[pos]);
  1764.         #if ADMSYS_SEND_ACTION_MSGS_TO_ALL
  1765.             SendClientMessageToAll(ADMSYS_ADM_ACTION_COLOR, strtmp);
  1766.         #else
  1767.             SendMessageToAdmins(2, ADMSYS_ADM_ACTION_COLOR, strtmp);
  1768.         #endif
  1769.         format(strtmp, sizeof strtmp, "Администратор %s выдал вам молчанку на %d минут. Причина: %s", strname, gtime, params[pos]);
  1770.         SendClientMessage(giveid, ADMSYS_ADM_ACTION_COLOR, strtmp);
  1771.     }
  1772.     return 1;
  1773. }
  1774.  
  1775. CMD:unmute(playerid, const params[]) return admsys_cmd_unmute(playerid, params);
  1776. admsys_cmd_unmute(playerid, const params[])
  1777. {
  1778.     if(IsPlayerAdminEx(playerid, 2))
  1779.     {
  1780.         new strtmp[96];
  1781.         if(admsys_isnull(params))
  1782.         {
  1783.             format(strtmp, sizeof strtmp, "%d", playerid);
  1784.             return admsys_cmd_unmute(playerid, strtmp);
  1785.         }
  1786.         static strname[MAX_PLAYER_NAME + 1], strname2[MAX_PLAYER_NAME + 1];
  1787.         GetPlayerName(playerid, strname, sizeof strname);
  1788.         for(new i = 1, pos, oldpos, giveid, j; i <= ADMSYS_MAX_GIVE_PLAYERS_IN_CMD; i++)
  1789.         {
  1790.             while(params[pos] == ' ') pos++;
  1791.             if(params[pos])
  1792.             {
  1793.                 oldpos = pos;
  1794.                 while(params[pos] > ' ') pos++;
  1795.                 strmid(strtmp, params, oldpos, pos);
  1796.                 if(!admsys_IsNumeric(strtmp))
  1797.                 {
  1798.                     strtmp = "Используйте: /unmute [id]";
  1799.                     if(i > 1)
  1800.                     {
  1801.                         for(j = 2; j <= i; j++)
  1802.                         {
  1803.                             format(strname2, sizeof strname2, " [id %d]", j);
  1804.                             strcat(strtmp, strname2);
  1805.                         }
  1806.                     }
  1807.                     return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, strtmp);
  1808.                 }
  1809.                 giveid = strval(strtmp);
  1810.                 if(!IsPlayerConnected(giveid))
  1811.                 {
  1812.                     if(i == 1) strtmp = "Игрок не найден";
  1813.                     else format(strtmp, sizeof strtmp, "Игрок %d не найден", i);
  1814.                     SendClientMessage(playerid, ADMSYS_ERROR_COLOR, strtmp);
  1815.                 }
  1816.                 else if(AdmSysInfo[giveid][asMuteTime] < 1)
  1817.                 {
  1818.                     if(i == 1) strtmp = "Игрок не заглушен";
  1819.                     else format(strtmp, sizeof strtmp, "Игрок %d не заглушен", i);
  1820.                     SendClientMessage(playerid, ADMSYS_ERROR_COLOR, strtmp);
  1821.                 }
  1822.                 else
  1823.                 {
  1824.                     AdmSysInfo[giveid][asMuteTime] = 0;
  1825.                     GetPlayerName(giveid, strname2, sizeof strname2);
  1826.                     format(strtmp, sizeof strtmp, "Администратор %s снял молчанку с игрока %s[%d]", strname, strname2, giveid);
  1827.                     #if ADMSYS_SEND_ACTION_MSGS_TO_ALL
  1828.                         SendClientMessageToAll(ADMSYS_ADM_ACTION_COLOR, strtmp);
  1829.                     #else
  1830.                         SendMessageToAdmins(2, ADMSYS_ADM_ACTION_COLOR, strtmp);
  1831.                     #endif
  1832.                     format(strtmp, sizeof strtmp, "Администратор %s снял с вас молчанку", strname);
  1833.                     SendClientMessage(giveid, ADMSYS_ADM_ACTION_COLOR, strtmp);
  1834.                 }
  1835.             }
  1836.         }
  1837.     }
  1838.     return 1;
  1839. }
  1840.  
  1841. CMD:asay(playerid, const params[]) return admsys_cmd_asay(playerid, params);
  1842. CMD:admsay(playerid, const params[]) return admsys_cmd_asay(playerid, params);
  1843. CMD:adminsay(playerid, const params[]) return admsys_cmd_asay(playerid, params);
  1844. admsys_cmd_asay(playerid, const params[])
  1845. {
  1846.     if(IsPlayerAdminEx(playerid, 2))
  1847.     {
  1848.         if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /asay [текст]");
  1849.         static strtmp[145], strname[MAX_PLAYER_NAME + 1];
  1850.         strtmp = "Администратор ";
  1851.         GetPlayerName(playerid, strname, sizeof strname);
  1852.         strcat(strtmp, strname);
  1853.         strcat(strtmp, ": ");
  1854.         strcat(strtmp, params);
  1855.         SendClientMessageToAll(ADMSYS_ADM_ACTION_COLOR, strtmp);
  1856.     }
  1857.     return 1;
  1858. }
  1859.  
  1860. CMD:warn(playerid, const params[]) return admsys_cmd_warn(playerid, params);
  1861. admsys_cmd_warn(playerid, const params[])
  1862. {
  1863.     if(IsPlayerAdminEx(playerid, 2))
  1864.     {
  1865.         if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /warn [id] [причина]");
  1866.         static strtmp[145];
  1867.         new pos;
  1868.         while(params[pos] > ' ') pos++;
  1869.         strmid(strtmp, params, 0, pos);
  1870.         if(!admsys_IsNumeric(strtmp)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /warn [id] [причина]");
  1871.         new giveid = strval(strtmp);
  1872.         if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок не найден");
  1873.         if(GetPlayerAdminLevel(playerid) <= GetPlayerAdminLevel(giveid) && playerid != giveid)
  1874.             return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Вы не можете применить это действие к администратору");
  1875.         while(params[pos] == ' ') pos++;
  1876.         if(params[pos] == '\0') return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /warn [id] [причина]");
  1877.         static strname[MAX_PLAYER_NAME + 1], strname2[MAX_PLAYER_NAME + 1];
  1878.         AdmSysInfo[giveid][asWarns]++;
  1879.         CallRemoteFunction("OnPlayerWarn", "iii", giveid, playerid, AdmSysInfo[giveid][asWarns]);
  1880.         GetPlayerName(playerid, strname, sizeof strname);
  1881.         GetPlayerName(giveid, strname2, sizeof strname2);
  1882.         format(strtmp, sizeof strtmp, "Администратор %s выдал предупреждение игроку %s[%d]. Причина: %s", strname, strname2, giveid, params[pos]);
  1883.         #if ADMSYS_SEND_ACTION_MSGS_TO_ALL
  1884.             SendClientMessageToAll(ADMSYS_ADM_ACTION_COLOR, strtmp);
  1885.         #else
  1886.             SendMessageToAdmins(2, ADMSYS_ADM_ACTION_COLOR, strtmp);
  1887.         #endif
  1888.         format(strtmp, sizeof strtmp, "Администратор %s выдал вам предупреждение. Причина: %s", strname, params[pos]);
  1889.         SendClientMessage(giveid, ADMSYS_ADM_ACTION_COLOR, strtmp);
  1890.         if(AdmSysInfo[giveid][asWarns] > ADMSYS_MAX_WARNS) return admsys_cmd_ban(playerid, params);
  1891.     }
  1892.     return 1;
  1893. }
  1894.  
  1895. CMD:kick(playerid, const params[]) return admsys_cmd_kick(playerid, params);
  1896. admsys_cmd_kick(playerid, const params[])
  1897. {
  1898.     if(IsPlayerAdminEx(playerid, 2))
  1899.     {
  1900.         if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /kick [id] [причина]");
  1901.         static strtmp[145];
  1902.         new pos;
  1903.         while(params[pos] > ' ') pos++;
  1904.         strmid(strtmp, params, 0, pos);
  1905.         if(!admsys_IsNumeric(strtmp)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /kick [id] [причина]");
  1906.         new giveid = strval(strtmp);
  1907.         if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок не найден");
  1908.         if(GetPlayerAdminLevel(playerid) <= GetPlayerAdminLevel(giveid) && playerid != giveid)
  1909.             return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Вы не можете применить это действие к администратору");
  1910.         while(params[pos] == ' ') pos++;
  1911.         if(params[pos] == '\0') return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /kick [id] [причина]");
  1912.         static strname[MAX_PLAYER_NAME + 1], strname2[MAX_PLAYER_NAME + 1];
  1913.         CallRemoteFunction("OnPlayerKick", "iii", giveid, playerid, false);
  1914.         GetPlayerName(playerid, strname, sizeof strname);
  1915.         GetPlayerName(giveid, strname2, sizeof strname2);
  1916.         format(strtmp, sizeof strtmp, "Администратор %s кикнул игрока %s[%d]. Причина: %s", strname, strname2, giveid, params[pos]);
  1917.         #if ADMSYS_SEND_ACTION_MSGS_TO_ALL
  1918.             SendClientMessageToAll(ADMSYS_ADM_ACTION_COLOR, strtmp);
  1919.         #else
  1920.             SendMessageToAdmins(2, ADMSYS_ADM_ACTION_COLOR, strtmp);
  1921.         #endif
  1922.         format(strtmp, sizeof strtmp, "Администратор %s кикнул вас. Причина: %s", strname, params[pos]);
  1923.         SendClientMessage(giveid, ADMSYS_ADM_ACTION_COLOR, strtmp);
  1924.         SetTimerEx("KickWithDelay", 500, 0, "i", giveid);
  1925.     }
  1926.     return 1;
  1927. }
  1928.  
  1929. CMD:freeze(playerid, const params[]) return admsys_cmd_freeze(playerid, params);
  1930. admsys_cmd_freeze(playerid, const params[])
  1931. {
  1932.     if(IsPlayerAdminEx(playerid, 2))
  1933.     {
  1934.         new strtmp[90];
  1935.         if(admsys_isnull(params))
  1936.         {
  1937.             format(strtmp, sizeof strtmp, "%d", playerid);
  1938.             return admsys_cmd_freeze(playerid, strtmp);
  1939.         }
  1940.         static strname[MAX_PLAYER_NAME + 1], strname2[MAX_PLAYER_NAME + 1];
  1941.         GetPlayerName(playerid, strname, sizeof strname);
  1942.         for(new i = 1, pos, oldpos, giveid, j; i <= ADMSYS_MAX_GIVE_PLAYERS_IN_CMD; i++)
  1943.         {
  1944.             while(params[pos] == ' ') pos++;
  1945.             if(params[pos])
  1946.             {
  1947.                 oldpos = pos;
  1948.                 while(params[pos] > ' ') pos++;
  1949.                 strmid(strtmp, params, oldpos, pos);
  1950.                 if(!admsys_IsNumeric(strtmp))
  1951.                 {
  1952.                     strtmp = "Используйте: /freeze [id]";
  1953.                     if(i > 1)
  1954.                     {
  1955.                         for(j = 2; j <= i; j++)
  1956.                         {
  1957.                             format(strname2, sizeof strname2, " [id %d]", j);
  1958.                             strcat(strtmp, strname2);
  1959.                         }
  1960.                     }
  1961.                     return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, strtmp);
  1962.                 }
  1963.                 giveid = strval(strtmp);
  1964.                 if(!IsPlayerConnected(giveid))
  1965.                 {
  1966.                     if(i == 1) strtmp = "Игрок не найден";
  1967.                     else format(strtmp, sizeof strtmp, "Игрок %d не найден", i);
  1968.                     SendClientMessage(playerid, ADMSYS_ERROR_COLOR, strtmp);
  1969.                 }
  1970.                 else
  1971.                 {
  1972.                     TogglePlayerControllable(giveid, 0);
  1973.                     GetPlayerName(giveid, strname2, sizeof strname2);
  1974.                     format(strtmp, sizeof strtmp, "Администратор %s заморозил игрока %s[%d]", strname, strname2, giveid);
  1975.                     #if ADMSYS_SEND_ACTION_MSGS_TO_ALL
  1976.                         SendClientMessageToAll(ADMSYS_ADM_ACTION_COLOR, strtmp);
  1977.                     #else
  1978.                         SendMessageToAdmins(2, ADMSYS_ADM_ACTION_COLOR, strtmp);
  1979.                     #endif
  1980.                     format(strtmp, sizeof strtmp, "Администратор %s заморозил вас", strname);
  1981.                     SendClientMessage(giveid, ADMSYS_ADM_ACTION_COLOR, strtmp);
  1982.                 }
  1983.             }
  1984.         }
  1985.     }
  1986.     return 1;
  1987. }
  1988.  
  1989. CMD:unfreeze(playerid, const params[]) return admsys_cmd_unfreeze(playerid, params);
  1990. admsys_cmd_unfreeze(playerid, const params[])
  1991. {
  1992.     if(IsPlayerAdminEx(playerid, 2))
  1993.     {
  1994.         new strtmp[91];
  1995.         if(admsys_isnull(params))
  1996.         {
  1997.             format(strtmp, sizeof strtmp, "%d", playerid);
  1998.             return admsys_cmd_unfreeze(playerid, strtmp);
  1999.         }
  2000.         static strname[MAX_PLAYER_NAME + 1], strname2[MAX_PLAYER_NAME + 1];
  2001.         GetPlayerName(playerid, strname, sizeof strname);
  2002.         for(new i = 1, pos, oldpos, giveid, j; i <= ADMSYS_MAX_GIVE_PLAYERS_IN_CMD; i++)
  2003.         {
  2004.             while(params[pos] == ' ') pos++;
  2005.             if(params[pos])
  2006.             {
  2007.                 oldpos = pos;
  2008.                 while(params[pos] > ' ') pos++;
  2009.                 strmid(strtmp, params, oldpos, pos);
  2010.                 if(!admsys_IsNumeric(strtmp))
  2011.                 {
  2012.                     strtmp = "Используйте: /unfreeze [id]";
  2013.                     if(i > 1)
  2014.                     {
  2015.                         for(j = 2; j <= i; j++)
  2016.                         {
  2017.                             format(strname2, sizeof strname2, " [id %d]", j);
  2018.                             strcat(strtmp, strname2);
  2019.                         }
  2020.                     }
  2021.                     return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, strtmp);
  2022.                 }
  2023.                 giveid = strval(strtmp);
  2024.                 if(!IsPlayerConnected(giveid))
  2025.                 {
  2026.                     if(i == 1) strtmp = "Игрок не найден";
  2027.                     else format(strtmp, sizeof strtmp, "Игрок %d не найден", i);
  2028.                     SendClientMessage(playerid, ADMSYS_ERROR_COLOR, strtmp);
  2029.                 }
  2030.                 else
  2031.                 {
  2032.                     TogglePlayerControllable(giveid, 1);
  2033.                     GetPlayerName(giveid, strname2, sizeof strname2);
  2034.                     format(strtmp, sizeof strtmp, "Администратор %s разморозил игрока %s[%d]", strname, strname2, giveid);
  2035.                     #if ADMSYS_SEND_ACTION_MSGS_TO_ALL
  2036.                         SendClientMessageToAll(ADMSYS_ADM_ACTION_COLOR, strtmp);
  2037.                     #else
  2038.                         SendMessageToAdmins(2, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2039.                     #endif
  2040.                     format(strtmp, sizeof strtmp, "Администратор %s разморозил вас", strname);
  2041.                     SendClientMessage(giveid, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2042.                 }
  2043.             }
  2044.         }
  2045.     }
  2046.     return 1;
  2047. }
  2048.  
  2049. CMD:slap(playerid, const params[]) return admsys_cmd_slap(playerid, params);
  2050. admsys_cmd_slap(playerid, const params[])
  2051. {
  2052.     if(IsPlayerAdminEx(playerid, 2))
  2053.     {
  2054.         if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /slap [id] [причина]");
  2055.         static strtmp[145];
  2056.         new pos;
  2057.         while(params[pos] > ' ') pos++;
  2058.         strmid(strtmp, params, 0, pos);
  2059.         if(!admsys_IsNumeric(strtmp)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /slap [id] [причина]");
  2060.         new giveid = strval(strtmp);
  2061.         if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок не найден");
  2062.         if(GetPlayerAdminLevel(playerid) <= GetPlayerAdminLevel(giveid) && playerid != giveid)
  2063.             return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Вы не можете применить это действие к администратору");
  2064.         if(IsPlayerSpectating(giveid))
  2065.             return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок в режиме наблюдения");
  2066.         while(params[pos] == ' ') pos++;
  2067.         if(params[pos] == '\0') return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /slap [id] [причина]");
  2068.         static strname[MAX_PLAYER_NAME + 1], strname2[MAX_PLAYER_NAME + 1];
  2069.         new Float:pX, Float:pY, Float:pZ;
  2070.         GetPlayerPos(giveid, pX, pY, pZ);
  2071.         SetPlayerPos(giveid, pX, pY, pZ + 8.0);
  2072.         PlayerPlaySound(giveid, 1130, 0.0, 0.0, 0.0);
  2073.         GetPlayerName(playerid, strname, sizeof strname);
  2074.         GetPlayerName(giveid, strname2, sizeof strname2);
  2075.         format(strtmp, sizeof strtmp, "Администратор %s подкинул игрока %s[%d]. Причина: %s", strname, strname2, giveid, params[pos]);
  2076.         #if ADMSYS_SEND_ACTION_MSGS_TO_ALL
  2077.             SendClientMessageToAll(ADMSYS_ADM_ACTION_COLOR, strtmp);
  2078.         #else
  2079.             SendMessageToAdmins(2, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2080.         #endif
  2081.         format(strtmp, sizeof strtmp, "Администратор %s подкинул вас. Причина: %s", strname, params[pos]);
  2082.         SendClientMessage(giveid, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2083.     }
  2084.     return 1;
  2085. }
  2086.  
  2087. CMD:goto(playerid, params[]) return admsys_cmd_goto(playerid, params);
  2088. admsys_cmd_goto(playerid, params[])
  2089. {
  2090.     if(IsPlayerAdminEx(playerid, 2))
  2091.     {
  2092.         if(IsPlayerSpectating(playerid))
  2093.             return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Вы в режиме наблюдения");
  2094.         if(admsys_isnull(params) || !admsys_IsNumeric(params))
  2095.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /goto [id]");
  2096.         params[0] = strval(params);
  2097.         if(params[0] == playerid) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Нельзя указывать свой id");
  2098.         if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок не найден");
  2099.         static strtmp[55], strname[MAX_PLAYER_NAME + 1];
  2100.         new Float:pX, Float:pY, Float:pZ;
  2101.         GetPlayerPos(params[0], pX, pY, pZ);
  2102.         SetPlayerPos(playerid, pX + 1.0, pY + 1.0, pZ);
  2103.         SetPlayerInterior(playerid, GetPlayerInterior(params[0]));
  2104.         SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(params[0]));
  2105.         GetPlayerName(params[0], strname, sizeof strname);
  2106.         format(strtmp, sizeof strtmp, "Вы телепортировались к %s[%d]", strname, params[0]);
  2107.         SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
  2108.     }
  2109.     return 1;
  2110. }
  2111.  
  2112. CMD:suspectlist(playerid, const params[]) return admsys_cmd_suspectlist(playerid, params);
  2113. admsys_cmd_suspectlist(playerid, const params[])
  2114. {
  2115.     #pragma unused params
  2116.     if(IsPlayerAdminEx(playerid, 3))
  2117.     {
  2118.         UpdateSuspectList();
  2119.         new c;
  2120.         static strtmp[337], strtmp2[43], iname[MAX_PLAYER_NAME + 1];
  2121.         strtmp[0] = EOS;
  2122.         for(new i; i < sizeof SuspectList; ++i)
  2123.         {
  2124.             if(SuspectList[i] != INVALID_PLAYER_ID)
  2125.             {
  2126.                 GetPlayerName(SuspectList[i], iname, sizeof iname);
  2127.                 format(strtmp2, sizeof strtmp2, "%d. %s [ID: %d]\n", i + 1, iname, SuspectList[i]);
  2128.                 strcat(strtmp, strtmp2);
  2129.                 c++;
  2130.             }
  2131.         }
  2132.         if(c) ShowPlayerDialog(playerid, ADMSYS_DIALOG_SUSPECT_LIST, DIALOG_STYLE_LIST, "Ожидают проверки", strtmp, "Ок", "Закрыть");
  2133.         else SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, "Список пуст");
  2134.     }
  2135.     return 1;
  2136. }
  2137.  
  2138. CMD:gethere(playerid, const params[]) return admsys_cmd_gethere(playerid, params);
  2139. CMD:get(playerid, const params[]) return admsys_cmd_gethere(playerid, params);
  2140. admsys_cmd_gethere(playerid, const params[])
  2141. {
  2142.     if(IsPlayerAdminEx(playerid, 3))
  2143.     {
  2144.         if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /gethere [id]");
  2145.         if(!strcmp(params, "all", true)) return admsys_cmd_getall(playerid, "\1");
  2146.         static strname[MAX_PLAYER_NAME + 1], strname2[MAX_PLAYER_NAME + 1];
  2147.         new strtmp[67], interior, vw, Float:pX, Float:pY, Float:pZ;
  2148.         GetPlayerName(playerid, strname, sizeof strname);
  2149.         interior = GetPlayerInterior(playerid);
  2150.         vw = GetPlayerVirtualWorld(playerid);
  2151.         GetPlayerPos(playerid, pX, pY, pZ);
  2152.         pX += 1.0;
  2153.         pY += 1.0;
  2154.         for(new i = 1, pos, oldpos, giveid, j; i <= ADMSYS_MAX_GIVE_PLAYERS_IN_CMD; i++)
  2155.         {
  2156.             while(params[pos] == ' ') pos++;
  2157.             if(params[pos])
  2158.             {
  2159.                 oldpos = pos;
  2160.                 while(params[pos] > ' ') pos++;
  2161.                 strmid(strtmp, params, oldpos, pos);
  2162.                 if(!admsys_IsNumeric(strtmp))
  2163.                 {
  2164.                     strtmp = "Используйте: /gethere [id]";
  2165.                     if(i > 1)
  2166.                     {
  2167.                         for(j = 2; j <= i; j++)
  2168.                         {
  2169.                             format(strname2, sizeof strname2, " [id %d]", j);
  2170.                             strcat(strtmp, strname2);
  2171.                         }
  2172.                     }
  2173.                     return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, strtmp);
  2174.                 }
  2175.                 giveid = strval(strtmp);
  2176.                 if(giveid == playerid) SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Нельзя указывать свой id");
  2177.                 else if(!IsPlayerConnected(giveid))
  2178.                 {
  2179.                     if(i == 1) strtmp = "Игрок не найден";
  2180.                     else format(strtmp, sizeof strtmp, "Игрок %d не найден", i);
  2181.                     SendClientMessage(playerid, ADMSYS_ERROR_COLOR, strtmp);
  2182.                 }
  2183.                 else
  2184.                 {
  2185.                     SetPlayerPos(giveid, pX, pY, pZ);
  2186.                     SetPlayerVirtualWorld(giveid, vw);
  2187.                     SetPlayerInterior(giveid, interior);
  2188.                     GetPlayerName(giveid, strname2, sizeof strname2);
  2189.                     format(strtmp, sizeof strtmp, "Вы телепортировали %s[%d] к себе", strname2, giveid);
  2190.                     SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
  2191.                     format(strtmp, sizeof strtmp, "Администратор %s телепортировал вас к себе", strname);
  2192.                     SendClientMessage(giveid, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2193.                 }
  2194.             }
  2195.         }
  2196.     }
  2197.     return 1;
  2198. }
  2199.  
  2200. CMD:gotoveh(playerid, params[]) return admsys_cmd_gotoveh(playerid, params);
  2201. CMD:gotovehicle(playerid, params[]) return admsys_cmd_gotoveh(playerid, params);
  2202. admsys_cmd_gotoveh(playerid, params[])
  2203. {
  2204.     if(IsPlayerAdminEx(playerid, 3))
  2205.     {
  2206.         if(IsPlayerSpectating(playerid))
  2207.             return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Вы в режиме наблюдения");
  2208.         if(admsys_isnull(params) || !admsys_IsNumeric(params))
  2209.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /gotoveh [id транспорта]");
  2210.         params[0] = strval(params);
  2211.         if(GetVehicleModel(params[0]) <= 0) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Транспорт не найден");
  2212.         static strtmp[54];
  2213.         new Float:vX, Float:vY, Float:vZ;
  2214.         GetVehiclePos(params[0], vX, vY, vZ);
  2215.         SetPlayerPos(playerid, vX, vY, vZ + 2.5);
  2216.         SetPlayerVirtualWorld(playerid, GetVehicleVirtualWorld(params[0]));
  2217.         format(strtmp, sizeof strtmp, "Вы телепортировались к транспорту id %d", params[0]);
  2218.         SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
  2219.     }
  2220.     return 1;
  2221. }
  2222.  
  2223. CMD:gotopos(playerid, params[]) return admsys_cmd_gotopos(playerid, params);
  2224. CMD:gotoposition(playerid, params[]) return admsys_cmd_gotopos(playerid, params);
  2225. admsys_cmd_gotopos(playerid, params[])
  2226. {
  2227.     if(IsPlayerAdminEx(playerid, 3))
  2228.     {
  2229.         if(IsPlayerSpectating(playerid))
  2230.             return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Вы в режиме наблюдения");
  2231.         if(admsys_isnull(params))
  2232.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /gotopos [x] [y] [z]");
  2233.         static strtmp[74];
  2234.         new pos, oldpos;
  2235.         while(params[pos] > ' ') pos++;
  2236.         strmid(strtmp, params, 0, pos);
  2237.         if(!admsys_IsNumericEx(strtmp))
  2238.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /gotopos [x] [y] [z]");
  2239.         new Float:cX = floatstr(strtmp);
  2240.         while(params[pos] == ' ') pos++;
  2241.         oldpos = pos;
  2242.         while(params[pos] > ' ') pos++;
  2243.         strmid(strtmp, params, oldpos, pos);
  2244.         if(params[oldpos] == '\0' || !admsys_IsNumericEx(strtmp))
  2245.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /gotopos [x] [y] [z]");
  2246.         new Float:cY = floatstr(strtmp);
  2247.         while(params[pos] == ' ') pos++;
  2248.         oldpos = pos;
  2249.         while(params[pos] > ' ') pos++;
  2250.         strmid(strtmp, params, oldpos, pos);
  2251.         if(params[oldpos] == '\0' || !admsys_IsNumericEx(strtmp))
  2252.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /gotopos [x] [y] [z]");
  2253.         new Float:cZ = floatstr(strtmp);
  2254.         SetPlayerPos(playerid, cX, cY, cZ);
  2255.         format(strtmp, sizeof strtmp, "Вы телепортированы на координаты %.4f, %.4f, %.4f", cX, cY, cZ);
  2256.         SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
  2257.     }
  2258.     return 1;
  2259. }
  2260.  
  2261. CMD:ban(playerid, const params[]) return admsys_cmd_ban(playerid, params);
  2262. admsys_cmd_ban(playerid, const params[])
  2263. {
  2264.     if(IsPlayerAdminEx(playerid, 3))
  2265.     {
  2266.         if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /ban [id] [причина]");
  2267.         static strtmp[145];
  2268.         new pos;
  2269.         while(params[pos] > ' ') pos++;
  2270.         strmid(strtmp, params, 0, pos);
  2271.         if(!admsys_IsNumeric(strtmp)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /ban [id] [причина]");
  2272.         new giveid = strval(strtmp);
  2273.         if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок не найден");
  2274.         if(GetPlayerAdminLevel(playerid) <= GetPlayerAdminLevel(giveid) && playerid != giveid)
  2275.             return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Вы не можете применить это действие к администратору");
  2276.         while(params[pos] == ' ') pos++;
  2277.         if(params[pos] == '\0') return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /ban [id] [причина]");
  2278.         static strname[MAX_PLAYER_NAME + 1], strname2[MAX_PLAYER_NAME + 1];
  2279.         CallRemoteFunction("OnPlayerBan", "iii", giveid, playerid, false);
  2280.         GetPlayerName(playerid, strname, sizeof strname);
  2281.         GetPlayerName(giveid, strname2, sizeof strname2);
  2282.         format(strtmp, sizeof strtmp, "Администратор %s забанил игрока %s[%d]. Причина: %s", strname, strname2, giveid, params[pos]);
  2283.         #if ADMSYS_SEND_ACTION_MSGS_TO_ALL
  2284.             SendClientMessageToAll(ADMSYS_ADM_ACTION_COLOR, strtmp);
  2285.         #else
  2286.             SendMessageToAdmins(3, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2287.         #endif
  2288.         format(strtmp, sizeof strtmp, "Администратор %s забанил вас. Причина: %s", strname, params[pos]);
  2289.         SendClientMessage(giveid, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2290.         SetTimerEx("BanWithDelay", 500, 0, "i", giveid);
  2291.     }
  2292.     return 1;
  2293. }
  2294.  
  2295. CMD:gmtest(playerid, params[]) return admsys_cmd_gmtest(playerid, params);
  2296. admsys_cmd_gmtest(playerid, params[])
  2297. {
  2298.     if(IsPlayerAdminEx(playerid, 3))
  2299.     {
  2300.         if(admsys_isnull(params) || !admsys_IsNumeric(params))
  2301.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /gmtest [id]");
  2302.         params[0] = strval(params);
  2303.         if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок не найден");
  2304.         if(AdmSysInfo[playerid][asGmTestID] != INVALID_PLAYER_ID)
  2305.             return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "В данный момент вы уже проверяете кого-то на GodMode");
  2306.         if(AdmSysInfo[params[0]][asGmTest])
  2307.             return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "В данный момент игрок уже проверяется на GodMode");
  2308.         if(!AdmSysInfo[params[0]][asIsSpawned])
  2309.             return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок не заспавнен");
  2310.         if(IsPlayerSpectating(params[0]))
  2311.             return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок в режиме наблюдения");
  2312.         new Float:bx, Float:by, Float:bz;
  2313.         GetPlayerPos(params[0], bx, by, bz);
  2314.         if(!IsPlayerInAnyVehicle(params[0]))
  2315.         {
  2316.             GetPlayerHealth(params[0], AdmSysInfo[params[0]][asGmTestHP]);
  2317.             GetPlayerArmour(params[0], AdmSysInfo[params[0]][asGmTestAR]);
  2318.         }
  2319.         else GetVehicleHealth(GetPlayerVehicleID(params[0]), AdmSysInfo[params[0]][asGmTestHP]);
  2320.         AdmSysInfo[params[0]][asGmTest] = true;
  2321.         AdmSysInfo[playerid][asGmTestID] = params[0];
  2322.         CreateExplosionForPlayer(params[0], bx, by, bz + 7.5, 5, 0.5);
  2323.         SetTimerEx("GmTest", 1000, 0, "d", playerid);
  2324.     }
  2325.     return 1;
  2326. }
  2327.  
  2328. CMD:spawn(playerid, const params[]) return admsys_cmd_spawn(playerid, params);
  2329. admsys_cmd_spawn(playerid, const params[])
  2330. {
  2331.     if(IsPlayerAdminEx(playerid, 3))
  2332.     {
  2333.         new strtmp[96];
  2334.         if(admsys_isnull(params))
  2335.         {
  2336.             format(strtmp, sizeof strtmp, "%d", playerid);
  2337.             return admsys_cmd_spawn(playerid, strtmp);
  2338.         }
  2339.         static strname[MAX_PLAYER_NAME + 1], strname2[MAX_PLAYER_NAME + 1];
  2340.         GetPlayerName(playerid, strname, sizeof strname);
  2341.         for(new i = 1, pos, oldpos, giveid, j; i <= ADMSYS_MAX_GIVE_PLAYERS_IN_CMD; i++)
  2342.         {
  2343.             while(params[pos] == ' ') pos++;
  2344.             if(params[pos])
  2345.             {
  2346.                 oldpos = pos;
  2347.                 while(params[pos] > ' ') pos++;
  2348.                 strmid(strtmp, params, oldpos, pos);
  2349.                 if(!admsys_IsNumeric(strtmp))
  2350.                 {
  2351.                     strtmp = "Используйте: /spawn [id]";
  2352.                     if(i > 1)
  2353.                     {
  2354.                         for(j = 2; j <= i; j++)
  2355.                         {
  2356.                             format(strname2, sizeof strname2, " [id %d]", j);
  2357.                             strcat(strtmp, strname2);
  2358.                         }
  2359.                     }
  2360.                     return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, strtmp);
  2361.                 }
  2362.                 giveid = strval(strtmp);
  2363.                 if(!IsPlayerConnected(giveid))
  2364.                 {
  2365.                     if(i == 1) strtmp = "Игрок не найден";
  2366.                     else format(strtmp, sizeof strtmp, "Игрок %d не найден", i);
  2367.                     SendClientMessage(playerid, ADMSYS_ERROR_COLOR, strtmp);
  2368.                 }
  2369.                 else
  2370.                 {
  2371.                     if(IsPlayerSpectating(giveid)) TogglePlayerSpectating(giveid, 0);
  2372.                     else SpawnPlayer(giveid);
  2373.                     GetPlayerName(giveid, strname2, sizeof strname2);
  2374.                     format(strtmp, sizeof strtmp, "Администратор %s заспавнил игрока %s[%d]", strname, strname2, giveid);
  2375.                     #if ADMSYS_SEND_ACTION_MSGS_TO_ALL
  2376.                         SendClientMessageToAll(ADMSYS_ADM_ACTION_COLOR, strtmp);
  2377.                     #else
  2378.                         SendMessageToAdmins(3, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2379.                     #endif
  2380.                     format(strtmp, sizeof strtmp, "Администратор %s заспавнил вас", strname);
  2381.                     SendClientMessage(giveid, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2382.                 }
  2383.             }
  2384.         }
  2385.     }
  2386.     return 1;
  2387. }
  2388.  
  2389. CMD:unwarn(playerid, const params[]) return admsys_cmd_unwarn(playerid, params);
  2390. admsys_cmd_unwarn(playerid, const params[])
  2391. {
  2392.     if(IsPlayerAdminEx(playerid, 3))
  2393.     {
  2394.         new strtmp[102];
  2395.         if(admsys_isnull(params))
  2396.         {
  2397.             format(strtmp, sizeof strtmp, "%d", playerid);
  2398.             return admsys_cmd_unwarn(playerid, strtmp);
  2399.         }
  2400.         static strname[MAX_PLAYER_NAME + 1], strname2[MAX_PLAYER_NAME + 1];
  2401.         GetPlayerName(playerid, strname, sizeof strname);
  2402.         for(new i = 1, pos, oldpos, giveid, j; i <= ADMSYS_MAX_GIVE_PLAYERS_IN_CMD; i++)
  2403.         {
  2404.             while(params[pos] == ' ') pos++;
  2405.             if(params[pos])
  2406.             {
  2407.                 oldpos = pos;
  2408.                 while(params[pos] > ' ') pos++;
  2409.                 strmid(strtmp, params, oldpos, pos);
  2410.                 if(!admsys_IsNumeric(strtmp))
  2411.                 {
  2412.                     strtmp = "Используйте: /unwarn [id]";
  2413.                     if(i > 1)
  2414.                     {
  2415.                         for(j = 2; j <= i; j++)
  2416.                         {
  2417.                             format(strname2, sizeof strname2, " [id %d]", j);
  2418.                             strcat(strtmp, strname2);
  2419.                         }
  2420.                     }
  2421.                     return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, strtmp);
  2422.                 }
  2423.                 giveid = strval(strtmp);
  2424.                 if(!IsPlayerConnected(giveid))
  2425.                 {
  2426.                     if(i == 1) strtmp = "Игрок не найден";
  2427.                     else format(strtmp, sizeof strtmp, "Игрок %d не найден", i);
  2428.                     SendClientMessage(playerid, ADMSYS_ERROR_COLOR, strtmp);
  2429.                 }
  2430.                 else if(AdmSysInfo[giveid][asWarns] < 1)
  2431.                 {
  2432.                     if(i == 1) strtmp = "Игрок не имеет предупреждений";
  2433.                     else format(strtmp, sizeof strtmp, "Игрок %d не имеет предупреждений", i);
  2434.                     SendClientMessage(playerid, ADMSYS_ERROR_COLOR, strtmp);
  2435.                 }
  2436.                 else
  2437.                 {
  2438.                     AdmSysInfo[giveid][asWarns]--;
  2439.                     GetPlayerName(giveid, strname2, sizeof strname2);
  2440.                     format(strtmp, sizeof strtmp, "Администратор %s снял предупреждение с игрока %s[%d]", strname, strname2, giveid);
  2441.                     #if ADMSYS_SEND_ACTION_MSGS_TO_ALL
  2442.                         SendClientMessageToAll(ADMSYS_ADM_ACTION_COLOR, strtmp);
  2443.                     #else
  2444.                         SendMessageToAdmins(3, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2445.                     #endif
  2446.                     format(strtmp, sizeof strtmp, "Администратор %s снял с вас предупреждение", strname);
  2447.                     SendClientMessage(giveid, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2448.                 }
  2449.             }
  2450.         }
  2451.     }
  2452.     return 1;
  2453. }
  2454.  
  2455. CMD:banip(playerid, const params[]) return admsys_cmd_banip(playerid, params);
  2456. CMD:blockip(playerid, const params[]) return admsys_cmd_banip(playerid, params);
  2457. admsys_cmd_banip(playerid, const params[])
  2458. {
  2459.     if(IsPlayerAdminEx(playerid, 3))
  2460.     {
  2461.         if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /banip [IP]");
  2462.         for(new i, c, j = strlen(params); i < j; i++)
  2463.         {
  2464.             switch(params[i])
  2465.             {
  2466.                 case '*':
  2467.                 {
  2468.                     if(c < 2) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "IP-адрес введён некорректно");
  2469.                 }
  2470.                 case '.': c++;
  2471.                 case '0'..'9':{}
  2472.                 default: return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "IP-адрес введён некорректно");
  2473.             }
  2474.         }
  2475.         static strtmp[75], strname[MAX_PLAYER_NAME + 1];
  2476.         format(strtmp, sizeof strtmp, "banip %s", params);
  2477.         SendRconCommand(strtmp);
  2478.         SendRconCommand("reloadbans");
  2479.         GetPlayerName(playerid, strname, sizeof strname);
  2480.         format(strtmp, sizeof strtmp, "Администратор %s заблокировал IP %s", strname, params);
  2481.         #if ADMSYS_SEND_ACTION_MSGS_TO_ALL
  2482.             SendClientMessageToAll(ADMSYS_ADM_ACTION_COLOR, strtmp);
  2483.         #else
  2484.             SendMessageToAdmins(3, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2485.         #endif
  2486.     }
  2487.     return 1;
  2488. }
  2489.  
  2490. CMD:cc(playerid, const params[]) return admsys_cmd_cc(playerid, params);
  2491. CMD:clearchat(playerid, const params[]) return admsys_cmd_cc(playerid, params);
  2492. admsys_cmd_cc(playerid, const params[])
  2493. {
  2494.     #pragma unused params
  2495.     if(IsPlayerAdminEx(playerid, 3))
  2496.     {
  2497.         static strtmp[53], strname[MAX_PLAYER_NAME + 1];
  2498.         for(new i = 30; i >= 0; --i) SendClientMessageToAll(-1, " ");
  2499.         GetPlayerName(playerid, strname, sizeof strname);
  2500.         format(strtmp, sizeof strtmp, "Администратор %s очистил чат", strname);
  2501.         #if ADMSYS_SEND_ACTION_MSGS_TO_ALL
  2502.             SendClientMessageToAll(ADMSYS_ADM_ACTION_COLOR, strtmp);
  2503.         #else
  2504.             SendMessageToAdmins(3, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2505.         #endif
  2506.     }
  2507.     return 1;
  2508. }
  2509.  
  2510. CMD:sethealth(playerid, const params[]) return admsys_cmd_sethealth(playerid, params);
  2511. admsys_cmd_sethealth(playerid, const params[])
  2512. {
  2513.     if(IsPlayerAdminEx(playerid, 4))
  2514.     {
  2515.         if(admsys_isnull(params))
  2516.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /sethealth [id] [здоровье]");
  2517.         static strtmp[72];
  2518.         new pos, oldpos;
  2519.         while(params[pos] > ' ') pos++;
  2520.         strmid(strtmp, params, 0, pos);
  2521.         if(!admsys_IsNumeric(strtmp))
  2522.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /sethealth [id] [здоровье]");
  2523.         new giveid = strval(strtmp);
  2524.         if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок не найден");
  2525.         while(params[pos] == ' ') pos++;
  2526.         oldpos = pos;
  2527.         while(params[pos] > ' ') pos++;
  2528.         strmid(strtmp, params, oldpos, pos);
  2529.         if(params[oldpos] == '\0' || !admsys_IsNumeric(strtmp))
  2530.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /sethealth [id] [здоровье]");
  2531.         static strname[MAX_PLAYER_NAME + 1];
  2532.         new Float:ghealth = strval(strtmp);
  2533.         AdmSysInfo[playerid][asLastAction] = 1;
  2534.         GetPlayerHealth(giveid, AdmSysInfo[playerid][asLastFloatData]);
  2535.         AdmSysInfo[playerid][asLastActionID] = giveid;
  2536.         SetPlayerHealth(giveid, ghealth);
  2537.         GetPlayerName(giveid, strname, sizeof strname);
  2538.         format(strtmp, sizeof strtmp, "Вы установили %s[%d] здоровье на %.1f", strname, giveid, ghealth);
  2539.         SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
  2540.         GetPlayerName(playerid, strname, sizeof strname);
  2541.         format(strtmp, sizeof strtmp, "Администратор %s установил вам здоровье на %.1f", strname, ghealth);
  2542.         SendClientMessage(giveid, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2543.     }
  2544.     return 1;
  2545. }
  2546.  
  2547. CMD:setarmour(playerid, const params[]) return admsys_cmd_setarmour(playerid, params);
  2548. admsys_cmd_setarmour(playerid, const params[])
  2549. {
  2550.     if(IsPlayerAdminEx(playerid, 4))
  2551.     {
  2552.         if(admsys_isnull(params))
  2553.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /setarmour [id] [броня]");
  2554.         static strtmp[69];
  2555.         new pos, oldpos;
  2556.         while(params[pos] > ' ') pos++;
  2557.         strmid(strtmp, params, 0, pos);
  2558.         if(!admsys_IsNumeric(strtmp))
  2559.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /setarmour [id] [броня]");
  2560.         new giveid = strval(strtmp);
  2561.         if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок не найден");
  2562.         while(params[pos] == ' ') pos++;
  2563.         oldpos = pos;
  2564.         while(params[pos] > ' ') pos++;
  2565.         strmid(strtmp, params, oldpos, pos);
  2566.         if(params[oldpos] == '\0' || !admsys_IsNumeric(strtmp))
  2567.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /setarmour [id] [броня]");
  2568.         static strname[MAX_PLAYER_NAME + 1];
  2569.         new Float:garmour = strval(strtmp);
  2570.         AdmSysInfo[playerid][asLastAction] = 2;
  2571.         GetPlayerArmour(giveid, AdmSysInfo[playerid][asLastFloatData]);
  2572.         AdmSysInfo[playerid][asLastActionID] = giveid;
  2573.         SetPlayerArmour(giveid, garmour);
  2574.         GetPlayerName(giveid, strname, sizeof strname);
  2575.         format(strtmp, sizeof strtmp, "Вы установили %s[%d] броню на %.1f", strname, giveid, garmour);
  2576.         SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
  2577.         GetPlayerName(playerid, strname, sizeof strname);
  2578.         format(strtmp, sizeof strtmp, "Администратор %s установил вам броню на %.1f", strname, garmour);
  2579.         SendClientMessage(giveid, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2580.     }
  2581.     return 1;
  2582. }
  2583.  
  2584. CMD:setmoney(playerid, const params[]) return admsys_cmd_setmoney(playerid, params);
  2585. admsys_cmd_setmoney(playerid, const params[])
  2586. {
  2587.     if(IsPlayerAdminEx(playerid, 4))
  2588.     {
  2589.         if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /setmoney [id] [сумма]");
  2590.         static strtmp[75];
  2591.         new pos, oldpos;
  2592.         while(params[pos] > ' ') pos++;
  2593.         strmid(strtmp, params, 0, pos);
  2594.         if(!admsys_IsNumeric(strtmp)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /setmoney [id] [сумма]");
  2595.         new giveid = strval(strtmp);
  2596.         if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок не найден");
  2597.         while(params[pos] == ' ') pos++;
  2598.         oldpos = pos;
  2599.         while(params[pos] > ' ') pos++;
  2600.         strmid(strtmp, params, oldpos, pos);
  2601.         if(params[oldpos] == '\0' || !admsys_IsNumeric(strtmp))
  2602.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /setmoney [id] [сумма]");
  2603.         static strname[MAX_PLAYER_NAME + 1];
  2604.         new gmoney = strval(strtmp);
  2605.         AdmSysInfo[playerid][asLastAction] = 3;
  2606.         AdmSysInfo[playerid][asLastIntData][0] = GetPlayerMoney(giveid);
  2607.         AdmSysInfo[playerid][asLastActionID] = giveid;
  2608.         ResetPlayerMoney(giveid);
  2609.         GivePlayerMoney(giveid, gmoney);
  2610.         GetPlayerName(giveid, strname, sizeof strname);
  2611.         format(strtmp, sizeof strtmp, "Вы установили %s[%d] сумму денег $%d", strname, giveid, gmoney);
  2612.         SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
  2613.         GetPlayerName(playerid, strname, sizeof strname);
  2614.         format(strtmp, sizeof strtmp, "Администратор %s установил вам сумму денег $%d", strname, gmoney);
  2615.         SendClientMessage(giveid, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2616.     }
  2617.     return 1;
  2618. }
  2619.  
  2620. CMD:givemoney(playerid, const params[]) return admsys_cmd_givemoney(playerid, params);
  2621. admsys_cmd_givemoney(playerid, const params[])
  2622. {
  2623.     if(IsPlayerAdminEx(playerid, 4))
  2624.     {
  2625.         if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /givemoney [id] [сумма]");
  2626.         static strtmp[72];
  2627.         new pos, oldpos;
  2628.         while(params[pos] > ' ') pos++;
  2629.         strmid(strtmp, params, 0, pos);
  2630.         if(!admsys_IsNumeric(strtmp)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /givemoney [id] [сумма]");
  2631.         new giveid = strval(strtmp);
  2632.         if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок не найден");
  2633.         while(params[pos] == ' ') pos++;
  2634.         oldpos = pos;
  2635.         while(params[pos] > ' ') pos++;
  2636.         strmid(strtmp, params, oldpos, pos);
  2637.         if(params[oldpos] == '\0' || !admsys_IsNumeric(strtmp))
  2638.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /givemoney [id] [сумма]");
  2639.         static strname[MAX_PLAYER_NAME + 1];
  2640.         new gmoney = strval(strtmp);
  2641.         AdmSysInfo[playerid][asLastAction] = 4;
  2642.         AdmSysInfo[playerid][asLastIntData][0] = gmoney;
  2643.         AdmSysInfo[playerid][asLastActionID] = giveid;
  2644.         GivePlayerMoney(giveid, gmoney);
  2645.         GetPlayerName(giveid, strname, sizeof strname);
  2646.         format(strtmp, sizeof strtmp, "Вы выдали %s[%d] сумму денег $%d", strname, giveid, gmoney);
  2647.         SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
  2648.         GetPlayerName(playerid, strname, sizeof strname);
  2649.         format(strtmp, sizeof strtmp, "Администратор %s выдал вам сумму денег $%d", strname, gmoney);
  2650.         SendClientMessage(giveid, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2651.     }
  2652.     return 1;
  2653. }
  2654.  
  2655. CMD:setscore(playerid, const params[]) return admsys_cmd_setscore(playerid, params);
  2656. admsys_cmd_setscore(playerid, const params[])
  2657. {
  2658.     if(IsPlayerAdminEx(playerid, 4))
  2659.     {
  2660.         if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /setscore [id] [очки]");
  2661.         static strtmp[78];
  2662.         new pos, oldpos;
  2663.         while(params[pos] > ' ') pos++;
  2664.         strmid(strtmp, params, 0, pos);
  2665.         if(!admsys_IsNumeric(strtmp)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /setscore [id] [очки]");
  2666.         new giveid = strval(strtmp);
  2667.         if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок не найден");
  2668.         while(params[pos] == ' ') pos++;
  2669.         oldpos = pos;
  2670.         while(params[pos] > ' ') pos++;
  2671.         strmid(strtmp, params, oldpos, pos);
  2672.         if(params[oldpos] == '\0' || !admsys_IsNumeric(strtmp))
  2673.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /setscore [id] [очки]");
  2674.         static strname[MAX_PLAYER_NAME + 1];
  2675.         new gscore = strval(strtmp);
  2676.         AdmSysInfo[playerid][asLastAction] = 5;
  2677.         AdmSysInfo[playerid][asLastIntData][0] = GetPlayerScore(giveid);
  2678.         AdmSysInfo[playerid][asLastActionID] = giveid;
  2679.         SetPlayerScore(giveid, gscore);
  2680.         GetPlayerName(giveid, strname, sizeof strname);
  2681.         format(strtmp, sizeof strtmp, "Вы установили %s[%d] количество очков (уровень) на %d", strname, giveid, gscore);
  2682.         SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
  2683.         GetPlayerName(playerid, strname, sizeof strname);
  2684.         format(strtmp, sizeof strtmp, "Администратор %s установил вам %d очков (уровень)", strname, gscore);
  2685.         SendClientMessage(giveid, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2686.     }
  2687.     return 1;
  2688. }
  2689.  
  2690. CMD:setskin(playerid, const params[]) return admsys_cmd_setskin(playerid, params);
  2691. admsys_cmd_setskin(playerid, const params[])
  2692. {
  2693.     if(IsPlayerAdminEx(playerid, 4))
  2694.     {
  2695.         if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /setskin [id] [скин]");
  2696.         static strtmp[60];
  2697.         new pos, oldpos;
  2698.         while(params[pos] > ' ') pos++;
  2699.         strmid(strtmp, params, 0, pos);
  2700.         if(!admsys_IsNumeric(strtmp)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /setskin [id] [скин]");
  2701.         new giveid = strval(strtmp);
  2702.         if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок не найден");
  2703.         while(params[pos] == ' ') pos++;
  2704.         oldpos = pos;
  2705.         while(params[pos] > ' ') pos++;
  2706.         strmid(strtmp, params, oldpos, pos);
  2707.         if(params[oldpos] == '\0' || !admsys_IsNumeric(strtmp))
  2708.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /setskin [id] [скин]");
  2709.         new skinid = strval(strtmp);
  2710.         if(!(0 <= skinid <= 311)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "ID скина должен быть от 0 до 311");
  2711.         static strname[MAX_PLAYER_NAME + 1];
  2712.         AdmSysInfo[playerid][asLastAction] = 6;
  2713.         AdmSysInfo[playerid][asLastIntData][0] = GetPlayerSkin(giveid);
  2714.         AdmSysInfo[playerid][asLastActionID] = giveid;
  2715.         SetPlayerSkin(giveid, skinid);
  2716.         GetPlayerName(giveid, strname, sizeof strname);
  2717.         format(strtmp, sizeof strtmp, "Вы изменили скин %s[%d] на %d", strname, giveid, skinid);
  2718.         SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
  2719.         GetPlayerName(playerid, strname, sizeof strname);
  2720.         format(strtmp, sizeof strtmp, "Администратор %s изменил ваш скин на %d", strname, skinid);
  2721.         SendClientMessage(giveid, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2722.     }
  2723.     return 1;
  2724. }
  2725.  
  2726. CMD:setint(playerid, const params[]) return admsys_cmd_setint(playerid, params);
  2727. CMD:setinterior(playerid, const params[]) return admsys_cmd_setint(playerid, params);
  2728. admsys_cmd_setint(playerid, const params[])
  2729. {
  2730.     if(IsPlayerAdminEx(playerid, 4))
  2731.     {
  2732.         if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /setint [id] [интерьер]");
  2733.         static strtmp[68];
  2734.         new pos, oldpos;
  2735.         while(params[pos] > ' ') pos++;
  2736.         strmid(strtmp, params, 0, pos);
  2737.         if(!admsys_IsNumeric(strtmp)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /setint [id] [интерьер]");
  2738.         new giveid = strval(strtmp);
  2739.         if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок не найден");
  2740.         while(params[pos] == ' ') pos++;
  2741.         oldpos = pos;
  2742.         while(params[pos] > ' ') pos++;
  2743.         strmid(strtmp, params, oldpos, pos);
  2744.         if(params[oldpos] == '\0' || !admsys_IsNumeric(strtmp))
  2745.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /setint [id] [интерьер]");
  2746.         static strname[MAX_PLAYER_NAME + 1];
  2747.         new gint = strval(strtmp);
  2748.         AdmSysInfo[playerid][asLastAction] = 7;
  2749.         AdmSysInfo[playerid][asLastIntData][0] = GetPlayerInterior(giveid);
  2750.         AdmSysInfo[playerid][asLastActionID] = giveid;
  2751.         SetPlayerInterior(giveid, gint);
  2752.         GetPlayerName(giveid, strname, sizeof strname);
  2753.         format(strtmp, sizeof strtmp, "Вы установили %s[%d] интерьер %d", strname, giveid, gint);
  2754.         SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
  2755.         GetPlayerName(playerid, strname, sizeof strname);
  2756.         format(strtmp, sizeof strtmp, "Администратор %s установил вам интерьер %d", strname, gint);
  2757.         SendClientMessage(giveid, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2758.     }
  2759.     return 1;
  2760. }
  2761.  
  2762. CMD:setvw(playerid, const params[]) return admsys_cmd_setvw(playerid, params);
  2763. CMD:setvirtualworld(playerid, const params[]) return admsys_cmd_setvw(playerid, params);
  2764. admsys_cmd_setvw(playerid, const params[])
  2765. {
  2766.     if(IsPlayerAdminEx(playerid, 4))
  2767.     {
  2768.         if(admsys_isnull(params))
  2769.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /setvw [id] [виртуальный мир]");
  2770.         static strtmp[82];
  2771.         new pos, oldpos;
  2772.         while(params[pos] > ' ') pos++;
  2773.         strmid(strtmp, params, 0, pos);
  2774.         if(!admsys_IsNumeric(strtmp))
  2775.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /setvw [id] [виртуальный мир]");
  2776.         new giveid = strval(strtmp);
  2777.         if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок не найден");
  2778.         while(params[pos] == ' ') pos++;
  2779.         oldpos = pos;
  2780.         while(params[pos] > ' ') pos++;
  2781.         strmid(strtmp, params, oldpos, pos);
  2782.         if(params[oldpos] == '\0' || !admsys_IsNumeric(strtmp))
  2783.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /setvw [id] [виртуальный мир]");
  2784.         static strname[MAX_PLAYER_NAME + 1];
  2785.         new gvw = strval(strtmp);
  2786.         AdmSysInfo[playerid][asLastAction] = 8;
  2787.         AdmSysInfo[playerid][asLastIntData][0] = GetPlayerVirtualWorld(giveid);
  2788.         AdmSysInfo[playerid][asLastActionID] = giveid;
  2789.         SetPlayerVirtualWorld(giveid, gvw);
  2790.         GetPlayerName(giveid, strname, sizeof strname);
  2791.         format(strtmp, sizeof strtmp, "Вы установили %s[%d] виртуальный мир %d", strname, giveid, gvw);
  2792.         SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
  2793.         GetPlayerName(playerid, strname, sizeof strname);
  2794.         format(strtmp, sizeof strtmp, "Администратор %s установил вам виртуальный мир %d", strname, gvw);
  2795.         SendClientMessage(giveid, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2796.     }
  2797.     return 1;
  2798. }
  2799.  
  2800. CMD:giveweapon(playerid, const params[]) return admsys_cmd_giveweapon(playerid, params);
  2801. admsys_cmd_giveweapon(playerid, const params[])
  2802. {
  2803.     if(IsPlayerAdminEx(playerid, 4))
  2804.     {
  2805.         if(admsys_isnull(params))
  2806.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /giveweapon [id] [оружие] [патроны]");
  2807.         static strtmp[80];
  2808.         new pos, oldpos;
  2809.         while(params[pos] > ' ') pos++;
  2810.         strmid(strtmp, params, 0, pos);
  2811.         if(!admsys_IsNumeric(strtmp))
  2812.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /giveweapon [id] [оружие] [патроны]");
  2813.         new giveid = strval(strtmp);
  2814.         if(!IsPlayerConnected(giveid)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок не найден");
  2815.         while(params[pos] == ' ') pos++;
  2816.         oldpos = pos;
  2817.         while(params[pos] > ' ') pos++;
  2818.         strmid(strtmp, params, oldpos, pos);
  2819.         if(params[oldpos] == '\0' || !admsys_IsNumeric(strtmp))
  2820.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /giveweapon [id] [оружие] [патроны]");
  2821.         new gweapon = strval(strtmp);
  2822.         if(!(0 <= gweapon <= 46)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "ID оружия должен быть от 0 до 46");
  2823.         while(params[pos] == ' ') pos++;
  2824.         oldpos = pos;
  2825.         while(params[pos] > ' ') pos++;
  2826.         strmid(strtmp, params, oldpos, pos);
  2827.         if(params[oldpos] == '\0' || !admsys_IsNumeric(strtmp))
  2828.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /giveweapon [id] [оружие] [патроны]");
  2829.         static strname[MAX_PLAYER_NAME + 1];
  2830.         new gammo = strval(strtmp);
  2831.         AdmSysInfo[playerid][asLastAction] = 9;
  2832.         AdmSysInfo[playerid][asLastIntData][0] = gweapon;
  2833.         AdmSysInfo[playerid][asLastIntData][1] = gammo;
  2834.         AdmSysInfo[playerid][asLastActionID] = giveid;
  2835.         GivePlayerWeapon(giveid, gweapon, gammo);
  2836.         GetPlayerName(giveid, strname, sizeof strname);
  2837.         format(strtmp, sizeof strtmp, "Вы выдали %s[%d] оружие %d с %d патронами", strname, giveid, gweapon, gammo);
  2838.         SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
  2839.         GetPlayerName(playerid, strname, sizeof strname);
  2840.         format(strtmp, sizeof strtmp, "Администратор %s выдал вам оружие %d с %d патронами", strname, gweapon, gammo);
  2841.         SendClientMessage(giveid, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2842.     }
  2843.     return 1;
  2844. }
  2845.  
  2846. CMD:repairveh(playerid, params[]) return admsys_cmd_repairveh(playerid, params);
  2847. CMD:repairvehicle(playerid, params[]) return admsys_cmd_repairveh(playerid, params);
  2848. admsys_cmd_repairveh(playerid, params[])
  2849. {
  2850.     if(IsPlayerAdminEx(playerid, 4))
  2851.     {
  2852.         if(admsys_isnull(params))
  2853.         {
  2854.             if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Вы не в транспорте");
  2855.             params[0] = GetPlayerVehicleID(playerid);
  2856.         }
  2857.         else
  2858.         {
  2859.             if(!admsys_IsNumeric(params))
  2860.                 return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /repairveh [id транспорта]");
  2861.             params[0] = strval(params);
  2862.             if(GetVehicleModel(params[0]) <= 0)
  2863.                 return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Транспортное средство не найдено");
  2864.         }
  2865.         static strtmp[33];
  2866.         RepairVehicle(params[0]);
  2867.         format(strtmp, sizeof strtmp, "Транспорт id %d отремонтирован", params[0]);
  2868.         SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
  2869.     }
  2870.     return 1;
  2871. }
  2872.  
  2873. CMD:unbanip(playerid, const params[]) return admsys_cmd_unbanip(playerid, params);
  2874. CMD:unblockip(playerid, const params[]) return admsys_cmd_unbanip(playerid, params);
  2875. admsys_cmd_unbanip(playerid, const params[])
  2876. {
  2877.     if(IsPlayerAdminEx(playerid, 4))
  2878.     {
  2879.         if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /unbanip [IP]");
  2880.         for(new i, j = strlen(params); i < j; i++)
  2881.         {
  2882.             switch(params[i])
  2883.             {
  2884.                 case '*', '.', '0'..'9':{}
  2885.                 default: return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "IP-адрес введён некорректно");
  2886.             }
  2887.         }
  2888.         static strtmp[76], strname[MAX_PLAYER_NAME + 1];
  2889.         format(strtmp, sizeof strtmp, "unbanip %s", params);
  2890.         SendRconCommand(strtmp);
  2891.         SendRconCommand("reloadbans");
  2892.         GetPlayerName(playerid, strname, sizeof strname);
  2893.         format(strtmp, sizeof strtmp, "Администратор %s разблокировал IP %s", strname, params);
  2894.         #if ADMSYS_SEND_ACTION_MSGS_TO_ALL
  2895.             SendClientMessageToAll(ADMSYS_ADM_ACTION_COLOR, strtmp);
  2896.         #else
  2897.             SendMessageToAdmins(4, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2898.         #endif
  2899.     }
  2900.     return 1;
  2901. }
  2902.  
  2903. CMD:setweather(playerid, params[]) return admsys_cmd_setweather(playerid, params);
  2904. admsys_cmd_setweather(playerid, params[])
  2905. {
  2906.     if(IsPlayerAdminEx(playerid, 5))
  2907.     {
  2908.         if(admsys_isnull(params) || !admsys_IsNumeric(params))
  2909.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /setweather [погода]");
  2910.         params[0] = strval(params);
  2911.         if(!(0 <= params[0] <= 20)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "ID погоды должен быть от 0 до 20");
  2912.         SetWeather(params[0]);
  2913.         #if defined foreach
  2914.         foreach(new i : Player)
  2915.         #else
  2916.         for(new i = GetPlayerPoolSize(); i >= 0; --i)
  2917.         #endif
  2918.         {
  2919.             SetPlayerWeather(i, params[0]);
  2920.         }
  2921.         static strtmp[61], strname[MAX_PLAYER_NAME + 1];
  2922.         GetPlayerName(playerid, strname, sizeof strname);
  2923.         format(strtmp, sizeof strtmp, "Администратор %s изменил погоду на %d", strname, params[0]);
  2924.         #if ADMSYS_SEND_ACTION_MSGS_TO_ALL
  2925.             SendClientMessageToAll(ADMSYS_ADM_ACTION_COLOR, strtmp);
  2926.         #else
  2927.             SendMessageToAdmins(5, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2928.         #endif
  2929.     }
  2930.     return 1;
  2931. }
  2932.  
  2933. CMD:getall(playerid, const params[]) return admsys_cmd_getall(playerid, params);
  2934. admsys_cmd_getall(playerid, const params[])
  2935. {
  2936.     #pragma unused params
  2937.     if(IsPlayerAdminEx(playerid, 5))
  2938.     {
  2939.         new Float:pX, Float:pY, Float:pZ;
  2940.         GetPlayerPos(playerid, pX, pY, pZ);
  2941.         pX += 1.0;
  2942.         pY += 1.0;
  2943.         new interior = GetPlayerInterior(playerid), vw = GetPlayerVirtualWorld(playerid);
  2944.         #if defined foreach
  2945.         foreach(new i : Player)
  2946.         {
  2947.         #else
  2948.         for(new i = GetPlayerPoolSize(); i >= 0; --i)
  2949.         {
  2950.             if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
  2951.         #endif
  2952.             if(i != playerid)
  2953.             {
  2954.                 SetPlayerVirtualWorld(i, vw);
  2955.                 SetPlayerInterior(i, interior);
  2956.                 SetPlayerPos(i, pX, pY, pZ);
  2957.             }
  2958.         }
  2959.         static strtmp[68], strname[MAX_PLAYER_NAME + 1];
  2960.         GetPlayerName(playerid, strname, sizeof strname);
  2961.         format(strtmp, sizeof strtmp, "Администратор %s телепортировал всех к себе", strname);
  2962.         SendClientMessageToAll(ADMSYS_ADM_ACTION_COLOR, strtmp);
  2963.     }
  2964.     return 1;
  2965. }
  2966.  
  2967. CMD:settime(playerid, params[]) return admsys_cmd_settime(playerid, params);
  2968. admsys_cmd_settime(playerid, params[])
  2969. {
  2970.     if(IsPlayerAdminEx(playerid, 5))
  2971.     {
  2972.         if(admsys_isnull(params) || !admsys_IsNumeric(params))
  2973.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /settime [час]");
  2974.         params[0] = strval(params);
  2975.         if(!(0 <= params[0] <= 23)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Час должен быть от 0 до 23");
  2976.         SetWorldTime(params[0]);
  2977.         #if defined foreach
  2978.         foreach(new i : Player)
  2979.         #else
  2980.         for(new i = GetPlayerPoolSize(); i >= 0; --i)
  2981.         #endif
  2982.         {
  2983.             SetPlayerTime(i, params[0], 0);
  2984.         }
  2985.         static strtmp[67], strname[MAX_PLAYER_NAME + 1];
  2986.         GetPlayerName(playerid, strname, sizeof strname);
  2987.         format(strtmp, sizeof strtmp, "Администратор %s изменил время на %d часов", strname, params[0]);
  2988.         #if ADMSYS_SEND_ACTION_MSGS_TO_ALL
  2989.             SendClientMessageToAll(ADMSYS_ADM_ACTION_COLOR, strtmp);
  2990.         #else
  2991.             SendMessageToAdmins(5, ADMSYS_ADM_ACTION_COLOR, strtmp);
  2992.         #endif
  2993.     }
  2994.     return 1;
  2995. }
  2996.  
  2997. CMD:destroyveh(playerid, params[]) return admsys_cmd_destroyveh(playerid, params);
  2998. CMD:destroyvehicle(playerid, params[]) return admsys_cmd_destroyveh(playerid, params);
  2999. admsys_cmd_destroyveh(playerid, params[])
  3000. {
  3001.     if(IsPlayerAdminEx(playerid, 5))
  3002.     {
  3003.         if(admsys_isnull(params))
  3004.         {
  3005.             if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Вы не в транспорте");
  3006.             params[0] = GetPlayerVehicleID(playerid);
  3007.         }
  3008.         else
  3009.         {
  3010.             if(!admsys_IsNumeric(params))
  3011.                 return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /destroyveh [id транспорта]");
  3012.             params[0] = strval(params);
  3013.             if(GetVehicleModel(params[0]) <= 0)
  3014.                 return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Транспортное средство не найдено");
  3015.         }
  3016.         static strtmp[28];
  3017.         DestroyVehicle(params[0]);
  3018.         format(strtmp, sizeof strtmp, "Транспорт id %d уничтожен", params[0]);
  3019.         SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
  3020.     }
  3021.     return 1;
  3022. }
  3023.  
  3024. CMD:veh(playerid, const params[]) return admsys_cmd_veh(playerid, params);
  3025. CMD:vehicle(playerid, const params[]) return admsys_cmd_veh(playerid, params);
  3026. admsys_cmd_veh(playerid, const params[])
  3027. {
  3028.     if(IsPlayerAdminEx(playerid, 5))
  3029.     {
  3030.         if(IsPlayerSpectating(playerid))
  3031.             return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Вы в режиме наблюдения");
  3032.         if(admsys_isnull(params))
  3033.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /veh [id транспорта] [цвет 1] [цвет 2]");
  3034.         static strtmp[48];
  3035.         new pos, oldpos;
  3036.         while(params[pos] > ' ') pos++;
  3037.         strmid(strtmp, params, 0, pos);
  3038.         if(!admsys_IsNumeric(strtmp))
  3039.             return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /veh [id транспорта] [цвет 1] [цвет 2]");
  3040.         new gveh = strval(strtmp);
  3041.         if(!(400 <= gveh <= 611)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "ID транспорта должен быть от 400 до 611");
  3042.         while(params[pos] == ' ') pos++;
  3043.         oldpos = pos;
  3044.         new gcolor1, gcolor2;
  3045.         if(params[oldpos] == '\0')
  3046.         {
  3047.             gcolor1 = random(256);
  3048.             gcolor2 = random(256);
  3049.         }
  3050.         else
  3051.         {
  3052.             while(params[pos] > ' ') pos++;
  3053.             strmid(strtmp, params, oldpos, pos);
  3054.             if(!admsys_IsNumeric(strtmp))
  3055.                 return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /veh [id транспорта] [цвет 1] [цвет 2]");
  3056.             gcolor1 = strval(strtmp);
  3057.             if(!(0 <= gcolor1 <= 255))
  3058.                 return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Цвет 1 должен быть от 0 до 255");
  3059.             while(params[pos] == ' ') pos++;
  3060.             oldpos = pos;
  3061.             while(params[pos] > ' ') pos++;
  3062.             strmid(strtmp, params, oldpos, pos);
  3063.             if(params[oldpos] == '\0' || !admsys_IsNumeric(strtmp))
  3064.                 return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /veh [id транспорта] [цвет 1] [цвет 2]");
  3065.             gcolor2 = strval(strtmp);
  3066.             if(!(0 <= gcolor2 <= 255))
  3067.                 return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Цвет 2 должен быть от 0 до 255");
  3068.         }
  3069.         new vid, Float:pX, Float:pY, Float:pZ, Float:pAngle;
  3070.         GetPlayerPos(playerid, pX, pY, pZ);
  3071.         GetPlayerFacingAngle(playerid, pAngle);
  3072.         vid = CreateVehicle(gveh, pX, pY, pZ, pAngle, gcolor1, gcolor2, -1);
  3073.         SetVehicleVirtualWorld(vid, GetPlayerVirtualWorld(playerid));
  3074.         LinkVehicleToInterior(vid, GetPlayerInterior(playerid));
  3075.         PutPlayerInVehicle(playerid, vid, 0);
  3076.         format(strtmp, sizeof strtmp, "Транспорт id %d с цветами %d и %d заспавнен", vid, gcolor1, gcolor2);
  3077.         SendClientMessage(playerid, ADMSYS_DEFAULT_COLOR, strtmp);
  3078.     }
  3079.     return 1;
  3080. }
  3081.  
  3082. CMD:skick(playerid, const params[]) return admsys_cmd_skick(playerid, params);
  3083. CMD:silentkick(playerid, const params[]) return admsys_cmd_skick(playerid, params);
  3084. admsys_cmd_skick(playerid, const params[])
  3085. {
  3086.     if(IsPlayerAdminEx(playerid, 5))
  3087.     {
  3088.         if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /skick [id]");
  3089.         static strtmp2[10];
  3090.         for(new i = 1, strtmp[32], pos, oldpos, giveid, j; i <= ADMSYS_MAX_GIVE_PLAYERS_IN_CMD; i++)
  3091.         {
  3092.             while(params[pos] == ' ') pos++;
  3093.             if(params[pos])
  3094.             {
  3095.                 oldpos = pos;
  3096.                 while(params[pos] > ' ') pos++;
  3097.                 strmid(strtmp, params, oldpos, pos);
  3098.                 if(!admsys_IsNumeric(strtmp))
  3099.                 {
  3100.                     strtmp = "Используйте: /skick [id]";
  3101.                     if(i > 1)
  3102.                     {
  3103.                         for(j = 2; j <= i; j++)
  3104.                         {
  3105.                             format(strtmp2, sizeof strtmp2, " [id %d]", j);
  3106.                             strcat(strtmp, strtmp2);
  3107.                         }
  3108.                     }
  3109.                     return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, strtmp);
  3110.                 }
  3111.                 giveid = strval(strtmp);
  3112.                 if(!IsPlayerConnected(giveid))
  3113.                 {
  3114.                     if(i == 1) strtmp = "Игрок не найден";
  3115.                     else format(strtmp, sizeof strtmp, "Игрок %d не найден", i);
  3116.                     SendClientMessage(playerid, ADMSYS_ERROR_COLOR, strtmp);
  3117.                 }
  3118.                 else
  3119.                 {
  3120.                     CallRemoteFunction("OnPlayerKick", "iii", giveid, playerid, true);
  3121.                     Kick(giveid);
  3122.                 }
  3123.             }
  3124.         }
  3125.     }
  3126.     return 1;
  3127. }
  3128.  
  3129. CMD:sban(playerid, const params[]) return admsys_cmd_sban(playerid, params);
  3130. CMD:silentban(playerid, const params[]) return admsys_cmd_sban(playerid, params);
  3131. admsys_cmd_sban(playerid, const params[])
  3132. {
  3133.     if(IsPlayerAdminEx(playerid, 5))
  3134.     {
  3135.         if(admsys_isnull(params)) return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, "Используйте: /sban [id]");
  3136.         static strtmp2[10];
  3137.         for(new i = 1, strtmp[32], pos, oldpos, giveid, j; i <= ADMSYS_MAX_GIVE_PLAYERS_IN_CMD; i++)
  3138.         {
  3139.             while(params[pos] == ' ') pos++;
  3140.             if(params[pos])
  3141.             {
  3142.                 oldpos = pos;
  3143.                 while(params[pos] > ' ') pos++;
  3144.                 strmid(strtmp, params, oldpos, pos);
  3145.                 if(!admsys_IsNumeric(strtmp))
  3146.                 {
  3147.                     strtmp = "Используйте: /sban [id]";
  3148.                     if(i > 1)
  3149.                     {
  3150.                         for(j = 2; j <= i; j++)
  3151.                         {
  3152.                             format(strtmp2, sizeof strtmp2, " [id %d]", j);
  3153.                             strcat(strtmp, strtmp2);
  3154.                         }
  3155.                     }
  3156.                     return SendClientMessage(playerid, ADMSYS_CMD_HELPER_COLOR, strtmp);
  3157.                 }
  3158.                 giveid = strval(strtmp);
  3159.                 if(!IsPlayerConnected(giveid))
  3160.                 {
  3161.                     if(i == 1) strtmp = "Игрок не найден";
  3162.                     else format(strtmp, sizeof strtmp, "Игрок %d не найден", i);
  3163.                     SendClientMessage(playerid, ADMSYS_ERROR_COLOR, strtmp);
  3164.                 }
  3165.                 else
  3166.                 {
  3167.                     CallRemoteFunction("OnPlayerBan", "iii", giveid, playerid, true);
  3168.                     Ban(giveid);
  3169.                 }
  3170.             }
  3171.         }
  3172.     }
  3173.     return 1;
  3174. }
  3175.  
  3176. stock SetPlayerAdminLevel(playerid, lvl)
  3177. {
  3178.     if(!IsPlayerConnected(playerid)) return 0;
  3179.     if(!(0 <= lvl <= 5)) return -1;
  3180.     AdmSysInfo[playerid][asAdminLvl] = lvl;
  3181.     return 1;
  3182. }
  3183.  
  3184. stock GetPlayerAdminLevel(playerid)
  3185. {
  3186.     if(!IsPlayerConnected(playerid)) return 0;
  3187.     if(IsPlayerAdmin(playerid)) return 5;
  3188.     return AdmSysInfo[playerid][asAdminLvl];
  3189. }
  3190.  
  3191. stock IsPlayerAdminEx(playerid, lvl = 1) return (GetPlayerAdminLevel(playerid) >= lvl);
  3192.  
  3193. stock SetPlayerMuteTime(playerid, time)
  3194. {
  3195.     if(!IsPlayerConnected(playerid)) return 0;
  3196.     if(time < 0) return -1;
  3197.     AdmSysInfo[playerid][asMuteTime] = time;
  3198.     return 1;
  3199. }
  3200.  
  3201. stock GetPlayerMuteTime(playerid) return (IsPlayerConnected(playerid) ? AdmSysInfo[playerid][asMuteTime] : 0);
  3202.  
  3203. stock UpdateSuspectList()
  3204. {
  3205.     new c;
  3206.     for(new i, j; i < sizeof SuspectList; ++i)
  3207.     {
  3208.         if(!IsPlayerConnected(SuspectList[i]))
  3209.         {
  3210.             c++;
  3211.             for(j = i; j < sizeof(SuspectList) - 1; ++j) SuspectList[j] = SuspectList[j + 1];
  3212.             SuspectList[j] = INVALID_PLAYER_ID;
  3213.         }
  3214.     }
  3215.     return c;
  3216. }
  3217.  
  3218. stock AddPlayerInSuspectList(playerid)
  3219. {
  3220.     UpdateSuspectList();
  3221.     if(IsPlayerConnected(playerid))
  3222.     {
  3223.         new i;
  3224.         for(i = sizeof(SuspectList) - 1; i >= 0; --i)
  3225.         {
  3226.             if(SuspectList[i] == playerid) return 0;
  3227.         }
  3228.         new tmp1 = SuspectList[0], tmp2;
  3229.         for(i = 0; i < sizeof(SuspectList) - 1; ++i)
  3230.         {
  3231.             tmp2 = SuspectList[i + 1];
  3232.             SuspectList[i + 1] = tmp1;
  3233.             tmp1 = tmp2;
  3234.         }
  3235.         SuspectList[0] = playerid;
  3236.         return 1;
  3237.     }
  3238.     return 0;
  3239. }
  3240.  
  3241. stock RemovePlayerFromSuspectList(playerid)
  3242. {
  3243.     for(new i = sizeof(SuspectList) - 1; i >= 0; --i)
  3244.     {
  3245.         if(SuspectList[i] == playerid)
  3246.         {
  3247.             SuspectList[i] = INVALID_PLAYER_ID;
  3248.             break;
  3249.         }
  3250.     }
  3251.     UpdateSuspectList();
  3252.     return 1;
  3253. }
  3254.  
  3255. stock SendMessageToAdmins(lvl, color, const msg[])
  3256. {
  3257.     #if defined foreach
  3258.     foreach(new i : Player)
  3259.     #else
  3260.     for(new i = GetPlayerPoolSize(); i >= 0; --i)
  3261.     #endif
  3262.     {
  3263.         if(GetPlayerAdminLevel(i) >= lvl) SendClientMessage(i, color, msg);
  3264.     }
  3265.     return 1;
  3266. }
  3267.  
  3268. static stock admsys_IsNumeric(const string[])
  3269. {
  3270.     new ret;
  3271.     for(new i, l = strlen(string); i < l; i++)
  3272.     {
  3273.         if('0' <= string[i] <= '9') ret = 1;
  3274.         else if(i != 0 || string[0] != '-') return 0;
  3275.     }
  3276.     return ret;
  3277. }
  3278.  
  3279. static stock admsys_IsNumericEx(const string[])
  3280. {
  3281.     new ret;
  3282.     for(new i, c, l = strlen(string); i < l; i++)
  3283.     {
  3284.         if('0' <= string[i] <= '9') ret = 1;
  3285.         else if(string[i] == '.')
  3286.         {
  3287.             if(ret)
  3288.             {
  3289.                 c++;
  3290.                 if(c > 1) return 0;
  3291.                 ret = 0;
  3292.             }
  3293.             else return 0;
  3294.         }
  3295.         else if(i != 0 || string[0] != '-') return 0;
  3296.     }
  3297.     return ret;
  3298. }
  3299.  
  3300. static IsPlayerSpectating(playerid) return IsPlayerConnected(AdmSysInfo[playerid][asSpecID]);
  3301.  
  3302. static StartSpectating(playerid, specid)
  3303. {
  3304.     if(!IsPlayerConnected(playerid) || !IsPlayerConnected(specid)) return 0;
  3305.     if(playerid == specid) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Вы не можете следить за самим собой");
  3306.     if(IsPlayerSpectating(specid)) return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок в режиме наблюдения");
  3307.     if(AdmSysInfo[playerid][asSpecID] == specid) return UpdateSpectating(playerid);
  3308.     if(!AdmSysInfo[specid][asIsSpawned] && !AdmSysInfo[specid][asIsDead])
  3309.         return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок не заспавнен");
  3310.     if(!IsPlayerSpectating(playerid))
  3311.     {
  3312.         for(new i = 12; i >= 0; --i)
  3313.             GetPlayerWeaponData(playerid, i, AdmSysInfo[playerid][asLastWeapon][i], AdmSysInfo[playerid][asLastAmmo][i]);
  3314.         GetPlayerPos(playerid, AdmSysInfo[playerid][asLastPos][0],
  3315.         AdmSysInfo[playerid][asLastPos][1], AdmSysInfo[playerid][asLastPos][2]);
  3316.         AdmSysInfo[playerid][asLastSpec] = (GetPlayerState(playerid) == PLAYER_STATE_SPECTATING);
  3317.         GetPlayerFacingAngle(playerid, AdmSysInfo[playerid][asLastAngle]);
  3318.         AdmSysInfo[playerid][asLastVW] = GetPlayerVirtualWorld(playerid);
  3319.         AdmSysInfo[playerid][asLastInt] = GetPlayerInterior(playerid);
  3320.     }
  3321.     AdmSysInfo[playerid][asLastSpecID] = AdmSysInfo[playerid][asSpecID];
  3322.     TogglePlayerSpectating(playerid, 1);
  3323.     if(AdmSysInfo[specid][asIsDead]) SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Игрок умер");
  3324.     SetPlayerInterior(playerid, GetPlayerInterior(specid));
  3325.     SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(specid));
  3326.     if(IsPlayerInAnyVehicle(specid)) PlayerSpectateVehicle(playerid, GetPlayerVehicleID(specid));
  3327.     else PlayerSpectatePlayer(playerid, specid);
  3328.     AdmSysInfo[playerid][asSpecID] = specid;
  3329.     UpdateSpecInfo(playerid);
  3330.     return 1;
  3331. }
  3332.  
  3333. static UpdateSpectating(playerid)
  3334. {
  3335.     if(!IsPlayerConnected(playerid)) return 0;
  3336.     if(AdmSysInfo[playerid][asSpecID] == INVALID_PLAYER_ID)
  3337.         return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Вы не в режиме наблюдения");
  3338.     if(!IsPlayerConnected(AdmSysInfo[playerid][asSpecID])) return StopSpectating(playerid);
  3339.     TogglePlayerSpectating(playerid, 1);
  3340.     SetPlayerInterior(playerid, GetPlayerInterior(AdmSysInfo[playerid][asSpecID]));
  3341.     SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(AdmSysInfo[playerid][asSpecID]));
  3342.     if(IsPlayerInAnyVehicle(AdmSysInfo[playerid][asSpecID]))
  3343.         PlayerSpectateVehicle(playerid, GetPlayerVehicleID(AdmSysInfo[playerid][asSpecID]));
  3344.     else PlayerSpectatePlayer(playerid, AdmSysInfo[playerid][asSpecID]);
  3345.     return 1;
  3346. }
  3347.  
  3348. static StopSpectating(playerid)
  3349. {
  3350.     if(!IsPlayerConnected(playerid)) return 0;
  3351.     if(AdmSysInfo[playerid][asSpecID] == INVALID_PLAYER_ID)
  3352.         return SendClientMessage(playerid, ADMSYS_ERROR_COLOR, "Вы не в режиме наблюдения");
  3353.     if(AdmSysInfo[playerid][asLastSpecID] == INVALID_PLAYER_ID || AdmSysInfo[playerid][asLastSpecID] == AdmSysInfo[playerid][asSpecID])
  3354.     {
  3355.         AdmSysInfo[playerid][asSpecID] = INVALID_PLAYER_ID;
  3356.         AdmSysInfo[playerid][asLastSpecID] = INVALID_PLAYER_ID;
  3357.         TogglePlayerSpectating(playerid, AdmSysInfo[playerid][asLastSpec]);
  3358.         KillTimer(AdmSysInfo[playerid][asUpdTimer]);
  3359.     }
  3360.     else
  3361.     {
  3362.         AdmSysInfo[playerid][asSpecID] = AdmSysInfo[playerid][asLastSpecID];
  3363.         AdmSysInfo[playerid][asLastSpecID] = INVALID_PLAYER_ID;
  3364.         UpdateSpectating(playerid);
  3365.     }
  3366.     return 1;
  3367. }
  3368.  
  3369. #if ADMSYS_SEND_CONNECT_MSGS_TO_ADM
  3370.     #undef ADMSYS_CONNECT_MSG_COLOR
  3371. #endif
  3372.  
  3373. #undef ADMSYS_SHOW_KILL_LIST_FOR_ADM
  3374. #undef ADMSYS_SEND_CONNECT_MSGS_TO_ADM
  3375. #undef ADMSYS_SEND_ACTION_MSGS_TO_ALL
  3376.  
  3377. #undef ADMSYS_DEFAULT_COLOR
  3378. #undef ADMSYS_ADM_CHAT_COLOR
  3379. #undef ADMSYS_ADM_ACTION_COLOR
  3380. #undef ADMSYS_REPORT_COLOR
  3381. #undef ADMSYS_CMD_HELPER_COLOR
  3382. #undef ADMSYS_ERROR_COLOR
  3383.  
  3384. #undef ADMSYS_MAX_WARNS
  3385. #undef ADMSYS_MAX_TAB_INPUT
  3386. #undef ADMSYS_MAX_SUSPECTS_IN_TABLE
  3387. #undef ADMSYS_MAX_GIVE_PLAYERS_IN_CMD
  3388.  
  3389. #undef admsys_isnull
  3390. #undef admsys_fpublic
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement