Jump to content

Remover Cores Hex


Recommended Posts

  • Moderators
Posted (edited)

No scoreboard, só acessar as configurações dele pelo painel admin e mudar o parâmetro Allow colorcoded names para false.

No chat, vc deve cancelar o envio normal das mensagens e reenviá-las sem o parâmetro colorcoded (aquele true que vem depois dos 255). Se você estiver com um resource de TAGs, faça a correção nele. Se não tiver um resource de TAGs, crie um resource novo com um server.Lua e coloque isso nele:

function chatbox (text, msgtype)
	local name = getPlayerName (source)
	if (msgtype == 0) then
		cancelEvent (true) -- Cancela a mensagem original.
		outputChatBox (name..": "..text, root, 231, 217, 176) -- Reenvia a mensagem sem cores. (vai aparecer os códigos de cor em vez disso)
		outputServerLog ("CHAT: "..name..": "..text)
	end
end

No killmessages dai é mais complexo, pois ele vem nativamente bugado. Substitua o script inteiro do textlib.Lua por esse:

Spoiler

dxText = {}
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,
	bColorCoded					= 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()
	if self.bColorCoded then
		text = string.gsub(self.strText,"#%x%x%x%x%x%x","")
	else
		text = self.strText
	end
	local extent = dxGetTextWidth(text,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

function dxCreateCustomDX(text,left,top,right,bottom,color,scale,font,alignX,alignY,clip,wordBreak,postGUI,colorcoded)
	if not text or not left or not top then
		return false
	end
	local xOffset = nil
	local fpat = "(.-)#(%x%x%x%x%x%x)"
	local s,e,cap,col = text:find(fpat,1)
	local last_end = 1
	if not alignX then
		alignX = "left"
	elseif alignX == "center" then
		xOffset = -(dxGetTextWidth(string.gsub(text,"#%x%x%x%x%x%x",""),scale,font)/2)
	else
		xOffset = 0
	end
	-- while s do
		-- if cap == "" and col then
			-- color = tocolor(tonumber("0x"..col:sub(1,2)), tonumber("0x"..col:sub(3,4)), tonumber("0x"..col:sub(5,6)),255)
		-- end
		-- if s ~= 1 or cap ~= "" then
            -- dxDrawText(text,left+xOffset,top,left+xOffset,bottom,color,scale,font,alignX,alignY,false,false,postGUI,colorcoded)
			-- xOffset = xOffset+dxGetTextWidth(cap,scale,font)
			-- color = tocolor(tonumber("0x"..col:sub(1,2)), tonumber("0x"..col:sub(3,4)), tonumber("0x"..col:sub(5,6)),255)
		-- end
		-- last_end = e+1
		-- s,e,cap,col = text:find(fpat,last_end)
	-- end
	if last_end <= #text then
		cap = text:sub(last_end)
        dxDrawText(text,left+xOffset,top,left+xOffset,bottom,color,scale,font,alignX,alignY,false,false,postGUI,colorcoded)
		xOffset = xOffset+dxGetTextWidth(cap,scale,font)
	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 or self.tColor[4]
					outlinesize = att1 or 2
					outlinesize = math.min(self.fScale,outlinesize) --Make sure the outline size isnt thicker than the size of the label
					if outlinesize > 0 then
						for offsetX=-outlinesize,outlinesize,outlinesize do
							for offsetY=-outlinesize,outlinesize,outlinesize do
								if not offsetX == 0 and offsetY == 0 then
									dxCreateCustomDX(self.strText,l+offsetX,t+offsetY,r+offsetX,b+offsetY,tocolor(att2,att3,att4,att5),self.fScale,self.strFont,self.bHorizontalAlign,self.bVerticalAlign,self.bClip,self.bWordWrap,self.bPostGUI,self.bColorCoded)
								end
							end
						end
					end
				-- elseif type == "shadow" then
					-- local shadowDist = att1
					-- att2 = att2 or 0
					-- att3 = att3 or 0
					-- att4 = att4 or 0
					-- att5 = att5 or self.tColor[4]
					-- dxCreateCustomDX(self.strText,l+shadowDist,t+shadowDist,r+shadowDist,b+shadowDist,tocolor(0,0,0,255),self.fScale,self.strFont,self.bHorizontalAlign,self.bVerticalAlign,self.bClip,self.bWordWrap,self.bPostGUI,self.bColorCoded)
				end
				dxCreateCustomDX(self.strText,l,t,r,b,tocolor(unpack(self.tColor)),self.fScale,self.strFont,self.bHorizontalAlign,self.bVerticalAlign,self.bClip,self.bWordWrap,self.bPostGUI,self.bColorCoded)
				break
			end
		end
	end
)

if addEvent("updateDisplays",true) then
	addEventHandler("updateDisplays",getRootElement(),
		function(self)
			setmetatable(self,dxText_mt)
			--Remove any old ones with the same id
			for text,_ in pairs(visibleText) do
				if text.id == self.id then
					visibleText[text] = nil
				end
			end
			if self.bVisible and not self.bDestroyed then
				visibleText[self] = true
			end
		end
	)
end

Se quiser voltar a usar as cores, apenas troque na linha 20 aquele false por true.

 

Edited by Lord Henry

Eu te ajudei ou achou meu comentário útil? Não esqueça de deixar um Thanksspacer.png

Minhas contribuições para a comunidade: LordHenry - MTA Wiki Profile
Inscreva-se no meu canal do YouTube: Lord Henry - Entertainment
Discord Oficial do MTA: https://mtasa.com/discord
Blacklist e Whitelist de Scripters: Planilha

Por favor, não me envie mensagens privadas solicitando suporte. Crie um tópico no fórum em vez disso.

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