User Tools

Site Tools


kg:doc_spec_entities

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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