Jump to content

Chat Server Log


Recommended Posts

Aqui estou eu de novo kkkkk, to aprendendo bastante ultimamente porém ainda leigo venho com uma questão sobre chat log...

tava com um sistema de local chat e de tags ai veio na mente "porque não juntar os dois? kkkk"  e fiz uma gambiarra e no final até que deu certo e como é um servidor de Roleplay eu queria fazer os sistemas de chat tipo, anonimo, fora do RP, twitter etc... peguei um código que vi aqui no fórum e taquei la dentro também e funcionou perfeitamente! só que como chat anonimo não aparece o nick do player vários players toxicos abusam do chat pra ofender/divulgar etc e eu queria por um chat log com nick do player no console igual os demais chats porém tentei de várias formas e não consegui to achando que é alguma variável que tenho q definir e n to sabendo...vou postar o código inteiro p vcs entenderem.

a parte do chat anonimo ta na linha 49, tem um comentario identificando.

código:

chat_range=100
 
addEventHandler("onPlayerJoin",getRootElement(),
function ()
bindKey(source,"u","down","chatbox","LocalChat")
end)
 
addEventHandler("onResourceStart",getResourceRootElement(getThisResource()),
function ()
for index, player in pairs(getElementsByType("player")) do
bindKey(player,"u","down","chatbox","LocalChat")
  end
end)
 
function isPlayerInRangeOfPoint(player,x,y,z,range)
   local px,py,pz=getElementPosition(player)
   return ((x-px)^2+(y-py)^2+(z-pz)^2)^0.5<=range
end
 
function onChat(player,_,...)
  local px,py,pz=getElementPosition(player)
  local msg = table.concat({...}, " ")
  local nick=getPlayerName(player)
	--local r,g,b = getTeamColor(getPlayerTeam(player))
  for _,v in ipairs(getElementsByType("player")) do
    if isPlayerInRangeOfPoint(v,px,py,pz,chat_range) then
		if isPlayerMuted ( player ) then
			outputChatBox ("Você está mutado!", player, 255, 128, 22, true)
			return
		end
		local new = ""
		local iter = 0
		msg = string.gsub(msg,"ـ","")
		for word in msg:gmatch("%S+") do
			iter = iter + 1
			if iter == 1 and word:len() > 0 then
				word = word:gsub("%a",string.upper,1)
			end
			new = new..word.." "
		end
		if new ~= "" then msg = new end
		text = msg
      outputChatBox("#FFFFFF[#FFFF00Local#FFFFFF] #FFFFFF"..nick..":#FFFFFF "..msg, v,255,255,255,true)
	  outputServerLog("Chat Local-" ..nick.. ": " .. text)
    end
  end
end
addCommandHandler("LocalChat",onChat)
addCommandHandler( "anonimo", function ( source, cmd, ... )	----------------------Parte do chat anônimo
	local message = #{...} > 0 and table.concat({...}," ") or nil
	if message then
		outputChatBox("#FEFEFE[Anônimo]#FFFFFF: "..message, root, 255, 255, 255, true)
	else
		outputChatBox( "[/"..cmd.."]: Digite uma mensagem!", source, 230, 20, 20 )
	end
end )







---------------------------------------------------------------------TAGS-------------------------------------------

