1

» WarCraft 3 / Триггер - мгновенное завершение обучения

В общем, для начала нужно создать 4-и триггера.
Abilitie P1 и Abilitie P1Unit должны быть изначально неактивными.
Также не забываем про переменные:

  1. Переходим к триггерам, зайдите в Abilitie P1WakeUp, и заполните триггер:
У вас будет своя способность, возможно не завершение как у меня.
  1. Переходим к следующему триггеру Abilitie P1Creation, здесь уже идёт Jass:
'A00B' ID вашей способности
function Trig_Abilitie_P1Creation_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A00B' ) ) then
        return false
    endif
    return true
endfunction

function Trig_Abilitie_P1Creation_Actions takes nothing returns nothing
    set udg_p1target_unit = GetSpellTargetUnit()
    set udg_p1target_player = GetOwningPlayer(GetSpellTargetUnit())
    set udg_p1gold = GetPlayerState(udg_p1target_player, PLAYER_STATE_RESOURCE_GOLD)
    set udg_p1timber = GetPlayerState(udg_p1target_player, PLAYER_STATE_RESOURCE_LUMBER)
    set udg_p1tech = GetPlayerTechCountSimple(udg_tech, GetOwningPlayer(GetSpellTargetUnit()))

    call TriggerExecute( gg_trg_Abilitie_P1WakeUp )
    call IssueImmediateOrderById(udg_p1target_unit, 851976)
    call TriggerExecute( gg_trg_Abilitie_P1WakeUp )
    call IssueImmediateOrderById(udg_p1target_unit, 851976)
    call TriggerExecute( gg_trg_Abilitie_P1WakeUp )
    call IssueImmediateOrderById(udg_p1target_unit, 851976)
    call TriggerExecute( gg_trg_Abilitie_P1WakeUp )
    call IssueImmediateOrderById(udg_p1target_unit, 851976)
    call TriggerExecute( gg_trg_Abilitie_P1WakeUp )
    call IssueImmediateOrderById(udg_p1target_unit, 851976)
    call TriggerExecute( gg_trg_Abilitie_P1WakeUp )
    call IssueImmediateOrderById(udg_p1target_unit, 851976)
    call TriggerExecute( gg_trg_Abilitie_P1WakeUp )
    call IssueImmediateOrderById(udg_p1target_unit, 851976)

    call SetPlayerStateBJ( GetTriggerPlayer(), PLAYER_STATE_RESOURCE_GOLD, udg_p1gold )
    call SetPlayerStateBJ( GetTriggerPlayer(), PLAYER_STATE_RESOURCE_LUMBER, udg_p1timber )
endfunction

//===========================================================================
function InitTrig_Abilitie_P1Creation takes nothing returns nothing
    set gg_trg_Abilitie_P1Creation = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Abilitie_P1Creation, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_Abilitie_P1Creation, Condition( function Trig_Abilitie_P1Creation_Conditions ) )
    call TriggerAddAction( gg_trg_Abilitie_P1Creation, function Trig_Abilitie_P1Creation_Actions )
endfunction
  1. Переходим к следующему триггеру Abilitie P1:
  1. И последний триггер Abilitie P1Unit, самый лёгкий:
1

» WarCraft 3 / Триггер - мгновенное завершение обучения

В общем, немного поразмыслив с другом, вышли на Jass. Но пока не все так радужно.

Jass:
function Cast_Proc takes nothing returns nothing
    local unit u = GetSpellTargetUnit()
    local player p = GetOwningPlayer(u)
    local integer g
    local integer w

    call UnitSetConstructionProgress( u, 100 )
    call UnitSetUpgradeProgress( u, 100 )

    set g = GetPlayerState(p, PLAYER_STATE_RESOURCE_GOLD)
    set w = GetPlayerState(p, PLAYER_STATE_RESOURCE_LUMBER)
    set udg_activated_restore = true

    call IssueImmediateOrderById(u, 851976)

    call SetPlayerStateBJ( p, PLAYER_STATE_RESOURCE_GOLD, g )
    call SetPlayerStateBJ( p, PLAYER_STATE_RESOURCE_LUMBER, w )
endfunction

function Cast_Condition takes nothing returns boolean
    return GetSpellAbilityId() == udg_ability_restore
endfunction

//===========================================================================
function InitTrig_Cast takes nothing returns nothing
    set gg_trg_Cast = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ(gg_trg_Cast, EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition(gg_trg_Cast, Condition(function Cast_Condition))
    call TriggerAddAction( gg_trg_Cast, function Cast_Proc )
endfunction
function CancelOrder takes nothing returns nothing
    local unit u = GetTriggerUnit()
    local integer uid= GetTrainedUnitType()
    local integer rid= GetResearched()
    local unit su

    if uid > 0 then
        set su=CreateUnit(GetOwningPlayer(u), uid, GetWidgetX(u), GetWidgetY(u), bj_UNIT_FACING)
        call IssuePointOrderByIdLoc(su, 851986, GetUnitRallyPoint(u))
    elseif rid > 0 then
        call SetPlayerTechResearched(GetOwningPlayer(u), rid, GetPlayerTechCount(GetOwningPlayer(u), rid, true) + 1)
    endif
    set udg_activated_restore = false
endfunction

function RestokeCheck takes nothing returns boolean
    return udg_activated_restore
endfunction

//===========================================================================
function InitTrig_CancelOrder takes nothing returns nothing
    set gg_trg_CancelOrder = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ(gg_trg_CancelOrder, EVENT_PLAYER_UNIT_UPGRADE_CANCEL)
    call TriggerRegisterAnyUnitEventBJ(gg_trg_CancelOrder, EVENT_PLAYER_UNIT_RESEARCH_CANCEL)
    call TriggerRegisterAnyUnitEventBJ(gg_trg_CancelOrder, EVENT_PLAYER_UNIT_TRAIN_CANCEL)
    call TriggerAddCondition(gg_trg_CancelOrder, Condition(function RestokeCheck))
    call TriggerAddAction( gg_trg_CancelOrder, function CancelOrder )
endfunction
1

» WarCraft 3 / Триггер - мгновенное завершение обучения

Extremator, Про это я знаю, но это не то
Требуется чтобы после использования способности по зданию, то что исследует здание: "исследования / обучение юнитов" были завершены
1

» WarCraft 3 / Триггер - мгновенное завершение обучения

rsfghd, спасибо, попробую тогда ещё кое что.

Нет. Не выходит.
Как же это ещё реализовать
1

» WarCraft 3 / Триггер - копирование массово отряда

Extremator, проверил, да, это работает!
оказывается мне действительно нужен был (тип выбранного юнита)
Признателен вам сильно, благодарю!
1

» WarCraft 3 / Триггер - копирование массово отряда

Extremator, В общём, на карте Extreme AoS перед началом выбирается раса, и добавляется в "Клетку-Trainer" 4 юнита. Их можно убрать, либо добавить новых, триггеры коем образом это подчитывают.
Вот как показано здесь, добавил +2 юнита, теперь их 6
После определенного времени, игра выпускает юнитов, и каким-то образом создает в области круга 6 идентичных юнитов (по моему варианту-копирует). И вот я не понимаю, как он это реализовал.