XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Отловить событие
Народ, что то я седня долго сижу уже в ВЕ и ни как не могу придумать, как отследить, что конкретный юнит дропнул какой-то предмет в какую-то точку. И сразу как еще заставить юнита дропнуть предмет в конкретную точку? Кустом инвентарь не предлагать.
Старый 04.03.2011, 11:50
J64_

offline
Опыт: 4,724
Активность:
Вроде ивент был unit drop item, но хз коряво работало... Мб ордеры хукать...
Старый 04.03.2011, 11:59
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
у меня хукаются все ордеры. И не происходит события с дропом предмета.
Дроп да есть такой, но он вроде срабатывает только когда айтем уже исчез из слота. А мне надо событие, когда ты выбрал предмет и далеко дропнул, он побежал. Что то типа Юнит начал выбрасывать предмет =)
Старый 04.03.2011, 12:05
Hanabishi
COOL STATUS
offline
Опыт: отключен
alexprey, это не отлавливается никак
но можно поставить дистанцию выброса предмета (как-то так в константах) на всю карту и отлавливать событие дропа
Старый 04.03.2011, 12:35
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Hanabishi, а координаты? А может как нить сделать, чтобы можно было дропать только под собой?
Старый 04.03.2011, 13:01
J64_

offline
Опыт: 4,724
Активность:
Мона по-изварщенски периодически пикать итемы по всей карте)
-> переход на кустом инвентарь...
Старый 04.03.2011, 13:01
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
AdamanTX, видимо да придется переходить. Ну просто это такой гемор...

alexprey добавил:
Hanabishi, а координаты то можно отследить =))) GetItemX(GetManipulatedItem())
О дааа... Но как то не круто дропать предмет по всей карте =) Ща попробую так сделать
Старый 04.03.2011, 13:07
Versus
Miss me?
offline
Опыт: 17,736
Активность:
Ну просто это такой гемор...
Ничего не поделаешь...
Попробуй сделать не через дроп, а через заклинание в предмете, целью которого является точка, тогда можно будет отловить цель заклинания, и потом мувить вручную куда угодно)
Старый 04.03.2011, 13:08
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Хммм. Странно, когда пытаюсь взять координаты предмета, то меня выкидывает с игры

alexprey добавил:
Вот такой вот код
Код:
function Trig_drop_Actions takes nothing returns nothing
 local item itm = GetManipulatedItem()
 local real x = GetUnitX(gg_unit_Hamg_0001) - GetItemX(itm)
 local real y = GetUnitY(gg_unit_Hamg_0001) - GetItemY(itm)
 local real d = SquareRoot(x*x+y*y)
 call BJDebugMsg(RawCode2S(GetItemTypeId(itm)))
 if itm != null then
  call BJDebugMsg(R2S(d))
  if d < 150 then
   call BJDebugMsg("drop")
  else
   call UnitAddItem(gg_unit_Hamg_0001,itm)
  endif
 endif
endfunction

//===========================================================================
function InitTrig_drop takes nothing returns nothing
    set gg_trg_drop = CreateTrigger(  )
    call TriggerRegisterUnitEvent( gg_trg_drop, gg_unit_Hamg_0001, EVENT_UNIT_DROP_ITEM )
    call TriggerAddAction( gg_trg_drop, function Trig_drop_Actions )
endfunction
Старый 04.03.2011, 13:41
Hanabishi
COOL STATUS
offline
Опыт: отключен
это происходит при попытке выяснить координаты, если предмет в инвентаре
получается в этот момент предмет ещё в инвентаре
нужно немного времени после события
Старый 04.03.2011, 13:54
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
методом тыка нашел, что вылетает на этой функции call UnitAddItem(gg_unit_Hamg_0001,itm)

alexprey добавил:
Парадокс, но чем дальше предмет от героя тем меньше расстояние Оо

alexprey добавил:
А координаты он походу возвращает старые, которые были у предмета, до того как он попал в инвентарь. Может Wait решит проблему?
Старый 04.03.2011, 13:58
Hanabishi
COOL STATUS
offline
Опыт: отключен
попробуй ждать 0.01
Hanabishi добавил:
лучше таймером
Старый 04.03.2011, 14:04
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Все подправил этот триг. Вот окончательный код, может кому пригодиться. Кст Wait в данном случае решает
Код:
function Trig_drop_Actions takes nothing returns nothing
 local item itm = GetManipulatedItem()
 local real x
 local real y 
 local real d
 call TriggerSleepAction(0.)
 set x = GetUnitX(gg_unit_Hamg_0001) - GetItemX(itm)
 set y = GetUnitY(gg_unit_Hamg_0001) - GetItemY(itm)
 set d = SquareRoot(x*x+y*y)
 if itm != null then
  if d > 150 then
   call UnitAddItem(gg_unit_Hamg_0001,itm)
  endif
 endif
endfunction

//===========================================================================
function InitTrig_drop takes nothing returns nothing
    set gg_trg_drop = CreateTrigger(  )
    call TriggerRegisterUnitEvent( gg_trg_drop, gg_unit_Hamg_0001, EVENT_UNIT_DROP_ITEM )
    call TriggerAddAction( gg_trg_drop, function Trig_drop_Actions )
endfunction


alexprey добавил:
Hanabishi, удивишься, но я ждал 0. сек
Старый 04.03.2011, 14:04
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 17:00.