Я сделал, чтобы на юните, когда он берет предмет, отображалось визуально, что он взял. Например меч, щит, доспехи.
Как сделать чтобы он мог взять только одно оружие, щит и доспех?

самый простой способ сделать уровень предмета как его тип:
уровень 0 - разное (зелья, талисманы, свитки и т.д.)
уровень 1 - оружие
уровень 2 - щит
уровень 3 - пояс
уровень 4 - обувь
и т.д.
Затем, когда герой поднимает предмет, проверять на уровень предмета в каждом слоте и выбрасывать.
Выглядеть это будет как если герой с палкой поднимает меч, палка выбрасывается, меч оказывается в руках.
local integer i = 0
local item x = GetManipulatedItem()
loca integer l = GetItemLevel(x)
if ( l > 0 ) then
    loop
    exitwhen i > 6 //число слотов в инвентаре
         if ( ( GetItemLevel(UnitItemInSlotBJ(u, i)) == l) and ( UnitItemInSlotBJ(u, i) != x ) ) then
             call UnitRemoveItemSwapped( UnitItemInSlotBJ(u, i), u )
         else
         endif
    set i = i + 1
    endloop
else
endif

set i = 0
set l = 0
set x = null
`
ОЖИДАНИЕ РЕКЛАМЫ...
8
самый простой способ сделать уровень предмета как его тип:
уровень 0 - разное (зелья, талисманы, свитки и т.д.)
уровень 1 - оружие
уровень 2 - щит
уровень 3 - пояс
уровень 4 - обувь
и т.д.
Затем, когда герой поднимает предмет, проверять на уровень предмета в каждом слоте и выбрасывать.
Выглядеть это будет как если герой с палкой поднимает меч, палка выбрасывается, меч оказывается в руках.
local integer i = 0
local item x = GetManipulatedItem()
loca integer l = GetItemLevel(x)
if ( l > 0 ) then
    loop
    exitwhen i > 6 //число слотов в инвентаре
         if ( ( GetItemLevel(UnitItemInSlotBJ(u, i)) == l) and ( UnitItemInSlotBJ(u, i) != x ) ) then
             call UnitRemoveItemSwapped( UnitItemInSlotBJ(u, i), u )
         else
         endif
    set i = i + 1
    endloop
else
endif

set i = 0
set l = 0
set x = null
Принятый ответ
3 комментария удалено
6
Ещё можно сделать через здоровье предмета, для проверки есть функция GetWidgetLife.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.