Доброго времени суток! написал небольшую функцию на Jass которая проверяет полученные предметы.
возвращает true или false в зависимости от полученного предмета
здесь идет проверка если при вызове функции тип предмета не равен 0, это нужно чтобы исключить лишние предметы
так до 6 предметов которые соответствуют инвентарю и закрываю функцию
здесь я удаляю предмет который соответствует условиям
ну и тут я ее вызываю.
собственно вопрос, проверка предмета на наличие в инвентаре работает неправильно
собственно вопрос, проверка предмета на наличие в инвентаре работает неправильно
именно вот первый предмет который соответствует индексу удаляется в любом случае
без проверки условий.
есть мысли что делаю неправильно? или чего-то не дописываю чтобы все работало нормально?
без проверки условий.
есть мысли что делаю неправильно? или чего-то не дописываю чтобы все работало нормально?
Принятый ответ
здесь тоже описывают что это функция утечна
переделал слегка функцию
function F_GetInventoryIndex takes unit u,integer id returns integer
local integer slot = 0
local integer cnt = 0
local item ite
loop
set ite = UnitItemInSlot(u,slot)
if ( ite != null ) and ( GetItemTypeId(ite) == id ) then
set cnt = cnt + 1
endif
set slot = slot + 1
exitwhen slot >= bj_MAX_INVENTORY
endloop
set ite = null
return cnt
endfunction
ну и тут идет проверка предмета
function F_Item_Check takes nothing returns nothing
local unit u = GetManipulatingUnit()
local integer id = GetItemTypeId(GetManipulatedItem())
if (id == udg_Item_Init[2]) then
if ( F_GetInventoryIndex(u, udg_Item_Init[2]) > 0 ) then
// если предметов больше 0 и GetItemTypeId = этому предмету то что угодно делать с ним
// в качестве индекса берется переменная типа тип Предмета с массивом
else
call F_Create_Item(u, udg_Item_Init[2])
endif
endif
endfunction
конечно можно использовать и конструкцию типа такого
if ( F_GetInventoryIndex(u, udg_Item_Init[2]) == 2 ) then
call UnitRemoveItem(u, udg_Item_Init[2])
endif
чтобы добавить ограничение для предмета данного типа
но это под RPG карты больше требуется
Ух какой ужос, меньше используй ГУИ, проверить можно по TypeId берем предмет в слоте и проверяем ид, если оно нужное - то удаляем, далее следующий слот если нужно проверить всё слоты, ну а систем на сборку артефактов на сайте была уйма. Потом если юнит получает предмет - то в триггере ты можешь узнать какой предмет он получил - GetManipulatedItem() его проверяй сразу, а не ищи по слотам.
ну дальше дело условий как говорится. спасибо.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Centyrion
Отредактирован Centyrion
да я этим сейчас и занимаюсь, насчет Type Id воспользуюсь но для проверки заряда предмета
меня смущает функция
Отредактирован Centyrion
Отредактирован Centyrion