Доступ к архиву

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

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

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

Работа с чекпоинтами(обычными и гоночными)

Статус
В этой теме нельзя размещать новые ответы.

Dima972511

Умник
Работа с чекпоинтами(обычными и гоночными, динамическими и стандартными)

Здравствуйте! Сегодня я постараюсь вам рассказать как можно больше информации о чекпоинтах.​

Ну что такое чекпоинт думаю многие знают. Чекпоинты бывают 2-х видов это обычный чекпоинт и гоночный. Начнём пожалуй с пабликов отвечающих за чекпоинты
HTML:
public OnPlayerEnterChekpoint - вызывается, когда игрок встал на чекпоинт(обычный чекпоинт)
HTML:
public OnPlayerLeaveChekpoint -  вызывается, когда игрок вышел из чекпоинта(обычный чекпоинт)
HTML:
public OnPlayerEnterRaceChekpoint - вызывается, когда игрок встал на чекпоинт(гоночный чекпоинт)
HTML:
public OnPlayerLeaveRaceChekpoint -  вызывается, когда игрок вышел из чекпоинта(гоночный чекпоинт)
Ну а теперь пожалуй функции чекпоинтов их не так уж много
Это установка чекпоинта для игрока:
HTML:
SetPlayerCheckpoint(playerid, x, y, z, размер(радиус)); - устанавливает обычный чекпоинт
HTML:
SetPlayerRaceCheckpoint(playerid, тип, x, y, z, x(последуещего чекпоинта), y(последуещего чекпоинта), z (последуещего чекпоинта), размер(радиус)); - устанавливает гоночный чекпоинт
HTML:
Типы гоночных чекпоинтов:
0 - обычный
1 - финиш
2 - пустой(простой чекпоинт без нечего на нём)
3 - воздушный чекпоинт
4 - воздушный финиш
Так же есть функция проверяющая находится ли игрок в чекпоинте
HTML:
IsPlayerInCheckpoint(playerid); - для обычного не гоночного чекпоинта
IsPlayerInRaceCheckpoint(playerid); - для гоночного чекпоинта
Ну и функция отключить чекпоинт
HTML:
DisablePlayerCheckpoint(playerid); - для обычного не гоночного чекпоинта
DisablePlayerRaceCheckpoint(playerid); - для гоночного чекпоинта
Ну а теперь как же использовать чекпоинт покажу пример
HTML:
CMD:money(playerid, params[]) // К примеру команда взять деньги работающая по чекпоинту
{
     SetPlayerCheckpoint(playerid, x, y, z); // Создаём чекпоинт
     SetPVarInt(playerid, "Money", 1); // Создаём переменную для определения чекпоинта можно конечно и new
     return 1;
}
Теперь как игрок встанет на чекпоинт вызовется функция OnPlayerEnterCheckpoint, ну наврядли у кого то в моде 1 чекпоинта поэтому необходимо использовать переменные для опеределения чекпоинта для этого я и указал
HTML:
SetPVarInt(playerid, "Money", 1);
И так в public OnPlayerEnterCheckpoint я добавлю
HTML:
if(GetPVarInt(playerid, "Money") == 1)
{
    GiveMoney(playerid, 100000); // Действие чекпоинта к примеру у меня была выдача денег
    DeletePVar(playerid, "Money"); // Удаляем в случае new обнуляем переменую чтобы эта функция не вызывалась в другом чекпоинте
    DisablePlayerCheckpoint(playerid); // Ну и отключаем чекпоинт
}
HTML:
С гоночным чекпоинтом всё также только для него как я уже говорил вызывается public OnPlayerEnterRaceCheckpoint.
Ну а теперь пример использования IsPlayerInCheckpoint

Рассмотрим команду с выдачей хп с проверкой на чекпоинт:

