Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions playerbot/strategy/StrategyContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
#include "generic/BlackwingLairDungeonStrategies.h"
#include "generic/KarazhanDungeonStrategies.h"
#include "generic/NaxxramasDungeonStrategies.h"
#include "generic/MechanarDungeonStrategies.h"

namespace ai
{
Expand Down Expand Up @@ -170,6 +171,7 @@ namespace ai
creators["blackwing lair"] = [](PlayerbotAI* ai) { return new BlackwingLairDungeonStrategy(ai); };
creators["karazhan"] = [](PlayerbotAI* ai) { return new KarazhanDungeonStrategy(ai); };
creators["naxxramas"] = [](PlayerbotAI* ai) { return new NaxxramasDungeonStrategy(ai); };
creators["mechanar"] = [](PlayerbotAI* ai) { return new MechanarDungeonStrategy(ai); };

// Dungeon Boss Strategies
creators["onyxia"] = [](PlayerbotAI* ai) { return new OnyxiaFightStrategy(ai); };
Expand All @@ -178,6 +180,7 @@ namespace ai
creators["netherspite"] = [](PlayerbotAI* ai) { return new NetherspiteFightStrategy(ai); };
creators["prince malchezaar"] = [](PlayerbotAI* ai) { return new PrinceMalchezaarFightStrategy(ai); };
creators["four horseman"] = [](PlayerbotAI* ai) { return new FourHorsemanFightStrategy(ai); };
creators["nethermancer sepethrea"] = [](PlayerbotAI* ai) { return new NethermancerSepethreaFightStrategy(ai); };

#ifdef GenerateBotTests
creators["test"] = [](PlayerbotAI* ai) { return new TestStrategy(ai); };
Expand Down
7 changes: 7 additions & 0 deletions playerbot/strategy/actions/ActionContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@
#include "BlackwingLairDungeonActions.h"
#include "KarazhanDungeonActions.h"
#include "NaxxramasDungeonActions.h"
#include "MechanarDungeonActions.h"

#ifdef GenerateBotTests
#include "../tests/TestAction.h"
Expand Down Expand Up @@ -374,6 +375,8 @@ namespace ai
creators["disable karazhan strategy"] = [](PlayerbotAI* ai) { return new KarazhanDisableDungeonStrategyAction(ai); };
creators["enable naxxramas strategy"] = [](PlayerbotAI* ai) { return new NaxxramasEnableDungeonStrategyAction(ai); };
creators["disable naxxramas strategy"] = [](PlayerbotAI* ai) { return new NaxxramasDisableDungeonStrategyAction(ai); };
creators["enable mechanar strategy"] = [](PlayerbotAI* ai) { return new MechanarEnableDungeonStrategyAction(ai); };
creators["disable mechanar strategy"] = [](PlayerbotAI* ai) { return new MechanarDisableDungeonStrategyAction(ai); };

// Dungeon Boss Actions
creators["enable onyxia fight strategy"] = [](PlayerbotAI* ai) { return new OnyxiaEnableFightStrategyAction(ai); };
Expand Down Expand Up @@ -408,6 +411,10 @@ namespace ai
creators["enable four horseman fight strategy"] = [](PlayerbotAI* ai) { return new FourHorsemanEnableFightStrategyAction(ai); };
creators["disable four horseman fight strategy"] = [](PlayerbotAI* ai) { return new FourHorsemanDisableFightStrategyAction(ai); };

creators["enable nethermancer sepethrea fight strategy"] = [](PlayerbotAI* ai) { return new NethermancerSepethreaEnableFightStrategyAction(ai); };
creators["disable nethermancer sepethrea fight strategy"] = [](PlayerbotAI* ai) { return new NethermancerSepethreaDisableFightStrategyAction(ai); };
creators["move away from raging flames"] = [](PlayerbotAI* ai) { return new RagingFlamesMoveAwayAction(ai); };

#ifdef GenerateBotTests
creators["test"] = [](PlayerbotAI* ai) { return new TestAction(ai); };
#endif
Expand Down
2 changes: 1 addition & 1 deletion playerbot/strategy/actions/DungeonActions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ bool MoveAwayFromCreature::Execute(Event& event)
float angleLeft = creaturePosition.getAngleTo(botPosition);
float angleRight = angleLeft;

const uint8 attempts = 20;
const uint8 attempts = 60;
const uint8 halfAtempts = (uint8)(attempts * 0.5f);
float angleIncrement = (float)((M_PI) / halfAtempts);

Expand Down
3 changes: 2 additions & 1 deletion playerbot/strategy/actions/DungeonActions.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ namespace ai
class MoveAwayFromCreature : public MovementAction
{
public:
MoveAwayFromCreature(PlayerbotAI* ai, std::string name, uint32 creatureID, float range) : MovementAction(ai, name), creatureID(creatureID), range(range) {}
MoveAwayFromCreature(PlayerbotAI* ai, std::string name, uint32 creatureID, float range, bool ignoreVictim = false) : MovementAction(ai, name), creatureID(creatureID), range(range), ignoreVictim(ignoreVictim) {}
bool Execute(Event& event) override;
bool isPossible() override;

Expand All @@ -52,5 +52,6 @@ namespace ai
private:
uint32 creatureID;
float range;
bool ignoreVictim;
};
}
5 changes: 5 additions & 0 deletions playerbot/strategy/actions/MechanarDungeonActions.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@

