commit f305d28544fccfbb708e690e922136396f4b7a8f Author: David Vogel Date: Sun Jul 15 12:07:37 2018 +0200 Initial Commit diff --git a/lua/autorun/server/mapcalc.lua b/lua/autorun/server/mapcalc.lua new file mode 100644 index 0000000..a8fdc6e --- /dev/null +++ b/lua/autorun/server/mapcalc.lua @@ -0,0 +1,211 @@ + + + +if engine.ActiveGamemode() == "zombiesurvival" then + +-- 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 + 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 +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() + +if !timer.Exists( "zombiepercentcalc" ) then + timer.Create( "zombiepercentcalc", 10, 0, function() + if #(team.GetPlayers(TEAM_UNDEAD)) >0 then + zombpercentcountmap =zombpercentcountmap +1 + + end + 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 + + 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 + + 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 +end) +end) +end \ No newline at end of file diff --git a/lua/autorun/server/sv_pointsaving.lua b/lua/autorun/server/sv_pointsaving.lua new file mode 100644 index 0000000..98e9600 --- /dev/null +++ b/lua/autorun/server/sv_pointsaving.lua @@ -0,0 +1,158 @@ +--[[ +JAXJAXK LICENSE +VERSION 1.0 +Copyright 9/24/2015 + +copy, upload or distribution of this license is allowed however no one is to change the original text with exception of jaxjaxk ( the creator). + +the contents of this addon are strictly off limits to hells gamers or anyone affiliated with hells gamers. +legal action will be taken against anyone who does not comply with the terms and conditions of this addon + +TERMS AND CONDITIONS +1) this addon is not permitted on any servers that are hells gamers or a affiliated with hells gamers. +2) you are free to us the code as a reference as to how to solve problems however you are not permitted to copy the code without the permission of jaxjaxk ( the creator). further more hells gamers is not permited to even look at the code. +3) modification to the code is permitted by anyone that is not affiliated with hells gamers. +4) you will not modify the code in any way that directly or indirectly generates revenue/money without the express permission of jaxjaxk ( the creator) +5) jaxjaxk ( the creator)has the right to have this addon removed from your server at any time for any reason. you are useing his addon, do not abuse it. +6) if you do not agree to any of the above conditions you must delete the addon and any files affiliated with the addon in its entirety as well of any dirivitives of the files or content. + +tl;dr - don't screw with me and I won't screw with you. it brings joy when people use my addon, don't abuse it. + +INFORMATION +jaxjaxk ( present username) created this addon. +his email is jaxschellhorn@gmail.com +]] + + + +------------------------------------------------------------------- + + + +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 ) + + 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() + 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 + 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 + 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()) + ply:SetMoney(ply:GetPoints()) + ply:SaveMoney() + ply:SaveMoneyTXT() + + end +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(ply:GetMoney()) + end +end) + +--[[concommand.Add("admin_set_points_save", function(ply, cmd, args, argsS) + if args and args[1] and args[2] and tonumber(args[2]) then + local foundply + for k, v in pairs(player.GetAll()) do + if string.find(string.lower(v:Name()), args[1]) then + foundply = v + end + end + + if foundply then + foundply:SetPoints(tonumber(args[2])) + end + end +end)]] + +--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 + pl:SetPoints(pl:GetMoney()) + --pl:SetBegPoints(pl:GetDTInt(1)) + end +end) +--///////////////////////////////////////////////////////////////////// +local meta = FindMetaTable("Player") --Get the meta table of player + +function meta:AddMoney(amount) + local current_cash = self:GetMoney() + self:SetMoney( current_cash + amount ) +end + +function meta:SetMoney(amount) + self:SetNetworkedInt( "Money", amount ) + self:SaveMoney() +end + +function meta:SaveMoney() + local cash = self:GetMoney() + self:SetPData("money", cash) +end + +function meta:SaveMoneyTXT() + file.Write(gmod.GetGamemode().Name .."/Money/".. string.gsub(self:SteamID(), ":", "_") ..".txt", self:GetMoney()) +end + +function meta:TakeMoney(amount) + --Add money function here + self:AddMoney(-amount) +end + +function meta:GetMoney() + return self:GetNetworkedInt( "Money" ) +end \ No newline at end of file