Sorry, I cannot replicate this issue at all, by chance when you pulled new code or have been updating, did you not re-apply(or merge) Client::Handle_OP_GroupDisband ?
Here is my diff to the latest code, this has some forum related fixes as well from
http://www.eqemulator.org/forums/showthread.php?t=39013 and
http://www.eqemulator.org/forums/showthread.php?t=38996
Code:
diff --git a/zone/bot.cpp b/zone/bot.cpp
index 1b1da0b..d29c4ff 100644
--- a/zone/bot.cpp
+++ b/zone/bot.cpp
@@ -1379,6 +1379,26 @@ int32 Bot::GenerateBaseHitPoints()
int new_base_hp = 0;
uint32 lm = GetClassLevelFactor();
uint32 Post255;
+
+ if ((GetSTA() - 255) / 2 > 0)
+ Post255 = (GetSTA() - 255) / 2;
+ else
+ Post255 = 0;
+
+ new_base_hp = (5) + (GetLevel()*lm / 10) + (((GetSTA() - Post255)*GetLevel()*lm / 3000)) + ((Post255*GetLevel())*lm / 6000);
+
+ this->base_hp = new_base_hp;
+
+ return new_base_hp;
+}
+
+/*
+int32 Bot::GenerateBaseHitPoints()
+{
+ // Calc Base Hit Points
+ int new_base_hp = 0;
+ uint32 lm = GetClassLevelFactor();
+ uint32 Post255;
uint32 NormalSTA = GetSTA();
if(GetOwner() && GetOwner()->CastToClient() && GetOwner()->CastToClient()->GetClientVersion() >= ClientVersion::SoD && RuleB(Character, SoDClientUseSoDHPManaEnd))
@@ -1422,7 +1442,7 @@ int32 Bot::GenerateBaseHitPoints()
return new_base_hp;
}
-
+*/
void Bot::GenerateAABonuses(StatBonuses* newbon) {
// General AA bonus
uint8 botClass = GetClass();
@@ -4662,6 +4682,7 @@ void Bot::SaveBotGroup(Group* botGroup, std::string botGroupName, std::string* e
return;
}
+ botGroupId = GetBotGroupIdByBotGroupName(botGroupName.c_str(), errorMessage);
if(botGroupId == 0)
return;
@@ -5911,9 +5932,17 @@ bool Bot::Death(Mob *killerMob, int32 damage, uint16 spell_id, SkillUseTypes att
// if group members exist below this one, move
// them all up one slot in the group list
+ if(g->GroupCount() == 6) {
+ for(int x=0; x<MAX_GROUP_MEMBERS; x++) {
+ g->membername[x][0] = '\0';
+ memset(g->membername[x], 0, 64);
+ g->members[x] = nullptr;
+ }
+ }
int j = i+1;
for(; j<MAX_GROUP_MEMBERS; j++) {
if(g->members[j]) {
+// Log.Out(Logs::General, Logs::Status, "group count is: %d", g->GroupCount());
g->members[j-1] = g->members[j];
strcpy(g->membername[j-1], g->members[j]->GetCleanName());
g->membername[j][0] = '\0';
@@ -5921,7 +5950,6 @@ bool Bot::Death(Mob *killerMob, int32 damage, uint16 spell_id, SkillUseTypes att
g->members[j] = nullptr;
}
}
-
// update the client group
EQApplicationPacket* outapp = new EQApplicationPacket(OP_GroupUpdate, sizeof(GroupJoin_Struct));
GroupJoin_Struct* gu = (GroupJoin_Struct*)outapp->pBuffer;
diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp
index 5ff2052..00d2cc3 100644
--- a/zone/client_packet.cpp
+++ b/zone/client_packet.cpp
@@ -6343,16 +6343,11 @@ void Client::Handle_OP_GroupDisband(const EQApplicationPacket *app)
// this block is necessary to allow more control over controlling how bots are zoned or camped.
if (Bot::GroupHasBot(group)) {
if (group->IsLeader(this)) {
- if ((GetTarget() == 0 || GetTarget() == this) || (group->GroupCount() < 3)) {
- Bot::ProcessBotGroupDisband(this, std::string());
- }
- else {
- Mob* tempMember = entity_list.GetMob(gd->name2);
- if (tempMember) {
- if (tempMember->IsBot())
- Bot::ProcessBotGroupDisband(this, std::string(tempMember->GetCleanName()));
+ Mob* tempMember = GetTarget();
+ if (tempMember->IsBot()) {
+ Bot::ProcessBotGroupDisband(this, std::string(tempMember->GetCleanName()));
+ return;
}
- }
}
}
#endif