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