2018-07-15 10:07:37 +00:00
2018-07-15 10:15:12 +00:00
if engine.ActiveGamemode ( ) ~= " zombiesurvival " then return end
2018-07-15 10:07:37 +00:00
-- this code grabs the data from the file about the map. if none exists it makes a default.
2018-07-15 10:15:12 +00:00
timer.Simple ( 25 , function ( )
mapwins = 0
maploss = 0
if not file.Exists ( " zsmapinfo " , " DATA " ) then
file.CreateDir ( " zsmapinfo " )
end
2018-07-15 10:07:37 +00:00
local mapname = string.lower ( game.GetMap ( ) )
if file.Exists ( " zsmapinfo/ " .. mapname .. " .txt " , " DATA " ) then
local data = util.JSONToTable ( file.Read ( " zsmapinfo/ " .. mapname .. " .txt " , " DATA " ) )
mapwins = data.mapwins
maploss = data.maploss
mapboost = data.mapboost
mapjackpot = data.mapjackpot
else
local main = { }
main [ " mapwins " ] = 0
main [ " maploss " ] = 0
main [ " mapboost " ] = 1 -- use a scale from 1 to 5
main [ " mapjackpot " ] = 25
file.Write ( " zsmapinfo/ " .. mapname .. " .txt " , util.TableToJSON ( main ) )
print ( " map win file not found. created one. " )
end
2018-07-15 10:15:12 +00:00
zombpercentcountmap = 0
totpercentcountmap = 1
2018-07-15 10:07:37 +00:00
end )
-- this hook checks to make sure there are zombies on the server. later it should check to see if any are afk.
roundtime = 0
prereqcount = false
2018-07-15 10:15:12 +00:00
hook.Add ( " WaveStateChanged " , " zombpercentcalc " , function ( )
roundtime = CurTime ( )
2018-07-15 10:07:37 +00:00
2018-07-15 10:15:12 +00:00
if ! timer.Exists ( " zombiepercentcalc " ) then
timer.Create ( " zombiepercentcalc " , 10 , 0 , function ( )
2018-07-15 10:07:37 +00:00
if # ( team.GetPlayers ( TEAM_UNDEAD ) ) > 0 then
2018-07-15 10:15:12 +00:00
zombpercentcountmap = zombpercentcountmap + 1
2018-07-15 10:07:37 +00:00
end
2018-07-15 10:15:12 +00:00
totpercentcountmap = totpercentcountmap + 1
end )
2018-07-15 10:07:37 +00:00
end
2018-07-15 10:15:12 +00:00
end )
2018-07-15 10:07:37 +00:00
2018-07-15 10:15:12 +00:00
hook.Add ( " EndRound " , " givedapoints " , function ( winner )
timer.Destroy ( " zombiepercentcalc " )
2018-07-15 10:07:37 +00:00
2018-07-15 10:15:12 +00:00
timer.Simple ( 0 , function ( )
print ( " point bonus hook " )
local mapname = string.lower ( game.GetMap ( ) )
local zombiepercentcalcmap = ( zombpercentcountmap / totpercentcountmap ) or .01
local mapplaytotal = mapwins + maploss
local pointstogive = 10
zombiepercentcalcmap = zombiepercentcalcmap or .01
-- we need to make sure that zombies were on the server for more than half the game.
if zombiepercentcalcmap <= .5 then
PrintMessage ( HUD_PRINTTALK , " No end of game points because zombies were not even playing half the time! " )
elseif mapplaytotal <= 5 then
--print(mapplaytotal)
PrintMessage ( HUD_PRINTTALK , " sorry but this map needs to be played at least " .. ( 5 - mapplaytotal ) .. " more times before you can get points for winning. " )
if winner == TEAM_UNDEAD then
maploss = maploss + 1
elseif winner == TEAM_HUMAN then
mapwins = mapwins + 1
2018-07-15 10:07:37 +00:00
else
2018-07-15 10:15:12 +00:00
print ( " wow you fucked up! no seriously how do you not have a winner? " )
end
if winner == TEAM_UNDEAD then
if mapjackpot <= 2500 then
mapjackpot = mapjackpot * 1.1
2018-07-15 10:07:37 +00:00
end
end
2018-07-15 10:15:12 +00:00
local main = { }
main [ " mapwins " ] = mapwins
main [ " maploss " ] = maploss
main [ " mapboost " ] = mapboost
main [ " mapjackpot " ] = mapjackpot
file.Write ( " zsmapinfo/ " .. mapname .. " .txt " , util.TableToJSON ( main ) )
else
if winner == TEAM_UNDEAD then
if mapjackpot <= 2500 then
mapjackpot = math.Round ( mapjackpot * 1.1 )
end
else
mapjackpot = 25
end
local multiplywin = 2
if mapplaytotal < 10 then
multiplywin = 2
elseif mapplaytotal < 25 then
multiplywin = 1.9
elseif mapplaytotal < 50 then
multiplywin = 1.8
elseif mapplaytotal < 100 then
multiplywin = 1.7
elseif mapplaytotal < 250 then
multiplywin = 1.6
elseif mapplaytotal < 500 then
multiplywin = 1.4
elseif mapplaytotal < 1000 then
multiplywin = 1.2
else
multiplywin = 1
end
if winner == TEAM_UNDEAD then
maploss = maploss + 1
elseif winner == TEAM_HUMAN then
mapwins = mapwins + 1
else
print ( " wow you fucked up! " )
end
local main = { }
main [ " mapwins " ] = mapwins
main [ " maploss " ] = maploss
main [ " mapboost " ] = mapboost
main [ " mapjackpot " ] = mapjackpot
file.Write ( " zsmapinfo/ " .. mapname .. " .txt " , util.TableToJSON ( main ) )
local finalmultiply = 1
if winner == TEAM_UNDEAD then
finalmultiply = ( mapboost * ( mapwins / mapplaytotal ) * zombiepercentcalcmap ) or .01
pointstogive = math.Round ( 50 * finalmultiply ) or 1
elseif winner == TEAM_HUMAN then
finalmultiply = ( mapboost * multiplywin * ( maploss / mapplaytotal ) * zombiepercentcalcmap ) or .01
pointstogive = math.Round ( ( 50 * finalmultiply ) + mapjackpot ) or 1
end
PrintMessage ( HUD_PRINTTALK , " <c=0,255,255>This map has been played " .. mapplaytotal .. " times with humans winning " .. ( mapwins ) .. " times.( " .. ( math.Round ( ( mapwins / mapplaytotal ) * 100 ) ) .. " %)</c> " )
PrintMessage ( HUD_PRINTTALK , " <c=0,255,255>Zombies were only playing for " .. ( zombiepercentcalcmap * 100 ) .. " % of the time.</c> " )
PrintMessage ( HUD_PRINTTALK , " <c=0,255,255>frequency multiplier for this map is: " .. multiplywin .. " . play maps infrequently for a higher value!</c> " )
PrintMessage ( HUD_PRINTTALK , " <c=0,255,255>Special boost for this map is: " .. ( mapboost ) .. " . tell an admin if you think it should be changed!</c> " )
PrintMessage ( HUD_PRINTTALK , " <c=204,204,0>Map jackpot is now " .. ( mapjackpot ) .. " .</c> " )
--regular points ZS points
--[[if (game.GetMap() ~= "zs_obj_gauntlet_v3" and game.GetMap() ~="zs_gauntlet_reborn_b6") and gmod.GetGamemode().Name == "Zombie Survival" then
for k , v in pairs ( team.GetPlayers ( TEAM_HUMAN ) ) do
2018-07-15 13:04:12 +00:00
v : SetSavedPoints ( ( v : GetDTInt ( 1 ) + pointstogive ) )
2018-07-15 10:15:12 +00:00
--WriteData(v:SteamID64(), v:GetPoints())
v : PrintMessage ( HUD_PRINTTALK , " <c=255,0,0>You gained " .. ( pointstogive ) .. " this round for playing to the end!</c> " )
end
for k , v in pairs ( team.GetPlayers ( TEAM_UNDEAD ) ) do
2018-07-15 13:04:12 +00:00
v : SetSavedPoints ( math.Round ( ( v : GetSavedPoints ( ) + ( pointstogive / 5 ) ) ) )
2018-07-15 10:15:12 +00:00
--WriteData(v:SteamID64(), v:GetPoints())
v : PrintMessage ( HUD_PRINTTALK , " <c=255,0,0>You gained " .. ( math.Round ( pointstogive / 2 ) ) .. " points this round for playing to the end!</c> " )
end
end ] ]
2018-07-15 10:07:37 +00:00
end
2018-07-15 10:15:12 +00:00
if ( game.GetMap ( ) ~= " zs_obj_gauntlet_v3 " and game.GetMap ( ) ~= " zs_gauntlet_reborn_b6 " ) and gmod.GetGamemode ( ) . Name == " Zombie Survival " then
if winner == TEAM_HUMAN then
for k , ply in pairs ( player.GetAll ( ) ) do
if ply : Team ( ) == TEAM_HUMAN then
2018-07-15 13:04:12 +00:00
if ply : GetPoints ( ) - ply : GetSavedPoints ( ) > 0 then
ply : SetSavedPoints ( ply : GetPoints ( ) + ( ( ply : GetPoints ( ) - ply : GetSavedPoints ( ) ) ) + pointstogive )
2018-07-15 10:15:12 +00:00
ply : PrintMessage ( HUD_PRINTTALK , " <c=255,0,0>You gained " .. ( pointstogive ) .. " this round for playing to the end!</c> " )
else
2018-07-15 13:04:12 +00:00
ply : SetSavedPoints ( ply : GetPoints ( ) + pointstogive )
2018-07-15 10:15:12 +00:00
ply : PrintMessage ( HUD_PRINTTALK , " <c=255,0,0>You gained " .. ( pointstogive ) .. " this round for playing to the end!</c> " )
end
else
2018-07-15 13:04:12 +00:00
if ply : GetPoints ( ) - ply : GetSavedPoints ( ) > 0 then
ply : SetSavedPoints ( ply : GetPoints ( ) + ( ( ply : GetPoints ( ) - ply : GetSavedPoints ( ) ) * .15 ) + ( pointstogive / 2 ) )
2018-07-15 10:15:12 +00:00
ply : PrintMessage ( HUD_PRINTTALK , " <c=255,0,0>You gained " .. ( pointstogive / 2 ) .. " this round for playing to the end!</c> " )
else
2018-07-15 13:04:12 +00:00
ply : SetSavedPoints ( ply : GetPoints ( ) + ( pointstogive / 2 ) )
2018-07-15 10:15:12 +00:00
ply : PrintMessage ( HUD_PRINTTALK , " <c=255,0,0>You gained " .. ( pointstogive / 2 ) .. " this round for playing to the end!</c> " )
end
end
end
2018-07-15 10:07:37 +00:00
else
2018-07-15 10:15:12 +00:00
for k , ply in pairs ( player.GetAll ( ) ) do
2018-07-15 13:04:12 +00:00
if ply : GetPoints ( ) - ply : GetSavedPoints ( ) > 0 then
ply : SetSavedPoints ( ply : GetPoints ( ) + ( ( ply : GetPoints ( ) - ply : GetSavedPoints ( ) ) * .15 ) + ( pointstogive / 2 ) )
2018-07-15 10:15:12 +00:00
else
2018-07-15 13:04:12 +00:00
ply : SetSavedPoints ( ply : GetPoints ( ) + ( pointstogive / 2 ) )
2018-07-15 10:15:12 +00:00
end
end
2018-07-15 10:07:37 +00:00
end
end
2018-07-15 10:15:12 +00:00
end )
end )