Загрузка данных


#include <a_samp>
#include <zcmd>
#include <sscanf2>

#define MAX_ADMIN_LEVEL 12
#define OWNER_NAME "smexneprad"

#define COLOR_WHITE     0xFFFFFFFF
#define COLOR_RED       0xFF3333FF
#define COLOR_GREEN     0x33FF33FF
#define COLOR_BLUE      0x3399FFFF
#define COLOR_YELLOW    0xFFFF00FF
#define COLOR_ORANGE    0xFF9900FF
#define COLOR_PURPLE    0xCC66FFFF
#define COLOR_GREY      0xAAAAAAFF
#define COLOR_CYAN      0x00FFFFFF

new AdminLevel[MAX_PLAYERS];
new AdminDuty[MAX_PLAYERS];
new AdminMuted[MAX_PLAYERS];
new AdminJail[MAX_PLAYERS];
new Warns[MAX_PLAYERS];

new bool:Frozen[MAX_PLAYERS];

new AdminTeleport[MAX_PLAYERS];
new AdminSpec[MAX_PLAYERS];

forward AdminSecondTimer();

public OnGameModeInit()
{
    SetTimer("AdminSecondTimer", 1000, true);

    print("======================================");
    print("     ADMIN SYSTEM 150 COMMANDS");
    print("     OWNER: smexneprad");
    print("     MAX LEVEL: 12");
    print("======================================");

    return 1;
}

public OnPlayerConnect(playerid)
{
    AdminLevel[playerid] = 0;
    AdminDuty[playerid] = 0;
    AdminMuted[playerid] = 0;
    AdminJail[playerid] = 0;
    Warns[playerid] = 0;
    Frozen[playerid] = false;
    AdminTeleport[playerid] = 0;
    AdminSpec[playerid] = 0;

    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));

    if(!strcmp(name, OWNER_NAME, true))
    {
        AdminLevel[playerid] = 12;

        SendClientMessage(
            playerid,
            COLOR_GREEN,
            "Вы определены как OWNER. Ваш уровень администрации: 12."
        );
    }

    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    AdminLevel[playerid] = 0;
    AdminDuty[playerid] = 0;
    AdminMuted[playerid] = 0;
    AdminJail[playerid] = 0;
    Warns[playerid] = 0;
    Frozen[playerid] = false;

    return 1;
}

public AdminSecondTimer()
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(!IsPlayerConnected(i))
            continue;

        if(AdminJail[i] > 0)
        {
            AdminJail[i]--;

            if(AdminJail[i] <= 0)
            {
                AdminJail[i] = 0;

                SetPlayerInterior(i, 0);
                SetPlayerVirtualWorld(i, 0);
                SetPlayerPos(i, 1550.0, -1675.0, 16.0);

                SendClientMessage(
                    i,
                    COLOR_GREEN,
                    "Время административного заключения закончилось."
                );
            }
        }
    }

    return 1;
}

/* =========================================================
   CORE
========================================================= */

stock bool:IsAdmin(playerid, level)
{
    return AdminLevel[playerid] >= level;
}

stock bool:IsOwner(playerid)
{
    new name[MAX_PLAYER_NAME];

    GetPlayerName(playerid, name, sizeof(name));

    return !strcmp(name, OWNER_NAME, true);
}

stock AdminDenied(playerid, level)
{
    new text[128];

    format(
        text,
        sizeof(text),
        "Недостаточный уровень администрации. Требуется: %d LVL.",
        level
    );

    SendClientMessage(playerid, COLOR_RED, text);
    return 1;
}

stock GetAdminRank(level)
{
    switch(level)
    {
        case 12: return 1;
        case 11: return 2;
        case 10: return 3;
        case 9: return 4;
        case 8: return 5;
        case 7: return 6;
        case 6: return 7;
        case 5: return 8;
        case 4: return 9;
        case 3: return 10;
        case 2: return 11;
        case 1: return 12;
    }

    return 0;
}

stock GetAdminRankName(level, output[], size)
{
    switch(level)
    {
        case 12: format(output, size, "OWNER");
        case 11: format(output, size, "DEVELOPER");
        case 10: format(output, size, "HEAD ADMIN");
        case 9: format(output, size, "CHIEF ADMIN");
        case 8: format(output, size, "SENIOR ADMIN");
        case 7: format(output, size, "ADMINISTRATOR");
        case 6: format(output, size, "ADMINISTRATOR");
        case 5: format(output, size, "MODERATOR");
        case 4: format(output, size, "MODERATOR");
        case 3: format(output, size, "JUNIOR MODERATOR");
        case 2: format(output, size, "HELPER");
        case 1: format(output, size, "SUPPORT");
        default: format(output, size, "PLAYER");
    }

    return 1;
}

stock GetPlayerIdByName(const name[])
{
    new pname[MAX_PLAYER_NAME];

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(!IsPlayerConnected(i))
            continue;

        GetPlayerName(i, pname, sizeof(pname));

        if(!strcmp(name, pname, true))
            return i;
    }

    return INVALID_PLAYER_ID;
}

stock SendAdminChat(const message[])
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i) && AdminLevel[i] > 0)
            SendClientMessage(i, COLOR_PURPLE, message);
    }

    return 1;
}

stock AdminAction(playerid, const action[])
{
    new name[MAX_PLAYER_NAME];
    new text[256];

    GetPlayerName(playerid, name, sizeof(name));

    format(
        text,
        sizeof(text),
        "[ADMIN] %s [%d]: %s",
        name,
        AdminLevel[playerid],
        action
    );

    printf("%s", text);
    SendAdminChat(text);

    return 1;
}

stock TeleportToPlayer(playerid, targetid)
{
    new Float:x;
    new Float:y;
    new Float:z;

    GetPlayerPos(targetid, x, y, z);

    SetPlayerInterior(
        playerid,
        GetPlayerInterior(targetid)
    );

    SetPlayerVirtualWorld(
        playerid,
        GetPlayerVirtualWorld(targetid)
    );

    SetPlayerPos(
        playerid,
        x + 1.0,
        y,
        z
    );

    return 1;
}

stock BringPlayer(playerid, targetid)
{
    new Float:x;
    new Float:y;
    new Float:z;

    GetPlayerPos(playerid, x, y, z);

    SetPlayerInterior(
        targetid,
        GetPlayerInterior(playerid)
    );

    SetPlayerVirtualWorld(
        targetid,
        GetPlayerVirtualWorld(playerid)
    );

    SetPlayerPos(
        targetid,
        x + 1.0,
        y,
        z
    );

    return 1;
}

stock BroadcastAdmin(const message[])
{
    SendClientMessageToAll(COLOR_ORANGE, message);
    return 1;
}

/* =========================================================
   1-10 INFORMATION
========================================================= */

