]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/monsters/sv_monsters.qc
Use a spawnflag to check if the monster has re-spawned
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / monsters / sv_monsters.qc
index 8176dee3df1f59ab75052c1b7981786159e10895..28a78ceb87f4ddd8123e8cc72fef483ccfbc14d0 100644 (file)
@@ -361,7 +361,7 @@ void Monster_Fade ()
 {
        if(Monster_CanRespawn(self))
        {
-               self.monster_respawned = TRUE;
+               self.spawnflags |= MONSTERFLAG_RESPAWNED;
                self.think = self.monster_spawnfunc;
                self.nextthink = time + self.respawntime;
                self.ltime = 0;
@@ -379,7 +379,16 @@ void Monster_Fade ()
                setmodel(self, "null");
        }
        else
+       {
+               // number of monsters spawned with mobspawn command
+               totalspawned -= 1;
+
+               if(IS_CLIENT(self.realowner))
+               if(!(self.spawnflags & MONSTERFLAG_RESPAWNED))
+                               self.realowner.monstercount -= 1;
+
                SUB_SetFade(self, time + 3, 1);
+       }
 }
 
 float Monster_CanJump (vector vel)
@@ -798,7 +807,7 @@ void monsters_corpse_damage (entity inflictor, entity attacker, float damage, fl
                Violence_GibSplash_At(hitloc, force, 2, bound(0, damage, 200) / 16, self, attacker);
 
                if(IS_CLIENT(self.realowner))
-               if(!self.monster_respawned)
+               if(!(self.spawnflags & MONSTERFLAG_RESPAWNED))
                        self.realowner.monstercount -= 1;
 
                self.think = SUB_Remove;
@@ -822,21 +831,20 @@ void monster_die(entity attacker, float gibbed)
 
        MonsterSound(monstersound_death, 0, FALSE, CH_VOICE);
 
-       if(!(self.spawnflags & MONSTERFLAG_SPAWNED) && !self.monster_respawned)
+       if(!(self.spawnflags & MONSTERFLAG_SPAWNED) && !(self.spawnflags & MONSTERFLAG_RESPAWNED))
                monsters_killed += 1;
 
        if(IS_PLAYER(attacker))
-       if( autocvar_g_monsters_score_spawned ||
-                       ( !(self.spawnflags & MONSTERFLAG_SPAWNED) && !self.monster_respawned) )
+       if(autocvar_g_monsters_score_spawned || !((self.spawnflags & MONSTERFLAG_SPAWNED) || (self.spawnflags & MONSTERFLAG_RESPAWNED)))
                PlayerScore_Add(attacker, SP_SCORE, +autocvar_g_monsters_score_kill);
 
-       if(!Monster_CanRespawn(self) || gibbed)
+       if(!Monster_CanRespawn(self) && gibbed)
        {
                // number of monsters spawned with mobspawn command
                totalspawned -= 1;
 
                if(IS_CLIENT(self.realowner))
-               if(!self.monster_respawned)
+               if(!(self.spawnflags & MONSTERFLAG_RESPAWNED))
                        self.realowner.monstercount -= 1;
        }
 
@@ -973,7 +981,7 @@ float monster_spawn()
 {
        MON_ACTION(self.monsterid, MR_SETUP);
 
-       if(!self.monster_respawned)
+       if(!(self.spawnflags & MONSTERFLAG_RESPAWNED))
        {
                Monster_CheckMinibossFlag();
                self.health *= Monster_SkillModifier();
@@ -985,7 +993,7 @@ float monster_spawn()
        if(IS_PLAYER(self.monster_owner))
                self.effects |= EF_DIMLIGHT;
 
-       if(!self.monster_respawned)
+       if(!(self.spawnflags & MONSTERFLAG_RESPAWNED))
        if(!self.skin)
                self.skin = rint(random() * 4);
 
@@ -1032,7 +1040,7 @@ float monster_initialize(float mon_id, float nodrop)
                self.team = 0;
 
        if(!(self.spawnflags & MONSTERFLAG_SPAWNED)) // naturally spawned monster
-       if(!self.monster_respawned)
+       if(!(self.spawnflags & MONSTERFLAG_RESPAWNED))
                monsters_total += 1;
 
        setmodel(self, mon.model);
@@ -1115,7 +1123,7 @@ float monster_initialize(float mon_id, float nodrop)
        if(!monster_spawn())
                return FALSE;
 
-       if(!self.monster_respawned)
+       if(!(self.spawnflags & MONSTERFLAG_RESPAWNED))
                monster_setupcolors();
 
        CSQCMODEL_AUTOINIT();