server-message

star 234

Implement Thistle Tea SMSG_* server messages following our architecture patterns. Use this when asked to implement a new message or you need to use one that isn't implemented yet.

pikdum By pikdum schedule Updated 6/11/2026

name: server-message description: Implement Thistle Tea SMSG_* server messages following our architecture patterns. Use this when asked to implement a new message or you need to use one that isn't implemented yet.

Create/modify a module under lib/game/network/message/ that:

  • use ThistleTea.Game.Network.ServerMessage, :SMSG_FOO
  • defines a defstruct matching the fields needed to encode the packet
  • implements to_binary/1 using little-endian bit syntax patterns like <<x::little-size(32)>>

Quick examples

Minimal payload (SMSG_PONG):

defmodule ThistleTea.Game.Network.Message.SmsgPong do
  @moduledoc false
  use ThistleTea.Game.Network.ServerMessage, :SMSG_PONG

  defstruct [:sequence_id]

  @impl ServerMessage
  def to_binary(%__MODULE__{sequence_id: sequence_id}) do
    <<sequence_id::little-size(32)>>
  end
end

Conditional payload (SMSG_AUTH_RESPONSE):

defmodule ThistleTea.Game.Network.Message.SmsgAuthResponse do
  @moduledoc false
  use ThistleTea.Game.Network.ServerMessage, :SMSG_AUTH_RESPONSE

  @result_auth_ok 0x0C
  @result_auth_wait_queue 0x1B

  defstruct [:result, :billing_time, :billing_flags, :billing_rested, :queue_position]

  @impl ServerMessage
  def to_binary(%__MODULE__{} = msg) do
    <<msg.result::little-size(8)>> <>
      case msg.result do
        @result_auth_ok ->
          <<msg.billing_time::little-size(32), msg.billing_flags::little-size(8),
            msg.billing_rested::little-size(32)>>

        @result_auth_wait_queue ->
          <<msg.queue_position::little-size(32)>>

        _ ->
          <<>>
      end
  end
end

How to find the packet spec

  • Packet formats are cataloged in the wow_messages git submodule at refs/wow_messages/.
  • Look up the .wowm spec here: refs/wow_messages/wow_message_parser/wowm/*/${SMSG_NAME}.wowm
  • Note that Thistle Tea is a Vanilla (patch 1.12.1) server, so ignore future client versions

Workflow

  • Translate the .wowm fields into defstruct fields and an encoder in to_binary/1.
  • Use pattern matching in the function head for type safety: to_binary(%__MODULE__{} = msg).
Install via CLI
npx skills add https://github.com/pikdum/thistle_tea --skill server-message
Repository Details
star Stars 234
call_split Forks 14
navigation Branch main
article Path SKILL.md
More from Creator