Выбранный юнит.

Добавлен
Вот и я тут, но не об этом. Возник вопрос как работать с выбранными юнитами. Мне нужно выбрать юнитов по типу и принадлежащих игроку, добавить их в группу потом из этой группы выбирать по 1му юниту. Вот код.

function Trig_TT_Conditions takes nothing returns boolean
    return ( UnitHasItemOfTypeBJ(GetTriggerUnit(), 'I04H') == true ) and ( GetSpellAbilityId() == 'A01Y' )
endfunction

function Trig_TT_2 takes nothing returns nothing
    call GroupRemoveUnitSimple( GetEnumUnit(), udg_DB_Group[1] )
endfunction

function Trig_TT_1 takes nothing returns nothing
    call GroupAddUnitSimple( GetEnumUnit(), udg_DB_Group[1] )
    set udg_Integer_C[1] = 1
    loop
        exitwhen udg_Integer_C[1] > 10
        call ForGroupBJ( GetRandomSubGroup(1, udg_DB_Group[1]), function Trig_TT_2 )
        set udg_Integer_C[1] = udg_Integer_C[1] + 1
    endloop
endfunction

function Trig_TT_Actions takes nothing returns nothing
    if ( GetUnitTypeId(GetTriggerUnit()) == 'hkni' ) then
        call ForGroupBJ( GetUnitsOfPlayerAndTypeId(Player(0), 'hfoo'), function Trig_TT_1 )
    endif
endfunction

//===========================================================================
function InitTrig_TT takes nothing returns nothing
    set gg_trg_TT = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_TT, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_TT, Condition( function Trig_TT_Conditions ) )
    call TriggerAddAction( gg_trg_TT, function Trig_TT_Actions )
endfunction

Получается что любая выборка это ForGroupBJ, но на ней фун-я заканчивается и она ссылается на другую, и так далее, можно ли както это обойти в пределах 1й функции и как?

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

м, тебе надо выбирать по одному из группы?
я делал так: f - юнит gd-группа
loop
set f = FirstOfGroup(gd)
exitwhen f == null
call UnitDamageTarget(GetTriggerUnit(),f, damage, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC, null)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Undead\\AnimateDead\\AnimateDeadTarget.mdl",f,"origin"))
call GroupRemoveUnit(gd, f)
endloop
Сначала он выбирает первого юнита группы, делает с ним действия(в моем случае дамажит + эффект кладет), удаляет из группы. И как только юниты кончатся цикл брякается.
0
28
11 лет назад
0
но на ней фун-я заканчивается и она ссылается на другую, и так далее, можно ли както это обойти в пределах 1й функции и как
не особо шарю, но вроде никак.
кстати, про оптимизацию ForGroupBJ можно почитать тут xgm.ru/p/wc3/jass_optimisations_and_leaks
0
17
11 лет назад
0
оптимизация мне не нужна, мне нужен способ равный по функциональности ForGroupBJ но без лишних блоков.
1
1
11 лет назад
1
м, тебе надо выбирать по одному из группы?
я делал так: f - юнит gd-группа
loop
set f = FirstOfGroup(gd)
exitwhen f == null
call UnitDamageTarget(GetTriggerUnit(),f, damage, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC, null)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Undead\\AnimateDead\\AnimateDeadTarget.mdl",f,"origin"))
call GroupRemoveUnit(gd, f)
endloop
Сначала он выбирает первого юнита группы, делает с ним действия(в моем случае дамажит + эффект кладет), удаляет из группы. И как только юниты кончатся цикл брякается.
Принятый ответ
0
17
11 лет назад
0
Tal7o4ka, спасибо , ясно теперь как выбирать по дному, осталось понять как сравнить дистанцию между выбранными юнитами и выбрать юнита с наименьшей.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.