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

Новичок

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

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

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

    • От xDetik
      Приветствую.
      Сделал небольшой островок на некотором расстоянии от карты Сан-Андреса, хотел поставить там пикап, добавил пикап в мод, и после того как приехал на остров, пикап не видно. Но если на этом же пикапе поменять координаты на те, которые находятся на карте Сан-Андреса, то он становится виден. В чем может быть проблема?
    • От Daf
      Здравствуйте, знатоки Pawn. У меня возникла такая проблема, сейчас попробую расписать ее подробно:
      Я решил добавить в игру Real cars. Всё сделал правильно: подключил инклуд, знаю принцип добавление реал кара. Захожу в игру и вижу машину. Добавляю вторую — она тоже есть. Добавляю третью — снова всё нормально. Но когда я пытаюсь добавить четвёртую, игра крашится при входе.
      Не важно, какой ид авто я ставлю, менял модельки, переделал всё, но проблема остаётся. Думаю, вы сможете подсказать, как её решить.
      Include - m_custom_sync 1.0.0
      CreateVehicleVEx(npoType, npoId, modelid, Float:x, Float:y, Float:z, Float:angle, color1, color2, respawn_delay = 180, addsiren = 0, tc_veh = 0) {     new vehicle, custom_id = -1;     if(!(400 <= modelid <= 20000))     {         custom_id = GetSlotVehicleModelSync(modelid);         if(custom_id == -1) return print("daf top");         modelid = customVehModels[custom_id][ModelID];     } #include <m_custom-sync> #define M_CUSTOM_CustomForPlayers 1 #define M_CUSTOM_CustomForActors 1 #define M_CUSTOM_CustomForVehicles 1 public OnGameModeInit() {     AddVehicleSyncModel(560, 12500); // беха     AddVehicleSyncModel(560, 12600); // порш     AddVehicleSyncModel(579, 12700); // хамер     AddVehicleSyncModel(560, 19929); // чирик