нашёл на сайте отлов приказа, однако карту пересохранить не получается
scope Order
globals
    private constant string Sep = "    "
endglobals

function Trig_Order_Actions takes nothing returns nothing
    local string s = GetUnitName(GetTriggerUnit()) + Sep
    local string order = OrderId2String(GetIssuedOrderId())
    local string target = ""
    
    if order != null and order != "" then
        set s = s + order + " -- " + I2S(GetIssuedOrderId())
    else
        set s = s + I2S(GetIssuedOrderId())
    endif
    
    
    if GetTriggerEventId() == EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER then
        if GetOrderTargetDestructable() != null then
            set target = "target destructable -- " + GetDestructableName(GetOrderTargetDestructable())
        elseif GetOrderTargetItem() != null then
            set target = "target item -- " + GetItemName(GetOrderTargetItem())
        else
            set target = "target unit -- " + GetUnitName(GetOrderTargetUnit())
        endif
        
    elseif GetTriggerEventId() == EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER then
        set target = "target point -- (" + R2SX(GetOrderPointX()) + ", " + R2SX(GetOrderPointY()) + ")"
    endif
    
    if target != "" then
        set s = s + Sep + target
    endif
    
    call Message(10., s)
endfunction

//===========================================================================
function InitTrig_Order takes nothing returns nothing
    set gg_trg_Order = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Order, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Order, EVENT_PLAYER_UNIT_ISSUED_ORDER )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Order, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER )
    call TriggerAddAction( gg_trg_Order, function Trig_Order_Actions )
endfunction
endscope
что хочу узнать - есть ли способ по id приказа добавить способность другому юниту и отдать приказ на применение?
если кто сможет сделать карту пример, на обычный редактор 26а, буду очень признателен

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

function Trig_Order_Actions takes nothing returns nothing
    local string s = GetUnitName(GetTriggerUnit()) + udg_Sep
    local string order = OrderId2String(GetIssuedOrderId())
    local string target = ""
    
    if order != null and order != "" then
        set s = s + order + " -- " + I2S(GetIssuedOrderId())
    else
        set s = s + I2S(GetIssuedOrderId())
    endif
    
    if GetTriggerEventId() == EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER then
        if GetOrderTargetDestructable() != null then
            set target = "target destructable -- " + GetDestructableName(GetOrderTargetDestructable())
        elseif GetOrderTargetItem() != null then
            set target = "target item -- " + GetItemName(GetOrderTargetItem())
        else
            set target = "target unit -- " + GetUnitName(GetOrderTargetUnit())
        endif
        
    elseif GetTriggerEventId() == EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER then
        //set target = "target point -- (" + R2SX(GetOrderPointX()) + ", " + R2SX(GetOrderPointY()) + ")"
    endif
    
    if target != "" then
        set s = s + udg_Sep + target
    endif
    
    //call Message(10., s)
endfunction

//===========================================================================
function InitTrig_Order takes nothing returns nothing
    set gg_trg_Order = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Order, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Order, EVENT_PLAYER_UNIT_ISSUED_ORDER )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Order, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER )
    call TriggerAddAction( gg_trg_Order, function Trig_Order_Actions )
endfunction
теперь будет сохраняться
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
20
2 года назад
Отредактирован ssbbssc
0
моя мысль дошла до этого. осталось только отловить применённый приказ, чтобы я перегнал его в Integer переменную
Ну и чтобы мне с синтаксисом custom script подсказали, правильно ли я пишу
отлов типа абилки не важен - я просто буду спамить всеми видами каста поочередно (то есть на юнита, на область и без цели) - нужный сработает, другие нет

ремув локейшен с таргетом и кастером уже переписал
Загруженные файлы
1
27
2 года назад
1
function Trig_Order_Actions takes nothing returns nothing
    local string s = GetUnitName(GetTriggerUnit()) + udg_Sep
    local string order = OrderId2String(GetIssuedOrderId())
    local string target = ""
    
    if order != null and order != "" then
        set s = s + order + " -- " + I2S(GetIssuedOrderId())
    else
        set s = s + I2S(GetIssuedOrderId())
    endif
    
    if GetTriggerEventId() == EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER then
        if GetOrderTargetDestructable() != null then
            set target = "target destructable -- " + GetDestructableName(GetOrderTargetDestructable())
        elseif GetOrderTargetItem() != null then
            set target = "target item -- " + GetItemName(GetOrderTargetItem())
        else
            set target = "target unit -- " + GetUnitName(GetOrderTargetUnit())
        endif
        
    elseif GetTriggerEventId() == EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER then
        //set target = "target point -- (" + R2SX(GetOrderPointX()) + ", " + R2SX(GetOrderPointY()) + ")"
    endif
    
    if target != "" then
        set s = s + udg_Sep + target
    endif
    
    //call Message(10., s)
