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

Пытаешься получить координаты предмета при отлове события его выкладывания? Не помню точно но возможно в этот момент они еще не успевают перезаписаться и хранят старое местоположение где ты его подобрал/купил.
Можно сделать так:
  • Делать это таймером с задержкой в 0 сек
  • Ловить координаты приказа юнита
  • Использовать положение юнита а не предмета (ну смотря какие цели ты преследуешь)
`
ОЖИДАНИЕ РЕКЛАМЫ...
23
Похожие вопросы:

ответ
нашел решение
function Trig_d_Actions takes nothing returns nothing
    set udg_H = InitHashtable()
    set udg_Dest[1] = gg_dest_LTcr_0000
    call TriggerRegisterDeathEvent( gg_trg_t, udg_Dest[1] )
endfunction

//===========================================================================
function InitTrig_d takes nothing returns nothing
    set gg_trg_d = CreateTrigger(  )
    call TriggerAddAction( gg_trg_d, function Trig_d_Actions )
//Map Initialization
endfunction
function T takes nothing returns nothing
local widget w = GetTriggerDestructable()
local real x = GetWidgetX(w)
local real y = GetWidgetY(w)
local itempool ItemPool = CreateItemPool()
local item i
local unit u = LoadUnitHandle(udg_H, StringHash("System"), StringHash("UNIT"))
call ItemPoolAddItemType(ItemPool, 'phea', 60)
call ItemPoolAddItemType(ItemPool, 'pman', 40)
set i = PlaceRandomItem(ItemPool, x, y)
call DestroyItemPool(ItemPool)
call UnitAddItem(u, i)
set ItemPool = null
set i = null
set u = null
endfunction

//===========================================================================
function InitTrig_t takes nothing returns nothing
set gg_trg_t = CreateTrigger(  )
call TriggerAddAction( gg_trg_t, function T )
endfunction
function Trig_vsd_Actions takes nothing returns nothing
    call SaveUnitHandle(udg_H, StringHash("System"), StringHash("UNIT"), GetOrderedUnit())
endfunction

//===========================================================================
function InitTrig_vsd takes nothing returns nothing
    set gg_trg_vsd = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_vsd, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
    call TriggerAddAction( gg_trg_vsd, function Trig_vsd_Actions )
endfunction
таким образом Работает

21
Уже был такой вопрос. Дело в том, что когда ты покупаешь предмет, он всегда физически лежит на том месте, где появился. То есть, если ты добавил предмет в инвентарь героя, то это картинка отображается, что якобы он носит с собой. На самом деле предмет как лежат на точке, так он и остается тут.
Просто записывай координаты на место нахождения героя через переменную( или точку)
16
Пытаешься получить координаты предмета при отлове события его выкладывания? Не помню точно но возможно в этот момент они еще не успевают перезаписаться и хранят старое местоположение где ты его подобрал/купил.
Можно сделать так:
  • Делать это таймером с задержкой в 0 сек
  • Ловить координаты приказа юнита
  • Использовать положение юнита а не предмета (ну смотря какие цели ты преследуешь)
Принятый ответ
3
OVOgenez, Да, нашел в прошлых ответах, что нужно ставить задержку таймера на 0 сек. И все работает.
xgm.guru/p/wc3/Otslezhivanie-polozheniya-predmeta-v-triggerak-sh... ()
26
В момент срабатывания события выкладывания предмета он еще не успевает выпасть на землю и получить новые координаты.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.