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