В All Out игрок — это игровой объект первого класса. Ваш Player :: class : Player_Base — это место, куда вы помещаете состояние, привязанное к игроку (здоровье, наборы снаряжения, перезарядки, переключатели UI, прогресс и т. д.).
Предположим, что подключено несколько игроков. Избегайте глобального состояния, которое сломается, когда игроков больше одного.
Состояние, привязанное к игроку
Храните игровое состояние в игроке или объектах, принадлежащих игроку.
All Out автоматически синхронизирует игровое состояние с сервера на клиенты. Вам всё равно нужно решить какой код должен выполняться на сервере vs что может быть только локальным.
Две распространённые проверки:
is_local_or_server(): игровой UI + обработка ввода (выполняется на сервере + локальном клиенте)
is_local(): только косметический UI/эффекты (выполняется только на локальном клиенте)
Player::class:Player_Base{ao_late_update::method(dt:float){// Игровой UI + обработка ввода (сервер + локальный клиент)ifis_local_or_server(){// draw_ability_button(this, Shoot_Ability, 0);// Обрабатывать касания/нажатия, которые изменяют состояние игры}// Только косметический UI (только локальный клиент)ifis_local(){// UI.text(..., "Ожидание хоста...");// Частицы, тряска экрана и т. д.}}}
Если что-то влияет на мир (урон, награды, появление объектов, условия победы), считайте это с авторитетом сервера. Если это только отображение (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) для часто используемых полей и методов.