mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
Upload
This commit is contained in:
@@ -0,0 +1,172 @@
|
||||
--[[
|
||||
| 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
|
||||
local PANEL = {}
|
||||
|
||||
function PANEL:Init()
|
||||
if (IsValid(ix.gui.infestationEdit)) then
|
||||
ix.gui.infestationEdit:Remove()
|
||||
end
|
||||
|
||||
ix.gui.infestationEdit = self
|
||||
self.list = {}
|
||||
self.properties = {}
|
||||
|
||||
self:SetDeleteOnClose(true)
|
||||
self:MakePopup()
|
||||
self:SetTitle(L("infestationNew"))
|
||||
|
||||
-- scroll panel
|
||||
self.canvas = self:Add("DScrollPanel")
|
||||
self.canvas:Dock(FILL)
|
||||
|
||||
-- name entry
|
||||
self.nameEntry = vgui.Create("ixTextEntry")
|
||||
self.nameEntry:SetFont("ixMenuButtonFont")
|
||||
self.nameEntry:SetText(L("infestationNew"))
|
||||
|
||||
local listRow = self.canvas:Add("ixListRow")
|
||||
listRow:SetList(self.list)
|
||||
listRow:SetLabelText(L("infestationName"))
|
||||
listRow:SetRightPanel(self.nameEntry)
|
||||
listRow:Dock(TOP)
|
||||
listRow:SizeToContents()
|
||||
listRow:SetLabelWidth(200)
|
||||
|
||||
-- type entry
|
||||
self.typeEntry = self.canvas:Add("DComboBox")
|
||||
self.typeEntry:Dock(RIGHT)
|
||||
self.typeEntry:SetFont("ixMenuButtonFont")
|
||||
self.typeEntry:SetTextColor(color_white)
|
||||
self.typeEntry.OnSelect = function(panel)
|
||||
panel:SizeToContents()
|
||||
panel:SetWide(panel:GetWide() + 12) -- padding for arrow (nice)
|
||||
end
|
||||
|
||||
for id, data in pairs(ix.infestation.types) do
|
||||
self.typeEntry:AddChoice(data.name, id, id == "erebus")
|
||||
end
|
||||
|
||||
listRow = self.canvas:Add("ixListRow")
|
||||
listRow:SetList(self.list)
|
||||
listRow:SetLabelText(L("infestationType"))
|
||||
listRow:SetRightPanel(self.typeEntry)
|
||||
listRow:Dock(TOP)
|
||||
listRow:SizeToContents()
|
||||
|
||||
self.spreadEntry = vgui.Create("ixTextEntry")
|
||||
self.spreadEntry:SetFont("ixMenuButtonFont")
|
||||
self.spreadEntry:SetText("30")
|
||||
self.spreadEntry.realGetValue = self.spreadEntry.GetValue
|
||||
self.spreadEntry.GetValue = function()
|
||||
return tonumber(self.spreadEntry:realGetValue()) or 30
|
||||
end
|
||||
|
||||
listRow = self.canvas:Add("ixListRow")
|
||||
listRow:SetList(self.list)
|
||||
listRow:SetLabelText(L("infestationSpread"))
|
||||
listRow:SetRightPanel(self.spreadEntry)
|
||||
listRow:Dock(TOP)
|
||||
listRow:SizeToContents()
|
||||
|
||||
-- save button
|
||||
self.saveButton = self:Add("DButton")
|
||||
self.saveButton:SetText(L("infestationSave"))
|
||||
self.saveButton:SizeToContents()
|
||||
self.saveButton:Dock(BOTTOM)
|
||||
self.saveButton.DoClick = function()
|
||||
self:Submit()
|
||||
end
|
||||
|
||||
self:SizeToContents()
|
||||
self:SetWide(ScrW() / 3)
|
||||
self:Center()
|
||||
end
|
||||
|
||||
function PANEL:SizeToContents()
|
||||
local width = 64
|
||||
local height = 50
|
||||
|
||||
for _, v in ipairs(self.canvas:GetCanvas():GetChildren()) do
|
||||
width = math.max(width, v:GetLabelWidth())
|
||||
height = height + v:GetTall()
|
||||
end
|
||||
|
||||
self:SetWide(width + 200)
|
||||
self:SetTall(height + self.saveButton:GetTall())
|
||||
end
|
||||
|
||||
function PANEL:Submit()
|
||||
local name = self.nameEntry:GetValue()
|
||||
|
||||
if (ix.infestation.stored[name]) then
|
||||
LocalPlayer():Notify(L("infestationExists"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
local _, type = self.typeEntry:GetSelected()
|
||||
local spread = self.spreadEntry:GetFloat()
|
||||
|
||||
if (spread and isnumber(spread)) then
|
||||
spread = math.Round(spread)
|
||||
|
||||
if (spread <= 0) then
|
||||
LocalPlayer():Notify(L("invalidSpread"))
|
||||
|
||||
return
|
||||
end
|
||||
else
|
||||
LocalPlayer():Notify(L("invalidSpread"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
local coreFound = false
|
||||
local infestationProps = {}
|
||||
|
||||
for _, entity in pairs(ents.FindByClass("prop_physics")) do
|
||||
if (entity:GetNetVar("infestationProp") and entity:GetNetVar("infestationProp") == LocalPlayer():SteamID()) then
|
||||
infestationProps[#infestationProps + 1] = true -- Just using it to count.
|
||||
|
||||
if (entity:GetNetVar("infestationCore")) then
|
||||
coreFound = true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if (#infestationProps < 2) then
|
||||
LocalPlayer():Notify(L("notEnoughProps"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
if (!coreFound) then
|
||||
LocalPlayer():Notify(L("missingCore"))
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
net.Start("ixInfestationZoneCreate")
|
||||
net.WriteString(name)
|
||||
net.WriteString(type)
|
||||
net.WriteFloat(spread)
|
||||
net.SendToServer()
|
||||
|
||||
self:Remove()
|
||||
end
|
||||
|
||||
vgui.Register("ixInfestationZoneCreate", PANEL, "DFrame")
|
||||
|
||||
if (IsValid(ix.gui.infestationEdit)) then
|
||||
ix.gui.infestationEdit:Remove()
|
||||
end
|
||||
Reference in New Issue
Block a user