/* 1 */
CMD:ah(playerid, params[])
{
    if(!IsAdmin(playerid, 1))
        return AdminDenied(playerid, 1);

    SendClientMessage(playerid, COLOR_YELLOW,
        "========== ADMIN HELP ==========");

    SendClientMessage(playerid, COLOR_WHITE,
        "1-25: /admins /admininfo /aduty /a /asay /announce /players /getid /check /stats");

    SendClientMessage(playerid, COLOR_WHITE,
        "26-50: /kick /ban /tempban /warn /unwarn /mute /unmute /jail /unjail /freeze");

    SendClientMessage(playerid, COLOR_WHITE,
        "51-75: /goto /gethere /bringall /return /sethp /setarmor /setskin /givecash /setcash /giveweapon");

    SendClientMessage(playerid, COLOR_WHITE,
        "76-100: /giveammo /setvw /setint /settime /weather /gravity /veh /fixveh /flipveh /destroyveh");

    SendClientMessage(playerid, COLOR_WHITE,
        "101-125: /slap /launch /spin /explode /burn /bighead /tinyhead /jetpack /fly /god");

    SendClientMessage(playerid, COLOR_WHITE,
        "126-150: /setadmin /deladmin /sethelper /delhelper /serverinfo /saveall /kickall /freezeall /healall /armourall");

    SendClientMessage(playerid, COLOR_YELLOW,
        "Всего: 150 команд.");

    return 1;
}

/* 2 */
CMD:admins(playerid, params[])
{
    if(!IsAdmin(playerid, 1))
        return AdminDenied(playerid, 1);

    new name[MAX_PLAYER_NAME];
    new rank[32];
    new text[128];

    SendClientMessage(playerid, COLOR_YELLOW,
        "========== ADMINISTRATION ==========");

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(!IsPlayerConnected(i) || AdminLevel[i] <= 0)
            continue;

        GetPlayerName(i, name, sizeof(name));
        GetAdminRankName(AdminLevel[i], rank, sizeof(rank));

        format(
            text,
            sizeof(text),
            "%s [%d LVL] - %s",
            name,
            AdminLevel[i],
            rank
        );

        SendClientMessage(playerid, COLOR_WHITE, text);
    }

    return 1;
}

/* 3 */
CMD:admininfo(playerid, params[])
{
    if(!IsAdmin(playerid, 1))
        return AdminDenied(playerid, 1);

    new rank[32];
    GetAdminRankName(AdminLevel[playerid], rank, sizeof(rank));

    new text[256];

format(
    text,
    sizeof(text),
    "Admin level: %d | Rank: %s | Duty: %s",
    AdminLevel[playerid],
    rank,
    AdminDuty[playerid] ? "ON" : "OFF"
);

    SendClientMessage(playerid, COLOR_CYAN, text);

    return 1;
}

/* 4 */
CMD:aduty(playerid, params[])
{
    if(!IsAdmin(playerid, 1))
        return AdminDenied(playerid, 1);

    AdminDuty[playerid] = !AdminDuty[playerid];

    if(AdminDuty[playerid])
    {
        SetPlayerColor(playerid, COLOR_RED);
        SendClientMessage(playerid, COLOR_GREEN,
            "Вы вошли в ADMIN DUTY.");
    }
    else
    {
        SetPlayerColor(playerid, COLOR_WHITE);
        SendClientMessage(playerid, COLOR_YELLOW,
            "Вы вышли из ADMIN DUTY.");
    }

    return 1;
}

/* 5 */
CMD:a(playerid, params[])
{
    if(!IsAdmin(playerid, 1))
        return AdminDenied(playerid, 1);

    if(!strlen(params))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /a [текст]");

    new name[MAX_PLAYER_NAME];
    new text[256];

    GetPlayerName(playerid, name, sizeof(name));

    format(
        text,
        sizeof(text),
        "[A] %s [%d]: %s",
        name,
        AdminLevel[playerid],
        params
    );

    SendAdminChat(text);

    return 1;
}

/* 6 */
CMD:asay(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    if(!strlen(params))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /asay [текст]");

    new name[MAX_PLAYER_NAME];
    new text[256];

    GetPlayerName(playerid, name, sizeof(name));

    format(
        text,
        sizeof(text),
        "[ADMIN] %s: %s",
        name,
        params
    );

    BroadcastAdmin(text);

    return 1;
}

/* 7 */
CMD:announce(playerid, params[])
{
    if(!IsAdmin(playerid, 5))
        return AdminDenied(playerid, 5);

    if(!strlen(params))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /announce [текст]");

    GameTextForAll(params, 5000, 3);

    return 1;
}

/* 8 */
CMD:players(playerid, params[])
{
    if(!IsAdmin(playerid, 1))
        return AdminDenied(playerid, 1);

    new count;
    new name[MAX_PLAYER_NAME];
    new text[128];

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(!IsPlayerConnected(i))
            continue;

        count++;

        GetPlayerName(i, name, sizeof(name));

        format(
            text,
            sizeof(text),
            "[%d] %s | Ping: %d",
            i,
            name,
            GetPlayerPing(i)
        );

        SendClientMessage(playerid, COLOR_WHITE, text);
    }

    format(
        text,
        sizeof(text),
        "Онлайн игроков: %d",
        count
    );

    SendClientMessage(playerid, COLOR_GREEN, text);

    return 1;
}

/* 9 */
CMD:getid(playerid, params[])
{
    if(!IsAdmin(playerid, 1))
        return AdminDenied(playerid, 1);

    new name[MAX_PLAYER_NAME];

    if(sscanf(params, "s[24]", name))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /getid [ник]");

    new target = GetPlayerIdByName(name);

    if(target == INVALID_PLAYER_ID)
        return SendClientMessage(playerid, COLOR_RED,
            "Игрок не найден.");

    new text[128];

    format(
        text,
        sizeof(text),
        "Игрок %s имеет ID %d.",
        name,
        target
    );

    SendClientMessage(playerid, COLOR_GREEN, text);

    return 1;
}

/* 10 */
CMD:check(playerid, params[])
{
    if(!IsAdmin(playerid, 2))
        return AdminDenied(playerid, 2);

    new target;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /check [ID]");

    if(!IsPlayerConnected(target))
        return SendClientMessage(playerid, COLOR_RED,
            "Игрок не найден.");

    new name[MAX_PLAYER_NAME];
    new Float:hp;
    new Float:armour;
    new text[256];

    GetPlayerName(target, name, sizeof(name));
    GetPlayerHealth(target, hp);
    GetPlayerArmour(target, armour);

    format(
        text,
        sizeof(text),
        "%s | ID:%d | HP:%.1f | ARM:%.1f | Ping:%d | VW:%d | INT:%d",
        name,
        target,
        hp,
        armour,
        GetPlayerPing(target),
        GetPlayerVirtualWorld(target),
        GetPlayerInterior(target)
    );

    SendClientMessage(playerid, COLOR_CYAN, text);

    return 1;
}

/* =========================================================
   11-20 PLAYER INFORMATION
========================================================= */

/* 11 */
CMD:stats(playerid, params[])
{
    if(!IsAdmin(playerid, 1))
        return AdminDenied(playerid, 1);

    new target = playerid;

    if(strlen(params))
        sscanf(params, "u", target);

    if(!IsPlayerConnected(target))
        return SendClientMessage(playerid, COLOR_RED,
            "Игрок не найден.");

    new name[MAX_PLAYER_NAME];
    new Float:hp;
    new Float:armour;
    new text[256];

    GetPlayerName(target, name, sizeof(name));
    GetPlayerHealth(target, hp);
    GetPlayerArmour(target, armour);

    format(
        text,
        sizeof(text),
        "STATS: %s | ID:%d | HP:%.1f | ARM:%.1f | MONEY:%d",
        name,
        target,
        hp,
        armour,
        GetPlayerMoney(target)
    );

    SendClientMessage(playerid, COLOR_WHITE, text);

    return 1;
}