function chatbox( text, type)
    if isObjectInACLGroup("user." .. getAccountName(getPlayerAccount(source)), aclGetGroup("Console")) then
 cancelEvent()
        local r, g, b = getPlayerNametagColor(source)
        outputChatBox(" #7EFF46♆ #00FF00D#FFFF00on#FF0000o#7EFF46 ♆ #FFF000|| #15FFB9" .. getPlayerName ( source ) .. " :#00FFFF " .. text, getRootElement(), r, g, b, true )
        outputServerLog("Console" .. getPlayerName ( source ) .. ": " .. text)


        elseif isObjectInACLGroup("user." .. getAccountName(getPlayerAccount(source)), aclGetGroup("VIP")) then
 cancelEvent()
        local r, g, b = getPlayerNametagColor(source)
        outputChatBox("#00FF2F/#03FFE1~#FFFF00V.I.P#03FFE1~#00FF2F/#FFFFFF" .. getPlayerName ( source ) .. ":#FF4400 " .. text, getRootElement(), r, g, b, true )
          outputServerLog("VIP" .. getPlayerName ( source ) .. ": " .. text)	


    elseif isObjectInACLGroup("user.*" .. getAccountName(getPlayerAccount(source)), aclGetGroup("Everyone")) then
        local r, g, b = getPlayerNametagColor(source)
        outputChatBox ( "#708090┣ #708090Cidadão#00FF00 ┫#FFFFFF" .. getPlayerName ( source ) .. ":#FFFFFF " .. text, getRootElement(), r, g, b, true )
        outputServerLog( "CHAT: " .. getPlayerName ( source ) .. ": " .. text)
    elseif isObjectInACLGroup("user.*" .. getAccountName(getPlayerAccount(source)), aclGetGroup("Everyone")) then

		end
end
addEventHandler("onPlayerChat", getRootElement(), chatbox)

 

Link to comment

Neste caso deveria ter usado outputDebugString

addCommandHandler( "anonimo", function ( source, cmd, ... )
	local message = #{...} > 0 and table.concat({...}," ") or nil
	if message then	   
		outputDebugString(" [Anônimo] ".. getPlayerName(source):gsub("#%x%x%x%x%x%x","").." "..message.."")	
		outputChatBox("#FEFEFE[Anônimo]#FFFFFF: "..message, root, 255, 255, 255, true)
	else
		outputChatBox( "[/"..cmd.."]: Digite uma mensagem!", source, 230, 20, 20 )
	end
end )

 

  • Thanks 1
Link to comment
3 minutes ago, danilin said:

Neste caso deveria ter usado outputDebugString


addCommandHandler( "anonimo", function ( source, cmd, ... )
	local message = #{...} > 0 and table.concat({...}," ") or nil
	if message then	   
		outputDebugString(" [Anônimo] ".. getPlayerName(source):gsub("#%x%x%x%x%x%x","").." "..message.."")	
		outputChatBox("#FEFEFE[Anônimo]#FFFFFF: "..message, root, 255, 255, 255, true)
	else
		outputChatBox( "[/"..cmd.."]: Digite uma mensagem!", source, 230, 20, 20 )
	end
end )

 

Resolveu valeu!

 

Surgiu outro problema, Quando alguem manda mensagem no T a mensagem sai duplicada, eu não tinha visto antes porque acontece somente com os outros consegue identificar oque ta dando isso?

Link to comment

@BrendoIndente o código também faça dessa forma pra ficar mais fácil de você entender:

 

chat_range = 100
 
addEventHandler("onPlayerJoin",getRootElement(),
function ()
	bindKey(source,"u","down","chatbox","LocalChat")
end)

addEventHandler("onResourceStart",getResourceRootElement(getThisResource()),
function ()
	for index, player in pairs(getElementsByType("player")) do
		bindKey(player,"u","down","chatbox","LocalChat")
	end
end)
 
function isPlayerInRangeOfPoint(player,x,y,z,range)
	local px,py,pz=getElementPosition(player)
	return ((x-px)^2+(y-py)^2+(z-pz)^2)^0.5<=range
end
 
function onChat(player,_,...)
  local px, py, pz = getElementPosition(player)
  local msg = table.concat({...}, " ")
  local nick = getPlayerName(player)
  for _,v in ipairs(getElementsByType("player")) do
	if isPlayerInRangeOfPoint(v,px,py,pz,chat_range) then
		if isPlayerMuted ( player ) then
			outputChatBox ("Você está mutado!", player, 255, 128, 22, true)
			return
		end
		local new = ""
		local iter = 0
		msg = string.gsub(msg,"ـ","")
		for word in msg:gmatch("%S+") do
			iter = iter + 1
			if iter == 1 and word:len() > 0 then
				word = word:gsub("%a",string.upper,1)
			end
			new = new..word.." "
		end
		if new ~= "" then msg = new end
			text = msg
			outputChatBox("#FFFFFF[#FFFF00Local#FFFFFF] #FFFFFF"..nick..":#FFFFFF "..msg, v,255,255,255,true)
			outputServerLog("Chat Local-" ..nick.. ": " .. text)
		end
	end	