HTML:
CMD:healme(playerid, params[])
{
    if(!IsPlayerInCheckpoint) return 1; // Проверяем находится ли игрок в чекпоинте я указал перед проверкой ! что значит "не равно" т.е проверка сейчас имеет значение если игрок не находится в чекпоинте то действие дальше не выполняется
    SetPlayerHealth(playerid, 100.0); // Ну и действие в данном случае даём игроку 100 хп
    return 1;
}
С гоночным чекпоинтом тоже самое только вместо
HTML:
IsPlayerInCheckpoint
используем функцию
HTML:
IsPlayerInRaceCheckpoint
Также есть чекпоинты работающие на стримере от инкогнито. Чем они отличаются?
1. Их не нужно вызывать они создаются для всех игроков.
2. Они прогружаются с определённого радиуса
3. Игрок может видеть максимум 2 чекпоинта

Они могут пригодится к примеру: в бизнесе нам надо сделать меню бара не по команде, естественно через SetPlayerCheckpoint мы не можем сделать чекпоинты в каждом баре, т.к: чекпоинт может быть 1 как я уже и говорил(можно конечно к каждому пикапу прикрепить SetPlayerCheckpoint(координаты) ну это неудобно)

Чтож перейдём к функциям:

HTML:
CreateDynamicCP(x, y, z, размер(радиус), виртуальный мир, интерьер, ид игрока(по желанию можно не ставить), дистанция с которой игроку будет виден чекпонт(по желанию можно не ставить); - если необходимо сделать чекпоинт в интерьере
CreateDynamicCP(x, y, z, размер(радиус), дистанция(с которой чекпоинт будет виден игроку)); - если создаём чекпоинт на улице
Ну а вобщем функция выглядит так:
CreateDynamicCP(Float:x, Float:y, Float:z, размер(радиус), виртуальный мир(опционально), ид интерьера(опционально), ид игрока(опционально), с какого расстояние чекпоинт будет виден игроку(опционально)); - где опционально значит что можно не указывать
Ну а теперь расскажу о действии когда мы встаём на динамический чекпоинт вызывается функция
HTML:
public OnPlayerEnterDynamicCP
И так рассмотрим пример создания меню в баре на основе динамического чекпоинта
HTML:
Создаём в загрузку бизнессов
CreateDynamicCP(BizzInfo[TOTALBIZZ][bMenux],BizzInfo[TOTALBIZZ][bMenuy],BizzInfo[TOTALBIZZ][bMenuz], 1.0,BizzInfo[TOTALBIZZ][bVirtual],BizzInfo[TOTALBIZZ][bInt]); // Ну чтож мы тут наблюдаем такую комбинацию x, y, z, радиус, виртуальный мир, интерьер
HTML:
Ну а теперь добавляем действие для чекпоинта
в public OnPlayerEnterDynamicCP
добавляем
for(new i = 0; i < TOTALBIZ; i++)
{
    if(checkpointid == BizzInfo[idx][bMenu]) //Если чекпоинт равен значению bMenu
    {
        BarList(playerid); // Ну и действие в данном случае вызывает stock BarList
     }
}
HTML:
TogglePlayerDynamicCP(playerid, ид чекпоинта, статус false - отключить, true - показать); - функция для показа/скрытия чекпоинта от конкретного игрока
TogglePlayerAllDynamicCPs(playerid, статус false - отключить, true - показать); - функция показа/скрытия чекпоинтов(всех на dynamiccp) от конкретного игрока
IsPlayerInDynamicCP(playerid, ид чекпоинта); // Проверяет игрока на нахождения в конкретном чекпоинте
GetPlayerVisibleDynamicCP(playerid); - не пользовался этой функцией, ну как я понял проверяет видим ли игроку чекпоинт
DestroyAllDynamicCPs(); // Разрушает(убирает) все динамические чекпоинты
DestroyDynamicCP(ид чекпоинта); //Разрушает(убирает) конкретный чекпоинт
IsValidDynamicCP(ид чекпоинта); //Проверяет существует ли чекпоинт
Ну пожалуй всё о динамических чекпоинтах, при желании могу написать о гоночных чекпоинтах на стримере. Будут ошибки пишите исправлю.

Ну на этом всё надеюсь вам был полезен мой урок, может допустил ошибки если что подправьте :).​
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу