Jump to content

killmessages [ HELP ]


Dinossauro

Recommended Posts

I have a script that is killmessages.

I have a server and wanted to race that deaths and stay on the right side that showed up the colors of whom died, because only appears: # FF0000,

killmessages_server.lua

local config = {

["lines"] = 5,

["startY"] = 0.35,

["textHeight"] = 16,

["iconHeight"] = 20,

["iconSpacing"] = 4,

["defaultWeapon"] = 255,

["fadeTime"] = 5000,

["startFade"] = 15000,

["align"] = "right",

["startX"] = -10

}

local default = {

["lines"] = 5,

["startY"] = 0.25,

["textHeight"] = 16,

["iconHeight"] = 20,

["iconSpacing"] = 4,

["defaultWeapon"] = 255,

["fadeTime"] = 5000,

["startFade"] = 15000,

["align"] = "right",

["startX"] = -10

}

local vehicleIDs = { [50]=true,[49]=true,[31]=true,[38]=true,[52]=true }

function KillMessages_onPlayerWasted ( totalammo, killer, killerweapon, bodypart )

---These are special checks for certain kill types

local usedVehicle

if killerweapon == 19 and isElement(killer) then --rockets

killerweapon = killer and getElementType ( killer ) == "player" and getPedWeapon(killer)

if not killerweapon then

killerweapon = 51

end

elseif vehicleIDs[killerweapon] then --heliblades/rammed

if ( isElement(killer) and getElementType ( killer ) == "vehicle" ) then

usedVehicle = getElementModel ( killer )

killer = getVehicleOccupant ( killer, 0 )

end

elseif ( killerweapon == 59 and isElement(killer) ) then

if ( getElementType ( killer ) == "player" ) then

local vehicle = getPedOccupiedVehicle(killer)

if ( vehicle ) then

usedVehicle = getElementModel ( vehicle )

end

end

end

--finish this

-- Got a killer? Print the normal "* X died" if not

if ( killer and isElement(killer) and getElementType ( killer ) == "player" ) then

local kr,kg,kb = getPlayerNametagColor ( killer )

if getPlayerTeam ( killer ) then

kr,kg,kb = getTeamColor ( getPlayerTeam ( killer ) )

end

-- Suicide?

if (source == killer) then

if not killerweapon then killerweapon = 255 end

local triggered = triggerEvent ( "onPlayerKillMessage", source,false,killerweapon,bodypart )

--outputDebugString ( "Cancelled: "..tostring(triggered) )

if ( triggered ) then

eventTriggered ( source,false,killerweapon,bodypart,true,usedVehicle)

return

end

end

local triggered = triggerEvent ( "onPlayerKillMessage", source,killer,killerweapon,bodypart )

--outputDebugString ( "Cancelled: "..tostring(triggered) )

if ( triggered ) then

eventTriggered ( source,killer,killerweapon,bodypart,false,usedVehicle)

end

else

local triggered = triggerEvent ( "onPlayerKillMessage", source,false,killerweapon,bodypart )

--outputDebugString ( "Cancelled: "..tostring(triggered) )

if ( triggered ) then

eventTriggered ( source,false,killerweapon,bodypart,false,usedVehicle)

end

end

end

addEventHandler ( "onPlayerWasted", getRootElement(), KillMessages_onPlayerWasted )

addEvent ( "onPlayerKillMessage" )

function eventTriggered ( source,killer,weapon,bodypart,suicide,usedVehicle )

local wr,wg,wb = getPlayerNametagColor ( source )

if getPlayerTeam ( source ) then

wr,wg,wb = getTeamColor ( getPlayerTeam ( source ) )

end

local kr,kg,kb = false,false,false

if ( killer ) then

kr,kg,kb = getPlayerNametagColor ( killer )

if getPlayerTeam ( killer ) then

kr,kg,kb = getTeamColor ( getPlayerTeam ( killer ) )

end

end

if ( usedVehicle ) then

weapon = usedVehicle

end

outputKillMessage ( source, wr,wg,wb,killer,kr,kg,kb,weapon )

--

local extra = ""

if ( usedVehicle ) then

extra = " (Vehicle)"

end

if ( killer ) then

if suicide then

local weaponName = getWeaponNameFromID ( weapon )

if weaponName then

outputConsoleKillMessage ( "* "..getPlayerName(source).." killed himself. ("..weaponName..")" )

else

outputConsoleKillMessage ( "* "..getPlayerName(source).." killed himself."..extra )

end

else

local weaponName = getWeaponNameFromID ( weapon )

