228 lines
7.1 KiB
Lua
228 lines
7.1 KiB
Lua
local PANEL
|
|
local minHitDistanceSqr = GM.Config.minHitDistance * GM.Config.minHitDistance
|
|
|
|
--[[---------------------------------------------------------------------------
|
|
Hitman menu
|
|
---------------------------------------------------------------------------]]
|
|
PANEL = {}
|
|
|
|
AccessorFunc(PANEL, "hitman", "Hitman")
|
|
AccessorFunc(PANEL, "target", "Target")
|
|
AccessorFunc(PANEL, "selected", "Selected")
|
|
|
|
function PANEL:Init()
|
|
self.BaseClass.Init(self)
|
|
|
|
self.btnClose = vgui.Create("DButton", self)
|
|
self.btnClose:SetText("")
|
|
self.btnClose.DoClick = function() self:Remove() end
|
|
self.btnClose.Paint = function(panel, w, h) derma.SkinHook("Paint", "WindowCloseButton", panel, w, h) end
|
|
|
|
self.icon = vgui.Create("SpawnIcon", self)
|
|
self.icon:SetDisabled(true)
|
|
self.icon.PaintOver = function(icon) icon:SetTooltip() end
|
|
self.icon:SetTooltip()
|
|
|
|
self.title = vgui.Create("DLabel", self)
|
|
self.title:SetText(DarkRP.getPhrase("hitman"))
|
|
|
|
self.name = vgui.Create("DLabel", self)
|
|
self.price = vgui.Create("DLabel", self)
|
|
|
|
self.playerList = vgui.Create("DScrollPanel", self)
|
|
|
|
self.btnRequest = vgui.Create("HitmanMenuButton", self)
|
|
self.btnRequest:SetText(DarkRP.getPhrase("hitmenu_request"))
|
|
self.btnRequest.DoClick = function()
|
|
if IsValid(self:GetTarget()) then
|
|
RunConsoleCommand("darkrp", "requesthit", self:GetTarget():SteamID(), self:GetHitman():UserID())
|
|
self:Remove()
|
|
end
|
|
end
|
|
|
|
self.btnCancel = vgui.Create("HitmanMenuButton", self)
|
|
self.btnCancel:SetText(DarkRP.getPhrase("cancel"))
|
|
self.btnCancel.DoClick = function() self:Remove() end
|
|
|
|
self:SetSkin(GAMEMODE.Config.DarkRPSkin)
|
|
|
|
self:InvalidateLayout()
|
|
end
|
|
|
|
function PANEL:Think()
|
|
if not IsValid(self:GetHitman()) or self:GetHitman():GetPos():DistToSqr(LocalPlayer():GetPos()) > minHitDistanceSqr then
|
|
self:Remove()
|
|
return
|
|
end
|
|
|
|
-- update the price (so the hitman can't scam)
|
|
self.price:SetText(DarkRP.getPhrase("priceTag", DarkRP.formatMoney(self:GetHitman():getHitPrice()), ""))
|
|
self.price:SizeToContents()
|
|
end
|
|
|
|
function PANEL:PerformLayout()
|
|
local w, h = self:GetSize()
|
|
|
|
self:SetSize(500, 700)
|
|
self:Center()
|
|
|
|
self.btnClose:SetSize(24, 24)
|
|
self.btnClose:SetPos(w - 24 - 5, 5)
|
|
|
|
self.icon:SetSize(128, 128)
|
|
self.icon:SetModel(self:GetHitman():GetModel())
|
|
self.icon:SetPos(20, 20)
|
|
|
|
self.title:SetFont("ScoreboardHeader")
|
|
self.title:SetPos(20 + 128 + 20, 20)
|
|
self.title:SizeToContents(true)
|
|
|
|
self.name:SizeToContents(true)
|
|
self.name:SetText(DarkRP.getPhrase("name", self:GetHitman():Nick()))
|
|
self.name:SetPos(20 + 128 + 20, 20 + self.title:GetTall())
|
|
|
|
self.price:SetFont("HUDNumber5")
|
|
self.price:SetColor(Color(255, 0, 0, 255))
|
|
self.price:SetText(DarkRP.getPhrase("priceTag", DarkRP.formatMoney(self:GetHitman():getHitPrice()), ""))
|
|
self.price:SetPos(20 + 128 + 20, 20 + self.title:GetTall() + 20)
|
|
self.price:SizeToContents(true)
|
|
|
|
self.playerList:SetPos(20, 20 + self.icon:GetTall() + 20)
|
|
self.playerList:SetWide(self:GetWide() - 40)
|
|
|
|
self.btnRequest:SetPos(20, h - self.btnRequest:GetTall() - 20)
|
|
self.btnRequest:SetButtonColor(Color(0, 120, 30, 255))
|
|
|
|
self.btnCancel:SetPos(w - self.btnCancel:GetWide() - 20, h - self.btnCancel:GetTall() - 20)
|
|
self.btnCancel:SetButtonColor(Color(140, 0, 0, 255))
|
|
|
|
self.playerList:StretchBottomTo(self.btnRequest, 20)
|
|
|
|
self.BaseClass.PerformLayout(self)
|
|
end
|
|
|
|
function PANEL:Paint()
|
|
local w, h = self:GetSize()
|
|
|
|
surface.SetDrawColor(Color(0, 0, 0, 200))
|
|
surface.DrawRect(0, 0, w, h)
|
|
end
|
|
|
|
function PANEL:AddPlayerRows()
|
|
local players = table.Copy(player.GetAll())
|
|
|
|
table.sort(players, function(a, b)
|
|
local aTeam, bTeam, aNick, bNick = team.GetName(a:Team()), team.GetName(b:Team()), string.lower(a:Nick()), string.lower(b:Nick())
|
|
return aTeam == bTeam and aNick < bNick or aTeam < bTeam
|
|
end)
|
|
|
|
for _, v in ipairs(players) do
|
|
local canRequest = hook.Call("canRequestHit", DarkRP.hooks, self:GetHitman(), LocalPlayer(), v, self:GetHitman():getHitPrice())
|
|
if not canRequest then continue end
|
|
|
|
local line = vgui.Create("HitmanMenuPlayerRow")
|
|
line:SetPlayer(v)
|
|
self.playerList:AddItem(line)
|
|
line:SetWide(self.playerList:GetWide() - 100)
|
|
line:Dock(TOP)
|
|
|
|
line.DoClick = function()
|
|
self:SetTarget(line:GetPlayer())
|
|
|
|
if IsValid(self:GetSelected()) then
|
|
self:GetSelected():SetSelected(false)
|
|
end
|
|
|
|
line:SetSelected(true)
|
|
self:SetSelected(line)
|
|
end
|
|
end
|
|
end
|
|
|
|
vgui.Register("HitmanMenu", PANEL, "DPanel")
|
|
|
|
--[[---------------------------------------------------------------------------
|
|
Hitmenu button
|
|
---------------------------------------------------------------------------]]
|
|
PANEL = {}
|
|
|
|
AccessorFunc(PANEL, "btnColor", "ButtonColor")
|
|
|
|
function PANEL:PerformLayout()
|
|
self:SetSize(self:GetParent():GetWide() / 2 - 30, 100)
|
|
self:SetFont("HUDNumber5")
|
|
self:SetTextColor(color_white)
|
|
|
|
self.BaseClass.PerformLayout(self)
|
|
end
|
|
|
|
function PANEL:Paint()
|
|
local w, h = self:GetSize()
|
|
local col = self:GetButtonColor() or Color(0, 120, 30, 255)
|
|
surface.SetDrawColor(col.r, col.g, col.b, col.a)
|
|
surface.DrawRect(0, 0, w, h)
|
|
end
|
|
|
|
vgui.Register("HitmanMenuButton", PANEL, "DButton")
|
|
|
|
--[[---------------------------------------------------------------------------
|
|
Player row
|
|
---------------------------------------------------------------------------]]
|
|
PANEL = {}
|
|
|
|
AccessorFunc(PANEL, "player", "Player")
|
|
AccessorFunc(PANEL, "selected", "Selected", FORCE_BOOL)
|
|
|
|
function PANEL:Init()
|
|
self.lblName = vgui.Create("DLabel", self)
|
|
self.lblName:SetMouseInputEnabled(false)
|
|
self.lblName:SetColor(Color(255,255,255,200))
|
|
|
|
self.lblTeam = vgui.Create("DLabel", self)
|
|
self.lblTeam:SetMouseInputEnabled(false)
|
|
self.lblTeam:SetColor(Color(255,255,255,200))
|
|
|
|
self:SetText("")
|
|
|
|
self:SetCursor("hand")
|
|
end
|
|
|
|
function PANEL:PerformLayout()
|
|
local ply = self:GetPlayer()
|
|
if not IsValid(ply) then self:Remove() return end
|
|
|
|
self.lblName:SetFont("UiBold")
|
|
self.lblName:SetText(DarkRP.deLocalise(ply:Nick()))
|
|
self.lblName:SizeToContents()
|
|
self.lblName:SetPos(10, 1)
|
|
|
|
self.lblTeam:SetFont("UiBold")
|
|
self.lblTeam:SetText((ply.DarkRPVars and DarkRP.deLocalise(ply:getDarkRPVar("job") or "")) or team.GetName(ply:Team()))
|
|
self.lblTeam:SizeToContents()
|
|
self.lblTeam:SetPos(self:GetWide() / 2, 1)
|
|
end
|
|
|
|
function PANEL:Paint()
|
|
if not IsValid(self:GetPlayer()) then self:Remove() return end
|
|
|
|
local color = team.GetColor(self:GetPlayer():Team())
|
|
color.a = self:GetSelected() and 70 or 255
|
|
|
|
surface.SetDrawColor(color)
|
|
surface.DrawRect(0, 0, self:GetWide(), 20)
|
|
end
|
|
|
|
vgui.Register("HitmanMenuPlayerRow", PANEL, "Button")
|
|
|
|
--[[---------------------------------------------------------------------------
|
|
Open the hit menu
|
|
---------------------------------------------------------------------------]]
|
|
function DarkRP.openHitMenu(hitman)
|
|
local frame = vgui.Create("HitmanMenu")
|
|
frame:SetHitman(hitman)
|
|
frame:AddPlayerRows()
|
|
frame:SetVisible(true)
|
|
frame:MakePopup()
|
|
frame:ParentToHUD()
|
|
end
|