Jump to content

Default Me Command


Dealman

Recommended Posts

Posted

Does anyone know where the code for this command is located? I'd like to make some fixes to it which are bothering me... Would be greatly appreciated!

Have looked around but can't find it anywhere.

Posted
onPlayerChat -- [url=https://wiki.multitheftauto.com/wiki/OnPlayerChat]https://wiki.multitheftauto.com/wiki/OnPlayerChat[/url] 

string message, int messageType

message: A string representing the message typed into the chat.

messageType: An integer value representing the message type:

0: normal message

1: action message (/me)

2: team message

Posted

This command is a default chat type for the server. You can modify it by using this small code:

SERVER:

addEventHandler('onPlayerChat', getRootElement(), 
function(text, chattype) 
    if chatype == 1 then 
        cancelEvent() 
        local newMe = getPlayerName(source) .. ':' .. text 
        colorRed = 255 
        colorGreen = 255 
        colorBlue = 255 
        outputChatBox(newMe, getRootElement(), colorRed, colorGreen, colorBlue, true) 
    end 
end ) 

EDIT: Why does someone always beat me too it.

Posted

Thanks guys also, does anyone know where the death messages are located? More specifically for Race/DD when someone dies, it's output to the far right of the screen.

Am getting rid of the hex tags from the player-names, they're pissing me off... :P

Posted

I made this edit to killmessages to accept hex coding:

replace /killmessages/utils/textlib.lua with this will also work with any script which is using textlib:

dindxText = {} 
dxText_mt = { __index = dxText }
local idAssign,idPrefix = 0,"c"
local g_screenX,g_screenY = guiGetScreenSize()
local visibleText = {}
------
local defaults = {
    fX                          = 0.5,
    fY                          = 0.5,
    bRelativePosition           = true,
    strText                     = "",
    bVerticalAlign              = "center",
    bHorizontalAlign            = "center",
    tColor                      = {255,255,255,255},
    fScale                      = 1,
    strFont                     = "default",
    strType                     = "normal",
    tAttributes                 = {},
    bPostGUI                    = false,
    bClip                       = false,
    bWordWrap                   = true,
    bVisible                    = true,
    tBoundingBox                = false, --If a bounding box is not set, it will not be used.
    bRelativeBoundingBox        = true,
}
 
local validFonts = {
    default                     = true,
    ["default-bold"]            = true,
    clear                       = true,
    arial                       = true,
    pricedown                   = true,
    bankgothic                  = true,
    diploma                     = true,
    beckett                     = true,
}
 
local validTypes = {
    normal                      = true,
    shadow                      = true,
    border                      = true,
    stroke                      = true, --Clone of border
}
 
local validAlignTypes = {
    center                      = true,
    left                        = true,
    right                       = true,
}
 
function dxText:create( text, x, y, relative )
    assert(not self.fX, "attempt to call method 'create' (a nil value)")
    if ( type(text) ~= "string" ) or ( not tonumber(x) ) or ( not tonumber(y) ) then
        outputDebugString ( "dxText:create - Bad argument", 0, 112, 112, 112 )
        return false
    end
    local new = {}
    setmetatable( new, dxText_mt )
    --Add default settings
    for i,v in pairs(defaults) do
        new[i] = v
    end
    idAssign = idAssign + 1
    new.id = idPrefix..idAssign
    new.strText = text or new.strText
    new.fX = x or new.fX
    new.fY = y or new.fY
    if type(relative) == "boolean" then
        new.bRelativePosition = relative
    end
    visibleText[new] = true
    return new
end
 
function dxText:text(text)
    if type(text) ~= "string" then return self.strText end
    self.strText = text
    return true
end
 
function dxText:position(x,y,relative)
    if not tonumber(x) then return self.fX, self.fY end
    self.fX = x
    self.fY = y
    if type(relative) == "boolean" then
        self.bRelativePosition = relative
    else
        self.bRelativePosition = true
    end
    return true
end
 
function dxText:color(r,g,b,a)
    if not tonumber(r) then return unpack(self.tColor) end
    g = g or self.tColor[2]
    b = b or self.tColor[3]
    a = a or self.tColor[4]
    self.tColor = { r,g,b,a }
    return true
end
 
function dxText:scale(scale)
    if not tonumber(scale) then return self.fScale end
    self.fScale = scale
    return true
end
 
function dxText:visible(bool)
    if type(bool) ~= "boolean" then return self.bVisible end
    self.bVisible = bool
    if bool then
        visibleText[self] = true
    else
        visibleText[self] = nil
    end
    return true
end
 
function dxText:destroy()
    self.bDestroyed = true
    setmetatable( self, self )
    return true
end
 
function dxText:extent()
    local extent = dxGetTextWidth ( string.gsub(self.strText, "#%x%x%x%x%x%x", ""), self.fScale, self.strFont )
    if self.strType == "stroke" or self.strType == "border" then
        extent = extent + self.tAttributes[1]
    end
    return extent
end
 
function dxText:height()
    local height = dxGetFontHeight ( self.fScale, self.strFont )
    if self.strType == "stroke" or self.strType == "border" then
        height = height + self.tAttributes[1]
    end
    return height
end
 
function dxText:font(font)
    if not validFonts[font] then return self.strFont end
    self.strFont = font
    return true
end
 
function dxText:postGUI(bool)
    if type(bool) ~= "boolean" then return self.bPostGUI end
    self.bPostGUI = bool
    return true
end
 
function dxText:clip(bool)
    if type(bool) ~= "boolean" then return self.bClip end
    self.bClip = bool
    return true
end
 
function dxText:wordWrap(bool)
    if type(bool) ~= "boolean" then return self.bWordWrap end
    self.bWordWrap = bool
    return true
end
 
function dxText:type(type,...)
    if not validTypes[type] then return self.strType, unpack(self.tAttributes) end
    self.strType = type
    self.tAttributes = {...}
    return true
end
 
function dxText:align(horzA, vertA)
    if not validAlignTypes[horzA] then return self.bHorizontalAlign, self.bVerticalAlign end
    vertA = vertA or self.bVerticalAlign
    self.bHorizontalAlign, self.bVerticalAlign = horzA, vertA
    return true
end
 
function dxText:boundingBox(left,top,right,bottom,relative)
    if left == nil then
        if self.tBoundingBox then
            return unpack(boundingBox)
        else
            return false
        end
    elseif tonumber(left) and tonumber(right) and tonumber(top) and tonumber(bottom) then
        self.tBoundingBox = {left,top,right,bottom}
        if type(relative) == "boolean" then
            self.bRelativeBoundingBox = relative
        else
            self.bRelativeBoundingBox = true
        end
    else
        self.tBoundingBox = false
    end
    return true
end
 
addEventHandler ( "onClientRender", getRootElement(),
    function()
        for self,_ in pairs(visibleText) do
            while true do
                if self.bDestroyed then
                    visibleText[self] = nil
                    break
                end
                local l,t,r,b
                --If we arent using a bounding box
                if not self.tBoundingBox then
                    --Decide if we use relative or absolute
                    local p_screenX,p_screenY = 1,1
                    if self.bRelativePosition then
                        p_screenX,p_screenY = g_screenX,g_screenY
                    end
                    local fX,fY = (self.fX)*p_screenX,(self.fY)*p_screenY
                    if self.bHorizontalAlign == "left" then
                        l = fX
                        r = fX + g_screenX
                    elseif self.bHorizontalAlign == "right" then
                        l = fX - g_screenX
                        r = fX
                    else
                        l = fX - g_screenX
                        r = fX + g_screenX
                    end
                    if self.bVerticalAlign == "top" then
                        t = fY
                        b = fY + g_screenY
                    elseif self.bVerticalAlign == "bottom" then
                        t = fY - g_screenY
                        b = fY
                    else
                        t = fY - g_screenY
                        b = fY + g_screenY
                    end
                elseif type(self.tBoundingBox) == "table" then
                    local b_screenX,b_screenY = 1,1
                    if self.bRelativeBoundingBox then
                        b_screenX,b_screenY = g_screenX,g_screenY
                    end
                    l,t,r,b = self.tBoundingBox[1],self.tBoundingBox[2],self.tBoundingBox[3],self.tBoundingBox[4]
                    l = l*b_screenX
                    t = t*b_screenY
                    r = r*b_screenX
                    b = b*b_screenY
                end
                local type,att1,att2,att3,att4,att5 = self:type()
                if type == "border" or type == "stroke" then
                    att2 = att2 or 0
                    att3 = att3 or 0
                    att4 = att4 or 0
                    att5 = att5
Posted

I made this edit to killmessages to accept hex coding:

replace /killmessages/utils/textlib.lua with this will also work with any script which is using textlib:

dindxText = {} 
dxText_mt = { __index = dxText }
local idAssign,idPrefix = 0,"c"
local g_screenX,g_screenY = guiGetScreenSize()
local visibleText = {}
------
local defaults = {
    fX                          = 0.5,
    fY                          = 0.5,
    bRelativePosition           = true,
    strText                     = "",
    bVerticalAlign              = "center",
    bHorizontalAlign            = "center",
    tColor                      = {255,255,255,255},
    fScale                      = 1,
    strFont                     = "default",
    strType                     = "normal",
    tAttributes                 = {},
    bPostGUI                    = false,
    bClip                       = false,
    bWordWrap                   = true,
    bVisible                    = true,
    tBoundingBox                = false, --If a bounding box is not set, it will not be used.
    bRelativeBoundingBox        = true,
}
 
local validFonts = {
    default                     = true,
    ["default-bold"]            = true,
    clear                       = true,
    arial                       = true,
    pricedown                   = true,
    bankgothic                  = true,
    diploma                     = true,
    beckett                     = true,
}
 
local validTypes = {
    normal                      = true,
    shadow                      = true,
    border                      = true,
    stroke                      = true, --Clone of border
}
 
local validAlignTypes = {
    center                      = true,
    left                        = true,
    right                       = true,
}
 
function dxText:create( text, x, y, relative )
    assert(not self.fX, "attempt to call method 'create' (a nil value)")
    if ( type(text) ~= "string" ) or ( not tonumber(x) ) or ( not tonumber(y) ) then
        outputDebugString ( "dxText:create - Bad argument", 0, 112, 112, 112 )
        return false
    end
    local new = {}
    setmetatable( new, dxText_mt )
    --Add default settings
    for i,v in pairs(defaults) do
        new[i] = v
    end
    idAssign = idAssign + 1
    new.id = idPrefix..idAssign
    new.strText = text or new.strText
    new.fX = x or new.fX
    new.fY = y or new.fY
    if type(relative) == "boolean" then
        new.bRelativePosition = relative
    end
    visibleText[new] = true
    return new
end
 
function dxText:text(text)
    if type(text) ~= "string" then return self.strText end
    self.strText = text
    return true
end
 
function dxText:position(x,y,relative)
    if not tonumber(x) then return self.fX, self.fY end
    self.fX = x
    self.fY = y
    if type(relative) == "boolean" then
        self.bRelativePosition = relative
    else
        self.bRelativePosition = true
    end
    return true
end
 
function dxText:color(r,g,b,a)
    if not tonumber(r) then return unpack(self.tColor) end
    g = g or self.tColor[2]
    b = b or self.tColor[3]
    a = a or self.tColor[4]
    self.tColor = { r,g,b,a }
    return true
end
 
function dxText:scale(scale)
    if not tonumber(scale) then return self.fScale end
    self.fScale = scale
    return true
end
 
function dxText:visible(bool)
    if type(bool) ~= "boolean" then return self.bVisible end
    self.bVisible = bool
    if bool then
        visibleText[self] = true
    else
        visibleText[self] = nil
    end
    return true
end
 
function dxText:destroy()
    self.bDestroyed = true
    setmetatable( self, self )
    return true
end
 
function dxText:extent()
    local extent = dxGetTextWidth ( string.gsub(self.strText, "#%x%x%x%x%x%x", ""), self.fScale, self.strFont )
    if self.strType == "stroke" or self.strType == "border" then
        extent = extent + self.tAttributes[1]
    end
    return extent
end
 
function dxText:height()
    local height = dxGetFontHeight ( self.fScale, self.strFont )
    if self.strType == "stroke" or self.strType == "border" then
        height = height + self.tAttributes[1]
    end
    return height
end
 
function dxText:font(font)
    if not validFonts[font] then return self.strFont end
    self.strFont = font
    return true
end
 
function dxText:postGUI(bool)
    if type(bool) ~= "boolean" then return self.bPostGUI end
    self.bPostGUI = bool
    return true
end
 
function dxText:clip(bool)
    if type(bool) ~= "boolean" then return self.bClip end
    self.bClip = bool
    return true
end
 
function dxText:wordWrap(bool)
    if type(bool) ~= "boolean" then return self.bWordWrap end
    self.bWordWrap = bool
    return true
end
 
function dxText:type(type,...)
    if not validTypes[type] then return self.strType, unpack(self.tAttributes) end
    self.strType = type
    self.tAttributes = {...}
    return true
end
 
function dxText:align(horzA, vertA)
    if not validAlignTypes[horzA] then return self.bHorizontalAlign, self.bVerticalAlign end
    vertA = vertA or self.bVerticalAlign
    self.bHorizontalAlign, self.bVerticalAlign = horzA, vertA
    return true
end
 
function dxText:boundingBox(left,top,right,bottom,relative)
    if left == nil then
        if self.tBoundingBox then
            return unpack(boundingBox)
        else
            return false
        end
    elseif tonumber(left) and tonumber(right) and tonumber(top) and tonumber(bottom) then
        self.tBoundingBox = {left,top,right,bottom}
        if type(relative) == "boolean" then
            self.bRelativeBoundingBox = relative
        else
            self.bRelativeBoundingBox = true
        end
    else
        self.tBoundingBox = false
    end
    return true
end
 
addEventHandler ( "onClientRender", getRootElement(),
    function()
        for self,_ in pairs(visibleText) do
            while true do
                if self.bDestroyed then
                    visibleText[self] = nil
                    break
                end
                local l,t,r,b
                --If we arent using a bounding box
                if not self.tBoundingBox then
                    --Decide if we use relative or absolute
                    local p_screenX,p_screenY = 1,1
                    if self.bRelativePosition then
                        p_screenX,p_screenY = g_screenX,g_screenY
                    end
                    local fX,fY = (self.fX)*p_screenX,(self.fY)*p_screenY
                    if self.bHorizontalAlign == "left" then
                        l = fX
                        r = fX + g_screenX
                    elseif self.bHorizontalAlign == "right" then
                        l = fX - g_screenX
                        r = fX
                    else
                        l = fX - g_screenX
                        r = fX + g_screenX
                    end
                    if self.bVerticalAlign == "top" then
                        t = fY
                        b = fY + g_screenY
                    elseif self.bVerticalAlign == "bottom" then
                        t = fY - g_screenY
                        b = fY
                    else
                        t = fY - g_screenY
                        b = fY + g_screenY
                    end
                elseif type(self.tBoundingBox) == "table" then
                    local b_screenX,b_screenY = 1,1
                    if self.bRelativeBoundingBox then
                        b_screenX,b_screenY = g_screenX,g_screenY
                    end
                    l,t,r,b = self.tBoundingBox[1],self.tBoundingBox[2],self.tBoundingBox[3],self.tBoundingBox[4]
                    l = l*b_screenX
                    t = t*b_screenY
                    r = r*b_screenX
                    b = b*b_screenY
                end
                local type,att1,att2,att3,att4,att5 = self:type()
                if type == "border" or type == "stroke" then
                    att2 = att2 or 0
                    att3 = att3 or 0
                    att4 = att4 or 0
                    att5 = att5
Posted

I made this edit to killmessages to accept hex coding:

replace /killmessages/utils/textlib.lua with this will also work with any script which is using textlib:

dindxText = {} 
dxText_mt = { __index = dxText }
local idAssign,idPrefix = 0,"c"
local g_screenX,g_screenY = guiGetScreenSize()
local visibleText = {}
------
local defaults = {
    fX                          = 0.5,
    fY                          = 0.5,
    bRelativePosition           = true,
    strText                     = "",
    bVerticalAlign              = "center",
    bHorizontalAlign            = "center",
    tColor                      = {255,255,255,255},
    fScale                      = 1,
    strFont                     = "default",
    strType                     = "normal",
    tAttributes                 = {},
    bPostGUI                    = false,
    bClip                       = false,
    bWordWrap                   = true,
    bVisible                    = true,
    tBoundingBox                = false, --If a bounding box is not set, it will not be used.
    bRelativeBoundingBox        = true,
}
 
local validFonts = {
    default                     = true,
    ["default-bold"]            = true,
    clear                       = true,
    arial                       = true,
    pricedown                   = true,
    bankgothic                  = true,
    diploma                     = true,
    beckett                     = true,
}
 
local validTypes = {
    normal                      = true,
    shadow                      = true,
    border                      = true,
    stroke                      = true, --Clone of border
}
 
local validAlignTypes = {
    center                      = true,
    left                        = true,
    right                       = true,
}
 
function dxText:create( text, x, y, relative )
    assert(not self.fX, "attempt to call method 'create' (a nil value)")
    if ( type(text) ~= "string" ) or ( not tonumber(x) ) or ( not tonumber(y) ) then
        outputDebugString ( "dxText:create - Bad argument", 0, 112, 112, 112 )
        return false
    end
    local new = {}
    setmetatable( new, dxText_mt )
    --Add default settings
    for i,v in pairs(defaults) do
        new[i] = v
    end
    idAssign = idAssign + 1
    new.id = idPrefix..idAssign
    new.strText = text or new.strText
    new.fX = x or new.fX
    new.fY = y or new.fY
    if type(relative) == "boolean" then
        new.bRelativePosition = relative
    end
    visibleText[new] = true
    return new
end
 
function dxText:text(text)
    if type(text) ~= "string" then return self.strText end
    self.strText = text
    return true
end
 
function dxText:position(x,y,relative)
    if not tonumber(x) then return self.fX, self.fY end
    self.fX = x
    self.fY = y
    if type(relative) == "boolean" then
        self.bRelativePosition = relative
    else
        self.bRelativePosition = true
    end
    return true
end
 
function dxText:color(r,g,b,a)
    if not tonumber(r) then return unpack(self.tColor) end
    g = g or self.tColor[2]
    b = b or self.tColor[3]
    a = a or self.tColor[4]
    self.tColor = { r,g,b,a }
    return true
end
 
function dxText:scale(scale)
    if not tonumber(scale) then return self.fScale end
    self.fScale = scale
    return true
end
 
function dxText:visible(bool)
    if type(bool) ~= "boolean" then return self.bVisible end
    self.bVisible = bool
    if bool then
        visibleText[self] = true
    else
        visibleText[self] = nil
    end
    return true
end
 
function dxText:destroy()
    self.bDestroyed = true
    setmetatable( self, self )
    return true
end
 
function dxText:extent()
    local extent = dxGetTextWidth ( string.gsub(self.strText, "#%x%x%x%x%x%x", ""), self.fScale, self.strFont )
    if self.strType == "stroke" or self.strType == "border" then
        extent = extent + self.tAttributes[1]
    end
    return extent
end
 
function dxText:height()
    local height = dxGetFontHeight ( self.fScale, self.strFont )
    if self.strType == "stroke" or self.strType == "border" then
        height = height + self.tAttributes[1]
    end
    return height
end
 
function dxText:font(font)
    if not validFonts[font] then return self.strFont end
    self.strFont = font
    return true
end
 
function dxText:postGUI(bool)
    if type(bool) ~= "boolean" then return self.bPostGUI end
    self.bPostGUI = bool
    return true
end
 
function dxText:clip(bool)
    if type(bool) ~= "boolean" then return self.bClip end
    self.bClip = bool
    return true
end
 
function dxText:wordWrap(bool)
    if type(bool) ~= "boolean" then return self.bWordWrap end
    self.bWordWrap = bool
    return true
end
 
function dxText:type(type,...)
    if not validTypes[type] then return self.strType, unpack(self.tAttributes) end
    self.strType = type
    self.tAttributes = {...}
    return true
end
 
function dxText:align(horzA, vertA)
    if not validAlignTypes[horzA] then return self.bHorizontalAlign, self.bVerticalAlign end
    vertA = vertA or self.bVerticalAlign
    self.bHorizontalAlign, self.bVerticalAlign = horzA, vertA
    return true
end
 
function dxText:boundingBox(left,top,right,bottom,relative)
    if left == nil then
        if self.tBoundingBox then
            return unpack(boundingBox)
        else
            return false
        end
    elseif tonumber(left) and tonumber(right) and tonumber(top) and tonumber(bottom) then
        self.tBoundingBox = {left,top,right,bottom}
        if type(relative) == "boolean" then
            self.bRelativeBoundingBox = relative
        else
            self.bRelativeBoundingBox = true
        end
    else
        self.tBoundingBox = false
    end
    return true
end
 
addEventHandler ( "onClientRender", getRootElement(),
    function()
        for self,_ in pairs(visibleText) do
            while true do
                if self.bDestroyed then
                    visibleText[self] = nil
                    break
                end
                local l,t,r,b
                --If we arent using a bounding box
                if not self.tBoundingBox then
                    --Decide if we use relative or absolute
                    local p_screenX,p_screenY = 1,1
                    if self.bRelativePosition then
                        p_screenX,p_screenY = g_screenX,g_screenY
                    end
                    local fX,fY = (self.fX)*p_screenX,(self.fY)*p_screenY
                    if self.bHorizontalAlign == "left" then
                        l = fX
                        r = fX + g_screenX
                    elseif self.bHorizontalAlign == "right" then
                        l = fX - g_screenX
                        r = fX
                    else
                        l = fX - g_screenX
                        r = fX + g_screenX
                    end
                    if self.bVerticalAlign == "top" then
                        t = fY
                        b = fY + g_screenY
                    elseif self.bVerticalAlign == "bottom" then
                        t = fY - g_screenY
                        b = fY
                    else
                        t = fY - g_screenY
                        b = fY + g_screenY
                    end
                elseif type(self.tBoundingBox) == "table" then
                    local b_screenX,b_screenY = 1,1
                    if self.bRelativeBoundingBox then
                        b_screenX,b_screenY = g_screenX,g_screenY
                    end
                    l,t,r,b = self.tBoundingBox[1],self.tBoundingBox[2],self.tBoundingBox[3],self.tBoundingBox[4]
                    l = l*b_screenX
                    t = t*b_screenY
                    r = r*b_screenX
                    b = b*b_screenY
                end
                local type,att1,att2,att3,att4,att5 = self:type()
                if type == "border" or type == "stroke" then
                    att2 = att2 or 0
                    att3 = att3 or 0
                    att4 = att4 or 0
                    att5 = att5
Posted

I made this edit to killmessages to accept hex coding:

replace /killmessages/utils/textlib.lua with this will also work with any script which is using textlib:

dindxText = {} 
dxText_mt = { __index = dxText }
local idAssign,idPrefix = 0,"c"
local g_screenX,g_screenY = guiGetScreenSize()
local visibleText = {}
------
local defaults = {
    fX                          = 0.5,
    fY                          = 0.5,
    bRelativePosition           = true,
    strText                     = "",
    bVerticalAlign              = "center",
    bHorizontalAlign            = "center",
    tColor                      = {255,255,255,255},
    fScale                      = 1,
    strFont                     = "default",
    strType                     = "normal",
    tAttributes                 = {},
    bPostGUI                    = false,
    bClip                       = false,
    bWordWrap                   = true,
    bVisible                    = true,
    tBoundingBox                = false, --If a bounding box is not set, it will not be used.
    bRelativeBoundingBox        = true,
}
 
local validFonts = {
    default                     = true,
    ["default-bold"]            = true,
    clear                       = true,
    arial                       = true,
    pricedown                   = true,
    bankgothic                  = true,
    diploma                     = true,
    beckett                     = true,
}
 
local validTypes = {
    normal                      = true,
    shadow                      = true,
    border                      = true,
    stroke                      = true, --Clone of border
}
 
local validAlignTypes = {
    center                      = true,
    left                        = true,
    right                       = true,
}
 
function dxText:create( text, x, y, relative )
    assert(not self.fX, "attempt to call method 'create' (a nil value)")
    if ( type(text) ~= "string" ) or ( not tonumber(x) ) or ( not tonumber(y) ) then
        outputDebugString ( "dxText:create - Bad argument", 0, 112, 112, 112 )
        return false
    end
    local new = {}
    setmetatable( new, dxText_mt )
    --Add default settings
    for i,v in pairs(defaults) do
        new[i] = v
    end
    idAssign = idAssign + 1
    new.id = idPrefix..idAssign
    new.strText = text or new.strText
    new.fX = x or new.fX
    new.fY = y or new.fY
    if type(relative) == "boolean" then
        new.bRelativePosition = relative
    end
    visibleText[new] = true
    return new
end
 
function dxText:text(text)
    if type(text) ~= "string" then return self.strText end
    self.strText = text
    return true
end
 
function dxText:position(x,y,relative)
    if not tonumber(x) then return self.fX, self.fY end
    self.fX = x
    self.fY = y
    if type(relative) == "boolean" then
        self.bRelativePosition = relative
    else
        self.bRelativePosition = true
    end
    return true
end
 
function dxText:color(r,g,b,a)
    if not tonumber(r) then return unpack(self.tColor) end
    g = g or self.tColor[2]
    b = b or self.tColor[3]
    a = a or self.tColor[4]
    self.tColor = { r,g,b,a }
    return true
end
 
function dxText:scale(scale)
    if not tonumber(scale) then return self.fScale end
    self.fScale = scale
    return true
end
 
function dxText:visible(bool)
    if type(bool) ~= "boolean" then return self.bVisible end
    self.bVisible = bool
    if bool then
        visibleText[self] = true
    else
        visibleText[self] = nil
    end
    return true
end
 
function dxText:destroy()
    self.bDestroyed = true
    setmetatable( self, self )
    return true
end
 
function dxText:extent()
    local extent = dxGetTextWidth ( string.gsub(self.strText, "#%x%x%x%x%x%x", ""), self.fScale, self.strFont )
    if self.strType == "stroke" or self.strType == "border" then
        extent = extent + self.tAttributes[1]
    end
    return extent
end
 
function dxText:height()
    local height = dxGetFontHeight ( self.fScale, self.strFont )
    if self.strType == "stroke" or self.strType == "border" then
        height = height + self.tAttributes[1]
    end
    return height
end
 
function dxText:font(font)
    if not validFonts[font] then return self.strFont end
    self.strFont = font
    return true
end
 
function dxText:postGUI(bool)
    if type(bool) ~= "boolean" then return self.bPostGUI end
    self.bPostGUI = bool
    return true
end
 
function dxText:clip(bool)
    if type(bool) ~= "boolean" then return self.bClip end
    self.bClip = bool
    return true
end
 
function dxText:wordWrap(bool)
    if type(bool) ~= "boolean" then return self.bWordWrap end
    self.bWordWrap = bool
    return true
end
 
function dxText:type(type,...)
    if not validTypes[type] then return self.strType, unpack(self.tAttributes) end
    self.strType = type
    self.tAttributes = {...}
    return true
end
 
function dxText:align(horzA, vertA)
    if not validAlignTypes[horzA] then return self.bHorizontalAlign, self.bVerticalAlign end
    vertA = vertA or self.bVerticalAlign
    self.bHorizontalAlign, self.bVerticalAlign = horzA, vertA
    return true
end
 
function dxText:boundingBox(left,top,right,bottom,relative)
    if left == nil then
        if self.tBoundingBox then
            return unpack(boundingBox)
        else
            return false
        end
    elseif tonumber(left) and tonumber(right) and tonumber(top) and tonumber(bottom) then
        self.tBoundingBox = {left,top,right,bottom}
        if type(relative) == "boolean" then
            self.bRelativeBoundingBox = relative
        else
            self.bRelativeBoundingBox = true
        end
    else
        self.tBoundingBox = false
    end
    return true
end
 
addEventHandler ( "onClientRender", getRootElement(),
    function()
        for self,_ in pairs(visibleText) do
            while true do
                if self.bDestroyed then
                    visibleText[self] = nil
                    break
                end
                local l,t,r,b
                --If we arent using a bounding box
                if not self.tBoundingBox then
                    --Decide if we use relative or absolute
                    local p_screenX,p_screenY = 1,1
                    if self.bRelativePosition then
                        p_screenX,p_screenY = g_screenX,g_screenY
                    end
                    local fX,fY = (self.fX)*p_screenX,(self.fY)*p_screenY
                    if self.bHorizontalAlign == "left" then
                        l = fX
                        r = fX + g_screenX
                    elseif self.bHorizontalAlign == "right" then
                        l = fX - g_screenX
                        r = fX
                    else
                        l = fX - g_screenX
                        r = fX + g_screenX
                    end
                    if self.bVerticalAlign == "top" then
                        t = fY
                        b = fY + g_screenY
                    elseif self.bVerticalAlign == "bottom" then
                        t = fY - g_screenY
                        b = fY
                    else
                        t = fY - g_screenY
                        b = fY + g_screenY
                    end
                elseif type(self.tBoundingBox) == "table" then
                    local b_screenX,b_screenY = 1,1
                    if self.bRelativeBoundingBox then
                        b_screenX,b_screenY = g_screenX,g_screenY
                    end
                    l,t,r,b = self.tBoundingBox[1],self.tBoundingBox[2],self.tBoundingBox[3],self.tBoundingBox[4]
                    l = l*b_screenX
                    t = t*b_screenY
                    r = r*b_screenX
                    b = b*b_screenY
                end
                local type,att1,att2,att3,att4,att5 = self:type()
                if type == "border" or type == "stroke" then
                    att2 = att2 or 0
                    att3 = att3 or 0
                    att4 = att4 or 0
                    att5 = att5

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