OnPlayerChat: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
(fixed syntax)
 
(36 intermediate revisions by 22 users not shown)
Line 1: Line 1:
[[Category:Incomplete Event]]
__NOTOC__
__NOTOC__
This event is triggered when a player chats inside the chat box.
{{Server event}}
This event is triggered when a player chats inside the chatbox.


==Syntax==  
==Parameters==
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
void onPlayerChat( string message, bool teamchat )         
string message, int messageType
</syntaxhighlight>  
</syntaxhighlight>  


==Variables==
*'''message''': a [[string]] representing the message typed into the chat.
*'''player''': A player element refering to the player who is chatting the message
*'''messageType''': an [[int]] value representing the message type:
*'''message''': A string representing the message typed into the chat
{{Message Types}}


===Canceling===
==Source==
If this event is [[Events#Canceling|canceled]], the game's chatsystem won't deliver the posts. Use [[outputChatBox]] to send the messages then.
The [[event system#Event source|source]] of this event is the [[player]] who sent the chatbox message.
 
==Cancel effect==
If this event is [[Event system#Canceling|canceled]], the game's chat system won't deliver the posts. You may use [[outputChatBox]] to send the messages then.
Cancelling this event also means the chat will not appear in the server console or logs. If you want chat logging, you will have to add a call to [[outputServerLog]] - See the second example.
 
==Examples==
 
<section name="Example 1" class="server" show="true">
This example limits receiving of chat messages to area around the player who sent the message, also blocking action and team text.


==Example==
This example adds the /me command into the script.  For example, if a player called Bob types "me likes pie" in console, it will display "* Bob likes pie" in the chatbox.
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
addEventHandler ( "onPlayerChat ", getRootElement(), "onPlayerChat" ) -- add an event handler for onPlayerChat
local chatRadius = 20 -- define our chat radius
function onPlayerChat ( player, message )
 
  if ( strtok ( message , 1, 32 ) == "!createhydra" ) then
function onPlayerChatSendMessageToNearbyPlayers(messageText, messageType)
    x, y, z = getElementPosition ( player )
local normalMessage = (messageType == 0) -- we will only send normal chat messages, action and team types will be ignored
    createVehicle ( 520, x + 5, y, z )
 
    outputChatBox("You got a hydra",player)
if (not normalMessage) then -- it's not normal message
  end
return false -- do not continue
end
 
local playerName = getPlayerName(source)
local playerX, playerY, playerZ = getElementPosition(source) -- get position of player who sent the message
local playerInterior = getElementInterior(source) -- get interior of same player
local playerDimension = getElementDimension(source) -- dimension as well
local nearbyPlayers = getElementsWithinRange(playerX, playerY, playerZ, chatRadius, "player", playerInterior, playerDimension) -- get nearby players within given radius
local messageToOutput = playerName..": "..messageText
 
outputChatBox(messageToOutput, nearbyPlayers, 255, 255, 255, true) -- output message to them
cancelEvent() -- block the original message by cancelling this event
end
end
addEventHandler("onPlayerChat", root, onPlayerChatSendMessageToNearbyPlayers)
</syntaxhighlight>
</syntaxhighlight>
</section>
<section name="Example 2" class="server" show="true">
This example implements colored player names in chat.
<syntaxhighlight lang="lua">
--This function is executed when a player joins, it sets the player's name-tag color to a random color.
local function playerJoin()
local red, green, blue = math.random (50, 255), math.random (50, 255), math.random (50, 255)
        setPlayerNametagColor(source, red, green, blue)
end
addEventHandler ("onPlayerJoin", root, playerJoin)
--This function is executed when a player says something in chat, it outputs the player's message, with their nick colored to match their name tag color.
local function playerChat(message, messageType)
if messageType == 0 then --Global (main) chat
                cancelEvent()
                local red, green, blue = getPlayerNametagColor(source)
outputChatBox(getPlayerName(source)..": #FFFFFF"..message, root, red, green, blue, true )
outputServerLog("CHAT: "..getPlayerName(source)..": "..message) -- Because we cancelled the onPlayerChat event, we need to log chat manually.
end
end
addEventHandler("onPlayerChat", root, playerChat)
</syntaxhighlight>
</section>
<section name="Example 3" class="server" show="true">
This is a script that kills any player that says 'kill'.
<syntaxhighlight lang="lua">
function onChat(message, messageType)
    if string.find(message, 'kill') then  -- Searches for the string 'kill' in the message sent
        killPed ( source, source ) -- Kills that player that typed the string 'kill'
    end
end
addEventHandler("onPlayerChat", root, onChat)
</syntaxhighlight>
</section>
{{See also/Server event|Player events}}


==See Also==
[[ru:onPlayerChat]]
{{Event_functions}}
* [[Gettok]]
* [[Split]]

Latest revision as of 16:02, 3 May 2024

This event is triggered when a player chats inside the chatbox.

Parameters

string message, int messageType
  • message: a string representing the message typed into the chat.
  • messageType: an int value representing the message type:
  • 0: normal message
  • 1: action message (/me)
  • 2: team message
  • 3: private message
  • 4: internal message

Source

The source of this event is the player who sent the chatbox message.

Cancel effect

If this event is canceled, the game's chat system won't deliver the posts. You may use outputChatBox to send the messages then. Cancelling this event also means the chat will not appear in the server console or logs. If you want chat logging, you will have to add a call to outputServerLog - See the second example.

Examples

Click to collapse [-]
Example 1

This example limits receiving of chat messages to area around the player who sent the message, also blocking action and team text.

local chatRadius = 20 -- define our chat radius

function onPlayerChatSendMessageToNearbyPlayers(messageText, messageType)
	local normalMessage = (messageType == 0) -- we will only send normal chat messages, action and team types will be ignored

	if (not normalMessage) then -- it's not normal message
		return false -- do not continue
	end

	local playerName = getPlayerName(source)
	local playerX, playerY, playerZ = getElementPosition(source) -- get position of player who sent the message
	local playerInterior = getElementInterior(source) -- get interior of same player
	local playerDimension = getElementDimension(source) -- dimension as well
	local nearbyPlayers = getElementsWithinRange(playerX, playerY, playerZ, chatRadius, "player", playerInterior, playerDimension) -- get nearby players within given radius
	local messageToOutput = playerName..": "..messageText

	outputChatBox(messageToOutput, nearbyPlayers, 255, 255, 255, true) -- output message to them
	cancelEvent() -- block the original message by cancelling this event
end
addEventHandler("onPlayerChat", root, onPlayerChatSendMessageToNearbyPlayers)
Click to collapse [-]
Example 2

This example implements colored player names in chat.

--This function is executed when a player joins, it sets the player's name-tag color to a random color.

local function playerJoin()
	local red, green, blue = math.random (50, 255), math.random (50, 255), math.random (50, 255)
        setPlayerNametagColor(source, red, green, blue)
end
addEventHandler ("onPlayerJoin", root, playerJoin)

--This function is executed when a player says something in chat, it outputs the player's message, with their nick colored to match their name tag color.

local function playerChat(message, messageType)
	if messageType == 0 then --Global (main) chat
                cancelEvent()
                local red, green, blue = getPlayerNametagColor(source)
		outputChatBox(getPlayerName(source)..": #FFFFFF"..message, root, red, green, blue, true )
		outputServerLog("CHAT: "..getPlayerName(source)..": "..message) -- Because we cancelled the onPlayerChat event, we need to log chat manually.
	end
end
addEventHandler("onPlayerChat", root, playerChat)


Click to collapse [-]
Example 3

This is a script that kills any player that says 'kill'.

function onChat(message, messageType)
    if string.find(message, 'kill') then  -- Searches for the string 'kill' in the message sent
        killPed ( source, source ) -- Kills that player that typed the string 'kill'
    end
end
addEventHandler("onPlayerChat", root, onChat)

See Also

Player events


Event functions