86 lines
2.2 KiB
Lua
86 lines
2.2 KiB
Lua
|
|
if engine.ActiveGamemode() ~= "zombiesurvival" then return end
|
|
|
|
local settings = {
|
|
StartingSavedPoints = 100,
|
|
MinimumPoints = 0,
|
|
IgnoredMaps = { -- Use $ at the end if you want to define exact map names with versions. (Otherwise it will match with all maps beginning with the given name)
|
|
"zs_obj_gauntlet",
|
|
"zs_gauntlet_reborn"
|
|
}
|
|
}
|
|
|
|
function PointSaving_shouldIgnoreMap(mapName)
|
|
for k, v in ipairs(settings.IgnoredMaps) do
|
|
if string.match(string.lower(mapName), "^"..v) then return true end
|
|
end
|
|
end
|
|
|
|
local function savePoints(ply)
|
|
if PointSaving_shouldIgnoreMap(game.GetMap()) then return end
|
|
|
|
if ply:Team() == TEAM_HUMAN then
|
|
--print("### PS Saved: "..ply:GetPoints())
|
|
ply:SetSavedPoints(ply:GetPoints())
|
|
end
|
|
end
|
|
--hook.Add("PlayerDeath", "pointsave_death", savePoints)
|
|
hook.Add("PlayerDisconnected", "pointsave_disconnect", savePoints)
|
|
|
|
hook.Add("PostEndRound", "pointsave_postendround", function(winner)
|
|
if PointSaving_shouldIgnoreMap(game.GetMap()) then return end
|
|
|
|
for k, ply in pairs(player.GetAll()) do
|
|
savePoints(ply)
|
|
end
|
|
end)
|
|
|
|
-- TODO: Save points every minute or so
|
|
|
|
local function loadPoints(ply)
|
|
if PointSaving_shouldIgnoreMap(game.GetMap()) then return end
|
|
|
|
timer.Simple(0, function()
|
|
if IsValid(ply) and ply:Team() == TEAM_HUMAN then
|
|
--print("### Loaded: "..ply:GetSavedPoints())
|
|
ply:SetPoints(ply:GetSavedPoints())
|
|
end
|
|
end)
|
|
|
|
end
|
|
hook.Add("PlayerSpawn", "pointsave_spawn", loadPoints)
|
|
|
|
-- #### Player meta #### TODO: Put in an extra file
|
|
|
|
local meta = FindMetaTable("Player") -- Get the meta table of player
|
|
|
|
-- Shared methods
|
|
|
|
function meta:GetSavedPoints()
|
|
if SERVER then
|
|
local points = self:GetPData("zs_savedpoints", settings.StartingSavedPoints)
|
|
self:SetNWInt("zs_savedpoints", points)
|
|
return points
|
|
end
|
|
|
|
return self:GetNWInt("zs_savedpoints", settings.StartingSavedPoints)
|
|
end
|
|
|
|
if not SERVER then return end
|
|
|
|
-- Server side methods
|
|
|
|
function meta:SetSavedPoints(amount)
|
|
if amount < settings.MinimumPoints then amount = settings.MinimumPoints end
|
|
self:SetNWInt("zs_savedpoints", amount)
|
|
self:SetPData("zs_savedpoints", amount)
|
|
end
|
|
|
|
function meta:AddSavedPoints(amount)
|
|
local points = self:GetSavedPoints()
|
|
self:SetSavedPoints(points + amount)
|
|
end
|
|
|
|
function meta:TakeSavedPoints(amount)
|
|
self:AddSavedPoints(-amount)
|
|
end |