у меня есть cmenu и аддоном сделанный телефон
так выглядит cmenu
SubMenu(“Позвонить”, “icon16/computer.png”, function(self)
local players = player.GetAll()
table.RemoveByValue(players, LocalPlayer())
for _, targetPlayer in pairs(players) do
self:AddOption2(targetPlayer:Nick(), function()
if IsValid(targetPlayer) then
LocalPlayer():ConCommand("darkrp call " .. targetPlayer:UserID())
end
end):SetColor(team.GetColor(targetPlayer:Team()))
end
end)
а вот так выглядит телефон
util.AddNetworkString(“string”)
Phone = {}
Phone.Accepted = false
function Phone.StartCall( ply )
net.Start( ‘phone’ )
net.WriteTable{
ply=ply,
act=‘call’
}
net.SendToServer()
end
function Phone.Call( ply )
if IsValid( Phone.ActiveFrame ) then return end
Phone.ActiveFrame = vgui.Create( 'DFrame' )
Phone.ActiveFrame:SetSize( 300, 100 )
Phone.ActiveFrame:SetPos( 10, ScrH()/1.3 - Phone.ActiveFrame:GetWide()/2 )
Phone.ActiveFrame:ShowCloseButton( false )
Phone.ActiveFrame.Sound = true
Phone.ActiveFrame.SoundTime = 0
Phone.ActiveFrame.Sound = true
Phone.ActiveFrame.SoundTime = 0
local f = Phone.ActiveFrame
f:SetTitle( 'Исходящий вызов' )
function f:Paint(w,h)
surface.SetDrawColor(0,0,0,150)
Phone.ActiveFrame:DrawFilledRect()
surface.SetDrawColor(0,0,0)
Phone.ActiveFrame:DrawOutlinedRect()
end
local f = Phone.ActiveFrame
f.btnMinim:SetVisible( false )
f.btnMaxim:SetVisible( false )
function f:Close()
local m = DermaMenu()
m:AddOption( 'Бросить трубку' ).DoClick = function() Phone.Deny() self:Remove() end
m:Open()
end
local accept = vgui.Create( 'DPanel', f )
accept:Dock( RIGHT )
accept:SetWide( 110 )
accept:DockMargin( 5,5,5,15 )
accept:SetText('')
local pt = nil
function accept:Paint(w,h)
if Phone.Accepted == true then
if not pt then
pt = CurTime()
end
local time = CurTime() - pt
local ft = string.FormattedTime( math.floor( time ) )
draw.DrawText( string.format( '%s:%s:%s', ft.h, ft.m, ft.s ) , 'HUDSELECTIONTEXT', w/2, h/2 - 9, Color( 255,255,255 ),TEXT_ALIGN_CENTER )
else
draw.DrawText( string.rep( '.', CurTime()%3 ) , 'HUDSELECTIONTEXT', w/2, h/2 - 9, Color( 255,255,255 ),TEXT_ALIGN_CENTER )
end
end
slb = vgui.Create( "DButton", Phone.ActiveFrame )
slb:SetSize( 110, 20 )
slb:SetPos( 185, 68 )
slb:SetText( "Бросить" )
slb:SetImage( "icon16/phone_delete.png" )
slb:SetTextColor( Color(255,255,255) )
slb.Paint = function()
surface.SetDrawColor(0,0,0)
slb:DrawOutlinedRect()
end
slb.DoClick = function() Phone.Deny() end
local avatar = vgui.Create( "AvatarImage", f )
avatar:Dock( LEFT )
avatar:DockMargin( 5,5,5,5 )
avatar:SetPlayer( ply,128 )
avatar:SetWide( 56 )
local lbl = vgui.Create( "DLabel", f )
lbl:SetFont( 'HUDSELECTIONTEXT' )
lbl:SetPos( 75, 35 )
lbl:SetText( ply:Nick() )
lbl:SetSize( 200, 20 )
local lbl2 = vgui.Create( "DLabel", f )
lbl2:SetPos( 75, 60 )
lbl2:SetText( ply:getDarkRPVar('job') )
lbl2:SetSize( 200, 20 )
lbl2:SetColor( team.GetColor( ply:Team() ) )
end
function Phone.InCall( ply )
if IsValid( Phone.ActiveFrame ) then return end
Phone.ActiveFrame = vgui.Create( 'DFrame' )
Phone.ActiveFrame:SetSize( 300, 100 )
Phone.ActiveFrame:SetPos( 10, ScrH()/2 - Phone.ActiveFrame:GetWide()/2 )
Phone.ActiveFrame.Sound = true
Phone.ActiveFrame.SoundTime = 0
local f = Phone.ActiveFrame
f:SetTitle( 'Входящий вызов' )
function f:Paint(w,h)
surface.SetDrawColor(0,0,0,150)
Phone.ActiveFrame:DrawFilledRect()
surface.SetDrawColor(0,0,0)
Phone.ActiveFrame:DrawOutlinedRect()
if self.Sound == true and CurTime() > self.SoundTime then
surface.PlaySound( 'techrp/iphone.mp3' )
self.SoundTime = CurTime() + 8
end
end
function f:Close()
local m = DermaMenu()
m:AddOption( 'Заглушить звонок' ).DoClick = function() self:SetAlpha( 100 ) self.Sound = false end
m:AddSpacer()
m:AddOption( 'Бросить трубку' ).DoClick = function() Phone.Deny() self:Remove() end
m:Open()
end
local accept = vgui.Create( 'DButton', f )
accept:Dock( RIGHT )
accept:DockMargin( 5,5,5,5 )
accept:SetText('')
function accept:Paint(w,h)
draw.RoundedBox( 0, 0, 0, w, h, Color( 0, 150, 0 ) )
draw.DrawText( 'Принять', 'HUDSELECTIONTEXT', w/2, h/2 - 9, Color( 255,255,255 ),TEXT_ALIGN_CENTER )
end
function accept:DoClick()
net.Start'phone'
net.WriteTable{ act='accept' }
net.SendToServer()
f:Remove()
Phone.Call( ply )
end
local avatar = vgui.Create( "AvatarImage", f )
avatar:Dock( LEFT )
avatar:DockMargin( 5,5,5,5 )
avatar:SetPlayer( ply,128 )
avatar:SetWide( 56 )
local lbl = vgui.Create( "DLabel", f )
lbl:SetFont( 'HUDSELECTIONTEXT' )
lbl:SetPos( 75, 35 )
lbl:SetText( ply:Nick() )
lbl:SetSize( 200, 20 )
local lbl2 = vgui.Create( "DLabel", f )
lbl2:SetPos( 75, 60 )
lbl2:SetText( ply:getDarkRPVar('job') )
lbl2:SetSize( 200, 20 )
lbl2:SetColor( team.GetColor( ply:Team() ) )
end
function Phone.Deny()
net.Start( 'phone' )
net.WriteTable{ act='deny' }
net.SendToServer()
end
net.Receive( ‘phone_client’, function()
local t=net.ReadTable()
if t.act == 'in' then
Phone.InCall( t.ply )
end
if t.act == 'out' then
Phone.Call( t.ply )
end
if t.act == 'accept' then
Phone.Accepted = true
end
if t.act == 'deny' then
Phone.Accepted = false
if IsValid( Phone.ActiveFrame ) then Phone.ActiveFrame:Remove() end
end
end)
и я не понимаю что не так выдаёт 2 ошибки