endfunction

//===========================================================================
function InitTrig_Order takes nothing returns nothing
    set gg_trg_Order = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Order, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Order, EVENT_PLAYER_UNIT_ISSUED_ORDER )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Order, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER )
    call TriggerAddAction( gg_trg_Order, function Trig_Order_Actions )
endfunction
теперь будет сохраняться
Принятый ответ
0
27
2 года назад
0
сейчас вникся в тему, нафиг тебе код на джассе я искренне не пойму, это на гуи в 2 строчки делается
насчёт сути
что хочу узнать - есть ли способ по id приказа добавить способность другому юниту и отдать приказ на применение?
бд делай, абилок и их приказов

globals
	integer SpellID
	string SpellOrder
	integer SpellTargetType
	
	constant integer Stomp = 1
endglobals

function init takes nothing returns nothing
	set SpellID[0] = 'A000'
	set SpellOrder[0] = "thunderbolt"
	set SpellTargetType[0] = 0 // 0 - target, 1 - no target, 2 - point
	
	set SpellID[Stomp] = 'A001'
	set SpellOrder[Stomp] = "stomp"
	set SpellTargetType[Stomp] = 1
endfunction

function myfunc takes unit u returns nothing
	local integer i = GetRandomInt( 0, 1 )
	
	call UnitAddAbility( u, SpellID[i] )
    if SpellTargetType[i] == 0 then
        call IssueTargetOrder( u, SpellOrder[i], GetNearUnitInRange( ... ) )
    elseif SpellTargetType[i] == 1 then
        call IssueImmediateOrder( u, SpellOrder[i] )
    elseif SpellTargetType[i] == 2 then
        call IssuePointOrder( u, SpellOrder[i], x, y )
    endif
endfunction
0
20
2 года назад
0
rsfghd:
бд можно сделать, но если есть возможность выдавать и кастовать по OrderId - зачем городить лишнее?
0
27
2 года назад
0
ssbbssc, может быть много абилок с одинаковым приказом
0
20
2 года назад
0
ssbbssc, может быть много абилок с одинаковым приказом
для меня это не играет роли
0
20
2 года назад
0
""
function Trig_Order_Actions takes nothing returns nothing
local string s = GetUnitName(GetTriggerUnit()) + udg_Sep
local string order = OrderId2String(GetIssuedOrderId())
local string target = ""

if order != null and order != "" then
set s = s + order + " -- " + I2S(GetIssuedOrderId())
else
set s = s + I2S(GetIssuedOrderId())
endif

if GetTriggerEventId() == EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER then
if GetOrderTargetDestructable() != null then
set target = "target destructable -- " + GetDestructableName(GetOrderTargetDestructable())
elseif GetOrderTargetItem() != null then
set target = "target item -- " + GetItemName(GetOrderTargetItem())
else
set target = "target unit -- " + GetUnitName(GetOrderTargetUnit())
endif

elseif GetTriggerEventId() == EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER then
set target = "target point -- (" + R2SX(GetOrderPointX()) + ", " + R2SX(GetOrderPointY()) + ")"
endif

if target != "" then
set s = s + udg_Sep + target
endif

call Message(10., s)
endfunction
===========================================================================
function InitTrig_Order takes nothing returns nothing
set gg_trg_Order = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Order, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Order, EVENT_PLAYER_UNIT_ISSUED_ORDER )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Order, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER )
call TriggerAddAction( gg_trg_Order, function Trig_Order_Actions )
endfunction
""
теперь будет сохраняться
не работает


вот то, до чего я дошел сейчас
очень злит, что функции ById тупо отказываются работать
есть вариант использовать нативку через кастом скрипт? native OrderId2String takes integer orderId returns string
чтобы перегнать Integer ID в order string
Загруженные файлы
Чтобы оставить комментарий, пожалуйста, войдите на сайт.