Gerterну предложи свой вариант, будет интересно глянуть
Оптимальнее не использовать дополнительные бесконечные циклы. Как вариант, завязать проверку на COMBAT_RESULT, OBJECT_TOUCH или NEW_DAY.
Но в целом это не особо важно для скриптов к карте.
...
Набросал код в общих чертах (3 в одном). Не проверял.
-- Имена отрядов в редакторе карт
squadList = {
"squad01", "squad02", -- ... "squad99"
}
function connect()
Trigger( NEW_DAY_TRIGGER, "onDateUpdate" )
Trigger( COMBAT_RESULTS_TRIGGER, "onCombatFinish" )
for i, squad in squadList do
setSquadDisabled( squad )
Trigger( OBJECT_TOUCH_TRIGGER, squad, "onObjectTouch" )
end
end
function setSquadDisabled( squad )
SetObjectEnabled( squad, nil )
-- SetDisabledObjectMode( squad, DISABLED_INTERACT ) -- меняет курсор
-- SetMonsterSelectionType( squad, 0 ) -- убирает юбку
end
-- Если не критично ждать следующего дня (по сюжету или задумке)
function onDateUpdate()
-- ...
check()
end
-- Здесь есть возможность дополнительно узнать имя героя,
-- кол-во существ, результат битвы и т.д.
-- Суть способа - дополнительные расширенные возможности.
function onCombatFinish( index )
-- local heroWinner = GetSavedCombatArmyHero( index, 1 )
-- local heroLooser = GetSavedCombatArmyHero( index, 0 )
check()
end
-- Здесь дополнительно придется узнавать стеки и их кол-во у обьекта,
-- или полностью завязать на скрипт исключая установки редактора.
-- Суть способа - запускать контролируемую проверку после боя.
function onObjectToucch( hero, object )
StartCombat( hero, nil, ... , "check", ... ) -- ??? Куча разных параметров, мб ошибся
end
function check()
local count = getSquadCount()
if count == length( squadList ) then
-- Убиты все отряды -> действия ...
else
-- Очевидно, что в редакторе должны быть указаны все ProgreesFile's
-- в количестве равном кол-ву отрядов в списке squadList
SetObjectiveProgress( , count )
end
end
function getSquadCount()
local count = 0
for i, squad in squadList do
if IsObjectExists( squad ) then
count = count + 1
end
end
return count
end
startThread( connect )