]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Fix client side monster still moving when dead. Attempt to fix target usage
authorMario <mario.mario@y7mail.com>
Sun, 14 Apr 2013 04:01:52 +0000 (14:01 +1000)
committerMario <mario.mario@y7mail.com>
Sun, 14 Apr 2013 04:01:52 +0000 (14:01 +1000)
13 files changed:
qcsrc/server/monsters/lib/monsters.qc
qcsrc/server/monsters/monster/demon.qc
qcsrc/server/monsters/monster/dog.qc
qcsrc/server/monsters/monster/fish.qc
qcsrc/server/monsters/monster/hknight.qc
qcsrc/server/monsters/monster/knight.qc
qcsrc/server/monsters/monster/ogre.qc
qcsrc/server/monsters/monster/shalrath.qc
qcsrc/server/monsters/monster/shambler.qc
qcsrc/server/monsters/monster/soldier.qc
qcsrc/server/monsters/monster/spider.qc
qcsrc/server/monsters/monster/wizard.qc
qcsrc/server/monsters/monster/zombie.qc

index 9c2bd3af3b8c4c48a4ef77cc4c8f7c5aa6398668..d4813cafde367351ff0f09776389519c413b53d8 100644 (file)
@@ -649,6 +649,20 @@ void monster_move(float runspeed, float walkspeed, float stopspeed, float manim_
        self.SendFlags |= MSF_MOVE;
 }
 
