Mr.Mostafa Posted May 30, 2018 Share Posted May 30, 2018 السلام عليكم - دا مود الكتابة فوق الراس ابي اسوي له اكسبورت كيف ؟ -- -- dxCreateRoundedTexture -- https://github.com/Pioruniasty/MTA_rounded_rectangle -- https://forum.multitheftauto.com/viewtopic.php?f=108&t=96096 -- Author: Piorun -- All credits of this function to him -- function dxCreateRoundedTexture(text_width,text_height,radius) assert(text_width,"Missing argument 'text_width' at dxCreateRoundedTexture") assert(text_height,"Missing argument 'height' at dxCreateRoundedTexture") assert(radius,"Missing argument 'radius' at dxCreateRoundedTexture") if type(text_width) ~= "number" then outputDebugString("Bad argument @ 'dxCreateRoundedTexture' [Excepted number at argument 1, got " .. type(text_width) .. "]",2) return false end if type(text_height) ~= "number" then outputDebugString("Bad argument @ 'dxCreateRoundedTexture' [Excepted number at argument 2, got " .. type(text_height) .. "]",2) return false end if type(radius) ~= "number" then outputDebugString("Bad argument @ 'dxCreateRoundedTexture' [Excepted number at argument 3, got " .. type(radius) .. "]",2) return false end if text_width < 0 then outputDebugString("text_width can't be less than 0",1) return false end if text_height < 0 then outputDebugString("text_height can't be less than 0",1) return false end if radius < 0 or radius > 100 then outputDebugString("Parameter 'radius' can't be between 0 and 100",1) return false end local texture = DxTexture(text_width,text_height) local pix = texture:getPixels() radius = (radius * (text_height / 2)) / 100 for x=0,text_width do for y=0,text_height do if x >= radius and x <= text_width - radius then dxSetPixelColor(pix,x,y,255,255,255,255) end if y >= radius and y <= text_height - radius then dxSetPixelColor(pix,x,y,255,255,255,255) end if math.sqrt((x - radius)^2 + (y - radius)^2) < radius then dxSetPixelColor(pix,x,y,255,255,255,255) -- lewy gorny rog end if math.sqrt((x - (text_width - radius))^2 + (y - radius)^2) < radius then dxSetPixelColor(pix,x,y,255,255,255,255) -- prawy gorny rog end if math.sqrt((x - radius)^2 + (y - (text_height - radius))^2) < radius then dxSetPixelColor(pix,x,y,255,255,255,255) -- lewy dolny rog end if math.sqrt((x - (text_width - radius))^2 + (y - (text_height - radius))^2) < radius then dxSetPixelColor(pix,x,y,255,255,255,255) -- prawy dolny rog end end end texture:setPixels(pix) return texture end local selfVisible = true -- Want to see your own message? local messages = {} -- {text, player, lastTick, alpha, yPos} local textures = {} local timeVisible = 8500 local distanceVisible = 30 local bubble = true -- Rounded rectangle(true) or not(false) function addBubble(text, player, tick) if (not messages[player]) then messages[player] = {} end local width = dxGetTextWidth(text:gsub("#%x%x%x%x%x%x", ""), 1, "default-bold") local _texture = dxCreateRoundedTexture(width+16,20,100) table.insert(messages[player], {["text"] = text, ["player"] = player, ["tick"] = tick, ["endTime"] = tick + 2000, ["alpha"] = 0, ["texture"] = _texture}) end function removeBubble() table.remove(messages) end addEvent("onChatIncome", true) addEventHandler("onChatIncome", root, function(message, messagetype) if source ~= localPlayer then addBubble(message, source, getTickCount()) elseif selfVisible then addBubble(message, source, getTickCount()) end end ) -- outElastic | Got from https://github.com/EmmanuelOga/easing/blob/master/lib/easing.lua 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 addEventHandler("onClientRender", root, function() local tick = getTickCount() local x, y, z = getElementPosition(localPlayer) for _, pMessage in pairs(messages) do for i, v in ipairs(pMessage) do if isElement(v.player) then if tick-v.tick < timeVisible then local px, py, pz = getElementPosition(v.player) if getDistanceBetweenPoints3D(x, y, z, px, py, pz) < distanceVisible and isLineOfSightClear ( x, y, z, px, py, pz, true, not isPedInVehicle(v.player), false, true) then v.alpha = v.alpha < 200 and v.alpha + 5 or v.alpha local bx, by, bz = getPedBonePosition(v.player, 6) local sx, sy = getScreenFromWorldPosition(bx, by, bz) local elapsedTime = tick - v.tick local duration = v.endTime - v.tick local progress = elapsedTime / duration 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 = interpolateBetween ( v.yPos, 0, 0, sy - 22*i, 0, 0, progress, "OutElastic") local yPos = outElastic(elapsedTime, v.yPos, ( sy - 22*i ) - v.yPos, duration, 5) if bubble then dxDrawImage ( sx-width/2-10, yPos - 16, width+16, 20, v.texture, nil, nil, tocolor(0, 0, 0, v.alpha) ) else dxDrawRectangle(sx-width/2-10, yPos - 16, width+16, 20, tocolor(0, 0, 0, v.alpha)) end dxDrawText(v.text, sx-width/2-2, yPos - 14, width, 20, tocolor( 255, 255, 255, v.alpha+50), 1, "default-bold", "left", "top", false, false, false, true) end end else table.remove(messages[v.player], i) end else table.remove(messages[v.player], i) end end end end ) function outputMessage(element, text) assert(isElement(element), "outputMessage @ Bad argument: expected element at argument 1, got "..type(element).." "..tostring(element)) triggerClientEvent("onChatIncome", element, tostring(text)) end function sendMessageToClient(message,messagetype) if not wasEventCancelled() then if messagetype == 0 or messagetype == 2 then triggerClientEvent("onChatIncome", source, message, messagetype) end end end addEventHandler("onPlayerChat",getRootElement(),sendMessageToClient) <meta> <info author="Sasuke*" type="script" name="Bubble chat" version="1.2.2" /> <oop>true</oop> <script src="round.lua" type="client" /> <script src="client.lua" type="client" /> <script src="server.lua" type="server" /> <export function="outputMessage" type="server"/> </meta> Link to comment
#\_oskar_/# Posted May 30, 2018 Share Posted May 30, 2018 https://wiki.multitheftauto.com/wiki/Call Link to comment
Mr.Mostafa Posted May 30, 2018 Author Share Posted May 30, 2018 11 hours ago, #\_oskar_/# said: https://wiki.multitheftauto.com/wiki/Call ما فهمت الشرح مرة الحين انا اضيف دي للميتا - باسم المود ولا وش؟ <export function="setPlayerScoreboardForced" type="server"/> Link to comment
#\_oskar_/# Posted May 31, 2018 Share Posted May 31, 2018 exports["resource-name"]:outputMessage( element, text ) resource-name -- اسم المود 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