Форум HeroesWorld-а - Показать сообщение отдельно - Скрипты
Тема: Скрипты
Показать сообщение отдельно
#1779
Старый 11.02.2014, 20:40
  #1779
^
metufona
 
Аватар для metufona
📖
Регистрация: 07.05.2011
Сообщения: 4
Выставка наград
Регистрация: 07.05.2011
Сообщения: 4
Выставка наград
По умолчанию
Re: Скрипты

Juss456бегло посмотрел, уже нашёл ошибку.
В функции 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 добавить функцию, которая вызовится после сражения. Благодаря ей можно будет наградить героя, снять триггер со строения и т.п.

Спасибо большое, теперь всё работает! Учту на будущее, что подобные функции надо писать без параметров.
В StartCombat функцию после сражения я и планировала добавить, просто делаю всё поэтапно, чтобы не запутаться.


RedHeavenHeroДа, и MessageBoxForPlayers принимает первым параметром не игрока, а его фильтр GetPlayerFilter(number). Разницы не будет видно, если игроков 1-2, но для >2 будут возникать ошибки. Желательно ещё сделать проверку, является ли игрок компом или нет.
Доступа к этому объекту будет только у одного игрока. Поэтому я лучше оставлю, как есть. Но учту на будущее, спасибо!
metufona вне форума
Ответить с цитированием