Dumper Posted May 12, 2018 Posted May 12, 2018 Hello, the following conversation bubble does not appear by other people. The writer see at the person c_chat local bubbles = {} -- {text, player, lastTick, alpha, yPos} local fontHeight = 22 local characteraddition = 50 local maxbubbles = 5 local selfVisible = true -- Want to see your own message? local timeVisible = 5000 local distanceVisible = 20 function addText(source, text, color, font, sticky, type) if getElementData(localPlayer, "graphic_chatbub") == "0" then return end if not bubbles[source] then bubbles[source] = {} end local tick = getTickCount() local info = { text = text, player = source, color = color or {255, 255, 255}, tick = tick, expires = tick + (timeVisible + #text * characteraddition), alpha = 0, sticky = sticky, type = type } if sticky then table.insert(bubbles[source], 1, info) else table.insert(bubbles[source], info) end if #bubbles[source] > maxbubbles then for k, v in ipairs(bubbles[source]) do if not v.sticky then table.remove(bubbles[source], k) break end end end end addEvent("addChatBubble", true) addEventHandler("addChatBubble", root, function(message, command) if source ~= localPlayer or selfVisible then if command == "ado" or command == "ame" then addText(source, message, { 255, 51, 102 }, "default-bold", false, command) else addText(source, message) end end end ) function removeTexts(player, type) local t = bubbles[player] or {} for i = #t, 1, -1 do if t[i].type == type then table.remove(t, i) end end if #t == 0 then bubbles[player] = nil end end -- Status addEventHandler("onClientElementDataChange", root, function(n) if n == "chat:status" and getElementType(source) == "player" then updateStatus(source, "status") end end) addEventHandler("onClientResourceStart", resourceRoot, function() for _, player in ipairs(getElementsByType("player")) do if getElementData(player, "chat:status") then updateStatus(player, "status") end end end) function updateStatus(source, n) removeTexts(source, n) if getElementData(source, "chat:status") then addText(source, getElementData(source, "chat:status"), {136, 87, 201}, "default-bold", true, n) end end -- -- outElastic | Got from https://github.com/EmmanuelOga/easing/blob/master/lib/easing.lua -- For all easing functions: -- t = elapsed time -- b = begin -- c = change == ending - beginning -- d = duration (total time) -- a: amplitud -- p: period local pi = math.pi function outElastic(t, b, c, d, a, p) if t == 0 then return b end t = t / d if t == 1 then return b + c end if not p then p = d * 0.3 end local s if not a or a < math.abs(c) then a = c s = p / 4 else s = p / (2 * pi) * math.asin(c/a) end return a * math.pow(2, -10 * t) * math.sin((t * d - s) * (2 * pi) / p) + c + b end local function renderChatBubbles() if getElementData(localPlayer, "graphic_chatbub") ~= "0" then local square = getElementData(localPlayer, "graphic_chatbub_square") ~= "0" local tick = getTickCount() local x, y, z = getElementPosition(localPlayer) for player, texts in pairs(bubbles) do if isElement(player) then for i, v in ipairs(texts) do if tick < v.expires or v.sticky then local px, py, pz = getElementPosition(player) local dim, pdim = getElementDimension(player), getElementDimension(localPlayer) local int, pint = getElementInterior(player), getElementInterior(localPlayer) if getDistanceBetweenPoints3D(x, y, z, px, py, pz) < distanceVisible and isLineOfSightClear ( x, y, z, px, py, pz, true, not isPedInVehicle(player), false, true) and pdim == dim and pint == int then v.alpha = v.alpha < 200 and v.alpha + 5 or v.alpha local bx, by, bz = getPedBonePosition(player, 6) local sx, sy = getScreenFromWorldPosition(bx, by, bz) local elapsedTime = tick - v.tick local duration = v.expires - v.tick if sx and sy then if not v.yPos then v.yPos = sy end local width = dxGetTextWidth(v.text:gsub("#%x%x%x%x%x%x", ""), 1, "default-bold") local yPos = outElastic(elapsedTime, v.yPos - 20, (sy - fontHeight*i ) - v.yPos - 10, 1000, 5, 500) if square then dxDrawRectangle(sx - (12 + (0.5 * width)), yPos - 2, width + 23, 19, tocolor(20, 20, 20, 200)) dxDrawRectangle(sx - (12 + (0.5 * width)), yPos + 16, width + 23, 1, tocolor(v.color[1], v.color[2], v.color[3], 255)) -- All but /say --(v.type == "ado" or v.type == "ame" or v.type == "status") and tocolor(v.color[1], v.color[2], v.color[3], 255) or tocolor(0, 0, 0, 255)) else dxDrawRectangle(sx - (3 + (0.5 * width)),yPos - 2,width + 5,19,tocolor(0,0,0,bg_color)) dxDrawRectangle(sx - (6 + (0.5 * width)),yPos - 2,width + 11,19,tocolor(0,0,0,40)) dxDrawRectangle(sx - (8 + (0.5 * width)),yPos - 1,width + 15,17,tocolor(0,0,0,bg_color)) dxDrawRectangle(sx - (10 + (0.5 * width)),yPos - 1,width + 19,17,tocolor(0,0,0,40)) dxDrawRectangle(sx - (10 + (0.5 * width)),yPos + 1,width + 19,13,tocolor(0,0,0,bg_color)) dxDrawRectangle(sx - (12 + (0.5 * width)),yPos + 1,width + 23,13,tocolor(0,0,0,40)) dxDrawRectangle(sx - (12 + (0.5 * width)),yPos + 4,width + 23,7,tocolor(0,0,0,bg_color)) end dxDrawText(v.text, sx - (0.5 * width), yPos, sx - (0.5 * width), yPos - (i * fontHeight), tocolor(unpack(v.color)), 1, "default-bold", "left", "top", false, false, false) end end else table.remove(bubbles[player], i) end end if #texts == 0 then bubbles[player] = nil end else bubbles[player] = nil end end end end addEventHandler("onClientPlayerQuit", root, function() bubbles[source] = nil end) addEventHandler("onClientRender", root, renderChatBubbles) -- s_chat.lua triggerClientEvent(source,"addChatBubble",source,message) Help me please...
TEDERIs Posted May 17, 2018 Posted May 17, 2018 Hi. Why is the triggerClientEvent function takes the source in a first argument? If you want to send a bubble to all of players you should switch it to the root element. This is my GitHub repository where you can find a lot of my work. And this is my YouTube channel with reviews of some resources. Good luck and enjoy MTA!
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