Herkese selam killmessages rectangle eklemeye çalıştım ama başaramadım çok karışık ne dxDrawText ne başka birşey kodlara bakındım oradanda birşey anlıyamadım killmessages kısmına nasıl dxDrawRectangle ekliyebilirim yardımcı olurmusnuz ?
local customKills = {}
local config = {
["lines"] = 5,
["startY"] = 0.35,
["textHeight"] = 16,
["iconPosOffY"] = -10,
["iconHeight"] = 20,
["iconSpacing"] = 4,
["defaultWeapon"] = 255,
["fadeTime"] = 5000,
["startFade"] = 15000,
["align"] = "right",
["startX"] = -10
}
local default = {
["lines"] = 5,
["startY"] = 0.25,
["textHeight"] = 16,
["iconPosOffY"] = -10,
["iconHeight"] = 20,
["iconSpacing"] = 4,
["defaultWeapon"] = 255,
["fadeTime"] = 5000,
["startFade"] = 15000,
["align"] = "right",
["startX"] = -10
}
local endTime
local screenX,screenY = guiGetScreenSize ()
local contentMessages = {}
local fadingLines = {}
---
local iconOrder = {}
function setupTextOnStart ( resource )
if resource ~= getThisResource() then return end
triggerServerEvent ( "onClientKillmessagesLoaded", getLocalPlayer() )
end
addEventHandler ( "onClientResourceStart", getRootElement(), setupTextOnStart )
addEvent ("doSetKillMessageStyle",true)
function setKillMessageStyle ( startX,startY,align,lines,fadeStart,fadeAnimTime )
if ( not startX ) then startX = default.startX end
if ( not startY ) then startY = default.startY end
if ( not align ) then align = default.align end
if ( not lines ) then lines = default.lines end
if ( not fadeStart ) then fadeStart = default.startFade end
if ( not fadeAnimTime ) then fadeAnimTime = default.fadeTime end
config.startX = startX
config.startY = startY
config.align = align
config.lines = lines
config.startFade = fadeStart
config.fadeTime = fadeAnimTime
if #contentMessages ~= 0 then
for i=1,config.lines do
if contentMessages[i] then
destroyLine ( i )
end
end
end
fadingLines = {}
killMessages = {}
if ( config.startY < 0 ) then
config.startY = screenY - math.abs(config.startY*screenY) - (config.iconHeight*config.lines)
config.startY = config.startY/screenY
end
createKillMessageGUI()
return true
end
addEventHandler ( "doSetKillMessageStyle",getRootElement(),setKillMessageStyle)
function createKillMessageGUI()
local gap = config.iconHeight - config.textHeight
gap = gap/2
for i=1,config.lines do
local y = config.startY*screenY + (config.iconHeight*(i-1))
y = y + gap
contentMessages[i] = { dxText:create("",0,y) }
end
endTime = config.fadeTime + config.startFade
end
function shiftUpGUI()
local i = 1
for i=config.lines,2,-1 do
local y = config.startY*screenY + (config.iconHeight*(i-1)) + (config.iconHeight - config.textHeight)/2
local targetY = config.startY*screenY + (config.iconHeight*(i-2)) + (config.iconHeight - config.textHeight)/2
if contentMessages[i] then
for k,part in ipairs(contentMessages[i]) do
local x,realY = getWidgetPosition(part)
local diffY = realY - y
setWidgetPosition(part,x,targetY + diffY)
end
end
end
for i=1,config.lines-1 do
---shift up the alpha too
local tick = fadingLines[i+1]
fadingLines[i] = tick
fadingLines[i+1] = nil
end
end
addEvent ( "doOutputMessage", true )
function outputMessage ( message, r, g, b, font )
if type(message) ~= "string" and type(message) ~= "table" then
outputDebugString ( "outputMessage - Bad 'message' argument", 0, 112, 112, 112 )
return false
end
if type(font) ~= "string" then
font = "sa-gothic"
end
r = tonumber(r) or 255
g = tonumber(g) or 255
b = tonumber(b) or 255
---shift everything up
shiftUpGUI()
--Delete the first line
destroyLine (1)
table.remove ( contentMessages, 1 )
if type(message) == "string" then
message = {message}
end
local y = config.startY*screenY + (config.iconHeight*(config.lines-1)) + (config.iconHeight - config.textHeight)/2
local startX = config.startX
if startX < 1 and startX > -1 then --auto calculate whether its relative or absolute
startX = screenX/startX --make it relative
end
if startX < 0 then
startX = screenX + startX
end
for i,part in ipairs(message) do
if type(part) == "table" and part[1] == "image" then
if not part.resource and not part.resourceName then
part.resource = sourceResource
end
end
end
drawLine ( message, startX, y, config.align, config.lines, r, g, b, font, 1 )
fadeLine ( config.lines )
end
addEventHandler ( "doOutputMessage", getRootElement(), outputMessage )
function drawLine ( message, x,y, align, line, r, g, b, font, scale )
--First draw it and work out the width
local width = 0
contentMessages[line] = {}
for i,part in ipairs(message) do
if type(part) == "string" then
local text = dxText:create ( part, width, y, false )
text:font ( "default-bold" )
text:scale ( 1.03 )
text:type("normal",1)
text:align"left"
text:color ( r,g,b )
table.insert ( contentMessages[line], text )
width = width + text:extent()
elseif part[1] == "icon" then
local iconWidth = part.width or iconWidths[part.id or -1] or iconWidths[255]
local iconHeight = part.height or config.iconHeight
local image = dxImage:create ( icons[part.id or 0] or icons[255], width, y + (part.posOffY or config.iconPosOffY), iconWidth, iconHeight, false )
image:color ( part.r or 255, part.g or 255, part.b or 255 )
image:rotation ( part.rot or 0, part.rotOffX or 0, part.rotOffY or 0 )
width = width + iconWidth
table.insert ( contentMessages[line], image )
elseif part[1] == "image" then
if part.width and part.path then
if part.resourceName then
part.resource = getResourceFromName(tostring(part.resourceName)) or part.resource
end
local image = dxImage:create ( ":"..getResourceName(part.resource).."/"..part.path, width, y + (part.posOffY or config.iconPosOffY), part.width, part.height or config.iconHeight, false )
image:color ( part.r or 255, part.g or 255, part.b or 255 )
image:rotation ( part.rot or 0, part.rotOffX or 0, part.rotOffY or 0 )
width = width + part.width
table.insert ( contentMessages[line], image )
end
elseif part[1] == "color" or part[1] == "colour" then
r = part.r or r
g = part.g or g
b = part.b or b
elseif part[1] == "padding" then
width = width + part.width or 0
end
contentMessages[line].scale = scale
end
--Now reposition everything properly
if align == "center" or align == "centre" then
x = x - width/2
elseif align == "right" then
x = x - width
end
for i,widget in ipairs(contentMessages[line]) do
local wx,wy = getWidgetPosition ( widget )
setWidgetPosition ( widget, x + wx, wy )
end
return true
end
function fadeLine ( line )
setLineAlpha ( line, 1 )
fadingLines[line] = getTickCount()
end
-----
addEventHandler ( "onClientRender",getRootElement(),
function()
for line,originalTick in pairs(fadingLines) do
local tickDifference = getTickCount() - originalTick
if tickDifference > endTime then
destroyLine ( line )
setLineAlpha ( line, 1 )
fadingLines[line] = nil
elseif tickDifference > config.startFade then
local fadeTimeDifference = tickDifference - config.startFade
--calculate the alpha
local newAlpha = 1 - fadeTimeDifference/config.fadeTime
--Set all the alphas
setLineAlpha ( line, newAlpha )
end
end
end )
function setLineAlpha ( line, alpha )
for i,part in ipairs(contentMessages[line]) do
setWidgetAlpha ( part, alpha )
end
end
function destroyLine ( line )
for k,part in ipairs(contentMessages[line]) do
destroyWidget(part)
end
contentMessages[line] = {}
end
function destroyWidget ( widget )
if isElement(widget) then
destroyElement ( widget )
elseif type(widget) == "table" and widget.destroy then
widget:destroy()
end
end
function getWidgetPosition ( widget )
if isElement(widget) then
return guiGetPosition ( widget, false )
elseif type(widget) == "table" and widget.position then
return widget:position()
end
end
function setWidgetPosition ( widget, x, y )
if isElement(widget) then
return guiSetPosition ( widget, x, y, false )
elseif type(widget) == "table" and widget.position then
return widget:position(x,y,false)
end
end
function setWidgetAlpha ( widget, alpha )
if isElement(widget) then
guiSetAlpha ( widget, alpha )
elseif type(widget) == "table" and widget.color then
local r,g,b = widget:color()
widget:color(r,g,b,alpha*255)
end
end