mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
Upload
This commit is contained in:
278
gamemodes/darkrp/plugins/customitems/derma/cl_itemcreator.lua
Normal file
278
gamemodes/darkrp/plugins/customitems/derma/cl_itemcreator.lua
Normal file
@@ -0,0 +1,278 @@
|
||||
--[[
|
||||
| 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 PANEL = {}
|
||||
|
||||
function PANEL:Init()
|
||||
self:SetSize(ScrW(), ScrH())
|
||||
self:SetAlpha(0)
|
||||
self:AlphaTo(255, 0.5, 0)
|
||||
|
||||
self.rows = {}
|
||||
|
||||
self.innerContent = self:Add("EditablePanel")
|
||||
self.innerContent:SetSize(SScaleMin(700 / 3), SScaleMin(600 / 2.5))
|
||||
self.innerContent:Center()
|
||||
self.innerContent:MakePopup()
|
||||
self.innerContent.Paint = function(self, w, h)
|
||||
surface.SetDrawColor(0, 0, 0, 130)
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
end
|
||||
|
||||
local topbar = self.innerContent:Add("Panel")
|
||||
topbar:SetHeight(SScaleMin(50 / 3))
|
||||
topbar:Dock(TOP)
|
||||
topbar.Paint = function(self, width, height)
|
||||
surface.SetDrawColor(0, 0, 0, 130)
|
||||
surface.DrawRect(0, 0, width, height)
|
||||
end
|
||||
|
||||
local titleText = topbar:Add("DLabel")
|
||||
titleText:SetFont("CharCreationBoldTitleNoClamp")
|
||||
titleText:Dock(LEFT)
|
||||
titleText:SetText("Créateur d'item custom")
|
||||
titleText:DockMargin(SScaleMin(10 / 3), 0, 0, 0)
|
||||
titleText:SetContentAlignment(4)
|
||||
titleText:SizeToContents()
|
||||
|
||||
local exit = topbar:Add("DImageButton")
|
||||
exit:SetImage("willardnetworks/tabmenu/navicons/exit.png")
|
||||
exit:SetSize(SScaleMin(20 / 3), SScaleMin(20 / 3))
|
||||
exit:DockMargin(0, SScaleMin(15 / 3), SScaleMin(10 / 3), SScaleMin(15 / 3))
|
||||
exit:Dock(RIGHT)
|
||||
exit.DoClick = function()
|
||||
if (self.ExitCallback) then
|
||||
self.ExitCallback()
|
||||
end
|
||||
|
||||
self:Remove()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
end
|
||||
|
||||
local divider = topbar:Add("Panel")
|
||||
divider:SetSize(1, topbar:GetTall())
|
||||
divider:Dock(RIGHT)
|
||||
divider:DockMargin(0, SScaleMin(10 / 3), SScaleMin(10 / 3), SScaleMin(10 / 3))
|
||||
divider.Paint = function(self, w, h)
|
||||
surface.SetDrawColor(Color(111, 111, 136, (255 / 100 * 30)))
|
||||
surface.DrawLine(0, 0, 0, h)
|
||||
end
|
||||
|
||||
local itemBases = {"No Base"}
|
||||
|
||||
for base, _ in pairs(ix.item.base) do
|
||||
itemBases[#itemBases + 1] = base
|
||||
end
|
||||
|
||||
-- VGUI Class | VGUI Identifier | Name | Description | Default | Additional Data
|
||||
self:AddRow("ixSettingsRowArray", "rowBase", "Base", "L'élément de base sur lequel cet item doit être basé.", 1, {populate = function() return itemBases end})
|
||||
self:AddRow("ixSettingsRowString", "rowID", "ID Unique", "L'identifiant unique de l'item. Il doit être unique et ne pas contenir d'espaces.", "custom_item")
|
||||
self:AddRow("ixSettingsRowString", "rowName", "Nom", "Le nom de l'item.", "Un item")
|
||||
self:AddRow("ixSettingsRowString", "rowDesc", "Description", "La description de l'item.", "Un item personnalisé.")
|
||||
self:AddRow("ixSettingsRowString", "rowModel", "Modèle", "Le modèle de l'item.", "models/props_junk/PopCan01a.mdl")
|
||||
self:AddRow("ixSettingsRowNumber", "rowSkin", "Skin", "The skin of the item.", 0, {min = 0, max = 10})
|
||||
self:AddRow("ixSettingsRowString", "rowCategory", "Catégorie", "La catégorie dont relève cet item", "Custom item")
|
||||
|
||||
-- Doing this one manually because it's a little more complicated.
|
||||
self.rowCam = self.innerContent:Add("ixSettingsRowString")
|
||||
self.rowCam:Dock(TOP)
|
||||
self.rowCam:DockMargin(0, 0, 6, 0)
|
||||
self.rowCam:SetText("Icon Position")
|
||||
|
||||
self.rowCam.OnResetClicked = function()
|
||||
self.rowCam:SetShowReset(false)
|
||||
self.rowCam:SetValue("", true)
|
||||
end
|
||||
self.rowCam.OnValueChanged = function()
|
||||
local newValue = self.rowCam:GetValue()
|
||||
|
||||
self.rowCam:SetShowReset(newValue != "", "Icon Position", "")
|
||||
end
|
||||
self.rowCam:GetLabel():SetHelixTooltip(function(tooltip)
|
||||
local title = tooltip:AddRow("name")
|
||||
title:SetImportant()
|
||||
title:SetText("Icon Position")
|
||||
title:SizeToContents()
|
||||
title:SetMaxWidth(math.max(title:GetMaxWidth(), ScrW() * 0.5))
|
||||
|
||||
local desc = tooltip:AddRow("description")
|
||||
desc:SetText("The position, angles, and FOV of this item's inventory icon. Leave blank for default settings.")
|
||||
desc:SizeToContents()
|
||||
end)
|
||||
|
||||
self.rowCam.rowCamButton = self.rowCam:Add("DButton")
|
||||
self.rowCam.rowCamButton:Dock(RIGHT)
|
||||
self.rowCam.rowCamButton:SetFont("ixGenericFont")
|
||||
self.rowCam.rowCamButton:SetColor(ix.config.Get("color", Color(255, 255, 255)))
|
||||
self.rowCam.rowCamButton:SetText("CHANGE")
|
||||
self.rowCam.rowCamButton.DoClick = function()
|
||||
local iconEditor = vgui.Create("ix_icon_editor")
|
||||
|
||||
iconEditor.modelPath:SetValue(self["rowModel"]:GetValue())
|
||||
iconEditor.model:SetModel(self["rowModel"]:GetValue())
|
||||
iconEditor.width:SetValue(self["rowWidth"]:GetValue())
|
||||
iconEditor.height:SetValue(self["rowHeight"]:GetValue())
|
||||
|
||||
iconEditor.best:DoClick()
|
||||
|
||||
iconEditor.copy:SetText("F")
|
||||
iconEditor.copy:SetTooltip("Confirm")
|
||||
iconEditor.copy.DoClick = function()
|
||||
local camPos = iconEditor.model:GetCamPos()
|
||||
local camAng = iconEditor.model:GetLookAng()
|
||||
local iconCam = {
|
||||
pos = Vector(math.Round(camPos.x, 2), math.Round(camPos.y, 2), math.Round(camPos.z, 2)),
|
||||
ang = Angle(math.Round(camAng.p, 2), math.Round(camAng.y, 2), math.Round(camAng.r, 2)),
|
||||
fov = math.Round(iconEditor.model:GetFOV(), 2)
|
||||
}
|
||||
|
||||
self.rowCam:SetValue(util.TableToJSON(iconCam))
|
||||
iconEditor:Remove()
|
||||
end
|
||||
end
|
||||
|
||||
self.rowCam.setting:Remove()
|
||||
|
||||
self.rowCam.setting = self.rowCam:Add("ixTextEntry")
|
||||
self.rowCam.setting:Dock(RIGHT)
|
||||
self.rowCam.setting:DockMargin(0, 0, 8, 0)
|
||||
self.rowCam.setting:SetFont("TitlesFontNoBoldNoClamp")
|
||||
self.rowCam.setting:SetBackgroundColor(derma.GetColor("DarkerBackground", self.rowCam))
|
||||
self.rowCam.setting.OnEnter = function()
|
||||
self.rowCam:OnValueChanged(self.rowCam:GetValue())
|
||||
end
|
||||
self.rowCam:SetValue("")
|
||||
|
||||
self.rowCam.PerformLayout = function(this, width, height)
|
||||
this.setting:SetWide(width * 0.34)
|
||||
this.rowCamButton:SetWide(width * 0.15)
|
||||
end
|
||||
|
||||
self.rows[#self.rows + 1] = self.rowCam
|
||||
|
||||
self:AddRow("ixSettingsRowString", "rowMaterial", "Material", "The material of the item.", "")
|
||||
self:AddRow("ixSettingsRowNumber", "rowWidth", "Width", "The physical width of the item.", 1, {min = 1, max = 10})
|
||||
self:AddRow("ixSettingsRowNumber", "rowHeight", "Height", "The physical height of the item.", 1, {min = 1, max = 10})
|
||||
self:AddRow("ixSettingsRowColor", "rowColor", "Color", "The color of the item.", Color(255, 255, 255))
|
||||
self:AddRow("ixSettingsRowBool", "rowRotating", "Rotating", "Whether the item's icon should rotate in the inventory.", false)
|
||||
self:AddRow("ixSettingsRowNumber", "rowStack", "Max Stack", "The maximum stack of this item, if supported by the item base.", 1, {min = 1, max = 100})
|
||||
self:AddRow("ixSettingsRowNumber", "rowHunger", "Hunger Restoration", "The amount of hunger to restore once this item is used, if supported by the item base.", 0, {min = 0, max = 100})
|
||||
self:AddRow("ixSettingsRowNumber", "rowThirst", "Thirst Restoration", "The amount of thirst to restore once this item is used, if supported by the item base.", 0, {min = 0, max = 100})
|
||||
self:AddRow("ixSettingsRowNumber", "rowSpoil", "Spoil Time", "The time, in days, until the item spoils, if supported by the item base.", 14, {min = 1, max = 30})
|
||||
self:AddRow("ixSettingsRowNumber", "rowDamage", "Damage", "The amount of damage to deal once this item is used, if supported by the item base.", 0, {min = 0, max = 100})
|
||||
self:AddRow("ixSettingsRowNumber", "rowHealth", "Health", "The amount of health to restore once this item is used, if supported by the item base.", 0, {min = 0, max = 100})
|
||||
self:AddRow("ixSettingsRowNumber", "rowCredits", "Credits", "The amount of Credits to award once this item is used, if supported by the item base.", 0, {min = 0, max = 50})
|
||||
|
||||
self.createItem = self.innerContent:Add("DButton")
|
||||
self.createItem:Dock(BOTTOM)
|
||||
self.createItem:DockMargin(10, 10, 10, 10)
|
||||
self.createItem:SetTall(SScaleMin(60 / 4))
|
||||
self.createItem:SetFont("ixMediumFont")
|
||||
self.createItem:SetColor(ix.config.Get("color", Color(255, 255, 255)))
|
||||
self.createItem:SetText("CREATE ITEM")
|
||||
self.createItem.DoClick = function()
|
||||
surface.PlaySound("helix/ui/press.wav")
|
||||
|
||||
local uniqueID = string.Trim(self["rowID"]:GetValue())
|
||||
|
||||
if (uniqueID == "") then
|
||||
LocalPlayer():Notify("That is not a valid Unique ID!")
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
if (ix.item.list[uniqueID]) then
|
||||
LocalPlayer():Notify("That item already exists!")
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
net.Start("ixCreateCustomItem")
|
||||
net.WriteString(select(1, self["rowBase"].setting:GetSelected()))
|
||||
net.WriteString(self["rowID"]:GetValue())
|
||||
net.WriteString(self["rowName"]:GetValue())
|
||||
net.WriteString(self["rowDesc"]:GetValue())
|
||||
net.WriteString(self["rowModel"]:GetValue())
|
||||
net.WriteUInt(self["rowSkin"]:GetValue(), 5)
|
||||
net.WriteString(self["rowCategory"]:GetValue())
|
||||
net.WriteString(self.rowCam:GetValue())
|
||||
net.WriteString(self["rowMaterial"]:GetValue())
|
||||
net.WriteUInt(self["rowWidth"]:GetValue(), 5)
|
||||
net.WriteUInt(self["rowHeight"]:GetValue(), 5)
|
||||
net.WriteColor(Color(self["rowColor"]:GetValue().r, self["rowColor"]:GetValue().g, self["rowColor"]:GetValue().b))
|
||||
net.WriteBool(self["rowRotating"]:GetValue())
|
||||
net.WriteUInt(self["rowStack"]:GetValue(), 8)
|
||||
net.WriteUInt(self["rowHunger"]:GetValue(), 8)
|
||||
net.WriteUInt(self["rowThirst"]:GetValue(), 8)
|
||||
net.WriteUInt(self["rowSpoil"]:GetValue(), 6)
|
||||
net.WriteUInt(self["rowDamage"]:GetValue(), 8)
|
||||
net.WriteUInt(self["rowHealth"]:GetValue(), 8)
|
||||
net.WriteUInt(self["rowCredits"]:GetValue(), 7)
|
||||
net.SendToServer()
|
||||
|
||||
self:Remove()
|
||||
end
|
||||
end
|
||||
|
||||
function PANEL:AddRow(class, uniqueID, name, description, default, data)
|
||||
data = data or {}
|
||||
|
||||
self[uniqueID] = self.innerContent:Add(class)
|
||||
self[uniqueID]:Dock(TOP)
|
||||
self[uniqueID]:DockMargin(0, 0, 6, 0)
|
||||
self[uniqueID]:SetText(name)
|
||||
|
||||
if (data.min) then
|
||||
self[uniqueID]:SetMin(data.min)
|
||||
end
|
||||
|
||||
if (data.max) then
|
||||
self[uniqueID]:SetMax(data.max)
|
||||
end
|
||||
|
||||
if (data.populate) then
|
||||
self[uniqueID]:Populate(nil, data)
|
||||
end
|
||||
|
||||
self[uniqueID]:SetValue(default)
|
||||
|
||||
self[uniqueID].OnResetClicked = function()
|
||||
self[uniqueID]:SetShowReset(false)
|
||||
self[uniqueID]:SetValue(default, true)
|
||||
end
|
||||
self[uniqueID].OnValueChanged = function()
|
||||
local newValue = self[uniqueID]:GetValue()
|
||||
|
||||
self[uniqueID]:SetShowReset(newValue != default, name, default)
|
||||
end
|
||||
self[uniqueID]:GetLabel():SetHelixTooltip(function(tooltip)
|
||||
local title = tooltip:AddRow("name")
|
||||
title:SetImportant()
|
||||
title:SetText(name)
|
||||
title:SizeToContents()
|
||||
title:SetMaxWidth(math.max(title:GetMaxWidth(), ScrW() * 0.5))
|
||||
|
||||
local desc = tooltip:AddRow("description")
|
||||
desc:SetText(description)
|
||||
desc:SizeToContents()
|
||||
end)
|
||||
|
||||
self.rows[#self.rows + 1] = self[uniqueID]
|
||||
end
|
||||
|
||||
function PANEL:Paint(width, height)
|
||||
surface.SetDrawColor(Color(63, 58, 115, 220))
|
||||
surface.DrawRect(0, 0, width, height)
|
||||
|
||||
Derma_DrawBackgroundBlur(self, 1)
|
||||
end
|
||||
|
||||
vgui.Register("ixCustomItemCreator", PANEL, "EditablePanel")
|
||||
Reference in New Issue
Block a user