user-gearAñadir lógica de jugador

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.).

circle-exclamation

Estado por jugador

Guarda el estado de la jugabilidad en el jugador o en objetos propiedad del jugador.

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

Servidor + cliente: ¿qué se ejecuta dónde?

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)
        if is_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)
        if is_local() {
            // UI.text(..., "Esperando al host...");
            // Partículas, temblor de pantalla, etc.
        }
    }
}
circle-info

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.

Última actualización