PDA

Просмотр полной версии : [Plugin] ePickup | Процессор пикапов



Edwin
08.01.2018, 22:39
Плагин-процессор пикапов.
Расширяет стандартные методы использования пикапов, упрощая работу с ними путём изменения структуры хранения данных.
Так же, данный модуль исключает повтор подбора пикапа если игрок стоит на нём.
Новый функционал включает в себя:







Функции:






GetPickupPos (pickupid, &Float:x, &Float:y, &Float:z) // Косвенно возвращает X, Y и Z позицию пикапа
SetPickupPos (pickupid, Float:p_pX, Float:p_pY, Float:p_pZ); // Устанавливает новую позицию пикапу
GetPickupVirtualWorld (pickupid) // Возвращает вирт. мир пикапа (-2 если пикапа не существует)
GetPickupType (pickupid) // Возвращает тип пикапа (-1 если пикап не существует)
IsValidPickup (pickupid) // Проверяет существование пикапа (true/false)
GetPlayerPickup(playerid) // Возвращает ID пикапа, на котором стоит игрок (-1 если не стоит на пикапе)
CountPickups () // Возвращает количество активных пикапов






Коллбэки:






OnPlayerPickupExit (playerid, pickupid) // Срабатывает при выходе игрока из пикапа






Так же, добавлены новые типы пикапов:






PICKUP_TYPE_VEHRESPAWN // срабатывает только в транспорте, не исчезает
PICKUP_TYPE_VEHONFOOT // срабатывает как в транспорте, так и пешком






Актуальная версия: 0.74 (Beta)
Автор: Edwin





Скачать: ePickup (https://yadi.sk/d/RSFtiTsd3RGz8H)





P.S.: Данная версия находится на стадии Beta. Если Вы нашли недочёты, баги, либо же у Вас есть предложения по расширению функционала, пожалуйста, оставьте их в виде комментария прямо здесь.
Если плагин найдёт применение среди достаточного количества скриптеров, будет добавлена совместимость с плагином streamer от инкогнито

DeimoS
08.01.2018, 23:03
Лучше создать макрос, типа

#define INVALID_PICKUP_ID -2
и уже его значение возвращать во всех функциях в случаях, когда пикап не существует. Будет гораздо проще, чем запоминать где -1, а где -2

Edwin
08.01.2018, 23:09
Он там есть, только со значением (4096)
Но можно вернуть и его, не задумался об этом

Geebrox
09.01.2018, 11:50
А что насчет производительности? Просто весь этот функционал можно создать и перехватывая нативные функции, может в производительности есть разница?

Edwin
09.01.2018, 16:58
А разве эта реализация не перехватывает нативные функции?

Daniel_Cortez
09.01.2018, 17:21
А что насчет производительности? Просто весь этот функционал можно создать и перехватывая нативные функции, может в производительности есть разница?

А разве эта реализация не перехватывает нативные функции?
Это у вас нужно спросить. Вы ж не выкладывали исходники.

Edwin
09.01.2018, 18:09
Так ведь в инклуде все перехваты)

Daniel_Cortez
09.01.2018, 18:20
Так ведь в инклуде все перехваты)
Понятно. Просто давно уже есть способ перехватывать нативные функции из кода на C/C++.

Edwin
09.01.2018, 18:23
Invoke?
А в чём разница?)
То, что перехвачено, в любом случае подлежит перехвату по скриптовой части

Daniel_Cortez
09.01.2018, 19:00
Invoke?
Не только. Можно ещё воспользоваться слегка модифицированным SDK (https://github.com/maddinat0r/samp-plugin-sdk), в котором есть функция amx_Redirect. Либо я могу добавить что-то подобное в свой шаблон для плагинов (http://pro-pawn.ru/showthread.php?15317).


А в чём разница?
То, что перехвачено, в любом случае подлежит перехвату по скриптовой части
В производительности. Зачем тратить время на выполнение скриптового кода, когда то же самое можно сделать нативно? Да и сам перехват из плагина, ИМХО, даже проще, чем в Pawn (вызов одной функции amx_Redirect против манипуляции с несколькими #define, #undef и #if defined, в которых больше вероятность допустить опечатку).

DeimoS
10.01.2018, 10:50
Не совсем понятно для чего держать исходники закрытыми.
Стесняешься кода? Наоборот можешь выслушать мнение насчёт того, как можно сделать лучше.
Своруют исходники? Не думаю, что это кому-либо нужно.
Но, при этом, люди смогут помогать тебе в развитии плагина, вместе с тобой анализируя слабые места и дорабатывая их

Edwin
10.01.2018, 12:05
Не только. Можно ещё воспользоваться слегка модифицированным SDK (https://github.com/maddinat0r/samp-plugin-sdk), в котором есть функция amx_Redirect. Либо я могу добавить что-то подобное в свой шаблон для плагинов (http://pro-pawn.ru/showthread.php?15317).


В производительности. Зачем тратить время на выполнение скриптового кода, когда то же самое можно сделать нативно? Да и сам перехват из плагина, ИМХО, даже проще, чем в Pawn (вызов одной функции amx_Redirect против манипуляции с несколькими #define, #undef и #if defined, в которых больше вероятность допустить опечатку).

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

Всё же, исходники я пока подержу у себя, хотя бы до тех пор, пока не выйдет полная версия

Daniel_Cortez
10.01.2018, 21:43
Очень полезная информация, и очень полезный шаблон. Думаю, если добавить в него перехват нативок, - будет только лучше
Сделал. (http://pro-pawn.ru/showthread.php?15317&p=89078&viewfull=1#post89078)



Однако, у меня так и не вышло собрать какой-то хоть примерный полноценный таймер внутри плагина для запуска одной проверки
Если есть какие-то затруднения, не стесняйтесь задавать вопросы здесь: http://pro-pawn.ru/forumdisplay.php?244



Всё же, исходники я пока подержу у себя, хотя бы до тех пор, пока не выйдет полная версия
И что же мешает выложить их до выхода "полной версии"? По идее, чем раньше вы опубликуете исходники, тем раньше другие смогут рассмотреть их и указать вам на ошибки. Впрочем, ваше право.

TheMallard
11.01.2018, 10:51
Не нужно, ведь есть динамические зоны стримера.

Geebrox
11.01.2018, 11:46
Не нужно, ведь есть динамические зоны стримера.

Пикапы и динамические зоны это СОВСЕМ разные вещи. Для пикапов есть свои предназначении как и для динамических зон.

vovandolg
11.01.2018, 16:52
Всё же, исходники я пока подержу у себя, хотя бы до тех пор, пока не выйдет полная версия

Если ты напишешь это код полностью и доведя до стабильности тебя не покажут в телевизоре или на главной странице ютуба и т.п.
И воровать код если будут заметно станет по алгоритму,
а вот пока ты его не выкладываешь, обдумываешь там что то,
кто то вроде тебя или умнее щас выложит похожий код с теми же алгоритма или круче
получится что ты своровал:rofl:

github для чего придумали то?))
Да просто на крайняк на нормальном стабильном форуме который годами работает,
там по дате видно будет кто первый сделал, но лучше конечно же на github...

Edwin
11.01.2018, 18:12
Граци, маэстро Кортез, как всегда, наивысшие похвалы)

Я, конечно, надеюсь, что никого не обидел, но, всё же, пока исходники останутся при мне. По своим причинам
Даю слово, что ничего способного навредить вам или вашим компьютерам там нету