Форум HeroesWorld-а - Показать сообщение отдельно - Скрипты
Тема: Скрипты
Показать сообщение отдельно
#3083
Старый 21.01.2020, 20:15
  #3083
^
JonnyP
📖
Регистрация: 01.09.2011
Сообщения: 462
Отправить сообщение для  JonnyP с помощью ICQ
Регистрация: 01.09.2011
Сообщения: 462
Отправить сообщение для  JonnyP с помощью ICQ
По умолчанию
Re: Скрипты

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 )

JonnyP вне форума
Ответить с цитированием