Форум HeroesWorld-а - Показать сообщение отдельно - Скрипты
Тема: Скрипты
Показать сообщение отдельно
#1777
Старый 11.02.2014, 19:31
  #1777
^
MasteR
 
Аватар для MasteR
📖
Регистрация: 24.01.2013
Сообщения: 3433
Выставка наград
Регистрация: 24.01.2013
Сообщения: 3433
Выставка наград
По умолчанию
Re: Скрипты

metufonaЛюди добрые, помогите советом. Очень хочется установить сильную армию в сокровищницу гномов. Сделала объект неактивным, добавила тригер на касание с вопросом "готовы ли вы сразиться со стражей". В случае, если ответ да - должно выдаваться сообщение и происходить битва. Сообщение выдаёт, а вот битва не проиходит. Хотелось бы понять, почему. Буду благодарна за любую помощь, а то шаманить уже надоело.

	dir = GetMapDataPath()
Trigger(OBJECT_TOUCH_TRIGGER, "tres1", "tres1F");
function tres1F (heroName)
		number=GetCurrentPlayer();
		QuestionBoxForPlayers(number,dir.."Capture.txt", "captureF", "nocaptureF");
end;
function captureF (heroName)
	number=GetCurrentPlayer();
	MessageBoxForPlayers(number,dir.."gettreasure.txt");
	StartCombat (heroName, nil, 2,
CREATURE_THANE, 20,
CREATURE_WARLORD, 20, nil);
end;
function alreadyCapturedF (heroName) 
	number=GetCurrentPlayer();
	MessageBoxForPlayers(number,dir.."alreadyCaptured.txt");
end;
function nocaptureF (heroName)
	number=GetCurrentPlayer();
	MessageBoxForPlayers(number,dir.."Coward.txt");
end;
SetObjectEnabled("tres1", false);

бегло посмотрел, уже нашёл ошибку.
В функции QuestionBoxForPlayers вы задаёте функцию, которая будет вызываться при ответе "Да". Эта функция не принимает параметров, т.е.
в строке function captureF (heroName) в скобках должно быть пусто. Выход есть, например такой - до всего этого куска задать глобальную переменную, т.е. написать строчку типа hero=''.
Далее в функции, где написан QuestionBox, этой переменной присвоить имя героя таким образом: hero= heroName. И уже в функции StartCombat использовать эту переменную. Получится всё примерно так:

	dir = GetMapDataPath()
hero='';
Trigger(OBJECT_TOUCH_TRIGGER, "tres1", "tres1F");
function tres1F (heroName)
		number=GetCurrentPlayer();
                      hero=heroName;
		QuestionBoxForPlayers(number,dir.."Capture.txt", "captureF", "nocaptureF");
end;
function captureF ()
	number=GetCurrentPlayer();
	MessageBoxForPlayers(number,dir.."gettreasure.txt");
	StartCombat (hero, nil, 2,
CREATURE_THANE, 20,
CREATURE_WARLORD, 20, nil);
end;
function alreadyCapturedF (heroName) 
	number=GetCurrentPlayer();
	MessageBoxForPlayers(number,dir.."alreadyCaptured.txt");
end;
function nocaptureF ()
	number=GetCurrentPlayer();
           hero='';
	MessageBoxForPlayers(number,dir.."Coward.txt");
end;
SetObjectEnabled("tres1", nil);

позволю ещё себе заметить, что не прлохо было бы в функцию StartCombat добавить функцию, которая вызовится после сражения. Благодаря ей можно будет наградить героя, снять триггер со строения и т.п.
__________________
Кампании для Heroes V 3.1 (Трилогия):

Пробуждение зла
Нашествие из Преисподней
Смена эпох

Скачать все кампании одним архивом: Яндекс.Диск Google.Диск

You can download the set of 3 Campaigns (English version) here


Одиночные сценарии Heroes V 3.1:


Незваные гости
Красный кристалл
Синий кристалл
Закат тьмы

Мультиплеерные карты для Heroes V 3.1:

Легендарная война
Сердце вулкана
Передел мира
Кампании для Heroes V 3.1 (Трилогия):

Пробуждение зла
Нашествие из Преисподней
Смена эпох

Скачать все кампании одним архивом: Яндекс.Диск Google.Диск

You can download the set of 3 Campaigns (English version) here


Одиночные сценарии Heroes V 3.1:


Незваные гости
Красный кристалл
Синий кристалл
Закат тьмы

Мультиплеерные карты для Heroes V 3.1:

Легендарная война
Сердце вулкана
Передел мира
MasteR вне форума
Ответить с цитированием