user-gearДобавление логики игрока

В All Out игрок — это первоклассный объект игрового процесса. Ваш Player :: class : Player_Base — это место, где вы храните состояние на игрока (здоровье, наборы снаряжения, перезарядки, переключатели интерфейса, прогресс и т. д.).

circle-exclamation

Состояние на игрока

Храните состояние игрового процесса на объекте игрока или на объектах, принадлежащих игроку.

Player :: class : Player_Base {
    health: int;
    inventory_open: bool;
}

Сервер + клиент: что выполняется где?

All Out автоматически синхронизирует состояние игрового процесса с сервера на клиентов. Вам всё равно нужно решить, какой код должен выполняться на сервере против что может быть только локальным.

Два распространённых проверки:

  • is_local_or_server(): игровой интерфейс + обработка ввода (выполняется на сервере + локальном клиенте)

  • is_local(): чисто косметический интерфейс/эффекты (выполняются только на локальном клиенте)

Player :: class : Player_Base {
    ao_late_update :: method(dt: float) {
        // Игровой интерфейс + обработка ввода (сервер + локальный клиент)
        if is_local_or_server() {
            // draw_ability_button(this, Shoot_Ability, 0);
            // Обработка нажатий/приёмов, изменяющих состояние игры
        }

        // Только косметический интерфейс (только локальный клиент)
        if is_local() {
            // UI.text(..., "Ожидание хоста...");
            // Частицы, тряска экрана и т. п.
        }
    }
}
circle-info

Если что-то влияет на мир (урон, награды, спавн, условия победы), рассматривайте это как авторитетное со стороны сервера. Если это только презентация (интерфейс/частицы), держите это локальным.

Идентичность игрока и данные профиля

Player_Base предоставляет поля идентификации, которые вы будете часто использовать:

  • p->get_username() -> string

  • p->get_user_id() -> string

  • p.avatar_color

  • p.device_kind (.PHONE, .TABLET, .PC)

Сохранение: где хранить прогресс игрока

  • Economy: валюты (монеты/драгоценности/опыт) с автоматическим сохранением + редактированием в портале создателя См. Economy.

  • Save: общее ключ/значение сохранение (настройки, состояние заданий, списки разблокировок и т. п.) См. Система сохранений.

  • Inventory: стеки/экземпляры предметов в инвентаре игрока (опционально автосохраняемые) См. Inventory.

Типичный шаблон: загрузка сохранённых значений в ao_start

Лучшие практики

  • Храните состояние на игрока в Player. Избегайте глобальных переменных для всего, что относится к конкретному игроку.

  • Разделяйте игровой процесс и косметику. Используйте is_local_or_server() для ввода/интерфейса игрового процесса, is_local() для локальных визуальных эффектов.

  • Предпочитайте встроенные API сохранения вместо того, чтобы писать свои (Economy/Save/Inventory).

Справочник Player_Base

См. reference/player-base.md по часто используемым полям и методам.

Последнее обновление