Danny_Marcelo

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

1 post in this topic

Всех приветствую. Сегодня я решил обновить систему мероприятий, т.к. на самом проекте 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

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

Edited by Danny_Marcelo

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • whccompany
      By whccompany
      Rostov Role Play | Rostov RP | CRMP Mobile Project объявляет набор людей в свою команду: Нам требуются:
       
      1. Маппера:
      Сдельная оплата труда от 250 до 3000 рублей/ за 1 работу
       
      2. Специалист по Text Draw:
      Сдельная оплата труда от 400 до 3500 рублей/ за одну работу
       
      3. Pawn разработчик:
      Заработная плата от 10 000 рублей/месяц
       
      4. Программист для создания лаунчера и сайта UCP с автодонатом:
      Заработная плата от 10 000 рублей/месяц
       
      Контакты для связи:
       
      ВКонтакте
       
      Telegram
       
    • Talex
      By Talex
      Игровой сервер Life Game RolePlay
    • Talex
      By Talex
      Игровой сервер Life Game RolePlay
      Скачать файл Игровой сервер Life Game RolePlay
      Добавил Talex Добавлено 28.01.2024 Категория Моды Автор Неизвестно  
    • Владислав2
      By Владислав2
      Здравствуйте, при компиляции появляется ошибка,

      Ошибка:
      error 017: undefined symbol "REP_KUZIA_TD"

      Строки:
       
          REP_KUZIA_TD[0] = TextDrawCreate(7.499990, 314.444396, "REP: 1");
          TextDrawLetterSize(REP_KUZIA_TD[0], 0.400000, 1.600000);
          TextDrawAlignment(REP_KUZIA_TD[0], 1);
          TextDrawColor(REP_KUZIA_TD[0], -1);
          TextDrawSetShadow(REP_KUZIA_TD[0], 0);
          TextDrawSetOutline(REP_KUZIA_TD[0], 1);
          TextDrawBackgroundColor(REP_KUZIA_TD[0], 255);
          TextDrawFont(REP_KUZIA_TD[0], 1);
          TextDrawSetProportional(REP_KUZIA_TD[0], 1);
          TextDrawSetShadow(REP_KUZIA_TD[0], 0);
          REP_KUZIA_TD[1] = TextDrawCreate(6.249957, 330.518493, "ASK: 0");
          TextDrawLetterSize(REP_KUZIA_TD[1], 0.400000, 1.600000);
          TextDrawAlignment(REP_KUZIA_TD[1], 1);
          TextDrawColor(REP_KUZIA_TD[1], -1);
          TextDrawSetShadow(REP_KUZIA_TD[1], 0);
          TextDrawSetOutline(REP_KUZIA_TD[1], 1);
          TextDrawBackgroundColor(REP_KUZIA_TD[1], 255);
          TextDrawFont(REP_KUZIA_TD[1], 1);
          TextDrawSetProportional(REP_KUZIA_TD[1], 1);
          TextDrawSetShadow(REP_KUZIA_TD[1], 0);
          return 1;
      }

      Буду рад если кто-то поможет