Реализовать ботов в игре-стрелялке на Unity+PUN

Кратко: Нужно реализовать ботов и интегрировать движок управления ботами https://assetstore.unity.com/packages/tools/behavior-ai/invector-fsm-ai-template-123618 в многопользовательскую игру-стрелялку (не обязательно именно этот движок)
Бюджет не окончательный, может быть увеличен.

Подробно:
Есть уже реализованная многопользовательская игра стрелялка, по сути team deathmatch. Кто-то запускает игру, остальные к нему присоединяются, игроки делятся на команды "красных" и "синих", у каждой команды есть своя база, на которых время от времени воссоздаётся военная техника (танки, БТР-ы, вертолёты) которой можно пользоваться.
Игроки просто сражаются друг с другом команда на команду, пока не выйдет время уровня.
В игре не хватает ботов, и для их добавления был приобретён готовый модуль
Invector FSM AI Template, позволяющий задавать "логику" поведения ботов.
Использовать прямо его не обязательно, если предлагаемую логику можно сделать самостоятельно, либо с помощью других модулей - можно и так.

Особенности реализации: игра изначально написана на базе готового шаблона многопользовательского шутера на C# с использованием Photon Unity Networking (то есть НЕ Photon Phusion). Далее, какой-то сумрачный гений прикрутил к игре функционал работы со Steam и VK.com, и возможность покупать внутри-игровое золото во Вконтакте, а за него уже приобретать различное оружие и броню в игре.
В результате, код игры делится на 2 части: большая часть относительно логичного кода, который присутствовал в исходном шаблоне + некоторое количество адского говнокода написанного уже "сумрачным гением".

Далее, игра уже попала ко мне, и какое-то количество доработок в ней сделано мной + отрефакторен написанный на PHP сервер игры, хранящий информацию о покупках и внутриигровых достижениях.
Сам я программист, но на C# пишу медленно (я больше по C++, Php, Python, Javascript), а в играх и в Unity разбираюсь гораздо медленнее чем в веб-серверах.
В связи с чем нужна помощь разработчика на Unity + Photon.

Что конкретно требуется:
1) Сначала дам посмотреть исходный код в GitHub, чтобы было понятно как обстоят дела, и стоит ли вообще за это браться. Уровень кода может вам не понравиться.
2) Далее, если код вас устроит и договоримся начинать работу, предлагаю выполнять задачи поэтапно с оплатой каждой из них по рабочему времени (по затраченным часам). Можно разбить задачи на отдельные части, если предложенные окажутся слишком крупными.
3) Нужно будет создать в игре функционал ботов, со следующими свойствами и особенностями:
  • Должны существовать консольные команды `/addbot <сторона> <nickname>` и `/removebot <nickname>`, добавляющие и удаляющие ботов (в игре есть реализованный механизм консольных команд, добавлять их не сложно)
  • При создании многопользовательской игры можно будет указать:
    • Нужно ли добавлять в игру ботов
      • Если да, то:
        • Сколько добавлять
        • Нужно ли уменьшать количество ботов при входе в игру новых людей
        • Каков должен быть уровень ботов (по 5-бальной шкале сложности, например "Новичок", "Опытный", "Ветеран", "Мастер", "Легенда", с возможностью где-то менять эти названия)
  • Во время игры боты должны появляться в соответствии с требуемым количеством, и им должны даваться человеко-подобные имена, случайным образом берущиеся из заготовленного списка. Присоединяться они должны к обоим командам для достижения требуемого количества.
  • Боты должны управляться модулем искусственного интеллекта https://assetstore.unity.com/packages/tools/behavi... (опять же, не обязательно, можно использовать что-то другое)
  • У всех ботов должно быть стандартное оружие и броня, никакой кастомизации не требуется.
  • В зависимости от сложности ботов ("Новичок", "Опытный", и т.д.) меняются следующие параметры:
    • Дальность видимости ботов
    • Кучность стрельбы (насколько точно бот стреляет в игрока)
    • Дальность видимости при стрельбе - насколько далеко бот может заметить персонажа если тот попал в бота
  • Поведение ботов должно быть полностью синхронизировано между игроками - то есть все игроки должны видеть в движениях и действиях ботов ровно одно и тоже, в том числе в стрельбе, и в том числе в стрельбе projectile'ами (например, ракетами)
  • Боты должны автоматически "менять владельца" при выходе мастера игры.
  • Бот должен отображаться в таблице очков, где можно увидеть фраги текущей игры
  • За убийство ботов, как и за убийство людей начисляется опыт
  • Поведение ботов должно подчиняться следующей логике (она задаётся через модуль искусственного интеллекта, либо нужно будет написать самостоятельно):
    • После спавна бот выбирает одно из доступных ему idle-поведений:
      • Патрулировать свою базу
      • Идти патрулировать вражескую базу в поисках приключений
      • Просто слоняться по району между своей и вражеской базой в поисках приключений
    • В случае, если бот заметил врага (он попал в его зону обнаружения), либо враг выстрелил в него и попал (и находится в зоне обнаружения при стрельбе)
      • Бот переходит в режим follow (преследование)
    • В режиме follow бот бежит к герою в течении заданного времени, если за это время не удалось добежать на расстояние стрельбы (заданное в настройках), и не получил новых вводных, например в него ни разу не попали - перестаёт преследовать, переходит в idle
      • Если в режиме follow видит другого игрока в зоне обнаружения - может переключиться на него.
      • Если бот на расстоянии стрельбы, но игрока не видит из-за препятствия, выбирает ближайшую удобную точку, с которой есть прямая видимость и идёт к ней.
    • Сблизившись на расстояние стрельбы, переходит в режим fight, перемещается в случайных направлениях, стреляя по пользователю, при этом, это не должна быть дерготня, а небольшие перемещения в случайных направлениях, как у обычного пользователя, пытающегося не попасть под огонь.
      • Если враг ходит пешком - стрелять из автомата калашникова
      • Если враг едет на технике - стрелять из РПГ-7
    • В случае, если враг убит - переходит в режим idle
    • Если враг увеличил дистанцию дальше дистанции стрельбы или его не видно - опять в режим follow
    • Если при создании игры был установлен флаг "балансировать ботов при входе людей" и в игру зашёл-вышел игрок - спустя минуту (настраивается) после входа/выхода нужно удалить/создать бота (минута нужна для того, чтобы нельзя было быстро входя и выходя из игры "пересоздать" всех ботов)