#include "playerbot/playerbot.h"
#include "MechanarDungeonActions.h"

using namespace ai;
37 changes: 37 additions & 0 deletions playerbot/strategy/actions/MechanarDungeonActions.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#pragma once
#include "DungeonActions.h"
#include "ChangeStrategyAction.h"
#include "UseItemAction.h"

namespace ai
{
class MechanarEnableDungeonStrategyAction : public ChangeAllStrategyAction
{
public:
MechanarEnableDungeonStrategyAction(PlayerbotAI* ai) : ChangeAllStrategyAction(ai, "enable mechanar strategy", "+mechanar") {}
};

class MechanarDisableDungeonStrategyAction : public ChangeAllStrategyAction
{
public:
MechanarDisableDungeonStrategyAction(PlayerbotAI* ai) : ChangeAllStrategyAction(ai, "disable mechanar strategy", "-mechanar") {}
};

class NethermancerSepethreaEnableFightStrategyAction : public ChangeAllStrategyAction
{
public:
NethermancerSepethreaEnableFightStrategyAction(PlayerbotAI* ai) : ChangeAllStrategyAction(ai, "enable nethermancer sepethrea fight strategy", "+nethermancer sepethrea") {}
};

class NethermancerSepethreaDisableFightStrategyAction : public ChangeAllStrategyAction
{
public:
NethermancerSepethreaDisableFightStrategyAction(PlayerbotAI* ai) : ChangeAllStrategyAction(ai, "disable nethermancer sepethrea fight strategy", "-nethermancer sepethrea") {}
};

class RagingFlamesMoveAwayAction : public MoveAwayFromCreature
{
public:
RagingFlamesMoveAwayAction(PlayerbotAI* ai) : MoveAwayFromCreature(ai, "move away from raging flames", 20481, 20.0f) {}
};
}
12 changes: 12 additions & 0 deletions playerbot/strategy/generic/DungeonStrategy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ void DungeonStrategy::InitCombatTriggers(std::list<TriggerNode*>& triggers)
triggers.push_back(new TriggerNode(
"enter karazhan",
NextAction::array(0, new NextAction("enable karazhan strategy", 100.0f), NULL)));

triggers.push_back(new TriggerNode(
"enter mechanar",
NextAction::array(0, new NextAction("enable mechanar strategy", 100.0f), NULL)));
}

void DungeonStrategy::InitNonCombatTriggers(std::list<TriggerNode*>& triggers)
Expand Down Expand Up @@ -57,4 +61,12 @@ void DungeonStrategy::InitNonCombatTriggers(std::list<TriggerNode*>& triggers)
triggers.push_back(new TriggerNode(
"leave karazhan",
NextAction::array(0, new NextAction("disable karazhan strategy", 100.0f), NULL)));

triggers.push_back(new TriggerNode(
"enter mechanar",
NextAction::array(0, new NextAction("enable mechanar strategy", 100.0f), NULL)));

