PDA

Просмотр полной версии : [Include] pickfix.inc | Фикс повторного срабатывания пикапов



Edwin
26.07.2016, 16:05
Исправление повторения срабатывания пикапов



Как вы поняли, речь пойдёт о повторении срабатывания пикапа, когда игрок стоит на нём.
Ни для кого не секрет, что в САМП не предусмотрено "выхода" из пикапов. Они безжалостно срабатывают каждые две секунды, мешая игроку производить действия, например, диалоговыми окнами. Кто-то борется с этим таймерами, кто-то записывает в PVar время подбора, и прибавляет по 5/10 секунд на следующее срабатывание, кто-то мучается со 2 типом пикапов, который подбирается, а потом появляется неизвестно когда. Где-то видел даже установку таймера игроку и проверку его координат.. Всё это порядочно бесит, все пытаются найти какой-нибудь оптимальный способ для себя. Более опытные скриптеры пишут фиксы, не самые опытные обходятся простым сохранением времени в формате Unix, а малоопытные вообще не знают что делать, создают кучу вопросов в разделе вопросов "как это убрать", "помогите", "что такое", или даже вообще вынуждены платить более опытным.
Итак, с помощью этого инклуда, пикапы будут вызываться повторно только при повторном подборе.


Автор: Edwin (то бишь я)




Так же, прилагается версия +, которая имеет в себе некоторые дополнительные полезные функции для работы с пикапами


Инклуд pickfix
Коллбэки:
- OnPlayerPickupExit (playerid, pickupid) // Срабатывает при выходе игрока из пикапа
- OnPlayerDynamicPickupExit (playerid, pickupid) // Срабатывает при выходе игрока из динамического пикапа

Функций не содержит.


Инклуд pickfix+
Коллбэки:
Содержит в себе коллбэки инклуда pickfix.

Функции:
- IsValidPickup (pickupid) // Проверяет сущствование пикапа
- GetPickupPos (pickupid, &Float:x, &Float:y, &Float:z) // Получает X, Y и Z позицию пикапа
- GetDynamicPickupPos (pickupid, &Float:x, &Float:y, &Float:z) // Получает X, Y и Z позицию динамического пикапа
- GetPickupVirtualWorld (pickupid) // Получает вирт. мир пикапа. Вернёт -2, если пикапа не существует
- GetDynamicPickupVirtualWorld (pickupid) // Получает вирт. мир динамического пикапа. Вернёт -2, если пикапа не существует
- GetDynamicPickupInterior (pickupid) // Получает интерьер динамического пикапа. Вернёт -2, если пикапа не существует


Важно: инклуд реализован средствами плагина streamer от Incognito, поэтому он должен подключаться до инклуда pickfix.




Подключение и использование:
Просто подключаем инклуд рядом со всеми инклудами в моде

#include <pickfix>
или

#include <pickfix+>

и наслаждаемся правильной работой пикапов.


Замечание:
Лимит на динамические пикапы, размером в 4096 пикапов, можно изменить, обозначив макрос
#define MAX_DYNAMIC_PICKUPS (число)
до объявления инклуда в самом гейммоде;
Инклуды pickfix и pickfix+ не стоит подключать вместе, т.к. они будут конфликтовать.




Pickfix.inc (https://yadi.sk/i/gDa7beGpyjbzr)
Pastebin (http://pastebin.com/DYULPxdc)


Pickfix+.inc (https://yadi.sk/i/paRuJT8Dyfouk)
Pastebin (http://pastebin.com/qseJ3Cst)

TheMallard
27.07.2016, 08:49
пикап второго типа

Disappears after pickup, respawns after 30 seconds if the player is at a distance of at least 15 meters.
Пропадает после взятия, появляется занова через 30 секунд, если игрок на расстоянии 15 метров.

Glant
30.07.2016, 22:55
Иногда нужно, чтобы пикап не пропадал вообще

nikvlad
22.08.2016, 21:21
Useless, я лично делаю как: создаю пикап, в нем сферу, пикап служит оболочкой, а при входе в сферу выполняется мой код...

Edwin
16.11.2016, 11:25
Обновлено. Исправлено. Оптимизировано)
Достигнут максимальный эффект