====== Игровые сущности ====== ===== Мультисерверность ===== ===== Общая и детальные части ===== ===== Приложения ===== ==== Чеклист на overland model ==== === Классы Оверланда === - Город (city) - локация, владеет набором пригородов, есть игрок (*) - владелец - Пригород (suburb) - локация, всегда есть город-владелец - Логово (lair) - локация, есть "счётчик посещений", встроенные часы, статтус "расфармлено" - Армия (army) - мобильна, позиция - два вертекса, они эквивалентны (в движении армия занимает оба вертекса) - Процесс на карте (landaction) - вероятно, локация, хотя не обязательно. Может менять позицию, имеет параметр фазы. Может быть циклическим, или исчезать на последней фазе. - Фракция (fraction), частные случаи - игрок, НПЦ-мама, альянс игроков. - Ландшафт (landscape), всё по-старому - декораторы, модификаторы, высоты. === Классы детальной информации === - Город - Пригород - Армия - Фракция **-Тут поподробнее, а то у меня класс пустой** === Логика сервера === - **Финализация мира**: - **Фракции**: создаётся набор фракций "НПЦ-мамы", количество определяется снаружи, из генератора. - пространство идентификаторов фракций общее для _всех_ серверов, потому предлагаю каждому миру выделить интервал допустимых ИД фракций, такого вида: W+(id), где W - номер мира, 10 бит, и 21 бит - на каждый мир, 2 миллиона фракций нам должно хватить. - **Города**: создаётся полный набор городов из map.analytics: - по умолчанию, все города имеют нулевой уровень, владелец городов "великий Ноль", - некоторые города получают высокий уровень, ставятся владельцы "НПЦ-мамы" - город высокого уровня автоматически снабжается пригородами, схема может быть захардкожена. - все города хранят данные в 2х объектах: - краткую информацию в Оверланде (видимую всем), класс overland.City - детальную информацию в Детейл-дате (выдаётся кому надо), класс detail.City - **Игроки**: обнуляется - **Армии**: обнуляется - **Добавление нового игрока**: происходит при подключении игрока, которого ещё нет в базе игроков (пока нет общей базы - привязываем игрока к миру) - создаётся фракция внутри мира для игрока - выделяется случайный город из тех, которые имеют хозяина с ИД==0, то есть "Великий Ноль": - город назначается игроку - город получает уровень ==1 - **Апдейт мира**: - **Логова** - увеличивается встроенный таймер, по его результату: - логово может исчезнуть - логово может породить Армию (НПЦ) - анализируется счётчик посещений, по его результату: - логово может получить статус "расфармлено", и переустановиться таймер (расфармленным надо жить определённое время) - **Пригороды** - растёт население: - при максимальном урвоне, который равен уровню города - клампится. - меняется уровень: - если понижение уровня не совместимо с типом модуля - происходит потеря типа - апдейт экономической системы (связан с апдейтом города, вероятно надо выполнять в правильном порядке): - вырабатываются и добавляются на склад города товары - со склада города изымаются товары, нужные пригороду - анализируется рабочий статус пригорода, может меняться состояние подчинённых пригороду процессов на карте: - порождаться новые процессы - гаситься текущие - **Города**: - нулевой уровень города отключен от апдейта (?) - растёт население (детальные данные): - при нулевом владельце - падает население - меняется уровень: - понижение уровня любого города - отбирается случайный модуль, превращается в логово бандитов - повышение уровня города для нулевого владельца запрещено - повышение уровня города для владельца НПЦ: - автоматическое создание пригорода (хардкод) - имеющиеся пригороды анализируются на предмет возможной смены типа - повышение уровня города игрока - ничего не происходит - производится рассчёт экономики: - вырабатываются и добавляются товары. Процесс может требовать на складе сырья. - изымаются товары, нужные населению. - **Армии** - пока никакой логики === Протокол связи === * Логинимся - получаем данные игрока (в будущем - соединение на нужные игровые сервера) * видовые операции на клиенте - никакого взаимодействия с сервером не нужно. * информационные транзакции: * выбираем в виде объект * определяем - можем ли мы получить детальную информацию, если да - открываем окно, отображающее информацию, и показываем там фигу с маком. * отправляем на сервер запрос на данные * пришедший ответ выкладываем в локальный кеш, если информационное окно всё ещё открыто - обновляем его содержимое * что-то пытаемся выполнить с клиента: * определяем как можем условия - можно или нет * отправляем на сервер свою команду * сервер обрабатывает команду, как сумеет, результат... * положительный - изменение на клиент придёт в регулярном обновлении * отрицательный - отправляем внеочередное сообщение о фейле операции * периодически получаем с сервера обновления, если надо - изменяем виды, в т.ч сбрасываем выбранные объекты, если исчезли, и так далее. * **-как быть с отменами? отменить найм, отменить постройку?** === Информационные запросы === - Логин - хочу заглянуть в Город - хочу заглянуть в Армию - хочу заглянуть во фракцию === Команды с клиента === - напрямую изменить вертекс ландшафта (для режима редактора) - построить для выбранного (моего) города новую деревню - изменить тип деревни **- это как?** - построить в городе домик **- нипонял** - начать найм отряда - изменить состав армии в городе **- с чего на что? просто перебросить?** - передвинуть армию (героя) в выбранную точку