mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
321
gamemodes/darkrp/plugins/phone/derma/cl_landline.lua
Normal file
321
gamemodes/darkrp/plugins/phone/derma/cl_landline.lua
Normal file
@@ -0,0 +1,321 @@
|
||||
--[[
|
||||
| This file was obtained through the combined efforts
|
||||
| of Madbluntz & Plymouth Antiquarian Society.
|
||||
|
|
||||
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
||||
| Maloy, DrPepper10 @ RIP, Atle!
|
||||
|
|
||||
| Visit for more: https://plymouth.thetwilightzone.ru/
|
||||
--]]
|
||||
|
||||
|
||||
local PLUGIN = PLUGIN
|
||||
PLUGIN.offHook = false
|
||||
PLUGIN.otherSideRinging = false
|
||||
PLUGIN.otherSideActive = false
|
||||
PLUGIN.currentCallStatus = "WAITING"
|
||||
PLUGIN.currentCallPeerName = "Unknown"
|
||||
PLUGIN.currentLineStatus = ""
|
||||
|
||||
local dialSeq = {}
|
||||
local buttonMap = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "*", "0", "#"}
|
||||
|
||||
local PANEL = {}
|
||||
|
||||
function dialSeq:insert(signal)
|
||||
self[#self+1] = signal
|
||||
end
|
||||
|
||||
function dialSeq:reset()
|
||||
for k, signal in ipairs(self) do
|
||||
self[k] = nil
|
||||
end
|
||||
end
|
||||
|
||||
function dialSeq:asStr()
|
||||
local dialSeqStr = ""
|
||||
for _, signal in ipairs(self) do
|
||||
dialSeqStr = dialSeqStr..signal
|
||||
end
|
||||
return dialSeqStr
|
||||
end
|
||||
|
||||
function dialSeq:playDTMFTone(signal)
|
||||
local _signal = signal
|
||||
if (signal == "*") then _signal = "asterisk" end
|
||||
if (signal == "#") then _signal = "pound" end
|
||||
|
||||
surface.PlaySound("dtmftones/dtmfgen_".._signal..".wav")
|
||||
end
|
||||
|
||||
function PANEL:Init()
|
||||
PLUGIN.currentLineStatus = ""
|
||||
|
||||
if (IsValid(PLUGIN.panel)) then
|
||||
PLUGIN.panel:Remove()
|
||||
end
|
||||
|
||||
self:SetSize(500, 780)
|
||||
self:Center()
|
||||
self:CenterHorizontal(0.6)
|
||||
self:SetBackgroundBlur(false)
|
||||
self:SetDeleteOnClose(true)
|
||||
self:SetTitle(" ")
|
||||
self:ShowCloseButton(false)
|
||||
self:IsDraggable(true)
|
||||
|
||||
self.verStamp = self:Add("DLabel")
|
||||
self.verStamp:Dock(TOP)
|
||||
self.verStamp:DockMargin(0, 7, 55, 0)
|
||||
self.verStamp:SetFont("DermaDefaultBold")
|
||||
self.verStamp:SetHeight(30)
|
||||
self.verStamp:SetColor(Color(215, 240, 231))
|
||||
self.verStamp:SetText(L("UU pbxOS BETA v0.254ga - NODEID - "..tostring(PLUGIN.targetedLandlineEndpointID)))
|
||||
self.verStamp:SetContentAlignment(9)
|
||||
|
||||
self.status = self:Add("DLabel")
|
||||
self.status:Dock(TOP)
|
||||
self.status:DockMargin(0, -10, 0, 0)
|
||||
self.status:SetFont("DermaDefaultBold")
|
||||
self.status:SetHeight(30)
|
||||
self.status:SetColor(Color(215, 240, 231))
|
||||
local _connStatus = "DISCONNECTED!"
|
||||
local _curPBX = "N/A"
|
||||
if (PLUGIN.targetedLandlinePBX and PLUGIN.targetedLandlinePBX > 0) then
|
||||
_connStatus = "ACTIVE"
|
||||
_curPBX = "0"..tostring(PLUGIN.targetedLandlinePBX)
|
||||
end
|
||||
self.status:SetText(L("Connection Status: ".._connStatus))
|
||||
self.status:SetContentAlignment(5)
|
||||
|
||||
self.name = self:Add("DLabel")
|
||||
self.name:Dock(TOP)
|
||||
self.name:DockMargin(0, 4, 75, 0)
|
||||
self.name:SetText(L(tostring(PLUGIN.targetedLandlineName)))
|
||||
self.name:SetHeight(35)
|
||||
self.name:SetFont("CloseCaption_Bold")
|
||||
self.name:SetColor(Color(15, 13, 44, 220))
|
||||
self.name:SetContentAlignment(9)
|
||||
|
||||
self.pBX = self:Add("DLabel")
|
||||
self.pBX:Dock(TOP)
|
||||
self.pBX:DockMargin(75, 4, 0, 0)
|
||||
self.pBX:SetText(L("PBX :> ".._curPBX))
|
||||
self.pBX:SetHeight(35)
|
||||
self.pBX:SetFont("CloseCaption_Bold")
|
||||
self.pBX:SetColor(Color(15, 13, 44, 220))
|
||||
self.pBX:SetContentAlignment(7)
|
||||
|
||||
self.ext = self:Add("DLabel")
|
||||
self.ext:Dock(TOP)
|
||||
self.ext:DockMargin(75, 4, 0, 0)
|
||||
self.ext:SetText(L("EXT :> "..tostring(PLUGIN.targetedLandlineExt)))
|
||||
self.ext:SetHeight(35)
|
||||
self.ext:SetFont("CloseCaption_Bold")
|
||||
self.ext:SetColor(Color(15, 13, 44, 220))
|
||||
self.ext:SetContentAlignment(7)
|
||||
|
||||
self.dialSeqText = self:Add("DLabel")
|
||||
self.dialSeqText:Dock(TOP)
|
||||
self.dialSeqText:DockMargin(75, 4, 0, 0)
|
||||
self.dialSeqText:SetText(L("DIAL :> "))
|
||||
self.dialSeqText:SetHeight(50)
|
||||
self.dialSeqText:SetFont("CloseCaption_Bold")
|
||||
self.dialSeqText:SetColor(Color(15, 13, 44, 220))
|
||||
self.dialSeqText:SetContentAlignment(7)
|
||||
|
||||
local close = vgui.Create("DButton")
|
||||
close:SetText(L("close"))
|
||||
close:SetSize(70, 70)
|
||||
close.DoClick = function()
|
||||
dialSeq:playDTMFTone("#")
|
||||
self:Close()
|
||||
|
||||
PLUGIN.offHook = false
|
||||
PLUGIN.otherSideRinging = false
|
||||
PLUGIN.otherSideActive = false
|
||||
PLUGIN.currentCallStatus = "WAITING"
|
||||
PLUGIN.currentCallPeerName = "Unknown"
|
||||
|
||||
net.Start("RunHangupLandline")
|
||||
net.SendToServer()
|
||||
|
||||
LocalPlayer():StopSound("landline_ringtone.wav")
|
||||
LocalPlayer():StopSound("landline_dialtone.wav")
|
||||
end
|
||||
|
||||
local dial = vgui.Create("DButton")
|
||||
dial:SetText(L("Dial"))
|
||||
dial:SetColor(Color(0, 255, 0))
|
||||
dial:SetSize(70, 70)
|
||||
dial.DoClick = function()
|
||||
if (PLUGIN.otherSideRinging or PLUGIN.otherSideActive or
|
||||
PLUGIN.currentCallStatus ~= "WAITING") then
|
||||
return
|
||||
end
|
||||
|
||||
net.Start("BeginDialToPeer")
|
||||
net.WriteString(dialSeq:asStr())
|
||||
net.WriteInt(PLUGIN.targetedLandlinePBX, 5)
|
||||
net.WriteInt(PLUGIN.targetedLandlineExt, 11)
|
||||
net.SendToServer()
|
||||
|
||||
net.Start("LandlineKeyPress")
|
||||
net.WriteInt(PLUGIN.landlineEntIdx, 17)
|
||||
net.SendToServer()
|
||||
|
||||
PLUGIN.offHook = true
|
||||
PLUGIN.otherSideRinging = true
|
||||
PLUGIN.otherSideActive = false
|
||||
PLUGIN.currentCallStatus = "RINGING"
|
||||
|
||||
-- doing this instead of surface.PlaySound so we can stop it
|
||||
LocalPlayer():EmitSound("landline_ringtone.wav", 40, 100, 1, CHAN_STATIC)
|
||||
end
|
||||
|
||||
local reset = vgui.Create("DButton")
|
||||
reset:SetText(L("Reset"))
|
||||
reset:SetColor(Color(255, 0, 0))
|
||||
reset:SetSize(70, 70)
|
||||
reset.DoClick = function()
|
||||
dialSeq:reset()
|
||||
dialSeq:playDTMFTone("0")
|
||||
self.dialSeqText:SetText(L("DIAL :> "))
|
||||
|
||||
net.Start("LandlineKeyPress")
|
||||
net.WriteInt(PLUGIN.landlineEntIdx, 17)
|
||||
net.SendToServer()
|
||||
end
|
||||
|
||||
self.optsGrid = self:Add("DGrid")
|
||||
self.optsGrid:SetPos(350, 400)
|
||||
self.optsGrid:SetCols(1)
|
||||
self.optsGrid:SetColWide(80)
|
||||
self.optsGrid:SetRowHeight(80)
|
||||
|
||||
self.optsGrid:AddItem(reset)
|
||||
self.optsGrid:AddItem(dial)
|
||||
self.optsGrid:AddItem(close)
|
||||
|
||||
self.numberGrid = self:Add("DGrid")
|
||||
self.numberGrid:SetPos(100, 400)
|
||||
self.numberGrid:SetCols(3)
|
||||
self.numberGrid:SetColWide(80)
|
||||
self.numberGrid:SetRowHeight(80)
|
||||
|
||||
for _, key in ipairs(buttonMap) do
|
||||
local button = vgui.Create("DButton")
|
||||
button:SetText(key)
|
||||
button:SetSize(70, 70)
|
||||
button:SetFont("DermaLarge")
|
||||
|
||||
button.DoClick = function()
|
||||
dialSeq:playDTMFTone(key)
|
||||
dialSeq:insert(key)
|
||||
self.dialSeqText:SetText(L("DIAL :> "..dialSeq:asStr()))
|
||||
|
||||
LocalPlayer():StopSound("landline_dialtone.wav")
|
||||
|
||||
net.Start("LandlineKeyPress")
|
||||
net.WriteInt(PLUGIN.landlineEntIdx, 17)
|
||||
net.SendToServer()
|
||||
end
|
||||
|
||||
self.numberGrid:AddItem(button)
|
||||
end
|
||||
|
||||
self:MakePopup()
|
||||
self:SetKeyboardInputEnabled(false)
|
||||
PLUGIN.panel = self
|
||||
|
||||
LocalPlayer():EmitSound("landline_dialtone.wav", 40, 100, 1, CHAN_STATIC)
|
||||
end
|
||||
|
||||
function PANEL:OnRemove()
|
||||
PLUGIN.panel = nil
|
||||
dialSeq:reset()
|
||||
|
||||
LocalPlayer():StopSound("landline_dialtone.wav")
|
||||
LocalPlayer():StopSound("landline_line_busy.wav")
|
||||
end
|
||||
|
||||
-- YES I know this is a bit of a mess but, what can you do?? its DERMA
|
||||
function PANEL:Paint(w, h)
|
||||
-- background
|
||||
draw.RoundedBox(6, 0, 0, w, h, Color(35, 35, 45, 200))
|
||||
|
||||
surface.SetDrawColor(61, 61, 77, 255)
|
||||
surface.DrawOutlinedRect(0, 0, w, h, 2)
|
||||
|
||||
-- "screen"
|
||||
draw.RoundedBox(6, 60, 20, 390, 350, Color(215, 240, 231))
|
||||
-- outline
|
||||
surface.SetDrawColor(15, 13, 44, 255)
|
||||
surface.DrawOutlinedRect(65, 30, 380, 320, 4)
|
||||
|
||||
-- boxes:
|
||||
local drawOutlineBoxPair = function (x, y, w, h, thick, darker, black)
|
||||
surface.SetDrawColor(150, 150, 140, 100)
|
||||
if (darker) then
|
||||
surface.SetDrawColor(150, 150, 140, 150)
|
||||
end
|
||||
if (black) then
|
||||
surface.SetDrawColor(0, 0, 0, 255)
|
||||
end
|
||||
surface.DrawRect(x, y, w, h)
|
||||
surface.SetDrawColor(15, 13, 44, 255)
|
||||
surface.DrawOutlinedRect(x, y, w, h, thick)
|
||||
end
|
||||
-- top box
|
||||
drawOutlineBoxPair(65, 30, 376, 55, 3, false, true)
|
||||
-- name
|
||||
drawOutlineBoxPair(67, 85, 376, 38, 2)
|
||||
-- exchange
|
||||
drawOutlineBoxPair(67, 123, 376, 38, 2, true)
|
||||
-- ext
|
||||
drawOutlineBoxPair(67, 161, 376, 38, 2)
|
||||
-- dial
|
||||
drawOutlineBoxPair(67, 199, 376, 38, 2, true)
|
||||
-- status
|
||||
drawOutlineBoxPair(65, 295, 376, 55, 3, false, true)
|
||||
|
||||
-- line status text
|
||||
surface.SetFont("phoneMonoDebug")
|
||||
surface.SetTextColor(15, 13, 44, 220)
|
||||
local lineStatusHeight = 13
|
||||
local lineStatusLineNo = 1
|
||||
for lineStatusLine in string.gmatch(PLUGIN.currentLineStatus, "[^\n]+") do
|
||||
surface.SetTextPos(80, 227 + (lineStatusHeight * lineStatusLineNo))
|
||||
surface.DrawText(lineStatusLine)
|
||||
lineStatusLineNo = lineStatusLineNo + 1
|
||||
end
|
||||
|
||||
-- call status text (YES i know)
|
||||
surface.SetFont("CloseCaption_Normal")
|
||||
surface.SetTextColor(215, 240, 231, 255)
|
||||
surface.SetTextPos(75, 300)
|
||||
surface.DrawText("STATUS :> ")
|
||||
surface.SetFont("CloseCaption_Bold")
|
||||
if (PLUGIN.targetedLandlinePBX and PLUGIN.targetedLandlinePBX == 0) then
|
||||
surface.DrawText("NOT SET UP")
|
||||
else
|
||||
surface.DrawText(tostring(PLUGIN.currentCallStatus))
|
||||
end
|
||||
surface.SetTextPos(190, 300)
|
||||
if (PLUGIN.otherSideActive == true and PLUGIN.currentCallStatus == "") then
|
||||
surface.SetFont("CloseCaption_Normal")
|
||||
surface.DrawText(tostring(PLUGIN.currentCallPeerName) or "Unknown")
|
||||
surface.SetFont("CloseCaption_Bold")
|
||||
end
|
||||
|
||||
-- time text
|
||||
surface.SetTextColor(215, 240, 231, 255)
|
||||
surface.SetTextPos(70, 35)
|
||||
local ostime = os.time()
|
||||
surface.SetFont("DermaDefaultBold")
|
||||
surface.DrawText(os.date("%H:%M:%S", ostime))
|
||||
surface.SetTextPos(70, 50)
|
||||
surface.DrawText(ix.config.Get("day").."/"..ix.config.Get("month").."/"..ix.config.Get("year"))
|
||||
end
|
||||
|
||||
vgui.Register("ixLandlineDial", PANEL, "DFrame")
|
||||
Reference in New Issue
Block a user