FatalBlade
offline
Опыт:
7,398Активность: |
Герой ПОЛУЧАЕТ ПРИКАЗ передать предмет другому герою - какое событие это отслеживает?
Мне нужно отслеживать не саму передачу предмета одного героя другому, а сам приказ этого действия. Т.е. если герои на далёком расстояние, и я приказываю герою передать предмет из инвентаря другому герою. Как отседить сам приказ? Я пробовал EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER, но не работает.
Напоминаю, мне нужно не EVENT_PLAYER_UNIT_DROP_ITEM, потому что EVENT_PLAYER_UNIT_DROP_ITEM отслеживает саму передачу (или потерю предмета). |
19.11.2012, 14:11 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER, но не работает.
показывай код. |
19.11.2012, 14:39 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FatalBlade
offline
Опыт:
7,398Активность: |
DioD:
Что показывать то? У меня есть триггер который отслеживает приказ поднятия предмета с земли, и он работает. Там как раз событие EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER. Но он не срабатывает на приказ передачи предмета. Проверил в отдельной карте - то же самое. Видимо EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER не учитывает приказ передачи предмета. Мне нужно при приказе передачи проверить свои условия, и если условия возвращают false - остановить героя и написать что передача не возможна.
Или же второй вариант, если отследить такой приказ не возможно. При самой передачи предмета (т.е. EVENT_PLAYER_UNIT_PICKUP_ITEM), если условия возвращают false, то вернуть предмет в инвентарь героя, который пытался передать предмет. Здесь я то же без понятия как сделать, потому я не знаю как вычислить героя который передаёт предмет. GetManipulatingUnit() ведь возвращает юнтиа который получает предмет. Отредактировано FatalBlade, 19.11.2012 в 14:54. |
19.11.2012, 14:45 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
показывай как ты проверял, меня не интересует как это просто легко и понятно. |
19.11.2012, 14:49 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FatalBlade
offline
Опыт:
7,398Активность: |
Ну ладно
((код jass
function Trig_Pick_Item_Conditions takes nothing returns boolean
return GetOrderTargetItem() != null and GetOrderTargetUnit() == null and IsUnitType( GetOrderedUnit(), UNIT_TYPE_HERO ) == true endfunction function Order_HasItemOfLevel takes unit whichUnit, integer level returns boolean
local integer i = 0 loop exitwhen i > 5 if GetItemLevel(UnitItemInSlot(whichUnit,i)) == level then return true endif set i = i + 1 endloop return false endfunction function Order_HasTheSameItemAlready takes unit whichUnit, integer itt returns boolean
local integer i = 0 loop exitwhen i > 5 if GetItemTypeId(UnitItemInSlot(whichUnit,i)) == itt then return true endif set i = i + 1 endloop return false endfunction function Trig_Pick_Item_Actions takes nothing returns nothing
local integer id = GetHandleId(gg_unit_h02F_0082) local unit u = GetOrderedUnit() local item it = GetOrderTargetItem() local integer itt = GetItemTypeId(it) local integer il = GetItemLevel(it) local boolean CheckSameItem = Order_HasTheSameItemAlready( u, itt ) local boolean CheckSetParts = false local boolean CheckSetFull = false local boolean AllowItem = true local player p = GetOwningPlayer(u) local integer o = GetPlayerId(p) + 1 local sound s = CreateSoundFromLabel( "InterfaceError",false,false,false,10,10) local real x local real y local integer n = 75 if il == 3 then
set n = 73 set CheckSetFull = Order_HasItemOfLevel( u, 4 ) set AllowItem = CheckSetFull elseif il == 4 then set n = 74 set CheckSetParts = Order_HasItemOfLevel( u, 3 ) set CheckSetFull = Order_HasItemOfLevel( u, 4 ) set AllowItem = CheckSetFull and CheckSetParts endif if AllowItem == false or CheckSameItem == true then
set x = GetWidgetX(it) set y = GetWidgetY(it) call RemoveItem(it) set it = CreateItem( itt, x, y ) call AttachSoundToUnit(s, u) call SetSoundVolume(s, 127) if GetLocalPlayer() == p then call ClearTextMessages() call StartSound(s) endif call DisplayTimedTextToPlayer( p, 0, 0, 2.00, LoadStr(udg_Hash, id, n + udg_Lan[o]) ) endif call KillSoundWhenDone(s)
set it = null set s = null set p = null set u = null endfunction ===========================================================================
function InitTrig_Pick_Item takes nothing returns nothing local integer index = 0 set gg_trg_Pick_Item = CreateTrigger() loop call TriggerRegisterPlayerUnitEvent( gg_trg_Pick_Item, Player(index), EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER, null ) set index = index + 1 exitwhen index >= 10 endloop call TriggerAddCondition( gg_trg_Pick_Item, Condition( function Trig_Pick_Item_Conditions ) ) call TriggerAddAction( gg_trg_Pick_Item, function Trig_Pick_Item_Actions ) endfunction )) FatalBlade добавил: В этом триггере есть условие GetOrderTargetUnit() == null, но и без него не работает. На отдельной карте я вообще не писал никаких условий, и не работало. |
19.11.2012, 15:14 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
Если бы была отладка, то сразу бы стало видно, что действия по выкидыванию вещей не запускают данные события, ВООБЩЕ.
приказ 852001, по невыясненным причинам, он не создаёт никаких событий, даже хак с каналом не пашет, увы реализовать то что хотите просто так не выйдет.
|
19.11.2012, 17:16 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FatalBlade
offline
Опыт:
7,398Активность: |
DioD, ок спс. А что ты имеешь ввиду "хак с каналом"? |
19.11.2012, 17:46 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
карта приложена не просто так, надо после хак с каналом писать [+] замечание от NIGHTWOLF: 4.1.1 (бессмысленное сообщение)
Отредактировано NIGHTWOLF, 20.11.2012 в 13:08. |
19.11.2012, 17:47 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FatalBlade
offline
Опыт:
7,398Активность: |
DioD, чё?
Да и видел что ты с каналом сделал. Просто ты назвал это "хак" :) Чтож придётся помимо триггера с событием на приказ взятие предмета, создавать отдельный триггер с событием на само взятие предмета. |
19.11.2012, 17:51 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|