Advertisement
Guest User

Admin System by Nexius v2.3

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