Перейти к содержанию

Сообщения от Текущие вопросы и ответы по редактору карт

Аватар пользователя
#4489
Trigger(PLAYER_REMOVE_HERO_TRIGGER, PLAYER_2, 'Player2LoseHero');

function Player2LoseHero(looser, winner)
if(looser == 'имя_героя') then
...
end
end
Возможно нужны дополнительные проверки, если целевой герой может быть потерян иным способом, чем убит игроком.
Аватар пользователя
#4491
До прописки второго триггера все катсцены и первый триггер - работали.
EnableHeroAI('Brem', nil);
EnableHeroAI('Straker', nil);
StartAdvMapDialog(0);
function rewF()
StartAdvMapDialog(1);
end;
Trigger(REGION_ENTER_AND_STOP_TRIGGER, "rew", "rewF" );

После добавления триггера про смерть героя и последующие после этого действия - все катсцены и триггеры перестали работать.

EnableHeroAI('Brem', nil);
EnableHeroAI('Straker', nil);
StartAdvMapDialog(0);
function rewF()
StartAdvMapDialog(1);
end;
Trigger(REGION_ENTER_AND_STOP_TRIGGER, "rew", "rewF" );
Trigger(PLAYER_REMOVE_HERO_TRIGGER, PLAYER_2, 'Player2LoseHero');
function Player2LoseHero(looser, winner)
if(looser == 'Brem') then
StartAdvMapDialog(2);
StartAdvMapDialog(3);
CreateMonster(134,inferno,134,90,10,0,mood= MONSTER_MOOD_AGGRESSIVE,courage= MONSTER_COURAGE_CAN_FLEE_JOIN,rotation= 0 );
StartAdvMapDialog(4);
StartAdvMapDialog(5);
StartAdvMapDialog(6);
StartAdvMapDialog(7);
StartAdvMapDialog(8);
end;
end;
Аватар пользователя
#4492
Пошлость, с ходу могу только сказать, что CreateMonster вызывается неправильно, lua такое не понимает:
mood= MONSTER_MOOD_AGGRESSIVE,courage= MONSTER_COURAGE_CAN_FLEE_JOIN,rotation= 0
Вероятно парсер на этой строке и слетел.

Второе, если скрипт крашится, хорошим тоном всё таки является заглянуть в консоль и привести здесь текст ошибки (да он и вам часто может помочь понять проблему самостоятельно).

Третье, если вы нацелились на более-менее скриптовую карту (>200 строчек кода), рекомендую другой подход к структуре кода. Сейчас все ваши инициализирующие функции расположены на верхнем уровне в разнобой, в результате чего достаточно одной мелкой ошибки в коде, чтобы интерпретатор вылетел, скрипты полностью перестали работать, и главное непонятно где искать проблему.
Рекомендую всё, что выполняется непосредственно при старте карты, поместить в отдельную функцию, дополнив её периодически printa'ми:
function InitMap()
print('init start');

EnableHeroAI('Brem', nil);
EnableHeroAI('Straker', nil);
print('init heroes OK');

Trigger(REGION_ENTER_AND_STOP_TRIGGER, "rew", "rewF" );
Trigger(PLAYER_REMOVE_HERO_TRIGGER, PLAYER_2, 'Player2LoseHero');
print('init triggers OK');

print('init finish');
end

InitMap();
Этот код помещается в самый конец скрипта и при запуске карты первым делом заглядываем в консоль.
Если в коде была ошибка синтаксиса, которую lua-интерпретатор не переварил, консоль будет пустая, до функции InitMap() дело просто не дойдёт.
Если всё хорошо, консоль будет заканчиваться строчкой 'init finish'.
Если мы попытаемся что-то инициализировать неправильно, к примеру ошибемся с названием региона "rew", то в консоли будет:
init start
init heroes OK
какая-нибудь ошибка красным шрифтом
и по этому логу сразу ясно в каких строчках искать ошибку.
Аватар пользователя
#4493
Я убрал спавн монстра и ещё одну катсцену. Теперь катсцены работают до убийства героя, после убийства - завершение игры.

