From 8455a1a231f287752089926cc3d7e5b742a63221 Mon Sep 17 00:00:00 2001 From: jenz Date: Sun, 25 Feb 2024 19:33:13 +0100 Subject: [PATCH] major update so that boss rounds also can feature minion zombies that dont count towards winning the round --- ZombieRiot/configs/unloze_zr/classeshuman.txt | 72 ++++ ZombieRiot/configs/unloze_zr/classeszm.txt | 251 +++++++------ ZombieRiot/configs/unloze_zr/daystitle.txt | 3 +- ZombieRiot/configs/unloze_zr/wavesettings.txt | 127 +++++-- ZombieRiot/scripting/unloze_zr.sp | 354 ++++++++++++------ 5 files changed, 536 insertions(+), 271 deletions(-) diff --git a/ZombieRiot/configs/unloze_zr/classeshuman.txt b/ZombieRiot/configs/unloze_zr/classeshuman.txt index 4cc76bcd..573394d5 100644 --- a/ZombieRiot/configs/unloze_zr/classeshuman.txt +++ b/ZombieRiot/configs/unloze_zr/classeshuman.txt @@ -14,6 +14,7 @@ "jump_height" "1.02" "jump_distance" "1.0" "damage_multiplier" "1.0" + "boss_class" "0" } "blades" @@ -30,6 +31,7 @@ "jump_height" "1.02" "jump_distance" "1.0" "damage_multiplier" "1.0" + "boss_class" "0" } "clown" @@ -46,6 +48,7 @@ "jump_height" "1.02" "jump_distance" "1.0" "damage_multiplier" "1.0" + "boss_class" "0" } "knight" @@ -62,5 +65,74 @@ "jump_height" "1.02" "jump_distance" "1.0" "damage_multiplier" "1.0" + "boss_class" "0" + } + + "t_arctic" + { + "unique name" "public skin terrorist arctic" + "team" "Human" + "group" " " + "sm_flags" " " + "model path" "models/player/t_arctic.mdl" + "no_fall_damage" "NO" + "health" "100" + "speed" "1" + "knockback" "1.0" + "jump_height" "1.02" + "jump_distance" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" + } + + "t_guerilla" + { + "unique name" "public skin terrorist guerilla" + "team" "Human" + "group" " " + "sm_flags" " " + "model path" "models/player/t_guerilla.mdl" + "no_fall_damage" "NO" + "health" "100" + "speed" "1" + "knockback" "1.0" + "jump_height" "1.02" + "jump_distance" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" + } + + "t_leet" + { + "unique name" "public skin terrorist leet" + "team" "Human" + "group" " " + "sm_flags" " " + "model path" "models/player/t_leet.mdl" + "no_fall_damage" "NO" + "health" "100" + "speed" "1" + "knockback" "1.0" + "jump_height" "1.02" + "jump_distance" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" + } + + "t_phoenix" + { + "unique name" "public skin terrorist pheonix" + "team" "Human" + "group" " " + "sm_flags" " " + "model path" "models/player/t_phoenix.mdl" + "no_fall_damage" "NO" + "health" "100" + "speed" "1" + "knockback" "1.0" + "jump_height" "1.02" + "jump_distance" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } } diff --git a/ZombieRiot/configs/unloze_zr/classeszm.txt b/ZombieRiot/configs/unloze_zr/classeszm.txt index 1919b981..720ebe88 100644 --- a/ZombieRiot/configs/unloze_zr/classeszm.txt +++ b/ZombieRiot/configs/unloze_zr/classeszm.txt @@ -10,10 +10,11 @@ "no_fall_damage" "YES" "health" "40" "speed" "1" - "knockback" "2.0" + "knockback" "1.0" "jump_height" "1.1" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "zombie2" { @@ -25,10 +26,11 @@ "no_fall_damage" "YES" "health" "50" "speed" "1" - "knockback" "2.0" + "knockback" "1.0" "jump_height" "1.1" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "zombie3" { @@ -39,11 +41,12 @@ "model path" "models/player/zh/zh_corpse002.mdl" "no_fall_damage" "YES" "health" "60" - "speed" "0.5" - "knockback" "2.0" + "speed" "1" + "knockback" "1.0" "jump_height" "1.1" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "biohazard" { @@ -55,10 +58,11 @@ "no_fall_damage" "YES" "health" "125" "speed" "1" - "knockback" "2.0" + "knockback" "1.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "fatty" { @@ -68,12 +72,13 @@ "sm_flags" " " "model path" "models/player/elis/fty/fatty.mdl" "no_fall_damage" "YES" - "health" "800" - "speed" "0.7" - "knockback" "2.0" + "health" "500" + "speed" "0.8" + "knockback" "1.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "verdugo" { @@ -84,11 +89,12 @@ "model path" "models/player/elis/vd/verdugo.mdl" "no_fall_damage" "YES" "health" "150" - "speed" "2" - "knockback" "2.0" + "speed" "1.6" + "knockback" "1.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "spitter" { @@ -99,11 +105,12 @@ "model path" "models/player/kuristaja/l4d2/spitter/spitter.mdl" "no_fall_damage" "YES" "health" "125" - "speed" "2" - "knockback" "2.0" + "speed" "1.4" + "knockback" "1.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "pil_fast_v5" { @@ -114,11 +121,12 @@ "model path" "models/player/pil/fast_v5/pil_fast_v5.mdl" "no_fall_damage" "YES" "health" "150" - "speed" "2.5" - "knockback" "2.0" + "speed" "1.4" + "knockback" "1.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "tyrant_pil" { @@ -128,12 +136,13 @@ "sm_flags" " " "model path" "models/player/pil/re1/proto_tyrant/tyrant_pil.mdl" "no_fall_damage" "YES" - "health" "700" + "health" "500" "speed" "1" - "knockback" "2.0" + "knockback" "1.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "nemesis_pil" { @@ -145,10 +154,11 @@ "no_fall_damage" "YES" "health" "800" "speed" "1" - "knockback" "2.0" + "knockback" "1.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "majini" { @@ -159,11 +169,12 @@ "model path" "models/player/slow/amberlyn/re5/tentacle_crap_majini/slow.mdl" "no_fall_damage" "YES" "health" "70" - "speed" "3" - "knockback" "2.0" + "speed" "1.4" + "knockback" "1.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "uroboro" { @@ -174,11 +185,12 @@ "model path" "models/player/slow/amberlyn/re5/uroboro/slow_public.mdl" "no_fall_damage" "YES" "health" "75" - "speed" "3" - "knockback" "2.0" + "speed" "1.4" + "knockback" "1.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "babycrab" { @@ -189,11 +201,12 @@ "model path" "models/player/slow/babycrab_v2/slow_babycrab.mdl" "no_fall_damage" "YES" "health" "50" - "speed" "3" - "knockback" "2.0" + "speed" "1.3" + "knockback" "1.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "berserker" { @@ -203,12 +216,13 @@ "sm_flags" " " "model path" "models/player/slow/berserkerin/slow_big.mdl" "no_fall_damage" "YES" - "health" "250" - "speed" "2.5" - "knockback" "2.0" + "health" "2500" + "speed" "1" + "knockback" "0.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "1" } "hellknight" { @@ -219,11 +233,12 @@ "model path" "models/player/ics/hellknight_red/t_guerilla.mdl" "no_fall_damage" "YES" "health" "250" - "speed" "2.5" - "knockback" "2.0" + "speed" "1.4" + "knockback" "1.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "centurion" { @@ -234,11 +249,12 @@ "model path" "models/player/slow/centurion/slow_centurion.mdl" "no_fall_damage" "YES" "health" "150" - "speed" "1.5" - "knockback" "2.0" + "speed" "1.2" + "knockback" "1.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "kahn" { @@ -249,11 +265,12 @@ "model path" "models/player/slow/jamis/mkvsdcu/dark_kahn/slow_pub.mdl" "no_fall_damage" "YES" "health" "3000" - "speed" "2.5" - "knockback" "2.0" + "speed" "1.1" + "knockback" "0.0" "jump_height" "1.5" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "1" } "chucky" { @@ -264,11 +281,12 @@ "model path" "models/player/slow/chucky_v3/slow.mdl" "no_fall_damage" "YES" "health" "60" - "speed" "2.4" - "knockback" "2.0" + "speed" "1.4" + "knockback" "1.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "krall" { @@ -279,11 +297,12 @@ "model path" "models/player/slow/krall/slow.mdl" "no_fall_damage" "YES" "health" "4000" - "speed" "2" - "knockback" "2.0" + "speed" "1.1" + "knockback" "0.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "1" } "strong" { @@ -294,11 +313,12 @@ "model path" "models/player/slow/bloodsucker_pack/slow_strong.mdl" "no_fall_damage" "YES" "health" "150" - "speed" "2" - "knockback" "2.0" + "speed" "1.6" + "knockback" "1.0" "jump_height" "1.5" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "gigantev2" { @@ -309,11 +329,12 @@ "model path" "models/player/slow/gigante/slow_gigante.mdl" "no_fall_damage" "YES" "health" "10000" - "speed" "2.5" - "knockback" "2.0" + "speed" "1.2" + "knockback" "0.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "10.0" + "damage_multiplier" "1.5" + "boss_class" "1" } "alienv1" { @@ -324,11 +345,12 @@ "model path" "models/player/slow/aliendrone/slow_alien.mdl" "no_fall_damage" "YES" "health" "125" - "speed" "2.5" - "knockback" "2.0" + "speed" "1.5" + "knockback" "1.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "witch" { @@ -339,11 +361,12 @@ "model path" "models/player/techknow/left4dead/witch.mdl" "no_fall_damage" "YES" "health" "120" - "speed" "2" - "knockback" "2.0" + "speed" "1.2" + "knockback" "1.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "bosspider" { @@ -354,11 +377,12 @@ "model path" "models/player/slow/monster_spider/slow.mdl" "no_fall_damage" "YES" "health" "2500" - "speed" "2" - "knockback" "2.0" + "speed" "1.2" + "knockback" "0.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "4.0" + "damage_multiplier" "1.5" + "boss_class" "1" } "hunter" { @@ -369,11 +393,12 @@ "model path" "models/player/techknow/left4dead/hunter.mdl" "no_fall_damage" "YES" "health" "100" - "speed" "3" - "knockback" "2.0" + "speed" "1.5" + "knockback" "1.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "doge" { @@ -384,11 +409,12 @@ "model path" "models/player/slow/amberlyn/zombie_dog/slow_2.mdl" "no_fall_damage" "YES" "health" "55" - "speed" "2.8" - "knockback" "2.0" + "speed" "1.5" + "knockback" "1.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "balrog" { @@ -399,11 +425,12 @@ "model path" "models/player/slow/amberlyn/lotr/balrog/slow.mdl" "no_fall_damage" "YES" "health" "12000" - "speed" "3" - "knockback" "2.0" + "speed" "1.1" + "knockback" "0.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "5000.0" + "damage_multiplier" "1.5" + "boss_class" "1" } "raam" { @@ -414,11 +441,12 @@ "model path" "models/player/slow/general_raam/slow.mdl" "no_fall_damage" "YES" "health" "2700" - "speed" "2" - "knockback" "2.0" + "speed" "1" + "knockback" "1.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "1" } "abaddon" { @@ -429,11 +457,12 @@ "model path" "models/player/unloze_zr/abaddon.mdl" "no_fall_damage" "YES" "health" "300" - "speed" "1.8" - "knockback" "2.0" + "speed" "1.2" + "knockback" "1.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "servo_skull" { @@ -444,11 +473,12 @@ "model path" "models/player/kodua/servo_skull/servo_skull.mdl" "no_fall_damage" "YES" "health" "15" - "speed" "4" - "knockback" "2.0" + "speed" "1.2" + "knockback" "1.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "bahamut" { @@ -459,11 +489,12 @@ "model path" "models/player/unloze_zr/bahamut.mdl" "no_fall_damage" "YES" "health" "6000" - "speed" "2.5" - "knockback" "2.0" + "speed" "1.2" + "knockback" "0.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.5" + "boss_class" "1" } "uberevil" { @@ -474,11 +505,12 @@ "model path" "models/player/unloze_zr/uberevil.mdl" "no_fall_damage" "YES" "health" "140" - "speed" "1.8" - "knockback" "2.0" + "speed" "1.2" + "knockback" "1.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "alien_spider" { @@ -489,11 +521,12 @@ "model path" "models/player/unloze_zr/alien_spider.mdl" "no_fall_damage" "YES" "health" "140" - "speed" "1.8" - "knockback" "2.0" + "speed" "1.2" + "knockback" "1.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "akasha" { @@ -504,11 +537,12 @@ "model path" "models/player/unloze_zr/akasha.mdl" "no_fall_damage" "YES" "health" "300" - "speed" "2" - "knockback" "2.0" + "speed" "1.2" + "knockback" "0.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } "theron_guard" { @@ -519,11 +553,12 @@ "model path" "models/player/unloze_zr/theron_guard.mdl" "no_fall_damage" "YES" "health" "2900" - "speed" "2.4" - "knockback" "2.0" + "speed" "1.1" + "knockback" "0.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "1" } "antlion" { @@ -531,14 +566,14 @@ "team" "ZM" "group" " " "sm_flags" " " - "model path" "models/player/techknow/antlion.mdl" + "model path" "models/player/techknow/antlion/antlion.mdl" "no_fall_damage" "YES" "health" "200" - "speed" "2" - "knockback" "2.0" + "speed" "1.1" + "knockback" "1.0" "jump_height" "1.4" "jump_distance" "1.0" - "damage_multiplier" "1.0" + "damage_multiplier" "1.0" + "boss_class" "0" } } - diff --git a/ZombieRiot/configs/unloze_zr/daystitle.txt b/ZombieRiot/configs/unloze_zr/daystitle.txt index 4bf01619..85e98695 100644 --- a/ZombieRiot/configs/unloze_zr/daystitle.txt +++ b/ZombieRiot/configs/unloze_zr/daystitle.txt @@ -15,9 +15,8 @@ Left 4 Doge BOSS - Krall and Kahn come back Invaders vs Akasha MINI BOSS - Spiders Party -Cyborg Skull BOSS - Raam vs Theron -Nightmares +BOSS RUSH! Armageddon BOSS - Bahamut BOSS - El Gigante diff --git a/ZombieRiot/configs/unloze_zr/wavesettings.txt b/ZombieRiot/configs/unloze_zr/wavesettings.txt index 8de4974c..b53efad3 100644 --- a/ZombieRiot/configs/unloze_zr/wavesettings.txt +++ b/ZombieRiot/configs/unloze_zr/wavesettings.txt @@ -4,6 +4,11 @@ // "bot_static" if you use bot_scaling 0 the plugin will instead use the value given in bot_static to spawn a static amount of bots into the game. // if bot_scaling is not 0 it will always pick bot_scaling and just ignore bot_static. + +// on boss rounds bot_static is used for deciding the amount of bots that will be bosses. +// on boss rounds bot_scaling is used for deciding the amount of bots that will be minions. +// on boss rounds the minion bots do not count towards zombie count, so they can be killed infinite amount of times. + // // "PlayerScaleAbility" // Multiplied by the zombie count, the amount of needed kills to add @@ -85,10 +90,13 @@ "HealthScaleAbility" "0.000000" "Zombie Count" "5" "Respawns" "99" - "bot_scaling" "5" - "bot_static" "0" + "bot_scaling" "5" //on boss round bot_scaling is for minion bots. minion bots dont count towards Zombie Count + "bot_static" "2" //on boss round bot_static is for boss bots "wavecommand" " " "Zombie Class" "berserker" + "Zombie Class" "zombie1" + "Zombie Class" "zombie2" + "Zombie Class" "zombie3" "Human Class" "@all" } // Starkiller @@ -142,11 +150,14 @@ "HealthScaleAbility" "0.000000" "Zombie Count" "5" "Respawns" "99" - "bot_scaling" "0" - "bot_static" "3" + "bot_scaling" "5" //on boss round bot_scaling is for minion bots. minion bots dont count towards Zombie Count + "bot_static" "3" //on boss round bot_static is for boss bots "wavecommand" " " "Zombie Class" "kahn" "Zombie Class" "krall" + "Zombie Class" "zombie1" + "Zombie Class" "zombie2" + "Zombie Class" "zombie3" "Human Class" "@all" } // Mix of Madness @@ -238,11 +249,14 @@ "HealthScaleAbility" "0.000000" "Zombie Count" "5" "Respawns" "99" - "bot_scaling" "0" - "bot_static" "3" + "bot_scaling" "5" //on boss round bot_scaling is for minion bots. minion bots dont count towards Zombie Count + "bot_static" "3" //on boss round bot_static is for boss bots "wavecommand" " " "Zombie Class" "krall" "Zombie Class" "kahn" + "Zombie Class" "zombie1" + "Zombie Class" "zombie2" + "Zombie Class" "zombie3" "Human Class" "@all" } // Invaders vs Akasha @@ -267,10 +281,13 @@ "HealthScaleAbility" "0.000000" "Zombie Count" "16" "Respawns" "99" - "bot_scaling" "5" - "bot_static" "0" + "bot_scaling" "5" //on boss round bot_scaling is for minion bots. minion bots dont count towards Zombie Count + "bot_static" "5" //on boss round bot_static is for boss bots "wavecommand" " " "Zombie Class" "bosspider" + "Zombie Class" "zombie1" + "Zombie Class" "zombie2" + "Zombie Class" "zombie3" "Human Class" "@all" } // BOSS - Raam vs Theron @@ -280,40 +297,35 @@ "HealthScaleAbility" "0.000000" "Zombie Count" "10" "Respawns" "99" - "bot_scaling" "0" - "bot_static" "3" + "bot_scaling" "5" //on boss round bot_scaling is for minion bots. minion bots dont count towards Zombie Count + "bot_static" "3" //on boss round bot_static is for boss bots "wavecommand" " " "Zombie Class" "raam" "Zombie Class" "theron_guard" + "Zombie Class" "zombie1" + "Zombie Class" "zombie2" + "Zombie Class" "zombie3" "Human Class" "@all" } - // Nightmares + // BOSS RUSH! "Wave 19" { - "PlayerScaleAbility" "0.1" - "HealthScaleAbility" "0.100000" - "Zombie Count" "225" + "PlayerScaleAbility" "0" + "HealthScaleAbility" "0.500000" + "Zombie Count" "6" "Respawns" "99" - "bot_scaling" "16" - "bot_static" "0" + "bot_scaling" "5" //on boss round bot_scaling is for minion bots. minion bots dont count towards Zombie Count + "bot_static" "1" //on boss round bot_static is for boss bots "wavecommand" " " - "Zombie Class" "strong" - "Zombie Class" "verdugo" - "Zombie Class" "hunter" - "Zombie Class" "witch" - "Zombie Class" "doge" - "Zombie Class" "babycrab" - "Zombie Class" "abaddon" - "Zombie Class" "alienv1" - "Zombie Class" "chucky" - "Zombie Class" "servo_skull" - "Zombie Class" "pil_fast_v5" - "Zombie Class" "hellknight" - "Zombie Class" "akasha" - "Zombie Class" "nemesis_pil" - "Zombie Class" "tyrant_pil" - "Zombie Class" "alien_spider" - "Zombie Class" "antlion" + "Zombie Class" "berserker" + "Zombie Class" "krall" + "Zombie Class" "kahn" + "Zombie Class" "theron_guard" + "Zombie Class" "raam" + "Zombie Class" "bosspider" + "Zombie Class" "zombie1" + "Zombie Class" "zombie2" + "Zombie Class" "zombie3" "Human Class" "@all" } // Armageddon @@ -358,12 +370,23 @@ { "PlayerScaleAbility" "0" "HealthScaleAbility" "0.500000" - "Zombie Count" "3" + "Zombie Count" "5" "Respawns" "99" - "bot_scaling" "0" - "bot_static" "3" + "bot_scaling" "5" //on boss round bot_scaling is for minion bots. minion bots dont count towards Zombie Count + "bot_static" "3" //on boss round bot_static is for boss bots "wavecommand" " " "Zombie Class" "bahamut" + "Zombie Class" "majini" + "Zombie Class" "uroboro" + "Zombie Class" "babycrab" + "Zombie Class" "chucky" + "Zombie Class" "fatty" + "Zombie Class" "tyrant_pil" + "Zombie Class" "hellknight" + "Zombie Class" "doge" + "Zombie Class" "hunter" + "Zombie Class" "witch" + "Zombie Class" "nemesis_pil" "Human Class" "@all" } // BOSS - El Gigante @@ -373,10 +396,21 @@ "HealthScaleAbility" "0.500000" "Zombie Count" "1" "Respawns" "99" - "bot_scaling" "0" - "bot_static" "1" + "bot_scaling" "5" //on boss round bot_scaling is for minion bots. minion bots dont count towards Zombie Count + "bot_static" "1" //on boss round bot_static is for boss bots "wavecommand" " " "Zombie Class" "gigantev2" + "Zombie Class" "majini" + "Zombie Class" "uroboro" + "Zombie Class" "babycrab" + "Zombie Class" "chucky" + "Zombie Class" "fatty" + "Zombie Class" "tyrant_pil" + "Zombie Class" "hellknight" + "Zombie Class" "doge" + "Zombie Class" "hunter" + "Zombie Class" "witch" + "Zombie Class" "nemesis_pil" "Human Class" "@all" } // FINAL BOSS - The Balrog @@ -384,12 +418,23 @@ { "PlayerScaleAbility" "0" "HealthScaleAbility" "0.500000" - "Zombie Count" "1" + "Zombie Count" "2" "Respawns" "99" - "bot_scaling" "0" - "bot_static" "1" + "bot_scaling" "5" //on boss round bot_scaling is for minion bots. minion bots dont count towards Zombie Count + "bot_static" "1" //on boss round bot_static is for boss bots "wavecommand" " " "Zombie Class" "balrog" + "Zombie Class" "majini" + "Zombie Class" "uroboro" + "Zombie Class" "babycrab" + "Zombie Class" "chucky" + "Zombie Class" "fatty" + "Zombie Class" "tyrant_pil" + "Zombie Class" "hellknight" + "Zombie Class" "doge" + "Zombie Class" "hunter" + "Zombie Class" "witch" + "Zombie Class" "nemesis_pil" "Human Class" "@all" } } diff --git a/ZombieRiot/scripting/unloze_zr.sp b/ZombieRiot/scripting/unloze_zr.sp index 2eb6ec81..0f1c6e11 100644 --- a/ZombieRiot/scripting/unloze_zr.sp +++ b/ZombieRiot/scripting/unloze_zr.sp @@ -69,6 +69,8 @@ int g_iBotStuckCounts; int g_iLoadClassesIndex; int g_iHumanCount; int g_iZombieCount; +int g_iZombieBossIndex[g_dIndexes]; +int g_iBossBotCount; float g_fKnockBackIndex[g_dIndexes + 1]; float g_fJumpHeightIndex[g_dIndexes + 1]; @@ -86,7 +88,8 @@ bool g_bSwitchingIndex; bool g_bRoundInProgress; bool g_bFallDamage[g_dIndexes]; bool g_bClientProtection[g_dIndexes]; - +bool g_bIsBossRound; +bool g_bClientIsBoss[MAXPLAYERS + 1]; Handle g_hClientZMCookie; Handle g_hClientHumanCookie; @@ -1061,6 +1064,7 @@ public void OnClientPostAdminCheck(int client) g_fJumpHeightIndex[client] = 1.0; g_fJumpDistanceIndex[client] = 1.0; g_fDamageMultiplier[client] = 1.0; + g_bClientIsBoss[client] = false; g_iClientRespawnCount[client] = g_iClientRespawnCountNum; char sCookieValue[12]; GetClientCookie(client, g_hClientZMCookie, sCookieValue, sizeof(sCookieValue)); @@ -1117,6 +1121,7 @@ public void OnClientDisconnect(int client) g_fJumpDistanceIndex[client] = 1.0; g_fDamageMultiplier[client] = 1.0; g_iClientRespawnCount[client] = 0; + g_bClientIsBoss[client] = false; SDKUnhook(client, SDKHook_OnTakeDamage, OnTakeDamage); SDKUnhook(client, SDKHook_WeaponEquip, OnWeaponEquip); } @@ -1129,7 +1134,24 @@ public void Event_roundStart(Handle event, const char[] name, bool dontBroadcast g_iZombieCount = 999; g_bRoundInProgress = false; g_bSwitchingIndex = true; + g_iBossBotCount = 0; CreateTimer(g_fSwitchingTimer, Timer_switchingModel, INVALID_HANDLE); + + if (g_hAmbient != null) + delete g_hAmbient; + if (StrContains(g_cDaysTitles[g_iWave - 1], "BOSS", false) != -1) //the daystitle contains the word boss in it + { + g_bIsBossRound = true; //boss rounds need BOSS in the title + EmitAmbience(g_cBossSound); //nobody will ever understand why megalovania was on the servers since 2020. + g_hAmbient = CreateTimer(g_fBossSoundLoopDuration, Timer_Ambient, INVALID_HANDLE, TIMER_REPEAT); // 0.3 seconds without sound + } + else + { + g_bIsBossRound = false; //boss rounds need BOSS in the title + int index = ambient_index(); + EmitAmbience(g_cAmbientSOund[index]); + g_hAmbient = CreateTimer(g_fAmbientSoundLoopDuration, Timer_Ambient, INVALID_HANDLE, TIMER_REPEAT); // 0.3 seconds without sound + } RetrieveWaveSettings(g_iWave); for (int i = 1; i <= MaxClients; i++) @@ -1138,6 +1160,7 @@ public void Event_roundStart(Handle event, const char[] name, bool dontBroadcast { if (IsFakeClient(i)) { + g_bClientIsBoss[i] = false; CreateTimer(0.3, Timer_delayedSelectWaveBasedZM, GetClientUserId(i)); continue; } @@ -1148,19 +1171,6 @@ public void Event_roundStart(Handle event, const char[] name, bool dontBroadcast } } } - if (g_hAmbient != null) - delete g_hAmbient; - if (StrContains(g_cDaysTitles[g_iWave - 1], "BOSS", false) != -1) //the daystitle contains the word boss in it - { - EmitAmbience(g_cBossSound); //nobody will ever understand why megalovania was on the servers since 2020. - g_hAmbient = CreateTimer(g_fBossSoundLoopDuration, Timer_Ambient, INVALID_HANDLE, TIMER_REPEAT); // 0.3 seconds without sound - } - else - { - int index = ambient_index(); - EmitAmbience(g_cAmbientSOund[index]); - g_hAmbient = CreateTimer(g_fAmbientSoundLoopDuration, Timer_Ambient, INVALID_HANDLE, TIMER_REPEAT); // 0.3 seconds without sound - } } public int ambient_index() @@ -1204,7 +1214,6 @@ public Action RetrieveWaveSettings(int wave) Format(hostname, sizeof(hostname), "UNLOZE | [ZRiot: Day %i/%i] %s | Ranking", wave, total_days, g_cDaysTitles[wave - 1]); ServerCommand("hostname \"%s\"", hostname); - PrintToChatAll("Day %i: %s", wave, g_cDaysTitles[wave - 1]); LoadWave(wave); delete l_hWave; @@ -1276,13 +1285,35 @@ public void LoadWave(int wave) g_iClientRespawnCountNum = kv.GetNum("Respawns", 5); l_iBotQuote = kv.GetNum("bot_scaling", 1); int l_iBotQuoteStatic = kv.GetNum("bot_static", 1); - if (l_iBotQuote == 0) //we use static bot amount instead + + l_iPlayers = 0; //counting legit players for bot scaling. + for (int i = 1; i < MaxClients; i++) { - SettingBotQoute(l_iBotQuoteStatic, true); + if (IsValidClient(i) && !IsFakeClient(i) && CS_TEAM_CT == GetClientTeam(i)) + { + l_iPlayers++; + } + } + + if (g_bIsBossRound) + { + //its boss round. bot_scaling is used for minion bots. bot_static is used for boss bot amount + // bot_static + bot_scaling + addBots(l_iBotQuoteStatic + (l_iPlayers * l_iBotQuote)); + g_iBossBotCount = l_iBotQuoteStatic; } else { - SettingBotQoute(l_iBotQuote, false); + //its not boss round. + if (l_iBotQuote == 0) //we use static bot amount instead of scaling bots based on playercount. + { + addBots(l_iBotQuoteStatic); + } + else + { + //we use bot_scaling. + addBots(l_iPlayers * l_iBotQuote); + } } while (!IsEndOfFile(l_hFile) && ReadFileLine(l_hFile, l_cLine, sizeof(l_cLine))) { @@ -1426,28 +1457,6 @@ public void LoadWave(int wave) //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- -public void SettingBotQoute(int botscale, bool bot_static) -{ - int l_iPlayers; - for (int i = 1; i < MaxClients; i++) - { - if (IsValidClient(i) && !IsFakeClient(i) && CS_TEAM_CT == GetClientTeam(i)) - { - l_iPlayers++; - } - } - if (bot_static) - { - addBots(botscale); - } - else - { - addBots(l_iPlayers * botscale); - } -} -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- public void addBots(int botcount) { if (botcount > 44) @@ -1472,70 +1481,75 @@ public bool skipIndex(int index) //---------------------------------------------------------------------------------------------------- public void ReadingClassValuesFromFile(int index, char[] Line) { - char li_c[g_dLength]; - Format(li_c, sizeof(li_c), Line); - if (StrContains(Line, "unique name") > -1) - { - ReplaceStrings(li_c, "unique name"); - Format(g_cUniqueName[index][g_iLength], sizeof(g_cUniqueName), li_c); - } - else if (StrContains(Line, "team") > -1) - { - ReplaceStrings(li_c, "team"); - Format(g_cTeam[index][g_iLength], sizeof(g_cTeam), li_c); - } - else if (StrContains(Line, "group") > -1) - { - ReplaceStrings(li_c, "group"); - Format(g_cGroup[index][g_iLength], sizeof(g_cGroup), li_c); - } - else if (StrContains(Line, "sm_flags") > -1) - { - ReplaceStrings(li_c, "sm_flags"); - Format(g_cSMFLAGS[index][g_iLength], sizeof(g_cSMFLAGS), li_c); - } - else if (StrContains(Line, "model path") > -1) - { - ReplaceStrings(li_c, "model path"); - Format(g_cModelPath[index][g_iLength], sizeof(g_cModelPath), li_c); - PrecacheModel(li_c); - } - else if (StrContains(Line, "no_fall_damage") > -1) - { - ReplaceStrings(li_c, "no_fall_damage"); - Format(g_cNoFallDmg[index][g_iLength], sizeof(g_cNoFallDmg), li_c); - } - else if (StrContains(Line, "health") > -1) - { - ReplaceStrings(li_c, "health"); - Format(g_cHealth[index][g_iLength], sizeof(g_cHealth), li_c); - } - else if (StrContains(Line, "speed") > -1) - { - ReplaceStrings(li_c, "speed"); - Format(g_cSpeed[index][g_iLength], sizeof(g_cSpeed), li_c); - } - else if (StrContains(Line, "knockback") > -1) - { - ReplaceStrings(li_c, "knockback"); - Format(g_cKnockback[index][g_iLength], sizeof(g_cKnockback), li_c); - } - else if (StrContains(Line, "jump_height") > -1) - { - ReplaceStrings(li_c, "jump_height"); - Format(g_cJumpHeight[index][g_iLength], sizeof(g_cJumpHeight), li_c); - } - else if (StrContains(Line, "jump_distance") > -1) - { - ReplaceStrings(li_c, "jump_distance"); - Format(g_cJumpDistance[index][g_iLength], sizeof(g_cJumpDistance), li_c); - } - else if (StrContains(Line, "damage_multiplier") > -1) - { - ReplaceStrings(li_c, "damage_multiplier"); - Format(g_cDamageMultiplier[index][g_iLength], sizeof(g_cDamageMultiplier), li_c); - g_iLoadClassesIndex++; - } + char li_c[g_dLength]; + Format(li_c, sizeof(li_c), Line); + if (StrContains(Line, "unique name") > -1) + { + ReplaceStrings(li_c, "unique name"); + Format(g_cUniqueName[index][g_iLength], sizeof(g_cUniqueName), li_c); + } + else if (StrContains(Line, "team") > -1) + { + ReplaceStrings(li_c, "team"); + Format(g_cTeam[index][g_iLength], sizeof(g_cTeam), li_c); + } + else if (StrContains(Line, "group") > -1) + { + ReplaceStrings(li_c, "group"); + Format(g_cGroup[index][g_iLength], sizeof(g_cGroup), li_c); + } + else if (StrContains(Line, "sm_flags") > -1) + { + ReplaceStrings(li_c, "sm_flags"); + Format(g_cSMFLAGS[index][g_iLength], sizeof(g_cSMFLAGS), li_c); + } + else if (StrContains(Line, "model path") > -1) + { + ReplaceStrings(li_c, "model path"); + Format(g_cModelPath[index][g_iLength], sizeof(g_cModelPath), li_c); + PrecacheModel(li_c); + } + else if (StrContains(Line, "no_fall_damage") > -1) + { + ReplaceStrings(li_c, "no_fall_damage"); + Format(g_cNoFallDmg[index][g_iLength], sizeof(g_cNoFallDmg), li_c); + } + else if (StrContains(Line, "health") > -1) + { + ReplaceStrings(li_c, "health"); + Format(g_cHealth[index][g_iLength], sizeof(g_cHealth), li_c); + } + else if (StrContains(Line, "speed") > -1) + { + ReplaceStrings(li_c, "speed"); + Format(g_cSpeed[index][g_iLength], sizeof(g_cSpeed), li_c); + } + else if (StrContains(Line, "knockback") > -1) + { + ReplaceStrings(li_c, "knockback"); + Format(g_cKnockback[index][g_iLength], sizeof(g_cKnockback), li_c); + } + else if (StrContains(Line, "jump_height") > -1) + { + ReplaceStrings(li_c, "jump_height"); + Format(g_cJumpHeight[index][g_iLength], sizeof(g_cJumpHeight), li_c); + } + else if (StrContains(Line, "jump_distance") > -1) + { + ReplaceStrings(li_c, "jump_distance"); + Format(g_cJumpDistance[index][g_iLength], sizeof(g_cJumpDistance), li_c); + } + else if (StrContains(Line, "damage_multiplier") > -1) + { + ReplaceStrings(li_c, "damage_multiplier"); + Format(g_cDamageMultiplier[index][g_iLength], sizeof(g_cDamageMultiplier), li_c); + } + else if (StrContains(Line, "boss_class") > -1) + { + ReplaceStrings(li_c, "boss_class"); + g_iZombieBossIndex[index] = StringToInt(li_c); + g_iLoadClassesIndex++; //use this at the last keyvalue to indicate we are done. + } } //---------------------------------------------------------------------------------------------------- // Purpose: @@ -1595,26 +1609,111 @@ public Action SelectWaveBasedZM(int client, int state) if (state == 0) { - for (int i = 0; i < g_dIndexes; i++) + if (g_bIsBossRound && g_iBossBotCount > 0 && !g_bClientIsBoss[client]) //does not work setting on roundstart. so instead doing when applying ZM skin. { - if (strlen(g_cZMRoundClasses[i][g_iLength]) > 0 && strlen(g_cGroup[i][g_iLength]) < 1 && strlen(g_cSMFLAGS[i][g_iLength]) < 1) + g_bClientIsBoss[client] = true; + g_iBossBotCount--; //picking certain bots as the boss bots. all other bots are the minions. + } + + if (g_bIsBossRound) + { + if (g_bClientIsBoss[client]) { - l_iZMIndex++; + //its boss round and we set class for a boss bot + for (int i = 0; i < g_dIndexes; i++) + { + if (strlen(g_cZMRoundClasses[i][g_iLength]) > 0 && strlen(g_cGroup[i][g_iLength]) < 1 && strlen(g_cSMFLAGS[i][g_iLength]) < 1 + && g_iZombieBossIndex[i]) + { + l_iZMIndex++; //we set amount of boss classes that the boss bot can pick between. + } + } + + l_ibotIndex = GetRandomInt(0, l_iZMIndex -1); + l_iZMIndex = 0; + + for (int i = 0; i < g_dIndexes; i++) + { + if (strlen(g_cZMRoundClasses[i][g_iLength]) > 0 && strlen(g_cGroup[i][g_iLength]) < 1 && strlen(g_cSMFLAGS[i][g_iLength]) < 1) + { + if (!g_iZombieBossIndex[i]) + { + continue; + } + else if (l_ibotIndex == l_iZMIndex) + { + g_iClientZMClasses[client] = i; + break; + } + else + { + l_iZMIndex++; + } + } + } + } + else + { + //its boss round and we set class for a minion bot + for (int i = 0; i < g_dIndexes; i++) + { + if (strlen(g_cZMRoundClasses[i][g_iLength]) > 0 && strlen(g_cGroup[i][g_iLength]) < 1 && strlen(g_cSMFLAGS[i][g_iLength]) < 1 + && !g_iZombieBossIndex[i]) + { + l_iZMIndex++; //we set amount of normal zombie classes the minion bot can pick between. skipping out the boss classes. + } + } + + l_ibotIndex = GetRandomInt(0, l_iZMIndex -1); + l_iZMIndex = 0; + for (int i = 0; i < g_dIndexes; i++) + { + if (strlen(g_cZMRoundClasses[i][g_iLength]) > 0 && strlen(g_cGroup[i][g_iLength]) < 1 && strlen(g_cSMFLAGS[i][g_iLength]) < 1) + { + if (g_iZombieBossIndex[i]) + { + continue; + } + else if (l_ibotIndex == l_iZMIndex) + { + g_iClientZMClasses[client] = i; + break; + } + else + { + l_iZMIndex++; + } + } + } } } - l_ibotIndex = GetRandomInt(0, l_iZMIndex -1); - l_iZMIndex = 0; - for (int i = 0; i < g_dIndexes; i++) + else { - if (strlen(g_cZMRoundClasses[i][g_iLength]) > 0 && strlen(g_cGroup[i][g_iLength]) < 1 && strlen(g_cSMFLAGS[i][g_iLength]) < 1) + //its normal round. just setting the classes randomly. + for (int i = 0; i < g_dIndexes; i++) { - if (l_ibotIndex == l_iZMIndex) + if (strlen(g_cZMRoundClasses[i][g_iLength]) > 0 && strlen(g_cGroup[i][g_iLength]) < 1 && strlen(g_cSMFLAGS[i][g_iLength]) < 1) { - g_iClientZMClasses[client] = i; - break; + l_iZMIndex++; //here we get to know what the last index is, that way the randomint can pick between index 0 and last index for ZM classes. + } + } + + l_ibotIndex = GetRandomInt(0, l_iZMIndex -1); + l_iZMIndex = 0; + for (int i = 0; i < g_dIndexes; i++) + { + if (strlen(g_cZMRoundClasses[i][g_iLength]) > 0 && strlen(g_cGroup[i][g_iLength]) < 1 && strlen(g_cSMFLAGS[i][g_iLength]) < 1) + { + if (l_ibotIndex == l_iZMIndex) + { + g_iClientZMClasses[client] = i; + break; + } + else + { + l_iZMIndex++; + } } - else - l_iZMIndex++; } } } @@ -1942,10 +2041,25 @@ public Action UpdateWaveCount(int client) } } } - g_iZMCount--; - PrintHintTextToAll("Day %i: %s\nRemaining Zombies: %i\nHumans: %i\nZombies: %i", g_iWave, g_cDaysTitles[g_iWave - 1], g_iZMCount, humanCount, zombieCount); - g_iHumanCount = humanCount; - g_iZombieCount = zombieCount; + if (g_bIsBossRound) + { + //we only reduce zombie count if the killed bot had a boss zombie class. + //if the killed bot instead had a zombie class of a minion we do not reduce the zombie count. + if (g_bClientIsBoss[client]) + { + g_iZMCount--; + PrintHintTextToAll("Day %i: %s\nRemaining Zombies: %i\nHumans: %i\nZombies: %i", g_iWave, g_cDaysTitles[g_iWave - 1], g_iZMCount, humanCount, zombieCount); + g_iHumanCount = humanCount; + g_iZombieCount = zombieCount; + } + } + else + { + g_iZMCount--; + PrintHintTextToAll("Day %i: %s\nRemaining Zombies: %i\nHumans: %i\nZombies: %i", g_iWave, g_cDaysTitles[g_iWave - 1], g_iZMCount, humanCount, zombieCount); + g_iHumanCount = humanCount; + g_iZombieCount = zombieCount; + } } if (g_iZMCount <= 0 && g_bRoundInProgress) {