Battle

Материал из wiki.appsalutecreator.com
Перейти к: навигация, поиск

Battle - встроенный объект редактора, синхронный бой с ботом, который реализует механику игры «камень-ножницы-бумага».

Основные параметры

Кроме базовых параметров объекта, имеет ряд специализированных групп параметров:

Настройки боя:

  • положений меча и щита (positions) - положений меча и щита. Формирует абстрактную таблицу с двумя колонками: игрок/соперник. Количество строк отображает параметр positions.
  • время хода ms (turn_t) - время хода ms.
  • вероятность повтора (процент) (prob_repea) - вероятность повтора положения щита и меча бота (процент). "-1" - использовать настройку бота.

Обработчики анимаций:

  • меч бота (botSword) - меч бота. Должен иметь состояния full_{номер строки} для анимации удачного удара по игроку и block_{номер строки} для анимации заблокированного игроком удара. Номера с 0.
  • щит бота" (botShield) - щит бота. Должен иметь состояния full_{номер строки} для анимации пропущенного удара от игрока и block_{номер строки} для анимации заблокированного удара от игрока. Номера с 0.

Индикаторы:

  • время на ход (таймер) (timerTime) - время на ход (таймер).
  • время на ход (проресс) (progrTime) - время на ход (прогресс).
  • номер хода (cntTurn) - номер хода.
  • остаток жизней (игрок) (cntLifePlayer) - остаток жизней игрока (каунтер).
  • остаток жизней (игрок) (прогресс) (progLifePlayer) - остаток жизней игрока (прогресс).
  • остаток жизней (враг) (cntLifeEnemy) - остаток жизней врага (каунтер).
  • остаток жизней (враг) (прогресс) (progLifeEnemy) - остаток жизней врага (прогресс).
  • прогресс уровня игрока (progrLevel) - прогресс уровня игрока.
  • иконка (игрок) (icoPlayer) - иконка игрока.
  • имя (игрок) (namePlayer) - имя игрока.
  • уровень (игрок) (levelPlayer) - уровень игрока.
  • str (игрок) (strPlayer) - сила игрока.
  • dex (игрок) (dexPlayer) - ловкость игрока.
  • int (игрок) (intPlayer) - интеллект игрока.
  • иконка (бот) (icoBot) - иконка бота.
  • имя (бот) (nameBot) - имя бота.
  • уровень (бот) (levelBot) - уровень бота.
  • str (бот) (strBot) - сила бота.
  • dex (бот) (dexBot) - ловкость бота.
  • int (бот) (intBot) - интеллект бота.
  • награда (бот) (cntBot) - каунтер награды за бота.

Начальные статы игрока:

  • str (str) – Сила.
  • dex (dex) – Ловкость.
  • int (int) – Интеллект.

Таблица выбора противника:

  • таблица (table) - таблица, куда сложим шаблоны ботов.
  • шаблон (template) – шаблон.
  • не помещать в таблицу первых (skipfirst) - число ботов, которые не будут помещаться в таблицу, но будут доступны через прямой вызов. Туториал и т.п.

Добавляемые параметры

Идеальный воин (archetype).

  • str (str) – Сила.
  • dex (dex) – Ловкость.
  • int (int) – Интеллект.

Бот (bot):

  • str (str) – Сила.
  • dex (dex) – Ловкость.
  • int (int) – Интеллект.
  • icon (icon) — Иконка, может быть полноразмерное изображение.
  • icon template (icon_template) - Иконка для шаблона таблицы.
  • name (name) – Имя (из текстовой базы).
  • вероятность лечилки (процент) (bot_health) – вероятность, что бот использует бустер лечилку (процент), min="0", max="100".
  • вероятность меча (процент) (bot_sword) - вероятность бустера меч (процент), min="0", max="100".
  • вероятность щита (процент) (bot_shield) – вероятность бустера щит (процент)
  • вероятность повтора (процент) (bot_repeat) - вероятность повтора положения щита и меча бота (процент).

Игрок выиграл (player_win):

  • объект слушателя (obj) - Объект.
  • состояние (st) – Состояние.

Игрок проиграл (enemy_win):

  • объект слушателя (obj) – Объект.
  • состояние (st) – Состояние.

Ничья (player_both):

  • объект слушателя (obj) – Объект.
  • состояние (st) – Состояние.

В случае ничьи следует сделать новый ход - передать объекту battle состояние turn. На этом дополнительном ходе исход боя решит величина урона, нанесенного на этом ходу, у кого выше, тот и победит.

Получен уровень (level_up):

  • объект слушателя (obj) – Объект.
  • состояние (st) - Состояние.

Начался ход (turn_start):

  • объект слушателя (obj) – Объект.
  • состояние (st) – Состояние.

Закончился ход (turn_end):

  • объект слушателя (obj) – Объект.
  • состояние (st) – Состояние.

