Module: Lich::Messaging

Defined in:
lib/messaging.rb

Class Method Summary collapse

Class Method Details

Creates a command link message.

Examples:

Lich::Messaging.make_cmd_link("Click me", "do_something") # => "<d cmd='do_something'>Click me</d>"

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 (default: true)

Returns:

  • (String)

    the formatted command link message



178
179
180
# File 'lib/messaging.rb', line 178

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

Note:

This method only works with String parameters.

This method returns an undefined value.

Sends a message in a monospaced format.

Examples:

Lich::Messaging.mono("This is a monospaced message.")

Parameters:

  • msg (String)

    the message to send

  • encode (Boolean) (defaults to: false)

    whether to encode the message (default: false)

Raises:

  • (StandardError)

    if msg is not a String



191
192
193
194
195
196
197
198
199
# File 'lib/messaging.rb', line 191

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 =~ /^(?:stormfront|wrayth|genie)$/i
    _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 as monster bold.

Examples:

Lich::Messaging.monsterbold("A fierce monster appears!") # => "<monster>A fierce monster appears!</monster>"

Parameters:

  • msg (String)

    the message to format

  • encode (Boolean) (defaults to: true)

    whether to encode the message (default: true)

Returns:

  • (String)

    the formatted message



29
30
31
32
# File 'lib/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 message to the user with a specific type and optional encoding.

Examples:

Lich::Messaging.msg("info", "This is an informational message.")

Parameters:

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

    the type of message (default: “info”)

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

    the message to send

  • encode (Boolean) (defaults to: true)

    whether to encode the message (default: true)



165
166
167
168
# File 'lib/messaging.rb', line 165

def self.msg(type = "info", msg = "", encode: true)
  return if type == "debug" && (Lich.debug_messaging.nil? || 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 color and style based on its type.

Examples:

Lich::Messaging.msg_format("error", "An error occurred!") # => "<error>An error occurred!</error>"

Parameters:

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

    the type of message (default: “info”)

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

    the message to format

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

    optional command link for formatting (default: nil)

  • encode (Boolean) (defaults to: true)

    whether to encode the message (default: true)

Returns:

  • (String)

    the formatted message



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
152
153
154
155
# File 'lib/messaging.rb', line 80

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 =~ /^(?:stormfront|frostbite|profanity|wrayth)$/
    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 =~ /^(?:wizard|avalon)$/
    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.

Sends a message to a specific stream window.

Examples:

Lich::Messaging.stream_window("Hello, familiar!", "familiar") 

Parameters:

  • msg (String)

    the message to send

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

    the name of the stream window (default: “familiar”)

  • encode (Boolean) (defaults to: true)

    whether to encode the message (default: true)



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
68
69
# File 'lib/messaging.rb', line 42

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 =~ /stormfront|profanity/i && 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 in XML format.

Examples:

Lich::Messaging.xml_encode("Hello & World") # => "Hello &amp; World"

Parameters:

  • msg (String)

    the message to be encoded

Returns:

  • (String)

    the XML-encoded message



14
15
16
17
18
19
20
# File 'lib/messaging.rb', line 14

def self.xml_encode(msg)
  if $frontend =~ /^(wizard|avalon)$/i
    sf_to_wiz(msg.encode(:xml => :text))
  else
    msg.encode(:xml => :text)
  end
end