2014-10-02 08:49:54 +08:00
-- Weapon sets that humans can start with if they choose RANDOM.
GM.StartLoadouts = {
2018-05-02 06:32:59 +08:00
{ " pshtr " , " 3pcp " , " 2pcp " , " 2sgcp " , " 3sgcp " } ,
{ " btlax " , " 3pcp " , " 2pcp " , " 2arcp " , " 3arcp " } ,
{ " stbbr " , " 3rcp " , " 2rcp " , " 2pcp " , " 3pcp " } ,
2014-10-02 08:49:54 +08:00
{ " tossr " , " 3smgcp " , " 2smgcp " , " zpplnk " , " stone " } ,
{ " blstr " , " 3sgcp " , " 2sgcp " , " csknf " } ,
2018-05-02 06:32:59 +08:00
{ " owens " , " 3pcp " , " 2pcp " , " 2pls " , " 3pls " } ,
{ " curativei " , " medkit " , " 90mkit " , " 60mkit " } ,
{ " minelayer " , " 4mines " , " 6mines " } ,
{ " crklr " , " 3arcp " , " 2arcp " , " xbow1 " , " xbow2 " } ,
{ " junkpack " , " 12nails " , " crphmr " , " loadingframe " } ,
{ " z9000 " , " 3pls " , " 2pls " , " stnbtn " } ,
{ " sling " , " xbow1 " , " xbow2 " , " 2sgcp " , " 3sgcp " }
2014-10-02 08:49:54 +08:00
}
GM.BossZombies = CreateConVar ( " zs_bosszombies " , " 1 " , FCVAR_ARCHIVE + FCVAR_NOTIFY , " Summon a boss zombie in the middle of each wave break. " ) : GetBool ( )
cvars.AddChangeCallback ( " zs_bosszombies " , function ( cvar , oldvalue , newvalue )
GAMEMODE.BossZombies = tonumber ( newvalue ) == 1
end )
GM.OutnumberedHealthBonus = CreateConVar ( " zs_outnumberedhealthbonus " , " 4 " , FCVAR_ARCHIVE + FCVAR_NOTIFY , " Give zombies some extra maximum health if there are less than or equal to this many zombies. 0 to disable. " ) : GetInt ( )
cvars.AddChangeCallback ( " zs_outnumberedhealthbonus " , function ( cvar , oldvalue , newvalue )
GAMEMODE.OutnumberedHealthBonus = tonumber ( newvalue ) or 0
end )
GM.PantsMode = CreateConVar ( " zs_pantsmode " , " 0 " , FCVAR_ARCHIVE + FCVAR_NOTIFY , " Only the dead can know peace from this evil. " ) : GetBool ( )
cvars.AddChangeCallback ( " zs_pantsmode " , function ( cvar , oldvalue , newvalue )
GAMEMODE : SetPantsMode ( tonumber ( newvalue ) == 1 )
end )
GM.ClassicMode = CreateConVar ( " zs_classicmode " , " 0 " , FCVAR_ARCHIVE + FCVAR_NOTIFY , " No nails, no class selection, final destination. " ) : GetBool ( )
cvars.AddChangeCallback ( " zs_classicmode " , function ( cvar , oldvalue , newvalue )
GAMEMODE : SetClassicMode ( tonumber ( newvalue ) == 1 )
end )
GM.BabyMode = CreateConVar ( " zs_babymode " , " 0 " , FCVAR_ARCHIVE + FCVAR_NOTIFY , " Babby mode. " ) : GetBool ( )
cvars.AddChangeCallback ( " zs_babymode " , function ( cvar , oldvalue , newvalue )
GAMEMODE : SetBabyMode ( tonumber ( newvalue ) == 1 )
end )
GM.EndWaveHealthBonus = CreateConVar ( " zs_endwavehealthbonus " , " 0 " , FCVAR_ARCHIVE + FCVAR_NOTIFY , " Humans will get this much health after every wave. 0 to disable. " ) : GetInt ( )
cvars.AddChangeCallback ( " zs_endwavehealthbonus " , function ( cvar , oldvalue , newvalue )
GAMEMODE.EndWaveHealthBonus = tonumber ( newvalue ) or 0
end )
GM.GibLifeTime = CreateConVar ( " zs_giblifetime " , " 25 " , FCVAR_ARCHIVE , " Specifies how many seconds player gibs will stay in the world if not eaten or destroyed. " ) : GetFloat ( )
cvars.AddChangeCallback ( " zs_giblifetime " , function ( cvar , oldvalue , newvalue )
GAMEMODE.GibLifeTime = tonumber ( newvalue ) or 1
end )
GM.GriefForgiveness = math.ceil ( 100 * CreateConVar ( " zs_grief_forgiveness " , " 0.5 " , FCVAR_ARCHIVE + FCVAR_NOTIFY , " Scales the damage given to griefable objects by this amount. Does not actually prevent damage, it only decides how much of a penalty to give the player. Use smaller values for more forgiving, larger for less forgiving. " ) : GetFloat ( ) ) * 0.01
cvars.AddChangeCallback ( " zs_grief_forgiveness " , function ( cvar , oldvalue , newvalue )
GAMEMODE.GriefForgiveness = math.ceil ( 100 * ( tonumber ( newvalue ) or 1 ) ) * 0.01
end )
GM.GriefStrict = CreateConVar ( " zs_grief_strict " , " 1 " , FCVAR_ARCHIVE + FCVAR_NOTIFY , " Anti-griefing system. Gives points and eventually health penalties to humans who destroy friendly barricades. " ) : GetBool ( )
cvars.AddChangeCallback ( " zs_grief_strict " , function ( cvar , oldvalue , newvalue )
GAMEMODE.GriefStrict = tonumber ( newvalue ) == 1
end )
GM.GriefMinimumHealth = CreateConVar ( " zs_grief_minimumhealth " , " 100 " , FCVAR_ARCHIVE + FCVAR_NOTIFY , " The minimum health for an object to be considered griefable. " ) : GetInt ( )
cvars.AddChangeCallback ( " zs_grief_minimumhealth " , function ( cvar , oldvalue , newvalue )
GAMEMODE.GriefMinimumHealth = tonumber ( newvalue ) or 100
end )
GM.GriefDamageMultiplier = math.ceil ( 100 * CreateConVar ( " zs_grief_damagemultiplier " , " 0.5 " , FCVAR_ARCHIVE + FCVAR_NOTIFY , " Multiplies damage done to griefable objects from humans by this amount. " ) : GetFloat ( ) ) * 0.01
cvars.AddChangeCallback ( " zs_grief_damagemultiplier " , function ( cvar , oldvalue , newvalue )
GAMEMODE.GriefDamageMultiplier = math.ceil ( 100 * ( tonumber ( newvalue ) or 0.5 ) ) * 0.01
end )
GM.GriefReflectThreshold = CreateConVar ( " zs_grief_reflectthreshold " , " -5 " , FCVAR_ARCHIVE + FCVAR_NOTIFY , " Start giving damage if the player has less than this many points. " ) : GetInt ( )
cvars.AddChangeCallback ( " zs_grief_reflectthreshold " , function ( cvar , oldvalue , newvalue )
GAMEMODE.GriefReflectThreshold = tonumber ( newvalue ) or - 5
end )
GM.MaxPropsInBarricade = CreateConVar ( " zs_maxpropsinbarricade " , " 8 " , FCVAR_ARCHIVE + FCVAR_NOTIFY , " Limits the amount of props that can be in one 'contraption' of nails. " ) : GetInt ( )
cvars.AddChangeCallback ( " zs_maxpropsinbarricade " , function ( cvar , oldvalue , newvalue )
GAMEMODE.MaxPropsInBarricade = tonumber ( newvalue ) or 8
end )
2018-05-02 06:32:59 +08:00
GM.MaxDroppedItems = 48 --[[CreateConVar("zs_maxdroppeditems", "48", FCVAR_ARCHIVE + FCVAR_NOTIFY, "Maximum amount of dropped items. Prevents spam or lag when lots of people die."):GetInt()
2014-10-02 08:49:54 +08:00
cvars.AddChangeCallback ( " zs_maxdroppeditems " , function ( cvar , oldvalue , newvalue )
2018-05-02 06:32:59 +08:00
GAMEMODE.MaxDroppedItems = tonumber ( newvalue ) or 48
end ) ] ]
2014-10-02 08:49:54 +08:00
GM.NailHealthPerRepair = CreateConVar ( " zs_nailhealthperrepair " , " 10 " , FCVAR_ARCHIVE + FCVAR_NOTIFY , " How much health a nail gets when being repaired. " ) : GetInt ( )
cvars.AddChangeCallback ( " zs_nailhealthperrepair " , function ( cvar , oldvalue , newvalue )
GAMEMODE.NailHealthPerRepair = tonumber ( newvalue ) or 1
end )
GM.NoPropDamageFromHumanMelee = CreateConVar ( " zs_nopropdamagefromhumanmelee " , " 1 " , FCVAR_ARCHIVE + FCVAR_NOTIFY , " Melee from humans doesn't damage props. " ) : GetBool ( )
cvars.AddChangeCallback ( " zs_nopropdamagefromhumanmelee " , function ( cvar , oldvalue , newvalue )
GAMEMODE.NoPropDamageFromHumanMelee = tonumber ( newvalue ) == 1
end )
2018-05-02 06:32:59 +08:00
GM.MedkitPointsPerHealth = 8 --[[CreateConVar("zs_medkitpointsperhealth", "8", FCVAR_ARCHIVE + FCVAR_NOTIFY, "Specifies the amount of healing for players to be given a point. For use with the medkit and such."):GetInt()
2014-10-02 08:49:54 +08:00
cvars.AddChangeCallback ( " zs_medkitpointsperhealth " , function ( cvar , oldvalue , newvalue )
GAMEMODE.MedkitPointsPerHealth = tonumber ( newvalue ) or 1
2018-05-02 06:32:59 +08:00
end ) ] ]
2014-10-02 08:49:54 +08:00
2018-05-02 06:32:59 +08:00
GM.RepairPointsPerHealth = CreateConVar ( " zs_repairpointsperhealth " , " 35 " , FCVAR_ARCHIVE + FCVAR_NOTIFY , " Specifies the amount of repairing for players to be given a point. For use with nails and such. " ) : GetInt ( )
2014-10-02 08:49:54 +08:00
cvars.AddChangeCallback ( " zs_repairpointsperhealth " , function ( cvar , oldvalue , newvalue )
GAMEMODE.RepairPointsPerHealth = tonumber ( newvalue ) or 1
end )
local function GetMostKey ( key , top )
top = top or 0
local toppl
for _ , pl in pairs ( player.GetAll ( ) ) do
if pl [ key ] and pl [ key ] > top then
top = pl [ key ]
toppl = pl
end
end
if toppl and top > 0 then
return toppl , top
end
end
local function GetMostFunc ( func , top )
top = top or 0
local toppl
for _ , pl in pairs ( player.GetAll ( ) ) do
local amount = pl [ func ] ( pl )
if amount > top then
top = amount
toppl = pl
end
end
if toppl and top > 0 then
return toppl , top
end
end
GM.HonorableMentions [ HM_MOSTZOMBIESKILLED ] . GetPlayer = function ( self )
return GetMostKey ( " ZombiesKilled " )
end
GM.HonorableMentions [ HM_MOSTBRAINSEATEN ] . GetPlayer = function ( self )
return GetMostKey ( " BrainsEaten " )
end
2018-05-02 06:32:59 +08:00
GM.HonorableMentions [ HM_MOSTHEADSHOTS ] . GetPlayer = function ( self )
return GetMostKey ( " Headshots " )
end
2014-10-02 08:49:54 +08:00
GM.HonorableMentions [ HM_SCARECROW ] . GetPlayer = function ( self )
return GetMostKey ( " CrowKills " )
end
2018-05-02 06:32:59 +08:00
GM.HonorableMentions [ HM_DEFENCEDMG ] . GetPlayer = function ( self )
return GetMostKey ( " DefenceDamage " )
2014-10-02 08:49:54 +08:00
end
2018-05-02 06:32:59 +08:00
GM.HonorableMentions [ HM_STRENGTHDMG ] . GetPlayer = function ( self )
return GetMostKey ( " StrengthBoostDamage " )
2014-10-02 08:49:54 +08:00
end
GM.HonorableMentions [ HM_BARRICADEDESTROYER ] . GetPlayer = function ( self )
return GetMostKey ( " BarricadeDamage " )
end
GM.HonorableMentions [ HM_HANDYMAN ] . GetPlayer = function ( self )
local pl , amount = GetMostKey ( " RepairedThisRound " )
if pl and amount then
return pl , math.ceil ( amount )
end
end
GM.HonorableMentions [ HM_LASTHUMAN ] . GetPlayer = function ( self )
if self.TheLastHuman and self.TheLastHuman : IsValid ( ) then return self.TheLastHuman end
end
GM.HonorableMentions [ HM_MOSTHELPFUL ] . GetPlayer = function ( self )
return GetMostKey ( " ZombiesKilledAssists " )
end
GM.HonorableMentions [ HM_GOODDOCTOR ] . GetPlayer = function ( self )
return GetMostKey ( " HealedThisRound " )
end
GM.HonorableMentions [ HM_MOSTDAMAGETOUNDEAD ] . GetPlayer = function ( self )
local top = 0
local toppl
for _ , pl in pairs ( player.GetAll ( ) ) do
if pl.DamageDealt and pl.DamageDealt [ TEAM_HUMAN ] > top then
top = pl.DamageDealt [ TEAM_HUMAN ]
toppl = pl
end
end
if toppl and top >= 1 then
return toppl , math.ceil ( top )
end
end
GM.HonorableMentions [ HM_MOSTDAMAGETOHUMANS ] . GetPlayer = function ( self )
local top = 0
local toppl
for _ , pl in pairs ( player.GetAll ( ) ) do
if pl.DamageDealt and pl.DamageDealt [ TEAM_UNDEAD ] > top then
top = pl.DamageDealt [ TEAM_UNDEAD ]
toppl = pl
end
end
if toppl and top >= 1 then
return toppl , math.ceil ( top )
end
end
GM.HonorableMentions [ HM_LASTBITE ] . GetPlayer = function ( self )
if LAST_BITE and LAST_BITE : IsValid ( ) then
return LAST_BITE
end
end
GM.HonorableMentions [ HM_USEFULTOOPPOSITE ] . GetPlayer = function ( self )
local pl , mag = GetMostFunc ( " Deaths " )
if mag and mag >= 30 then
return pl , mag
end
end
GM.HonorableMentions [ HM_PACIFIST ] . GetPlayer = function ( self )
if WINNER == TEAM_HUMAN then
for _ , pl in pairs ( player.GetAll ( ) ) do
if pl.ZombiesKilled == 0 and pl : Team ( ) == TEAM_HUMAN then return pl end
end
end
end
GM.HonorableMentions [ HM_STUPID ] . GetPlayer = function ( self )
local dist = 99999
local finalpl
for _ , pl in pairs ( player.GetAll ( ) ) do
if pl.ZombieSpawnDeathDistance and pl.ZombieSpawnDeathDistance < dist then
finalpl = pl
dist = pl.ZombieSpawnDeathDistance
end
end
if finalpl and dist <= 1000 then
return finalpl , math.ceil ( dist / 12 )
end
end
GM.HonorableMentions [ HM_OUTLANDER ] . GetPlayer = function ( self )
local dist = 0
local finalpl
for _ , pl in pairs ( player.GetAll ( ) ) do
if pl.ZombieSpawnDeathDistance and dist < pl.ZombieSpawnDeathDistance then
finalpl = pl
dist = pl.ZombieSpawnDeathDistance
end
end
if finalpl and 8000 <= dist then
return finalpl , math.ceil ( dist / 12 )
end
end
GM.HonorableMentions [ HM_SALESMAN ] . GetPlayer = function ( self )
return GetMostKey ( " PointsCommission " )
end
GM.HonorableMentions [ HM_WAREHOUSE ] . GetPlayer = function ( self )
return GetMostKey ( " ResupplyBoxUsedByOthers " )
end
GM.HonorableMentions [ HM_NESTDESTROYER ] . GetPlayer = function ( self )
return GetMostKey ( " NestsDestroyed " )
end
GM.HonorableMentions [ HM_NESTMASTER ] . GetPlayer = function ( self )
return GetMostKey ( " NestSpawns " )
end