Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога
Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Впервые здесь? Я Роха — провести быструю экскурсию?
хм. жаль. значит, дело в другом...
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);
Люди добрые, помогите советом. Очень хочется установить сильную армию в сокровищницу гномов. Сделала объект неактивным, добавила тригер на касание с вопросом "готовы ли вы сразиться со стражей". В случае, если ответ да - должно выдаваться сообщение и происходить битва. Сообщение выдаёт, а вот битва не проиходит. Хотелось бы понять, почему. Буду благодарна за любую помощь, а то шаманить уже надоело.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);
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);бегло посмотрел, уже нашёл ошибку.
В функции 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 добавить функцию, которая вызовится после сражения. Благодаря ей можно будет наградить героя, снять триггер со строения и т.п.
Да, и MessageBoxForPlayers принимает первым параметром не игрока, а его фильтр GetPlayerFilter(number). Разницы не будет видно, если игроков 1-2, но для >2 будут возникать ошибки. Желательно ещё сделать проверку, является ли игрок компом или нет.
Доступа к этому объекту будет только у одного игрока. Поэтому я лучше оставлю, как есть. Но учту на будущее, спасибо!
Тогда почему бы не использовать обычный MessageBox?
А функция IsHeroAlive проверяет наличие героя в гарнизоне города?
Не совсем понял. Функция выдает 1, если герой жив в т.ч. если он в гарнизоне города, иначе nil.