# Module `Message`

Message System to display Messages for Clients and Coalitions or All.

Messages are grouped on the display panel per Category to improve readability for the players. Messages are shown on the display panel for an amount of seconds, and will then disappear. Messages are identified by an ID. The messages with the same ID belonging to the same category will be overwritten if they were still being displayed on the display panel. Messages are created with MESSAGE:New(). Messages are sent to Clients with MESSAGE:ToClient(). Messages are sent to Coalitions with MESSAGE:ToCoalition(). Messages are sent to All Players with MESSAGE:ToAll().

## Global(s)

MESSAGE |
MESSAGEQUEUE |

## Type `MESSAGE`

MESSAGE.ClassName |
MESSAGE.MessageCategory |
MESSAGE.MessageID |
MESSAGE:New(MessageText, MessageCategory, MessageDuration, MessageID) | Creates a new MESSAGE object.
MESSAGE:ToAll() | Sends a MESSAGE to all players.
MESSAGE:ToBlue() | Sends a MESSAGE to the Blue coalition.
MESSAGE:ToClient(Client) | Sends a MESSAGE to a Client Group.
MESSAGE:ToCoalition(CoalitionSide) | Sends a MESSAGE to a Coalition.
MESSAGE:ToRed() | Sends a MESSAGE to the Red Coalition.

## Type `MESSAGEQUEUE`

MESSAGEQUEUE.ClientGroups |
MESSAGEQUEUE.CoalitionSides |
MESSAGEQUEUE:New(RefreshInterval) |
MESSAGEQUEUE:_DisplayMessages() | This function is called automatically by the MESSAGEQUEUE scheduler.

## Global(s)

#MESSAGE MESSAGE

#MESSAGEQUEUE MESSAGEQUEUE

## Type `Message`

The MESSAGE class

### Field(s)

#string MESSAGE.ClassName

#number MESSAGE.MessageCategory

#number MESSAGE.MessageID

MESSAGE:New(MessageText, MessageCategory, MessageDuration, MessageID)

  Creates a new MESSAGE object.

  Note that these MESSAGE objects are not yet displayed on the display panel. You must use the functions ToClient or ToCoalition or ToAll to send these Messages to the respective recipients.

  ### Parameters

  - `#string MessageText` : is the text of the Message.

  - `#string MessageCategory` : is a string expressing the Category of the Message. Messages are grouped on the display panel per Category to improve readability.

  - `#number MessageDuration` : is a number in seconds of how long the MESSAGE should be shown on the display panel.

  - `#string MessageID` : is a string expressing the ID of the Message.

  ### Return value

  #MESSAGE:

  ### Usage:

      -- Create a series of new Messages.
      -- MessageAll is meant to be sent to all players, for 25 seconds, and is classified as "Score".
      -- MessageRED is meant to be sent to the RED players only, for 10 seconds, and is classified as "End of Mission", with ID "Win".
      -- MessageClient1 is meant to be sent to a Client, for 25 seconds, and is classified as "Score", with ID "Score".
      -- MessageClient1 is meant to be sent to a Client, for 25 seconds, and is classified as "Score", with ID "Score".
      MessageAll = MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" )
      MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" )
      MessageClient1 = MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" )
      MessageClient2 = MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" )

MESSAGE:ToAll()

  Sends a MESSAGE to all players.

  ### Return value

  #MESSAGE:

  ### Usage:

      -- Send a message created to all players.
      MessageAll = MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" ):ToAll()
      or
      MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" ):ToAll()
      or
      MessageAll = MESSAGE:New( "To all Players: BLUE has won! Each player of BLUE wins 50 points!", "End of Mission", 25, "Win" )
      MessageAll:ToAll()

MESSAGE:ToBlue()

  Sends a MESSAGE to the Blue coalition.

  ### Return value

  #MESSAGE:

  ### Usage:

      -- Send a message created with the @{New} method to the BLUE coalition.
      MessageBLUE = MESSAGE:New( "To the BLUE Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToBlue()
      or
      MESSAGE:New( "To the BLUE Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToBlue()
      or
      MessageBLUE = MESSAGE:New( "To the BLUE Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" )
      MessageBLUE:ToBlue()

MESSAGE:ToClient(Client)

  Sends a MESSAGE to a Client Group.

  Note that the Group needs to be defined within the ME with the skillset "Client" or "Player".

  ### Parameter

  - `Client#CLIENT Client` : is the Group of the Client.

  ### Return value

  #MESSAGE:

  ### Usage:

      -- Send the 2 messages created with the @{New} method to the Client Group.
      -- Note that the Message of MessageClient2 is overwriting the Message of MessageClient1.
      ClientGroup = Group.getByName( "ClientGroup" )

      MessageClient1 = MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ):ToClient( ClientGroup )
      MessageClient2 = MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ):ToClient( ClientGroup )
      or
      MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" ):ToClient( ClientGroup )
      MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" ):ToClient( ClientGroup )
      or
      MessageClient1 = MESSAGE:New( "Congratulations, you've just hit a target", "Score", 25, "Score" )
      MessageClient2 = MESSAGE:New( "Congratulations, you've just killed a target", "Score", 25, "Score" )
      MessageClient1:ToClient( ClientGroup )
      MessageClient2:ToClient( ClientGroup )

MESSAGE:ToCoalition(CoalitionSide)

  Sends a MESSAGE to a Coalition.

  ### Parameter

  - `CoalitionSide` : needs to be filled out by the defined structure of the standard scripting engine coalition.side.

  ### Return value

  #MESSAGE:

  ### Usage:

      -- Send a message created with the @{New} method to the RED coalition.
      MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToCoalition( coalition.side.RED )
      or
      MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToCoalition( coalition.side.RED )
      or
      MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" )
      MessageRED:ToCoalition( coalition.side.RED )

MESSAGE:ToRed()

  Sends a MESSAGE to the Red Coalition.

  ### Return value

  #MESSAGE:

  ### Usage:

      -- Send a message created with the @{New} method to the RED coalition.
      MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToRed()
      or
      MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" ):ToRed()
      or
      MessageRED = MESSAGE:New( "To the RED Players: You receive a penalty because you've killed one of your own units", "Penalty", 25, "Score" )
      MessageRED:ToRed()

## Type `MESSAGEQUEUE`

The MESSAGEQUEUE class

### Field(s)

MESSAGEQUEUE.ClientGroups

MESSAGEQUEUE.CoalitionSides

MESSAGEQUEUE:New(RefreshInterval)

  ### Parameter

  - `RefreshInterval` :

MESSAGEQUEUE:_DisplayMessages()

  This function is called automatically by the MESSAGEQUEUE scheduler.