Cleanup and change of gamemode detection

master
David Vogel 6 years ago
parent f305d28544
commit 8dc476fa69

@ -1,15 +1,13 @@
if engine.ActiveGamemode() ~= "zombiesurvival" then return end
if engine.ActiveGamemode() == "zombiesurvival" then
-- this code grabs the data from the file about the map. if none exists it makes a default. -- this code grabs the data from the file about the map. if none exists it makes a default.
timer.Simple(25,function() timer.Simple(25, function()
mapwins = 0 mapwins = 0
maploss = 0 maploss = 0
if not file.Exists( "zsmapinfo", "DATA") then if not file.Exists("zsmapinfo", "DATA") then
file.CreateDir( "zsmapinfo" ) file.CreateDir("zsmapinfo")
end end
local mapname = string.lower(game.GetMap()) local mapname = string.lower(game.GetMap())
if file.Exists("zsmapinfo/"..mapname..".txt", "DATA") then if file.Exists("zsmapinfo/"..mapname..".txt", "DATA") then
local data = util.JSONToTable(file.Read("zsmapinfo/"..mapname..".txt", "DATA")) local data = util.JSONToTable(file.Read("zsmapinfo/"..mapname..".txt", "DATA"))
@ -26,186 +24,175 @@ maploss = 0
file.Write( "zsmapinfo/"..mapname..".txt", util.TableToJSON( main ) ) file.Write( "zsmapinfo/"..mapname..".txt", util.TableToJSON( main ) )
print("map win file not found. created one.") print("map win file not found. created one.")
end end
zombpercentcountmap = 0 zombpercentcountmap = 0
totpercentcountmap = 1 totpercentcountmap = 1
end) end)
-- this hook checks to make sure there are zombies on the server. later it should check to see if any are afk. -- this hook checks to make sure there are zombies on the server. later it should check to see if any are afk.
roundtime = 0 roundtime = 0
prereqcount = false prereqcount = false
hook.Add( "WaveStateChanged", "zombpercentcalc", function() hook.Add("WaveStateChanged", "zombpercentcalc", function()
roundtime = CurTime() roundtime = CurTime()
if !timer.Exists( "zombiepercentcalc" ) then if !timer.Exists("zombiepercentcalc") then
timer.Create( "zombiepercentcalc", 10, 0, function() timer.Create("zombiepercentcalc", 10, 0, function()
if #(team.GetPlayers(TEAM_UNDEAD)) >0 then if #(team.GetPlayers(TEAM_UNDEAD)) >0 then
zombpercentcountmap =zombpercentcountmap +1 zombpercentcountmap =zombpercentcountmap + 1
end end
totpercentcountmap = totpercentcountmap +1 totpercentcountmap = totpercentcountmap + 1
end)
end)
end
end)
hook.Add("EndRound","givedapoints",function(winner)
timer.Destroy("zombiepercentcalc" )
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
else
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
end
end
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 end
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>") hook.Add("EndRound", "givedapoints", function(winner)
PrintMessage(HUD_PRINTTALK,"<c=0,255,255>Zombies were only playing for "..(zombiepercentcalcmap*100).."% of the time.</c>") timer.Destroy("zombiepercentcalc")
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 timer.Simple(0,function()
--[[if (game.GetMap() ~= "zs_obj_gauntlet_v3" and game.GetMap() ~="zs_gauntlet_reborn_b6") and gmod.GetGamemode().Name == "Zombie Survival" then print("point bonus hook")
for k,v in pairs(team.GetPlayers(TEAM_HUMAN)) do local mapname = string.lower(game.GetMap())
v:SetMoney((v:GetDTInt(1) + pointstogive) ) local zombiepercentcalcmap = (zombpercentcountmap/totpercentcountmap) or .01
--WriteData(v:SteamID64(), v:GetPoints()) local mapplaytotal = mapwins + maploss
v:SaveMoney() local pointstogive = 10
v:SaveMoneyTXT() zombiepercentcalcmap = zombiepercentcalcmap or .01
v:PrintMessage(HUD_PRINTTALK,"<c=255,0,0>You gained "..(pointstogive).." this round for playing to the end!</c>") -- we need to make sure that zombies were on the server for more than half the game.
end if zombiepercentcalcmap <=.5 then
for k,v in pairs(team.GetPlayers(TEAM_UNDEAD)) do PrintMessage(HUD_PRINTTALK,"No end of game points because zombies were not even playing half the time!")
v:SetMoney(math.Round((v:GetMoney() + (pointstogive/5)) )) elseif mapplaytotal <= 5 then
--WriteData(v:SteamID64(), v:GetPoints()) --print(mapplaytotal)
v:SaveMoney() PrintMessage(HUD_PRINTTALK,"sorry but this map needs to be played at least "..(5-mapplaytotal).." more times before you can get points for winning.")
v:SaveMoneyTXT() if winner == TEAM_UNDEAD then
v:PrintMessage(HUD_PRINTTALK,"<c=255,0,0>You gained "..(math.Round(pointstogive/2)).." points this round for playing to the end!</c>") maploss = maploss + 1
end elseif winner == TEAM_HUMAN then
end]] mapwins = mapwins +1
end
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
if ply:GetPoints()- ply:GetMoney()> 0 then
ply:SetMoney(ply:GetPoints()+((ply:GetPoints()- ply:GetMoney()))+pointstogive)
ply:SaveMoney()
ply:SaveMoneyTXT()
ply:PrintMessage(HUD_PRINTTALK,"<c=255,0,0>You gained "..(pointstogive).." this round for playing to the end!</c>")
else
ply:SetMoney(ply:GetPoints()+pointstogive)
ply:SaveMoney()
ply:SaveMoneyTXT()
ply:PrintMessage(HUD_PRINTTALK,"<c=255,0,0>You gained "..(pointstogive).." this round for playing to the end!</c>")
end
else else
if ply:GetPoints()- ply:GetMoney()> 0 then print("wow you fucked up! no seriously how do you not have a winner?")
ply:SetMoney(ply:GetPoints()+((ply:GetPoints()- ply:GetMoney())*.15)+(pointstogive/2)) end
ply:SaveMoney() if winner == TEAM_UNDEAD then
ply:SaveMoneyTXT() if mapjackpot <= 2500 then
ply:PrintMessage(HUD_PRINTTALK,"<c=255,0,0>You gained "..(pointstogive/2).." this round for playing to the end!</c>") mapjackpot = mapjackpot*1.1
else
ply:SetMoney(ply:GetPoints()+(pointstogive/2))
ply:SaveMoney()
ply:SaveMoneyTXT()
ply:PrintMessage(HUD_PRINTTALK,"<c=255,0,0>You gained "..(pointstogive/2).." this round for playing to the end!</c>")
end end
end end
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
v:SetMoney((v:GetDTInt(1) + pointstogive) )
--WriteData(v:SteamID64(), v:GetPoints())
v:SaveMoney()
v:SaveMoneyTXT()
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
v:SetMoney(math.Round((v:GetMoney() + (pointstogive/5)) ))
--WriteData(v:SteamID64(), v:GetPoints())
v:SaveMoney()
v:SaveMoneyTXT()
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]]
end end
else if (game.GetMap() ~= "zs_obj_gauntlet_v3" and game.GetMap() ~="zs_gauntlet_reborn_b6") and gmod.GetGamemode().Name == "Zombie Survival" then
for k,ply in pairs(player.GetAll()) do if winner == TEAM_HUMAN then
if ply:GetPoints()- ply:GetMoney()> 0 then for k,ply in pairs(player.GetAll()) do
ply:SetMoney(ply:GetPoints()+((ply:GetPoints()- ply:GetMoney())*.15)+(pointstogive/2)) if ply:Team() == TEAM_HUMAN then
if ply:GetPoints()- ply:GetMoney()> 0 then
ply:SetMoney(ply:GetPoints()+((ply:GetPoints()- ply:GetMoney()))+pointstogive)
ply:SaveMoney()
ply:SaveMoneyTXT()
ply:PrintMessage(HUD_PRINTTALK,"<c=255,0,0>You gained "..(pointstogive).." this round for playing to the end!</c>")
else
ply:SetMoney(ply:GetPoints()+pointstogive)
ply:SaveMoney()
ply:SaveMoneyTXT()
ply:PrintMessage(HUD_PRINTTALK,"<c=255,0,0>You gained "..(pointstogive).." this round for playing to the end!</c>")
end
else
if ply:GetPoints()- ply:GetMoney()> 0 then
ply:SetMoney(ply:GetPoints()+((ply:GetPoints()- ply:GetMoney())*.15)+(pointstogive/2))
ply:SaveMoney()
ply:SaveMoneyTXT()
ply:PrintMessage(HUD_PRINTTALK,"<c=255,0,0>You gained "..(pointstogive/2).." this round for playing to the end!</c>")
else
ply:SetMoney(ply:GetPoints()+(pointstogive/2))
ply:SaveMoney()
ply:SaveMoneyTXT()
ply:PrintMessage(HUD_PRINTTALK,"<c=255,0,0>You gained "..(pointstogive/2).." this round for playing to the end!</c>")
end
end
end
else else
ply:SetMoney(ply:GetPoints()+(pointstogive/2)) for k,ply in pairs(player.GetAll()) do
if ply:GetPoints()- ply:GetMoney()> 0 then
ply:SetMoney(ply:GetPoints()+((ply:GetPoints()- ply:GetMoney())*.15)+(pointstogive/2))
else
ply:SetMoney(ply:GetPoints()+(pointstogive/2))
end
end
end end
end end
end end)
end end)
end)
end)
end

