Module: Lich::Messaging

Defined in:
documented/messaging.rb

Class Method Summary collapse

Class Method Details

Creates a command link formatted message.

Parameters:

  • link_text (String)

    the text to display for the link

  • link_action (String)

    the action to perform when the link is clicked

  • encode (Boolean) (defaults to: true)

    whether to encode the message

Returns:

  • (String)

    the formatted command link message



170
171
172
# File 'documented/messaging.rb', line 170

def self.make_cmd_link(link_text, link_action, encode: true)
  return msg_format("cmd", link_text, cmd_link: link_action, encode: encode)
end

.mono(msg, encode: false) ⇒ void

This method returns an undefined value.

Sends a message in a mono format.

Parameters:

  • msg (String)

    the message to send

  • encode (Boolean) (defaults to: false)

    whether to encode the message

Raises:

  • (StandardError)

    if msg is not a String



180
181
182
183
184
185
186
187
188
# File 'documented/messaging.rb', line 180

def self.mono(msg, encode: false)
  return raise StandardError.new 'Lich::Messaging.mono only works with String parameters!' unless msg.is_a?(String)
  msg = xml_encode(msg) if encode
  if Frontend.supports_mono?
    _respond "<output class=\"mono\"/>\n" + msg + "\n<output class=\"\"/>"
  else
    _respond msg.split("\n")
  end
end

.monsterbold(msg, encode: true) ⇒ String

Formats a message to be displayed in bold for monsters.

Parameters:

  • msg (String)

    the message to format

  • encode (Boolean) (defaults to: true)

    whether to encode the message

Returns:

  • (String)

    the formatted message



29
30
31
32
# File 'documented/messaging.rb', line 29

def self.monsterbold(msg, encode: true)
  # return monsterbold_start + self.xml_encode(msg) + monsterbold_end
  return msg_format("monster", msg, encode: encode)
end

.msg(type = "info", msg = "", encode: true) ⇒ void

This method returns an undefined value.

Sends a formatted message to the user.

Parameters:

  • type (String) (defaults to: "info")

    the type of message (e.g., "info", "debug")

  • msg (String) (defaults to: "")

    the message to send

  • encode (Boolean) (defaults to: true)

    whether to encode the message



159
160
161
162
# File 'documented/messaging.rb', line 159

def self.msg(type = "info", msg = "", encode: true)
  return if type == "debug" && (Lich.debug_messaging.nil? || Lich.debug_messaging == "false" || Lich.debug_messaging == false)
  _respond msg_format(type, msg, encode: encode)
end

.msg_format(type = "info", msg = "", cmd_link: nil, encode: true) ⇒ String

Formats a message with specific styling based on its type.

Parameters:

  • type (String) (defaults to: "info")

    the type of message (e.g., "info", "error")

  • msg (String) (defaults to: "")

    the message to format

  • cmd_link (String, nil) (defaults to: nil)

    optional command link for formatting

  • encode (Boolean) (defaults to: true)

    whether to encode the message

Returns:

  • (String)

    the formatted message



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'documented/messaging.rb', line 76

