]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/gamemodes/gamemode/lms/sv_lms.qc
Add API to handle in-game status for game modes that temporarily turn players into...
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / gamemodes / gamemode / lms / sv_lms.qc
index 51a352a67095f911e0fbe5e4b401fc5b2cf985a7..76a565016498955304efaf66f1d90dc5090906a1 100644 (file)
@@ -134,7 +134,7 @@ MUTATOR_HOOKFUNCTION(lms, reset_map_players)
                }
 
                CS(it).killcount = 0;
-               it.lmsplayer = 0;
+               INGAME_STATUS_CLEAR(it);
                it.lms_spectate_warning = 0;
                GameRules_scoring_add(it, LMS_RANK, -GameRules_scoring_add(it, LMS_RANK, 0));
                GameRules_scoring_add(it, LMS_LIVES, -GameRules_scoring_add(it, LMS_LIVES, 0));
@@ -158,12 +158,12 @@ MUTATOR_HOOKFUNCTION(lms, ReadLevelCvars)
 // returns true if player is added to the game
 bool lms_AddPlayer(entity player)
 {
-       if (!player.lmsplayer)
+       if (!INGAME(player))
        {
                int lives = GameRules_scoring_add(player, LMS_LIVES, LMS_NewPlayerLives());
                if(lives <= 0)
                        return false;
-               player.lmsplayer = 2; // temp value indicating player has just joined the game (but not spawned yet)
+               INGAME_STATUS_SET(player, INGAME_STATUS_JOINING); // this is just to delay setting health and armor that can't be done here
        }
        if (warmup_stage || time <= game_starttime)
        {
@@ -204,7 +204,7 @@ MUTATOR_HOOKFUNCTION(lms, PlayerSpawn)
        if (warmup_stage || time < game_starttime)
                return true;
 
-       if (player.lmsplayer == 2) // just joined the game
+       if (INGAME_JOINING(player))
        {
                // spawn player with the same amount of health / armor
                // as the least healthy player with the least number of lives
@@ -221,7 +221,7 @@ MUTATOR_HOOKFUNCTION(lms, PlayerSpawn)
                        SetResource(player, RES_HEALTH, max(1, min_health));
                if (min_armorvalue != start_armorvalue)
                        SetResource(player, RES_ARMOR, min_armorvalue);
-               player.lmsplayer = 1;
+               INGAME_STATUS_SET(player, INGAME_STATUS_JOINED);
        }
 }
 
@@ -266,7 +266,7 @@ void lms_RemovePlayer(entity player)
                        });
                        GameRules_scoring_add(player, LMS_RANK, pl_cnt + 1);
                }
-               else if (player.lmsplayer)
+               else if (INGAME(player))
                {
                        int min_forfeiter_rank = 665; // different from 666
                        FOREACH_CLIENT(it != player, {
@@ -311,7 +311,7 @@ MUTATOR_HOOKFUNCTION(lms, ClientDisconnect)
        player.lms_spectate_warning = 3;
 
        lms_RemovePlayer(player);
-       player.lmsplayer = 0;
+       INGAME_STATUS_CLEAR(player);
 }
 
 MUTATOR_HOOKFUNCTION(lms, MakePlayerObserver)
@@ -327,7 +327,7 @@ MUTATOR_HOOKFUNCTION(lms, MakePlayerObserver)
                GameRules_scoring_add(player, LMS_LIVES, -GameRules_scoring_add(player, LMS_LIVES, 0));
                player.frags = FRAGS_SPECTATOR;
                TRANSMUTE(Observer, player);
-               player.lmsplayer = 0;
+               INGAME_STATUS_CLEAR(player);
        }
        else
        {
@@ -474,7 +474,7 @@ MUTATOR_HOOKFUNCTION(lms, ItemTouch)
 MUTATOR_HOOKFUNCTION(lms, Bot_FixCount, CBC_ORDER_EXCLUSIVE)
 {
        FOREACH_CLIENT(IS_REAL_CLIENT(it), {
-               if (it.lmsplayer && it.lms_spectate_warning < 2)
+               if (INGAME(it) && it.lms_spectate_warning < 2)
                        ++M_ARGV(0, int); // activerealplayers
                ++M_ARGV(1, int); // realplayers
        });
@@ -515,13 +515,6 @@ MUTATOR_HOOKFUNCTION(lms, SetWeaponArena)
                M_ARGV(0, string) = autocvar_g_lms_weaponarena;
 }
 
-MUTATOR_HOOKFUNCTION(lms, GetPlayerStatus)
-{
-       entity player = M_ARGV(0, entity);
-
-       return boolean(player.lmsplayer);
-}
-
 MUTATOR_HOOKFUNCTION(lms, AddPlayerScore)
 {
        if(game_stopped)