/* 12 */
CMD:ping(playerid, params[])
{
    if(!IsAdmin(playerid, 1))
        return AdminDenied(playerid, 1);

    new target = playerid;

    if(strlen(params))
        sscanf(params, "u", target);

    new text[64];

    format(
        text,
        sizeof(text),
        "Ping игрока %d: %d ms.",
        target,
        GetPlayerPing(target)
    );

    SendClientMessage(playerid, COLOR_CYAN, text);

    return 1;
}

/* 13 */
CMD:heal(playerid, params[])
{
    if(!IsAdmin(playerid, 2))
        return AdminDenied(playerid, 2);

    new target = playerid;

    if(strlen(params))
        sscanf(params, "u", target);

    SetPlayerHealth(target, 100.0);

    SendClientMessage(target, COLOR_GREEN,
        "Администратор восстановил вам здоровье.");

    return 1;
}

/* 14 */
CMD:armour(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    new target = playerid;

    if(strlen(params))
        sscanf(params, "u", target);

    SetPlayerArmour(target, 100.0);

    return 1;
}

/* 15 */
CMD:kill(playerid, params[])
{
    if(!IsAdmin(playerid, 4))
        return AdminDenied(playerid, 4);

    new target;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /kill [ID]");

    SetPlayerHealth(target, 0.0);

    return 1;
}

/* 16 */
CMD:killall(playerid, params[])
{
    if(!IsAdmin(playerid, 8))
        return AdminDenied(playerid, 8);

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i) && i != playerid)
            SetPlayerHealth(i, 0.0);
    }

    return 1;
}

/* 17 */
CMD:warn(playerid, params[])
{
    if(!IsAdmin(playerid, 2))
        return AdminDenied(playerid, 2);

    new target;
    new reason[128];

    if(sscanf(params, "us[128]", target, reason))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /warn [ID] [причина]");

    if(!IsPlayerConnected(target))
        return SendClientMessage(playerid, COLOR_RED,
            "Игрок не найден.");

    Warns[target]++;

    new text[256];

    format(
        text,
        sizeof(text),
        "Вы получили WARN %d/3. Причина: %s",
        Warns[target],
        reason
    );

    SendClientMessage(target, COLOR_RED, text);

    if(Warns[target] >= 3)
    {
        Warns[target] = 0;
        Kick(target);
    }

    return 1;
}

/* 18 */
CMD:unwarn(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    new target;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /unwarn [ID]");

    Warns[target] = 0;

    SendClientMessage(target, COLOR_GREEN,
        "Ваши предупреждения сняты.");

    return 1;
}

/* 19 */
CMD:mute(playerid, params[])
{
    if(!IsAdmin(playerid, 2))
        return AdminDenied(playerid, 2);

    new target;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /mute [ID]");

    AdminMuted[target] = 1;

    SendClientMessage(target, COLOR_RED,
        "Вы получили административный мут.");

    return 1;
}

/* 20 */
CMD:unmute(playerid, params[])
{
    if(!IsAdmin(playerid, 2))
        return AdminDenied(playerid, 2);

    new target;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /unmute [ID]");

    AdminMuted[target] = 0;

    SendClientMessage(target, COLOR_GREEN,
        "Мут снят.");

    return 1;
}

/* =========================================================
   21-40 PUNISHMENTS
========================================================= */

/* 21 */
CMD:kick(playerid, params[])
{
    if(!IsAdmin(playerid, 2))
        return AdminDenied(playerid, 2);

    new target;
    new reason[128];

    if(sscanf(params, "us[128]", target, reason))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /kick [ID] [причина]");

    if(!IsPlayerConnected(target))
        return SendClientMessage(playerid, COLOR_RED,
            "Игрок не найден.");

    if(AdminLevel[target] >= AdminLevel[playerid])
        return SendClientMessage(playerid, COLOR_RED,
            "Нельзя наказать администратора равного или выше уровня.");

    new name[MAX_PLAYER_NAME];
    new text[256];

    GetPlayerName(target, name, sizeof(name));

    format(
        text,
        sizeof(text),
        "Игрок %s был кикнут. Причина: %s",
        name,
        reason
    );

    BroadcastAdmin(text);
    Kick(target);

    return 1;
}

/* 22 */
CMD:ban(playerid, params[])
{
    if(!IsAdmin(playerid, 4))
        return AdminDenied(playerid, 4);

    new target;
    new reason[128];

    if(sscanf(params, "us[128]", target, reason))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /ban [ID] [причина]");

    if(!IsPlayerConnected(target))
        return SendClientMessage(playerid, COLOR_RED,
            "Игрок не найден.");

    if(AdminLevel[target] >= AdminLevel[playerid])
        return SendClientMessage(playerid, COLOR_RED,
            "Нельзя забанить администратора равного или выше уровня.");

    Ban(target);

    return 1;
}

/* 23 */
CMD:tempban(playerid, params[])
{
    if(!IsAdmin(playerid, 5))
        return AdminDenied(playerid, 5);

    new target;
    new minutes;
    new reason[128];

    if(sscanf(params, "uis[128]", target, minutes, reason))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /tempban [ID] [минуты] [причина]");

    SendClientMessage(target, COLOR_RED,
        "Вы получили временный бан.");

    Ban(target);

    return 1;
}

/* 24 */
CMD:jail(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    new target;
    new minutes;

    if(sscanf(params, "ui", target, minutes))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /jail [ID] [минуты]");

    if(!IsPlayerConnected(target))
        return SendClientMessage(playerid, COLOR_RED,
            "Игрок не найден.");

    AdminJail[target] = minutes * 60;

    SetPlayerInterior(target, 6);
    SetPlayerVirtualWorld(target, 999);
    SetPlayerPos(target, 264.6288, 77.5742, 1001.0391);

    SendClientMessage(target, COLOR_RED,
        "Вы были отправлены в административную тюрьму.");

    return 1;
}

/* 25 */
CMD:unjail(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    new target;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /unjail [ID]");

    AdminJail[target] = 0;

    SetPlayerInterior(target, 0);
    SetPlayerVirtualWorld(target, 0);

    SendClientMessage(target, COLOR_GREEN,
        "Вы освобождены из административной тюрьмы.");

    return 1;
}

/* 26 */
CMD:freeze(playerid, params[])
{
    if(!IsAdmin(playerid, 2))
        return AdminDenied(playerid, 2);

    new target;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /freeze [ID]");

    Frozen[target] = true;
    TogglePlayerControllable(target, false);

    return 1;
}

/* 27 */
CMD:unfreeze(playerid, params[])
{
    if(!IsAdmin(playerid, 2))
        return AdminDenied(playerid, 2);

    new target;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /unfreeze [ID]");

    Frozen[target] = false;
    TogglePlayerControllable(target, true);

    return 1;
}

