]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Fix monster counting for mobspawn command
authorMario <mario.mario@y7mail.com>
Wed, 23 Jan 2013 09:24:41 +0000 (20:24 +1100)
committerMario <mario.mario@y7mail.com>
Wed, 23 Jan 2013 09:24:41 +0000 (20:24 +1100)
qcsrc/server/command/cmd.qc
qcsrc/server/command/sv_cmd.qc
qcsrc/server/monsters/lib/monsters.qc

index 007514983e00b8f401cc0ece8088d738a8595c85..02fcc32fd0688d06e5ae1c126e6fb8e22fdc02c5 100644 (file)
@@ -189,16 +189,18 @@ void ClientCommand_mobspawn(float request, float argc)
                case CMD_REQUEST_COMMAND:
                {
                        entity e;
-                       string tospawn, mname, s;
-                       float spawncount = 0, moveflag, max_global, max_perplayer, i;
+                       string tospawn, mname;
+                       float moveflag;
                        
-                       max_global = autocvar_g_monsters_max;
-                       max_perplayer = autocvar_g_monsters_max_perplayer;
-                       moveflag = (argv(3) ? stof(argv(3)) : 1); // follow owner if not defined
-                       spawncount = ((argv(2)) ? stof(argv(2)) : 1);
+                       moveflag = (argv(2) ? stof(argv(2)) : 1); // follow owner if not defined
                        tospawn = argv(1);
-                       mname = argv(4);
-                       s = ((spawncount == 1) ? "" : "s");
+                       mname = argv(3);
+                       
+                       if(tospawn == "help")
+                       {
+                               sprint(self, strcat(ftos(self.monstercount), " ", ftos(totalspawned), "\n"));
+                               return;
+                       }
                        
                        if(tospawn == "list")
                        {
@@ -207,26 +209,24 @@ void ClientCommand_mobspawn(float request, float argc)
                                return;
                        }
                        
-                       if(self.classname != STR_PLAYER) { sprint(self, "You can't spawn monsters while spectating.\n"); return; }
-                       else if(self.deadflag) { sprint(self, "You can't spawn monsters while dead.\n"); return; }
-                       else if(self.monstercount > max_perplayer) { sprint(self, "You have spawned too many monsters, kill some before trying to spawn any more.\n"); return; }
-                       else if(totalspawned > max_global) { sprint(self, "The global maximum monster count has been reached, kill some before trying to spawn any more.\n"); return; }
-                       else if(spawncount == 0) { sprint(self, "No monsters to spawn.\n"); return; }
+                       if(self.classname != STR_PLAYER) { sprint(self, "You can't spawn monsters while spectating.\n"); }
+                       else if(self.deadflag) { sprint(self, "You can't spawn monsters while dead.\n"); }
+                       else if(self.monstercount >= autocvar_g_monsters_max_perplayer) { sprint(self, "You have spawned too many monsters, kill some before trying to spawn any more.\n"); }
+                       else if(totalspawned >= autocvar_g_monsters_max) { sprint(self, "The global maximum monster count has been reached, kill some before trying to spawn any more.\n"); }
+                       else
+                       {
+                               // all worked out, so continue
+                               self.monstercount += 1;
+                               totalspawned += 1;
                        
-                       makevectors(self.v_angle);
-            WarpZone_TraceLine(self.origin + self.view_ofs, self.origin + self.view_ofs + v_forward * 100, MOVE_NORMAL, self);
+                               makevectors(self.v_angle);
+                               WarpZone_TraceLine(self.origin + self.view_ofs, self.origin + self.view_ofs + v_forward * 100, MOVE_NORMAL, self);
                        
-                       for(i = 0; i < spawncount; i++)
-                       {
-                               self.monstercount++;
-                               if(self.monstercount > max_perplayer) break; // FIXME: check for these properly
                                e = spawnmonster(tospawn, self, self, trace_endpos, FALSE, moveflag);
-                               if(e == world) { self.monstercount -= 1; break; } // take back the 1 that was lost
-                               if(mname != "") e.netname = mname;
-                               totalspawned++;
-                       }
+                               e.netname = mname;
                        
-                       sprint(self, sprintf("Spawned %d %s%s\n", spawncount, tospawn, s));
+                               sprint(self, sprintf("Spawned 1 %s\n", tospawn));
+                       }
                        
                        return;
                }
index 382c7de6127531afbd21de28b6174a623682daab..ad3fdbabbd36b8203edf048a8d566dc7425092aa 100644 (file)
@@ -147,18 +147,22 @@ void GameCommand_butcher(float request)
                {
             float removed_count = 0;
             totalspawned = 0;
-                       entity montokill = world;
+                       entity montokill, head;
             FOR_EACH_MONSTER(montokill)
             {
                 if(montokill.sprite)
                     WaypointSprite_Kill(montokill.sprite);
-                                       
-                               if(montokill.realowner.flags & FL_CLIENT)
-                                       montokill.realowner.monstercount -= 1;
                     
                 remove(montokill);
                 removed_count += 1;
             }
+                       
+                       FOR_EACH_PLAYER(head)
+                       {
+                               head.monstercount = 0;
+                       }
+                       totalspawned = 0;
+                       
                        if(removed_count <= 0)
                                print("No monsters to kill\n");
                        else
index 8229e10ca37d711d33d0c9bb33100f3f5854b533..1ad8d2f4939965c6de292850992385a5fe3dc4d2 100644 (file)
@@ -409,10 +409,6 @@ void monster_move(float runspeed, float walkspeed, float stopspeed, float manim_
                                if not(self.flags & FL_ONGROUND)
                                        self.flags |= FL_ONGROUND;
                                self.monster_die();
-                               if(self.realowner.flags & FL_CLIENT)
-                                       self.realowner.monstercount -= 1;
-                               //if(!(self.spawnflags & MONSTERFLAG_SPAWNED) && !self.monster_respawned)
-                                       //monsters_killed += 1;
                                self.movetype = MOVETYPE_TOSS;
                                return;
                        }
@@ -615,14 +611,11 @@ void monster_hook_death()
        if(self.sprite)
         WaypointSprite_Kill(self.sprite);
                
-       if(self.realowner.flags & FL_CLIENT)
-               self.realowner.monstercount -= 1;
-               
        if(!(self.spawnflags & MONSTERFLAG_SPAWNED) && !self.monster_respawned)
                monsters_killed += 1;
                
        if(self.realowner.flags & FL_CLIENT)
-                       self.realowner.monstercount -= 1;
+               self.realowner.monstercount -= 1;
                
        totalspawned -= 1;