Files
mod-playerbots/src/strategy/dungeons/wotlk/utgardekeep/UtgardeKeepMultipliers.cpp
Bobblybook 3f7f306124 Revert "Dungeon code cleanup"
This reverts commit d0a9e98801.
2024-10-20 15:58:14 +11:00

94 lines
2.6 KiB
C++

#include "UtgardeKeepMultipliers.h"
#include "UtgardeKeepActions.h"
#include "GenericSpellActions.h"
#include "ChooseTargetActions.h"
#include "UtgardeKeepTriggers.h"
float PrinceKelesethMultiplier::GetValue(Action* action)
{
Unit* boss = AI_VALUE2(Unit*, "find target", "prince keleseth");
if (!boss)
{
return 1.0f;
}
if (dynamic_cast<DpsAssistAction*>(action))
{
return 0.0f;
}
return 1.0f;
}
float SkarvaldAndDalronnMultiplier::GetValue(Action* action)
{
// Unit* skarvald = AI_VALUE2(Unit*, "find target", "skarvald the constructor");
Unit* dalronn = AI_VALUE2(Unit*, "find target", "dalronn the controller");
if (!dalronn)
{
return 1.0f;
}
if (dynamic_cast<DpsAssistAction*>(action))
{
return 0.0f;
}
return 1.0f;
}
float IngvarThePlundererMultiplier::GetValue(Action* action)
{
Unit* boss = AI_VALUE2(Unit*, "find target", "ingvar the plunderer");
bool isTank = botAI->IsTank(bot);
if (!boss)
{
return 1.0f;
}
// Prevent movement actions overriding current movement, we're probably dodging a slam
if (isTank && bot->isMoving() && dynamic_cast<MovementAction*>(action))
{
return 0.0f;
}
// If boss is casting a roar, do not allow beginning a spell cast that is non-instant
if (boss->HasUnitState(UNIT_STATE_CASTING))
{
if (boss->FindCurrentSpellBySpellId(SPELL_STAGGERING_ROAR) ||
boss->FindCurrentSpellBySpellId(SPELL_DREADFUL_ROAR))
{
if (dynamic_cast<CastSpellAction*>(action))
{
uint32 spellId = AI_VALUE2(uint32, "spell id", action->getName());
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
if (!spellInfo)
{
return 1.0f;
}
uint32 castTime = spellInfo->CalcCastTime(bot);
if (castTime != 0)
{
return 0.0f;
}
}
}
// Done with non-tank logic
if (!isTank)
{
return 1.0f;
}
// TANK ONLY
if (boss->FindCurrentSpellBySpellId(SPELL_SMASH) ||
boss->FindCurrentSpellBySpellId(SPELL_DARK_SMASH))
{
// Prevent movement actions during smash which can mess up boss position.
// Allow through IngvarDodgeSmashAction only, as well as any non-movement actions.
if (dynamic_cast<MovementAction*>(action) && !dynamic_cast<IngvarDodgeSmashAction*>(action))
{
return 0.0f;
}
}
}
return 1.0f;
}