Files
core2026/docs/architecture/legacy-engine-diplomacy.md
T

2.0 KiB

Legacy Diplomacy and Messaging

This document summarizes the legacy message system and how diplomatic messages trigger nation command flows. References include legacy/hwe/sammo/Message.php, legacy/hwe/sammo/DiplomaticMessage.php, legacy/hwe/sammo/MessageTarget.php, and legacy/hwe/sammo/Target.php.

Message Types and Mailboxes

Message supports multiple mailbox types:

  • Public: MAILBOX_PUBLIC (global announcements).
  • National: MAILBOX_NATIONAL + nationID for diplomacy/nation mail.
  • Private: mailbox id is the receiver general id.

Message types (MessageType) include public, national, private, and diplomacy.

Message Lifecycle

  • Message::send() (not shown here) writes to the message table.
  • Message::getMessagesFromMailBox() reads by mailbox/type with validity filtering (valid_until > now).
  • Message::buildFromArray() instantiates:
    • DiplomaticMessage when type is diplomacy.
    • ScoutMessage or RaiseInvaderMessage when option.action matches.

DiplomaticMessage Flow

DiplomaticMessage wraps diplomacy requests and accepts/rejects them:

  • Supported actions:
    • TYPE_NO_AGGRESSION (불가침)
    • TYPE_CANCEL_NA (불가침 파기)
    • TYPE_STOP_WAR (종전)
  • agreeMessage() validates:
    • message is still valid
    • receiver is a valid diplomacy officer
  • On accept, builds and runs the matching nation command:
    • che_불가침수락, che_불가침파기수락, che_종전수락
    • Uses NoRNG to avoid randomness in acceptance.

Each acceptance updates diplomacyDetail with command briefs and writes logs.

Message Targets

MessageTarget and Target provide lightweight identifiers:

  • MessageTarget includes general/nation names, colors, and icons.
  • Helper constructors (buildQuick, buildFromGeneralObj) resolve from DB.

Open Questions / Follow-ups

  • The full list of MessageType values and message table schema live outside this file and can be documented alongside the UI mailbox APIs.