From 8dc476fa69377adc23c1190e94d9c89bf365f61d Mon Sep 17 00:00:00 2001 From: David Vogel Date: Sun, 15 Jul 2018 12:15:12 +0200 Subject: [PATCH] Cleanup and change of gamemode detection --- lua/autorun/server/mapcalc.lua | 343 +++++++++++++------------- lua/autorun/server/sv_pointsaving.lua | 91 ++++--- 2 files changed, 209 insertions(+), 225 deletions(-) diff --git a/lua/autorun/server/mapcalc.lua b/lua/autorun/server/mapcalc.lua index a8fdc6e..8ec3437 100644 --- a/lua/autorun/server/mapcalc.lua +++ b/lua/autorun/server/mapcalc.lua @@ -1,15 +1,13 @@ - - -if engine.ActiveGamemode() == "zombiesurvival" then +if engine.ActiveGamemode() ~= "zombiesurvival" then return end -- this code grabs the data from the file about the map. if none exists it makes a default. -timer.Simple(25,function() -mapwins = 0 -maploss = 0 - if not file.Exists( "zsmapinfo", "DATA") then - file.CreateDir( "zsmapinfo" ) - end +timer.Simple(25, function() + mapwins = 0 + maploss = 0 + if not file.Exists("zsmapinfo", "DATA") then + file.CreateDir("zsmapinfo") + end local mapname = string.lower(game.GetMap()) if file.Exists("zsmapinfo/"..mapname..".txt", "DATA") then local data = util.JSONToTable(file.Read("zsmapinfo/"..mapname..".txt", "DATA")) @@ -26,186 +24,175 @@ maploss = 0 file.Write( "zsmapinfo/"..mapname..".txt", util.TableToJSON( main ) ) print("map win file not found. created one.") end -zombpercentcountmap = 0 -totpercentcountmap = 1 + zombpercentcountmap = 0 + totpercentcountmap = 1 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 -hook.Add( "WaveStateChanged", "zombpercentcalc", function() -roundtime = CurTime() +hook.Add("WaveStateChanged", "zombpercentcalc", function() + roundtime = CurTime() -if !timer.Exists( "zombiepercentcalc" ) then - timer.Create( "zombiepercentcalc", 10, 0, function() + if !timer.Exists("zombiepercentcalc") then + timer.Create("zombiepercentcalc", 10, 0, function() if #(team.GetPlayers(TEAM_UNDEAD)) >0 then - zombpercentcountmap =zombpercentcountmap +1 - + zombpercentcountmap =zombpercentcountmap + 1 end - totpercentcountmap = totpercentcountmap +1 + totpercentcountmap = totpercentcountmap + 1 + + 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 - - 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 - - PrintMessage(HUD_PRINTTALK,"This map has been played "..mapplaytotal.." times with humans winning "..(mapwins).." times.("..(math.Round((mapwins/mapplaytotal)*100)).."%)") - PrintMessage(HUD_PRINTTALK,"Zombies were only playing for "..(zombiepercentcalcmap*100).."% of the time.") - PrintMessage(HUD_PRINTTALK,"frequency multiplier for this map is:"..multiplywin..". play maps infrequently for a higher value!") - PrintMessage(HUD_PRINTTALK,"Special boost for this map is:"..(mapboost)..". tell an admin if you think it should be changed!") - PrintMessage(HUD_PRINTTALK,"Map jackpot is now "..(mapjackpot)..".") - - --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,"You gained "..(pointstogive).." this round for playing to the end!") - 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,"You gained "..(math.Round(pointstogive/2)).." points this round for playing to the end!") - end -end]] - - -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,"You gained "..(pointstogive).." this round for playing to the end!") - else - ply:SetMoney(ply:GetPoints()+pointstogive) - ply:SaveMoney() - ply:SaveMoneyTXT() - ply:PrintMessage(HUD_PRINTTALK,"You gained "..(pointstogive).." this round for playing to the end!") - end - + if winner == TEAM_UNDEAD then + maploss = maploss + 1 + elseif winner == TEAM_HUMAN then + mapwins = mapwins +1 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,"You gained "..(pointstogive/2).." this round for playing to the end!") - else - ply:SetMoney(ply:GetPoints()+(pointstogive/2)) - ply:SaveMoney() - ply:SaveMoneyTXT() - ply:PrintMessage(HUD_PRINTTALK,"You gained "..(pointstogive/2).." this round for playing to the end!") + 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,"This map has been played "..mapplaytotal.." times with humans winning "..(mapwins).." times.("..(math.Round((mapwins/mapplaytotal)*100)).."%)") + PrintMessage(HUD_PRINTTALK,"Zombies were only playing for "..(zombiepercentcalcmap*100).."% of the time.") + PrintMessage(HUD_PRINTTALK,"frequency multiplier for this map is:"..multiplywin..". play maps infrequently for a higher value!") + PrintMessage(HUD_PRINTTALK,"Special boost for this map is:"..(mapboost)..". tell an admin if you think it should be changed!") + PrintMessage(HUD_PRINTTALK,"Map jackpot is now "..(mapjackpot)..".") + + --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,"You gained "..(pointstogive).." this round for playing to the end!") + 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,"You gained "..(math.Round(pointstogive/2)).." points this round for playing to the end!") + end + end]] + + 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,"You gained "..(pointstogive).." this round for playing to the end!") + else + ply:SetMoney(ply:GetPoints()+pointstogive) + ply:SaveMoney() + ply:SaveMoneyTXT() + ply:PrintMessage(HUD_PRINTTALK,"You gained "..(pointstogive).." this round for playing to the end!") + 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,"You gained "..(pointstogive/2).." this round for playing to the end!") + else + ply:SetMoney(ply:GetPoints()+(pointstogive/2)) + ply:SaveMoney() + ply:SaveMoneyTXT() + ply:PrintMessage(HUD_PRINTTALK,"You gained "..(pointstogive/2).." this round for playing to the 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)+(pointstogive/2)) + else + ply:SetMoney(ply:GetPoints()+(pointstogive/2)) + 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)+(pointstogive/2)) - else - ply:SetMoney(ply:GetPoints()+(pointstogive/2)) - end - end - end -end -end) -end) -end \ No newline at end of file + end) +end) \ No newline at end of file diff --git a/lua/autorun/server/sv_pointsaving.lua b/lua/autorun/server/sv_pointsaving.lua index 98e9600..db83c01 100644 --- a/lua/autorun/server/sv_pointsaving.lua +++ b/lua/autorun/server/sv_pointsaving.lua @@ -27,42 +27,50 @@ his email is jaxschellhorn@gmail.com ------------------------------------------------------------------- - +if engine.ActiveGamemode() ~= "zombiesurvival" then return end hook.Add("PlayerInitialSpawnRound", "ps_set", function(ply) -if gmod.GetGamemode().Name == "Zombie Survival" then -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 - ply:SetPData("money", 100) --Save it - ply:SetMoney( 100 ) --Set it to the networked ints that can be called from the client too - --ply:SetDTInt(1,ply:GetMoney()) - else - ply:SetMoney( cash ) - + if gmod.GetGamemode().Name == "Zombie Survival" then + 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 + ply:SetPData("money", 100) -- Save it + ply:SetMoney( 100 ) -- Set it to the networked ints that can be called from the client too + -- ply:SetDTInt(1,ply:GetMoney()) + else + ply:SetMoney( cash ) + + end end -end end) 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") and gmod.GetGamemode().Name == "Zombie Survival" then - ply:SetMoney(ply:GetPoints()) - --WriteData(ply:SteamID64(), ply:GetPoints()) - --PrintMessage(HUD_PRINTTALK,ply:GetDTInt(1)) - --PrintMessage(HUD_PRINTTALK,ply:GetMoney()) - ply:SaveMoney() - ply:SaveMoneyTXT() + if (ply:Team() == TEAM_HUMAN and game.GetMap() ~= "zs_obj_gauntlet_v3" and game.GetMap() ~="zs_gauntlet_reborn_b6") then + ply:SetMoney(ply:GetPoints()) + -- WriteData(ply:SteamID64(), ply:GetPoints()) + -- PrintMessage(HUD_PRINTTALK,ply:GetDTInt(1)) + -- PrintMessage(HUD_PRINTTALK,ply:GetMoney()) + ply:SaveMoney() + ply:SaveMoneyTXT() end end) --[[hook.Add("EndRound", "ps_save", function(winner) -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 winner == TEAM_HUMAN then - for k,ply in pairs(player.GetAll()) do - if ply:Team() == TEAM_HUMAN then - ply:SetMoney(ply:GetPoints()) - else + print("end round hook") + if (game.GetMap() ~= "zs_obj_gauntlet_v3" and game.GetMap() ~="zs_gauntlet_reborn_b6") then + if winner == TEAM_HUMAN then + for k,ply in pairs(player.GetAll()) do + if ply:Team() == TEAM_HUMAN then + ply:SetMoney(ply:GetPoints()) + 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 ply:SetMoney(ply:GetPoints()+((ply:GetPoints()- ply:GetMoney())*.15)) else @@ -70,22 +78,13 @@ if (game.GetMap() ~= "zs_obj_gauntlet_v3" and game.GetMap() ~="zs_gauntlet_rebor 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)]] 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 - --WriteData(ply:SteamID64(), ply:GetPoints()) + 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()) ply:SetMoney(ply:GetPoints()) ply:SaveMoney() ply:SaveMoneyTXT() @@ -94,9 +93,9 @@ hook.Add("PlayerDisconnected", "ps_disc", function(ply) end) hook.Add("PlayerRedeemed", "ps_redeem", function(ply) - --ply:SetPoints(ReadData(ply:SteamID64())) - --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 + -- ply:SetPoints(ReadData(ply:SteamID64())) + -- ply:SetMoney(ply:GetMoney()) + if (game.GetMap() ~= "zs_obj_gauntlet_v3" and game.GetMap() ~="zs_gauntlet_reborn_b6") then ply:SetPoints(ply:GetMoney()) end end) @@ -116,14 +115,12 @@ 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) - 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:SetBegPoints(pl:GetDTInt(1)) + -- pl:SetBegPoints(pl:GetDTInt(1)) end end) --///////////////////////////////////////////////////////////////////// @@ -149,7 +146,7 @@ function meta:SaveMoneyTXT() end function meta:TakeMoney(amount) - --Add money function here + -- Add money function here self:AddMoney(-amount) end