Разбивка вышеописанного функционала на задачи:

  • Задача 1: Реализовать саму возможность существования бота и консольные команды /addbot и /removebot.
    • По команде, например `/addbot blue vasya_pupkin` на сторону синих должен добавляться бот с никнеймом vasya_pupkin, он должен появляться в случайном месте на карте (можно задать его конкретными координатами +/- случайные числа, которые позволят создать несколько ботов таким образом)
    • Этот бот должен быть представлен персонажем аналогичным игроку в стандартной броне, с автоматом Калашникова и ракетницей РПГ.
    • Бот должен отображаться в таблице очков где отображаются игроки и фраги
    • Бота должны видеть все игроки
    • При выходе игрока, который создал ботов, они должны переходить по наследству другому игроку
    • По команде `/removebot vasya_pupkin` бот должен исчезать так как будто его и не было
    • Бота должен иметь возможность удалить с помощью `/removebot` любой пользователь а не только тот, кто его создал
    • Больше ничего, никакой логики не требуется.
    • Сами по себе команды `/addbot` и `/removebot` должны работать только в отладочном режиме (GameConfig::DebugMode)
    • Если удастся заложить в ботов возможность к будущему расширению - чтобы в дальнейших реализациях можно было добавлять в них новые состояния (например, возможность для ботов иметь различное оружие) - это было бы очень здорово.
  • Задача 2: Реализовать систему жизней и стрельбы
    • Бот будучи создан с помощью `/addbot` должен сразу начинать стрелять перед собой. Просто делать один выстрел в секунду.
    • Пользователи, попавшие под эту стрельбу должны получать урон.
    • Если пользователь, в которого попал бот, получил достаточно урона чтобы погибнуть, счёт бота в таблице очков должен возрасти на 1.
    • Пользователи, стреляющие по боту, должны наносить ему урон. Причем не только тот, кто этого бота создал, но вообще все пользователи.
    • Если у бота кончаются жизни - он должен умереть, и через некоторое время заспавниться снова, выбрав место для спавна так же как оно выбиралось в задаче 1.
    • Игрок, убивший бота, должен получать опыт, аналогично тому, как он его получает при убийстве другого игрока, кроме того, у него должно увеличиваться количество фрагов.
  • Задача 4: Спавн ботов, подключение модуля искусственного интеллекта для ботов, беготня
    • Боты должны спавниться на точках спавна, на которых спавнятся и игроки, на соответствующих базах
    • Боты уже не должны автоматически стрелять будучи заспавненными
    • Подключить модуль https://assetstore.unity.com/packages/tools/behavi... - он куплен, будет предоставлен. Если будут другие предложения - использовать другой модуль или написать логику работы ботов самостоятельно - принимается.
    • С помощью данного модуля заставить ботов патрулировать некоторый участок на карте, просто чтобы они бегали.
    • Бег бота должен быть виден всем игрокам (не только перемещение, но и анимация бега, как он ногами перебирает).
  • Задача 5: Реализовать базовую логику поведения ботов с помощью Invector FSM AI Template
    • Реализовать все требуемые состояния с помощью FSM редактора:
      • idle, follow, fight
      • Реализовать логику idle
  • Задача 6: Реализовать сложную логику поведения ботов
    • Реализовать логику follow
    • Реализовать логику fight
  • Задача 7: Меню запуска игры, настройки ботов
    • Доработать меню создания игры, где добавить галку наличия ботов, поле их количества и выпадающий список с их уровнями
    • Задать где-то в редакторе Unity список из 5 уровней сложности, так чтобы его легко было редактировать
      • Соответственно, каждый уровень сложности должен иметь конфигурируемые: дальность обнаружения, дальность обнаружения при стрельбе, кучность стрельбы.
    • Настройки сложности должны применяться к боту при его спавне
    • При запуске игры, если была включена галка "наличия ботов" включается автоматический спавн ботов, с разбивкой по командам
    • При входе/выходе игроков с паузой в минуту (настраиваемо в некоей переменной в редакторе Unity) боты создаются/удаляются с учётом командного состава (чтобы команды были относительно сбалансированными)

По возможности будут помогать разбираться с кодом и логикой, так-как что-то знаю сам.

Если решите отозваться на этот заказ, пожалуйста, задайте ваши вопросы к данному ТЗ, это важно для меня чтобы оценить ваш уровень. Кроме того, я задам вам несколько вопросов чтобы понять, знаете ли вы хотя-бы то что уже знаю я, не являясь fulltime C#-разработчиком на Unity и Photon

Бюджет не окончательный, размер может быть увеличен по ситуации.

Также, если сработаемся, возможно дальнейшее сотрудничество по другим игровым проектам на Unity.

Читайте на 123ru.net