end
addCommandHandler("LocalChat", onChat)

addCommandHandler( "anonimo", function (source, cmd, ...)
	local message = #{...} > 0 and table.concat({...}," ") or nil
	if message then
		outputChatBox("#FEFEFE[Anônimo]#FFFFFF: "..message, root, 255, 255, 255, true)
		outputDebugString("[Anônimo] "..getPlayerName(source)..": "..message.."")
	else
		outputChatBox( "[/"..cmd.."]: Digite uma mensagem!", source, 230, 20, 20 )
	end
end)

function chatbox (text, type)
	if isObjectInACLGroup("user." .. getAccountName(getPlayerAccount(source)), aclGetGroup("Console")) then
		cancelEvent()
		local r, g, b = getPlayerNametagColor(source)
		outputChatBox(" #7EFF46♆ #00FF00D#FFFF00on#FF0000o#7EFF46 ♆ #FFF000|| #15FFB9" .. getPlayerName ( source ) .. " :#00FFFF " .. text, getRootElement(), r, g, b, true )
		outputServerLog("Console" .. getPlayerName ( source ) .. ": " .. text)
	elseif isObjectInACLGroup("user." .. getAccountName(getPlayerAccount(source)), aclGetGroup("VIP")) then
		cancelEvent()
		local r, g, b = getPlayerNametagColor(source)
		outputChatBox("#00FF2F/#03FFE1~#FFFF00V.I.P#03FFE1~#00FF2F/#FFFFFF" .. getPlayerName ( source ) .. ":#FF4400 " .. text, getRootElement(), r, g, b, true )
		outputServerLog("VIP" .. getPlayerName ( source ) .. ": " .. text)	
	elseif isObjectInACLGroup("user.*" .. getAccountName(getPlayerAccount(source)), aclGetGroup("Everyone")) then
		local r, g, b = getPlayerNametagColor(source)
		outputChatBox ( "#708090┣ #708090Cidadão#00FF00 ┫#FFFFFF" .. getPlayerName ( source ) .. ":#FFFFFF " .. text, getRootElement(), r, g, b, true )
		outputServerLog( "CHAT: " .. getPlayerName ( source ) .. ": " .. text)
	elseif isObjectInACLGroup("user.*" .. getAccountName(getPlayerAccount(source)), aclGetGroup("Everyone")) then -- Não entendi o porque dessa linha aqui
	end -- Não faz sentido algumas coisas quando você indenta o código de maneira correta, como por exemplo essa linha 'elseif' mas não tem nada após ela apenas fechamento de if.
end
addEventHandler("onPlayerChat", getRootElement(), chatbox)

 

2 minutes ago, Brendo said:

Resolveu valeu!

 

Surgiu outro problema, Quando alguem manda mensagem no T a mensagem sai duplicada, eu não tinha visto antes porque acontece somente com os outros consegue identificar oque ta dando isso?

Isso pode ser o outro chat duplicando.

Edited by OverKILL
Link to comment
21 minutes ago, OverKILL said:

@BrendoIndente o código também faça dessa forma pra ficar mais fácil de você entender:

 


chat_range = 100
 
addEventHandler("onPlayerJoin",getRootElement(),
function ()
	bindKey(source,"u","down","chatbox","LocalChat")
end)

addEventHandler("onResourceStart",getResourceRootElement(getThisResource()),
function ()
	for index, player in pairs(getElementsByType("player")) do
		bindKey(player,"u","down","chatbox","LocalChat")
	end
end)
 
function isPlayerInRangeOfPoint(player,x,y,z,range)
	local px,py,pz=getElementPosition(player)
	return ((x-px)^2+(y-py)^2+(z-pz)^2)^0.5<=range
end
 
