Files
wnsrc/gamemodes/darkrp/plugins/willardskills/meta/sh_character.lua

129 lines
3.3 KiB
Lua
Raw Normal View History

2024-08-04 23:54:45 +03:00
--[[
| 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 CHAR = ix.meta.character
function CHAR:GetSkillLevel(skillID)
local level = self:GetSkill(skillID) + self:GetSkillBoostLevels(skillID) - self:GetSkillNeedsReducing(skillID)
return math.Clamp(level, 0, ix.skill.MAX_SKILL)
end
function CHAR:GetSkillNeedsReducing(skillID)
local skill = ix.skill:Find(skillID)
if (!skill) then return end
local reduceLevels = 0
local realLevel = self:GetSkill(skillID)
local reducedHunger, reducedThirst, reducedGas, reducedHealth = false, false, false, false
if (self.GetHunger and self.GetThirst) then
local hunger, thirst = self:GetHunger(), self:GetThirst()
if (hunger >= 50) then
local math = realLevel * math.Remap(math.min(hunger, 100), 50, 100, 0, 0.5)
reduceLevels = reduceLevels + math
reducedHunger = math
end
if (thirst >= 50) then
local math = realLevel * math.Remap(math.min(thirst, 100), 50, 100, 0, 0.5)
reduceLevels = reduceLevels + math
reducedThirst = math
end
end
if (self.GetGasPoints) then
local gasPointFraction = self:GetGasPoints() / 120
if (gasPointFraction > 0.3) then
local math = realLevel * math.Remap(math.min(gasPointFraction, 1), 0.3, 1, 0, 0.4)
reduceLevels = reduceLevels + math
reducedGas = math
end
end
local health, maxHealth = self:GetPlayer():Health(), self:GetPlayer():GetMaxHealth()
if (health <= maxHealth / 2) then
local math = realLevel * math.Remap(math.min(health, maxHealth), 50, 100, 0, 0.5)
reduceLevels = reduceLevels - math
reducedHealth = math
end
return math.Round(math.min(reduceLevels, realLevel)), reducedHunger, reducedThirst, reducedGas, reducedHealth
end
function CHAR:GetSkillBoostLevels(skillID)
local skill = ix.skill:Find(skillID)
if (!skill) then return end
local boostExp = 0
for _, attr in ipairs(skill.attributes) do
boostExp = boostExp + self:GetAttrBoostLevels(attr, skill)
end
return boostExp
end
function CHAR:GetSkillScale(scaleID)
local scale = ix.skill.scale[scaleID]
if (!scale) then return end
if (scale.GetValue) then
return scale:GetValue(self)
end
local skillLevel = self:GetSkillLevel(scale.skill)
return math.Clamp(
scale.minValue + scale.increase * (skillLevel - scale.minLevel) / (scale.maxLevel - scale.minLevel),
scale.minValue, scale.minValue + scale.increase)
end
function CHAR:CanLevelSkill(skillID)
local skill = ix.skill:Find(skillID)
if (!skill) then return end
return self:GetSkillStoredExp(skill.uniqueID) >= 1000 and self:GetSkill(skill.uniqueID) < ix.skill.MAX_SKILL and self:GetTotalSkillLevel() < ix.config.Get("MaxTotalSkill")
end
function CHAR:GetTotalSkillLevel()
local skills = self:GetSkill()
local totalLevel = 0
for _, v in pairs(skills) do
totalLevel = totalLevel + v
end
return totalLevel
end
if (SERVER) then
function CHAR:LevelUpSkill(skillID)
if (self:CanLevelSkill(skillID)) then
self:AddSkillLevel(skillID, 1)
self:SetSkillStoredExp(skillID, true)
end
end
function CHAR:AddSkillExperience(skillID, experience, bDirect)
end
function CHAR:AddSkillLevel(skillID, amount)
self:SetSkill(skillID, math.Clamp(self:GetSkill(skillID) + amount, 0, ix.skill.MAX_SKILL))
end
end