Merge pull request #578 from Bobblybook/master

The Nexus implementation, UK code cleanup, dragon flanking
This commit is contained in:
Yunfan Li
2024-10-06 11:12:58 +08:00
committed by GitHub
23 changed files with 810 additions and 47 deletions

View File

@@ -2,6 +2,7 @@
#include "UtgardeKeepActions.h"
#include "UtgardeKeepStrategy.h"
bool AttackFrostTombAction::isUseful() { return !botAI->IsHeal(bot); }
bool AttackFrostTombAction::Execute(Event event)
{
Unit* frostTomb = nullptr;

View File

@@ -12,6 +12,7 @@ class AttackFrostTombAction : public AttackAction
public:
AttackFrostTombAction(PlayerbotAI* ai) : AttackAction(ai, "attack frost tomb") {}
bool Execute(Event event) override;
bool isUseful() override;
};
class AttackDalronnAction : public AttackAction
@@ -32,16 +33,16 @@ class IngvarDodgeSmashAction : public MovementAction
{
public:
IngvarDodgeSmashAction(PlayerbotAI* ai) : MovementAction(ai, "ingvar dodge smash") {}
bool isUseful() override;
bool Execute(Event event) override;
bool isUseful() override;
};
class IngvarSmashReturnAction : public MovementAction
{
public:
IngvarSmashReturnAction(PlayerbotAI* ai) : MovementAction(ai, "ingvar smash return") {}
bool isUseful() override;
bool Execute(Event event) override;
bool isUseful() override;
};
#endif

View File

@@ -6,7 +6,7 @@
float PrinceKelesethMultiplier::GetValue(Action* action)
{
Unit* boss = AI_VALUE2(Unit*, "find target", "prince keleseth");
Unit* boss = AI_VALUE2(Unit*, "find target", "prince keleseth");
if (!boss)
{
return 1.0f;
@@ -15,7 +15,7 @@ float PrinceKelesethMultiplier::GetValue(Action* action)
{
return 0.0f;
}
return 1.0f;
return 1.0f;
}
float SkarvaldAndDalronnMultiplier::GetValue(Action* action)
{

View File

@@ -1,5 +1,5 @@
#ifndef _PLAYERRBOT_WOTLKDUNGEONUKMULTIPLIERS_H_
#define _PLAYERRBOT_WOTLKDUNGEONUKMULTIPLIERS_H_
#ifndef _PLAYERBOT_WOTLKDUNGEONUKMULTIPLIERS_H
#define _PLAYERBOT_WOTLKDUNGEONUKMULTIPLIERS_H
#include "Multiplier.h"

View File

@@ -4,40 +4,40 @@
void WotlkDungeonUKStrategy::InitTriggers(std::vector<TriggerNode*> &triggers)
{
// Prince Keleseth
triggers.push_back(new TriggerNode("keleseth frost tomb",
// Prince Keleseth
triggers.push_back(new TriggerNode("keleseth frost tomb",
NextAction::array(0, new NextAction("attack frost tomb", ACTION_RAID + 1), nullptr)));
// Skarvald the Constructor & Dalronn the Controller
triggers.push_back(new TriggerNode("dalronn priority",
// Skarvald the Constructor & Dalronn the Controller
triggers.push_back(new TriggerNode("dalronn priority",
NextAction::array(0, new NextAction("attack dalronn", ACTION_RAID + 1), nullptr)));
// Ingvar the Plunderer
// Ingvar the Plunderer
// Doesn't work yet, this action doesn't get processed until the existing cast finishes
// triggers.push_back(new TriggerNode("ingvar staggering roar",
// Doesn't work yet, this action doesn't get processed until the existing cast finishes
// triggers.push_back(new TriggerNode("ingvar staggering roar",
// NextAction::array(0, new NextAction("ingvar stop casting", ACTION_RAID + 1), nullptr)));
// No easy way to check LoS here, the pillars do not seem to count as gameobjects.
// Not implemented for now, unsure if this is needed as a good group can probably burst through the boss
// and just eat the debuff.
// triggers.push_back(new TriggerNode("ingvar dreadful roar",
// No easy way to check LoS here, the pillars do not seem to count as gameobjects.
// Not implemented for now, unsure if this is needed as a good group can probably burst through the boss
// and just eat the debuff.
// triggers.push_back(new TriggerNode("ingvar dreadful roar",
// NextAction::array(0, new NextAction("ingvar hide los", ACTION_RAID + 1), nullptr)));
triggers.push_back(new TriggerNode("ingvar smash tank",
triggers.push_back(new TriggerNode("ingvar smash tank",
NextAction::array(0, new NextAction("ingvar dodge smash", ACTION_MOVE + 5), nullptr)));
triggers.push_back(new TriggerNode("ingvar smash tank return",
triggers.push_back(new TriggerNode("ingvar smash tank return",
NextAction::array(0, new NextAction("ingvar smash return", ACTION_MOVE + 5), nullptr)));
// Buggy... if not behind target, ai can get stuck running towards and away from target.
// I think for ranged chars, a custom action should be added that doesn't attempt to run into melee.
// This is a bandaid for now, needs to be improved.
triggers.push_back(new TriggerNode("not behind ingvar",
// Buggy... if not behind target, ai can get stuck running towards and away from target.
// I think for ranged chars, a custom action should be added that doesn't attempt to run into melee.
// This is a bandaid for now, needs to be improved.
triggers.push_back(new TriggerNode("not behind ingvar",
NextAction::array(0, new NextAction("set behind", ACTION_MOVE + 1), nullptr)));
}
void WotlkDungeonUKStrategy::InitMultipliers(std::vector<Multiplier*> &multipliers)
{
multipliers.push_back(new PrinceKelesethMultiplier(botAI));
multipliers.push_back(new SkarvaldAndDalronnMultiplier(botAI));
multipliers.push_back(new IngvarThePlundererMultiplier(botAI));
multipliers.push_back(new PrinceKelesethMultiplier(botAI));
multipliers.push_back(new SkarvaldAndDalronnMultiplier(botAI));
multipliers.push_back(new IngvarThePlundererMultiplier(botAI));
}

View File

@@ -1,15 +1,12 @@
#ifndef _PLAYERBOT_WOTLKDUNGEONUKTRIGGERS_H
#define _PLAYERBOT_WOTLKDUNGEONUKTRIGGERS_H
#include "EventMap.h"
#include "Trigger.h"
#include "PlayerbotAIConfig.h"
#include "GenericTriggers.h"
#include "DungeonStrategyUtils.h"
// Taken from:
// src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
enum eSpells
enum UtgardeKeepIDs
{
SPELL_SUMMON_VALKYR = 42912,
SPELL_RESURRECTION_BEAM = 42857,
@@ -32,7 +29,6 @@ enum eSpells
SPELL_DARK_SMASH = 42723,
SPELL_SHADOW_AXE = 42749,
// Added
DEBUFF_FROST_TOMB = 48400,
};