Advertisement
Guest User

Admin System by Nexius v2.0

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