/* 28 */
CMD:explode(playerid, params[])
{
    if(!IsAdmin(playerid, 5))
        return AdminDenied(playerid, 5);

    new target;
    new Float:x;
    new Float:y;
    new Float:z;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /explode [ID]");

    GetPlayerPos(target, x, y, z);

    CreateExplosion(x, y, z, 7, 10.0);

    return 1;
}

/* 29 */
CMD:burn(playerid, params[])
{
    if(!IsAdmin(playerid, 5))
        return AdminDenied(playerid, 5);

    new target;
    new Float:x;
    new Float:y;
    new Float:z;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /burn [ID]");

    GetPlayerPos(target, x, y, z);

    CreateExplosion(x, y, z, 12, 2.0);

    return 1;
}

/* 30 */
CMD:slap(playerid, params[])
{
    if(!IsAdmin(playerid, 2))
        return AdminDenied(playerid, 2);

    new target;
    new Float:x;
    new Float:y;
    new Float:z;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /slap [ID]");

    GetPlayerPos(target, x, y, z);

    SetPlayerPos(target, x, y, z + 5.0);

    return 1;
}

/* 31 */
CMD:launch(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    new target;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /launch [ID]");

    SetPlayerVelocity(target, 0.0, 0.0, 2.5);

    return 1;
}

/* 32 */
CMD:spin(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    new target;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /spin [ID]");

    SetPlayerVelocity(target, 5.0, 5.0, 2.0);

    return 1;
}

/* 33 */
CMD:confuse(playerid, params[])
{
    if(!IsAdmin(playerid, 4))
        return AdminDenied(playerid, 4);

    new target;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /confuse [ID]");

    SetPlayerVelocity(target, -5.0, 5.0, 3.0);

    return 1;
}

/* 34 */
CMD:warnall(playerid, params[])
{
    if(!IsAdmin(playerid, 8))
        return AdminDenied(playerid, 8);

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
            Warns[i]++;
    }

    SendClientMessageToAll(COLOR_RED,
        "Все игроки получили административное предупреждение.");

    return 1;
}

/* 35 */
CMD:muteall(playerid, params[])
{
    if(!IsAdmin(playerid, 8))
        return AdminDenied(playerid, 8);

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
            AdminMuted[i] = 1;
    }

    return 1;
}

/* 36 */
CMD:unmuteall(playerid, params[])
{
    if(!IsAdmin(playerid, 8))
        return AdminDenied(playerid, 8);

    for(new i = 0; i < MAX_PLAYERS; i++)
        AdminMuted[i] = 0;

    return 1;
}

/* 37 */
CMD:freezeall(playerid, params[])
{
    if(!IsAdmin(playerid, 8))
        return AdminDenied(playerid, 8);

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i) && i != playerid)
        {
            Frozen[i] = true;
            TogglePlayerControllable(i, false);
        }
    }

    return 1;
}

/* 38 */
CMD:unfreezeall(playerid, params[])
{
    if(!IsAdmin(playerid, 8))
        return AdminDenied(playerid, 8);

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
            Frozen[i] = false;
            TogglePlayerControllable(i, true);
        }
    }

    return 1;
}

/* 39 */
CMD:healall(playerid, params[])
{
    if(!IsAdmin(playerid, 6))
        return AdminDenied(playerid, 6);

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
            SetPlayerHealth(i, 100.0);
    }

    return 1;
}

/* 40 */
CMD:armourall(playerid, params[])
{
    if(!IsAdmin(playerid, 6))
        return AdminDenied(playerid, 6);

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
            SetPlayerArmour(i, 100.0);
    }

    return 1;
}

/* =========================================================
   41-60 TELEPORTS
========================================================= */

/* 41 */
CMD:goto(playerid, params[])
{
    if(!IsAdmin(playerid, 2))
        return AdminDenied(playerid, 2);

    new target;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /goto [ID]");

    TeleportToPlayer(playerid, target);

    return 1;
}

/* 42 */
CMD:gethere(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    new target;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /gethere [ID]");

    BringPlayer(playerid, target);

    return 1;
}

/* 43 */
CMD:bring(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    new target;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /bring [ID]");

    BringPlayer(playerid, target);

    return 1;
}

/* 44 */
CMD:bringall(playerid, params[])
{
    if(!IsAdmin(playerid, 8))
        return AdminDenied(playerid, 8);

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i) && i != playerid)
            BringPlayer(playerid, i);
    }

    return 1;
}

/* 45 */
CMD:return(playerid, params[])
{
    if(!IsAdmin(playerid, 2))
        return AdminDenied(playerid, 2);

    SetPlayerPos(playerid, 1550.0, -1675.0, 16.0);
    SetPlayerInterior(playerid, 0);
    SetPlayerVirtualWorld(playerid, 0);

    return 1;
}

/* 46 */
CMD:tp(playerid, params[])
{
    if(!IsAdmin(playerid, 2))
        return AdminDenied(playerid, 2);

    new Float:x;
    new Float:y;
    new Float:z;

    if(sscanf(params, "fff", x, y, z))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /tp [X] [Y] [Z]");

    SetPlayerPos(playerid, x, y, z);

    return 1;
}

/* 47 */
CMD:tphere(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    new target;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /tphere [ID]");

    BringPlayer(playerid, target);

    return 1;
}

/* 48 */
CMD:spec(playerid, params[])
{
    if(!IsAdmin(playerid, 2))
        return AdminDenied(playerid, 2);

    new target;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /spec [ID]");

    TogglePlayerSpectating(playerid, true);
    PlayerSpectatePlayer(playerid, target);

    AdminSpec[playerid] = target;

    return 1;
}

/* 49 */
CMD:specoff(playerid, params[])
{
    if(!IsAdmin(playerid, 2))
        return AdminDenied(playerid, 2);

    TogglePlayerSpectating(playerid, false);
    AdminSpec[playerid] = INVALID_PLAYER_ID;

    return 1;
}

/* 50 */
CMD:interior(playerid, params[])
{
    if(!IsAdmin(playerid, 4))
        return AdminDenied(playerid, 4);

    new interior;

    if(sscanf(params, "i", interior))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /interior [ID]");

    SetPlayerInterior(playerid, interior);

    return 1;
}

/* 51 */
CMD:setint(playerid, params[])
{
    if(!IsAdmin(playerid, 4))
        return AdminDenied(playerid, 4);

    new target;
    new interior;

    if(sscanf(params, "ui", target, interior))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /setint [ID] [INT]");

    SetPlayerInterior(target, interior);

    return 1;
}

/* 52 */
CMD:setvw(playerid, params[])
{
    if(!IsAdmin(playerid, 4))
        return AdminDenied(playerid, 4);

    new target;
    new vw;

    if(sscanf(params, "ui", target, vw))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /setvw [ID] [VW]");

    SetPlayerVirtualWorld(target, vw);

    return 1;
}

/* 53 */
CMD:vw(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    new vw;

    if(sscanf(params, "i", vw))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /vw [VW]");

    SetPlayerVirtualWorld(playerid, vw);

    return 1;
}

