Dima972511
Умник
Работа с чекпоинтами(обычными и гоночными, динамическими и стандартными)
Ну что такое чекпоинт думаю многие знают. Чекпоинты бывают 2-х видов это обычный чекпоинт и гоночный. Начнём пожалуй с пабликов отвечающих за чекпоинты
Ну а теперь пожалуй функции чекпоинтов их не так уж много
Это установка чекпоинта для игрока:
Так же есть функция проверяющая находится ли игрок в чекпоинте
Ну и функция отключить чекпоинт
Ну а теперь как же использовать чекпоинт покажу пример
Теперь как игрок встанет на чекпоинт вызовется функция OnPlayerEnterCheckpoint, ну наврядли у кого то в моде 1 чекпоинта поэтому необходимо использовать переменные для опеределения чекпоинта для этого я и указал
И так в public OnPlayerEnterCheckpoint я добавлю
Ну а теперь пример использования IsPlayerInCheckpoint
Рассмотрим команду с выдачей хп с проверкой на чекпоинт:
С гоночным чекпоинтом тоже самое только вместо
используем функцию
Также есть чекпоинты работающие на стримере от инкогнито. Чем они отличаются?
1. Их не нужно вызывать они создаются для всех игроков.
2. Они прогружаются с определённого радиуса
3. Игрок может видеть максимум 2 чекпоинта
Они могут пригодится к примеру: в бизнесе нам надо сделать меню бара не по команде, естественно через SetPlayerCheckpoint мы не можем сделать чекпоинты в каждом баре, т.к: чекпоинт может быть 1 как я уже и говорил(можно конечно к каждому пикапу прикрепить SetPlayerCheckpoint(координаты) ну это неудобно)
Чтож перейдём к функциям:
Ну а теперь расскажу о действии когда мы встаём на динамический чекпоинт вызывается функция
И так рассмотрим пример создания меню в баре на основе динамического чекпоинта
Ну пожалуй всё о динамических чекпоинтах, при желании могу написать о гоночных чекпоинтах на стримере. Будут ошибки пишите исправлю.
Здравствуйте! Сегодня я постараюсь вам рассказать как можно больше информации о чекпоинтах.
Ну что такое чекпоинт думаю многие знают. Чекпоинты бывают 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;
}
HTML:
SetPVarInt(playerid, "Money", 1);
HTML:
if(GetPVarInt(playerid, "Money") == 1)
{
GiveMoney(playerid, 100000); // Действие чекпоинта к примеру у меня была выдача денег
DeletePVar(playerid, "Money"); // Удаляем в случае new обнуляем переменую чтобы эта функция не вызывалась в другом чекпоинте
DisablePlayerCheckpoint(playerid); // Ну и отключаем чекпоинт
}
HTML:
С гоночным чекпоинтом всё также только для него как я уже говорил вызывается public OnPlayerEnterRaceCheckpoint.
Рассмотрим команду с выдачей хп с проверкой на чекпоинт:
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(ид чекпоинта); //Проверяет существует ли чекпоинт
Ну на этом всё надеюсь вам был полезен мой урок, может допустил ошибки если что подправьте
.
Последнее редактирование:
