Skip to content

Add chatmanager resource #661

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 0 additions & 16 deletions [gamemodes]/[assault]/assault/assault.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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 ()
Expand Down Expand Up @@ -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 )
Expand Down
1 change: 1 addition & 0 deletions [gamemodes]/[play]/play/meta.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
<include resource="superman"/>
<include resource="hedit"/>
<include resource="mapfixes"/>
<include resource="chatmanager" />

<script src="play_config.lua" type="server"/>
<script src="play_players.lua" type="server"/>
Expand Down
17 changes: 0 additions & 17 deletions [gamemodes]/[tdm]/tdma/Main/tdma_core.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
32 changes: 0 additions & 32 deletions [gameplay]/freeroam/fr_server.lua
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
local g_PlayerData = {}
local g_VehicleData = {}
local chatTime = {}
local lastChatMessage = {}

g_ArmedVehicles = {
[425] = true,
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)

Expand Down
2 changes: 0 additions & 2 deletions [gameplay]/freeroam/meta.xml
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,6 @@
-->
<setting name="*vehicles/disallowed_warp" value="[[425, 520, 476, 447, 464, 432]]" />

<setting name="*chat/mainChatDelay" value="1000" /> <!-- Miliseconds between each message a player can send through main chat -->
<setting name="*chat/blockRepeatMessages" value="true" /> <!-- Prevent a player from saying the same thing twice in a row to spam -->
<setting name="*gui/antiram" value="true" /> <!-- Allow player to use vehicle ghostmode (anti-ram) from F1? -->
<setting name="*gui/disablewarp" value="true" /> <!-- Allow player to prevent others warping to them from F1? -->
<setting name="*gui/disableknife" value="true" /> <!-- Allow player to prevent themselves from getting knifekilled and vice versa (instakilled from behind) from F1? -->
Expand Down
31 changes: 1 addition & 30 deletions [gameplay]/playercolors/playercolors.lua
Original file line number Diff line number Diff line change
@@ -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)
Expand All @@ -11,45 +9,18 @@ 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
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
58 changes: 58 additions & 0 deletions [managers]/chatmanager/chatmanager_server.lua
Original file line number Diff line number Diff line change
@@ -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
21 changes: 21 additions & 0 deletions [managers]/chatmanager/meta.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<meta>
<info author="MTA contributors (github.com/multitheftauto/mtasa-resources)" version="1.0" name="Chat Manager" description="Chat manager with player/team colors and spam protection." type="script" />
<script src="chatmanager_server.lua" type="server"/>

<settings>


<setting name="*mainChatDelay" value="1000" /> <!-- Miliseconds between each message a player can send through main chat -->
<setting name="*blockRepeatMessages" value="true" /> <!-- Prevent a player from saying the same thing twice in a row to spam -->
<setting name="*removeHex" value="false"
friendlyname="Remove HEX Codes"
accept="true,false"
desc="Setting this to true will remove all HEX codes from players in chat."
/>
<setting name="*nameColorMode" value="nametag"
friendlyname="Name Color Mode"
accept="nametag,team"
desc="Sets the color source for player names in chat."
/>
</settings>
</meta>