Jump to content

[HELP] chat


K4stic

Recommended Posts

--Server side

local showtime = tonumber(get("chatbubbles.DefaultTime")) 
local characteraddition = tonumber(get("chatbubbles.PerCharacterAddition")) 
local maxbubbles = get("chatbubbles.MaxBubbles") 
if maxbubbles == "false" then maxbubbles = false else maxbubbles = tonumber(maxbubbles) end 
local hideown = get("chatbubbles.HideOwn") 
if hideown == "true" then hideown = true else hideown = false end 
  
function sendMessageToClient(message,messagetype) 
    if not wasEventCancelled() then 
            if messagetype == 0 or messagetype == 2 then 
            triggerClientEvent("onMessageIncome",source,message,messagetype) 
        end 
    end 
end 
  
function returnSettings() 
    local settings = 
    { 
    showtime, 
    characteraddition, 
    maxbubbles, 
    hideown 
    } 
    triggerClientEvent(source,"onBubbleSettingsReturn",getRootElement(),settings) 
end 
  
addEvent ( "onPlayerLocalChat", true ) 
addEventHandler("onPlayerLocalChat",getRootElement(),sendMessageToClient) 
addEvent("onAskForBubbleSettings",true) 
addEventHandler("onAskForBubbleSettings",getRootElement(),returnSettings) 
  

i fusion the chatbubbles with my Local chat but is no output the messages and no have errors

Sorry for my bad english

Edited by Guest
Link to comment
chat_range = 100 
  
addEventHandler("onPlayerJoin",getRootElement(), 
function () 
bindKey(source,"i","down","chatbox","localchat") 
end) 
  
