Use Case 1, 2, 3,4,7 working.

Need to fix 5, 6, 8
This commit is contained in:
neckkola
2022-01-08 00:03:05 -04:00
parent b8b5ca0e67
commit 947fb239a9
2 changed files with 240 additions and 256 deletions
+34 -50
View File
@@ -10118,7 +10118,7 @@ void Bot::ProcessRaidInvite(Bot* player_accepting_invite, Client* b_owner) {
return; return;
} }
} }
//Usecase #3 - Raid already created, Bot is BotGroupLeader. //Usecase #3 - Raid already created, Bot is BotGroupLeader.
if (group) {//add us all // Is the player already in a group? If yes, add all players from the group if (group) {//add us all // Is the player already in a group? If yes, add all players from the group
uint32 free_group_id = raid->GetFreeGroup(); uint32 free_group_id = raid->GetFreeGroup();
Client* addClient = nullptr; Client* addClient = nullptr;
@@ -10189,13 +10189,14 @@ void Bot::ProcessRaidInvite(Bot* player_accepting_invite, Client* b_owner) {
} }
} }
} }
//No raid exists.
else else
{ // A raid does not already exist. One needs to be created before going forward { // A raid does not already exist. One needs to be created before going forward
Group* player_invited_group = player_accepting_invite->GetGroup(); Group* player_invited_group = player_accepting_invite->GetGroup();
Group* group = entity_list.GetGroupByClient(b_owner); // player_accepting_invite->GetGroup(); Group* group = entity_list.GetGroupByClient(b_owner); // player_accepting_invite->GetGroup();
if (group) //if our target has a group if (group) //if our target has a group
{ {
// raid = new Raid(player_accepting_invite); // raid = new Raid(player_accepting_invite);
raid = new Raid(b_owner); raid = new Raid(b_owner);
entity_list.AddRaid(raid); entity_list.AddRaid(raid);
raid->SetRaidDetails(); raid->SetRaidDetails();
@@ -10255,8 +10256,8 @@ void Bot::ProcessRaidInvite(Bot* player_accepting_invite, Client* b_owner) {
raid_free_group_id = raid->GetFreeGroup(); raid_free_group_id = raid->GetFreeGroup();
} }
else { else {
// raid->SendRaidCreate(player_accepting_invite); // raid->SendRaidCreate(player_accepting_invite);
// raid->AddMember(player_accepting_invite, 0xFFFFFFFF, true, false, true); // raid->AddMember(player_accepting_invite, 0xFFFFFFFF, true, false, true);
raid->SendRaidCreate(b_owner); raid->SendRaidCreate(b_owner);
raid->AddMember(b_owner, 0xFFFFFFFF, true, false, true); raid->AddMember(b_owner, 0xFFFFFFFF, true, false, true);
} }
@@ -10314,80 +10315,63 @@ void Bot::ProcessRaidInvite(Bot* player_accepting_invite, Client* b_owner) {
raid->GroupUpdate(raid_free_group_id); raid->GroupUpdate(raid_free_group_id);
} }
/* Target does not have a group */ /* Target does not have a group */
//No raid and bot owner does not have group. Now check for bot having a group
else { else {
if (player_invited_group) { if (player_invited_group) {
// No raid, No bot owner group, bot has group
raid = new Raid(b_owner); raid = new Raid(b_owner);
entity_list.AddRaid(raid); entity_list.AddRaid(raid);
raid->SetRaidDetails(); raid->SetRaidDetails();
Client* addClientig = nullptr; raid->SendRaidCreate(b_owner);
raid->SendMakeLeaderPacketTo(raid->leadername, b_owner);
raid->AddMember(b_owner, 0xFFFFFFFF, true, false, true);
for (int x = 0; x < 6; x++) { for (int x = 0; x < 6; x++) {
if (player_invited_group->members[x]) { if (player_invited_group->members[x]) {
if (!addClientig) {
if (player_invited_group->members[x]->IsClient() || player_invited_group->members[x]->IsBot()) {
addClientig = player_invited_group->members[x]->CastToClient();
raid->SetGroupLeader(addClientig->GetName());
}
}
if (player_invited_group->IsLeader(player_invited_group->members[x])) {
Client* c = nullptr; Client* c = nullptr;
Bot* b = nullptr;
if (player_invited_group->members[x]->IsClient() || player_invited_group->members[x]->IsBot()) if (player_invited_group->members[x]->IsBot()) {
c = player_invited_group->members[x]->CastToClient(); b = player_invited_group->members[x]->CastToBot();
else if (x == 0) {
continue; raid->AddBot(b, 0, false, true, false);
raid->SetGroupLeader(b->GetName());
raid->SendRaidCreate(b_owner); }
raid->SendMakeLeaderPacketTo(raid->leadername, b_owner); else {
raid->AddMember(c, 0, true, true, true); raid->AddBot(b, 0, false, false, false);
raid->SendBulkRaid(b_owner);
if (raid->IsLocked()) {
raid->SendRaidLockTo(b_owner);
} }
} }
else else if (group->members[x]->IsClient()) {
{ c = group->members[x]->CastToClient();
Client* c = nullptr; if (x == 0) {
if (player_invited_group->members[x]->IsClient() || player_invited_group->members[x]->IsBot()) raid->SendRaidCreate(c);
c = player_invited_group->members[x]->CastToClient(); raid->SendMakeLeaderPacketTo(raid->leadername, c);
else raid->AddMember(c, 0, false, true, false);
continue; raid->SetGroupLeader(c->GetName());
}
raid->SendRaidCreate(b_owner); else {
raid->SendMakeLeaderPacketTo(raid->leadername, b_owner); raid->SendRaidCreate(c);
raid->AddMember(c, 0); raid->SendMakeLeaderPacketTo(raid->leadername, c);
raid->SendBulkRaid(b_owner); raid->AddMember(c, 0, false, false, false);
if (raid->IsLocked()) {
raid->SendRaidLockTo(b_owner);
} }
} }
} }
} }
raid->SendRaidCreate(b_owner);
raid->SendMakeLeaderPacketTo(raid->leadername, b_owner);
raid->SendBulkRaid(b_owner);
player_invited_group->JoinRaidXTarget(raid, true); player_invited_group->JoinRaidXTarget(raid, true);
raid->AddMember(b_owner);
player_invited_group->DisbandGroup(true); player_invited_group->DisbandGroup(true);
raid->GroupUpdate(0); raid->GroupUpdate(0);
if (raid->IsLocked()) { if (raid->IsLocked()) {
raid->SendRaidLockTo(b_owner); raid->SendRaidLockTo(b_owner);
} }
} }
//Usecase #2 - Neither the invitor and Bot has a group. //Usecase #2 - No raid, no bot owner group, no bot group. Working
else { // neither has a group - Jan 6 this appears to work now. One ungrouped player, one/many ungrouped bots else {
raid = new Raid(b_owner); raid = new Raid(b_owner);
entity_list.AddRaid(raid); entity_list.AddRaid(raid);
raid->SetRaidDetails(); raid->SetRaidDetails();
// raid->SendRaidCreate(b_owner); // Not needed as one raid member is a bot
raid->SendRaidCreate(b_owner); raid->SendRaidCreate(b_owner);
raid->SendMakeLeaderPacketTo(raid->leadername, b_owner); raid->SendMakeLeaderPacketTo(raid->leadername, b_owner);
raid->AddMember(b_owner, 0xFFFFFFFF, true, false, true); raid->AddMember(b_owner, 0xFFFFFFFF, true, false, true);
raid->AddBot(player_accepting_invite); raid->AddBot(player_accepting_invite);
// raid->SendBulkRaid(b_owner); //Removed to correct usecase #2
if (raid->IsLocked()) { if (raid->IsLocked()) {
raid->SendRaidLockTo(b_owner); raid->SendRaidLockTo(b_owner);
} }
+4 -4
View File
@@ -190,9 +190,9 @@ void Raid::AddBot(Bot* b, uint32 group, bool rleader, bool groupleader, bool loo
database.SetRaidGroupLeaderInfo(group, GetID()); database.SetRaidGroupLeaderInfo(group, GetID());
//UpdateGroupAAs(group); //UpdateGroupAAs(group);
} }
if (group < 12) // if (group < 12)
GroupUpdate(group); // GroupUpdate(group);
else // get raid AAs, GroupUpdate will handles it otherwise // else // get raid AAs, GroupUpdate will handles it otherwise
//SendGroupLeadershipAA(c, RAID_GROUPLESS); Is this needed for bots? //SendGroupLeadershipAA(c, RAID_GROUPLESS); Is this needed for bots?
SendRaidAddAll(b->GetName()); SendRaidAddAll(b->GetName());
@@ -1076,7 +1076,7 @@ void Raid::SendRaidAdd(const char *who, Client *to)
for(int x = 0; x < MAX_RAID_MEMBERS; x++) for(int x = 0; x < MAX_RAID_MEMBERS; x++)
{ {
if(strcmp(members[x].membername, who) == 0 || !members[x].SentToBotOwner) //Mitch if(strcmp(members[x].membername, who) == 0)// || !members[x].SentToBotOwner) //Mitch
{ {
auto outapp = new EQApplicationPacket(OP_RaidUpdate, sizeof(RaidAddMember_Struct)); auto outapp = new EQApplicationPacket(OP_RaidUpdate, sizeof(RaidAddMember_Struct));
RaidAddMember_Struct *ram = (RaidAddMember_Struct*)outapp->pBuffer; RaidAddMember_Struct *ram = (RaidAddMember_Struct*)outapp->pBuffer;