add sborka
This commit is contained in:
@@ -0,0 +1,468 @@
|
||||
/*
|
||||
____ _ _ ____ __ __ _ _
|
||||
/ ___|___ __| | ___ __| | | __ ) _ _ | \/ | __ _| | |__ ___ _ __ ___
|
||||
| | / _ \ / _` |/ _ \/ _` | | _ \| | | | | |\/| |/ _` | | '_ \ / _ \| '__/ _ \
|
||||
| |__| (_) | (_| | __/ (_| | | |_) | |_| | | | | | (_| | | |_) | (_) | | | (_) |
|
||||
\____\___/ \__,_|\___|\__,_| |____/ \__, | |_| |_|\__,_|_|_.__/ \___/|_| \___/
|
||||
|___/
|
||||
*/
|
||||
|
||||
surface.CreateFont( "pp_font", {
|
||||
font = "Arial",
|
||||
size = 20,
|
||||
weight = 700,
|
||||
shadow = false
|
||||
} )
|
||||
|
||||
local function pp_open_menu()
|
||||
|
||||
local Len = net.ReadFloat()
|
||||
local Data = net.ReadData( Len )
|
||||
local UnCompress = util.Decompress( Data )
|
||||
local Content = util.JSONToTable( UnCompress )
|
||||
|
||||
local Main = vgui.Create( "DFrame" )
|
||||
Main:SetSize( 600, 355 )
|
||||
Main:Center()
|
||||
Main:SetTitle("")
|
||||
Main:SetVisible( true )
|
||||
Main:SetDraggable( true )
|
||||
Main:ShowCloseButton( true )
|
||||
Main:MakePopup()
|
||||
Main.Paint = function(self)
|
||||
|
||||
draw.RoundedBox( 0, 0, 0, self:GetWide(), self:GetTall(), Color(155, 155, 155, 220) )
|
||||
surface.SetDrawColor( 17, 148, 240, 255 )
|
||||
surface.DrawOutlinedRect( 0, 0, self:GetWide(), self:GetTall() )
|
||||
|
||||
draw.RoundedBox( 0, 0, 0, self:GetWide(), 25, Color(17, 148, 240, 200) )
|
||||
surface.SetDrawColor( 17, 148, 240, 255 )
|
||||
surface.DrawOutlinedRect( 0, 0, self:GetWide(), 25 )
|
||||
draw.DrawText( "PermaProps Config", "pp_font", 10, 2.2, Color(255, 255, 255, 255), TEXT_ALIGN_LEFT )
|
||||
|
||||
end
|
||||
|
||||
local BSelect
|
||||
local PSelect
|
||||
|
||||
local MainPanel = vgui.Create( "DPanel", Main )
|
||||
MainPanel:SetPos( 190, 51 )
|
||||
MainPanel:SetSize( 390, 275 )
|
||||
MainPanel.Paint = function( self )
|
||||
surface.SetDrawColor( 50, 50, 50, 200 )
|
||||
surface.DrawRect( 0, 0, self:GetWide(), self:GetTall() )
|
||||
surface.DrawOutlinedRect(0, 15, self:GetWide(), 40)
|
||||
end
|
||||
PSelect = MainPanel
|
||||
|
||||
local MainLabel = vgui.Create("DLabel", MainPanel)
|
||||
MainLabel:SetFont("pp_font")
|
||||
MainLabel:SetPos(140, 25)
|
||||
MainLabel:SetColor(Color(50, 50, 50, 255))
|
||||
MainLabel:SetText("Hey ".. LocalPlayer():Nick() .." !")
|
||||
MainLabel:SizeToContents()
|
||||
|
||||
local MainLabel2 = vgui.Create("DLabel", MainPanel)
|
||||
MainLabel2:SetFont("pp_font")
|
||||
MainLabel2:SetPos(80, 80)
|
||||
MainLabel2:SetColor(Color(50, 50, 50, 255))
|
||||
MainLabel2:SetText("There are ".. ( Content.MProps or 0 ) .." props on this map.\n\nThere are ".. ( Content.TProps or 0 ) .." props in the DB.")
|
||||
MainLabel2:SizeToContents()
|
||||
|
||||
local RemoveMapProps = vgui.Create( "DButton", MainPanel )
|
||||
RemoveMapProps:SetText( " Clear map props " )
|
||||
RemoveMapProps:SetFont("pp_font")
|
||||
RemoveMapProps:SetSize( 370, 30)
|
||||
RemoveMapProps:SetPos( 10, 160 )
|
||||
RemoveMapProps:SetTextColor( Color( 50, 50, 50, 255 ) )
|
||||
RemoveMapProps.DoClick = function()
|
||||
net.Start("pp_info_send")
|
||||
net.WriteTable({CMD = "CLR_MAP"})
|
||||
net.SendToServer()
|
||||
end
|
||||
RemoveMapProps.Paint = function(self)
|
||||
surface.SetDrawColor(50, 50, 50, 255)
|
||||
surface.DrawOutlinedRect(0, 0, self:GetWide(), self:GetTall())
|
||||
end
|
||||
|
||||
local ClearMapProps = vgui.Create( "DButton", MainPanel )
|
||||
ClearMapProps:SetText( " Clear map props in the DB " )
|
||||
ClearMapProps:SetFont("pp_font")
|
||||
ClearMapProps:SetSize( 370, 30)
|
||||
ClearMapProps:SetPos( 10, 200 )
|
||||
ClearMapProps:SetTextColor( Color( 50, 50, 50, 255 ) )
|
||||
ClearMapProps.DoClick = function()
|
||||
|
||||
Derma_Query("Are you sure you want clear map props in the db ?\nYou can't undo this action !", "PermaProps 4.0", "Yes", function() net.Start("pp_info_send") net.WriteTable({CMD = "DEL_MAP"}) net.SendToServer() end, "Cancel")
|
||||
|
||||
end
|
||||
ClearMapProps.Paint = function(self)
|
||||
surface.SetDrawColor(50, 50, 50, 255)
|
||||
surface.DrawOutlinedRect(0, 0, self:GetWide(), self:GetTall())
|
||||
end
|
||||
|
||||
local ClearAllProps = vgui.Create( "DButton", MainPanel )
|
||||
ClearAllProps:SetText( " Clear all props in the DB " )
|
||||
ClearAllProps:SetFont("pp_font")
|
||||
ClearAllProps:SetSize( 370, 30)
|
||||
ClearAllProps:SetPos( 10, 240 )
|
||||
ClearAllProps:SetTextColor( Color( 50, 50, 50, 255 ) )
|
||||
ClearAllProps.DoClick = function()
|
||||
|
||||
Derma_Query("Are you sure you want clear all props in the db ?\nYou can't undo this action !", "PermaProps 4.0", "Yes", function() net.Start("pp_info_send") net.WriteTable({CMD = "DEL_ALL"}) net.SendToServer() end, "Cancel")
|
||||
|
||||
end
|
||||
ClearAllProps.Paint = function(self)
|
||||
surface.SetDrawColor(50, 50, 50, 255)
|
||||
surface.DrawOutlinedRect(0, 0, self:GetWide(), self:GetTall())
|
||||
end
|
||||
|
||||
local BMain = vgui.Create("DButton", Main)
|
||||
BSelect = BMain
|
||||
BMain:SetText("Main")
|
||||
BMain:SetFont("pp_font")
|
||||
BMain:SetSize(160, 50)
|
||||
BMain:SetPos(15, 27 + 25)
|
||||
BMain:SetTextColor( Color( 255, 255, 255, 255 ) )
|
||||
BMain.PaintColor = Color(17, 148, 240, 100)
|
||||
BMain.Paint = function(self)
|
||||
|
||||
draw.RoundedBox(0, 0, 0, self:GetWide(), self:GetTall(), self.PaintColor)
|
||||
surface.SetDrawColor(17, 148, 240, 255)
|
||||
surface.DrawOutlinedRect(0, 0, self:GetWide(), self:GetTall())
|
||||
|
||||
end
|
||||
BMain.DoClick = function( self )
|
||||
|
||||
if BSelect then BSelect.PaintColor = Color(0, 0, 0, 0) end
|
||||
BSelect = self
|
||||
self.PaintColor = Color(17, 148, 240, 100)
|
||||
|
||||
if PSelect then PSelect:Hide() end
|
||||
MainPanel:Show()
|
||||
PSelect = MainPanel
|
||||
|
||||
end
|
||||
|
||||
local ConfigPanel = vgui.Create( "DPanel", Main )
|
||||
ConfigPanel:SetPos( 190, 51 )
|
||||
ConfigPanel:SetSize( 390, 275 )
|
||||
ConfigPanel.Paint = function( self )
|
||||
surface.SetDrawColor( 50, 50, 50, 200 )
|
||||
surface.DrawRect( 0, 0, self:GetWide(), self:GetTall() )
|
||||
end
|
||||
ConfigPanel:Hide()
|
||||
|
||||
local CheckCustom = vgui.Create( "DCheckBoxLabel", ConfigPanel )
|
||||
CheckCustom:SetPos( 5, 30 )
|
||||
CheckCustom:SetText( "Custom permissions" )
|
||||
CheckCustom:SetValue( 0 )
|
||||
CheckCustom:SizeToContents()
|
||||
CheckCustom:SetTextColor( Color( 0, 0, 0, 255) )
|
||||
CheckCustom:SetDisabled( true )
|
||||
|
||||
local GroupsList = vgui.Create( "DComboBox", ConfigPanel )
|
||||
GroupsList:SetPos( 5, 5 )
|
||||
GroupsList:SetSize( 125, 20 )
|
||||
GroupsList:SetValue( "Select a group..." )
|
||||
|
||||
local CheckBox1 = vgui.Create( "DCheckBoxLabel", ConfigPanel )
|
||||
CheckBox1:SetPos( 150, 10 )
|
||||
CheckBox1:SetText( "Menu" )
|
||||
CheckBox1:SizeToContents()
|
||||
CheckBox1:SetTextColor( Color( 0, 0, 0, 255) )
|
||||
CheckBox1:SetDisabled( true )
|
||||
CheckBox1.OnChange = function(Self, Value)
|
||||
|
||||
net.Start("pp_info_send")
|
||||
net.WriteTable({CMD = "VAR", Val = Value, Data = "Menu", Name = GroupsList:GetValue()})
|
||||
net.SendToServer()
|
||||
|
||||
end
|
||||
|
||||
local CheckBox2 = vgui.Create( "DCheckBoxLabel", ConfigPanel )
|
||||
CheckBox2:SetPos( 150, 30 )
|
||||
CheckBox2:SetText( "Edit permissions" )
|
||||
CheckBox2:SizeToContents()
|
||||
CheckBox2:SetTextColor( Color( 0, 0, 0, 255) )
|
||||
CheckBox2:SetDisabled( true )
|
||||
CheckBox2.OnChange = function(Self, Value)
|
||||
|
||||
net.Start("pp_info_send")
|
||||
net.WriteTable({CMD = "VAR", Val = Value, Data = "Permissions", Name = GroupsList:GetValue()})
|
||||
net.SendToServer()
|
||||
|
||||
end
|
||||
|
||||
local CheckBox3 = vgui.Create( "DCheckBoxLabel", ConfigPanel )
|
||||
CheckBox3:SetPos( 150, 50 )
|
||||
CheckBox3:SetText( "Physgun permaprops" )
|
||||
CheckBox3:SizeToContents()
|
||||
CheckBox3:SetTextColor( Color( 0, 0, 0, 255) )
|
||||
CheckBox3:SetDisabled( true )
|
||||
CheckBox3.OnChange = function(Self, Value)
|
||||
|
||||
net.Start("pp_info_send")
|
||||
net.WriteTable({CMD = "VAR", Val = Value, Data = "Physgun", Name = GroupsList:GetValue()})
|
||||
net.SendToServer()
|
||||
|
||||
end
|
||||
|
||||
local CheckBox4 = vgui.Create( "DCheckBoxLabel", ConfigPanel )
|
||||
CheckBox4:SetPos( 150, 70 )
|
||||
CheckBox4:SetText( "Tool permaprops" )
|
||||
CheckBox4:SizeToContents()
|
||||
CheckBox4:SetTextColor( Color( 0, 0, 0, 255) )
|
||||
CheckBox4:SetDisabled( true )
|
||||
CheckBox4.OnChange = function(Self, Value)
|
||||
|
||||
net.Start("pp_info_send")
|
||||
net.WriteTable({CMD = "VAR", Val = Value, Data = "Tool", Name = GroupsList:GetValue()})
|
||||
net.SendToServer()
|
||||
|
||||
end
|
||||
|
||||
local CheckBox5 = vgui.Create( "DCheckBoxLabel", ConfigPanel )
|
||||
CheckBox5:SetPos( 150, 90 )
|
||||
CheckBox5:SetText( "Property permaprops" )
|
||||
CheckBox5:SizeToContents()
|
||||
CheckBox5:SetTextColor( Color( 0, 0, 0, 255) )
|
||||
CheckBox5:SetDisabled( true )
|
||||
CheckBox5.OnChange = function(Self, Value)
|
||||
|
||||
net.Start("pp_info_send")
|
||||
net.WriteTable({CMD = "VAR", Val = Value, Data = "Property", Name = GroupsList:GetValue()})
|
||||
net.SendToServer()
|
||||
|
||||
end
|
||||
|
||||
local CheckBox6 = vgui.Create( "DCheckBoxLabel", ConfigPanel )
|
||||
CheckBox6:SetPos( 150, 110 )
|
||||
CheckBox6:SetText( "Save props" )
|
||||
CheckBox6:SizeToContents()
|
||||
CheckBox6:SetTextColor( Color( 0, 0, 0, 255) )
|
||||
CheckBox6:SetDisabled( true )
|
||||
CheckBox6.OnChange = function(Self, Value)
|
||||
|
||||
net.Start("pp_info_send")
|
||||
net.WriteTable({CMD = "VAR", Val = Value, Data = "Save", Name = GroupsList:GetValue()})
|
||||
net.SendToServer()
|
||||
|
||||
end
|
||||
|
||||
local CheckBox7 = vgui.Create( "DCheckBoxLabel", ConfigPanel )
|
||||
CheckBox7:SetPos( 150, 130 )
|
||||
CheckBox7:SetText( "Delete permaprops" )
|
||||
CheckBox7:SizeToContents()
|
||||
CheckBox7:SetTextColor( Color( 0, 0, 0, 255) )
|
||||
CheckBox7:SetDisabled( true )
|
||||
CheckBox7.OnChange = function(Self, Value)
|
||||
|
||||
net.Start("pp_info_send")
|
||||
net.WriteTable({CMD = "VAR", Val = Value, Data = "Delete", Name = GroupsList:GetValue()})
|
||||
net.SendToServer()
|
||||
|
||||
end
|
||||
|
||||
local CheckBox8 = vgui.Create( "DCheckBoxLabel", ConfigPanel )
|
||||
CheckBox8:SetPos( 150, 150 )
|
||||
CheckBox8:SetText( "Update permaprops" )
|
||||
CheckBox8:SizeToContents()
|
||||
CheckBox8:SetTextColor( Color( 0, 0, 0, 255) )
|
||||
CheckBox8:SetDisabled( true )
|
||||
CheckBox8.OnChange = function(Self, Value)
|
||||
|
||||
net.Start("pp_info_send")
|
||||
net.WriteTable({CMD = "VAR", Val = Value, Data = "Update", Name = GroupsList:GetValue()})
|
||||
net.SendToServer()
|
||||
|
||||
end
|
||||
|
||||
GroupsList.OnSelect = function( panel, index, value )
|
||||
|
||||
CheckCustom:SetDisabled( false )
|
||||
CheckCustom:SetChecked( Content.Permissions[value].Custom )
|
||||
|
||||
CheckBox1:SetDisabled( !Content.Permissions[value].Custom )
|
||||
CheckBox1:SetChecked( Content.Permissions[value].Menu )
|
||||
CheckBox2:SetDisabled( !Content.Permissions[value].Custom )
|
||||
CheckBox2:SetChecked( Content.Permissions[value].Permissions )
|
||||
CheckBox3:SetDisabled( !Content.Permissions[value].Custom )
|
||||
CheckBox3:SetChecked( Content.Permissions[value].Physgun )
|
||||
CheckBox4:SetDisabled( !Content.Permissions[value].Custom )
|
||||
CheckBox4:SetChecked( Content.Permissions[value].Tool )
|
||||
CheckBox5:SetDisabled( !Content.Permissions[value].Custom )
|
||||
CheckBox5:SetChecked( Content.Permissions[value].Property )
|
||||
CheckBox6:SetDisabled( !Content.Permissions[value].Custom )
|
||||
CheckBox6:SetChecked( Content.Permissions[value].Save )
|
||||
CheckBox7:SetDisabled( !Content.Permissions[value].Custom )
|
||||
CheckBox7:SetChecked( Content.Permissions[value].Delete )
|
||||
CheckBox8:SetDisabled( !Content.Permissions[value].Custom )
|
||||
CheckBox8:SetChecked( Content.Permissions[value].Update )
|
||||
|
||||
end
|
||||
|
||||
for k, v in pairs(Content.Permissions) do
|
||||
|
||||
GroupsList:AddChoice(k)
|
||||
|
||||
end
|
||||
|
||||
CheckCustom.OnChange = function(Self, Value)
|
||||
|
||||
CheckBox1:SetDisabled( !Value )
|
||||
CheckBox2:SetDisabled( !Value )
|
||||
CheckBox3:SetDisabled( !Value )
|
||||
CheckBox4:SetDisabled( !Value )
|
||||
CheckBox5:SetDisabled( !Value )
|
||||
CheckBox6:SetDisabled( !Value )
|
||||
CheckBox7:SetDisabled( !Value )
|
||||
CheckBox8:SetDisabled( !Value )
|
||||
|
||||
net.Start("pp_info_send")
|
||||
net.WriteTable({CMD = "VAR", Val = Value, Data = "Custom", Name = GroupsList:GetValue()})
|
||||
net.SendToServer()
|
||||
|
||||
end
|
||||
|
||||
local BConfig = vgui.Create("DButton", Main)
|
||||
BConfig:SetText("Configuration")
|
||||
BConfig:SetFont("pp_font")
|
||||
BConfig:SetSize(160, 50)
|
||||
BConfig:SetPos(15, 71 + 55)
|
||||
BConfig:SetTextColor( Color( 255, 255, 255, 255 ) )
|
||||
BConfig.PaintColor = Color(0, 0, 0, 0)
|
||||
BConfig.Paint = function(self)
|
||||
draw.RoundedBox(0, 0, 0, self:GetWide(), self:GetTall(), self.PaintColor)
|
||||
surface.SetDrawColor(17, 148, 240, 255)
|
||||
surface.DrawOutlinedRect(0, 0, self:GetWide(), self:GetTall())
|
||||
end
|
||||
BConfig.DoClick = function( self )
|
||||
|
||||
if BSelect then BSelect.PaintColor = Color(0, 0, 0, 0) end
|
||||
BSelect = self
|
||||
self.PaintColor = Color(17, 148, 240, 100)
|
||||
|
||||
if PSelect then PSelect:Hide() end
|
||||
ConfigPanel:Show()
|
||||
PSelect = ConfigPanel
|
||||
|
||||
end
|
||||
|
||||
local PropsPanel = vgui.Create( "DPanel", Main )
|
||||
PropsPanel:SetPos( 190, 51 )
|
||||
PropsPanel:SetSize( 390, 275 )
|
||||
PropsPanel.Paint = function( self )
|
||||
surface.SetDrawColor( 50, 50, 50, 200 )
|
||||
surface.DrawRect( 0, 0, self:GetWide(), self:GetTall() )
|
||||
end
|
||||
PropsPanel:Hide()
|
||||
|
||||
local PropsList = vgui.Create( "DListView", PropsPanel )
|
||||
PropsList:SetMultiSelect( false )
|
||||
PropsList:SetSize( 390, 275 )
|
||||
local ColID = PropsList:AddColumn( "ID" )
|
||||
local ColEnt = PropsList:AddColumn( "Entity" )
|
||||
local ColMdl = PropsList:AddColumn( "Model" )
|
||||
ColID:SetMinWidth(50)
|
||||
ColID:SetMaxWidth(50)
|
||||
PropsList.Paint = function( self )
|
||||
surface.SetDrawColor(17, 148, 240, 255)
|
||||
end
|
||||
|
||||
PropsList.OnRowRightClick = function(panel, line)
|
||||
|
||||
local MenuButtonOptions = DermaMenu()
|
||||
MenuButtonOptions:AddOption("Draw entity", function()
|
||||
|
||||
if not LocalPlayer().DrawPPEnt or not istable(LocalPlayer().DrawPPEnt) then LocalPlayer().DrawPPEnt = {} end
|
||||
|
||||
if LocalPlayer().DrawPPEnt[PropsList:GetLine(line):GetValue(1)] and LocalPlayer().DrawPPEnt[PropsList:GetLine(line):GetValue(1)]:IsValid() then return end
|
||||
|
||||
local ent = ents.CreateClientProp( Content.PropsList[PropsList:GetLine(line):GetValue(1)].Model )
|
||||
ent:SetPos( Content.PropsList[PropsList:GetLine(line):GetValue(1)].Pos )
|
||||
ent:SetAngles( Content.PropsList[PropsList:GetLine(line):GetValue(1)].Angle )
|
||||
|
||||
LocalPlayer().DrawPPEnt[PropsList:GetLine(line):GetValue(1)] = ent
|
||||
|
||||
end )
|
||||
|
||||
if LocalPlayer().DrawPPEnt and LocalPlayer().DrawPPEnt[PropsList:GetLine(line):GetValue(1)] then
|
||||
|
||||
MenuButtonOptions:AddOption("Stop Drawing", function()
|
||||
|
||||
LocalPlayer().DrawPPEnt[PropsList:GetLine(line):GetValue(1)]:Remove()
|
||||
LocalPlayer().DrawPPEnt[PropsList:GetLine(line):GetValue(1)] = nil
|
||||
|
||||
end )
|
||||
|
||||
end
|
||||
|
||||
if LocalPlayer().DrawPPEnt != nil and istable(LocalPlayer().DrawPPEnt) and table.Count(LocalPlayer().DrawPPEnt) > 0 then
|
||||
|
||||
MenuButtonOptions:AddOption("Stop Drawing All", function()
|
||||
|
||||
for k, v in pairs(LocalPlayer().DrawPPEnt) do
|
||||
|
||||
LocalPlayer().DrawPPEnt[k]:Remove()
|
||||
LocalPlayer().DrawPPEnt[k] = nil
|
||||
|
||||
end
|
||||
|
||||
end )
|
||||
|
||||
end
|
||||
|
||||
MenuButtonOptions:AddOption("Remove", function()
|
||||
|
||||
net.Start("pp_info_send")
|
||||
net.WriteTable({CMD = "DEL", Val = PropsList:GetLine(line):GetValue(1)})
|
||||
net.SendToServer()
|
||||
|
||||
if LocalPlayer().DrawPPEnt and LocalPlayer().DrawPPEnt[PropsList:GetLine(line):GetValue(1)] != nil then
|
||||
|
||||
LocalPlayer().DrawPPEnt[PropsList:GetLine(line):GetValue(1)]:Remove()
|
||||
LocalPlayer().DrawPPEnt[PropsList:GetLine(line):GetValue(1)] = nil
|
||||
|
||||
end
|
||||
|
||||
PropsList:RemoveLine(line)
|
||||
|
||||
|
||||
end )
|
||||
MenuButtonOptions:Open()
|
||||
|
||||
end
|
||||
|
||||
for k, v in pairs(Content.PropsList) do
|
||||
|
||||
PropsList:AddLine(k, v.Class, v.Model)
|
||||
|
||||
end
|
||||
|
||||
local BProps = vgui.Create("DButton", Main)
|
||||
BProps:SetText("Props List")
|
||||
BProps:SetFont("pp_font")
|
||||
BProps:SetSize(160, 50)
|
||||
BProps:SetPos(15, 115 + 85)
|
||||
BProps:SetTextColor( Color( 255, 255, 255, 255 ) )
|
||||
BProps.PaintColor = Color(0, 0, 0, 0)
|
||||
BProps.Paint = function(self)
|
||||
draw.RoundedBox(0, 0, 0, self:GetWide(), self:GetTall(), self.PaintColor)
|
||||
surface.SetDrawColor(17, 148, 240, 255)
|
||||
surface.DrawOutlinedRect(0, 0, self:GetWide(), self:GetTall())
|
||||
end
|
||||
BProps.DoClick = function( self )
|
||||
|
||||
if BSelect then BSelect.PaintColor = Color(0, 0, 0, 0) end
|
||||
BSelect = self
|
||||
self.PaintColor = Color(17, 148, 240, 100)
|
||||
|
||||
if PSelect then PSelect:Hide() end
|
||||
PropsPanel:Show()
|
||||
PSelect = PropsPanel
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
net.Receive("pp_open_menu", pp_open_menu)
|
||||
Reference in New Issue
Block a user