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

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

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

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

OnPlayerPickUpPickup или подробнее о пикапах

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

AdeLn@ToR

Дебютант
Здравствуйте, вот решил выложить урок по пикапам. Урок не мой. Автор - REALman

Уважаемые форумчане, представляю вам вторую версию возможно популярного урока о пикапах. Я перечитал урок и решил его переписать. Давайте начнем.

Что же такое пикапы?

Пикап - это абсолютно любой объект, который не имеет плотных текстур* и будет вращатся над землей. Пикап может быть подобран**, что может вызвать паблик OnPlayerPickUpPickup.

*Т.е будет прозрачен и плотное тело сможет сквозь него пройти.
**В зависимости от типа.

Как сделать пикап?

В нашем распоряжении имеются две функции для создания пикапов: AddStaticPickup и CreatePickup. Чем же они отличаются? Первая функция может использоватся только в паблике OnGameModeInit* и пикап созданный данной функцией нельзя будет удалить (см. далее), вторую функцию вы можете использовать где угодно и созданный потом пикап можете удалять где хотите, достаточно только знать ID пикапа.

Теперь поговорим о функциях подробнее. Первая функция возвращает 1, если пикап успешно создан , вторая же функция возвращает ID созданного пикапа и -1 если произошла ошибка в создании пикапа, а если точнее, то если превышено максимальное число созданных пикапов. Давайте разберемся в синтаксисе обоих функций:
PHP:
AddStaticPickup(model, type, Float:X, Float:Y, Float:Z, Virtualworld);
CreatePickup(model, type, Float:X, Float:Y, Float:Z, Virtualworld);
Вы наверняка уже поняли, что функции одинаковы. Различаются только возвращаемые величины и возможность дальнейшей манипуляции пикапами. Давайте разберем аргументы функций подробнее:
Код:
model - объект**, который станет пикапом
type - тип*** пикапа
Float: x, Float: y, Float: z - это позиция пикапа по осям: x, y и z. Соответственно: оси x, y и высота.
Virtualworld - виртуальный мир в котором находится пикап, если вы хотите, чтобы пикап отображался в любом виртуальном мире, задайте аргументу значение -1
*Так говорит официальная вики, но опыты лиц, не связанных с ней, говорят, что использование таких функций как AddStaticVehicle и AddStaticPickup возможно и за пределами паблика OnGameModeInit. Но все таки, если официальная вики говорит что нельзя, наверное надо прислушатся.
**Пикапом может стать любой валидный объект, однако если вы хотите соблюдать этикет, то вам надо обратится к этому списку.
***Вы конечно можете обратится к концу данной страницы, однако я предоставлю вам переведенный мною список типов пикапов:

Код:
0 - Пикап не отображается
1 - Пикап не берется, но отображается
2 - Пикап берется, исчезает и появляется через некоторое время
3 - Пикап берется, исчезает и появлется после смерти игрока
4 - Удаляется после некоторого времени после создания. (Может быть использовано для дропа оружия с игроков?)
5 - То же самое что и тип 4
8 - Пикап берется, однако не вызывается паблик OnPlayerPickUpPickup, удаляется автоматически(?!)
11 - Пикап взрывается через некоторое время после создания (бомбы?)
12 - Тоже самое что и тип 12
13 - Медленно опускается к земле(?!)
14 - Подберается, но только если игрок сидит в машине
15 - Тоже самое, что и тип 3
19 - Подберается, но не имеет эффекта (информационные иконки?) (?!)
22 - Тоже самое, что и тип 3
23 - Подберается, но не исчезает

?! - этот символ означает, что я не до конца понял смысл предложения, поэтому перевел буквально. Буду благодарен за ваши дополнения к этим пунктам.
Как проверить что игрок подобрал пикап?

Для этого существует специальный паблик - OnPlayerPickUpPickup. Он выполняется когда игрок встает на пикап и если тип пикапа позволяет ему быть подобранным. У паблика всего два аргумента: playerid и pickupid. Вот как должен выглядеть паблик:

PHP:
public OnPlayerPickUpPickup(playerid, pickupid)
{
//тело паблика (если имеется)
return 1;
}
Всего в паблике, как уже говорилось, два аргумента: playerid и pickupid, соответственно: ид игрока подобравшего пикап и ид подобранного пикапа, что позволяет сделать такую проверку:

PHP:
if(pickupid == 0) SendClientMessage(playerid,0xFFFFFFAA,"Вы подобрали самый первый пикап в моде!");
Тоесть, если игрок подберает пикап с ид равным нулю, высвечивается сообщение: Вы подобрали самый первый пикап в моде!.

Однако, считать каждый пикап цифрами не очень удобно. Вы наверное помните, что возвращает CreatePickup? А возвращает она ид созданного пикапа, что позволяет использовать переменные для удобства.

PHP:
new FirstPickup;

public OnGameModeInit()
{
FirstPickup = CreatePickup(1212,2,0.0,0.0,0.0,-1);
return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == FirstPickup) SendClientMessage(playerid,0xFFFFFFAA,"Вы подобрали деньги!");
return 1;
}
Я думаю тут и так все понятно.

Какие же еще есть функции для работы с пикапами?

Ну на самом деле таких функций всего одна - DestroyPickup. Она удаляет пикап, как уже говорилось раннее, созданный функцией CreatePickup. Аргумент у данной функции всего один - ид удаляемого пикапа. Думаю даже примеров приводить не нужно.

Тонкости работы с пикапами

Тонкость, опять же, всего одна. Если вы ставите модель пикапа - оружие, то при подборе такого пикапа вам будет даватся это оружие и патроны к нему. Если броню, то броня, если здоровье, то здоровье. Однако если вы поставите тип пикапа 23, то этого всего можно будет избежать.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу