mirror of
https://github.com/mod-playerbots/mod-playerbots.git
synced 2026-03-05 08:37:48 +00:00
aq20 ossirian strat
This commit is contained in:
49
src/strategy/raids/aq20/RaidAq20Actions.cpp
Normal file
49
src/strategy/raids/aq20/RaidAq20Actions.cpp
Normal file
@@ -0,0 +1,49 @@
|
||||
#include "RaidAq20Actions.h"
|
||||
|
||||
#include "Playerbots.h"
|
||||
#include "RaidAq20Utils.h"
|
||||
|
||||
|
||||
bool Aq20UseCrystalAction::Execute(Event event)
|
||||
{
|
||||
if (Unit* boss = AI_VALUE2(Unit*, "find target", "ossirian the unscarred"))
|
||||
{
|
||||
if (GameObject* crystal = RaidAq20Utils::GetNearestCrystal(boss))
|
||||
{
|
||||
float botDist = bot->GetDistance(crystal);
|
||||
if (botDist > INTERACTION_DISTANCE)
|
||||
return MoveTo(bot->GetMapId(),
|
||||
crystal->GetPositionX() + frand(-3.5f, 3.5f),
|
||||
crystal->GetPositionY() + frand(-3.5f, 3.5f),
|
||||
crystal->GetPositionZ());
|
||||
|
||||
// if we're already in range just wait here until it's time to activate crystal
|
||||
SetNextMovementDelay(500);
|
||||
|
||||
// don't activate crystal if boss too far or its already been activated
|
||||
if (boss->GetDistance(crystal) > 25.0f ||
|
||||
crystal->HasGameObjectFlag(GO_FLAG_IN_USE))
|
||||
return false;
|
||||
|
||||
// don't activate crystal if boss doesn't have buff yet AND isn't going to have it soon
|
||||
// (though ideally bot should activate it ~5 seconds early due to time it takes for
|
||||
// crystal to activate and remove buff)
|
||||
if (!RaidAq20Utils::IsOssirianBuffActive(boss) &&
|
||||
RaidAq20Utils::GetOssirianDebuffTimeRemaining(boss) > 5000)
|
||||
return false;
|
||||
|
||||
// this makes crystal do its animation (then disappear after)
|
||||
WorldPacket data1(CMSG_GAMEOBJ_USE);
|
||||
data1 << crystal->GetGUID();
|
||||
bot->GetSession()->HandleGameObjectUseOpcode(data1);
|
||||
|
||||
// this makes crystal actually remove the buff and put on debuff (took a while to figure that out)
|
||||
WorldPacket data2(CMSG_GAMEOBJ_USE);
|
||||
data2 << crystal->GetGUID();
|
||||
bot->GetSession()->HandleGameobjectReportUse(data2);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
Reference in New Issue
Block a user