diff --git a/[gamemodes]/[assault]/assault/assault.lua b/[gamemodes]/[assault]/assault/assault.lua
index 7e4aad6cc..977379541 100644
--- a/[gamemodes]/[assault]/assault/assault.lua
+++ b/[gamemodes]/[assault]/assault/assault.lua
@@ -944,21 +944,6 @@ function createHelpText()
return helpTable
end
-function onPlayerChat( message, theType )
- if theType == 0 then
- cancelEvent()
- message = string.gsub(message, "#%x%x%x%x%x%x", "")
- local team = getPlayerTeam( source )
- local playerName = getPlayerName( source )
- if (team) then
- local r,g,b = getTeamColor(team)
- outputChatBox( playerName..":#FFFFFF "..message,root,r,g,b, true )
- else
- outputChatBox( playerName..": "..message )
- end
- outputServerLog( "CHAT: " .. playerName .. ": " .. message )
- end
-end
function onPlayerJoin ()
@@ -1524,7 +1509,6 @@ addEventHandler( "onPlayerSpawn", root, onPlayerSpawn )
addEventHandler( "onPlayerWasted", root, onPlayerWasted )
addEventHandler( "onPlayerJoin", root, onPlayerJoin )
addEventHandler( "onPlayerQuit", root, onPlayerQuit )
-addEventHandler( "onPlayerChat", root, onPlayerChat )
-- Vehicle Events
addEventHandler ( "onVehicleEnter", root, onVehicleEnter )
diff --git a/[gamemodes]/[play]/play/meta.xml b/[gamemodes]/[play]/play/meta.xml
index 1639c2146..31a8e2168 100644
--- a/[gamemodes]/[play]/play/meta.xml
+++ b/[gamemodes]/[play]/play/meta.xml
@@ -6,6 +6,7 @@
+
diff --git a/[gamemodes]/[tdm]/tdma/Main/tdma_core.lua b/[gamemodes]/[tdm]/tdma/Main/tdma_core.lua
index 565bac3fb..e787cfbe2 100644
--- a/[gamemodes]/[tdm]/tdma/Main/tdma_core.lua
+++ b/[gamemodes]/[tdm]/tdma/Main/tdma_core.lua
@@ -332,23 +332,6 @@ function xonPlayerWasted ( ammo, attacker, weapon, bodypart )
end
addEventHandler ( "onPlayerWasted", root, xonPlayerWasted )
-function onChat ( message, theType )
- if theType == 0 then
- cancelEvent()
- message = string.gsub(message, "#%x%x%x%x%x%x", "")
- local team = getPlayerTeam ( source )
- local bastidName = getPlayerName ( source )
- if ( team ) then
- local r, g, b = getTeamColor ( team )
- outputChatBox ( bastidName..":#FFFFFF "..message, root, r, g, b, true )
- else
- outputChatBox ( bastidName..": "..message )
- end
- outputServerLog( "CHAT: " .. bastidName .. ": " .. message )
- end
-end
-addEventHandler ( "onPlayerChat", root, onChat )
-
function updateKills( idPlayer, idTeam )
if ( tonumber(gameMaxKills) > 0 ) then
if xDebug then outputDebugString ( "Kills for team before are: " .. idTeam.kills ) end
diff --git a/[gameplay]/freeroam/fr_server.lua b/[gameplay]/freeroam/fr_server.lua
index b9736dec9..a8c32a453 100644
--- a/[gameplay]/freeroam/fr_server.lua
+++ b/[gameplay]/freeroam/fr_server.lua
@@ -1,7 +1,5 @@
local g_PlayerData = {}
local g_VehicleData = {}
-local chatTime = {}
-local lastChatMessage = {}
g_ArmedVehicles = {
[425] = true,
@@ -447,34 +445,6 @@ function fadeVehiclePassengersCamera(toggle)
end
end
-addEventHandler('onPlayerChat', root,
- function(msg, type)
- if type == 0 then
- cancelEvent()
- if not hasObjectPermissionTo(source, "command.kick") and not hasObjectPermissionTo(source, "command.mute") then
- if chatTime[source] and chatTime[source] + tonumber(get("*chat/mainChatDelay")) > getTickCount() then
- outputChatBox("Stop spamming main chat!", source, 255, 0, 0)
- return
- else
- chatTime[source] = getTickCount()
- end
- if get("*chat/blockRepeatMessages") == "true" and lastChatMessage[source] and lastChatMessage[source] == msg then
- outputChatBox("Stop repeating yourself!", source, 255, 0, 0)
- return
- else
- lastChatMessage[source] = msg
- end
- end
- if isElement(source) then
- local r, g, b = getPlayerNametagColor(source)
- outputChatBox(getPlayerName(source) .. ': #FFFFFF' .. stripHex(msg), root, r, g, b, true)
- outputServerLog( "CHAT: " .. getPlayerName(source) .. ": " .. msg )
- end
- end
- end
-)
-
-
addEventHandler('onVehicleEnter', root,
function(player, seat)
if not g_VehicleData[source] then
@@ -599,8 +569,6 @@ function quitHandler(player)
table.each(g_PlayerData[source].vehicles, unloadVehicle)
removeEventHandler("onFreeroamLocalSettingChange",source,onLocalSettingChange)
g_PlayerData[source] = nil
- chatTime[source] = nil
- lastChatMessage[source] = nil
end
addEventHandler('onPlayerQuit', root, quitHandler)
diff --git a/[gameplay]/freeroam/meta.xml b/[gameplay]/freeroam/meta.xml
index 5749c7450..2d6319a1b 100644
--- a/[gameplay]/freeroam/meta.xml
+++ b/[gameplay]/freeroam/meta.xml
@@ -98,8 +98,6 @@
-->
-
-
diff --git a/[gameplay]/playercolors/playercolors.lua b/[gameplay]/playercolors/playercolors.lua
index 08bc6ca2d..a1395c5d6 100644
--- a/[gameplay]/playercolors/playercolors.lua
+++ b/[gameplay]/playercolors/playercolors.lua
@@ -1,7 +1,5 @@
local lowerBound, upperBound = unpack(get("color_range"))
-local freeroamRunning = false
-
local function randomizePlayerColor(player)
player = player or source
local r, g, b = math.random(lowerBound, upperBound), math.random(lowerBound, upperBound), math.random(lowerBound, upperBound)
@@ -11,11 +9,7 @@ addEventHandler("onPlayerJoin", root, randomizePlayerColor)
local function setAllPlayerColors()
for _, player in ipairs(getElementsByType("player")) do
- if eventName == "onResourceStop" then
- setPlayerNametagColor(player, false)
- else
- randomizePlayerColor(player)
- end
+ randomizePlayerColor(player)
end
end
-- mapmanager resets player colors to white when the map ends
@@ -23,33 +17,10 @@ addEventHandler("onGamemodeMapStart", root, setAllPlayerColors)
local function handleResourceStartStop(res)
if res == resource then
- local freeroamResource = getResourceFromName("freeroam")
- if freeroamResource then
- freeroamRunning = getResourceState(freeroamResource) == "running"
- end
setAllPlayerColors()
- elseif getResourceName(res) == "freeroam" then
- freeroamRunning = eventName == "onResourceStart"
end
end
addEventHandler("onResourceStart", root, handleResourceStartStop)
addEventHandler("onResourceStop", root, handleResourceStartStop)
-addEventHandler('onPlayerChat', root,
- function(msg, type)
- if type == 0 then
- if freeroamRunning then
- return -- Let freeroam handle chat
- end
- cancelEvent()
- local r, g, b = getPlayerColor(source)
- local name = getPlayerName(source)
- msg = msg:gsub('#%x%x%x%x%x%x', '')
- outputChatBox( name.. ': #FFFFFF' .. msg, root, r, g, b, true)
- outputServerLog( "CHAT: " .. name .. ": " .. msg )
- end
- end
-)
-getPlayerColor = getPlayerNametagColor
-getPlayerColour = getPlayerNametagColor
diff --git a/[managers]/chatmanager/chatmanager_server.lua b/[managers]/chatmanager/chatmanager_server.lua
new file mode 100644
index 000000000..7e31d6f8f
--- /dev/null
+++ b/[managers]/chatmanager/chatmanager_server.lua
@@ -0,0 +1,58 @@
+local chatTime = {}
+local lastChatMessage = {}
+local _getPlayerName = getPlayerName
+
+function chatHandler(msg, type)
+ if type == 0 then
+ cancelEvent()
+ if not hasObjectPermissionTo(source, "command.kick") and not hasObjectPermissionTo(source, "command.mute") then
+ if chatTime[source] and chatTime[source] + tonumber(get("*mainChatDelay")) > getTickCount() then
+ outputChatBox("Stop spamming main chat!", source, 255, 0, 0)
+ return
+ else
+ chatTime[source] = getTickCount()
+ end
+ if get("*blockRepeatMessages") == "true" and lastChatMessage[source] and lastChatMessage[source] == msg then
+ outputChatBox("Stop repeating yourself!", source, 255, 0, 0)
+ return
+ else
+ lastChatMessage[source] = msg
+ end
+ end
+ if isElement(source) then
+ local r, g, b = 255, 255, 255
+ if get("*nameColorMode") == "nametag" then
+ r, g, b = getPlayerNametagColor(source)
+ elseif get("*nameColorMode") == "team" then
+ local team = getPlayerTeam(source)
+ if (team) then
+ r, g, b = getTeamColor(team)
+ end
+ end
+
+ local playerName = getPlayerName(source)
+ outputChatBox(playerName .. ': #FFFFFF' .. stripHex(msg), root, r, g, b, true)
+ outputServerLog( "CHAT: " .. playerName .. ": " .. msg )
+ end
+ end
+end
+addEventHandler('onPlayerChat', root, chatHandler)
+
+function quitHandler()
+ chatTime[source] = nil
+ lastChatMessage[source] = nil
+end
+addEventHandler('onPlayerQuit', root, quitHandler)
+
+function getPlayerName(player)
+ return get("*removeHex") and _getPlayerName(player):gsub("#%x%x%x%x%x%x","") or _getPlayerName(player)
+end
+
+function stripHex(str)
+ local oldLen
+ repeat
+ oldLen = str:len()
+ str = str:gsub('#%x%x%x%x%x%x', '')
+ until str:len() == oldLen
+ return str
+end
\ No newline at end of file
diff --git a/[managers]/chatmanager/meta.xml b/[managers]/chatmanager/meta.xml
new file mode 100644
index 000000000..0ee24434d
--- /dev/null
+++ b/[managers]/chatmanager/meta.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+