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 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 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) print("### PS Loaded: "..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 amount = math.Round(amount) print("### PS Saved: "..amount) 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