En All Out, el jugador es un objeto de jugabilidad de primera clase. Tu Player :: class : Player_Base es donde pones estado por jugador (salud, equipamientos, tiempos de reutilización, alternadores de la interfaz, progresión, etc.).
Supón que hay varios jugadores conectados. Evita el estado global que se rompería cuando hay más de un jugador.
Estado por jugador
Guarda el estado de la jugabilidad en el jugador o en objetos propiedad del jugador.
All Out sincroniza automáticamente el estado de la jugabilidad desde el servidor a los clientes. Aun así, debes decidir qué código debe ejecutarse en el servidor frente a qué puede ser solo local.
Dos comprobaciones comunes:
is_local_or_server(): IU de jugabilidad + manejo de entrada (se ejecuta en el servidor + cliente local)
is_local(): IU/efectos puramente cosméticos (se ejecuta solo en el cliente local)
Player::class:Player_Base{ao_late_update::method(dt:float){// IU de jugabilidad + manejo de entrada (servidor + cliente local)ifis_local_or_server(){// draw_ability_button(this, Shoot_Ability, 0);// Manejar toques/pulsaciones que cambian el estado del juego}// IU solo cosmética (solo cliente local)ifis_local(){// UI.text(..., "Esperando al host...");// Partículas, temblor de pantalla, etc.}}}
Si algo afecta al mundo (daño, recompensas, generación, condiciones de victoria), trátalo como autoritativo en el servidor. Si es solo presentación (IU/partículas), mantenlo local.
Identidad del jugador y datos del perfil
Player_Base expone campos de identidad que usarás a menudo:
p->get_username() -> string
p->get_user_id() -> string
p.avatar_color
p.device_kind (.PHONE, .TABLET, .PC)
Persistencia: dónde almacenar el progreso del jugador
Economía: monedas (coins/gems/xp) con persistencia automática + edición en el portal del creador\nVer Economía.
Guardado: persistencia general de pares clave/valor (ajustes, estado de misiones, listas de desbloqueos, etc)\nVer Sistema de guardado.
Inventory: pilas/instancias de objetos en un inventario del jugador (opcionalmente con guardado automático)\nVer Inventory.
Patrón común: cargar los valores guardados en ao_start
Mejores prácticas
Mantén el estado por jugador en Player. Evita variables globales para cualquier cosa específica del jugador.
Separa jugabilidad y cosméticos. Usa is_local_or_server() para la entrada/IU de jugabilidad, is_local() para efectos visuales solo locales.
Prefiere las API de persistencia integradas en lugar de crear las tuyas propias (Economy/Save/Inventory).
Referencia de Player_Base
Consulta la Player_Base clase en core:ao (hereda de AO_Player : Component) para campos y métodos de uso común.