Недостаточно денег для возможного проигрыша (not_enough_money):

  • объект слушателя (obj) – Объект.
  • состояние (st) – Состояние.

Бот применил бустер лечилку (not_bot_health):

  • объект слушателя (obj) – Объект.
  • состояние (st) – Состояние.

Бот применил бустер меч (not_bot_sword):

  • объект слушателя (obj) – Объект.
  • состояние (st) – Состояние.

Бот применил бустер щит (not_bot_shield):

  • объект слушателя (obj) – Объект.
  • состояние (st) – Состояние.

Свойства объекта

  • prize - временный параметр начисления награды/штрафа для объекта battle. Заполняется перед вызовом player_win или enemy_win.
  • next_level – показывает, сколько опыта нужно для получения нового уровня. Можно прочитать у объекта, соответствует индикатору прогресс уровня игрока.
  • force_coef - параметр коэффициента боевой эффективности игрока, читается из объекта battle. Зависит от соотношения силы, выносливости, интеллекта, высчитывается по формулам и отображает приближенность к идеальному бойцу (настраивается в объекте, может быть несколько идеальных типов). Считается, что force_coef напрямую влияет на урон игрока или бота.

Есть возможность читать параметр величины урона при попадании меча на щит для игрока и для бота: player_damage_a, player_damage_b, enemy_damage_a, enemy_damage_b, у объекта battle

  • damage_a - щит и меч совпали.
  • damage_b - щит и меч не совпали.

Заполняется в начале боя.

Основные настройки

Битва начинается вызовом объекту состояния start, который заполняет индикаторы на игровом поле (предварительно в param объекта следует записать номер бота из настроек объекта). Далее повторяется следующий набор состояний:

turn – фактически начинает бой и каждый новый ход (длится указанное в настройках объекта время), пока объект в этом состоянии вызовами состояний sword и shield машинист меняет логическое положение меча и щита игрока (номер положения с 0 - в param, визуализация - на стороне машиниста). При вызовах shield и sword объект по-прежнему будет оставаться в turn. Когда время истечет, объект перейдет в состояние damage, рассчитает урон и вызовет соответствующие состояния обработчикам для визуализации (см. выше). После анимации машинист вызывает объекту состояние turn для начала следующего хода. Если закончились жизни у одного/обоих бойцов, то игра вызовет соответствующий обработчик. При получении нового уровня, вызывается соответствующий обработчик, игроку начисляются 3 очка (за каждый уровень), которые можно вкладывать в параметры игрока. Число свободных очков игрока можно прочитать из free_player_points у объекта битвы состояниями:

add_str - добавить поинт str, если возможно.

add_dex - добавить поинт dex, если возможно.

add_int - добавить поинт int, если возможно.

Экономика

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

Монеты снимаются в начале боя.

Если бот победил, то ничего не происходит.

Если победил игрок, начисляется двойная награда (то, что вычли и то, что обещали).

Снимается ресурс по первому turn в бою.

Бустеры

1 бустер: состояние объекту battlebooster_health - вернуть максимальное здоровье.

2 бустер: меч - становится на той же ячейке, и в случае столкновения со щитом, 100% будет пробой и урон, будто щита там и не было. booster_sword - установить супермеч на 1 ход.

3 бустер: щит- усиливает шит, т.е. становится на ту же ячейку, где сейчас щит и гарантирует то, что не будет никакого пробоя и урона. booster_shield - установить суперщит на 1 ход.

Если столкнутся двойной меч и двойной щит, то поведение будет как при столкновении обычного щита и меча.

У бота есть вероятность применения бустера в бою. За одну игру он не может использовать два одинаковых бустера, только по одному каждого вида. Вероятности применения бустеров ботами настраиваются для каждого бота. Для бустера здоровья условие: пока здоровье бота от 100% до 30%, вероятность применения = 0. Здоровья менее 30% - вероятность, указанная в объекте для бота.

Генерация ботов в игре

1) при вызове refresh все боты в таблице кроме skipfirst перемешиваются.

2) объект пытается считать из себя desired_levels (строка) где ждет последовательность целых чисел через запятую (поле можно заполнить машинкой или скриптом).

3) объект масштабирует ботов (начиная со skipfirst + 1) по данным уровням.

Например: Пусть у нас есть боты a b c d e f, skipfirst = 1, в desired_levels строка 10, 11, 12. В таблице мы получим что-то вроде: с e d b f (случайный порядок, без а), при этом c e d (первые в новом порядке) будут отмасштабированы на 10, 11, 12 уровни.

Работа с таблицей ботов (состояния объекту battle):

  • refresh - заполнить таблицу шаблончиками ботов.
  • start_table - начать игру с ботом из таблицы (альтернатива связке start/param).

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

Статистика

Событие будет отправляться через объект статистики (нужно завести ивент). Результат боя можно взять в поле last_win объекта battle.

Сорс в экономику для начисления монет — 19.