+void monster_dead_think()
+{
+       self.think = monster_dead_think;
+       self.nextthink = time + 0.3; // don't need to update so often now
+
+       if(time >= self.ltime)
+       {
+               Monster_Fade();
+               return;
+       }
+       
+       self.SendFlags |= MSF_MOVE; // keep up to date on the monster's location
+}
+
 void monsters_setstatus()
 {
        self.stat_monsters_total = monsters_total;
@@ -786,6 +800,8 @@ void monsters_corpse_damage (entity inflictor, entity attacker, float damage, fl
 
 void monsters_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
 {
+       string t1, t2;
+
        if(self.frozen && deathtype != DEATH_KILL)
                return;
                
@@ -831,11 +847,16 @@ void monsters_damage (entity inflictor, entity attacker, float damage, float dea
                if(deathtype == DEATH_KILL)
                        self.candrop = FALSE; // killed by mobkill command
                        
+               // TODO: fix this?
                activator = attacker;
                other = self.enemy;
+               t1 = self.target;
+               t2 = self.target2;
                self.target = self.target2;
                self.target2 = "";
                SUB_UseTargets();
+               self.target = t1;
+               self.target2 = t2;
        
                self.monster_die();
                
index ecf8c84188762e5a49de099d285915b61af68052..e1a0383d1348d579f4b19b6892187633df117928 100644 (file)
@@ -75,8 +75,9 @@ void demon_die ()
 {
        Monster_CheckDropCvars ("demon");
        
-       self.think = Monster_Fade;
-       self.nextthink = time + 5;
+       self.think = monster_dead_think;
+       self.nextthink = time + self.ticrate;
+       self.ltime = time + 5;
        monsters_setframe(demon_anim_death);
        
        monster_hook_death(); // for post-death mods
index 8a9b306efe1efa66303ca04e765f02ee30df5232..dcee7649a5d5d05db3050e9d69169b282ee49e65 100644 (file)
@@ -70,8 +70,9 @@ void dog_die ()
 {
        Monster_CheckDropCvars ("dog");
        
-       self.think = Monster_Fade;
-       self.nextthink = time + 5;
+       self.think = monster_dead_think;
+       self.nextthink = time + self.ticrate;
+       self.ltime = time + 5;
        monsters_setframe(dog_anim_die);
        
        monster_hook_death(); // for post-death mods
index 82cf6162aefd64d42b248e8fa6b47bff5aeae9e9..463315db5f4dda74e8893af6447daaf9323be46e 100644 (file)
@@ -42,8 +42,9 @@ void fish_die ()
 {
        Monster_CheckDropCvars ("fish");
        
-       self.think = Monster_Fade;
-       self.nextthink = time + 5;
+       self.think = monster_dead_think;
+       self.nextthink = time + self.ticrate;
+       self.ltime = time + 5;
        monsters_setframe(fish_anim_death);
        
        monster_hook_death(); // for post-death mods
index a916e60f616590171bf5828dc070340569c3da9e..4397efb2141e035e4e73f1922634473178fd0509 100644 (file)
@@ -403,8 +403,9 @@ void hellknight_die ()
        float chance = random();
        Monster_CheckDropCvars ("hellknight");
        
-       self.think = Monster_Fade;
-       self.nextthink = time + 5;
+       self.think = monster_dead_think;
+       self.nextthink = time + self.ticrate;
+       self.ltime = time + 5;
        monsters_setframe((random() > 0.5) ? hellknight_anim_death1 : hellknight_anim_death2);
        
        if(chance < 0.10 || self.flags & MONSTERFLAG_MINIBOSS)
index 48845d457ed627a76b761952ce4e65ffa95e8468..064b25207e021c9326049885d7ee4acdf80b9979 100644 (file)
@@ -52,8 +52,9 @@ void knight_die ()
 {
        Monster_CheckDropCvars ("knight");
        
-       self.think = Monster_Fade;
-       self.nextthink = time + 5;
+       self.think = monster_dead_think;
+       self.nextthink = time + self.ticrate;
+       self.ltime = time + 5;
        monsters_setframe((random() > 0.5) ? knight_anim_death1 : knight_anim_death2);
        
        monster_hook_death(); // for post-death mods
index ed947bb8b6fd6e6fae2dcd5d3601dfb8aef90b98..9faa798299b4448924ed0781ca337d94f17b8619 100644 (file)
@@ -218,8 +218,9 @@ void ogre_die()
 {
        Monster_CheckDropCvars ("ogre");
        
-       self.think = Monster_Fade;
-       self.nextthink = time + 5;
+       self.think = monster_dead_think;
+       self.nextthink = time + self.ticrate;
+       self.ltime = time + 5;
        monsters_setframe(ogre_anim_die);
                
        monster_hook_death(); // for post-death mods
index 4b836965c4ddda2791b324fffa9b672840c193cd..7f4554720dc41406e245b068325d02abb40fc363 100644 (file)
@@ -251,8 +251,9 @@ void shalrath_die ()
 {
        Monster_CheckDropCvars ("shalrath");
        
-       self.think = Monster_Fade;
-       self.nextthink = time + 5;
+       self.think = monster_dead_think;
+       self.nextthink = time + self.ticrate;
+       self.ltime = time + 5;
        monsters_setframe(shalrath_anim_death);
        
        monster_hook_death(); // for post-death mods
index 15b505b0314358fa66cc35c59a262021ed390515..44f1f9b998e5c64aee71a5d8f057d51d85ab6341 100644 (file)
@@ -143,8 +143,9 @@ void shambler_die ()
 {
        Monster_CheckDropCvars ("shambler");
        
-       self.think = Monster_Fade;
-       self.nextthink = time + 5;
+       self.think = monster_dead_think;
+       self.nextthink = time + self.ticrate;
+       self.ltime = time + 5;
        monsters_setframe(shambler_anim_death);
        
        monster_hook_death(); // for post-death mods
index 3d5819be5373797c67a4fde592f06852f21a675f..7c3727f6bf2276bc1a5fd76de2f9958970c86713 100644 (file)
@@ -301,8 +301,9 @@ void soldier_die()
 {
        Monster_CheckDropCvars ("soldier");
        
-       self.think = Monster_Fade;
-       self.nextthink = time + 5;
+       self.think = monster_dead_think;
+       self.nextthink = time + self.ticrate;
+       self.ltime = time + 5;
        monsters_setframe((random() > 0.5) ? soldier_anim_die1 : soldier_anim_die2);
                
        monster_hook_death(); // for post-death mods
index 62c968e1211ae8952692d1192cef81d7c56841a5..e94ecc71e5505976ebe6313ddbf6162e1425a83e 100644 (file)
@@ -180,8 +180,9 @@ void spider_die ()
 {
        Monster_CheckDropCvars ("spider");
        
-       self.think = Monster_Fade;
-       self.nextthink = time + 5;
+       self.think = monster_dead_think;
+       self.nextthink = time + self.ticrate;
+       self.ltime = time + 5;
        monsters_setframe(spider_anim_attack);
        self.angles += '180 0 0';
        
index b498009960e54e914d21fe1f70d07eb13f1affd6..c7aa9d4175a47b1070af8684307bc0e89526aba8 100644 (file)
@@ -101,27 +101,13 @@ void wizard_fastattack ()
        Wiz_StartFast();
 }
 
-void wizard_dead_think()
-{
-       self.think = wizard_dead_think;
-       self.nextthink = time + self.ticrate;
-
-       if(time >= self.ltime)
-       {
-               Monster_Fade();
-               return;
-       }
-       
-       self.SendFlags |= MSF_MOVE; // keep up to date on the monster's location
-}
-
 void wizard_die ()
 {
        Monster_CheckDropCvars ("wizard");
        
-       self.think                      = wizard_dead_think; // exception for wizard, as it needs to keep moving
-       self.ltime                      = time + 5;
-       self.nextthink          = time + self.ticrate;
+       self.think                      = monster_dead_think;
+       self.nextthink          = time + self.ticrate;
+       self.ltime                      = time + 5;
        self.velocity_x         = -200 + 400 * random();
        self.velocity_y         = -200 + 400 * random();
        self.velocity_z         = 100 + 100 * random();
index 99e38ab20f3af8630e8578455e365022564dcd87..3ac204405767861ffb1295fe71c42ed0e77896a0 100644 (file)
@@ -114,8 +114,9 @@ void zombie_die ()
 {
        Monster_CheckDropCvars ("zombie");
        
-       self.think = Monster_Fade;
-       self.nextthink = time + 5;
+       self.think = monster_dead_think;
+       self.nextthink = time + self.ticrate;
+       self.ltime = time + 5;
        monsters_setframe((random() > 0.5) ? zombie_anim_deathback1 : zombie_anim_deathfront1);
                
        monster_hook_death(); // for post-death mods