Форум HeroesWorld-а - Показать сообщение отдельно - Скрипты для начинающих
Показать сообщение отдельно
#241
Старый 31.05.2021, 09:45
  #241
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 825
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 825
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты для начинающих

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" );

 

__________________
Нет войне.
Нет войне.
Gerter вне форума
Ответить с цитированием