From: terencehill Date: Sat, 11 Sep 2021 22:07:15 +0000 (+0200) Subject: LMS: fix wrong health / armor assignment on respawn X-Git-Tag: xonotic-v0.8.5~350^2 X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=d5a49c395d42f9928c5bd6f3dd650596df636cc6 LMS: fix wrong health / armor assignment on respawn --- diff --git a/qcsrc/common/gamemodes/gamemode/lms/sv_lms.qc b/qcsrc/common/gamemodes/gamemode/lms/sv_lms.qc index 4c2fd6f5c4..e9ddb4e815 100644 --- a/qcsrc/common/gamemodes/gamemode/lms/sv_lms.qc +++ b/qcsrc/common/gamemodes/gamemode/lms/sv_lms.qc @@ -162,7 +162,7 @@ bool lms_AddPlayer(entity player) int lives = GameRules_scoring_add(player, LMS_LIVES, LMS_NewPlayerLives()); if(lives <= 0) return false; - player.lmsplayer = 1; + player.lmsplayer = 2; // temp value indicating player has just joined the game (but not spawned yet) } if (warmup_stage || time <= game_starttime) { @@ -203,19 +203,25 @@ MUTATOR_HOOKFUNCTION(lms, PlayerSpawn) if (warmup_stage || time < game_starttime) return true; - int pl_lives = GameRules_scoring_add(player, LMS_LIVES, 0); - float min_health = start_health; - float min_armorvalue = start_armorvalue; - FOREACH_CLIENT(it != player && IS_PLAYER(it) && !IS_DEAD(it) && GameRules_scoring_add(it, LMS_LIVES, 0) == pl_lives, { - if (GetResource(it, RES_HEALTH) < min_health) - min_health = GetResource(it, RES_HEALTH); - if (GetResource(it, RES_ARMOR) < min_armorvalue) - min_armorvalue = GetResource(it, RES_ARMOR); - }); - if (min_health != start_health) - SetResource(player, RES_HEALTH, max(1, min_health)); - if (min_armorvalue != start_armorvalue) - SetResource(player, RES_ARMOR, min_armorvalue); + if (player.lmsplayer == 2) // just joined the game + { + // spawn player with the same amount of health / armor + // as the least healthy player with the least number of lives + int pl_lives = GameRules_scoring_add(player, LMS_LIVES, 0); + float min_health = start_health; + float min_armorvalue = start_armorvalue; + FOREACH_CLIENT(it != player && IS_PLAYER(it) && !IS_DEAD(it) && GameRules_scoring_add(it, LMS_LIVES, 0) == pl_lives, { + if (GetResource(it, RES_HEALTH) < min_health) + min_health = GetResource(it, RES_HEALTH); + if (GetResource(it, RES_ARMOR) < min_armorvalue) + min_armorvalue = GetResource(it, RES_ARMOR); + }); + if (min_health != start_health) + SetResource(player, RES_HEALTH, max(1, min_health)); + if (min_armorvalue != start_armorvalue) + SetResource(player, RES_ARMOR, min_armorvalue); + player.lmsplayer = 1; + } } MUTATOR_HOOKFUNCTION(lms, ForbidSpawn)