Добавлен Sergant1000
Вот и я тут, но не об этом. Возник вопрос как работать с выбранными юнитами. Мне нужно выбрать юнитов по типу и принадлежащих игроку, добавить их в группу потом из этой группы выбирать по 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
Сначала он выбирает первого юнита группы, делает с ним действия(в моем случае дамажит + эффект кладет), удаляет из группы. И как только юниты кончатся цикл брякается.
я делал так: 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
Сначала он выбирает первого юнита группы, делает с ним действия(в моем случае дамажит + эффект кладет), удаляет из группы. И как только юниты кончатся цикл брякается.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
кстати, про оптимизацию ForGroupBJ можно почитать тут xgm.ru/p/wc3/jass_optimisations_and_leaks
я делал так: 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
Сначала он выбирает первого юнита группы, делает с ним действия(в моем случае дамажит + эффект кладет), удаляет из группы. И как только юниты кончатся цикл брякается.