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

Принятый ответ

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

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

0
26
6 лет назад
Отредактирован Extremator
0
Нужно дополнительно ещё отлавливать потерю предмета
Допустим герой теряет маску смерти, записываешь этот предмет в переменную
... ну а дальше что-то типа ждать 0.1 сек и очистить переменную (коряво, но должно работать)
Герой получает маска смерти И этот предмет является записанным в переменную
Значит он был только что выброшен другим героем и тут же поднят этим == передача...
вообще, скорей всегда есть какой-нибудь ордер выброса предмета из слота 1-6, что собственно и нужно отлавливать, а то что я описал выше - очень корявый костыль.
. . . ПИЩА ДЛЯ РАЗМЫШЛЕНИЙ . . .
Как минимум, есть смысл искать положение предмета, т.к. если ты его выбрасываешь - его положение становится очевидным (его координаты), а если подбираешь и носишь с собой - его положение является тем самым, которое было в момент подбора (как ни странно, но всё же логично).
И вот если герой подбирает предмет, который чисто физически находится от него ОЧЕНЬ далеко, и он НЕ СМОГ бы САМ его поднять... вот тогда имеет смысла задуматься о том, как он его получил...
... в добавление к этому, можно вообще организоваться всё таким образом, что ВСЕ ПОДОБРАННЫЕ предметы автоматически выкидываются на какой-нибудь край карты (что с технической стороны не очень-то и правильно, но всё же), и перемещаются заново куда нужно при выбросе (это стандартный механизм). В при получении предмета проверять где он находится - если на краю карты = он был в инвентаре. Иначе - на земле около героя.
При этом есть ещё один нюанс - когда герой теряет предмет он всё ещё владеет этим предметом (такой ответ возвращает проверка).
Принятый ответ
0
12
6 лет назад
0
Extremator, тоже думал сначала сделать дополнительно событие "Юнит теряет предмет", но хотелось все сделать в одном "Юнит получает предмет".
Вообщем изначально столкнулся со следующей проблемой: мне нужно, чтобы при недостаточном уровне героя (идет проверка по уровню предмета), герой тут же выкидывал предмет на то место, где он его взял, а не как по дефолту предмет выкидываться в новой точке положения героя, тем самым его постоянно перемещая.
Все бы ничего, все работает, только вот когда предмет перемещается из !инвентаря одного юнита в инвентарь другого юнита!, то предмет дропается и перемещается в ту точку, где он был подобран первым владельцем.
Владельцем предмета по дефолту является "Игрок 16"
0
12
6 лет назад
0
Есть еще у кого то соображения по этому поводу?
0
23
6 лет назад
0
Astra, приказ лови сначало как он выбирает предмет и через хендл сверяй если нет то приказ стоп и оповешаем недостаток уровни...
0
12
6 лет назад
0
pro100master:
Astra, приказ лови сначало как он выбирает предмет и через хендл сверяй если нет то приказ стоп и оповешаем недостаток уровни...
Все сводится к хеш-таблице? Неужели это единственный самый простой вариант?
0
8
6 лет назад
0
Astra, А как ты организовал возвращение предмета на место?
0
23
6 лет назад
0
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
Вот и все... чтобы проверить уровень достаточно указать в РО уровень предмета и сравшиваеш через условие
0
12
6 лет назад
0
leroydraigo:
Astra, А как ты организовал возвращение предмета на место?
Записывал координаты перед поднятием.
0
8
6 лет назад
0
Astra, А сам триггер?
Чтобы оставить комментарий, пожалуйста, войдите на сайт.