Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Команды /settp, /tp, /back (100% копия Advance RP)

Danny_Marcelo

Компетентный
Всех приветствую. Сегодня я решил обновить систему мероприятий, т.к. на самом проекте Advance RP уже давно видоизменили систему, добавили нового функционала. Мы не должны стоять на месте и я решил тоже свою систему доработать. На данном портале была моя старая тема, но ее видимо удалили или я плохо искал. Ну в общем выложу новый вариант. Вы можете использовать данную систему как аналог Advance RP или же доработать для своего проекта. Все в ваших руках как говорится.

Что нового?

1. Добавил команду /back
2. Оптимизировал код
3. Добавил новые проверки
4. Добавил возможность возвращения оружия игроку при возврате на начальную точку
Итак приступим:
Находим свои переменные и вставляем:

Pawn:
new settp = 0; // Флаг включения/выключения телепортации
new Float:TeleportFloat[3]; // Координаты точки телепортации
new TeleportInfo[2]; // Интерьер и виртуальный мир
new Float:PlayerLastPos[MAX_PLAYERS][3]; // Последние координаты игрока
new PlayerLastInt[MAX_PLAYERS]; // Последний интерьер игрока
new PlayerLastVW[MAX_PLAYERS]; // Последний виртуальный мир игрока
new PlayerWeapons[MAX_PLAYERS][13][2]; // Оружие игрока (слот и патроны)
new PlayerUsedTP[MAX_PLAYERS]; // Флаг для отслеживания использования /tp
Далее идём в команды, мой случай на Pawn.CMD, но +/- везде одинаково, разве что меняется шапка

Pawn:
CMD:settp(playerid, params[])
{
    if (PlayerInfo[playerid][pAdmin] < 4) return 1;
    new string[95];
    if (settp == 0)
    {
        GetPlayerPos(playerid, TeleportFloat[0], TeleportFloat[1], TeleportFloat[2]);
        TeleportInfo[0] = GetPlayerInterior(playerid);
        TeleportInfo[1] = GetPlayerVirtualWorld(playerid);
        settp = 1;

        format(string, sizeof(string), "[A] %s[%d] установил точку телепорта для игроков. {00CC00}ТП включен.", PlayerInfo[playerid][pName], playerid);
        SendAdminMessage(0x52B2B5FF, string);
    }
    else
    {
        format(string, sizeof(string), "[A] %s[%d] удалил точку телепорта для игроков. {FF6600}ТП отключен.", PlayerInfo[playerid][pName], playerid);
        SendAdminMessage(0x52B2B5FF, string);
        settp = 0;
    }
    return 1;
}
Pawn:
CMD:tp(playerid, params[])
{
    if (settp == 0) return SendClientMessage(playerid, 0xCECECEFF, !"Функция отключена администратором.");
    if (PlayerInfo[playerid][pJailed] >= 1) return SendClientMessage(playerid, 0xCECECEFF, !"Арестованным не разрешено покидать камеру.");
    if (PlayerInfo[playerid][pRabota] != 0) return SendClientMessage(playerid, 0xCECECEFF, !"Необходимо завершить все начатые работы и активные действия.");
    if (bolkam[playerid] == true) return SendClientMessage(playerid, 0xCECECEFF, !"Необходимо завершить все начатые работы и активные действия.");

    GetPlayerPos(playerid, PlayerLastPos[playerid][0], PlayerLastPos[playerid][1], PlayerLastPos[playerid][2]);
    PlayerLastInt[playerid] = GetPlayerInterior(playerid);
    PlayerLastVW[playerid] = GetPlayerVirtualWorld(playerid);

    for (new i = 0; i < 13; i++)
    {
        GetPlayerWeaponData(playerid, i, PlayerWeapons[playerid][i][0], PlayerWeapons[playerid][i][1]);
    }
    PlayerUsedTP[playerid] = 1;

    ShowPlayerDialog(playerid, 22, DIALOG_STYLE_MSGBOX, !"{6699FF}Телепортация",
        !"{FFFFFF}Вы уверены, что хотите попасть на место проведения мероприятия?\n{FFCD00}Ваше оружие будет изъято для хранения и возвращено позже.", !"Да", !"Нет");
    return 1;
}
P.S. Переменные работ, лечения в больнице и т.д. меняйте на свои или удалите, если вам не нужны.
Pawn:
CMD:back(playerid, params[])
{
    if (!PlayerUsedTP[playerid])
    {
        return SendClientMessage(playerid, 0xCECECEFF, !"Эту функцию можно использовать после {FF9933}/tp, /go {CECECE}или по окончании {FF9933}мероприятий");
    }
    SetPlayerPos(playerid, PlayerLastPos[playerid][0], PlayerLastPos[playerid][1], PlayerLastPos[playerid][2]);
    SetPlayerInterior(playerid, PlayerLastInt[playerid]);
    SetPlayerVirtualWorld(playerid, PlayerLastVW[playerid]);
    ResetPlayerWeapons(playerid);
    for (new i = 0; i < 13; i++)
    {
        if (PlayerWeapons[playerid][i][0] != 0)
        {
            GivePlayerWeapon(playerid, PlayerWeapons[playerid][i][0], PlayerWeapons[playerid][i][1]);
        }
    }
    PlayerUsedTP[playerid] = 0;
    SendClientMessage(playerid, 0x3399FFFF, !"Вы вернулись туда, где были до телепортации");
    return 1;
}
Ну и в OnDialogResponse:

Pawn:
case 22: // Не забудьте проверить и при надобности изменить id диалога на вашу цифру или ID_NAME
        {
            if (response)
            {
                SetPlayerPos(playerid, TeleportFloat[0], TeleportFloat[1], TeleportFloat[2]);
                SetPlayerInterior(playerid, TeleportInfo[0]);
                SetPlayerVirtualWorld(playerid, TeleportInfo[1]);
                ResetPlayerWeapons(playerid);
                SendClientMessage(playerid, 0x66CCFFFF, "Вы были доставлены на место проведения мероприятия");
                SendClientMessage(playerid, 0x66CCFFFF, "Чтобы вернуться обратно, введите {FF9900}/back");
            }
        }
Скриншоты:

Если игрок сидит в КПЗ и вводит /tp:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


При включенном /tp:

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


При выключенном /tp:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


Сообщение администраторам:

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


Если работаешь или лечишься в больнице:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


Текст после телепортации:

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


При вводе /back 1 и более раз:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


P.S. Команду /tp на Advance можно нажимать бесконечно, по этому я не стал сюда пихать аналогичную проверку как в /back.
Если что, не сложно будет добавить 1 строчку проверки. Просто имейте ввиду, что это не баг. Просто нужно же соответствовать названию темы "На 100% КОПИЯ"))
Автор: Danny_Marcelo
Размещая на другие порталы, обязательно указать автора
 
Последнее редактирование:
Сверху Снизу