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);