Server messages

Rotating and scheduled messages posted to chat, configured from a single JSON file with no mod of your own.

What it does

ATG Core can post messages to every player’s chat on a schedule. Two kinds, and one list holds both:

  • Rotating — a pool posted one at a time, on an interval. Use these for the things a server repeats all day: the rules link, the Discord invite, how to report a bug.
  • Daily — posted once a day at a fixed wall-clock time, and taking no part in the rotation. Use these for something that happens at a time: an operation start, a restart warning, a weekly event.

Nothing is posted until you configure a message. The mod ships with an empty list, so loading Core on its own adds no chat traffic.

Settings

The file is <profile>/ATG/atg-broadcast.json, read on the server at startup. It is not replicated — the finished line reaches players as an ordinary chat message rather than as a setting — so nothing needs distributing to clients.

SettingDefaultMeaning
m_bEnabledtrueMaster switch. Off stops everything without your having to clear the list.
m_iRotationIntervalMinutes15How often a rotating message is posted. 0 stops rotation and leaves the daily messages running.
m_bRotateRandomlyfalseOn, a rotating message is picked at random each time. Off, they cycle in the order listed.
m_bScheduledUseUtctrueOn, daily times are read in UTC. Off, in the server machine’s local time.
m_aMessages(empty)The messages themselves.

Remember that a list is replaced wholesale — see Configuration. If you name m_aMessages at all, write out every message you want, including the ones you were happy with.

Each message

FieldMeaning
m_sTextThe line shown in chat. Plain text.
m_eSchedule0 for rotating, 1 for daily.
m_iDailyHourDaily messages only: the hour to post at, 0–23.
m_iDailyMinuteDaily messages only: the minute to post at, 0–59.

m_eSchedule is written as a number, not a word — 0 is rotating and 1 is daily. The two hidden fields on a rotating message are ignored rather than rejected, so leaving them at 0 is fine.

A complete file

<profile>/ATG/atg-broadcast.json

{
  "m_bEnabled": true,
  "m_iRotationIntervalMinutes": 15,
  "m_bRotateRandomly": false,
  "m_bScheduledUseUtc": true,
  "m_aMessages": [
    {
      "$type": "ATG_Broadcast_Message",
      "m_sText": "Server rules and mod list: example.com/rules",
      "m_eSchedule": 0,
      "m_iDailyHour": 0,
      "m_iDailyMinute": 0
    },
    {
      "$type": "ATG_Broadcast_Message",
      "m_sText": "Found a bug? Report it on our Discord.",
      "m_eSchedule": 0,
      "m_iDailyHour": 0,
      "m_iDailyMinute": 0
    },
    {
      "$type": "ATG_Broadcast_Message",
      "m_sText": "Scheduled restart in 30 minutes.",
      "m_eSchedule": 1,
      "m_iDailyHour": 3,
      "m_iDailyMinute": 30
    }
  ]
}

Every entry needs its $type, and for this list it is always ATG_Broadcast_Message. A missing or misspelled one loads silently and does nothing.