mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
218
gamemodes/helix/plugins/charcreation/sv_plugin.lua
Normal file
218
gamemodes/helix/plugins/charcreation/sv_plugin.lua
Normal file
@@ -0,0 +1,218 @@
|
||||
--[[
|
||||
| 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
|
||||
|
||||
function PLUGIN:PlayerLoadedCharacter(client, character)
|
||||
if (character:GetGlasses() and !character:HasGlasses()) then
|
||||
timer.Simple(3, function()
|
||||
if (IsValid(client) and !character:HasGlasses()) then
|
||||
client:NotifyLocalized("I need my glasses on to see properly..")
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
-- Beard stuff
|
||||
local uniqueID = "ixBeard" .. client:SteamID64()
|
||||
local gender = character:GetGender()
|
||||
if (gender == "male" and !ix.faction.Get(client:Team()).noBeard) then
|
||||
timer.Create(uniqueID, PLUGIN.TIMER_DELAY, 0, function()
|
||||
if (IsValid(client)) then
|
||||
PLUGIN:BeardPlayerTick(client)
|
||||
else
|
||||
timer.Remove(uniqueID)
|
||||
end
|
||||
end)
|
||||
else
|
||||
timer.Remove(uniqueID)
|
||||
end
|
||||
|
||||
local hairTable = character.GetHair and character:GetHair() or {}
|
||||
if !table.IsEmpty(hairTable) then
|
||||
local color = hairTable.color
|
||||
local charProxies = character:GetProxyColors() or {}
|
||||
|
||||
charProxies["HairColor"] = color
|
||||
|
||||
character:SetProxyColors(charProxies)
|
||||
else
|
||||
client:Notify("Yeni saç ve saç renkleri ekledik. Lütfen menüden seçin.")
|
||||
netstream.Start(client, "OpenBeardStyling")
|
||||
end
|
||||
|
||||
local curModel = client:GetModel()
|
||||
if curModel:find("willardnetworks/citizens/male") and !curModel:find("willardnetworks/citizens/male_") then
|
||||
local beardIndex = client:FindBodygroupByName("beard")
|
||||
local curBeard = client:GetBodygroup(beardIndex)
|
||||
character:SetModel(string.gsub(curModel, "male", "male_"))
|
||||
|
||||
for i = 0, client:GetNumBodyGroups() do
|
||||
client:SetBodygroup(i, 0)
|
||||
end
|
||||
|
||||
timer.Simple(2, function()
|
||||
if !client or client and !IsValid(client) then return end
|
||||
if !character then return end
|
||||
|
||||
local groups = {}
|
||||
if curBeard then
|
||||
groups[beardIndex] = curBeard
|
||||
end
|
||||
|
||||
local hairIndex = client:FindBodygroupByName("hair")
|
||||
groups[hairIndex] = hairTable.hair
|
||||
character:SetData("groups", groups)
|
||||
|
||||
if hairTable.hair then
|
||||
client:SetBodygroup(hairIndex, hairTable.hair)
|
||||
end
|
||||
|
||||
if curBeard then
|
||||
client:SetBodygroup(beardIndex, curBeard)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:AdjustCreationPayload(client, payload, newPayload)
|
||||
if (newPayload.data.glasses != nil) then
|
||||
newPayload.glasses = newPayload.data.glasses
|
||||
newPayload.data.glasses = nil
|
||||
end
|
||||
|
||||
if (newPayload.data.canread != nil) then
|
||||
newPayload.canread = newPayload.data.canread
|
||||
newPayload.data.canread = nil
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:BeardPlayerTick(client)
|
||||
local character = client:GetCharacter()
|
||||
if (character) then
|
||||
if (!client:Alive()) then return end
|
||||
|
||||
local beardProgress = character:GetBeardProgress() + 1
|
||||
character:SetBeardProgress(beardProgress)
|
||||
|
||||
if (beardProgress == 180 * 8) then
|
||||
local index = client:FindBodygroupByName("beard")
|
||||
local groups = character:GetData("groups", {})
|
||||
groups[index] = 8
|
||||
client:SetBodygroup(index, 8)
|
||||
character:SetData("groups", groups)
|
||||
client:NotifyLocalized("I should really trim my beard.")
|
||||
elseif (beardProgress == 180 * 16) then
|
||||
local index = client:FindBodygroupByName("beard")
|
||||
local groups = character:GetData("groups", {})
|
||||
groups[index] = 5
|
||||
client:SetBodygroup(index, 5)
|
||||
character:SetData("groups", groups)
|
||||
client:NotifyLocalized("My beard is getting really long now.")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
netstream.Hook("RemoveBeardBodygroup", function(client, target)
|
||||
if target and IsValid(target) then
|
||||
if client != target then
|
||||
client = target
|
||||
end
|
||||
end
|
||||
|
||||
local character = client:GetCharacter()
|
||||
local index = client:FindBodygroupByName("beard")
|
||||
if client:GetBodygroup( index ) <= 0 then
|
||||
client:NotifyLocalized("I don't have any beard!")
|
||||
return false
|
||||
end
|
||||
|
||||
local groups = character:GetData("groups", {})
|
||||
groups[index] = 0
|
||||
client:SetBodygroup(index, 0)
|
||||
character:SetData("groups", groups)
|
||||
character:SetBeardProgress(0)
|
||||
end)
|
||||
|
||||
netstream.Hook("SetHairBeardBodygroup", function(client, hairID, beardID, hairColor, target)
|
||||
if target and IsValid(target) then
|
||||
if client != target then
|
||||
client = target
|
||||
end
|
||||
end
|
||||
|
||||
local character = client:GetCharacter()
|
||||
local gender = character:GetGender()
|
||||
|
||||
local beardBGIndex = client:FindBodygroupByName("beard")
|
||||
local hairBGIndex = client:FindBodygroupByName("hair")
|
||||
|
||||
local curHair = client:GetBodygroup(hairBGIndex)
|
||||
local curBeard = beardBGIndex != -1 and client:GetBodygroup(beardBGIndex) or false
|
||||
|
||||
local groups = character:GetData("groups", {})
|
||||
|
||||
if gender != "female" and curBeard and beardID and curBeard != beardID then
|
||||
local beardProgress = character:GetBeardProgress()
|
||||
|
||||
if (beardProgress < (180 * 8)) and client:GetBodygroup(beardBGIndex) != 5 and client:GetBodygroup(beardBGIndex) != 8 then
|
||||
return false
|
||||
end
|
||||
|
||||
character:SetBeardProgress(0)
|
||||
|
||||
groups[beardBGIndex] = beardID
|
||||
client:SetBodygroup(beardBGIndex, beardID)
|
||||
end
|
||||
|
||||
if hairID and curHair != hairID or hairColor then
|
||||
local hairData = character:GetHair()
|
||||
|
||||
if hairID then
|
||||
groups[hairBGIndex] = hairID
|
||||
local bgName = client:GetModel():find("wn7new") and "cp_Head" or "headwear"
|
||||
if client:GetBodygroup(client:FindBodygroupByName(bgName)) <= 0 then
|
||||
client:SetBodygroup(hairBGIndex, hairID)
|
||||
end
|
||||
|
||||
hairData.hair = hairID
|
||||
end
|
||||
|
||||
if hairColor then
|
||||
hairData.color = hairColor
|
||||
|
||||
local charProxies = character:GetProxyColors() or {}
|
||||
|
||||
charProxies["HairColor"] = hairColor
|
||||
|
||||
character:SetProxyColors(charProxies)
|
||||
end
|
||||
|
||||
character:SetHair(hairData)
|
||||
end
|
||||
|
||||
character:SetData("groups", groups)
|
||||
end)
|
||||
|
||||
function PLUGIN:InitializedPlugins()
|
||||
Schema.charCreationItems = {}
|
||||
for _, v in pairs(ix.item.list) do
|
||||
if (v.charCreation or v.adminCreation) and v.bodyGroups then
|
||||
Schema.charCreationItems[v.uniqueID] = {bodygroups = v.bodyGroups, proxy = v.proxy or false}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
netstream.Hook("AcceptStyling", function(target, attempter)
|
||||
if !target or !attempter then return end
|
||||
if !IsValid(target) or !IsValid(attempter) then return end
|
||||
|
||||
netstream.Start(attempter, "OpenBeardStyling", target)
|
||||
end)
|
||||
Reference in New Issue
Block a user