Jump to content

Help required.


Rio

Recommended Posts

Guys, i'm having a problem with my chatbubbles. :| They Do Not Dissapear. If I Type Something, They Remain There Forever.

Can Anyone help me with it plz? I Also Wanted To Make It to LocalChat.

Here is my client-side Script:

  
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 
            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]) 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 
                        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("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) 
  
  

Here is my Server-side script:

  
  
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("onChatbubblesMessageIncome",source,message,messagetype) 
        end 
    end 
end 
  
function returnSettings() 
    local settings = 
    { 
    showtime, 
    characteraddition, 
    maxbubbles, 
    hideown 
    } 
    triggerClientEvent(source,"onBubbleSettingsReturn",getRootElement(),settings) 
end 
  
addEventHandler("onPlayerChat",getRootElement(),sendMessageToClient) 
addEvent("onAskForBubbleSettings",true) 
addEventHandler("onAskForBubbleSettings",getRootElement(),returnSettings) 
  

I Tried The Settings in my meta.xml where its written The time for the bubbles to disappear, but it does work out.

Here is my meta.xml:

  
  

  
    "Cryorustic" description="chatbubbles" type="script" version="1.0.6" /> 
  
    

Plz Guys Can Anyone Help.....

Edited by Guest
Link to comment

Fixed BB-Code formatting, so it's easier to see the code. No changes made to it.

Client:
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 
            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]) 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 
                        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("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("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("onChatbubblesMessageIncome",source,message,messagetype) 
        end 
    end 
end 
  
function returnSettings() 
    local settings = 
    { 
    showtime, 
    characteraddition, 
    maxbubbles, 
    hideown 
    } 
    triggerClientEvent(source,"onBubbleSettingsReturn",getRootElement(),settings) 
end 
  
addEventHandler("onPlayerChat",getRootElement(),sendMessageToClient) 
addEvent("onAskForBubbleSettings",true) 
addEventHandler("onAskForBubbleSettings",getRootElement(),returnSettings) 

Meta:

>     author="Cryorustic" description="chatbubbles" type="script" version="1.0.6" />     ="chatbubbles_server.lua" type="server"/>    ="chatbubbles_client.lua" type="client"/>     >                 name="*DefaultTime"        value="2"        accept="number"        desc="The default time every bubble will be visible."        />                 name="*PerCharacterAddition"        value="50"        accept="number"        desc="The time every character in a message adds to the total time visible."        />                 name="*MaxBubbles"        value="3"        accept="number/false"        desc="The max number of bubbles stacked above one's head. To disable enter 'false'."        />                 name="*HideOwn"        value="false"        accept="true/false"        desc="Decides whether players are able to see their own bubbles or not."        />     >    > 

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