217 lines
6.4 KiB
Lua
217 lines
6.4 KiB
Lua
local QuestionVGUI = {}
|
|
local PanelNum = 0
|
|
local VoteVGUI = {}
|
|
local function MsgDoVote(msg)
|
|
local _, chatY = chat.GetChatBoxPos()
|
|
|
|
local question = msg:ReadString()
|
|
local voteid = msg:ReadShort()
|
|
local timeleft = msg:ReadFloat()
|
|
if timeleft == 0 then
|
|
timeleft = 100
|
|
end
|
|
local OldTime = CurTime()
|
|
if not IsValid(LocalPlayer()) then return end -- Sent right before player initialisation
|
|
|
|
LocalPlayer():EmitSound("Town.d1_town_02_elevbell1", 100, 100)
|
|
local panel = vgui.Create("DFrame")
|
|
panel:SetPos(3 + PanelNum, chatY - 145)
|
|
panel:SetTitle(DarkRP.getPhrase("vote"))
|
|
panel:SetSize(140, 140)
|
|
panel:SetSizable(false)
|
|
panel.btnClose:SetVisible(false)
|
|
panel.btnMaxim:SetVisible(false)
|
|
panel.btnMinim:SetVisible(false)
|
|
panel:SetDraggable(false)
|
|
function panel:Close()
|
|
PanelNum = PanelNum - 140
|
|
VoteVGUI[voteid .. "vote"] = nil
|
|
|
|
local num = 0
|
|
for _, v in SortedPairs(VoteVGUI) do
|
|
v:SetPos(num, ScrH() / 2 - 50)
|
|
num = num + 140
|
|
end
|
|
|
|
for _, v in SortedPairs(QuestionVGUI) do
|
|
v:SetPos(num, ScrH() / 2 - 50)
|
|
num = num + 300
|
|
end
|
|
self:Remove()
|
|
end
|
|
|
|
function panel:Think()
|
|
self:SetTitle(DarkRP.getPhrase("time", math.Clamp(math.ceil(timeleft - (CurTime() - OldTime)), 0, 9999)))
|
|
if timeleft - (CurTime() - OldTime) <= 0 then
|
|
panel:Close()
|
|
end
|
|
end
|
|
|
|
panel:SetKeyboardInputEnabled(false)
|
|
panel:SetMouseInputEnabled(true)
|
|
panel:SetVisible(true)
|
|
|
|
local label = vgui.Create("DLabel")
|
|
label:SetParent(panel)
|
|
label:SetPos(5, 25)
|
|
label:SetText(DarkRP.textWrap(DarkRP.deLocalise(question), "DermaDefault", 130))
|
|
label:SizeToContents()
|
|
label:SetVisible(true)
|
|
|
|
local nextHeight = label:GetTall() > 78 and label:GetTall() - 78 or 0 -- Make panel taller for buttons
|
|
panel:SetTall(panel:GetTall() + nextHeight)
|
|
|
|
local ybutton = vgui.Create("Button")
|
|
ybutton:SetParent(panel)
|
|
ybutton:SetPos(25, panel:GetTall() - 25)
|
|
ybutton:SetSize(40, 20)
|
|
ybutton:SetText(DarkRP.getPhrase("yes"))
|
|
ybutton:SetVisible(true)
|
|
ybutton.DoClick = function()
|
|
LocalPlayer():ConCommand("vote " .. voteid .. " yea\n")
|
|
panel:Close()
|
|
end
|
|
|
|
local nbutton = vgui.Create("Button")
|
|
nbutton:SetParent(panel)
|
|
nbutton:SetPos(70, panel:GetTall() - 25)
|
|
nbutton:SetSize(40, 20)
|
|
nbutton:SetText(DarkRP.getPhrase("no"))
|
|
nbutton:SetVisible(true)
|
|
nbutton.DoClick = function()
|
|
LocalPlayer():ConCommand("vote " .. voteid .. " nay\n")
|
|
panel:Close()
|
|
end
|
|
|
|
PanelNum = PanelNum + 140
|
|
VoteVGUI[voteid .. "vote"] = panel
|
|
panel:SetSkin(GAMEMODE.Config.DarkRPSkin)
|
|
end
|
|
usermessage.Hook("DoVote", MsgDoVote)
|
|
|
|
local function KillVoteVGUI(msg)
|
|
local id = msg:ReadShort()
|
|
|
|
if VoteVGUI[id .. "vote"] and VoteVGUI[id .. "vote"]:IsValid() then
|
|
VoteVGUI[id .. "vote"]:Close()
|
|
end
|
|
end
|
|
usermessage.Hook("KillVoteVGUI", KillVoteVGUI)
|
|
|
|
local function MsgDoQuestion(msg)
|
|
if not IsValid(LocalPlayer()) then return end
|
|
|
|
local question = msg:ReadString()
|
|
local quesid = msg:ReadString()
|
|
local timeleft = msg:ReadFloat()
|
|
if timeleft == 0 then
|
|
timeleft = 100
|
|
end
|
|
local OldTime = CurTime()
|
|
LocalPlayer():EmitSound("Town.d1_town_02_elevbell1", 100, 100)
|
|
local panel = vgui.Create("DFrame")
|
|
panel:SetPos(3 + PanelNum, ScrH() / 2 - 50) -- Times 140 because if the question is the second screen, the first screen is always a vote screen.
|
|
panel:SetSize(300, 140)
|
|
panel:SetSizable(false)
|
|
panel.btnClose:SetVisible(false)
|
|
panel.btnMaxim:SetVisible(false)
|
|
panel.btnMinim:SetVisible(false)
|
|
panel:SetKeyboardInputEnabled(false)
|
|
panel:SetMouseInputEnabled(true)
|
|
panel:SetVisible(true)
|
|
|
|
function panel:Close()
|
|
PanelNum = PanelNum - 300
|
|
QuestionVGUI[quesid .. "ques"] = nil
|
|
local num = 0
|
|
for _, v in SortedPairs(VoteVGUI) do
|
|
v:SetPos(num, ScrH() / 2 - 50)
|
|
num = num + 140
|
|
end
|
|
|
|
for _, v in SortedPairs(QuestionVGUI) do
|
|
v:SetPos(num, ScrH() / 2 - 50)
|
|
num = num + 300
|
|
end
|
|
|
|
self:Remove()
|
|
end
|
|
|
|
function panel:Think()
|
|
self:SetTitle(DarkRP.getPhrase("time", math.Clamp(math.ceil(timeleft - (CurTime() - OldTime)), 0, 9999)))
|
|
if timeleft - (CurTime() - OldTime) <= 0 then
|
|
panel:Close()
|
|
end
|
|
end
|
|
|
|
local label = vgui.Create("DLabel")
|
|
label:SetParent(panel)
|
|
label:SetPos(5, 30)
|
|
label:SetSize(380, 40)
|
|
label:SetText(DarkRP.deLocalise(question))
|
|
label:SetVisible(true)
|
|
|
|
local ybutton = vgui.Create("DButton")
|
|
ybutton:SetParent(panel)
|
|
ybutton:SetPos(105, 100)
|
|
ybutton:SetSize(40, 20)
|
|
ybutton:SetText(DarkRP.getPhrase("yes"))
|
|
ybutton:SetVisible(true)
|
|
ybutton.DoClick = function()
|
|
LocalPlayer():ConCommand("ans " .. quesid .. " 1\n")
|
|
panel:Close()
|
|
end
|
|
|
|
local nbutton = vgui.Create("DButton")
|
|
nbutton:SetParent(panel)
|
|
nbutton:SetPos(155, 100)
|
|
nbutton:SetSize(40, 20)
|
|
nbutton:SetText(DarkRP.getPhrase("no"))
|
|
nbutton:SetVisible(true)
|
|
nbutton.DoClick = function()
|
|
LocalPlayer():ConCommand("ans " .. quesid .. " 2\n")
|
|
panel:Close()
|
|
end
|
|
|
|
PanelNum = PanelNum + 300
|
|
QuestionVGUI[quesid .. "ques"] = panel
|
|
|
|
panel:SetSkin(GAMEMODE.Config.DarkRPSkin)
|
|
end
|
|
usermessage.Hook("DoQuestion", MsgDoQuestion)
|
|
|
|
local function KillQuestionVGUI(msg)
|
|
local id = msg:ReadString()
|
|
|
|
if QuestionVGUI[id .. "ques"] and QuestionVGUI[id .. "ques"]:IsValid() then
|
|
QuestionVGUI[id .. "ques"]:Close()
|
|
end
|
|
end
|
|
usermessage.Hook("KillQuestionVGUI", KillQuestionVGUI)
|
|
|
|
local function DoVoteAnswerQuestion(ply, cmd, args)
|
|
if not args[1] then return end
|
|
|
|
local vote = 0
|
|
if tonumber(args[1]) == 1 or string.lower(args[1]) == "yes" or string.lower(args[1]) == "true" then vote = 1 end
|
|
|
|
for k, v in pairs(VoteVGUI) do
|
|
if IsValid(v) then
|
|
local ID = string.sub(k, 1, -5)
|
|
VoteVGUI[k]:Close()
|
|
RunConsoleCommand("vote", ID, vote)
|
|
return
|
|
end
|
|
end
|
|
|
|
for k, v in pairs(QuestionVGUI) do
|
|
if IsValid(v) then
|
|
local ID = string.sub(k, 1, -5)
|
|
QuestionVGUI[k]:Close()
|
|
RunConsoleCommand("ans", ID, vote)
|
|
return
|
|
end
|
|
end
|
|
end
|
|
concommand.Add("rp_vote", DoVoteAnswerQuestion)
|