From 22922e3bd81ce89ecddcd32dabc05bbe6d58caeb Mon Sep 17 00:00:00 2001 From: Mario Date: Wed, 23 Jan 2013 20:24:41 +1100 Subject: [PATCH] Fix monster counting for mobspawn command --- qcsrc/server/command/cmd.qc | 48 +++++++++++++-------------- qcsrc/server/command/sv_cmd.qc | 12 ++++--- qcsrc/server/monsters/lib/monsters.qc | 9 +---- 3 files changed, 33 insertions(+), 36 deletions(-) diff --git a/qcsrc/server/command/cmd.qc b/qcsrc/server/command/cmd.qc index 007514983..02fcc32fd 100644 --- a/qcsrc/server/command/cmd.qc +++ b/qcsrc/server/command/cmd.qc @@ -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; } diff --git a/qcsrc/server/command/sv_cmd.qc b/qcsrc/server/command/sv_cmd.qc index 382c7de61..ad3fdbabb 100644 --- a/qcsrc/server/command/sv_cmd.qc +++ b/qcsrc/server/command/sv_cmd.qc @@ -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 diff --git a/qcsrc/server/monsters/lib/monsters.qc b/qcsrc/server/monsters/lib/monsters.qc index 8229e10ca..1ad8d2f49 100644 --- a/qcsrc/server/monsters/lib/monsters.qc +++ b/qcsrc/server/monsters/lib/monsters.qc @@ -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; -- 2.39.2