/* 54 */
CMD:gotohq(playerid, params[])
{
    if(!IsAdmin(playerid, 1))
        return AdminDenied(playerid, 1);

    SetPlayerPos(playerid, 1550.0, -1675.0, 16.0);
    SetPlayerInterior(playerid, 0);
    SetPlayerVirtualWorld(playerid, 0);

    return 1;
}

/* 55 */
CMD:gotoairport(playerid, params[])
{
    if(!IsAdmin(playerid, 1))
        return AdminDenied(playerid, 1);

    SetPlayerPos(playerid, 1685.0, -2330.0, 13.5);

    return 1;
}

/* 56 */
CMD:gotolspd(playerid, params[])
{
    if(!IsAdmin(playerid, 1))
        return AdminDenied(playerid, 1);

    SetPlayerPos(playerid, 1555.0, -1675.0, 16.0);

    return 1;
}

/* 57 */
CMD:gotohospital(playerid, params[])
{
    if(!IsAdmin(playerid, 1))
        return AdminDenied(playerid, 1);

    SetPlayerPos(playerid, 1177.0, -1324.0, 14.0);

    return 1;
}

/* 58 */
CMD:gotobeach(playerid, params[])
{
    if(!IsAdmin(playerid, 1))
        return AdminDenied(playerid, 1);

    SetPlayerPos(playerid, 390.0, -1800.0, 7.0);

    return 1;
}

/* 59 */
CMD:gotomount(playerid, params[])
{
    if(!IsAdmin(playerid, 1))
        return AdminDenied(playerid, 1);

    SetPlayerPos(playerid, -2230.0, -1730.0, 480.0);

    return 1;
}

/* 60 */
CMD:gotodesert(playerid, params[])
{
    if(!IsAdmin(playerid, 1))
        return AdminDenied(playerid, 1);

    SetPlayerPos(playerid, 500.0, 2300.0, 25.0);

    return 1;
}

/* =========================================================
   61-80 MONEY / ITEMS / PLAYER SETTINGS
========================================================= */

/* 61 */
CMD:givecash(playerid, params[])
{
    if(!IsAdmin(playerid, 5))
        return AdminDenied(playerid, 5);

    new target;
    new money;

    if(sscanf(params, "ui", target, money))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /givecash [ID] [сумма]");

    GivePlayerMoney(target, money);

    return 1;
}

/* 62 */
CMD:setcash(playerid, params[])
{
    if(!IsAdmin(playerid, 6))
        return AdminDenied(playerid, 6);

    new target;
    new money;

    if(sscanf(params, "ui", target, money))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /setcash [ID] [сумма]");

    ResetPlayerMoney(target);
    GivePlayerMoney(target, money);

    return 1;
}

/* 63 */
CMD:takecash(playerid, params[])
{
    if(!IsAdmin(playerid, 6))
        return AdminDenied(playerid, 6);

    new target;
    new money;

    if(sscanf(params, "ui", target, money))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /takecash [ID] [сумма]");

    GivePlayerMoney(target, -money);

    return 1;
}

/* 64 */
CMD:giveweapon(playerid, params[])
{
    if(!IsAdmin(playerid, 4))
        return AdminDenied(playerid, 4);

    new target;
    new weapon;
    new ammo;

    if(sscanf(params, "uii", target, weapon, ammo))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /giveweapon [ID] [оружие] [патроны]");

    GivePlayerWeapon(target, weapon, ammo);

    return 1;
}

/* 65 */
CMD:giveammo(playerid, params[])
{
    if(!IsAdmin(playerid, 4))
        return AdminDenied(playerid, 4);

    new target;
    new weapon;
    new ammo;

    if(sscanf(params, "uii", target, weapon, ammo))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /giveammo [ID] [оружие] [патроны]");

    GivePlayerWeapon(target, weapon, ammo);

    return 1;
}

/* 66 */
CMD:giveallweapon(playerid, params[])
{
    if(!IsAdmin(playerid, 8))
        return AdminDenied(playerid, 8);

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
            GivePlayerWeapon(i, 24, 500);
    }

    return 1;
}

/* 67 */
CMD:givehealth(playerid, params[])
{
    if(!IsAdmin(playerid, 2))
        return AdminDenied(playerid, 2);

    new target;

    if(sscanf(params, "u", target))
        target = playerid;

    SetPlayerHealth(target, 100.0);

    return 1;
}

/* 68 */
CMD:sethp(playerid, params[])
{
    if(!IsAdmin(playerid, 2))
        return AdminDenied(playerid, 2);

    new target;
    new Float:hp;

    if(sscanf(params, "uf", target, hp))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /sethp [ID] [HP]");

    SetPlayerHealth(target, hp);

    return 1;
}

/* 69 */
CMD:setarmor(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    new target;
    new Float:armor;

    if(sscanf(params, "uf", target, armor))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /setarmor [ID] [ARMOR]");

    SetPlayerArmour(target, armor);

    return 1;
}

/* 70 */
CMD:setskin(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    new target;
    new skin;

    if(sscanf(params, "ui", target, skin))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /setskin [ID] [SKIN]");

    if(skin < 0 || skin > 311)
        return SendClientMessage(playerid, COLOR_RED,
            "Некорректный ID скина.");

    SetPlayerSkin(target, skin);

    return 1;
}

/* 71 */
CMD:skin(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    new skin;

    if(sscanf(params, "i", skin))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /skin [ID]");

    SetPlayerSkin(playerid, skin);

    return 1;
}

/* 72 */
CMD:setcolor(playerid, params[])
{
    if(!IsAdmin(playerid, 5))
        return AdminDenied(playerid, 5);

    new target;
    new color;

    if(sscanf(params, "ui", target, color))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /setcolor [ID] [HEX]");

    SetPlayerColor(target, color);

    return 1;
}

/* 73 */
CMD:givejetpack(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    new target = playerid;

    if(strlen(params))
        sscanf(params, "u", target);

    SetPlayerSpecialAction(target, SPECIAL_ACTION_USEJETPACK);

    return 1;
}

/* 74 */
CMD:removeweapons(playerid, params[])
{
    if(!IsAdmin(playerid, 4))
        return AdminDenied(playerid, 4);

    new target;

    if(sscanf(params, "u", target))
        target = playerid;

    ResetPlayerWeapons(target);

    return 1;
}

/* 75 */
CMD:giveallcash(playerid, params[])
{
    if(!IsAdmin(playerid, 9))
        return AdminDenied(playerid, 9);

    new money;

    if(sscanf(params, "i", money))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /giveallcash [сумма]");

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
            GivePlayerMoney(i, money);
    }

    return 1;
}

/* 76 */
CMD:giveallhealth(playerid, params[])
{
    if(!IsAdmin(playerid, 7))
        return AdminDenied(playerid, 7);

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
            SetPlayerHealth(i, 100.0);
    }

    return 1;
}

/* 77 */
CMD:giveallarmor(playerid, params[])
{
    if(!IsAdmin(playerid, 7))
        return AdminDenied(playerid, 7);

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
            SetPlayerArmour(i, 100.0);
    }

    return 1;
}

/* 78 */
CMD:randomskin(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    new skin = random(312);

    SetPlayerSkin(playerid, skin);

    return 1;
}