addEventHandler("onResourceStart",getResourceRootElement(getThisResource()), 
function () 
for index, player in pairs(getElementsByType("player")) do 
bindKey(player,"i","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 
      outputChatBox("#FF6464(Local) "..nick..":#FFFFFF "..msg,getRootElement(),0,0,0,true) 
    end 
      triggerEvent ( "onPlayerLocalChat", player, msg ) 
  end 
end 
addCommandHandler("localchat",onChat) 
  
local showtime = tonumber(get("chatbubbles.DefaultTime")) 
local characteraddition = tonumber(get("chatbubbles.PerCharacterAddition")) 
local maxbubbles = get("chatbubbles.MaxBubbles") 
if maxbubbles == "false" then maxbubbles = false else maxbubbles = tonumber(maxbubbles) end 
local hideown = get("chatbubbles.HideOwn") 
if hideown == "true" then hideown = true else hideown = false end 
  
function sendMessageToClient(message,messagetype) 
    if not wasEventCancelled() then 
            if messagetype == 0 or messagetype == 2 then 
            triggerClientEvent("onMessageIncome",source,message,messagetype) 
        end 
    end 
end 
  
function returnSettings() 
    local settings = 
    { 
    showtime, 
    characteraddition, 
    maxbubbles, 
    hideown 
    } 
    triggerClientEvent(source,"onBubbleSettingsReturn",getRootElement(),settings) 
end 
  
addEvent ( "onPlayerLocalChat", true ) 
addEventHandler("onPlayerLocalChat",getRootElement(),sendMessageToClient) 
addEvent("onAskForBubbleSettings",true) 
addEventHandler("onAskForBubbleSettings",getRootElement(),returnSettings) 

Link to comment

Don't know how

--Client side

local textsToDraw = {} 
  
local hideown 
local showtime 
local characteraddition 
local maxbubbles 
  
local showthebubbles = true 
  
function income(message,messagetype) 
    if source ~= getLocalPlayer() or not hideown then 
        if messagetype == 2 then 
            if getPlayerTeam(source) == getPlayerTeam(getLocalPlayer()) then 
                addText(source,message,messagetype) 
            end 
        else 
            local message = string.gsub(message, "#%x%x%x%x%x%x", "") 
            local message = string.gsub(message, "#%x%x%x%x%x%x", "") 
            local message = string.gsub(message, "#%x%x%x%x%x%x", "") 
            addText(source,message,messagetype) 
        end 
    end 
end 
  
function addText(source,message,messagetype) 
    local notfirst = false 
    for i,v in ipairs(textsToDraw) do 
        if v[1] == source then 
            v[4] = v[4] + 1 
            notfirst = true 
        end 
    end 
    local infotable = {source,message,messagetype,0} 
    table.insert(textsToDraw,infotable) 
    if not notfirst then 
        setTimer(removeText,showtime + (#message * characteraddition),1,infotable) 
    end 
end 
  
function removeText(infotable) 
    for i,v in ipairs(textsToDraw) do 
        if v[1] == infotable[1] and v[2] == infotable[2] then 
            for i2,v2 in ipairs(textsToDraw) do 
                if v2[1] == v[1] and v[4] - v2[4] == 1 then 
                    setTimer(removeText,showtime + (#v2[2] * characteraddition),1,v2) 
                end 
            end 
            table.remove(textsToDraw,i) 
            break 
        end 
    end 
end 
  
function getTextsToRemove() 
    for i,v in ipairs(textsToDraw) do 
        if v[1] == source then 
            removeText(v) 
        end 
    end 
end 
  
function handleDisplay() 
    if showthebubbles then 
        for i,v in ipairs(textsToDraw) do 
            if isElement(v[1]) and isElementStreamedIn(v[1]) then 
                if getElementHealth(v[1]) > 0 then 
                    local camPosXl, camPosYl, camPosZl = getPedBonePosition (v[1], 6) 
                    local camPosXr, camPosYr, camPosZr = getPedBonePosition (v[1], 7) 
                    local x,y,z = (camPosXl + camPosXr) / 2, (camPosYl + camPosYr) / 2, (camPosZl + camPosZr) / 2 
                    --local posx,posy = getScreenFromWorldPosition(x,y,z+0.25) 
                    local cx,cy,cz = getCameraMatrix() 
                    local px,py,pz = getElementPosition(v[1]) 
                    local distance = getDistanceBetweenPoints3D(cx,cy,cz,px,py,pz) 
                    local posx,posy = getScreenFromWorldPosition(x,y,z+0.020*distance+0.10) 
                    local veh1 = getPedOccupiedVehicle(localPlayer) 
                    local veh2 = getPedOccupiedVehicle(v[1]) 
                    if (not veh1) then veh1 = nil end 
                    if (not veh2) then veh2 = nil end 
                    if posx and distance <= 90 and ( isLineOfSightClear(cx,cy,cz,px,py,pz,true,true,false,true,false,true,true,veh1) or isLineOfSightClear(cx,cy,cz,px,py,pz,true,true,false,true,false,true,true,veh2) ) and ( not maxbubbles or  v[4] < maxbubbles ) then -- change this when multiple ignored elements can be specified 
                        local width = dxGetTextWidth(v[2],1,"default") 
  
                        dxDrawRectangle(posx - (3 + (0.5 * width)),posy - (2 + (v[4] * 20)),width + 5,19,tocolor(0,0,0,255)) 
                        dxDrawRectangle(posx - (6 + (0.5 * width)),posy - (2 + (v[4] * 20)),width + 11,19,tocolor(0,0,0,40)) 
                        dxDrawRectangle(posx - (8 + (0.5 * width)),posy - (1 + (v[4] * 20)),width + 15,17,tocolor(0,0,0,255)) 
                        dxDrawRectangle(posx - (10 + (0.5 * width)),posy - (1 + (v[4] * 20)),width + 19,17,tocolor(0,0,0,40)) 
                        dxDrawRectangle(posx - (10 + (0.5 * width)),posy - (v[4] * 20) + 1,width + 19,13,tocolor(0,0,0,255)) 
                        dxDrawRectangle(posx - (12 + (0.5 * width)),posy - (v[4] * 20) + 1,width + 23,13,tocolor(0,0,0,40)) 
                        dxDrawRectangle(posx - (12 + (0.5 * width)),posy - (v[4] * 20) + 4,width + 23,7,tocolor(0,0,0,255)) 
  
                        local r,g,b = 255,255,255 
                        if v[3] == 2 then 
                            r,g,b = getTeamColor(getPlayerTeam(v[1])) 
                        end 
  
                        dxDrawText(v[2],posx - (0.5 * width),posy - (v[4] * 20),posx - (0.5 * width),posy - (v[4] * 20),tocolor(r,g,b,255),1,"default","left","top",false,false,false) 
                    end 
                end 
            end 
        end 
    end 
end 
  
function getServerSettings() 
    triggerServerEvent("onAskForBubbleSettings",getLocalPlayer()) 
end 
  
function saveSettings(settings) 
    showtime = settings[1] 
    characteraddition = settings[2] 
    maxbubbles = settings[3] 
    hideown = settings[4] 
    addEvent("onMessageIncome",true) 
    addEventHandler("onMessageIncome",getRootElement(),income) 
end 
  
function toggleBubblesOnOff() 
    showthebubbles = not showthebubbles 
    outputChatBox("Toggled chatbubbles " ..( not showthebubbles and "#FF0000off#FFFFFF." or "#00FF00on#FFFFFF." ),255,255,255,true) 
end 
  
addEventHandler("onClientPlayerQuit",getRootElement(),getTextsToRemove) 
addEventHandler("onClientRender",getRootElement(),handleDisplay) 
addEventHandler("onClientResourceStart",getResourceRootElement(getThisResource()),getServerSettings) 
addEvent("onBubbleSettingsReturn",true) 
addEventHandler("onBubbleSettingsReturn",getRootElement(),saveSettings) 
addCommandHandler("chatbubbles",toggleBubblesOnOff) 
  

--Server side

local showtime = tonumber(get("chatbubbles.DefaultTime")) 
local characteraddition = tonumber(get("chatbubbles.PerCharacterAddition")) 
local maxbubbles = get("chatbubbles.MaxBubbles") 
if maxbubbles == "false" then maxbubbles = false else maxbubbles = tonumber(maxbubbles) end 
local hideown = get("chatbubbles.HideOwn") 
if hideown == "true" then hideown = true else hideown = false end 
  
function sendMessageToClient(message,messagetype) 
    if not wasEventCancelled() then 
            if messagetype == 0 or messagetype == 2 then 
            triggerClientEvent("onMessageIncome",source,message,messagetype) 
        end 
    end 
end 
  
function returnSettings() 
    local settings = 
    { 
    showtime, 
    characteraddition, 
    maxbubbles, 
    hideown 
    } 
    triggerClientEvent(source,"onBubbleSettingsReturn",getRootElement(),settings) 
end 
  
addEvent ( "onPlayerLocalChat", true ) 
addEventHandler("onPlayerLocalChat",getRootElement(),sendMessageToClient) 
addEvent("onAskForBubbleSettings",true) 
addEventHandler("onAskForBubbleSettings",getRootElement(),returnSettings) 

Edited by Guest
Link to comment

I'll give you the one I edited for my server:

-- client:

local textsToDraw = {} 
local hideown 
local showtime 
local characteraddition 
local maxbubbles 
local showthebubbles = true 
  
function income(player,message) 
    if player ~= getLocalPlayer() or not hideown then 
        addText(player,message,messagetype) 
    end 
end 
  
function addText(player,message,messagetype) 
    local notfirst = false 
    for i,v in ipairs(textsToDraw) do 
        if v[1] == player then 
            v[4] = v[4] + 1 
            notfirst = true 
        end 
    end 
    local infotable = {player,message,messagetype,0} 
    table.insert(textsToDraw,infotable) 
    if not notfirst then 
        setTimer(removeText,showtime + (#message * characteraddition),1,infotable) 
    end 
end 
  
function removeText(infotable) 
    for i,v in ipairs(textsToDraw) do 
        if v[1] == infotable[1] and v[2] == infotable[2] then 
            for i2,v2 in ipairs(textsToDraw) do 
                if v2[1] == v[1] and v[4] - v2[4] == 1 then 
                    setTimer(removeText,showtime + (#v2[2] * characteraddition),1,v2) 
                end 
            end 
            table.remove(textsToDraw,i) 
            break 
        end 
    end 
end 
  
function getTextsToRemove() 
    for i,v in ipairs(textsToDraw) do 
        if v[1] == source then 
            removeText(v) 
        end 
    end 
end 
  
function handleDisplay() 
    if showthebubbles then 
        for i,v in ipairs(textsToDraw) do 
            if isElement(v[1]) then 
                if getElementHealth(v[1]) > 0 then 
                    local camPosXl, camPosYl, camPosZl = getPedBonePosition (v[1], 6) 
                    local camPosXr, camPosYr, camPosZr = getPedBonePosition (v[1], 7) 
                    local x,y,z = (camPosXl + camPosXr) / 2, (camPosYl + camPosYr) / 2, (camPosZl + camPosZr) / 2 
                    --local posx,posy = getScreenFromWorldPosition(x,y,z+0.25) 
                    local cx,cy,cz = getCameraMatrix() 
                    local px,py,pz = getElementPosition(v[1]) 
                    local distance = getDistanceBetweenPoints3D(cx,cy,cz,px,py,pz) 
                    local posx,posy = getScreenFromWorldPosition(x,y,z+0.020*distance+0.10) 
                    local elementtoignore1 = getPedOccupiedVehicle(getLocalPlayer()) or getLocalPlayer() 
                    local elementtoignore2 = getPedOccupiedVehicle(v[1]) or v[1] 
                    if posx and distance <= 45 and ( isLineOfSightClear(cx,cy,cz,px,py,pz,true,true,false,true,false,true,true,elementtoignore1) or isLineOfSightClear(cx,cy,cz,px,py,pz,true,true,false,true,false,true,true,elementtoignore2) ) and ( not maxbubbles or  v[4] < maxbubbles ) then -- change this when multiple ignored elements can be specified 
                        local width = dxGetTextWidth(v[2],1,"default") 
                        dxDrawRectangle(posx - (3 + (0.5 * width)),posy - (2 + (v[4] * 20)),width + 5,19,tocolor(0,0,0,255)) 
                        dxDrawRectangle(posx - (6 + (0.5 * width)),posy - (2 + (v[4] * 20)),width + 11,19,tocolor(0,0,0,40)) 
                        dxDrawRectangle(posx - (8 + (0.5 * width)),posy - (1 + (v[4] * 20)),width + 15,17,tocolor(0,0,0,255)) 
                        dxDrawRectangle(posx - (10 + (0.5 * width)),posy - (1 + (v[4] * 20)),width + 19,17,tocolor(0,0,0,40)) 
                        dxDrawRectangle(posx - (10 + (0.5 * width)),posy - (v[4] * 20) + 1,width + 19,13,tocolor(0,0,0,255)) 
                        dxDrawRectangle(posx - (12 + (0.5 * width)),posy - (v[4] * 20) + 1,width + 23,13,tocolor(0,0,0,40)) 
                        dxDrawRectangle(posx - (12 + (0.5 * width)),posy - (v[4] * 20) + 4,width + 23,7,tocolor(0,0,0,255)) 
                        local r,g,b = 255,255,255                
                        dxDrawText(v[2],posx - (0.5 * width),posy - (v[4] * 20),posx - (0.5 * width),posy - (v[4] * 20),tocolor(r,g,b,255),1,"default","left","top",false,false,false) 
                    end 
                end 
            end 
        end 
    end 
end 
  
function getServerSettings() 
    triggerServerEvent("onAskForBubbleSettings",getLocalPlayer()) 
end 
  
function saveSettings(settings) 
    showtime = settings[1] 
    characteraddition = settings[2] 
    maxbubbles = settings[3] 
    hideown = settings[4] 
    addEvent("onChatbubblesMessageIncome",true) 
    addEventHandler("onChatbubblesMessageIncome",getRootElement(),income) 
end 
  
function toggleBubblesOnOff() 
    showthebubbles = not showthebubbles 
    outputChatBox("Toggled chatbubbles " ..( not showthebubbles and "#FF0000off#FFFFFF." or "#00FF00on#FFFFFF." ),255,255,255,true) 
end 
  
addEventHandler("onClientPlayerQuit",getRootElement(),getTextsToRemove) 
addEventHandler("onClientRender",getRootElement(),handleDisplay) 
addEventHandler("onClientResourceStart",getResourceRootElement(getThisResource()),getServerSettings) 
addEvent("onBubbleSettingsReturn",true) 
addEventHandler("onBubbleSettingsReturn",getRootElement(),saveSettings) 
addCommandHandler("chatbubbles",toggleBubblesOnOff) 

-- server:

local showtime = tonumber(get("DefaultTime")) 
local characteraddition = tonumber(get("PerCharacterAddition")) 
local maxbubbles = get("MaxBubbles") 
if maxbubbles == "false" then maxbubbles = false else maxbubbles = tonumber(maxbubbles) end 
local hideown = get("HideOwn") 
if hideown == "true" then hideown = true else hideown = false end 
  
function sendMessageToClient(player,message) 
    triggerClientEvent(source,"onChatbubblesMessageIncome",source,player,message) 
end 
addEvent ( "onLocalChatMessage", true ) 
addEventHandler("onLocalChatMessage",getRootElement(),sendMessageToClient) 
  
function returnSettings() 
    local settings = 
    { 
    showtime, 
    characteraddition, 
    maxbubbles, 
    hideown 
    } 
    triggerClientEvent(source,"onBubbleSettingsReturn",getRootElement(),settings) 
end 
  
addEvent("onAskForBubbleSettings",true) 
addEventHandler("onAskForBubbleSettings",getRootElement(),returnSettings) 

In your local chat script put this after the outputChatBox line:

triggerEvent ( "onLocalChatMessage", v, player, msg ) 

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...