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

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

circle-exclamation

Состояние, привязанное к игроку

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

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

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

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

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

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

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

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

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

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

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

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

  • p->get_username() -> string

  • p->get_user_id() -> string

  • p.avatar_color

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

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

  • Economy: валюты (монеты/самоцветы/xp) с автоматическим сохранением + редактирование в Creator Portal См. Economy.

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

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

Распространённый шаблон: загружать сохранённые значения в ao_start

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

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

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

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

Ссылка на Player_Base

См. Player_Base класс в core:ao (наследуется от AO_Player : Component) для часто используемых полей и методов.

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