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

Сообщения от Боевые скрипты и управление боем

Пока нет оценок — будьте первым!
Аватар пользователя
9 лет назад
В общем-то, вижу целесообразным посвятить отдельную тему именно боевым скриптам (надеюсь нигде такой же темы не создано).

Почему захотел создать тему:
В файлике со скриптовыми функциями есть также описание функций, применяющихся в сражениях.
Например, я уже применял такие возможности, как различные призывы существ на поле боя, касты целевых / массовых / площадных заклинаний, движение по шкале ATB.
Но в ходе экспериментов с боевыми скриптами возникало много вопросов, на которые так и не нашлось ответа.

Для чего тема:

Лично мне хотелось бы понимать, насколько велики возможности картодела управлять боями, используя боевые скрипты. Почему в тех или иных случаях скрипт не срабатывает / не приводит к желаемому результату, и как этого результата добиться.
Также начинающие картоделы получат возможность поближе познакомиться с боевыми скриптами.

Вот лишь немногие вопросы, которые я помню и которые давно хотелось задать:

1) Можно ли с помощью боевых скриптов на время боя повышать статы существ / героев? (например, дать + 1 к скорости дружественных существ).
2) Можно ли во время боя дать какому-то существу не присущую ему абилку? (вряд ли, но мало ли...)
3) Как сделать так, чтобы при касте заклинания с помощью скрипта герой не откатывался по шкале ATB? (конечно, можно двигать героя по шкале с помощью соответствующей функции, но я не нашел функции, возвращающей ТЕКУЩЕЕ положение юнита / героя)
4) Ситуация: дружественное существо начинает свой ход и атакует вражеское. В это время герой по скрипту кастует условную магическую стрелу, и целевое существо умирает до того, как прибегает атакующий. Как избежать данной коллизии?
5) Могут ли с помощью боевого скрипта кастовать заклинания существа, которые сами по себе этого делать не в состоянии? Либо те, у которых такого заклинания нет в их книге? Боевые машины могут кастовать? :D
6) Можно ли в бою дать доп. выстрелы баллисте, палатке? Увеличить урон / силу лечения?
7) Есть ли конструкция по типу try - catch, позволяющая игнорировать возникшие ошибки во время выполнения скрипта?
Аватар пользователя
9 лет назад
MasteR
Вот лишь немногие вопросы, которые я помню и которые давно хотелось задать:

1) Можно ли с помощью боевых скриптов на время боя повышать статы существ / героев? (например, дать + 1 к скорости дружественных существ).
2) Можно ли во время боя дать какому-то существу не присущую ему абилку? (вряд ли, но мало ли...)
3) Как сделать так, чтобы при касте заклинания с помощью скрипта герой не откатывался по шкале ATB? (конечно, можно двигать героя по шкале с помощью соответствующей функции, но я не нашел функции, возвращающей ТЕКУЩЕЕ положение юнита / героя)
4) Ситуация: дружественное существо начинает свой ход и атакует вражеское. В это время герой по скрипту кастует условную магическую стрелу, и целевое существо умирает до того, как прибегает атакующий. Как избежать данной коллизии?
5) Могут ли с помощью боевого скрипта кастовать заклинания существа, которые сами по себе этого делать не в состоянии? Либо те, у которых такого заклинания нет в их книге? Боевые машины могут кастовать? :D
6) Можно ли в бою дать доп. выстрелы баллисте, палатке? Увеличить урон / силу лечения?
7) Есть ли конструкция по типу try - catch, позволяющая игнорировать возникшие ошибки во время выполнения скрипта?
1-3) Скорее всего, невозможно.
4) Можно использовать конструкцию
repeat sleep() until combatReadyPerson()
которая будет ждать пока не наступит чей-либо ход.
5) Существа могут колдовать заклинания, которые не знают, в том числе и те существа, которые не умеют колдовать вовсе. Однако маны на это заклинание должно хватать.
6) Скорее всего, нет. Но у баллисты выстрелы все равно бесконечные: после достижения 0 она продолжит стрелять, и выстрелы станут отрицательными.
7) Можно эмулировать try с помощью startThread и catch с помощью errorHook. В библиотеке lualib реализовывал функцию pcall, которая примерно это и делает.
Аватар пользователя
9 лет назад
По 1 же вроде используется какой-то глобальный скрипт, чтобы бонус скорости дать герою. Или не то?
По 3: есть умения, которые уменьшают отброс, и заклинания, у которых вообще нет отброса (заколдованная стрела не отбрасывает). Может, это как-то использовать, что-то переназначить, где-то подкрутить?
В ответ пользователю RedHeavenHero
Аватар пользователя
9 лет назад
RedHeavenHero
1-3) Скорее всего, невозможно.
Может есть какие-то варианты, как добиться похожих эффектов без модов и боевых скриптов?
Один из возможных топорных методов, как я думаю - дать соответствующий артефакт герою в начале сражение и забрать его в конце, но это наверное не сработает, если у героя слот под этот артефакт уже занят...
RedHeavenHero

