SyryusДобрый день!
В итоге получился вот такой скрипт:
preserve_heroes={"Elleshar", "Linaas", "Gillion", "Diraya", "Itil", "Ossir", "Nadaur"}
function Def( heroName )
for key, name in preserve_heroes do
if name == heroName then
local PreserveHero=1
end;
end;
if not PreserveHero then
StartCombat(heroName, "Metlirn",7,44,24,146,80,148,16,147,48,50,16,48,48,44,24)
end;
end;
Trigger( REGION_ENTER_AND_STOP_TRIGGER, "def", "Def" );
Он всех без исключения героев перехватывает...
В том, числе пробовал Ильфиной ("Itil") в регион зайти - тоже бой начинается, а в консоли сообщение: Value was NIL when getting global with name 'PreserveHero'
твоя ошибка связана с областью видимости переменной. Если ты объявляешь локальную переменную внутри некоторого блока, то она будет известна только внутри этого блока. Иначе говоря, в твоем примере переменная PreserveHero известна только в блоке
if name == heroName then
local PreserveHero=1
end;
для остальной части функции переменная не определена, что и провоцирует ошибку. Можно использовать глобальную переменную, как предложено выше, но это, в общем, плохая практика, поэтому просто стоит изменить область видимости локальной
preserve_heroes={"Elleshar", "Linaas", "Gillion", "Diraya", "Itil", "Ossir", "Nadaur"}
function Def( heroName )
local PreserveHero
for key, name in preserve_heroes do
if name == heroName then
PreserveHero=1
end;
end;
if not PreserveHero then
StartCombat(heroName, "Metlirn",7,44,24,146,80,148,16,147,48,50,16,48,48,44,24)
end;
end;
Trigger( REGION_ENTER_AND_STOP_TRIGGER, "def", "Def" );
либо, что еще проще, воспользоваться встроенной функцией contains()
preserve_heroes={"Elleshar", "Linaas", "Gillion", "Diraya", "Itil", "Ossir", "Nadaur"}
function Def( heroName )
if not contains(preserve_heroes, heroName) then
StartCombat(heroName, "Metlirn",7,44,24,146,80,148,16,147,48,50,16,48,48,44,24)
end;
end;
Trigger( REGION_ENTER_AND_STOP_TRIGGER, "def", "Def" );