Adding different icons for different groups wont work?
0 replies, posted
im trying to add different icons for groups but they wont work for my chat? im using silkchat and here is the full code. they show up as purple and black icons. also for owner and moderator i added custom icon16 in there but it wont work it only works for vip since i used one that was already in there
[lua]if SERVER then
AddCSLuaFile()
return;
end
local bnmk_start = CurTime()
MsgC(Color(0, 160, 255), "] SilkChat v1.5 by VorteX\n")
MsgC(Color(0, 160, 255), "] Thanks to _Undefined for his Lua Dump!\n")
-- surface.CreateFont("coolvetica", 20, 400, true, false, "SilkChatFont", false, false)
surface.CreateFont("SilkChatFont", {
font = "Coolvetica",
size = 20,
weight = 400,
antialias = true
})
local ChatBox = {}
ChatBox.ShowChat = false
ChatBox.Lines = {}
ChatBox.Chat = ""
ChatBox.TeamChat = false
ChatBox.TexIDs = {}
ChatBox.DefaultIcon = "icon16/information.png"
ChatBox.LinesToShow = 8
local function isDarkRP()
local b = false
if LocalPlayer().DarkRPVars != nil then
b = true
end
return b
end
local function ToWidth(s)
surface.SetFont("SilkChatFont")
return surface.GetTextSize(s)
end
local function ColorAlpha(col, alpha)
return Color(col.r, col.g, col.b, alpha)
end
local function getPlayerIcon(ply)
local icon = "icon16/user.png"
if LevelIcon and ASS_VERSION then // hey assmod!
icon = LevelIcon[ply:GetNWInt("ASS_isAdmin", 5)]
else
if ply:IsSuperAdmin() then
icon = "icon16/shield_add.png"
elseif ply:IsAdmin() then
icon = "icon16/shield.png"
elseif ply:IsUserGroup("Owner") then
icon = "icon16/shield_rainbow.png"
elseif ply:IsUserGroup("moderator") then
icon = "icon16/shield_silver.png"
elseif ply:IsUserGroup("vip") then
icon = "icon16/award_star_gold_3.png"
end
end
return icon
end
function ChatBox.AddLine(icon, ...)
table.insert(ChatBox.Lines, 1, {
text = {...},
time = CurTime(),
-- icon = surface.GetTextureID(icon)
icon = icon
})
ChatBox.Lines[ChatBox.LinesToShow + 1] = nil
end
local x, y = 35, ScrH() - 133
local chaticon, teamchaticon = "icon16/world.png", "icon16/group.png"
hook.Add("HUDPaint", "DrawChat", function()
for k, line in pairs(ChatBox.Lines) do
if ChatBox.ShowChat or line.time > CurTime() - 20 then
local alpha100 = 100
local alpha255 = 255
if ChatBox.ShowChat then
alpha100 = 150
alpha255 = 255
else
alpha100 = math.Clamp(5 - ((CurTime() - (line.time + 20))) * 20, 0, 100)
alpha255 = math.Clamp(5 - ((CurTime() - (line.time + 20))) * 20, 0, 255)
end
local width = 0
for _, part in pairs(line.text) do
if type(part) == "string" then
width = width + ToWidth(part)
elseif type(part) == "Player" and IsValid(part) then
width = width + ToWidth(part:Nick())
end
end
draw.RoundedBox(6, x, y + (-30 * k), width + 30, 23, Color(0, 0, 0, alpha100))
if line.icon then
-- surface.SetTexture(line.icon)
surface.SetMaterial(Material(line.icon))
surface.SetDrawColor(255, 255, 255, alpha255)
surface.DrawTexturedRect(x + 6, y + (-30 * k) + 3, 16, 16)
end
local cur_x = x + 26
local last_color = Color(255, 255, 255, 0)
for _, part in pairs(line.text) do
if type(part) == "string" then
draw.SimpleText(part, "SilkChatFont", cur_x, y + (-30 * k) + 2, ColorAlpha(last_color, alpha255), TEXT_ALIGN_LEFT, TEXT_ALIGN_LEFT)
cur_x = cur_x + ToWidth(part)
elseif type(part) == "Player" then
draw.SimpleText(part:Nick(), "SilkChatFont", cur_x, y + (-30 * k) + 2, ColorAlpha(team.GetColor(part:Team()), alpha255), TEXT_ALIGN_LEFT, TEXT_ALIGN_LEFT)
cur_x = cur_x + ToWidth(part:Nick())
elseif type(part) == "table" then
last_color = part
end
end
end
end
if ChatBox.ShowChat then
draw.RoundedBox(6, x, y, ToWidth(ChatBox.Chat) + 30, 23, Color(0, 0, 0, 100))
if ChatBox.TeamChat then
icon = teamchaticon
else
icon = chaticon
end
surface.SetMaterial(Material(icon))
surface.SetDrawColor(255, 255, 255, 255)
surface.DrawTexturedRect(x + 6, y + 4, 16, 16)
draw.SimpleText(ChatBox.Chat, "SilkChatFont", x + 26, y + 2, Color(255, 255, 255, 255), TEXT_ALIGN_LEFT, TEXT_ALIGN_LEFT)
end
end)
hook.Add("OnPlayerChat", "Text", function(ply, text, teamchat, dead)
if isDarkRP() then return; end
if IsValid(ply) then
local icon
-- if ply:IsAdmin() then
-- icon = "shield"
-- else
-- icon = "user"
-- end
icon = getPlayerIcon(ply)
if teamchat then icon = "icon16/group.png" end
-- ChatBox.AddLine(icon, ply, ": ", text)
ChatBox.AddLine(icon, team.GetColor(ply:Team()), ply:Nick(), Color(255, 255, 255, 255), ": ", text)
else
ChatBox.AddLine("icon16/heart.png", "Jesus:", text)
end
return true
end)
local UserManagement = {
["superadmin"] = {Icon = "icon16/shield_add.png"},
["admin"] = {Icon = "icon16/shield.png"},
["owner"] = {Icon = "icon16/shield_rainbow.png"},
["moderator"] = {Icon = "icon16/shield_silver.png"},
["vip"] = {Icon = "icon16/award_star_gold_3.png"},
}
function GetUserIcon(ply)
if !ply then return end
local group = ply:GetNWString( "UserGroup" )
local icon = UserManagement[group]
if icon then
return icon.Icon
end
return ""
end
--Example
print(GetUserIcon(Entity(1)))--me
print(GetUserIcon(Entity(2)))--bot returns ""
hook.Add("ChatText", "ChatMessages", function(plindex, plname, text, typ)
if isDarkRP() then return; end
ChatBox.AddLine("icon16/information.png", text)
end)
if !oldchatAddText then
oldchatAddText = chat.AddText
end
function chat.AddText(...)
if isDarkRP() then oldchatAddText(Color(255, 255, 255), unpack({...})) return; end
local icon = false
local to_remove = false
for k, v in pairs({...}) do
if type(v) == "table" and v.Icon and not v.r and not v.g and not v.b and not v.a then
icon = v.Icon
to_remove = k
end
end
if not icon then
icon = ChatBox.DefaultIcon
else
table.remove({...}, to_remove)
end
ChatBox.AddLine(icon, unpack({...}))
oldchatAddText(Color(255, 255, 255), unpack({...}))
end
local function SilkChat_DarkRP(msg)
local col1 = Color(msg:ReadShort(), msg:ReadShort(), msg:ReadShort())
local name = msg:ReadString()
local ply = msg:ReadEntity()
ply = IsValid(ply) and ply or LocalPlayer()
if name == "" or not name then
name = ply:Nick()
name = name ~= "" and name or ply:SteamName()
end
local col2 = Color(msg:ReadShort(), msg:ReadShort(), msg:ReadShort())
local text = msg:ReadString()
if text and text ~= "" then
-- chat.AddText(col1, name, col2, ": "..text)
ChatBox.AddLine(getPlayerIcon(ply), col1, name, col2, ": "..text)
-- if IsValid(ply) then
-- hook.Call("OnPlayerChat", nil, ply, text, false, not ply:Alive())
-- end
else
-- chat.AddText(col1, name)
ChatBox.AddLine("icon16/information.png", col1, name)
-- hook.Call("ChatText", nil, "0", name, name, "none")
end
chat.PlaySound()
end
hook.Add( "Initialize", "SilkChat_DarkRP_Initialize", function()
usermessage.Hook("DarkRP_Chat", SilkChat_DarkRP)
end)
hook.Add("StartChat", "StartChat", function()
ChatBox.ShowChat = true
return true
end)
hook.Add("FinishChat", "FinishChat", function()
ChatBox.ShowChat = false
ChatBox.TeamChat = false
return false
end)
hook.Add("ChatTextChanged", "TextChanged", function(text)
ChatBox.Chat = text
end)
hook.Add("PlayerBindPress", "PlayerBindPress", function(ply, bind, pressed)
if string.find(bind, "messagemode2") then
ChatBox.TeamChat = true
end
end)
local bnmk_end = CurTime()
local loadedin = bnmk_end - bnmk_start
MsgC(Color(0, 160, 255), "] Loaded in " .. loadedin .. "s\n")[/lua]
Sorry, you need to Log In to post a reply to this thread.