User Tools

Site Tools


kg:doc_spec_entities

Игровые сущности

Мультисерверность

Общая и детальные части

Приложения

Чеклист на overland model

Классы Оверланда

  1. Город (city) - локация, владеет набором пригородов, есть игрок (*) - владелец
  2. Пригород (suburb) - локация, всегда есть город-владелец
  3. Логово (lair) - локация, есть “счётчик посещений”, встроенные часы, статтус “расфармлено”
  4. Армия (army) - мобильна, позиция - два вертекса, они эквивалентны (в движении армия занимает оба вертекса)
  5. Процесс на карте (landaction) - вероятно, локация, хотя не обязательно. Может менять позицию, имеет параметр фазы. Может быть циклическим, или исчезать на последней фазе.
  6. Фракция (fraction), частные случаи - игрок, НПЦ-мама, альянс игроков.
  7. Ландшафт (landscape), всё по-старому - декораторы, модификаторы, высоты.

Классы детальной информации

  1. Город
  2. Пригород
  3. Армия
  4. Фракция -Тут поподробнее, а то у меня класс пустой

Логика сервера

  1. Финализация мира:
    1. Фракции: создаётся набор фракций “НПЦ-мамы”, количество определяется снаружи, из генератора.
      1. пространство идентификаторов фракций общее для _всех_ серверов, потому предлагаю каждому миру выделить интервал допустимых ИД фракций, такого вида: W+(id), где W - номер мира, 10 бит, и 21 бит - на каждый мир, 2 миллиона фракций нам должно хватить.
    2. Города: создаётся полный набор городов из map.analytics:
      1. по умолчанию, все города имеют нулевой уровень, владелец городов “великий Ноль”,
      2. некоторые города получают высокий уровень, ставятся владельцы “НПЦ-мамы”
        1. город высокого уровня автоматически снабжается пригородами, схема может быть захардкожена.
      3. все города хранят данные в 2х объектах:
        1. краткую информацию в Оверланде (видимую всем), класс overland.City
        2. детальную информацию в Детейл-дате (выдаётся кому надо), класс detail.City
    3. Игроки: обнуляется
    4. Армии: обнуляется
  2. Добавление нового игрока: происходит при подключении игрока, которого ещё нет в базе игроков (пока нет общей базы - привязываем игрока к миру)
    1. создаётся фракция внутри мира для игрока
    2. выделяется случайный город из тех, которые имеют хозяина с ИД==0, то есть “Великий Ноль”:
      1. город назначается игроку
      2. город получает уровень ==1
  3. Апдейт мира:
    1. Логова
      1. увеличивается встроенный таймер, по его результату:
        1. логово может исчезнуть
        2. логово может породить Армию (НПЦ)
      2. анализируется счётчик посещений, по его результату:
        1. логово может получить статус “расфармлено”, и переустановиться таймер (расфармленным надо жить определённое время)
    2. Пригороды
      1. растёт население:
        1. при максимальном урвоне, который равен уровню города - клампится.
      2. меняется уровень:
        1. если понижение уровня не совместимо с типом модуля - происходит потеря типа
      3. апдейт экономической системы (связан с апдейтом города, вероятно надо выполнять в правильном порядке):
        1. вырабатываются и добавляются на склад города товары
        2. со склада города изымаются товары, нужные пригороду
      4. анализируется рабочий статус пригорода, может меняться состояние подчинённых пригороду процессов на карте:
        1. порождаться новые процессы
        2. гаситься текущие
    3. Города:
      1. нулевой уровень города отключен от апдейта (?)
      2. растёт население (детальные данные):
        1. при нулевом владельце - падает население
      3. меняется уровень:
        1. понижение уровня любого города - отбирается случайный модуль, превращается в логово бандитов
        2. повышение уровня города для нулевого владельца запрещено
        3. повышение уровня города для владельца НПЦ:
          1. автоматическое создание пригорода (хардкод)
          2. имеющиеся пригороды анализируются на предмет возможной смены типа
        4. повышение уровня города игрока - ничего не происходит
      4. производится рассчёт экономики:
        1. вырабатываются и добавляются товары. Процесс может требовать на складе сырья.
        2. изымаются товары, нужные населению.
    4. Армии
      1. пока никакой логики

Протокол связи

  • Логинимся - получаем данные игрока (в будущем - соединение на нужные игровые сервера)
  • видовые операции на клиенте - никакого взаимодействия с сервером не нужно.
  • информационные транзакции:
    • выбираем в виде объект
    • определяем - можем ли мы получить детальную информацию, если да - открываем окно, отображающее информацию, и показываем там фигу с маком.
    • отправляем на сервер запрос на данные
    • пришедший ответ выкладываем в локальный кеш, если информационное окно всё ещё открыто - обновляем его содержимое
  • что-то пытаемся выполнить с клиента:
    • определяем как можем условия - можно или нет
    • отправляем на сервер свою команду
    • сервер обрабатывает команду, как сумеет, результат…
      • положительный - изменение на клиент придёт в регулярном обновлении
      • отрицательный - отправляем внеочередное сообщение о фейле операции
    • периодически получаем с сервера обновления, если надо - изменяем виды, в т.ч сбрасываем выбранные объекты, если исчезли, и так далее.
    • -как быть с отменами? отменить найм, отменить постройку?

Информационные запросы

  1. Логин
  2. хочу заглянуть в Город
  3. хочу заглянуть в Армию
  4. хочу заглянуть во фракцию

Команды с клиента

  1. напрямую изменить вертекс ландшафта (для режима редактора)
  2. построить для выбранного (моего) города новую деревню
  3. изменить тип деревни - это как?
  4. построить в городе домик - нипонял
  5. начать найм отряда
  6. изменить состав армии в городе - с чего на что? просто перебросить?
  7. передвинуть армию (героя) в выбранную точку
kg/doc_spec_entities.txt · Last modified: 2022/04/07 13:13 (external edit)