mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 05:43:46 +03:00
Upload
This commit is contained in:
310
gamemodes/helix/plugins/willardclothing/sh_plugin.lua
Normal file
310
gamemodes/helix/plugins/willardclothing/sh_plugin.lua
Normal file
@@ -0,0 +1,310 @@
|
||||
--[[
|
||||
| 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.name = "Willard Clothing System"
|
||||
PLUGIN.author = "Fruity"
|
||||
PLUGIN.description = "Allows for items/clothing to be able to set bodygroups."
|
||||
|
||||
ix.util.Include("sv_plugin.lua")
|
||||
ix.util.Include("cl_plugin.lua")
|
||||
|
||||
PLUGIN.baseList = {}
|
||||
|
||||
ix.command.Add("clothingcreator", {
|
||||
description = "Open the clothing creator.",
|
||||
adminOnly = true,
|
||||
OnRun = function(self, client)
|
||||
net.Start("ixOpenClothingCreator")
|
||||
net.Send(client)
|
||||
end
|
||||
})
|
||||
|
||||
if (SERVER) then return end
|
||||
|
||||
function PLUGIN:GetClothingCreator()
|
||||
if ix.gui.clothingCreator and IsValid(ix.gui.clothingCreator) then
|
||||
return ix.gui.clothingCreator
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function PLUGIN:GetChoicesInBaseFromVar(base, var)
|
||||
local clothingCreator = self:GetClothingCreator()
|
||||
if !clothingCreator then return end
|
||||
|
||||
return clothingCreator:GetChoicesInBaseFromVar(base, var)
|
||||
end
|
||||
|
||||
function PLUGIN:GetChoicesInBaseFromVarTable(base, var)
|
||||
local clothingCreator = self:GetClothingCreator()
|
||||
if !clothingCreator then return end
|
||||
|
||||
return clothingCreator:GetChoicesInBaseFromVarTable(base, var)
|
||||
end
|
||||
|
||||
function PLUGIN:OpenItemModelChoices()
|
||||
local clothingCreator = PLUGIN:GetClothingCreator()
|
||||
if !clothingCreator then return end
|
||||
clothingCreator:OpenItemModelChoices()
|
||||
end
|
||||
|
||||
function PLUGIN:OpenIconEditor()
|
||||
local clothingCreator = PLUGIN:GetClothingCreator()
|
||||
if !clothingCreator then return end
|
||||
clothingCreator:OpenIconEditor()
|
||||
end
|
||||
|
||||
function PLUGIN:GetProxyList()
|
||||
local charCreationPlugin = ix.plugin.list["charcreation"]
|
||||
if charCreationPlugin then
|
||||
local list = charCreationPlugin.proxyList or {}
|
||||
if list[2] then list[2] = nil end -- hair color proxy removal
|
||||
|
||||
return list
|
||||
end
|
||||
|
||||
return {}
|
||||
end
|
||||
|
||||
function PLUGIN:OpenColorAppendixMenu()
|
||||
local clothingCreator = PLUGIN:GetClothingCreator()
|
||||
if !clothingCreator then return end
|
||||
clothingCreator:OpenColorAppendixMenu()
|
||||
end
|
||||
|
||||
function PLUGIN:GetModelsByBase(base)
|
||||
local models = {
|
||||
male = "models/props_junk/watermelon01.mdl",
|
||||
female = "models/props_junk/watermelon01.mdl"
|
||||
}
|
||||
|
||||
if (base == "base_bgclothes" or base == "base_mask") then
|
||||
models.male = "models/willardnetworks/citizens/male_01.mdl"
|
||||
models.female = "models/willardnetworks/citizens/female_01.mdl"
|
||||
end
|
||||
|
||||
if (base == "base_combinesuit" or base == "base_maskcp") then
|
||||
models.male = "models/wn7new/metropolice/male_01.mdl"
|
||||
models.female = "models/wn7new/metropolice/female_01.mdl"
|
||||
end
|
||||
|
||||
return models
|
||||
end
|
||||
|
||||
function PLUGIN:OpenBodygroupChooser(base)
|
||||
local clothingCreator = PLUGIN:GetClothingCreator()
|
||||
if !clothingCreator then return end
|
||||
|
||||
local models = self:GetModelsByBase(base)
|
||||
|
||||
clothingCreator:OpenBodygroupChooser(models)
|
||||
end
|
||||
|
||||
function PLUGIN:OpenItemPicker()
|
||||
local clothingCreator = PLUGIN:GetClothingCreator()
|
||||
if !clothingCreator then return end
|
||||
|
||||
clothingCreator:OpenItemPicker()
|
||||
end
|
||||
|
||||
function PLUGIN:OpenMultipleChoice(list, var)
|
||||
local clothingCreator = PLUGIN:GetClothingCreator()
|
||||
if !clothingCreator then return end
|
||||
|
||||
clothingCreator:OpenMultipleChoice(list, var)
|
||||
end
|
||||
|
||||
function PLUGIN:OpenProxyChooser()
|
||||
local clothingCreator = PLUGIN:GetClothingCreator()
|
||||
if !clothingCreator then return end
|
||||
|
||||
clothingCreator:OpenProxyChooser()
|
||||
end
|
||||
|
||||
PLUGIN.baseList = {
|
||||
base_bgclothes = {
|
||||
explainer = "This base contains all our primary models outfits (with no gas deterrent nor combine compatibility).",
|
||||
vars = {
|
||||
name = {type = "", description = "Name of the item."},
|
||||
description = {type = "", description = "Description of the item."},
|
||||
category = {
|
||||
type = "",
|
||||
description = "Category of the item.",
|
||||
altChoices = function()
|
||||
return PLUGIN:GetChoicesInBaseFromVar("base_bgclothes", "category")
|
||||
end
|
||||
},
|
||||
model = {
|
||||
type = "",
|
||||
description = "Model path of the item.",
|
||||
altMenu = function()
|
||||
PLUGIN:OpenItemModelChoices()
|
||||
end
|
||||
},
|
||||
proxy = {
|
||||
type = {},
|
||||
description = "Material proxy type for clothing color",
|
||||
altMenu = function()
|
||||
PLUGIN:OpenProxyChooser()
|
||||
end
|
||||
},
|
||||
outfitCategory = {
|
||||
type = "",
|
||||
description = "Category of outfit that this item goes on in the equip slots.",
|
||||
altChoices = function()
|
||||
return {"Head", "Glasses", "Hands", "Face", "Shoes", "Legs", "Torso", "Model"}
|
||||
end
|
||||
},
|
||||
charCreation = {type = false, description = "Est-ce que ce vêtement apparaît comme sélectionnable dans la création de personnage ?"},
|
||||
glasses = {type = false, description = "Principalement pour l'effet de flou qui fait disparaître le flou des lunettes lorsqu'elles sont équipées."},
|
||||
KeepOnDeath = {type = false, description = "Death drop or not?"},
|
||||
width = {type = 0, description = "", min = 1, max = 1},
|
||||
height = {type = 0, description = "", min = 1, max = 1},
|
||||
maxArmor = {type = 0, description = "Armure pour cet objet lorsqu'il est entièrement blindé.", min = 0, max = 300},
|
||||
outlineColor = {type = {}, description = "Aperçu sur l'interface utilisateur de l'élément lui-même."},
|
||||
colorAppendix = {
|
||||
type = {},
|
||||
description = "A colored text that appears on the item tooltip.",
|
||||
altMenu = function()
|
||||
PLUGIN:OpenColorAppendixMenu()
|
||||
end
|
||||
},
|
||||
bodyGroups = {
|
||||
type = {},
|
||||
description = "Bodygroups the item should enable on the player when equipped.",
|
||||
altMenu = function()
|
||||
PLUGIN:OpenBodygroupChooser("base_bgclothes")
|
||||
end
|
||||
},
|
||||
iconCam = {
|
||||
type = {},
|
||||
description = "How the icon of the item is positioned.",
|
||||
altMenu = function()
|
||||
PLUGIN:OpenIconEditor()
|
||||
end
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
base_mask = {
|
||||
explainer = "This base contains gas deterrent clothing that is not combine related.",
|
||||
parent = "base_bgclothes",
|
||||
vars = {
|
||||
filterQuality = {type = 0, description = "Something about gasmasks, ask Gr4Ss", min = 0, max = 1, decimals = true},
|
||||
maxFilterValue = {type = 0, description = "Something about gasmasks, ask Gr4Ss", min = 0, max = 200},
|
||||
filterDecayStart = {type = 0, description = "Something about gasmasks, ask Gr4Ss", min = 0, max = 0.2, decimals = true},
|
||||
refillItem = {
|
||||
type = "",
|
||||
description = "Item to refill the mask capability with.",
|
||||
altMenu = function()
|
||||
PLUGIN:OpenItemPicker()
|
||||
end
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
base_maskcp = {
|
||||
explainer = "This base contains gas deterrent clothing that is combine related.",
|
||||
parent = "base_bgclothes",
|
||||
vars = {
|
||||
isGasmask = {type = false, description = "Is this item a gasmask?"},
|
||||
isCombineMask = {type = false, description = "Is this item a combine mask?"},
|
||||
isMask = {type = false, description = "Is this item a mask in general?"},
|
||||
bodyGroups = {
|
||||
type = {},
|
||||
description = "Bodygroups the item should enable on the player when equipped.",
|
||||
altMenu = function()
|
||||
PLUGIN:OpenBodygroupChooser("base_maskcp")
|
||||
end
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
base_combinesuit = { -- outfit base left out as parent because we don't want to use outfit base other than for these suits
|
||||
explainer = "This base contains all combine model replacing clothing.",
|
||||
vars = {
|
||||
name = {type = "", description = "Name of the item."},
|
||||
model = {
|
||||
type = "",
|
||||
description = "Model path of the item.",
|
||||
altMenu = function()
|
||||
PLUGIN:OpenItemModelChoices()
|
||||
end
|
||||
},
|
||||
description = {type = "", description = "Description of the item."},
|
||||
category = {
|
||||
type = "",
|
||||
description = "Category of the item.",
|
||||
altChoices = function()
|
||||
return PLUGIN:GetChoicesInBaseFromVar("base_combinesuit", "category")
|
||||
end
|
||||
},
|
||||
width = {type = 0, description = "", min = 1, max = 1},
|
||||
height = {type = 0, description = "", min = 1, max = 1},
|
||||
maxArmor = {type = 0, description = "Armor for this item when fully armored.", min = 0, max = 300},
|
||||
outfitCategory = {
|
||||
type = "",
|
||||
description = "Category of outfit that this item goes on in the equip slots.",
|
||||
altChoices = function()
|
||||
return {"Model"}
|
||||
end
|
||||
},
|
||||
replacementString = {
|
||||
type = "",
|
||||
description = "Use helper, correct the replacing model depending on whether one uses male_01, male_02 and so forth.",
|
||||
altChoices = function()
|
||||
return PLUGIN:GetChoicesInBaseFromVar("base_combinesuit", "replacementString")
|
||||
end
|
||||
},
|
||||
replaceOnDeath = {
|
||||
type = "",
|
||||
description = "Item to replace this item with on death.",
|
||||
altMenu = function()
|
||||
PLUGIN:OpenItemPicker()
|
||||
end
|
||||
},
|
||||
repairItem = {
|
||||
type = "",
|
||||
description = "Item to repair this item with.",
|
||||
altMenu = function()
|
||||
PLUGIN:OpenItemPicker()
|
||||
end
|
||||
},
|
||||
isCP = {type = false, description = "Is this item a CP item."},
|
||||
isRadio = {type = false, description = "Is this item something that should enable radio."},
|
||||
channels = {
|
||||
type = {},
|
||||
description = "Which radio channels?",
|
||||
altMenu = function()
|
||||
local var = "channels"
|
||||
PLUGIN:OpenMultipleChoice(PLUGIN:GetChoicesInBaseFromVarTable("base_combinesuit", var), var)
|
||||
end
|
||||
},
|
||||
iconCam = {
|
||||
type = {},
|
||||
description = "How the icon of the item is positioned.",
|
||||
altMenu = function()
|
||||
PLUGIN:OpenIconEditor()
|
||||
end
|
||||
},
|
||||
bodyGroups = {
|
||||
type = {},
|
||||
description = "Bodygroups the item should enable on the player when equipped.",
|
||||
altMenu = function()
|
||||
PLUGIN:OpenBodygroupChooser("base_combinesuit")
|
||||
end
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user