SA-MP Forums Archive
Как лучше реализовать ? - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Как лучше реализовать ? (/showthread.php?tid=602323)



Как лучше реализовать ? - Mexanizm93 - 05.03.2016

Всем привет.
Ребят, подскажите как лучше реализовать подбор предметов инвентаря ? Я имею ввиду, например, присел и предмет подобрался, но вить его нужно ещё найти перед этим. Других вариантов кроме как гнать цикл по массиву с выброшенными объектами в голову не приходит.

Больше разве нет вариантов, кроме как гнать цикл по всем выброшенным объектам в массиве ?
Мне не нужен код, а только подскажите как лучше.
Заранее спасибо.


Re: Как лучше реализовать ? - ZiGGi - 05.03.2016

Для каждого выпавшего объекта создавать динамическую зону (плагин Streamer). Потом (при поднятии) использовать GetPlayerDynamicAreas.


Re: Как лучше реализовать ? - White_116 - 06.03.2016

Есть функция которая возвращает ид объекта на который смотрит игрок. Потом лишь достаточно проверить до него расстояние.


Re: Как лучше реализовать ? - themakar - 06.03.2016

Quote:
Originally Posted by ZiGGi
Посмотреть сообщение
Для каждого выпавшего объекта создавать динамическую зону (плагин Streamer). Потом (при поднятии) использовать GetPlayerDynamicAreas.
А если рядом несколько выброшенных объектов?


Re: Как лучше реализовать ? - ZiGGi - 06.03.2016

Quote:
Originally Posted by themakar
Посмотреть сообщение
А если рядом несколько выброшенных объектов?
Не проблема, этих функций тебе будет достаточно:
PHP код:
GetPlayerNumberDynamicAreas(playerid// узнаёт в скольких зонах стоит игрок.
GetPlayerDynamicAreas(playeridSTREAMER_TAG_AREA areas[], maxareas sizeof areas// записывает в массив areas все зоны, в которых стоит игрок
Streamer_GetDistanceToItem(Float:xFloat:yFloat:ztypeSTREAMER_ALL_TAGS id, &Float:distancedimensions 3// возвращает расстояние до объекта (любого, и зоны в том числе) 



Re: Как лучше реализовать ? - eakwarp - 06.03.2016

На самом деле, динамические зоны отнимают немногим меньше ресурсов, сколько перебор по координатам.
Если у вас не по полторы тысячи объектов, можно и обычным перебором.


Re: Как лучше реализовать ? - Mexanizm93 - 07.03.2016

Всем спасибо за ответы. Закрываю. Сделал через выделение объекта, а потом цикл гоню. Объектов всего до 1000 единиц сделал для выброски, так что думаю пойдёт.


Re: Как лучше реализовать ? - White_116 - 08.03.2016

Зачем гнать цикл если ты уже выделил объект?


Re: Как лучше реализовать ? - Mcc - 08.03.2016

Quote:
Originally Posted by Mexanizm93
Посмотреть сообщение
Всем спасибо за ответы. Закрываю. Сделал через выделение объекта, а потом цикл гоню. Объектов всего до 1000 единиц сделал для выброски, так что думаю пойдёт.
Если выборка идет через SelectMouse как подметил Вайт, то можно сравнять размер массива с максимальным количеством объектов. На выходе вровень получать все данные из выбранного слота, по IDу объекта который вернет SelectMouse.

Минус разве что в небольших затратах на память. Циклы никакие не нужны.
Под стример нужно будет подстраиваться.


Re: Как лучше реализовать ? - Mexanizm93 - 11.03.2016

Quote:
Originally Posted by White_116
Посмотреть сообщение
Зачем гнать цикл если ты уже выделил объект?
Найти в массиве строку с информацией по id выброшенного объекта. Или можно по другому ?

Quote:
Originally Posted by Mcc
Посмотреть сообщение
Если выборка идет через SelectMouse как подметил Вайт, то можно сравнять размер массива с максимальным количеством объектов. На выходе вровень получать все данные из выбранного слота, по IDу объекта который вернет SelectMouse.

Минус разве что в небольших затратах на память. Циклы никакие не нужны.
Под стример нужно будет подстраиваться.
Quote:
Originally Posted by Mcc
Посмотреть сообщение
сравнять размер массива с максимальным количеством объектов. На выходе вровень получать все данные из выбранного слота, по IDу объекта который вернет SelectMouse.
Если Вам, не сложно, не могли бы Вы накидать примерный код с этим действием ? Вот тут я просто не понял как это реализовать. Стример.