/* 79 */
CMD:randomweapon(playerid, params[])
{
    if(!IsAdmin(playerid, 4))
        return AdminDenied(playerid, 4);

    new weapons[] =
    {
        22,23,24,25,26,27,28,29,30,31,32,33,34
    };

    new weapon = weapons[random(sizeof(weapons))];

    GivePlayerWeapon(playerid, weapon, 250);

    return 1;
}

/* 80 */
CMD:fulladmin(playerid, params[])
{
    if(!IsOwner(playerid))
        return SendClientMessage(playerid, COLOR_RED,
            "Только OWNER.");

    SetPlayerHealth(playerid, 100.0);
    SetPlayerArmour(playerid, 100.0);
    GivePlayerWeapon(playerid, 24, 999);
    GivePlayerWeapon(playerid, 31, 999);
    SetPlayerSpecialAction(playerid, SPECIAL_ACTION_USEJETPACK);

    return 1;
}

/* =========================================================
   81-100 WORLD
========================================================= */

/* 81 */
CMD:settime(playerid, params[])
{
    if(!IsAdmin(playerid, 5))
        return AdminDenied(playerid, 5);

    new hour;

    if(sscanf(params, "i", hour))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /settime [0-23]");

    if(hour < 0 || hour > 23)
        return SendClientMessage(playerid, COLOR_RED,
            "Время: 0-23.");

    SetWorldTime(hour);

    return 1;
}

/* 82 */
CMD:weather(playerid, params[])
{
    if(!IsAdmin(playerid, 5))
        return AdminDenied(playerid, 5);

    new weather;

    if(sscanf(params, "i", weather))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /weather [ID]");

    SetWeather(weather);

    return 1;
}

/* 83 */
CMD:weatherfun(playerid, params[])
{
    if(!IsAdmin(playerid, 8))
        return AdminDenied(playerid, 8);

    SetWeather(random(45));

    return 1;
}

/* 84 */
CMD:gravity(playerid, params[])
{
    if(!IsAdmin(playerid, 8))
        return AdminDenied(playerid, 8);

    new Float:g;

    if(sscanf(params, "f", g))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /gravity [значение]");

    SetGravity(g);

    return 1;
}

/* 85 */
CMD:normalgravity(playerid, params[])
{
    if(!IsAdmin(playerid, 5))
        return AdminDenied(playerid, 5);

    SetGravity(0.008);

    return 1;
}

/* 86 */
CMD:night(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    SetWorldTime(0);

    return 1;
}

/* 87 */
CMD:day(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    SetWorldTime(12);

    return 1;
}

/* 88 */
CMD:sunset(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    SetWorldTime(18);

    return 1;
}

/* 89 */
CMD:morning(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    SetWorldTime(8);

    return 1;
}

/* 90 */
CMD:freezeweather(playerid, params[])
{
    if(!IsAdmin(playerid, 8))
        return AdminDenied(playerid, 8);

    SetWeather(0);

    return 1;
}

/* 91 */
CMD:world(playerid, params[])
{
    if(!IsAdmin(playerid, 4))
        return AdminDenied(playerid, 4);

    new world;

    if(sscanf(params, "i", world))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /world [VW]");

    SetPlayerVirtualWorld(playerid, world);

    return 1;
}

/* 92 */
CMD:worldall(playerid, params[])
{
    if(!IsAdmin(playerid, 8))
        return AdminDenied(playerid, 8);

    new world;

    if(sscanf(params, "i", world))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /worldall [VW]");

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
            SetPlayerVirtualWorld(i, world);
    }

    return 1;
}

/* 93 */
CMD:interiorall(playerid, params[])
{
    if(!IsAdmin(playerid, 8))
        return AdminDenied(playerid, 8);

    new interior;

    if(sscanf(params, "i", interior))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /interiorall [INT]");

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
            SetPlayerInterior(i, interior);
    }

    return 1;
}

/* 94 */
CMD:randomworld(playerid, params[])
{
    if(!IsAdmin(playerid, 6))
        return AdminDenied(playerid, 6);

    SetPlayerVirtualWorld(playerid, random(1000));

    return 1;
}

/* 95 */
CMD:announcebig(playerid, params[])
{
    if(!IsAdmin(playerid, 6))
        return AdminDenied(playerid, 6);

    if(!strlen(params))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /announcebig [текст]");

    GameTextForAll(params, 8000, 5);

    return 1;
}

/* 96 */
CMD:messageall(playerid, params[])
{
    if(!IsAdmin(playerid, 5))
        return AdminDenied(playerid, 5);

    if(!strlen(params))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /messageall [текст]");

    SendClientMessageToAll(COLOR_ORANGE, params);

    return 1;
}

/* 97 */
CMD:rain(playerid, params[])
{
    if(!IsAdmin(playerid, 4))
        return AdminDenied(playerid, 4);

    SetWeather(8);

    return 1;
}

/* 98 */
CMD:sandstorm(playerid, params[])
{
    if(!IsAdmin(playerid, 6))
        return AdminDenied(playerid, 6);

    SetWeather(19);

    return 1;
}

/* 99 */
CMD:storm(playerid, params[])
{
    if(!IsAdmin(playerid, 6))
        return AdminDenied(playerid, 6);

    SetWeather(8);

    return 1;
}

/* 100 */
CMD:snow(playerid, params[])
{
    if(!IsAdmin(playerid, 6))
        return AdminDenied(playerid, 6);

    SetWeather(12);

    return 1;
}

/* =========================================================
   101-120 VEHICLES
========================================================= */

/* 101 */
CMD:veh(playerid, params[])
{
    if(!IsAdmin(playerid, 4))
        return AdminDenied(playerid, 4);

    new model;

    if(sscanf(params, "i", model))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /veh [ID]");

    new Float:x;
    new Float:y;
    new Float:z;
    new Float:a;

    GetPlayerPos(playerid, x, y, z);
    GetPlayerFacingAngle(playerid, a);

    new vehicle = CreateVehicle(
        model,
        x + 2.0,
        y,
        z,
        a,
        -1,
        -1,
        -1
    );

    PutPlayerInVehicle(playerid, vehicle, 0);

    return 1;
}

/* 102 */
CMD:veh2(playerid, params[])
{
    if(!IsAdmin(playerid, 6))
        return AdminDenied(playerid, 6);

    new model;
    new color1;
    new color2;

    if(sscanf(params, "iii", model, color1, color2))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /veh2 [ID] [цвет1] [цвет2]");

    new Float:x;
    new Float:y;
    new Float:z;
    new Float:a;

    GetPlayerPos(playerid, x, y, z);
    GetPlayerFacingAngle(playerid, a);

    new vehicle = CreateVehicle(
        model,
        x + 3.0,
        y,
        z,
        a,
        color1,
        color2,
        -1
    );

    PutPlayerInVehicle(playerid, vehicle, 0);

    return 1;
}

/* 103 */
CMD:fixveh(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    new vehicle = GetPlayerVehicleID(playerid);

    if(vehicle == 0)
        return SendClientMessage(playerid, COLOR_RED,
            "Вы не находитесь в автомобиле.");

    RepairVehicle(vehicle);

    return 1;
}

