From 015b17d7bac0141a7f961f1cd5e7a54c0acff104 Mon Sep 17 00:00:00 2001 From: z411 Date: Mon, 7 Sep 2020 02:10:02 -0300 Subject: [PATCH] Fixed Freeze Tag non-respawn behavior (weapons/ammo) --- .../gamemode/freezetag/sv_freezetag.qc | 2 + qcsrc/server/client.qc | 58 ++++++++++--------- 2 files changed, 34 insertions(+), 26 deletions(-) diff --git a/qcsrc/common/gamemodes/gamemode/freezetag/sv_freezetag.qc b/qcsrc/common/gamemodes/gamemode/freezetag/sv_freezetag.qc index 02a34c800..82bf8f682 100644 --- a/qcsrc/common/gamemodes/gamemode/freezetag/sv_freezetag.qc +++ b/qcsrc/common/gamemodes/gamemode/freezetag/sv_freezetag.qc @@ -446,6 +446,8 @@ MUTATOR_HOOKFUNCTION(ft, reset_map_players) if(autocvar_g_freezetag_round_respawn) { it.freezetag_frozen_timeout = -1; PutClientInServer(it); + } else { + ResetPlayerResources(it); } it.freezetag_frozen_timeout = 0; diff --git a/qcsrc/server/client.qc b/qcsrc/server/client.qc index e4a6e72a6..d1ac2b8dd 100644 --- a/qcsrc/server/client.qc +++ b/qcsrc/server/client.qc @@ -532,6 +532,36 @@ void FixPlayermodel(entity player) setcolor(player, stof(autocvar_sv_defaultplayercolors)); } +void ResetPlayerResources(entity this) +{ + if (warmup_stage) { + SetResource(this, RES_SHELLS, warmup_start_ammo_shells); + SetResource(this, RES_BULLETS, warmup_start_ammo_nails); + SetResource(this, RES_ROCKETS, warmup_start_ammo_rockets); + SetResource(this, RES_CELLS, warmup_start_ammo_cells); + SetResource(this, RES_PLASMA, warmup_start_ammo_plasma); + SetResource(this, RES_FUEL, warmup_start_ammo_fuel); + SetResource(this, RES_HEALTH, warmup_start_health); + SetResource(this, RES_ARMOR, warmup_start_armorvalue); + STAT(WEAPONS, this) = WARMUP_START_WEAPONS; + } else { + SetResource(this, RES_SHELLS, start_ammo_shells); + SetResource(this, RES_BULLETS, start_ammo_nails); + SetResource(this, RES_ROCKETS, start_ammo_rockets); + SetResource(this, RES_CELLS, start_ammo_cells); + SetResource(this, RES_PLASMA, start_ammo_plasma); + SetResource(this, RES_FUEL, start_ammo_fuel); + SetResource(this, RES_HEALTH, start_health); + SetResource(this, RES_ARMOR, start_armorvalue); + STAT(WEAPONS, this) = start_weapons; + if (MUTATOR_CALLHOOK(ForbidRandomStartWeapons, this) == false) + { + GiveRandomWeapons(this, random_start_weapons_count, + autocvar_g_random_start_weapons, random_start_ammo); + } + } +} + void PutPlayerInServer(entity this) { if (this.vehicle) vehicles_exit(this.vehicle, VHEF_RELEASE); @@ -571,32 +601,8 @@ void PutPlayerInServer(entity this) this.takedamage = DAMAGE_AIM; this.effects = EF_TELEPORT_BIT | EF_RESTARTANIM_BIT; - if (warmup_stage) { - SetResource(this, RES_SHELLS, warmup_start_ammo_shells); - SetResource(this, RES_BULLETS, warmup_start_ammo_nails); - SetResource(this, RES_ROCKETS, warmup_start_ammo_rockets); - SetResource(this, RES_CELLS, warmup_start_ammo_cells); - SetResource(this, RES_PLASMA, warmup_start_ammo_plasma); - SetResource(this, RES_FUEL, warmup_start_ammo_fuel); - SetResource(this, RES_HEALTH, warmup_start_health); - SetResource(this, RES_ARMOR, warmup_start_armorvalue); - STAT(WEAPONS, this) = WARMUP_START_WEAPONS; - } else { - SetResource(this, RES_SHELLS, start_ammo_shells); - SetResource(this, RES_BULLETS, start_ammo_nails); - SetResource(this, RES_ROCKETS, start_ammo_rockets); - SetResource(this, RES_CELLS, start_ammo_cells); - SetResource(this, RES_PLASMA, start_ammo_plasma); - SetResource(this, RES_FUEL, start_ammo_fuel); - SetResource(this, RES_HEALTH, start_health); - SetResource(this, RES_ARMOR, start_armorvalue); - STAT(WEAPONS, this) = start_weapons; - if (MUTATOR_CALLHOOK(ForbidRandomStartWeapons, this) == false) - { - GiveRandomWeapons(this, random_start_weapons_count, - autocvar_g_random_start_weapons, random_start_ammo); - } - } + ResetPlayerResources(this); + SetSpectatee_status(this, 0); PS(this).dual_weapons = '0 0 0'; -- 2.39.2