4) Можно использовать конструкцию
repeat sleep() until combatReadyPerson()
которая будет ждать пока не наступит чей-либо ход.
хороший метод, спасибо
RedHeavenHero

5) Существа могут колдовать заклинания, которые не знают, в том числе и те существа, которые не умеют колдовать вовсе. Однако маны на это заклинание должно хватать.
Т.е. изначально надо дать существу побольше маны, и отнять ее после каста. Но тут, скорее всего, всплывет другая проблема - существо откатится по АТВ.
RedHeavenHero

6) Скорее всего, нет. Но у баллисты выстрелы все равно бесконечные: после достижения 0 она продолжит стрелять, и выстрелы станут отрицательными.
Тут имелся ввиду дополнительный выстрел за ход, т.е. не 2, а 3 выстрела за раз например.
RedHeavenHero

7) Можно эмулировать try с помощью startThread и catch с помощью errorHook. В библиотеке lualib реализовывал функцию pcall, которая примерно это и делает.
Надо будет попробовать. Спасибо

Добавлено через 5 минут
Еще такой вопрос:

Захотел я например с помощью боевых скриптов реализовать "откат" героя после каста на 20 % меньше (т.е. на позицию 0.2 по АТВ вместо 0). С обычным случаем все сработает нормально, но как быть, например, если у героя есть чародейство? В этом случае простое задание позиции АТВ уже не будет работать правильно, и надо вычислять все умения героя и его противника?
Аватар пользователя
9 лет назад
Один из возможных топорных методов, как я думаю - дать соответствующий артефакт герою в начале сражение и забрать его в конце, но это наверное не сработает, если у героя слот под этот артефакт уже занят...
В таком случае лучше отработают ChangeHeroStat и GiveHeroBattleBonus.
Т.е. изначально надо дать существу побольше маны, и отнять ее после каста.
Да, именно так.
Тут имелся ввиду дополнительный выстрел за ход, т.е. не 2, а 3 выстрела за раз например.
Тут опять вряд ли. Можно дать дополнительный ход.
В этом случае простое задание позиции АТВ уже не будет работать правильно, и надо вычислять все умения героя и его противника?
Да, скорее всего, придется делать так.
Аватар пользователя
9 лет назад
С удивлением для себя обнаружил, что скриптовая функция setATB() не работает. Сначала попробовал ее, чтобы поднять баллисту, потом попробовал на герое и существах. Эффект нулевой. Вызывал таким образом через консоль:

@cr = GetAttackerCreatures()
@setATB(cr[0], 1)
Аватар пользователя
9 лет назад
Она работает, только не всегда в состоянии отнять ход. Если какое-либо существо ход уже получило, то эффект setATB проявится только после завершения его хода.
В ответ пользователю RedHeavenHero
Аватар пользователя
8 лет назад
может не в тему но может кто-нибудь сказать какие параметры нужны в функции UnitCastGlobalSpell?
Аватар пользователя
8 лет назад
какие параметры нужны в функции UnitCastGlobalSpell?
имя кастующего существа или героя (у него должно быть достаточно маны) и id глобального заклинания.
7 лет назад
Пожалуйста подскажите можно ли сделать скрипт позволяющий герою накладывать бафы на баллисту

Статистика

Приветствуем новейшего участника: recijeb

Сейчас на сайте 2 пользователей 1182 гостей