OnPlayerChat: Difference between revisions
Jump to navigation
Jump to search
m (See Also for server events) |
(Fixed incorrect argument provided to an example (nearbyPlayer)) |
||
(23 intermediate revisions by 16 users not shown) | |||
Line 1: | Line 1: | ||
__NOTOC__ | __NOTOC__ | ||
{{Server event}} | {{Server event}} | ||
This event is triggered when a player chats inside the | This event is triggered when a player chats inside the chatbox. | ||
==Parameters== | ==Parameters== | ||
Line 8: | Line 8: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
*'''message''': | *'''message''': a [[string]] representing the message typed into the chat. | ||
*'''messageType''': | *'''messageType''': an [[int]] value representing the message type: | ||
**'''0''': normal message | **'''0''': normal message | ||
**'''1''': action message (/me) | **'''1''': action message (/me) | ||
Line 19: | Line 19: | ||
==Cancel effect== | ==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. | 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. | |||
==Example== | ==Examples== | ||
<section name="Example 1" class="server" show="true"> | |||
This example limits receiving of chat messages to a spherical area around the player who sent the message, also blocking action and team text. | This example limits receiving of chat messages to a spherical area around the player who sent the message, also blocking action and team text. | ||
<syntaxhighlight lang="lua"> | <syntaxhighlight lang="lua"> | ||
-- define our chat radius | -- define our chat radius | ||
Line 27: | Line 31: | ||
-- define a handler that will distribute the message to all nearby players | -- define a handler that will distribute the message to all nearby players | ||
function sendMessageToNearbyPlayers( message, messageType ) | function sendMessageToNearbyPlayers(message, messageType) | ||
-- we will only send normal chat messages, action and team types will be ignored | -- we will only send normal chat messages, action and team types will be ignored | ||
if messageType == 0 then | if messageType == 0 then | ||
-- get the chatting player's position | -- get the chatting player's position | ||
local | local posX1, posY1, posZ1 = getElementPosition(source) | ||
-- | -- loop through all player and check distance | ||
for id, player in ipairs(getElementsByType("player")) do | |||
local posX2, posY2, posZ2 = getElementPosition(player) | |||
if getDistanceBetweenPoints3D(posX1, posY1, posZ1, posX2, posY2, posZ2) <= chatRadius then | |||
outputChatBox(message, player) | |||
end | |||
end | end | ||
end | end | ||
-- block the original message by cancelling this event | |||
cancelEvent() | |||
end | end | ||
-- attach our new chat handler to onPlayerChat | -- attach our new chat handler to onPlayerChat | ||
addEventHandler( "onPlayerChat", getRootElement(), sendMessageToNearbyPlayers ) | addEventHandler( "onPlayerChat", getRootElement(), sendMessageToNearbyPlayers ) | ||
</syntaxhighlight> | |||
</section> | |||
-- | |||
function | <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)--NOTE: Beacuse we cancelled the onPlayerChat event, we need to log chat manually. | |||
end | |||
end | end | ||
addEventHandler("onPlayerChat", root, playerChat) | |||
addEventHandler( "onPlayerChat", | |||
</syntaxhighlight> | </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 --End of the function | |||
addEventHandler("onPlayerChat", getRootElement(), onChat) | |||
</syntaxhighlight> | |||
</section> | |||
{{See also/Server event|Player events}} | {{See also/Server event|Player events}} | ||
[[ru:onPlayerChat]] |
Revision as of 15:53, 22 January 2019
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
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 1This example limits receiving of chat messages to a spherical area around the player who sent the message, also blocking action and team text.
-- define our chat radius local chatRadius = 20 --units -- define a handler that will distribute the message to all nearby players function sendMessageToNearbyPlayers(message, messageType) -- we will only send normal chat messages, action and team types will be ignored if messageType == 0 then -- get the chatting player's position local posX1, posY1, posZ1 = getElementPosition(source) -- loop through all player and check distance for id, player in ipairs(getElementsByType("player")) do local posX2, posY2, posZ2 = getElementPosition(player) if getDistanceBetweenPoints3D(posX1, posY1, posZ1, posX2, posY2, posZ2) <= chatRadius then outputChatBox(message, player) end end end -- block the original message by cancelling this event cancelEvent() end -- attach our new chat handler to onPlayerChat addEventHandler( "onPlayerChat", getRootElement(), sendMessageToNearbyPlayers )
Click to collapse [-]
Example 2This 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)--NOTE: Beacuse we cancelled the onPlayerChat event, we need to log chat manually. end end addEventHandler("onPlayerChat", root, playerChat)
Click to collapse [-]
Example 3This 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 --End of the function addEventHandler("onPlayerChat", getRootElement(), onChat)
See Also
Player events
- onPlayerACInfo
- onPlayerBan
- onPlayerChangeNick
- onPlayerChat
- onPlayerClick
- onPlayerCommand
- onPlayerConnect
- onPlayerContact
- onPlayerDamage
- onPlayerJoin
- onPlayerLogin
- onPlayerLogout
- onPlayerMarkerHit
- onPlayerMarkerLeave
- onPlayerModInfo
- onPlayerMute
- onPlayerNetworkStatus
- onPlayerPickupHit
- onPlayerPickupLeave
- onPlayerPickupUse
- onPlayerPrivateMessage
- onPlayerQuit
- onPlayerScreenShot
- onPlayerSpawn
- onPlayerStealthKill
- onPlayerTarget
- onPlayerUnmute
- onPlayerVehicleEnter
- onPlayerVehicleExit
- onPlayerVoiceStart
- onPlayerVoiceStop
- onPlayerWasted
- onPlayerWeaponFire
- onPlayerWeaponSwitch
Event functions
Shared