В теме 1 сообщение

Danny_Marcelo
Новичок

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

 

Что нового?

  Цитата

 

1. Добавил команду /back

2. Оптимизировал код

3. Добавил новые проверки

4. Добавил возможность возвращения оружия игроку при возврате на начальную точку

 

Читать далее...  

 

Итак приступим:

Находим свои переменные и вставляем:

 

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, но +/- везде одинаково, разве что меняется шапка

 

CMD:settp(playerid, params[])
{
    if (PlayerInfo[playerid][pAdmin] < 4return 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;
}
CMD:tp(playerid, params[])
{
    if (settp == 0return SendClientMessage(playerid, 0xCECECEFF, !"Функция отключена администратором.");
    if (PlayerInfo[playerid][pJailed] >= 1return SendClientMessage(playerid, 0xCECECEFF, !"Арестованным не разрешено покидать камеру.");
    if (PlayerInfo[playerid][pRabota] != 0return SendClientMessage(playerid, 0xCECECEFF, !"Необходимо завершить все начатые работы и активные действия.");
    if (bolkam[playerid] == truereturn 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. Переменные работ, лечения в больнице и т.д. меняйте на свои или удалите, если вам не нужны.

Читать далее...  

 

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:

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:

1.png.0007b50cf1e99e85db8ec5560eacdff2.png

 

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

6.png.4f2aaf260d48f07fc652e1b9aaa7f98b.png

 

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

7.png.64c9c7eb36890609ab1b8f5356e74b18.png

 

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

2.png.0e3c0814cd4270ef1d374b45da53333c.png

 

Если работаешь или лечишься в больнице:

3.png.e59c409e4781963f0ccb361b7b455734.png

 

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

4.png.5bd7f69d1e00ecc657058c5d4c2d90cf.png

 

При вводе /back 1 и более раз:

5.png.a4eb250bc3d387f4551622a6446fbca7.png

 

P.S. Команду /tp на Advance можно нажимать бесконечно, по этому я не стал сюда пихать аналогичную проверку как в /back.

Если что, не сложно будет добавить 1 строчку проверки. Просто имейте ввиду, что это не баг. Просто нужно же соответствовать названию темы "На 100% КОПИЯ"))

 

Автор: Danny_Marcelo

Размещая на другие порталы, обязательно указать автора

Отредактировано пользователем Danny_Marcelo

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • Alesher
      От Alesher
      НОВЕЙШИЙ МОД HEAVILY MOD 2025
      Скачать файл Имеется 14 уровень админки а также 3 уровня хелпера авторизация /alogin, имееться база данный а также минимальное количество багов.
      Добавил Alesher Добавлено 30.05.2025 Категория Моды Автор ByNikolas  
    • BESPERSPEKTIBN9AK
      От BESPERSPEKTIBN9AK
      Как убрать обьект в мэрии? 
      Искал уже по координатам из save убираю, не убирается.