Brendo Posted February 10, 2019 Share Posted February 10, 2019 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
Jonas^ Posted February 10, 2019 Share Posted February 10, 2019 Mostre como você tentou. 1 Link to comment
#DaNiLiN Posted February 10, 2019 Share Posted February 10, 2019 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 ) 1 Link to comment
Brendo Posted February 10, 2019 Author Share Posted February 10, 2019 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
Jonas^ Posted February 10, 2019 Share Posted February 10, 2019 (edited) @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 February 10, 2019 by OverKILL Link to comment
Brendo Posted February 10, 2019 Author Share Posted February 10, 2019 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
Jonas^ Posted February 10, 2019 Share Posted February 10, 2019 Apague a linha helpmanager do mtaserver Link to comment
Brendo Posted February 10, 2019 Author Share Posted February 10, 2019 41 minutes ago, OverKILL said: Apague a linha helpmanager do mtaserver Fiz isso, mais mesmo assim ainda inicia... Link to comment
Jonas^ Posted February 10, 2019 Share Posted February 10, 2019 Não tem como isso, tem algo errado, desligue o server depois delete a linha e salve e inicie o server novamente. Link to comment
Brendo Posted February 10, 2019 Author Share Posted February 10, 2019 25 minutes ago, OverKILL said: Não tem como isso, tem algo errado, desligue o server depois delete a linha e salve e inicie o server novamente. acredite, tem kkkkk tbm n sei como mais deve ser algum script q ta dando start nele vou ver se acho. Link to comment
Other Languages Moderators Lord Henry Posted February 10, 2019 Other Languages Moderators Share Posted February 10, 2019 Já tentou iniciar o servidor sem gamemode? No mtaserver.conf procure por Play e remova a linha dele. Da mesma forma que fez com o resource do helpmanager. Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now