Как лучше реализовать ? -
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(playerid, STREAMER_TAG_AREA areas[], maxareas = sizeof areas) // записывает в массив areas все зоны, в которых стоит игрок
Streamer_GetDistanceToItem(Float:x, Float:y, Float:z, type, STREAMER_ALL_TAGS id, &Float:distance, dimensions = 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.
|
Если Вам, не сложно, не могли бы Вы накидать примерный код с этим действием ? Вот тут я просто не понял как это реализовать. Стример.