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