triggers.push_back(new TriggerNode(
"leave mechanar",
NextAction::array(0, new NextAction("disable mechanar strategy", 100.0f), NULL)));
}
34 changes: 34 additions & 0 deletions playerbot/strategy/generic/MechanarDungeonStrategies.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@

#include "playerbot/playerbot.h"
#include "MechanarDungeonStrategies.h"
#include "DungeonMultipliers.h"

using namespace ai;

void MechanarDungeonStrategy::InitCombatTriggers(std::list<TriggerNode*>& triggers)
{
triggers.push_back(new TriggerNode(
"start nethermancer sepethrea fight",
NextAction::array(0, new NextAction("enable nethermancer sepethrea fight strategy", 100.0f), NULL)));
}

void NethermancerSepethreaFightStrategy::InitCombatTriggers(std::list<TriggerNode*>& triggers)
{
triggers.push_back(new TriggerNode(
"raging flames too close",
NextAction::array(0, new NextAction("move away from raging flames", 100.0f), NULL)));
}

void NethermancerSepethreaFightStrategy::InitNonCombatTriggers(std::list<TriggerNode*>& triggers)
{
triggers.push_back(new TriggerNode(
"end nethermancer sepethrea fight",
NextAction::array(0, new NextAction("disable nethermancer sepethrea fight strategy", 100.0f), NULL)));
}

void NethermancerSepethreaFightStrategy::InitDeadTriggers(std::list<TriggerNode*>& triggers)
{
triggers.push_back(new TriggerNode(
"end nethermancer sepethrea fight",
NextAction::array(0, new NextAction("disable nethermancer sepethrea fight strategy", 100.0f), NULL)));
}
27 changes: 27 additions & 0 deletions playerbot/strategy/generic/MechanarDungeonStrategies.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#pragma once
#include "playerbot/strategy/Strategy.h"