/* 104 */
CMD:flipveh(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    new vehicle = GetPlayerVehicleID(playerid);

    if(vehicle == 0)
        return SendClientMessage(playerid, COLOR_RED,
            "Вы не в автомобиле.");

    new Float:x;
    new Float:y;
    new Float:z;
    new Float:a;

    GetVehiclePos(vehicle, x, y, z);
    GetVehicleZAngle(vehicle, a);

    SetVehiclePos(vehicle, x, y, z + 1.0);
    SetVehicleZAngle(vehicle, a);

    return 1;
}

/* 105 */
CMD:destroyveh(playerid, params[])
{
    if(!IsAdmin(playerid, 5))
        return AdminDenied(playerid, 5);

    new vehicle = GetPlayerVehicleID(playerid);

    if(vehicle == 0)
        return SendClientMessage(playerid, COLOR_RED,
            "Вы не в автомобиле.");

    DestroyVehicle(vehicle);

    return 1;
}

/* 106 */
CMD:vehcolor(playerid, params[])
{
    if(!IsAdmin(playerid, 5))
        return AdminDenied(playerid, 5);

    new c1;
    new c2;

    if(sscanf(params, "ii", c1, c2))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /vehcolor [1] [2]");

    new vehicle = GetPlayerVehicleID(playerid);

    ChangeVehicleColor(vehicle, c1, c2);

    return 1;
}

/* 107 */
CMD:respawnveh(playerid, params[])
{
    if(!IsAdmin(playerid, 5))
        return AdminDenied(playerid, 5);

    new vehicle = GetPlayerVehicleID(playerid);

    SetVehicleToRespawn(vehicle);

    return 1;
}

/* 108 */
CMD:lockveh(playerid, params[])
{
    if(!IsAdmin(playerid, 4))
        return AdminDenied(playerid, 4);

    new vehicle = GetPlayerVehicleID(playerid);

    SetVehicleParamsForPlayer(vehicle, playerid, 0, 1);

    return 1;
}

/* 109 */
CMD:unlockveh(playerid, params[])
{
    if(!IsAdmin(playerid, 4))
        return AdminDenied(playerid, 4);

    new vehicle = GetPlayerVehicleID(playerid);

    SetVehicleParamsForPlayer(vehicle, playerid, 0, 0);

    return 1;
}

/* 110 */
CMD:engine(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    new vehicle = GetPlayerVehicleID(playerid);

    if(vehicle == 0)
        return 1;

    SetVehicleHealth(vehicle, 1000.0);

    return 1;
}

/* 111 */
CMD:vehhp(playerid, params[])
{
    if(!IsAdmin(playerid, 4))
        return AdminDenied(playerid, 4);

    new Float:hp;

    if(sscanf(params, "f", hp))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /vehhp [HP]");

    new vehicle = GetPlayerVehicleID(playerid);

    SetVehicleHealth(vehicle, hp);

    return 1;
}

/* 112 */
CMD:vehjump(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    new vehicle = GetPlayerVehicleID(playerid);

    if(vehicle == 0)
        return 1;

    SetVehicleVelocity(vehicle, 0.0, 0.0, 2.5);

    return 1;
}

/* 113 */
CMD:vehboost(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    new vehicle = GetPlayerVehicleID(playerid);

    if(vehicle == 0)
        return 1;

    SetVehicleVelocity(vehicle, 0.0, 5.0, 0.0);

    return 1;
}

/* 114 */
CMD:vehspin(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    new vehicle = GetPlayerVehicleID(playerid);

    if(vehicle == 0)
        return 1;

    SetVehicleAngularVelocity(vehicle, 0.0, 0.0, 5.0);

    return 1;
}

/* 115 */
CMD:vehexplode(playerid, params[])
{
    if(!IsAdmin(playerid, 5))
        return AdminDenied(playerid, 5);

    new vehicle = GetPlayerVehicleID(playerid);

    if(vehicle == 0)
        return 1;

    SetVehicleHealth(vehicle, 0.0);

    return 1;
}

/* 116 */
CMD:vehcolorrandom(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    new vehicle = GetPlayerVehicleID(playerid);

    ChangeVehicleColor(
        vehicle,
        random(126),
        random(126)
    );

    return 1;
}

/* 117 */
CMD:vehjumpall(playerid, params[])
{
    if(!IsAdmin(playerid, 8))
        return AdminDenied(playerid, 8);

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i) &&
           IsPlayerInAnyVehicle(i))
        {
            new vehicle = GetPlayerVehicleID(i);
            SetVehicleVelocity(vehicle, 0.0, 0.0, 2.0);
        }
    }

    return 1;
}

/* 118 */
CMD:fixallveh(playerid, params[])
{
    if(!IsAdmin(playerid, 8))
        return AdminDenied(playerid, 8);

    for(new i = 1; i < MAX_VEHICLES; i++)
        RepairVehicle(i);

    return 1;
}

/* 119 */
CMD:respawnallveh(playerid, params[])
{
    if(!IsAdmin(playerid, 9))
        return AdminDenied(playerid, 9);

    for(new i = 1; i < MAX_VEHICLES; i++)
        SetVehicleToRespawn(i);

    return 1;
}

/* 120 */
CMD:destroyallveh(playerid, params[])
{
    if(!IsAdmin(playerid, 10))
        return AdminDenied(playerid, 10);

    for(new i = 1; i < MAX_VEHICLES; i++)
        DestroyVehicle(i);

    return 1;
}

/* =========================================================
   121-135 FUN
========================================================= */

/* 121 */
CMD:bighead(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    new target;

    if(sscanf(params, "u", target))
        target = playerid;

    SetPlayerAttachedObject(
        target,
        0,
        18636,
        2,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        0.0,
        3.0,
        3.0,
        3.0
    );

    return 1;
}

/* 122 */
CMD:tinyhead(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    RemovePlayerAttachedObject(playerid, 0);

    return 1;
}

/* 123 */
CMD:fly(playerid, params[])
{
    if(!IsAdmin(playerid, 5))
        return AdminDenied(playerid, 5);

    SetPlayerVelocity(playerid, 0.0, 0.0, 1.0);

    return 1;
}

/* 124 */
CMD:superjump(playerid, params[])
{
    if(!IsAdmin(playerid, 4))
        return AdminDenied(playerid, 4);

    SetPlayerVelocity(playerid, 0.0, 0.0, 2.5);

    return 1;
}

/* 125 */
CMD:god(playerid, params[])
{
    if(!IsAdmin(playerid, 5))
        return AdminDenied(playerid, 5);

    SetPlayerHealth(playerid, 99999.0);
    SetPlayerArmour(playerid, 99999.0);

    return 1;
}

/* 126 */
CMD:ungod(playerid, params[])
{
    if(!IsAdmin(playerid, 5))
        return AdminDenied(playerid, 5);

    SetPlayerHealth(playerid, 100.0);
    SetPlayerArmour(playerid, 100.0);

    return 1;
}

/* 127 */
CMD:rainbow(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    SetPlayerColor(playerid, 0xFF0000FF);

    return 1;
}

/* 128 */
CMD:colorred(playerid, params[])
{
    if(!IsAdmin(playerid, 2))
        return AdminDenied(playerid, 2);

    SetPlayerColor(playerid, COLOR_RED);

    return 1;
}

