Как определить, что предмет был поднят с земли или был передан другим героем через инвентарь?

Нужно дополнительно ещё отлавливать потерю предмета
Допустим герой теряет маску смерти, записываешь этот предмет в переменную
... ну а дальше что-то типа ждать 0.1 сек и очистить переменную (коряво, но должно работать)
Герой получает маска смерти И этот предмет является записанным в переменную
Значит он был только что выброшен другим героем и тут же поднят этим == передача...
вообще, скорей всегда есть какой-нибудь ордер выброса предмета из слота 1-6, что собственно и нужно отлавливать, а то что я описал выше - очень корявый костыль.
. . . ПИЩА ДЛЯ РАЗМЫШЛЕНИЙ . . .
Как минимум, есть смысл искать положение предмета, т.к. если ты его выбрасываешь - его положение становится очевидным (его координаты), а если подбираешь и носишь с собой - его положение является тем самым, которое было в момент подбора (как ни странно, но всё же логично).
И вот если герой подбирает предмет, который чисто физически находится от него ОЧЕНЬ далеко, и он НЕ СМОГ бы САМ его поднять... вот тогда имеет смысла задуматься о том, как он его получил...
... в добавление к этому, можно вообще организоваться всё таким образом, что ВСЕ ПОДОБРАННЫЕ предметы автоматически выкидываются на какой-нибудь край карты (что с технической стороны не очень-то и правильно, но всё же), и перемещаются заново куда нужно при выбросе (это стандартный механизм). В при получении предмета проверять где он находится - если на краю карты = он был в инвентаре. Иначе - на земле около героя.
При этом есть ещё один нюанс - когда герой теряет предмет он всё ещё владеет этим предметом (такой ответ возвращает проверка).
`
ОЖИДАНИЕ РЕКЛАМЫ...
23
Похожие вопросы:

ответ
Событие - получает прдмет
Условие - прдмет который надо
Действие - Создать юнит, либо замнетить(прверащение): так же вариант, когда подбирает нужный предмет, давать скил трансформа и приказать его заюать
ответ
Таурен Тауреныч, так ты ж его мгновенно удаляешь. Зачем добавлять и сразу убирать способность? Или удаляется предмет, а не скилл?
Попробуй удалять хотя бы через 0.00 сек.
Прочитал твой второй вопрос по этой теме. Всё-таки да, дело было в мгновенном удалении.
ответ
Мб твой герой не может использовать предметы?
Я сам лично сувал эту абилку в предметы и давать героям - всё работало.
И да, событие это работает. Возможно тоже допускаешь ошибки
И да, скорее всего не "подобранный предмет", а "предмет которым манипулируют".
ответ
Что мешает записывать предмет в массив, и каждые 20 сек проверять жив ли предмет, или его забрали. Если забрали, создать в нужных координатах новый...

26
Нужно дополнительно ещё отлавливать потерю предмета
Допустим герой теряет маску смерти, записываешь этот предмет в переменную
... ну а дальше что-то типа ждать 0.1 сек и очистить переменную (коряво, но должно работать)
Герой получает маска смерти И этот предмет является записанным в переменную
Значит он был только что выброшен другим героем и тут же поднят этим == передача...
вообще, скорей всегда есть какой-нибудь ордер выброса предмета из слота 1-6, что собственно и нужно отлавливать, а то что я описал выше - очень корявый костыль.
. . . ПИЩА ДЛЯ РАЗМЫШЛЕНИЙ . . .
Как минимум, есть смысл искать положение предмета, т.к. если ты его выбрасываешь - его положение становится очевидным (его координаты), а если подбираешь и носишь с собой - его положение является тем самым, которое было в момент подбора (как ни странно, но всё же логично).
И вот если герой подбирает предмет, который чисто физически находится от него ОЧЕНЬ далеко, и он НЕ СМОГ бы САМ его поднять... вот тогда имеет смысла задуматься о том, как он его получил...
... в добавление к этому, можно вообще организоваться всё таким образом, что ВСЕ ПОДОБРАННЫЕ предметы автоматически выкидываются на какой-нибудь край карты (что с технической стороны не очень-то и правильно, но всё же), и перемещаются заново куда нужно при выбросе (это стандартный механизм). В при получении предмета проверять где он находится - если на краю карты = он был в инвентаре. Иначе - на земле около героя.
При этом есть ещё один нюанс - когда герой теряет предмет он всё ещё владеет этим предметом (такой ответ возвращает проверка).
Принятый ответ
12
Extremator, тоже думал сначала сделать дополнительно событие "Юнит теряет предмет", но хотелось все сделать в одном "Юнит получает предмет".
Вообщем изначально столкнулся со следующей проблемой: мне нужно, чтобы при недостаточном уровне героя (идет проверка по уровню предмета), герой тут же выкидывал предмет на то место, где он его взял, а не как по дефолту предмет выкидываться в новой точке положения героя, тем самым его постоянно перемещая.
Все бы ничего, все работает, только вот когда предмет перемещается из !инвентаря одного юнита в инвентарь другого юнита!, то предмет дропается и перемещается в ту точку, где он был подобран первым владельцем.
Владельцем предмета по дефолту является "Игрок 16"
12
Есть еще у кого то соображения по этому поводу?
22
Astra, приказ лови сначало как он выбирает предмет и через хендл сверяй если нет то приказ стоп и оповешаем недостаток уровни...
12
pro100master:
Astra, приказ лови сначало как он выбирает предмет и через хендл сверяй если нет то приказ стоп и оповешаем недостаток уровни...
Все сводится к хеш-таблице? Неужели это единственный самый простой вариант?
8
Astra, А как ты организовал возвращение предмета на место?
22
Astra, нет вот пример который не берет предмет если он не чужой игрок...
private function Trig_OrderToItem_Actions takes nothing returns nothing
    local unit u = GetTriggerUnit()
    local item it = GetOrderTargetItem()
    if it != null and GetItemUserData(it) !=null then
        if (GetPlayerId(GetOwningPlayer(u))+1) != GetItemUserData(it) then
            call PauseUnit(u,true)
            call IssueImmediateOrderById(u,851972)
            call PauseUnit(u,false)
            call StartSound( snd_Error )
            call DisplayTextToPlayer(GetOwningPlayer(u), 0, 0, "Это не ваш предмет." ) 
        endif
    endif
endfunction

private function init takes nothing returns nothing
    

    set ISS_trig_OrderToItem = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ( ISS_trig_OrderToItem, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
    call TriggerAddAction( ISS_trig_OrderToItem, function Trig_OrderToItem_Actions )

    
endfunction
Вот и все... чтобы проверить уровень достаточно указать в РО уровень предмета и сравшиваеш через условие
12
leroydraigo:
Astra, А как ты организовал возвращение предмета на место?
Записывал координаты перед поднятием.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.