285 lines
11 KiB
Lua
285 lines
11 KiB
Lua
|
-- Weapon sets that humans can start with if they choose RANDOM.
|
||
|
GM.StartLoadouts = {
|
||
|
{"pshtr", "3pcp", "2pcp", "csknf"},
|
||
|
{"btlax", "3pcp", "zpaxe", "stone"},
|
||
|
{"stbbr", "3rcp", "zpcpot", "stone"},
|
||
|
{"tossr", "3smgcp", "2smgcp", "zpplnk", "stone"},
|
||
|
{"blstr", "3sgcp", "2sgcp", "csknf"},
|
||
|
{"owens", "3pcp", "2pcp", "csknf"},
|
||
|
{"zpcpot", "medkit", "150mkit"},
|
||
|
{"crklr", "3arcp", "2arcp", "zpplnk", "stone"},
|
||
|
{"crphmr", "6nails", "hook"},
|
||
|
{"blstr", "pipe"}
|
||
|
}
|
||
|
|
||
|
|
||
|
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.BossZombiePlayersRequired = CreateConVar("zs_bosszombiethreshold", "10", FCVAR_ARCHIVE + FCVAR_NOTIFY, "Don't summon boss zombies if less than this amount of players. 0 to disable."):GetInt()
|
||
|
cvars.AddChangeCallback("zs_bosszombiethreshold", function(cvar, oldvalue, newvalue)
|
||
|
GAMEMODE.BossZombiePlayersRequired = tonumber(newvalue) or 0
|
||
|
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)
|
||
|
|
||
|
GM.MaxDroppedItems = CreateConVar("zs_maxdroppeditems", "32", FCVAR_ARCHIVE + FCVAR_NOTIFY, "Maximum amount of dropped items. Prevents spam or lag when lots of people die."):GetInt()
|
||
|
cvars.AddChangeCallback("zs_maxdroppeditems", function(cvar, oldvalue, newvalue)
|
||
|
GAMEMODE.MaxDroppedItems = tonumber(newvalue) or 32
|
||
|
end)
|
||
|
|
||
|
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)
|
||
|
|
||
|
GM.MedkitPointsPerHealth = CreateConVar("zs_medkitpointsperhealth", "5", FCVAR_ARCHIVE + FCVAR_NOTIFY, "Specifies the amount of healing for players to be given a point. For use with the medkit and such."):GetInt()
|
||
|
cvars.AddChangeCallback("zs_medkitpointsperhealth", function(cvar, oldvalue, newvalue)
|
||
|
GAMEMODE.MedkitPointsPerHealth = tonumber(newvalue) or 1
|
||
|
end)
|
||
|
|
||
|
GM.RepairPointsPerHealth = CreateConVar("zs_repairpointsperhealth", "30", FCVAR_ARCHIVE + FCVAR_NOTIFY, "Specifies the amount of repairing for players to be given a point. For use with nails and such."):GetInt()
|
||
|
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
|
||
|
|
||
|
GM.HonorableMentions[HM_SCARECROW].GetPlayer = function(self)
|
||
|
return GetMostKey("CrowKills")
|
||
|
end
|
||
|
|
||
|
GM.HonorableMentions[HM_CROWFIGHTER].GetPlayer = function(self)
|
||
|
return GetMostKey("CrowVsCrowKills")
|
||
|
end
|
||
|
|
||
|
GM.HonorableMentions[HM_CROWBARRICADEDAMAGE].GetPlayer = function(self)
|
||
|
return GetMostKey("CrowBarricadeDamage")
|
||
|
end
|
||
|
|
||
|
GM.HonorableMentions[HM_BARRICADEDESTROYER].GetPlayer = function(self)
|
||
|
return GetMostKey("BarricadeDamage")
|
||
|
end
|
||
|
|
||
|
GM.HonorableMentions[HM_SPAWNPOINT].GetPlayer = function(self)
|
||
|
return GetMostKey("DynamicSpawnedOn")
|
||
|
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
|