if weaponName then

outputConsoleKillMessage ( "* "..getPlayerName(killer).." killed "..getPlayerName(source)..". ("..weaponName..")" )

else

outputConsoleKillMessage ( "* "..getPlayerName(killer).." killed "..getPlayerName(source).."."..extra )

end

end

else

outputConsoleKillMessage ( "* "..getPlayerName(source).." died."..extra )

end

--

end

function outputConsoleKillMessage ( text )

outputConsole ( text )

end

function outputKillMessage ( killed, wr,wg,wb,killer,kr,kg,kb,weapon,width,resource )

if ( resource ) then resource = getResourceName(resource) end

if not isElement(killed) then

outputDebugString ( "outputKillMessage - Invalid 'wasted' player specified",0,0,0,100)

return false

end

if not getElementType(killed) == "player" then

outputDebugString ( "outputKillMessage - Invalid 'wasted' player specified",0,0,0,100)

return false

end

return triggerClientEvent(getRootElement(),"onClientPlayerKillMessage",killed,killer,weapon,wr,wg,wb,kr,kg,kb,width,resource )

end

function outputMessage ( message, visibleTo, 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 not isElement(visibleTo) then

outputDebugString ( "outputMessage - Bad argument", 0, 112, 112, 112 )

return false

end

--Turn any resources into resource names

if type(message) == "table" then

for i,part in ipairs(message) do

if type(part) == "table" and part[1] == "image" then

if part.resource then

message.resourceName = getResourceName(part.resource)

else

part.resourceName = getResourceName(sourceResource)

end

end

end

end

return triggerClientEvent ( visibleTo, "doOutputMessage", visibleTo, message, r, g, b, font )

end

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 startY = align.startY 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

for k,v in ipairs(getElementsByType"player") do

triggerClientEvent(v,"doSetKillMessageStyle",v,config.startX,config.startY,config.alignX,config.lines,config.startFade,config.fadeTime)

end

return true

end

addEvent ("onClientKillmessagesLoaded",true)

addEventHandler ( "onClientKillmessagesLoaded", getRootElement(),

function()

triggerClientEvent(source,"doSetKillMessageStyle",source,config.startX,config.startY,config.alignX,config.lines,config.startFade,config.fadeTime)

end )

killmessages_client.lua

addEvent ("onClientPlayerKillMessage",true)

function onClientPlayerKillMessage ( killer,weapon,wr,wg,wb,kr,kg,kb,width,resource )

if wasEventCancelled() then return end

outputKillMessage ( source, wr,wg,wb,killer,kr,kg,kb,weapon,width,resource )

end

addEventHandler ("onClientPlayerKillMessage",getRootElement(),onClientPlayerKillMessage)

function outputKillMessage ( source, wr,wg,wb,killer,kr,kg,kb,weapon,width,resource )

if not iconWidths[weapon] then

if type(weapon) ~= "string" then

weapon = 999

end

end

local killerName

local wastedName

if not tonumber(wr) then wr = 255 end

if not tonumber(wg) then wg = 255 end

if not tonumber(wb) then wb = 255 end

if not tonumber(kr) then kr = 255 end

if not tonumber(kg) then kg = 255 end

if not tonumber(kb) then kb = 255 end

if ( source ) then

if isElement ( source ) then

if getElementType ( source ) == "player" then

wastedName = getPlayerName ( source )

else

outputDebugString ( "outputKillMessage - Invalid 'wasted' player specified",0,0,0,100)

return false end

elseif type(source) == "string" then

wastedName = source

end

else

outputDebugString ( "outputKillMessage - Invalid 'wasted' player specified",0,0,0,100)

return false end

if ( killer ) then

if isElement ( killer ) then

if getElementType ( killer ) == "player" then

killerName = getPlayerName ( killer )

else

outputDebugString ( "outputKillMessage - Invalid 'killer' player specified",0,0,0,100)

return false end

elseif type(killer) == "string" then

killerName = killer

else

killerName = ""

end

else killerName = "" end

--create the new text

if not killerName then

killerName = ""

end

return outputMessage ( {killerName, {"padding",width=3}, {"icon",id=weapon},

{"padding",width=3},{"color",r=wr,g=wg,b=wb}, wastedName},

kr,kg,kb )

end

gui.lua

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 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 = { 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 then

for k,part in ipairs(contentMessages) 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 = 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 = "default"

end

r = tonumberĀ® 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 ( font )

text:scale ( scale )

text:type("shadow",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

THANKS!

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