Вторник, 26.01.2021, 02:40
Logo site
  • Главная
  • Форум
  • Мы в Контакте
  • Pwn-Zone.Ru
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » SA-MP » Wiki-The-Samp » OnPlayerPickUpPickup или подробнее о пикапах
OnPlayerPickUpPickup или подробнее о пикапах
Gambit26Дата: Четверг, 13.09.2012, 21:18 | Сообщение # 1
Рядовой
Группа: Пользователь
Сообщений: 14
Награды: 0
Репутация: 0
Замечания: 0%
Что же такое пикапы?

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

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


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

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

Теперь поговорим о функциях подробнее. Первая функция возвращает 1, если пикап успешно создан , вторая же функция возвращает ID созданного пикапа и -1 если произошла ошибка в создании пикапа, а если точнее, то если превышено максимальное число созданных пикапов. Давайте разберемся в синтаксисе обоих функций:

Code
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. Вот как должен выглядеть паблик:

Code
public OnPlayerPickUpPickup(playerid, pickupid)
{
//тело паблика (если имеется)
return 1;
}

Всего в паблике, как уже говорилось, два аргумента: playerid и pickupid, соответственно: ид игрока подобравшего пикап и ид подобранного пикапа, что позволяет сделать такую проверку:

Code
if(pickupid == 0) SendClientMessage(playerid,0xFFFFFFAA,"Вы подобрали самый первый пикап в моде!");

Тоесть, если игрок подберает пикап с ид равным нулю, высвечивается сообщение: Вы подобрали самый первый пикап в моде!.

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

Code
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, то этого всего можно будет избежать.

Урок написан by REALman
 
Форум » SA-MP » Wiki-The-Samp » OnPlayerPickUpPickup или подробнее о пикапах
  • Страница 1 из 1
  • 1
Поиск:

Лучшая рип студия!

Проследить за всеми новостями мы не можем, так как новости берутся из открытых источников. Если вы считаете, что новость нарушает ваши права на авторство или дизайн, то обратитесь к администрации данного ресурса. | Хостинг от uCoz