From 5492a8a5bbac7129d5c0c7b3bf04438553b375f3 Mon Sep 17 00:00:00 2001 From: Resxt <55228336+Resxt@users.noreply.github.com> Date: Sat, 3 Sep 2022 00:49:39 +0200 Subject: [PATCH] Added all_or_nothing.gsc --- gamemodes/README.md | 5 ++ gamemodes/all_or_nothing.gsc | 106 +++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 gamemodes/README.md create mode 100644 gamemodes/all_or_nothing.gsc diff --git a/gamemodes/README.md b/gamemodes/README.md new file mode 100644 index 0000000..047496a --- /dev/null +++ b/gamemodes/README.md @@ -0,0 +1,5 @@ +# Gamemodes + +## all_or_nothing.gsc +Recreation of the Modern Warfare 3 All or Nothing gamemode based on [the wiki](https://callofduty.fandom.com/wiki/All_or_Nothing_(Game_Mode)#Call_of_Duty:_Modern_Warfare_3). +Sadly the scavenger killstreak doesn't work for bots since for some reason the `giveLoadout()` function in `ReplaceKillstreaks()` causes an infinite loop that crashes the game \ No newline at end of file diff --git a/gamemodes/all_or_nothing.gsc b/gamemodes/all_or_nothing.gsc new file mode 100644 index 0000000..0da69e2 --- /dev/null +++ b/gamemodes/all_or_nothing.gsc @@ -0,0 +1,106 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_class; + +Init() +{ + SetGameLimits(); + + level thread OnPlayerConnect(); +} + +OnPlayerConnect() +{ + for(;;) + { + level waittill("connected", player); + + player thread OnPlayerSpawned(); + } +} + +OnPlayerSpawned() +{ + self endon("disconnect"); + + for(;;) + { + self waittill("changed_kit"); + + self thread ReplaceKillstreaks(); + self thread ReplacePerks(); + self thread ReplaceWeapons("iw5_usp45_mp_tactical"); + } +} + +SetGameLimits() +{ + kills_limit = 20; + score_multiplier = 0; + + switch(level.gameType) + { + case "dm": + score_multiplier = 50; + break; + case "war": + score_multiplier = 100; + break; + default: + score_multiplier = 50; + break; + } + + SetDvar("scr_" + level.gameType + "_scorelimit", kills_limit * score_multiplier); + SetDvar("scorelimit", kills_limit * score_multiplier); +} + +ReplaceWeapons(new_weapon) +{ + self TakeAllWeapons(); + self GiveWeapon(new_weapon); + self GiveWeapon("throwingknife_mp"); + + self setweaponammoclip( new_weapon, 0 ); + self setweaponammostock( new_weapon, 0 ); + + self SetSpawnWeapon(new_weapon); +} + +ReplaceWeaponBot(new_weapon) +{ + self TakeAllWeapons(); + self GiveWeapon(new_weapon); + self SetSpawnWeapon(new_weapon); // This gives the weapon without playing the animation +} + +ReplacePerks() +{ + self ClearPerks(); + + self GivePerk("specialty_fastreload", 0) // Sleight of hand + self GivePerk("specialty_longersprint", 0);// Extreme conditioning + self GivePerk("specialty_fastmantle", 0); // Extreme condition PRO + + self GivePerk("specialty_hardline", 0); // Hardline + + self GivePerk("specialty_stalker", 0); // Stalker + self GivePerk("specialty_falldamage", 0); // Dead silence PRO +} + +ReplaceKillstreaks() +{ + self.pers["gamemodeLoadout"] = self cloneLoadout(); + self.pers["gamemodeLoadout"]["loadoutJuggernaut"] = false; + + self.pers["gamemodeLoadout"]["loadoutKillstreak1"] = "specialty_scavenger_ks"; + self.pers["gamemodeLoadout"]["loadoutKillstreak2"] = "none"; + self.pers["gamemodeLoadout"]["loadoutKillstreak3"] = "none"; + + if (!isDefined(self.pers["isBot"]) || !self.pers["isBot"]) + { + self maps\mp\gametypes\_class::giveLoadout(self.team, "gamemode", false, true); + } + + maps\mp\killstreaks\_killstreaks::clearKillstreaks(); +} \ No newline at end of file