EnableHeroAI('Brem', nil);
EnableHeroAI('Straker', nil);
StartAdvMapDialog(0);
function rewF()
StartAdvMapDialog(1);
end;
Trigger(REGION_ENTER_AND_STOP_TRIGGER, "rew", "rewF" );
Trigger(PLAYER_REMOVE_HERO_TRIGGER, PLAYER_2, 'Player2LoseHero');
function Player2LoseHero(looser, winner)
if(looser == 'Brem') then
StartAdvMapDialog(2);
StartAdvMapDialog(3);
StartAdvMapDialog(4);
StartAdvMapDialog(5);
StartAdvMapDialog(6);
StartAdvMapDialog(7);
end;
end;
Аватар пользователя
#4494
Теперь катсцены работают до убийства героя, после убийства - завершение игры.
скрипты то тут точно не при чём, они самопроизвольно игру не завершают. Надо смотреть условия победы.
Аватар пользователя
#4495
У меня два задания для игрока.
1) уничтожить героя
2) игрок должен выжить.
В качестве награды ничего нет.
Аватар пользователя
#4496
Получается что при убийстве героя оба задания в true, всё выполнено, сценарий автоматически завершается. Непонятно что хочется, и что получается. Если цель: игрок убивает героя, показываются финальные ролики, сценарий завершается, то это реализуется иначе: вручную отлавливаем событие убийста героя, показываем ролики, вызываем функцию Win(). Квест на убийство героя при этом трансформируем во что-нибудь другое (описание можно оставить то же, но тип задания сменить на manual).
Аватар пользователя
#4497
Спасибо, всё заработало. :)
И ещё вопросик. В редакторе подземелья можно как-нибудь светлее сделать, а то ставлю объект и вижу его, только когда выделил. Попытался на форуме поискать что-то внятное, но ничего толком не нашёл.
Аватар пользователя
#4498
В редакторе подземелья можно как-нибудь светлее сделать
можно либо временно тип освещения сменить на дневное, либо поставить на какой-нибудь объект источник освещения и задать ему радиус 200-300, будет очень ярко всё освещать (можно несколько таких источников света бахнуть в разных местах, перед релизом их просто удалить).
Аватар пользователя
#4499
А какой точнее параметр в MapProperties ставить?
Аватар пользователя
#4500
Что-то со словом light, там нужно кликнуть добавить, выставить цвет и смещение относительно объекта (z нужно ставить больше нуля, x и y оставить нулями). Если взять какое деревце, то у него этих свойств всего ничего, легко найти нужное.
Аватар пользователя
#4501
Спасибо, теперь хоть что-то вижу)
Аватар пользователя
#4502
Имеем скриптовую команду, которая заставляет Аларика один раз отыграть анимацию каста. Но в игре ничего не происходит, данная команда не срабатывает, но скрипт играет дальше без проблем. Ошибок в консоли нет, а сама команда с нейтралами прекрасно работает

Вопрос: можно скриптом заставить героя отыграть анимацию?
Карты для героев 5

"Плата за любовь"
"Путь некроманта"
"Темные грани"
"Рок Гримхейма"
Аватар пользователя
#4503
AstralLein, у Аларика в AnimSet прописаны только idle00 и move. Если они проигрываются нормально (скорее всего так и есть), то значит стандартная функция анимации работает и для героев. Чтобы он ещё и кастовал на карте, наверное надо создать свою копию Аларика (или менять прямо существующего) и изменить ему список анимаций. Я лично такое никогда не делал, ничего не подскажу.
Аватар пользователя
#4504
Сейчас гляну анимы, благое дело специалист в этом деле.

Добавлено через 8 минут
Неа все анимации есть. Полней комплект плюс три вида разговора и много еще чего. Кстати, оцените сам скрипт. Работать работает, но оценка не помешает.



Добавлено через 2 минуты
Тут есть добавление к заданию заметки. Как сделать так что бы появление обновления квеста стало видно игроку без знания методики "зайти в задания и посмотреть что там изменилось". Команда SetObjectiveProgress то на глобальную карту не влияет.
Карты для героев 5

"Плата за любовь"
"Путь некроманта"
"Темные грани"
"Рок Гримхейма"