Files
wnsrc/gamemodes/helix/plugins/charcreation/sh_plugin.lua
lifestorm df294d03aa Upload
2024-08-04 23:54:45 +03:00

324 lines
7.9 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--[[
| 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 = "Char Creation Necessities"
PLUGIN.author = "Fruity"
PLUGIN.description = "Required stuff for the char creation such as gender etc."
PLUGIN.TIMER_DELAY = PLUGIN.TIMER_DELAY or 60
ix.util.Include("sv_plugin.lua")
ix.util.Include("cl_plugin.lua")
ix.util.Include("matproxies/sv_matproxies.lua")
ix.util.Include("matproxies/sh_matproxies.lua")
ix.util.Include("matproxies/cl_matproxies.lua")
ix.lang.AddTable("english", {
optUseImmersiveGlasses = "Gerçekçi Gözlük Sistemini Kullan",
optdUseImmersiveGlasses = "Gerçekçi Gözlük Sistemi, karakterinizin gözlük takması gerektiğinde ve gözlük takmadığında karakterinizin görüşünü bulanıklaştırır. Ya da tam tersi."
})
ix.lang.AddTable("spanish", {
optdUseImmersiveGlasses = "Utiliza las gafas de inmersión, difuminando la vista de tu personaje si necesita gafas y no las lleva puestas.",
optUseImmersiveGlasses = "Utilizar gafas inmersivas"
})
ix.char.RegisterVar("glasses", {
field = "glasses",
fieldType = ix.type.bool,
default = false,
isLocal = true,
bNoDisplay = true
})
ix.char.RegisterVar("canread", {
field = "canread",
fieldType = ix.type.bool,
default = true,
isLocal = true,
bNoDisplay = true
})
ix.char.RegisterVar("beardProgress", {
field = "beard",
fieldType = ix.type.number,
default = 0,
bNoNetworking = true,
bNoDisplay = true
})
ix.allowedHairColors = {
["gri"] = {
Color(244,233,230),
Color(221,202,195),
Color(182,170,165),
Color(151,132,126),
Color(111,101,98),
Color(126,122,121),
Color(89,89,89)
},
["kahverengi"] = {
Color(95,52,39),
Color(101,66,56),
Color(62,50,47),
Color(80,69,66),
Color(138,106,96),
Color(164,149,137),
Color(85,72,56),
Color(83,61,50)
},
["ık"] = {
Color(223,186,155),
Color(172,129,94),
Color(145,124,109),
Color(229,200,170),
Color(203,191,177),
Color(184,151,120),
Color(230,206,168),
Color(255,216,149)
},
["hafif mavi"] = {
Color(161,165,167),
Color(125,132,135)
}
}
ix.char.RegisterVar("hair", {
field = "hair",
fieldType = ix.type.table,
default = {},
isLocal = true,
bNoDisplay = true,
OnValidate = function(self, data, payload, client)
if !payload.hair or payload.hair and !istable(payload.hair) then
return false, "Saç/Saç Rengi seçmediniz!"
end
if !istable(payload.hair) then
return false, "Saç seçimiyle ilgili bir sorun oluştu!"
end
if !payload.hair.hair then
return false, "Saç seçmediniz!"
end
if !payload.hair.color then
return false, "Saç rengi seçmediniz!"
end
local found = false
for _, v in pairs(ix.allowedHairColors) do
if !table.HasValue(v, payload.hair.color) then continue end
found = true
break
end
if !found then
return false, "Geçerli bir saç rengi seçmediniz!"
end
if !isnumber(payload.hair.hair) then
return false, "Uygun bir saç seçmediniz!"
end
return true
end,
OnGet = function(self, default)
local hair = self.vars.hair
return hair or {}
end,
OnAdjust = function(self, client, data, value, newData)
newData.hair = value
end
})
ix.config.Add("forceImmeseriveGlasses", true, "Force the glasses effect to draw, even if the client disables the option for them.", nil, {
category = "characters"
})
do
local CHAR = ix.meta.character
function CHAR:HasGlasses()
for _, v in pairs(self:GetInventory():GetItems()) do
if (v.glasses and v:GetData("equip")) then
return true
end
end
return false
end
end
ix.char.vars["model"].OnDisplay = function(self, container, payload) end
ix.char.vars["model"].OnValidate = function(self, value, payload, client)
local faction = ix.faction.indices[payload.faction]
if (faction) then
local gender = payload.gender
local models
if gender == "male" and faction:GetModelsMale(client) then
models = faction:GetModelsMale(client)
elseif gender == "female" and faction:GetModelsFemale(client) then
models = faction:GetModelsFemale(client)
else
models = faction:GetModels(client)
end
if (!payload.model or !models[payload.model]) then
return false, "Model seçmediniz!"
end
else
return false, "Model seçmediniz!"
end
end
ix.char.vars["model"].OnAdjust = function(self, client, data, value, newData)
local faction = ix.faction.indices[data.faction]
if (faction) then
local gender = data.gender
local model
if gender == "male" and faction:GetModelsMale(client) then
model = faction:GetModelsMale(client)[value]
elseif gender == "female" and faction:GetModelsFemale(client) then
model = faction:GetModelsFemale(client)[value]
else
model = faction:GetModels(client)[value]
end
if (isstring(model)) then
newData.model = model
elseif (istable(model)) then
newData.model = model[1]
end
end
end
ix.char.vars["model"].ShouldDisplay = function(self, container, payload)
local faction = ix.faction.indices[payload.faction]
if faction then
local gender = payload.gender
if gender == "male" and faction:GetModelsMale(LocalPlayer()) then
return #faction:GetModelsMale(LocalPlayer()) > 1
elseif gender == "female" and faction:GetModelsFemale(LocalPlayer()) then
return #faction:GetModelsFemale(LocalPlayer()) > 1
else
return #faction:GetModels(LocalPlayer()) > 1
end
end
end
-- Registers the var "Gender"
ix.char.RegisterVar("gender", {
field = "gender",
fieldType = ix.type.string,
default = "male",
bNoDisplay = true,
OnSet = function(self, value)
local client = self:GetPlayer()
if (IsValid(client)) then
self.vars.gender = value
-- @todo refactor networking of character vars so this doesn't need to be repeated on every OnSet override
net.Start("ixCharacterVarChanged")
net.WriteUInt(self:GetID(), 32)
net.WriteString("gender")
net.WriteType(self.vars.gender)
net.Broadcast()
end
end,
OnGet = function(self, default)
local gender = self.vars.gender
return gender or 0
end,
OnValidate = function(self, data, payload, client)
local faction = ix.faction.indices[payload.faction]
if (payload.gender == "female" or payload.gender == "male") then
return true
end
if faction then
if faction:GetNoGender(client) == true then
return true
end
end
return false, "Cinsiyet seçmediniz!"
end,
OnAdjust = function(self, client, data, value, newData)
newData.gender = value
end
})
ix.char.vars["data"].OnValidate = function(self, datas, payload, client)
local faction = ix.faction.indices[payload.faction]
if faction then
if (!payload.data["background"] or payload.data["background"] == "") and faction:GetNoBackground(client) != true then
return false, "Arkaplanınızı seçmediniz!"
end
if faction:GetNoGenetics(client) then
return true
end
if !payload.data.age or payload.data["age"] == "" then
return false, "Yaşınızı seçmediniz!"
end
if !payload.data.height or payload.data["height"] == "" then
return false, "Boyunuzu seçmediniz!"
end
if faction.name != "Vortigaunt" then
if !payload.data["eye color"] or payload.data["eye color"] == "" then
return false, "Göz rengi seçmediniz!"
end
end
if payload.data.skin < 0 then
return false, "Geçerli bir deri seçmediniz!"
end
if payload.data.groups then
if payload.data.groups["2"]then
if payload.data.groups["2"] < 0 then
return false, "Geçerli bir kıyafet seçmediniz!"
end
end
if payload.data.groups["3"] then
if payload.data.groups["3"] < 0 then
return false, "Geçerli bir pantolon seçmediniz!"
end
end
end
if faction:GetNoAppearances(client) then
return true
end
if faction:GetReadOptionDisabled(client) then
return true
end
end
return true
end
ix.char.vars["data"].OnAdjust = function(self, client, datas, value, newData)
newData.data = value
end