function onChat(player,_,...)
  local px, py, pz = getElementPosition(player)
  local msg = table.concat({...}, " ")
  local nick = getPlayerName(player)
  for _,v in ipairs(getElementsByType("player")) do
	if isPlayerInRangeOfPoint(v,px,py,pz,chat_range) then
		if isPlayerMuted ( player ) then
			outputChatBox ("Você está mutado!", player, 255, 128, 22, true)
			return
		end
		local new = ""
		local iter = 0
		msg = string.gsub(msg,"ـ","")
		for word in msg:gmatch("%S+") do
			iter = iter + 1
			if iter == 1 and word:len() > 0 then
				word = word:gsub("%a",string.upper,1)
			end
			new = new..word.." "
		end
		if new ~= "" then msg = new end
			text = msg
			outputChatBox("#FFFFFF[#FFFF00Local#FFFFFF] #FFFFFF"..nick..":#FFFFFF "..msg, v,255,255,255,true)
			outputServerLog("Chat Local-" ..nick.. ": " .. text)
		end
	end	
end
addCommandHandler("LocalChat", onChat)

addCommandHandler( "anonimo", function (source, cmd, ...)
	local message = #{...} > 0 and table.concat({...}," ") or nil
	if message then
		outputChatBox("#FEFEFE[Anônimo]#FFFFFF: "..message, root, 255, 255, 255, true)
		outputDebugString("[Anônimo] "..getPlayerName(source)..": "..message.."")
	else
		outputChatBox( "[/"..cmd.."]: Digite uma mensagem!", source, 230, 20, 20 )
	end
end)

function chatbox (text, type)
	if isObjectInACLGroup("user." .. getAccountName(getPlayerAccount(source)), aclGetGroup("Console")) then
		cancelEvent()
		local r, g, b = getPlayerNametagColor(source)
		outputChatBox(" #7EFF46♆ #00FF00D#FFFF00on#FF0000o#7EFF46 ♆ #FFF000|| #15FFB9" .. getPlayerName ( source ) .. " :#00FFFF " .. text, getRootElement(), r, g, b, true )
		outputServerLog("Console" .. getPlayerName ( source ) .. ": " .. text)
	elseif isObjectInACLGroup("user." .. getAccountName(getPlayerAccount(source)), aclGetGroup("VIP")) then
		cancelEvent()
		local r, g, b = getPlayerNametagColor(source)
		outputChatBox("#00FF2F/#03FFE1~#FFFF00V.I.P#03FFE1~#00FF2F/#FFFFFF" .. getPlayerName ( source ) .. ":#FF4400 " .. text, getRootElement(), r, g, b, true )
		outputServerLog("VIP" .. getPlayerName ( source ) .. ": " .. text)	
	elseif isObjectInACLGroup("user.*" .. getAccountName(getPlayerAccount(source)), aclGetGroup("Everyone")) then
		local r, g, b = getPlayerNametagColor(source)
		outputChatBox ( "#708090┣ #708090Cidadão#00FF00 ┫#FFFFFF" .. getPlayerName ( source ) .. ":#FFFFFF " .. text, getRootElement(), r, g, b, true )
		outputServerLog( "CHAT: " .. getPlayerName ( source ) .. ": " .. text)
	elseif isObjectInACLGroup("user.*" .. getAccountName(getPlayerAccount(source)), aclGetGroup("Everyone")) then -- Não entendi o porque dessa linha aqui
	end -- Não faz sentido algumas coisas quando você indenta o código de maneira correta, como por exemplo essa linha 'elseif' mas não tem nada após ela apenas fechamento de if.
end
addEventHandler("onPlayerChat", getRootElement(), chatbox)

 

Isso pode ser o outro chat duplicando.

 

Descobri oque era, a  tag  everyone tava sem o cancelEvent, Mais uma vez vlw. To com outra duvida kkkkk, Toda vez que abro o server, o help manager inicia também mesmo eu deixando o valor dele em "0" no mtaserver, e ter quer ficar desativando toda vez que inicio o server é chato pode me ajudar? seria mais adequado criar um novo tópico sobre?

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...