namespace ai
{
class MechanarDungeonStrategy : public Strategy
{
public:
MechanarDungeonStrategy(PlayerbotAI* ai) : Strategy(ai) {}
std::string getName() override { return "mechanar"; }

private:
void InitCombatTriggers(std::list<TriggerNode*>& triggers) override;
};

class NethermancerSepethreaFightStrategy : public Strategy
{
public:
NethermancerSepethreaFightStrategy(PlayerbotAI* ai) : Strategy(ai) {}
std::string getName() override { return "nethermancer sepethrea"; }

private:
void InitCombatTriggers(std::list<TriggerNode*>& triggers) override;
void InitNonCombatTriggers(std::list<TriggerNode*>& triggers) override;
void InitDeadTriggers(std::list<TriggerNode*>& triggers) override;
};
}
4 changes: 2 additions & 2 deletions playerbot/strategy/triggers/DungeonTriggers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -233,8 +233,8 @@ bool CloseToCreatureTrigger::IsActive()
Creature* creature = (Creature*)unit;
if (creature)
{
// Check if the bot is not being targeted by the creature
if (!creature->GetVictim() || (creature->GetVictim()->GetObjectGuid() != bot->GetObjectGuid()))
// Check if the bot is not being targeted by the creature, unless we don't care
if ((!creature->GetVictim() || (creature->GetVictim()->GetObjectGuid() != bot->GetObjectGuid())) || ignoreVictim)
{
// See if the creature is within the specified distance
if (bot->IsWithinDist(creature, range))
Expand Down
6 changes: 4 additions & 2 deletions playerbot/strategy/triggers/DungeonTriggers.h
Original file line number Diff line number Diff line change
Expand Up @@ -131,16 +131,18 @@ namespace ai
class CloseToCreatureTrigger : public Trigger
{
public:
CloseToCreatureTrigger(PlayerbotAI* ai, std::string name, uint32 creatureID, float range)
CloseToCreatureTrigger(PlayerbotAI* ai, std::string name, uint32 creatureID, float range, bool ignoreVictim = false)
: Trigger(ai, name, 1)
, creatureID(creatureID)
, range(range) {}
, range(range)
, ignoreVictim(ignoreVictim) {}

bool IsActive() override;

private:
uint32 creatureID;
float range;
bool ignoreVictim;
};

class ItemReadyTrigger : public Trigger
Expand Down
9 changes: 9 additions & 0 deletions playerbot/strategy/triggers/MechanarDungeonTriggers.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@

#include "playerbot/playerbot.h"
#include "MechanarDungeonTriggers.h"
#include "GenericTriggers.h"
#include "Grids/GridNotifiers.h"
#include "Grids/GridNotifiersImpl.h"
#include "Grids/CellImpl.h"

using namespace ai;
36 changes: 36 additions & 0 deletions playerbot/strategy/triggers/MechanarDungeonTriggers.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#pragma once
#include "DungeonTriggers.h"
#include "GenericTriggers.h"

namespace ai
{
class MechanarEnterDungeonTrigger : public EnterDungeonTrigger
{
public:
MechanarEnterDungeonTrigger(PlayerbotAI* ai) : EnterDungeonTrigger(ai, "enter mechanar", "mechanar", 554) {}
};

class MechanarLeaveDungeonTrigger : public LeaveDungeonTrigger
{
public:
MechanarLeaveDungeonTrigger(PlayerbotAI* ai) : LeaveDungeonTrigger(ai, "leave mechanar", "mechanar", 554) {}
};

class NethermancerSepethreaStartFightTrigger : public StartBossFightTrigger
{
public:
NethermancerSepethreaStartFightTrigger(PlayerbotAI* ai) : StartBossFightTrigger(ai, "start nethermancer sepethrea fight", "nethermancer sepethrea", 19221) {}
};

class NethermancerSepethreaEndFightTrigger : public EndBossFightTrigger
{
public:
NethermancerSepethreaEndFightTrigger(PlayerbotAI* ai) : EndBossFightTrigger(ai, "end nethermancer sepethrea fight", "nethermancer sepethrea", 19221) {}
};

class RagingFlamesTooCloseTrigger : public CloseToCreatureTrigger
{
public:
RagingFlamesTooCloseTrigger(PlayerbotAI* ai) : CloseToCreatureTrigger(ai, "raging flames too close", 20481, 15.0f, true) {}
};
}
7 changes: 7 additions & 0 deletions playerbot/strategy/triggers/TriggerContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include "BlackwingLairDungeonTriggers.h"
#include "KarazhanDungeonTriggers.h"
#include "NaxxramasDungeonTriggers.h"
#include "MechanarDungeonTriggers.h"
#include "GlyphTriggers.h"
#include "WorldBuffTravelTriggers.h"

Expand Down Expand Up @@ -308,6 +309,8 @@ namespace ai
creators["leave naxxramas"] = [](PlayerbotAI* ai) { return new NaxxramasLeaveDungeonTrigger(ai); };
creators["enter blackwing lair"] = [](PlayerbotAI* ai) { return new BlackwingLairEnterDungeonTrigger(ai); };
creators["leave blackwing lair"] = [](PlayerbotAI* ai) { return new BlackwingLairLeaveDungeonTrigger(ai); };
creators["enter mechanar"] = [](PlayerbotAI* ai) { return new MechanarEnterDungeonTrigger(ai); };
creators["leave mechanar"] = [](PlayerbotAI* ai) { return new MechanarLeaveDungeonTrigger(ai); };

// Dungeon Boss Triggers
creators["start onyxia fight"] = [](PlayerbotAI* ai) { return new OnyxiaStartFightTrigger(ai); };
Expand Down Expand Up @@ -343,6 +346,10 @@ namespace ai
creators["start four horseman fight"] = [](PlayerbotAI* ai) { return new FourHorsemanStartFightTrigger(ai); };
creators["end four horseman fight"] = [](PlayerbotAI* ai) { return new FourHorsemanEndFightTrigger(ai); };

creators["start nethermancer sepethrea fight"] = [](PlayerbotAI* ai) { return new NethermancerSepethreaStartFightTrigger(ai); };
creators["end nethermancer sepethrea fight"] = [](PlayerbotAI* ai) { return new NethermancerSepethreaEndFightTrigger(ai); };
creators["raging flames too close"] = [](PlayerbotAI* ai) { return new RagingFlamesTooCloseTrigger(ai); };

// Test framework triggers
#ifdef GenerateBotTests
creators["test ready"] = [](PlayerbotAI* ai) { return new TestReadyTrigger(ai); };
Expand Down