View Single Post
  #7  
Old 02-21-2012, 05:39 PM
c0ncrete's Avatar
c0ncrete
Dragon
 
Join Date: Dec 2009
Posts: 719
Default

raising this thread from the dead as you are still able to spawn bots while you are in combat (even though they may not be at full health/mana). the current code does not check for aggro on an ungrouped client, nor does it stop client-only groups from spawning bots, as the IsEngaged() check will always return false on a client. patch included.

Code:
Index: bot.cpp
===================================================================
--- bot.cpp	(revision 2103)
+++ bot.cpp	(working copy)
@@ -12369,17 +12369,27 @@
 			}
 		}*/
 
-		if(c->IsGrouped()) {
-			Group *g = entity_list.GetGroupByClient(c);
-			for (int i=0; i<MAX_GROUP_MEMBERS; i++) {
-				if(g && g->members[i] && !g->members[i]->qglobal && (g->members[i]->GetAppearance() != eaDead) && g->members[i]->IsEngaged()) {
-					c->Message(0, "You can't summon bots while you are engaged.");
-					return;
+		// blocks spawn if any group member is engaged
+		Group *g = c->GetGroup();
+		if(g) {
+			for(int i = 0; i < MAX_GROUP_MEMBERS; i++) {
+				// if current group member is invalid or dead
+				if(!g->members[i] || g->members[i]->qglobal || g->members[i]->GetAppearance() == eaDead) {
+					continue;
 				}
-				if(g && g->members[i] && g->members[i]->qglobal) {
+				// if group member is a client and has aggro OR group member is a bot and has populated hate list
+				else if ( ( g->members[i]->IsClient() && g->members[i]->CastToClient()->GetAggroCount() > 0 )
+					 ||   ( g->members[i]->IsBot() && g->members[i]->IsEngaged() ) ) {
+					c->Message(0, "You can't spawn bots while your group is engaged.");
 					return;
 				}
 			}
+		// blocks spawn if ungrouped client has aggro
+		} else {
+			if(c->GetAggroCount() > 0) {
+				c->Message(0, "You can't spawn bots while you are engaged.");
+				return;
+			}
 		}
 
 		Mob* TempBotMob = entity_list.GetMobByBotID(botId);
Reply With Quote