/* 129 */
CMD:colorgreen(playerid, params[])
{
    if(!IsAdmin(playerid, 2))
        return AdminDenied(playerid, 2);

    SetPlayerColor(playerid, COLOR_GREEN);

    return 1;
}

/* 130 */
CMD:colorblue(playerid, params[])
{
    if(!IsAdmin(playerid, 2))
        return AdminDenied(playerid, 2);

    SetPlayerColor(playerid, COLOR_BLUE);

    return 1;
}

/* 131 */
CMD:colorpurple(playerid, params[])
{
    if(!IsAdmin(playerid, 2))
        return AdminDenied(playerid, 2);

    SetPlayerColor(playerid, COLOR_PURPLE);

    return 1;
}

/* 132 */
CMD:coloryellow(playerid, params[])
{
    if(!IsAdmin(playerid, 2))
        return AdminDenied(playerid, 2);

    SetPlayerColor(playerid, COLOR_YELLOW);

    return 1;
}

/* 133 */
CMD:invisible(playerid, params[])
{
    if(!IsAdmin(playerid, 6))
        return AdminDenied(playerid, 6);

    SetPlayerColor(playerid, 0xFFFFFF00);

    return 1;
}

/* 134 */
CMD:visible(playerid, params[])
{
    if(!IsAdmin(playerid, 6))
        return AdminDenied(playerid, 6);

    SetPlayerColor(playerid, COLOR_WHITE);

    return 1;
}

/* 135 */
CMD:drunk(playerid, params[])
{
    if(!IsAdmin(playerid, 3))
        return AdminDenied(playerid, 3);

    SetPlayerDrunkLevel(playerid, 50000);

    return 1;
}

/* =========================================================
   136-150 OWNER / ADMIN MANAGEMENT
========================================================= */

/* 136 */
CMD:setadmin(playerid, params[])
{
    if(!IsOwner(playerid))
        return SendClientMessage(playerid, COLOR_RED,
            "Только OWNER.");

    new target;
    new level;

    if(sscanf(params, "ui", target, level))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /setadmin [ID] [LVL]");

    if(level < 0 || level > 12)
        return SendClientMessage(playerid, COLOR_RED,
            "Допустимый уровень: 0-12.");

    AdminLevel[target] = level;

    new text[128];

    format(
        text,
        sizeof(text),
        "Ваш уровень администрации установлен: %d.",
        level
    );

    SendClientMessage(target, COLOR_GREEN, text);

    return 1;
}

/* 137 */
CMD:deladmin(playerid, params[])
{
    if(!IsOwner(playerid))
        return SendClientMessage(playerid, COLOR_RED,
            "Только OWNER.");

    new target;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /deladmin [ID]");

    AdminLevel[target] = 0;

    SendClientMessage(target, COLOR_RED,
        "Вы сняты с администрации.");

    return 1;
}

/* 138 */
CMD:sethelper(playerid, params[])
{
    if(!IsAdmin(playerid, 10))
        return AdminDenied(playerid, 10);

    new target;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /sethelper [ID]");

    AdminLevel[target] = 1;

    SendClientMessage(target, COLOR_GREEN,
        "Вы назначены помощником.");

    return 1;
}

/* 139 */
CMD:delhelper(playerid, params[])
{
    if(!IsAdmin(playerid, 10))
        return AdminDenied(playerid, 10);

    new target;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /delhelper [ID]");

    AdminLevel[target] = 0;

    return 1;
}

/* 140 */
CMD:promote(playerid, params[])
{
    if(!IsOwner(playerid))
        return SendClientMessage(playerid, COLOR_RED,
            "Только OWNER.");

    new target;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /promote [ID]");

    if(AdminLevel[target] < 12)
        AdminLevel[target]++;

    return 1;
}

/* 141 */
CMD:demote(playerid, params[])
{
    if(!IsOwner(playerid))
        return SendClientMessage(playerid, COLOR_RED,
            "Только OWNER.");

    new target;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /demote [ID]");

    if(AdminLevel[target] > 0)
        AdminLevel[target]--;

    return 1;
}

/* 142 */
CMD:serverinfo(playerid, params[])
{
    if(!IsAdmin(playerid, 1))
        return AdminDenied(playerid, 1);

    new count;

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
            count++;
    }

    new text[256];

    format(
        text,
        sizeof(text),
        "SERVER | Online:%d | Max:%d | Owner:%s | MaxAdmin:12",
        count,
        MAX_PLAYERS,
        OWNER_NAME
    );

    SendClientMessage(playerid, COLOR_CYAN, text);

    return 1;
}

/* 143 */
CMD:saveall(playerid, params[])
{
    if(!IsAdmin(playerid, 10))
        return AdminDenied(playerid, 10);

    SendRconCommand("gmx");

    return 1;
}

/* 144 */
CMD:kickall(playerid, params[])
{
    if(!IsOwner(playerid))
        return SendClientMessage(playerid, COLOR_RED,
            "Только OWNER.");

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i) && i != playerid)
            Kick(i);
    }

    return 1;
}

/* 145 */
CMD:reload(playerid, params[])
{
    if(!IsOwner(playerid))
        return SendClientMessage(playerid, COLOR_RED,
            "Только OWNER.");

    SendRconCommand("reloadfs");

    return 1;
}

/* 146 */
CMD:restart(playerid, params[])
{
    if(!IsOwner(playerid))
        return SendClientMessage(playerid, COLOR_RED,
            "Только OWNER.");

    SendRconCommand("gmx");

    return 1;
}

/* 147 */
CMD:shutdown(playerid, params[])
{
    if(!IsOwner(playerid))
        return SendClientMessage(playerid, COLOR_RED,
            "Только OWNER.");

    SendRconCommand("exit");

    return 1;
}

/* 148 */
CMD:owner(playerid, params[])
{
    if(!IsAdmin(playerid, 1))
        return AdminDenied(playerid, 1);

    new text[128];

    format(
        text,
        sizeof(text),
        "Главный владелец сервера: %s | LVL 12",
        OWNER_NAME
    );

    SendClientMessage(playerid, COLOR_YELLOW, text);

    return 1;
}

/* 149 */
CMD:adminlog(playerid, params[])
{
    if(!IsAdmin(playerid, 8))
        return AdminDenied(playerid, 8);

    SendClientMessage(playerid, COLOR_YELLOW,
        "Последние административные действия выводятся в server_log.");

    return 1;
}

/* 150 */
CMD:adminreset(playerid, params[])
{
    if(!IsOwner(playerid))
        return SendClientMessage(playerid, COLOR_RED,
            "Только OWNER.");

    new target;

    if(sscanf(params, "u", target))
        return SendClientMessage(playerid, COLOR_GREY,
            "Использование: /adminreset [ID]");

    AdminLevel[target] = 0;
    AdminDuty[target] = 0;
    AdminMuted[target] = 0;
    AdminJail[target] = 0;
    Warns[target] = 0;
    Frozen[target] = false;

    TogglePlayerControllable(target, true);
    SetPlayerColor(target, COLOR_WHITE);

    SendClientMessage(
        target,
        COLOR_RED,
        "Ваша административная статистика полностью сброшена."
    );

    return 1;
}