@ -27,42 +27,50 @@ his email is jaxschellhorn@gmail.com
------------------------------------------------------------------- -------------------------------------------------------------------
if engine.ActiveGamemode() ~= "zombiesurvival" then return end
hook.Add("PlayerInitialSpawnRound", "ps_set", function(ply) hook.Add("PlayerInitialSpawnRound", "ps_set", function(ply)
if gmod.GetGamemode().Name == "Zombie Survival" then if gmod.GetGamemode().Name == "Zombie Survival" then
local cash = ply:GetPData("money") --Get the saved money amount local cash = ply:GetPData("money") --Get the saved money amount
if cash == nil then --If it doesn't exist supply the player with the starting money amount if cash == nil then -- If it doesn't exist supply the player with the starting money amount
ply:SetPData("money", 100) --Save it ply:SetPData("money", 100) -- Save it
ply:SetMoney( 100 ) --Set it to the networked ints that can be called from the client too ply:SetMoney( 100 ) -- Set it to the networked ints that can be called from the client too
--ply:SetDTInt(1,ply:GetMoney()) -- ply:SetDTInt(1,ply:GetMoney())
else else
ply:SetMoney( cash ) ply:SetMoney( cash )
end
end end
end
end) end)
hook.Add("PlayerDeath", "ps_catch", function(ply) hook.Add("PlayerDeath", "ps_catch", function(ply)
if (ply:Team() == TEAM_HUMAN and game.GetMap() ~= "zs_obj_gauntlet_v3" and game.GetMap() ~="zs_gauntlet_reborn_b6") then
if (ply:Team() == TEAM_HUMAN and game.GetMap() ~= "zs_obj_gauntlet_v3" and game.GetMap() ~="zs_gauntlet_reborn_b6") and gmod.GetGamemode().Name == "Zombie Survival" then ply:SetMoney(ply:GetPoints())
ply:SetMoney(ply:GetPoints()) -- WriteData(ply:SteamID64(), ply:GetPoints())
--WriteData(ply:SteamID64(), ply:GetPoints()) -- PrintMessage(HUD_PRINTTALK,ply:GetDTInt(1))
--PrintMessage(HUD_PRINTTALK,ply:GetDTInt(1)) -- PrintMessage(HUD_PRINTTALK,ply:GetMoney())
--PrintMessage(HUD_PRINTTALK,ply:GetMoney()) ply:SaveMoney()
ply:SaveMoney() ply:SaveMoneyTXT()
ply:SaveMoneyTXT()
end end
end) end)
--[[hook.Add("EndRound", "ps_save", function(winner) --[[hook.Add("EndRound", "ps_save", function(winner)
print("end round hook") print("end round hook")
if (game.GetMap() ~= "zs_obj_gauntlet_v3" and game.GetMap() ~="zs_gauntlet_reborn_b6") and gmod.GetGamemode().Name == "Zombie Survival" then if (game.GetMap() ~= "zs_obj_gauntlet_v3" and game.GetMap() ~="zs_gauntlet_reborn_b6") then
if winner == TEAM_HUMAN then if winner == TEAM_HUMAN then
for k,ply in pairs(player.GetAll()) do for k,ply in pairs(player.GetAll()) do
if ply:Team() == TEAM_HUMAN then if ply:Team() == TEAM_HUMAN then
ply:SetMoney(ply:GetPoints()) ply:SetMoney(ply:GetPoints())
else else
if ply:GetPoints()- ply:GetMoney()> 0 then
ply:SetMoney(ply:GetPoints()+((ply:GetPoints()- ply:GetMoney())*.15))
else
ply:SetMoney(ply:GetPoints())
end
end
end
else
for k,ply in pairs(player.GetAll()) do
if ply:GetPoints()- ply:GetMoney()> 0 then if ply:GetPoints()- ply:GetMoney()> 0 then
ply:SetMoney(ply:GetPoints()+((ply:GetPoints()- ply:GetMoney())*.15)) ply:SetMoney(ply:GetPoints()+((ply:GetPoints()- ply:GetMoney())*.15))
else else
@ -70,22 +78,13 @@ if (game.GetMap() ~= "zs_obj_gauntlet_v3" and game.GetMap() ~="zs_gauntlet_rebor
end end
end end
end end
else
for k,ply in pairs(player.GetAll()) do
if ply:GetPoints()- ply:GetMoney()> 0 then
ply:SetMoney(ply:GetPoints()+((ply:GetPoints()- ply:GetMoney())*.15))
else
ply:SetMoney(ply:GetPoints())
end
end
end end
end
end)]] end)]]
hook.Add("PlayerDisconnected", "ps_disc", function(ply) hook.Add("PlayerDisconnected", "ps_disc", function(ply)
if (ply:Team() == TEAM_HUMAN and game.GetMap() ~= "zs_obj_gauntlet_v3" and game.GetMap() ~="zs_gauntlet_reborn_b6") and gmod.GetGamemode().Name == "Zombie Survival" then if (ply:Team() == TEAM_HUMAN and game.GetMap() ~= "zs_obj_gauntlet_v3" and game.GetMap() ~="zs_gauntlet_reborn_b6") then
--WriteData(ply:SteamID64(), ply:GetPoints()) -- WriteData(ply:SteamID64(), ply:GetPoints())
ply:SetMoney(ply:GetPoints()) ply:SetMoney(ply:GetPoints())
ply:SaveMoney() ply:SaveMoney()
ply:SaveMoneyTXT() ply:SaveMoneyTXT()
@ -94,9 +93,9 @@ hook.Add("PlayerDisconnected", "ps_disc", function(ply)
end) end)
hook.Add("PlayerRedeemed", "ps_redeem", function(ply) hook.Add("PlayerRedeemed", "ps_redeem", function(ply)
--ply:SetPoints(ReadData(ply:SteamID64())) -- ply:SetPoints(ReadData(ply:SteamID64()))
--ply:SetMoney(ply:GetMoney()) -- ply:SetMoney(ply:GetMoney())
if (game.GetMap() ~= "zs_obj_gauntlet_v3" and game.GetMap() ~="zs_gauntlet_reborn_b6") and gmod.GetGamemode().Name == "Zombie Survival" then if (game.GetMap() ~= "zs_obj_gauntlet_v3" and game.GetMap() ~="zs_gauntlet_reborn_b6") then
ply:SetPoints(ply:GetMoney()) ply:SetPoints(ply:GetMoney())
end end
end) end)
@ -116,14 +115,12 @@ end)
end end
end)]] end)]]
--ZSPS_Opt = CreateConVar("ZSPS_nosend", "0", FCVAR_ARCHIVE, "Opt out of the ZSPS server list"):GetBool() -- ZSPS_Opt = CreateConVar("ZSPS_nosend", "0", FCVAR_ARCHIVE, "Opt out of the ZSPS server list"):GetBool()
hook.Add("PlayerSpawn" , "spawnplayerpoints" ,function(pl) hook.Add("PlayerSpawn" , "spawnplayerpoints" ,function(pl)
if (pl:Team() == TEAM_HUMAN and game.GetMap() ~= "zs_obj_gauntlet_v3" and game.GetMap() ~="zs_gauntlet_reborn_b6") and gmod.GetGamemode().Name == "Zombie Survival" then if (pl:Team() == TEAM_HUMAN and game.GetMap() ~= "zs_obj_gauntlet_v3" and game.GetMap() ~="zs_gauntlet_reborn_b6") then
pl:SetPoints(pl:GetMoney()) pl:SetPoints(pl:GetMoney())
--pl:SetBegPoints(pl:GetDTInt(1)) -- pl:SetBegPoints(pl:GetDTInt(1))
end end
end) end)
--///////////////////////////////////////////////////////////////////// --/////////////////////////////////////////////////////////////////////
@ -149,7 +146,7 @@ function meta:SaveMoneyTXT()
end end
function meta:TakeMoney(amount) function meta:TakeMoney(amount)
--Add money function here -- Add money function here
self:AddMoney(-amount) self:AddMoney(-amount)
end end

Loading…
Cancel
Save