From c9480ad08059f2a2877983ee739129791180354c Mon Sep 17 00:00:00 2001 From: neckkola <65987027+neckkola@users.noreply.github.com> Date: Mon, 10 Jan 2022 12:00:31 -0400 Subject: [PATCH] Bot Raid inviting working for all use cases --- zone/bot.cpp | 686 ++++++++++++++++++++++++----------------- zone/client_packet.cpp | 46 +-- 2 files changed, 438 insertions(+), 294 deletions(-) diff --git a/zone/bot.cpp b/zone/bot.cpp index dd9520e24..b09834fd4 100644 --- a/zone/bot.cpp +++ b/zone/bot.cpp @@ -10105,353 +10105,487 @@ void Bot::ProcessRaidInvite2(Client* invitee, Client* invitor) { if (g_invitee) { //As there is already a raid, just add this group + raid->SendBulkRaid(invitee); + uint32 raid_free_group_id = raid->GetFreeGroup(); + for (int x = 0; x < 6; x++) { + if (g_invitee->members[x]) { + Client* c = nullptr; + Bot* b = nullptr; + if (g_invitee->members[x] && g_invitee->members[x]->IsBot()) { + b = g_invitee->members[x]->CastToBot(); + if (x == 0) { + raid->AddBot(b, raid_free_group_id, false, true, false); + raid->SetGroupLeader(b->GetName()); + } + else { + raid->AddBot(b, raid_free_group_id, false, false, false); + } + } + else if (g_invitee->members[x] && g_invitee->members[x]->IsClient()) { + c = g_invitee->members[x]->CastToClient(); + if (x == 0) { + raid->SendRaidCreate(c); + raid->SendMakeLeaderPacketTo(raid->leadername, c); + raid->AddMember(c, raid_free_group_id, false, true, false); + raid->SetGroupLeader(c->GetName()); + if (raid->IsLocked()) { + raid->SendRaidLockTo(c); + } + } + else { + raid->SendRaidCreate(c); + raid->SendMakeLeaderPacketTo(raid->leadername, c); + raid->AddMember(c, raid_free_group_id, false, false, false); + if (raid->IsLocked()) { + raid->SendRaidLockTo(c); + } + } + } + } + } +// raid->SendBulkRaid(invitor); //Send a raid updates to the invitor + g_invitee->JoinRaidXTarget(raid, true); + g_invitee->DisbandGroup(true); + if (raid->IsLocked()) { + raid->SendRaidLockTo(invitor); + } } else { //As there is already a raid and no group, just add this single client + raid->SendRaidCreate(invitee); + raid->SendMakeLeaderPacketTo(raid->leadername, invitee); + raid->AddMember(invitee); + if (raid->IsLocked()) { + raid->SendRaidLockTo(invitee); + } } } else { //As there is no raid //First, create the raid + raid = new Raid(invitor); + entity_list.AddRaid(raid); + raid->SetRaidDetails(); + if (g_invitor) { - //Second, add the invitor group + //Second, add the invitor group as group 0 + for (int x = 0; x < 6; x++) { + if (g_invitor->members[x]) { + Client* c = nullptr; + Bot* b = nullptr; + if (g_invitor->members[x] && g_invitor->members[x]->IsBot()) { + b = g_invitor->members[x]->CastToBot(); + if (x == 0) { + raid->AddBot(b, 0, false, true, false); + raid->SetGroupLeader(b->GetName()); + } + else { + raid->AddBot(b, 0, false, false, false); + } + } + else if (g_invitor->members[x] && g_invitor->members[x]->IsClient()) { + c = g_invitor->members[x]->CastToClient(); + if (x == 0) { + raid->SendRaidCreate(c); + raid->SendMakeLeaderPacketTo(raid->leadername, c); + raid->AddMember(c, 0, false, true, false); + raid->SetGroupLeader(c->GetName()); + if (raid->IsLocked()) { + raid->SendRaidLockTo(c); + } + } + else { + raid->SendRaidCreate(c); + raid->SendMakeLeaderPacketTo(raid->leadername, c); + raid->AddMember(c, 0, false, false, false); + if (raid->IsLocked()) { + raid->SendRaidLockTo(c); + } + } + } + } + } + raid->SendBulkRaid(invitee); //Send a raid updates to the invitor + g_invitor->JoinRaidXTarget(raid, true); + g_invitor->DisbandGroup(true); + if (raid->IsLocked()) { + raid->SendRaidLockTo(invitor); + } if (g_invitee) { //Third, add the invitee group + uint32 raid_free_group_id = raid->GetFreeGroup(); + for (int x = 0; x < 6; x++) { + if (g_invitee->members[x]) { + Client* c = nullptr; + Bot* b = nullptr; + if (g_invitee->members[x] && g_invitee->members[x]->IsBot()) { + b = g_invitee->members[x]->CastToBot(); + if (x == 0) { + raid->AddBot(b, raid_free_group_id, false, true, false); + raid->SetGroupLeader(b->GetName()); + } + else { + raid->AddBot(b, raid_free_group_id, false, false, false); + } + } + else if (g_invitee->members[x] && g_invitee->members[x]->IsClient()) { + c = g_invitee->members[x]->CastToClient(); + if (x == 0) { + raid->SendRaidCreate(c); + raid->SendMakeLeaderPacketTo(raid->leadername, c); + raid->AddMember(c, raid_free_group_id, false, true, false); + raid->SetGroupLeader(c->GetName()); + if (raid->IsLocked()) { + raid->SendRaidLockTo(c); + } + } + else { + raid->SendRaidCreate(c); + raid->SendMakeLeaderPacketTo(raid->leadername, c); + raid->AddMember(c, raid_free_group_id, false, false, false); + if (raid->IsLocked()) { + raid->SendRaidLockTo(c); + } + } + } + } + } +// raid->SendBulkRaid(invitee); //Send a raid updates to the invitee + g_invitee->JoinRaidXTarget(raid, true); + g_invitee->DisbandGroup(true); + if (raid->IsLocked()) { + raid->SendRaidLockTo(invitor); + } } else { //Third, no group so add the single client + raid->SendRaidCreate(invitee); + raid->SendMakeLeaderPacketTo(raid->leadername, invitee); + raid->AddMember(invitee); +// raid->SendBulkRaid(invitee); + if (raid->IsLocked()) { + raid->SendRaidLockTo(invitee); + } } } else { //Second, add the single invitor + raid->SendRaidCreate(invitor); + raid->SendMakeLeaderPacketTo(raid->leadername, invitor); + raid->AddMember(invitor, 0xFFFFFFFF, true, false, true); + raid->SendBulkRaid(invitee); //Send a raid updates to the invitee + if (raid->IsLocked()) { + raid->SendRaidLockTo(invitor); + } if (g_invitee) { //Third, add the invitee group + uint32 raid_free_group_id = raid->GetFreeGroup(); + for (int x = 0; x < 6; x++) { + if (g_invitee->members[x]) { + Client* c = nullptr; + Bot* b = nullptr; + if (g_invitee->members[x] && g_invitee->members[x]->IsBot()) { + b = g_invitee->members[x]->CastToBot(); + if (x == 0) { + raid->AddBot(b, raid_free_group_id, false, true, false); + raid->SetGroupLeader(b->GetName()); + } + else { + raid->AddBot(b, raid_free_group_id, false, false, false); + } + } + else if (g_invitee->members[x] && g_invitee->members[x]->IsClient()) { + c = g_invitee->members[x]->CastToClient(); + if (x == 0) { + raid->SendRaidCreate(c); + raid->SendMakeLeaderPacketTo(raid->leadername, c); + raid->AddMember(c, raid_free_group_id, false, true, false); + raid->SetGroupLeader(c->GetName()); + if (raid->IsLocked()) { + raid->SendRaidLockTo(c); + } + } + else { + raid->SendRaidCreate(c); + raid->SendMakeLeaderPacketTo(raid->leadername, c); + raid->AddMember(c, raid_free_group_id, false, false, false); + if (raid->IsLocked()) { + raid->SendRaidLockTo(c); + } + } + } + } + } + g_invitee->JoinRaidXTarget(raid, true); + g_invitee->DisbandGroup(true); + if (raid->IsLocked()) { + raid->SendRaidLockTo(invitor); + } } else { - //Third, no group so add the single client + //Third, no group so add the single client invitee + raid->SendRaidCreate(invitee); + raid->SendMakeLeaderPacketTo(raid->leadername, invitee); + raid->AddMember(invitee); + if (raid->IsLocked()) { + raid->SendRaidLockTo(invitee); + } } } } } -void Bot::ProcessRaidInvite(Bot* player_accepting_invite, Client* b_owner) { - - if (player_accepting_invite) { - if (player_accepting_invite->IsRaidGrouped()) { - b_owner->MessageString(Chat::White, ALREADY_IN_RAID, player_accepting_invite->GetName()); //group failed, must invite members not in raid... - return; +void Bot::ProcessRaidInvite(Bot* invitee, Client* invitor) { + + Raid* raid = entity_list.GetRaidByClient(invitor); + Group* g_invitee = invitee->GetGroup(); + Group* g_invitor = invitor->GetGroup(); + + if (raid) + { + if (g_invitee) + { + //As there is already a raid, just add this group + uint32 raid_free_group_id = raid->GetFreeGroup(); + for (int x = 0; x < 6; x++) { + if (g_invitee->members[x]) { + Client* c = nullptr; + Bot* b = nullptr; + if (g_invitee->members[x] && g_invitee->members[x]->IsBot()) { + b = g_invitee->members[x]->CastToBot(); + if (x == 0) { + raid->AddBot(b, raid_free_group_id, false, true, false); + raid->SetGroupLeader(b->GetName()); + } + else { + raid->AddBot(b, raid_free_group_id, false, false, false); + } + } + else if (g_invitee->members[x] && g_invitee->members[x]->IsClient()) { + c = g_invitee->members[x]->CastToClient(); + if (x == 0) { + raid->SendRaidCreate(c); + raid->SendMakeLeaderPacketTo(raid->leadername, c); + raid->AddMember(c, raid_free_group_id, false, true, false); + raid->SetGroupLeader(c->GetName()); + if (raid->IsLocked()) { + raid->SendRaidLockTo(c); + } + } + else { + raid->SendRaidCreate(c); + raid->SendMakeLeaderPacketTo(raid->leadername, c); + raid->AddMember(c, raid_free_group_id, false, false, false); + if (raid->IsLocked()) { + raid->SendRaidLockTo(c); + } + } + } + } + } + // raid->SendBulkRaid(invitor); //Send a raid updates to the invitor + g_invitee->JoinRaidXTarget(raid, true); + g_invitee->DisbandGroup(true); + if (raid->IsLocked()) { + raid->SendRaidLockTo(invitor); + } } - Raid* raid = entity_list.GetRaidByClient(b_owner); + else + { + //As there is already a raid and no group, just add this single client + //raid->SendRaidCreate(invitee); + //raid->SendMakeLeaderPacketTo(raid->leadername, invitee); + raid->AddBot(invitee); + //if (raid->IsLocked()) { + // raid->SendRaidLockTo(invitee); + //} + } + } + else + { + //As there is no raid + //First, create the raid + raid = new Raid(invitor); + entity_list.AddRaid(raid); + raid->SetRaidDetails(); -// Check to see if a raid already exists. - if (raid) { - raid->VerifyRaid(); - Group* group = player_accepting_invite->GetGroup(); -// A few checks here. If player is in a group, is there room for another group. If not in a group, is there room for one more player. - if (group) { - if (group->GroupCount() + raid->RaidCount() > MAX_RAID_MEMBERS) { - b_owner->Message(Chat::Red, "Invite failed, bot group invite would create a raid larger than the maximum number of members allowed."); - return; + if (g_invitor) + { + //Second, add the invitor group as group 0 + for (int x = 0; x < 6; x++) { + if (g_invitor->members[x]) { + Client* c = nullptr; + Bot* b = nullptr; + if (g_invitor->members[x] && g_invitor->members[x]->IsBot()) { + b = g_invitor->members[x]->CastToBot(); + if (x == 0) { + raid->AddBot(b, 0, false, true, false); + raid->SetGroupLeader(b->GetName()); + } + else { + raid->AddBot(b, 0, false, false, false); + } + } + else if (g_invitor->members[x] && g_invitor->members[x]->IsClient()) { + c = g_invitor->members[x]->CastToClient(); + if (x == 0) { + raid->SendRaidCreate(c); + raid->SendMakeLeaderPacketTo(raid->leadername, c); + raid->AddMember(c, 0, false, true, false); + raid->SetGroupLeader(c->GetName()); + if (raid->IsLocked()) { + raid->SendRaidLockTo(c); + } + } + else { + raid->SendRaidCreate(c); + raid->SendMakeLeaderPacketTo(raid->leadername, c); + raid->AddMember(c, 0, false, false, false); + if (raid->IsLocked()) { + raid->SendRaidLockTo(c); + } + } + } } } - else { - if (1 + raid->RaidCount() > MAX_RAID_MEMBERS) { - b_owner->Message(Chat::Red, "Invite failed, bot invite would create a raid larger than the maximum number of members allowed."); - return; - } +// raid->SendBulkRaid(invitee); //Send a raid updates to the invitor + g_invitor->JoinRaidXTarget(raid, true); + g_invitor->DisbandGroup(true); + if (raid->IsLocked()) { + raid->SendRaidLockTo(invitor); } - -//Usecase #3 - Raid already created, Bot is BotGroupLeader. -//UseCase #5 - Raid already created, Client is groupleader with at least one Bot in group - if (group) { - uint32 free_group_id = raid->GetFreeGroup(); - Client* addClient = nullptr; - Bot* addBot = nullptr; - + if (g_invitee) + { + //Third, add the invitee group + uint32 raid_free_group_id = raid->GetFreeGroup(); for (int x = 0; x < 6; x++) { - if (group->members[x]) { + if (g_invitee->members[x]) { Client* c = nullptr; Bot* b = nullptr; - if (group->members[x]->IsBot()) { - b = group->members[x]->CastToBot(); + if (g_invitee->members[x] && g_invitee->members[x]->IsBot()) { + b = g_invitee->members[x]->CastToBot(); if (x == 0) { - raid->AddBot(b, free_group_id, false, true, false); + raid->AddBot(b, raid_free_group_id, false, true, false); raid->SetGroupLeader(b->GetName()); } else { - raid->AddBot(b, free_group_id, false, false, false); + raid->AddBot(b, raid_free_group_id, false, false, false); } - raid->SendBulkRaid(b->CastToClient()); } - else if (group->members[x]->IsClient()) { - c = group->members[x]->CastToClient(); + else if (g_invitee->members[x] && g_invitee->members[x]->IsClient()) { + c = g_invitee->members[x]->CastToClient(); if (x == 0) { raid->SendRaidCreate(c); raid->SendMakeLeaderPacketTo(raid->leadername, c); - raid->AddMember(c, free_group_id, false, true, false); + raid->AddMember(c, raid_free_group_id, false, true, false); raid->SetGroupLeader(c->GetName()); + if (raid->IsLocked()) { + raid->SendRaidLockTo(c); + } } else { raid->SendRaidCreate(c); raid->SendMakeLeaderPacketTo(raid->leadername, c); - raid->AddMember(c, free_group_id, false, false, false); - } - raid->SendBulkRaid(c); - if (raid->IsLocked()) - raid->SendRaidLockTo(c); - } - - //if (!addClient) - //{ - // addClient = c; - // raid->SetGroupLeader(addClient->GetName()); - //} - - //raid->SendRaidCreate(b_owner); - //raid->SendMakeLeaderPacketTo(raid->leadername, b_owner); - //if (group->IsLeader(group->members[x])) -// raid->AddMember(c, free_group_id, false, true); - // else - // raid->AddMember(c, free_group_id); - //raid->SendRaidGroupAdd(b_owner->GetName(), free_group_id); - - } - } - group->JoinRaidXTarget(raid); - group->DisbandGroup(true); - raid->GroupUpdate(free_group_id); - } - else { // Jan 6 this also now works. // If not in a group, invite the individual player - //raid->SendRaidCreate(b_owner); - //raid->SendMakeLeaderPacketTo(raid->leadername, b_owner); - raid->AddBot(player_accepting_invite); - // Set indicator that bot owner has already received this update. Mitch - - //raid->SendBulkRaid(b_owner); - if (raid->IsLocked()) { - raid->SendRaidLockTo(b_owner); - } - } - } - -// No raid exists at this point -// Usecase #1 - Client invites another client. No groups involved. Handled by Raid Accept Invite routine -// Usecase #2 - Client invites their own bot. No groups involved. Handled here. -// Usecase #4 - Client invites their own bot to a group then to raid. Handled here. -// Usecase #5 - Client invites another client that is in a group with their own bot. Handled here. -// Usecase #6 - Client with a bot in a group invites another client that is in a group with their own bot. Handled here. - else - { -// No raid at this point. -// Several usecases here. -// Working from raids.cpp 1. Inviting Client does not have a group, invited player is a single client -// Working 2. Inviting Client does not have a group, invited player is a single bot that they own -// Working 3. Inviting Client does not have a group, invited player is a single bot that they do not own -// Working 4. Inviting Client does not have a group, invited player is a single bot in a group of other bots -// Working 5. Inviting Client does not have a group, invited player is a single bot in a group of other mixed players and bots -// Working from raids.cpp 6. Inviting Client does not have a group, invited player is a single client in a group of other players only -// Working 7. Inviting Client does not have a group, invited player is a single client in a group of bots only -// Working 8. Inviting Client does not have a group, invited player is a single client in a group of mixed players and bots - - Group* player_invited_group = player_accepting_invite->GetGroup(); - Group* group = entity_list.GetGroupByClient(b_owner); // player_accepting_invite->GetGroup(); -// No raid. Check to see if Inviting client has a group? - if (group) -// No raid. Inviting client has a group. - { - raid = new Raid(b_owner); - entity_list.AddRaid(raid); - raid->SetRaidDetails(); - - uint32 raid_free_group_id = raid->GetFreeGroup(); - -// No raid. Inviting client has a group. Check to see if invited player has a group? - if (player_invited_group) { -// No raid. Inviting client has a group. Invited client has a group. - Client* client_to_be_leader = nullptr; - for (int x = 0; x < 6; x++) { - if (player_invited_group->members[x]) { - if (!client_to_be_leader) { - if (player_invited_group->members[x]->IsClient()) { - client_to_be_leader = player_invited_group->members[x]->CastToClient(); - raid->SetGroupLeader(client_to_be_leader->GetName()); + raid->AddMember(c, raid_free_group_id, false, false, false); + if (raid->IsLocked()) { + raid->SendRaidLockTo(c); } } - if (player_invited_group->IsLeader(player_invited_group->members[x])) { - Client* c = nullptr; - - if (player_invited_group->members[x]->IsClient() || player_invited_group->members[x]->IsBot()) - c = player_invited_group->members[x]->CastToClient(); - else - continue; - - raid->SendRaidCreate(b_owner); - raid->SendMakeLeaderPacketTo(raid->leadername, b_owner); - raid->AddMember(c, raid_free_group_id, true, true, true); - raid->SendBulkRaid(c); - + } + } + } + //raid->SendBulkRaid(invitor); //Send a raid updates to the invitor + g_invitee->JoinRaidXTarget(raid, true); + g_invitee->DisbandGroup(true); + if (raid->IsLocked()) { + raid->SendRaidLockTo(invitor); + } + } + else + { + //Third, no group so add the single client + //raid->SendRaidCreate(invitee); + //raid->SendMakeLeaderPacketTo(raid->leadername, invitee); + raid->AddBot(invitee); + // raid->SendBulkRaid(invitee); + //if (raid->IsLocked()) { + // raid->SendRaidLockTo(invitee); + //} + } + } + else + { + //Second, add the single invitor + raid->SendRaidCreate(invitor); + raid->SendMakeLeaderPacketTo(raid->leadername, invitor); + raid->AddMember(invitor, 0xFFFFFFFF, true, false, true); + if (raid->IsLocked()) { + raid->SendRaidLockTo(invitor); + } + if (g_invitee) + { + //Third, add the invitee group + uint32 raid_free_group_id = raid->GetFreeGroup(); + for (int x = 0; x < 6; x++) { + if (g_invitee->members[x]) { + Client* c = nullptr; + Bot* b = nullptr; + if (g_invitee->members[x] && g_invitee->members[x]->IsBot()) { + b = g_invitee->members[x]->CastToBot(); + if (x == 0) { + raid->AddBot(b, raid_free_group_id, false, true, false); + raid->SetGroupLeader(b->GetName()); + } + else { + raid->AddBot(b, raid_free_group_id, false, false, false); + } + } + else if (g_invitee->members[x] && g_invitee->members[x]->IsClient()) { + c = g_invitee->members[x]->CastToClient(); + if (x == 0) { + raid->SendRaidCreate(c); + raid->SendMakeLeaderPacketTo(raid->leadername, c); + raid->AddMember(c, raid_free_group_id, false, true, false); + raid->SetGroupLeader(c->GetName()); if (raid->IsLocked()) { - raid->SendRaidLockTo(b_owner); + raid->SendRaidLockTo(c); } } else { - Client* c = nullptr; - - if (player_invited_group->members[x]->IsClient() || player_invited_group->members[x]->IsBot()) - c = player_invited_group->members[x]->CastToClient(); - else - continue; - - raid->SendRaidCreate(b_owner); - raid->SendMakeLeaderPacketTo(raid->leadername, b_owner); - raid->AddMember(c, raid_free_group_id); - raid->SendBulkRaid(b_owner); - + raid->SendRaidCreate(c); + raid->SendMakeLeaderPacketTo(raid->leadername, c); + raid->AddMember(c, raid_free_group_id, false, false, false); if (raid->IsLocked()) { - raid->SendRaidLockTo(b_owner); + raid->SendRaidLockTo(c); } } } } - player_invited_group->JoinRaidXTarget(raid, true); - player_invited_group->DisbandGroup(true); - raid->GroupUpdate(raid_free_group_id); - raid_free_group_id = raid->GetFreeGroup(); } - // No raid. Inviting client has a group. Invited client DOES NOT HAVE a group. - else { - // raid->SendRaidCreate(player_accepting_invite); - // raid->AddMember(player_accepting_invite, 0xFFFFFFFF, true, false, true); - raid->SendRaidCreate(b_owner); - raid->AddMember(b_owner, 0xFFFFFFFF, true, false, true); + // raid->SendBulkRaid(invitor); //Send a raid updates to the invitor + g_invitee->JoinRaidXTarget(raid, true); + g_invitee->DisbandGroup(true); + if (raid->IsLocked()) { + raid->SendRaidLockTo(invitor); } - - Client* client_to_add = nullptr; - /* Add client to an existing group */ - for (int x = 0; x < 6; x++) { - if (group->members[x]) { - if (!client_to_add) { - if (group->members[x]->IsClient() || group->members[x]->IsBot()) { - client_to_add = group->members[x]->CastToClient(); - raid->SetGroupLeader(client_to_add->GetName()); - } - } - if (group->IsLeader(group->members[x])) { - Client* c = nullptr; - - if (group->members[x]->IsClient() || group->members[x]->IsClient()) - c = group->members[x]->CastToClient(); - else - continue; - - raid->SendRaidCreate(b_owner); - raid->SendMakeLeaderPacketTo(raid->leadername, b_owner); - raid->AddMember(c, raid_free_group_id, false, true); - raid->SendBulkRaid(b_owner); - - if (raid->IsLocked()) { - raid->SendRaidLockTo(b_owner); - } - } - else - { - Client* c = nullptr; - - if (group->members[x]->IsClient() || group->members[x]->IsBot()) - c = group->members[x]->CastToClient(); - else - continue; - - raid->SendRaidCreate(b_owner); - raid->SendMakeLeaderPacketTo(raid->leadername, b_owner); - raid->AddMember(c, raid_free_group_id); - raid->SendBulkRaid(b_owner); - - if (raid->IsLocked()) { - raid->SendRaidLockTo(b_owner); - } - } - } - } - group->JoinRaidXTarget(raid); - group->DisbandGroup(true); - - raid->GroupUpdate(raid_free_group_id); } - else { - if (player_invited_group) { -// No raid. Inviting client DOES NOT HAVE a group. Invited client has a group. -// Usecase 4 - No raid, no inviter group, bot in a group of bots -// Usecase 5 - No raid, no inviter group, bot in a group of mixed players and bots -// Usecase 7 - No raid, no inviter group, client in a group of bots -// Usecase 8 - No raid, no inviter group, client in a group of mixed players and bots - raid = new Raid(b_owner); - entity_list.AddRaid(raid); - raid->SetRaidDetails(); - - for (int x = 0; x < 6; x++) { - if (player_invited_group->members[x]) { - Client* c = nullptr; - Bot* b = nullptr; - if (player_invited_group->members[x]->IsBot()) { - b = player_invited_group->members[x]->CastToBot(); - if (x == 0) { - raid->AddBot(b, 0, false, true, false); - raid->SetGroupLeader(b->GetName()); - } - else { - raid->AddBot(b, 0, false, false, false); - } - } - else if (player_invited_group->members[x]->IsClient()) { - c = player_invited_group->members[x]->CastToClient(); - if (x == 0) { - raid->SendRaidCreate(c); - raid->SendMakeLeaderPacketTo(raid->leadername, c); - raid->AddMember(c, 0, false, true, false); - raid->SetGroupLeader(c->GetName()); - } - else { - raid->SendRaidCreate(c); - raid->SendMakeLeaderPacketTo(raid->leadername, c); - raid->AddMember(c, 0, false, false, false); - } - } - } - } - raid->SendRaidCreate(b_owner); - raid->SendMakeLeaderPacketTo(raid->leadername, b_owner); - raid->SendBulkRaid(b_owner); - raid->AddMember(b_owner, 0xFFFFFFFF, true, false, true); - player_invited_group->JoinRaidXTarget(raid, true); - player_invited_group->DisbandGroup(true); - raid->GroupUpdate(0); - if (raid->IsLocked()) { - raid->SendRaidLockTo(b_owner); - } - } -// 2. Inviting Client does not have a group, invited player is a single bot that they own -// 3. Inviting Client does not have a group, invited player is a single bot that they do not own - else { - raid = new Raid(b_owner); - entity_list.AddRaid(raid); - raid->SetRaidDetails(); - raid->SendRaidCreate(b_owner); - raid->SendMakeLeaderPacketTo(raid->leadername, b_owner); - raid->AddMember(b_owner, 0xFFFFFFFF, true, false, true); - raid->AddBot(player_accepting_invite); - if (raid->IsLocked()) { - raid->SendRaidLockTo(b_owner); - } - } + else + { + //Third, no group so add the single client invitee + //raid->SendRaidCreate(invitee); + //raid->SendMakeLeaderPacketTo(raid->leadername, invitee); + raid->AddBot(invitee); + //if (raid->IsLocked()) { + // raid->SendRaidLockTo(invitee); + //} } } } diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index a062c89ae..60f2b9f1d 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -11327,9 +11327,6 @@ void Client::Handle_OP_RaidCommand(const EQApplicationPacket *app) Bot* player_to_invite = nullptr; Client* player_to_invite_owner = nullptr; - - - if (entity_list.GetBotByBotName(raid_command_packet->player_name) ) { Bot* player_to_invite = entity_list.GetBotByBotName(raid_command_packet->player_name); Client* player_to_invite_owner = player_to_invite->GetOwner()->CastToClient(); @@ -11419,30 +11416,43 @@ void Client::Handle_OP_RaidCommand(const EQApplicationPacket *app) Group* g_invitee = invitee->GetGroup(); Group* g_invitor = invitor->GetGroup(); - if (invitee->HasGroup() && g_invitee->IsLeader(invitee)) + bool invitor_has_bot = false; + bool invitee_has_bot = false; + + if (g_invitor && g_invitor->IsLeader(invitor)) { for (int x = 0; x < 6; x++) { - if (g_invitee->members[x]->IsBot()) - { - b = entity_list.GetBotByBotName(g_invitee->members[x]->GetName()); - Bot::ProcessRaidInvite(b, player_accepting_invite); - break; - } - } - } - if (invitee && invitor->HasGroup() && g_invitor->IsLeader(invitor)) - { - for (int x = 0; x < 6; x++) - { - if (g_invitor->members[x]->IsBot()) + if (g_invitor->members[x] && g_invitor->members[x]->IsBot()) { b = entity_list.GetBotByBotName(g_invitor->members[x]->GetName()); - Bot::ProcessRaidInvite2(player_accepting_invite); + invitee_has_bot = true; + } + } + } + if (g_invitee && g_invitee->IsLeader(invitee)) + { + for (int x = 0; x < 6; x++) + { + if (g_invitee->members[x] && g_invitee->members[x]->IsBot()) + { + b = entity_list.GetBotByBotName(g_invitee->members[x]->GetName()); + invitee_has_bot = true; break; } } } + if (invitor_has_bot || invitee_has_bot) { + Bot::ProcessRaidInvite2(invitee, invitor); + break; + } + else + if (invitee->IsBot()) + { + Bot::ProcessRaidInvite(b, player_accepting_invite); + break; + } + #endif if (player_accepting_invite) { if (IsRaidGrouped()) {