Skip to content

Commit

Permalink
Add partybot pull command.
Browse files Browse the repository at this point in the history
  • Loading branch information
mserajnik committed Nov 10, 2023
1 parent 021724d commit 9a0dc9a
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/game/Chat/Chat.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ ChatCommand * ChatHandler::getCommandTable()
{ "setrole", SEC_ADMINISTRATOR, false, &ChatHandler::HandlePartyBotSetRoleCommand, "", nullptr },
{ "attackstart",SEC_ADMINISTRATOR, false, &ChatHandler::HandlePartyBotAttackStartCommand, "", nullptr },
{ "attackstop", SEC_ADMINISTRATOR, false, &ChatHandler::HandlePartyBotAttackStopCommand, "", nullptr },
{ "pull", SEC_ADMINISTRATOR, false, &ChatHandler::HandlePartyBotPullCommand, "", nullptr },
{ "aoe", SEC_ADMINISTRATOR, false, &ChatHandler::HandlePartyBotAoECommand, "", nullptr },
{ "ccmark", SEC_ADMINISTRATOR, false, &ChatHandler::HandlePartyBotControlMarkCommand, "", nullptr },
{ "focusmark", SEC_ADMINISTRATOR, false, &ChatHandler::HandlePartyBotFocusMarkCommand, "", nullptr },
Expand Down
1 change: 1 addition & 0 deletions src/game/Chat/Chat.h
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,7 @@ class ChatHandler
bool HandlePartyBotSetRoleCommand(char * args);
bool HandlePartyBotAttackStartCommand(char * args);
bool HandlePartyBotAttackStopCommand(char * args);
bool HandlePartyBotPullCommand(char * args);
bool HandlePartyBotAoECommand(char * args);
bool HandlePartyBotControlMarkCommand(char * args);
bool HandlePartyBotFocusMarkCommand(char * args);
Expand Down
59 changes: 59 additions & 0 deletions src/game/PlayerBots/PlayerBotMgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1610,6 +1610,65 @@ bool ChatHandler::HandlePartyBotUnpauseCommand(char* args)
return HandlePartyBotPauseHelper(args, false);
}

bool ChatHandler::HandlePartyBotPullCommand(char* args)
{
Player* pPlayer = GetSession()->GetPlayer();
Unit* pTarget = GetSelectedUnit();
if (!pTarget || (pTarget == pPlayer))
{
SendSysMessage(LANG_SELECT_CHAR_OR_CREATURE);
SetSentErrorMessage(true);
return false;
}

Group* pGroup = pPlayer->GetGroup();
if (!pGroup)
{
SendSysMessage("You are not in a group.");
SetSentErrorMessage(true);
return false;
}

bool back = false;
uint32 duration = 0;
if (char* arg1 = ExtractArg(&args))
{
duration = atoi(arg1);
}

if (!duration)
duration = 10 * IN_MILLISECONDS;

for (GroupReference* itr = pGroup->GetFirstMember(); itr != nullptr; itr = itr->next())
{
if (Player* pMember = itr->getSource())
{
if (pMember == pPlayer)
continue;

if (pMember->AI())
{
if (PartyBotAI* pAI = dynamic_cast<PartyBotAI*>(pMember->AI()))
{
if (pAI->m_role == ROLE_MELEE_DPS || pAI->m_role == ROLE_RANGE_DPS)
{
HandlePartyBotPauseApplyHelper(pMember, duration);
continue;
}
else if (pAI->m_role == ROLE_TANK)
{
if (pMember->IsValidAttackTarget(pTarget))
pAI->AttackStart(pTarget);
}
}
}
}
}

PSendSysMessage("Tank party bots are pulling %s, DPS party bots are paused for %d seconds.", pTarget->GetName(), (duration / IN_MILLISECONDS));
return true;
}

bool ChatHandler::HandlePartyBotUnequipCommand(char* args)
{
Player* pTarget = GetSelectedPlayer();
Expand Down

0 comments on commit 9a0dc9a

Please sign in to comment.