def self.msg_format(type = "info", msg = "", cmd_link: nil, encode: true)
  msg = xml_encode(msg) if encode
  preset_color_before = ""
  preset_color_after = ""

  wizard_color = { "white" => 128, "black" => 129, "dark blue" => 130, "dark green" => 131, "dark teal" => 132,
    "dark red" => 133, "purple" => 134, "gold" => 135, "light grey" => 136, "blue" => 137,
    "bright green" => 138, "teal" => 139, "red" => 140, "pink" => 141, "yellow" => 142 }

  if Frontend.supports_xml?
    case type
    when "error", "yellow", "bold", "monster", "creature"
      preset_color_before = monsterbold_start
      preset_color_after = monsterbold_end
    when "warn", "orange", "gold", "thought"
      preset_color_before = "<preset id='thought'>"
      preset_color_after = "</preset>"
    when "info", "teal", "whisper"
      preset_color_before = "<preset id='whisper'>"
      preset_color_after = "</preset>"
    when "green", "speech", "debug", "light green"
      preset_color_before = "<preset id='speech'>"
      preset_color_after = "</preset>"
    when "link", "command", "selectedLink", "watching", "roomName"
      preset_color_before = ""
      preset_color_after = ""
    when "cmd"
      preset_color_before = "<d cmd='#{xml_encode(cmd_link)}'>"
      preset_color_after = "</d>"
    end
  elsif Frontend.supports_gsl?
    case type
    when "error", "yellow", "bold", "monster", "creature"
      preset_color_before = monsterbold_start
      preset_color_after = (monsterbold_end + " ")
    when "warn", "orange", "gold", "thought"
      preset_color_before = wizard_color["gold"].chr.force_encoding(Encoding::ASCII_8BIT)
      preset_color_after = "\240".force_encoding(Encoding::ASCII_8BIT)
    when "info", "teal", "whisper"
      preset_color_before = wizard_color["teal"].chr.force_encoding(Encoding::ASCII_8BIT)
      preset_color_after = "\240".force_encoding(Encoding::ASCII_8BIT)
    when "green", "speech", "debug", "light green"
      preset_color_before = wizard_color["bright green"].chr.force_encoding(Encoding::ASCII_8BIT)
      preset_color_after = "\240".force_encoding(Encoding::ASCII_8BIT)
    when "link", "command", "selectedLink", "watching", "roomName"
      preset_color_before = ""
      preset_color_after = ""
    when "cmd" # these browsers can't handle links
      preset_color_before = ""
      preset_color_after = ""
    end
  else
    case type
    when "error", "yellow", "bold", "monster", "creature"
      preset_color_before = monsterbold_start
      preset_color_after = monsterbold_end
    when "warn", "orange", "gold", "thought"
      preset_color_before = "!! "
      preset_color_after = ""
    when "info", "teal", "whisper"
      preset_color_before = "-- "
      preset_color_after = ""
    when "green", "speech", "debug", "light green"
      preset_color_before = ">> "
      preset_color_after = ""
    when "link", "command", "selectedLink", "watching", "roomName"
      preset_color_before = ""
      preset_color_after = ""
    when "cmd" # these browsers can't handle links
      preset_color_before = ""
      preset_color_after = ""
    end
  end

  return (preset_color_before + msg + preset_color_after)
end

.stream_window(msg, window = "familiar", encode: true) ⇒ void

This method returns an undefined value.

Prepares a message for display in a specific stream window.

Parameters:

  • msg (String)

    the message to display

  • window (String) (defaults to: "familiar")

    the type of stream window (e.g., "familiar")

  • encode (Boolean) (defaults to: true)

    whether to encode the message



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'documented/messaging.rb', line 40

def self.stream_window(msg, window = "familiar", encode: true)
  msg = xml_encode(msg) if encode
  if XMLData.game =~ /^GS/
    allowed_streams = ["familiar", "speech", "thoughts", "loot", "voln"]
  elsif XMLData.game =~ /^DR/
    allowed_streams = ["familiar", "speech", "thoughts", "combat"]
  end

  stream_window_before_txt = ""
  stream_window_after_txt = ""
  if Frontend.supports_streams? && allowed_streams.include?(window)
    stream_window_before_txt = "<pushStream id=\"#{window}\" ifClosedStyle=\"watching\"/>"
    stream_window_after_txt = "\r\n<popStream/>\r\n"
  else
    if window =~ /familiar/i
      stream_window_before_txt = "\034GSe\r\n"
      stream_window_after_txt = "\r\n\034GSf\r\n"
    elsif window =~ /thoughts/i
      stream_window_before_txt = "You hear the faint thoughts of LICH-MESSAGE echo in your mind:\r\n"
      stream_window_after_txt = ""
    elsif window =~ /voln/i
      stream_window_before_txt = %{The Symbol of Thought begins to burn in your mind and you hear LICH-MESSAGE thinking, "}
      stream_window_after_txt = %{"\r\n}
    end
  end

  _respond stream_window_before_txt + msg + stream_window_after_txt
end

.xml_encode(msg) ⇒ String

Encodes a message into XML format.

Parameters:

  • msg (String)

    the message to encode

Returns:

  • (String)

    the encoded message in XML format



16
17
18
19
20
21
22
# File 'documented/messaging.rb', line 16

def self.xml_encode(msg)
  if Frontend.supports_gsl?
    sf_to_wiz(msg.encode(:xml => :text), bypass_multiline: true) || "" # sf_to_wiz returns nil when blank/new line only, which causes issue for messaging, always return string if nil
  else
    msg.encode(:xml => :text)
  end
end