mirror of
https://github.com/mod-playerbots/mod-playerbots.git
synced 2026-01-24 22:16:23 +00:00
Run clang-format
This commit is contained in:
@@ -1,34 +1,36 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "CasterShamanStrategy.h"
|
||||
|
||||
#include "Playerbots.h"
|
||||
|
||||
class CasterShamanStrategyActionNodeFactory : public NamedObjectFactory<ActionNode>
|
||||
{
|
||||
public:
|
||||
CasterShamanStrategyActionNodeFactory()
|
||||
{
|
||||
creators["magma totem"] = &magma_totem;
|
||||
creators["totem of wrath"] = &totem_of_wrath;
|
||||
}
|
||||
public:
|
||||
CasterShamanStrategyActionNodeFactory()
|
||||
{
|
||||
creators["magma totem"] = &magma_totem;
|
||||
creators["totem of wrath"] = &totem_of_wrath;
|
||||
}
|
||||
|
||||
private:
|
||||
static ActionNode* magma_totem([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode ("magma totem",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ nullptr,
|
||||
/*C*/ NextAction::array(0, new NextAction("fire nova"), nullptr));
|
||||
}
|
||||
static ActionNode* totem_of_wrath(PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode ("totem of wrath",
|
||||
/*P*/ NULL,
|
||||
/*A*/ NextAction::array(0, new NextAction("flametongue totem"), NULL),
|
||||
/*C*/ NULL);
|
||||
}
|
||||
private:
|
||||
static ActionNode* magma_totem([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode("magma totem",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ nullptr,
|
||||
/*C*/ NextAction::array(0, new NextAction("fire nova"), nullptr));
|
||||
}
|
||||
static ActionNode* totem_of_wrath(PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode("totem of wrath",
|
||||
/*P*/ NULL,
|
||||
/*A*/ NextAction::array(0, new NextAction("flametongue totem"), NULL),
|
||||
/*C*/ NULL);
|
||||
}
|
||||
};
|
||||
|
||||
CasterShamanStrategy::CasterShamanStrategy(PlayerbotAI* botAI) : GenericShamanStrategy(botAI)
|
||||
@@ -38,35 +40,41 @@ CasterShamanStrategy::CasterShamanStrategy(PlayerbotAI* botAI) : GenericShamanSt
|
||||
|
||||
NextAction** CasterShamanStrategy::getDefaultActions()
|
||||
{
|
||||
return NextAction::array(0,
|
||||
new NextAction("lava burst", ACTION_DEFAULT + 0.2f),
|
||||
new NextAction("lightning bolt", ACTION_DEFAULT),
|
||||
NULL);
|
||||
return NextAction::array(0, new NextAction("lava burst", ACTION_DEFAULT + 0.2f),
|
||||
new NextAction("lightning bolt", ACTION_DEFAULT), NULL);
|
||||
}
|
||||
|
||||
void CasterShamanStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
{
|
||||
GenericShamanStrategy::InitTriggers(triggers);
|
||||
|
||||
// triggers.push_back(new TriggerNode("enemy out of spell", NextAction::array(0, new NextAction("reach spell", ACTION_NORMAL + 9), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("shaman weapon", NextAction::array(0, new NextAction("flametongue weapon", 23.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("main hand weapon no imbue", NextAction::array(0, new NextAction("flametongue weapon", 22.0f), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("searing totem", NextAction::array(0, new NextAction("searing totem", 19.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("flame shock", NextAction::array(0, new NextAction("flame shock", 20.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("elemental mastery", NextAction::array(0, new NextAction("elemental mastery", 27.0f), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("frost shock snare", NextAction::array(0, new NextAction("frost shock", 21.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"no fire totem",
|
||||
NextAction::array(0,
|
||||
new NextAction("totem of wrath", 15.0f), NULL)));
|
||||
// triggers.push_back(new TriggerNode("enemy out of spell", NextAction::array(0, new NextAction("reach spell",
|
||||
// ACTION_NORMAL + 9), nullptr))); triggers.push_back(new TriggerNode("shaman weapon", NextAction::array(0, new
|
||||
// NextAction("flametongue weapon", 23.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("main hand weapon no imbue",
|
||||
NextAction::array(0, new NextAction("flametongue weapon", 22.0f), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("searing totem", NextAction::array(0, new NextAction("searing totem", 19.0f),
|
||||
// nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("flame shock", NextAction::array(0, new NextAction("flame shock", 20.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("elemental mastery",
|
||||
NextAction::array(0, new NextAction("elemental mastery", 27.0f), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("frost shock snare", NextAction::array(0, new NextAction("frost
|
||||
// shock", 21.0f), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("no fire totem", NextAction::array(0, new NextAction("totem of wrath", 15.0f), NULL)));
|
||||
|
||||
triggers.push_back(new TriggerNode("enemy is close", NextAction::array(0, new NextAction("thunderstorm", ACTION_HIGH + 1), nullptr)));
|
||||
triggers.push_back(new TriggerNode("medium mana", NextAction::array(0, new NextAction("thunderstorm", ACTION_HIGH + 1), nullptr)));
|
||||
triggers.push_back(new TriggerNode("enemy is close",
|
||||
NextAction::array(0, new NextAction("thunderstorm", ACTION_HIGH + 1), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("medium mana", NextAction::array(0, new NextAction("thunderstorm", ACTION_HIGH + 1), nullptr)));
|
||||
|
||||
triggers.push_back(new TriggerNode("enemy too close for spell", NextAction::array(0, new NextAction("flee", ACTION_MOVE + 9), nullptr)));
|
||||
triggers.push_back(new TriggerNode("enemy too close for spell",
|
||||
NextAction::array(0, new NextAction("flee", ACTION_MOVE + 9), nullptr)));
|
||||
}
|
||||
|
||||
void CasterAoeShamanStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
{
|
||||
triggers.push_back(new TriggerNode("light aoe", NextAction::array(0, new NextAction("chain lightning", 25.0f), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("light aoe", NextAction::array(0, new NextAction("chain lightning", 25.0f), nullptr)));
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_CASTSHAMANSTRATEGY_H
|
||||
@@ -11,22 +12,22 @@ class PlayerbotAI;
|
||||
|
||||
class CasterShamanStrategy : public GenericShamanStrategy
|
||||
{
|
||||
public:
|
||||
CasterShamanStrategy(PlayerbotAI* botAI);
|
||||
public:
|
||||
CasterShamanStrategy(PlayerbotAI* botAI);
|
||||
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
NextAction** getDefaultActions() override;
|
||||
std::string const getName() override { return "caster"; }
|
||||
uint32 GetType() const override { return STRATEGY_TYPE_COMBAT | STRATEGY_TYPE_DPS | STRATEGY_TYPE_RANGED; }
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
NextAction** getDefaultActions() override;
|
||||
std::string const getName() override { return "caster"; }
|
||||
uint32 GetType() const override { return STRATEGY_TYPE_COMBAT | STRATEGY_TYPE_DPS | STRATEGY_TYPE_RANGED; }
|
||||
};
|
||||
|
||||
class CasterAoeShamanStrategy : public CombatStrategy
|
||||
{
|
||||
public:
|
||||
CasterAoeShamanStrategy(PlayerbotAI* botAI) : CombatStrategy(botAI) { }
|
||||
public:
|
||||
CasterAoeShamanStrategy(PlayerbotAI* botAI) : CombatStrategy(botAI) {}
|
||||
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
std::string const getName() override { return "caster aoe"; }
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
std::string const getName() override { return "caster aoe"; }
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "HealShamanStrategy.h"
|
||||
@@ -8,93 +9,93 @@
|
||||
|
||||
class GenericShamanStrategyActionNodeFactory : public NamedObjectFactory<ActionNode>
|
||||
{
|
||||
public:
|
||||
GenericShamanStrategyActionNodeFactory()
|
||||
{
|
||||
creators["flametongue weapon"] = &flametongue_weapon;
|
||||
creators["frostbrand weapon"] = &frostbrand_weapon;
|
||||
creators["windfury weapon"] = &windfury_weapon;
|
||||
creators["lesser healing wave"] = &lesser_healing_wave;
|
||||
creators["lesser healing wave on party"] = &lesser_healing_wave_on_party;
|
||||
creators["chain heal"] = &chain_heal;
|
||||
creators["riptide"] = &riptide;
|
||||
creators["riptide on party"] = &riptide_on_party;
|
||||
creators["earth shock"] = &earth_shock;
|
||||
}
|
||||
public:
|
||||
GenericShamanStrategyActionNodeFactory()
|
||||
{
|
||||
creators["flametongue weapon"] = &flametongue_weapon;
|
||||
creators["frostbrand weapon"] = &frostbrand_weapon;
|
||||
creators["windfury weapon"] = &windfury_weapon;
|
||||
creators["lesser healing wave"] = &lesser_healing_wave;
|
||||
creators["lesser healing wave on party"] = &lesser_healing_wave_on_party;
|
||||
creators["chain heal"] = &chain_heal;
|
||||
creators["riptide"] = &riptide;
|
||||
creators["riptide on party"] = &riptide_on_party;
|
||||
creators["earth shock"] = &earth_shock;
|
||||
}
|
||||
|
||||
private:
|
||||
static ActionNode* earth_shock([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode ("earth shock",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ NextAction::array(0, new NextAction("flame shock"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
private:
|
||||
static ActionNode* earth_shock([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode("earth shock",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ NextAction::array(0, new NextAction("flame shock"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
|
||||
static ActionNode* flametongue_weapon([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode ("flametongue weapon",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ NextAction::array(0, new NextAction("rockbiter weapon"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
static ActionNode* flametongue_weapon([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode("flametongue weapon",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ NextAction::array(0, new NextAction("rockbiter weapon"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
|
||||
static ActionNode* frostbrand_weapon([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode ("frostbrand weapon",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ NextAction::array(0, new NextAction("flametongue weapon"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
static ActionNode* frostbrand_weapon([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode("frostbrand weapon",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ NextAction::array(0, new NextAction("flametongue weapon"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
|
||||
static ActionNode* windfury_weapon([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode ("windfury weapon",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ NextAction::array(0, new NextAction("flametongue weapon"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
static ActionNode* windfury_weapon([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode("windfury weapon",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ NextAction::array(0, new NextAction("flametongue weapon"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
|
||||
static ActionNode* lesser_healing_wave([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode ("lesser healing wave",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ NextAction::array(0, new NextAction("healing wave"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
static ActionNode* lesser_healing_wave([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode("lesser healing wave",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ NextAction::array(0, new NextAction("healing wave"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
|
||||
static ActionNode* lesser_healing_wave_on_party([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode ("lesser healing wave on party",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ NextAction::array(0, new NextAction("healing wave on party"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
static ActionNode* lesser_healing_wave_on_party([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode("lesser healing wave on party",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ NextAction::array(0, new NextAction("healing wave on party"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
|
||||
static ActionNode* chain_heal([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode ("chain heal",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ NextAction::array(0, new NextAction("lesser healing wave"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
static ActionNode* chain_heal([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode("chain heal",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ NextAction::array(0, new NextAction("lesser healing wave"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
|
||||
static ActionNode* riptide([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode ("riptide",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ NextAction::array(0, new NextAction("healing wave"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
static ActionNode* riptide([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode("riptide",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ NextAction::array(0, new NextAction("healing wave"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
|
||||
static ActionNode* riptide_on_party([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode ("riptide on party",
|
||||
/*P*/ nullptr,
|
||||
// /*A*/ NextAction::array(0, new NextAction("healing wave on party"), nullptr),
|
||||
/*A*/ nullptr,
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
static ActionNode* riptide_on_party([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode("riptide on party",
|
||||
/*P*/ nullptr,
|
||||
// /*A*/ NextAction::array(0, new NextAction("healing wave on party"), nullptr),
|
||||
/*A*/ nullptr,
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
};
|
||||
|
||||
GenericShamanStrategy::GenericShamanStrategy(PlayerbotAI* botAI) : CombatStrategy(botAI)
|
||||
@@ -106,39 +107,58 @@ void GenericShamanStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
{
|
||||
CombatStrategy::InitTriggers(triggers);
|
||||
|
||||
triggers.push_back(new TriggerNode("wind shear", NextAction::array(0, new NextAction("wind shear", 23.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("wind shear on enemy healer", NextAction::array(0, new NextAction("wind shear on enemy healer", 23.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("purge", NextAction::array(0, new NextAction("purge", ACTION_DISPEL), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("party member medium health", NextAction::array(0, new NextAction("lesser healing wave on party", 25.0f), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("party member low health", NextAction::array(0, new NextAction("riptide on party", 25.0f), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("medium aoe heal", NextAction::array(0, new NextAction("chain heal", 27.0f), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("medium health", NextAction::array(0, new NextAction("lesser healing wave", 26.0f), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("low health", NextAction::array(0, new NextAction("riptide", 26.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("heroism", NextAction::array(0, new NextAction("heroism", 31.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("bloodlust", NextAction::array(0, new NextAction("bloodlust", 30.0f), nullptr)));
|
||||
|
||||
triggers.push_back(
|
||||
new TriggerNode("wind shear", NextAction::array(0, new NextAction("wind shear", 23.0f), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("wind shear on enemy healer",
|
||||
NextAction::array(0, new NextAction("wind shear on enemy healer", 23.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("purge", NextAction::array(0, new NextAction("purge", ACTION_DISPEL), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("party member medium health", NextAction::array(0, new NextAction("lesser
|
||||
// healing wave on party", 25.0f), nullptr))); triggers.push_back(new TriggerNode("party member low health",
|
||||
// NextAction::array(0, new NextAction("riptide on party", 25.0f), nullptr))); triggers.push_back(new
|
||||
// TriggerNode("medium aoe heal", NextAction::array(0, new NextAction("chain heal", 27.0f), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("medium health", NextAction::array(0, new NextAction("lesser healing
|
||||
// wave", 26.0f), nullptr))); triggers.push_back(new TriggerNode("low health", NextAction::array(0, new
|
||||
// NextAction("riptide", 26.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("heroism", NextAction::array(0, new NextAction("heroism", 31.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("bloodlust", NextAction::array(0, new NextAction("bloodlust", 30.0f), nullptr)));
|
||||
}
|
||||
|
||||
void ShamanBuffDpsStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
{
|
||||
triggers.push_back(new TriggerNode("lightning shield", NextAction::array(0, new NextAction("lightning shield", 22.0f), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("lightning shield", NextAction::array(0, new NextAction("lightning shield", 22.0f), nullptr)));
|
||||
}
|
||||
|
||||
void ShamanBuffManaStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
{
|
||||
triggers.push_back(new TriggerNode("water shield", NextAction::array(0, new NextAction("water shield", 22.0f), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("water shield", NextAction::array(0, new NextAction("water shield", 22.0f), nullptr)));
|
||||
}
|
||||
|
||||
void ShamanCureStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
{
|
||||
triggers.push_back(new TriggerNode("cure poison", NextAction::array(0, new NextAction("cure poison", 21.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("party member cure poison", NextAction::array(0, new NextAction("cure poison on party", 21.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("cleanse spirit poison", NextAction::array(0, new NextAction("cleanse spirit", 24.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("party member cleanse spirit poison", NextAction::array(0, new NextAction("cleanse spirit poison on party", 23.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("cure disease", NextAction::array(0, new NextAction("cure disease", 31.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("party member cure disease", NextAction::array(0, new NextAction("cure disease on party", 30.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("cleanse spirit disease", NextAction::array(0, new NextAction("cleanse spirit", 24.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("party member cleanse spirit disease", NextAction::array(0, new NextAction("cleanse spirit disease on party", 23.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("cleanse spirit curse", NextAction::array(0, new NextAction("cleanse spirit", 24.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("party member cleanse spirit curse", NextAction::array(0, new NextAction("cleanse spirit curse on party", 23.0f), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("cure poison", NextAction::array(0, new NextAction("cure poison", 21.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("party member cure poison",
|
||||
NextAction::array(0, new NextAction("cure poison on party", 21.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("cleanse spirit poison",
|
||||
NextAction::array(0, new NextAction("cleanse spirit", 24.0f), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("party member cleanse spirit poison",
|
||||
NextAction::array(0, new NextAction("cleanse spirit poison on party", 23.0f), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("cure disease", NextAction::array(0, new NextAction("cure disease", 31.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("party member cure disease",
|
||||
NextAction::array(0, new NextAction("cure disease on party", 30.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("cleanse spirit disease",
|
||||
NextAction::array(0, new NextAction("cleanse spirit", 24.0f), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("party member cleanse spirit disease",
|
||||
NextAction::array(0, new NextAction("cleanse spirit disease on party", 23.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("cleanse spirit curse",
|
||||
NextAction::array(0, new NextAction("cleanse spirit", 24.0f), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("party member cleanse spirit curse",
|
||||
NextAction::array(0, new NextAction("cleanse spirit curse on party", 23.0f), nullptr)));
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_GENERICSHAMANSTRATEGY_H
|
||||
@@ -11,37 +12,37 @@ class PlayerbotAI;
|
||||
|
||||
class GenericShamanStrategy : public CombatStrategy
|
||||
{
|
||||
public:
|
||||
GenericShamanStrategy(PlayerbotAI* botAI);
|
||||
public:
|
||||
GenericShamanStrategy(PlayerbotAI* botAI);
|
||||
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
};
|
||||
|
||||
class ShamanBuffDpsStrategy : public Strategy
|
||||
{
|
||||
public:
|
||||
ShamanBuffDpsStrategy(PlayerbotAI* botAI) : Strategy(botAI) { }
|
||||
public:
|
||||
ShamanBuffDpsStrategy(PlayerbotAI* botAI) : Strategy(botAI) {}
|
||||
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
std::string const getName() override { return "bdps"; }
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
std::string const getName() override { return "bdps"; }
|
||||
};
|
||||
|
||||
class ShamanBuffManaStrategy : public Strategy
|
||||
{
|
||||
public:
|
||||
ShamanBuffManaStrategy(PlayerbotAI* botAI) : Strategy(botAI) { }
|
||||
public:
|
||||
ShamanBuffManaStrategy(PlayerbotAI* botAI) : Strategy(botAI) {}
|
||||
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
std::string const getName() override { return "bmana"; }
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
std::string const getName() override { return "bmana"; }
|
||||
};
|
||||
|
||||
class ShamanCureStrategy : public Strategy
|
||||
{
|
||||
public:
|
||||
ShamanCureStrategy(PlayerbotAI* botAI) : Strategy(botAI) { }
|
||||
public:
|
||||
ShamanCureStrategy(PlayerbotAI* botAI) : Strategy(botAI) {}
|
||||
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
std::string const getName() override { return "cure"; }
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
std::string const getName() override { return "cure"; }
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,35 +1,37 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "HealShamanStrategy.h"
|
||||
|
||||
#include "Playerbots.h"
|
||||
|
||||
class HealShamanStrategyActionNodeFactory : public NamedObjectFactory<ActionNode>
|
||||
{
|
||||
public:
|
||||
HealShamanStrategyActionNodeFactory()
|
||||
{
|
||||
creators["earthliving weapon"] = &earthliving_weapon;
|
||||
creators["mana tide totem"] = &mana_tide_totem;
|
||||
}
|
||||
public:
|
||||
HealShamanStrategyActionNodeFactory()
|
||||
{
|
||||
creators["earthliving weapon"] = &earthliving_weapon;
|
||||
creators["mana tide totem"] = &mana_tide_totem;
|
||||
}
|
||||
|
||||
private:
|
||||
static ActionNode* earthliving_weapon([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode ("earthliving weapon",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ NextAction::array(0, new NextAction("flametongue weapon"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
private:
|
||||
static ActionNode* earthliving_weapon([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode("earthliving weapon",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ NextAction::array(0, new NextAction("flametongue weapon"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
|
||||
static ActionNode* mana_tide_totem([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode ("mana tide totem",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ NextAction::array(0, new NextAction("mana potion"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
static ActionNode* mana_tide_totem([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode("mana tide totem",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ NextAction::array(0, new NextAction("mana potion"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
};
|
||||
|
||||
HealShamanStrategy::HealShamanStrategy(PlayerbotAI* botAI) : GenericShamanStrategy(botAI)
|
||||
@@ -41,42 +43,44 @@ void HealShamanStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
{
|
||||
GenericShamanStrategy::InitTriggers(triggers);
|
||||
|
||||
// triggers.push_back(new TriggerNode("enemy out of spell", NextAction::array(0, new NextAction("reach spell", ACTION_NORMAL + 9), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("shaman weapon", NextAction::array(0, new NextAction("earthliving weapon", 22.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("main hand weapon no imbue", NextAction::array(0, new NextAction("earthliving weapon", 22.0f), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("enemy out of spell", NextAction::array(0, new NextAction("reach spell",
|
||||
// ACTION_NORMAL + 9), nullptr))); triggers.push_back(new TriggerNode("shaman weapon", NextAction::array(0, new
|
||||
// NextAction("earthliving weapon", 22.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("main hand weapon no imbue",
|
||||
NextAction::array(0, new NextAction("earthliving weapon", 22.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"group heal occasion",
|
||||
NextAction::array(0, new NextAction("riptide on party", 23.0f), new NextAction("chain heal", 22.0f), NULL)));
|
||||
|
||||
"group heal occasion",
|
||||
NextAction::array(0, new NextAction("riptide on party", 23.0f), new NextAction("chain heal", 22.0f), NULL)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"party member critical health",
|
||||
NextAction::array(0, new NextAction("riptide on party", 25.0f), new NextAction("healing wave on party", 24.0f), new NextAction("lesser healing wave on party", 23.0f), nullptr)));
|
||||
NextAction::array(0, new NextAction("riptide on party", 25.0f), new NextAction("healing wave on party", 24.0f),
|
||||
new NextAction("lesser healing wave on party", 23.0f), nullptr)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"party member low health",
|
||||
NextAction::array(0, new NextAction("riptide on party", 19.0f), new NextAction("healing wave on party", 18.0f), new NextAction("lesser healing wave on party", 17.0f), nullptr)));
|
||||
NextAction::array(0, new NextAction("riptide on party", 19.0f), new NextAction("healing wave on party", 18.0f),
|
||||
new NextAction("lesser healing wave on party", 17.0f), nullptr)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
triggers.push_back(new TriggerNode(
|
||||
"party member medium health",
|
||||
NextAction::array(0, new NextAction("riptide on party", 16.0f), new NextAction("healing wave on party", 15.0f), new NextAction("lesser healing wave on party", 14.0f), nullptr)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"party member almost full health",
|
||||
NextAction::array(0, new NextAction("riptide on party", 12.0f), new NextAction("lesser healing wave on party", 11.0f), nullptr)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"party member cleanse spirit poison",
|
||||
NextAction::array(0,
|
||||
new NextAction("cleanse spirit poison on party", ACTION_DISPEL + 2),
|
||||
new NextAction("cleansing totem", ACTION_DISPEL + 2),
|
||||
NULL)));
|
||||
NextAction::array(0, new NextAction("riptide on party", 16.0f), new NextAction("healing wave on party", 15.0f),
|
||||
new NextAction("lesser healing wave on party", 14.0f), nullptr)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"party member cleanse spirit disease",
|
||||
NextAction::array(0,
|
||||
new NextAction("cleanse spirit disease on party", ACTION_DISPEL + 2),
|
||||
new NextAction("cleansing totem", ACTION_DISPEL + 1),
|
||||
NULL)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("party member almost full health",
|
||||
NextAction::array(0, new NextAction("riptide on party", 12.0f),
|
||||
new NextAction("lesser healing wave on party", 11.0f), nullptr)));
|
||||
|
||||
triggers.push_back(
|
||||
new TriggerNode("party member cleanse spirit poison",
|
||||
NextAction::array(0, new NextAction("cleanse spirit poison on party", ACTION_DISPEL + 2),
|
||||
new NextAction("cleansing totem", ACTION_DISPEL + 2), NULL)));
|
||||
|
||||
triggers.push_back(
|
||||
new TriggerNode("party member cleanse spirit disease",
|
||||
NextAction::array(0, new NextAction("cleanse spirit disease on party", ACTION_DISPEL + 2),
|
||||
new NextAction("cleansing totem", ACTION_DISPEL + 1), NULL)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"party member cleanse spirit curse",
|
||||
@@ -89,16 +93,18 @@ void HealShamanStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
// triggers.push_back(new TriggerNode(
|
||||
// "no water totem",
|
||||
// NextAction::array(0, new NextAction("healing stream totem", 13.0f), NULL)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"earth shield on main tank",
|
||||
NextAction::array(0, new NextAction("earth shield on main tank", ACTION_HIGH + 7), NULL)));
|
||||
|
||||
triggers.push_back(new TriggerNode("enemy too close for spell", NextAction::array(0, new NextAction("flee", ACTION_MOVE + 9), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("earth shield on main tank",
|
||||
NextAction::array(0, new NextAction("earth shield on main tank", ACTION_HIGH + 7), NULL)));
|
||||
|
||||
triggers.push_back(new TriggerNode("enemy too close for spell",
|
||||
NextAction::array(0, new NextAction("flee", ACTION_MOVE + 9), nullptr)));
|
||||
|
||||
triggers.push_back(
|
||||
new TriggerNode("medium mana", NextAction::array(0, new NextAction("mana tide totem", ACTION_HIGH + 5), NULL)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"medium mana",
|
||||
NextAction::array(0, new NextAction("mana tide totem", ACTION_HIGH + 5), NULL)));
|
||||
|
||||
triggers.push_back(new TriggerNode("party member to heal out of spell range", NextAction::array(0, new NextAction("reach party member to heal", ACTION_CRITICAL_HEAL + 1), nullptr)));
|
||||
"party member to heal out of spell range",
|
||||
NextAction::array(0, new NextAction("reach party member to heal", ACTION_CRITICAL_HEAL + 1), nullptr)));
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_HEALSHAMANSTRATEGY_H
|
||||
@@ -12,12 +13,12 @@ class PlayerbotAI;
|
||||
|
||||
class HealShamanStrategy : public GenericShamanStrategy
|
||||
{
|
||||
public:
|
||||
HealShamanStrategy(PlayerbotAI* botAI);
|
||||
public:
|
||||
HealShamanStrategy(PlayerbotAI* botAI);
|
||||
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
std::string const getName() override { return "heal"; }
|
||||
uint32 GetType() const override { return STRATEGY_TYPE_RANGED | STRATEGY_TYPE_HEAL; }
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
std::string const getName() override { return "heal"; }
|
||||
uint32 GetType() const override { return STRATEGY_TYPE_RANGED | STRATEGY_TYPE_HEAL; }
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,45 +1,47 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "MeleeShamanStrategy.h"
|
||||
|
||||
#include "Playerbots.h"
|
||||
|
||||
class MeleeShamanStrategyActionNodeFactory : public NamedObjectFactory<ActionNode>
|
||||
{
|
||||
public:
|
||||
MeleeShamanStrategyActionNodeFactory()
|
||||
{
|
||||
creators["stormstrike"] = &stormstrike;
|
||||
creators["lava lash"] = &lava_lash;
|
||||
creators["magma totem"] = &magma_totem;
|
||||
}
|
||||
public:
|
||||
MeleeShamanStrategyActionNodeFactory()
|
||||
{
|
||||
creators["stormstrike"] = &stormstrike;
|
||||
creators["lava lash"] = &lava_lash;
|
||||
creators["magma totem"] = &magma_totem;
|
||||
}
|
||||
|
||||
private:
|
||||
static ActionNode* stormstrike([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode ("stormstrike",
|
||||
/*P*/ nullptr,
|
||||
// /*A*/ NextAction::array(0, new NextAction("lava lash"), nullptr),
|
||||
nullptr,
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
private:
|
||||
static ActionNode* stormstrike([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode("stormstrike",
|
||||
/*P*/ nullptr,
|
||||
// /*A*/ NextAction::array(0, new NextAction("lava lash"), nullptr),
|
||||
nullptr,
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
|
||||
static ActionNode* lava_lash([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode ("lava lash",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ NextAction::array(0, new NextAction("melee"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
static ActionNode* lava_lash([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode("lava lash",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ NextAction::array(0, new NextAction("melee"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
|
||||
static ActionNode* magma_totem([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode ("magma totem",
|
||||
/*P*/ NULL,
|
||||
/*A*/ NextAction::array(0, new NextAction("searing totem"), NULL),
|
||||
/*C*/ NULL);
|
||||
}
|
||||
static ActionNode* magma_totem([[maybe_unused]] PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode("magma totem",
|
||||
/*P*/ NULL,
|
||||
/*A*/ NextAction::array(0, new NextAction("searing totem"), NULL),
|
||||
/*C*/ NULL);
|
||||
}
|
||||
};
|
||||
|
||||
MeleeShamanStrategy::MeleeShamanStrategy(PlayerbotAI* botAI) : GenericShamanStrategy(botAI)
|
||||
@@ -49,57 +51,56 @@ MeleeShamanStrategy::MeleeShamanStrategy(PlayerbotAI* botAI) : GenericShamanStra
|
||||
|
||||
NextAction** MeleeShamanStrategy::getDefaultActions()
|
||||
{
|
||||
return NextAction::array(0,
|
||||
new NextAction("stormstrike", ACTION_DEFAULT + 0.5f),
|
||||
new NextAction("earth shock", ACTION_DEFAULT + 0.4f),
|
||||
new NextAction("feral spirit", ACTION_DEFAULT + 0.3f),
|
||||
new NextAction("fire nova", ACTION_DEFAULT + 0.2f),
|
||||
new NextAction("lava lash", ACTION_DEFAULT + 0.1f),
|
||||
new NextAction("melee", ACTION_DEFAULT),
|
||||
NULL);
|
||||
return NextAction::array(
|
||||
0, new NextAction("stormstrike", ACTION_DEFAULT + 0.5f), new NextAction("earth shock", ACTION_DEFAULT + 0.4f),
|
||||
new NextAction("feral spirit", ACTION_DEFAULT + 0.3f), new NextAction("fire nova", ACTION_DEFAULT + 0.2f),
|
||||
new NextAction("lava lash", ACTION_DEFAULT + 0.1f), new NextAction("melee", ACTION_DEFAULT), NULL);
|
||||
}
|
||||
|
||||
void MeleeShamanStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
{
|
||||
GenericShamanStrategy::InitTriggers(triggers);
|
||||
|
||||
//triggers.push_back(new TriggerNode("shaman weapon", NextAction::array(0, new NextAction("flametongue weapon", 22.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("main hand weapon no imbue", NextAction::array(0, new NextAction("windfury weapon", 22.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("off hand weapon no imbue", NextAction::array(0, new NextAction("flametongue weapon", 21.0f), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("searing totem", NextAction::array(0, new NextAction("reach melee", 22.0f), new NextAction("searing totem", 22.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("flame shock", NextAction::array(0, new NextAction("flame shock", 20.0f), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("shaman weapon", NextAction::array(0, new NextAction("flametongue
|
||||
// weapon", 22.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("main hand weapon no imbue",
|
||||
NextAction::array(0, new NextAction("windfury weapon", 22.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("off hand weapon no imbue",
|
||||
NextAction::array(0, new NextAction("flametongue weapon", 21.0f), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("searing totem", NextAction::array(0, new NextAction("reach melee", 22.0f),
|
||||
// new NextAction("searing totem", 22.0f), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("flame shock", NextAction::array(0, new NextAction("flame shock", 20.0f), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("maelstrom weapon", NextAction::array(0, new NextAction("lightning bolt", 25.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("not facing target",
|
||||
NextAction::array(0, new NextAction("set facing", ACTION_NORMAL + 7), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("enemy too close for melee", NextAction::array(0, new NextAction("move out of
|
||||
// enemy contact", ACTION_NORMAL + 8), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"maelstrom weapon",
|
||||
NextAction::array(0, new NextAction("lightning bolt", 25.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("not facing target", NextAction::array(0, new NextAction("set facing", ACTION_NORMAL + 7), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("enemy too close for melee", NextAction::array(0, new NextAction("move out of enemy contact", ACTION_NORMAL + 8), nullptr)));
|
||||
triggers.push_back(new TriggerNode("medium aoe", NextAction::array(0, new NextAction("strength of earth totem", ACTION_LIGHT_HEAL), nullptr)));
|
||||
triggers.push_back(new TriggerNode("enemy out of melee", NextAction::array(0, new NextAction("reach melee", ACTION_NORMAL + 8), nullptr)));
|
||||
"medium aoe", NextAction::array(0, new NextAction("strength of earth totem", ACTION_LIGHT_HEAL), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"enemy out of melee", NextAction::array(0, new NextAction("reach melee", ACTION_NORMAL + 8), nullptr)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"no fire totem",
|
||||
NextAction::array(0,
|
||||
new NextAction("reach melee", 23.0f),
|
||||
new NextAction("magma totem", 22.0f), nullptr)));
|
||||
NextAction::array(0, new NextAction("reach melee", 23.0f), new NextAction("magma totem", 22.0f), nullptr)));
|
||||
|
||||
triggers.push_back(new TriggerNode("fire elemental totem",
|
||||
NextAction::array(0,
|
||||
new NextAction("reach melee", 33.0f),
|
||||
new NextAction("fire elemental totem", 32.0f),
|
||||
nullptr)));
|
||||
triggers.push_back(new TriggerNode("fire elemental totem",
|
||||
NextAction::array(0, new NextAction("reach melee", 33.0f),
|
||||
new NextAction("fire elemental totem", 32.0f), nullptr)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"no air totem",
|
||||
NextAction::array(0, new NextAction("windfury totem", 20.0f), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("no air totem", NextAction::array(0, new NextAction("windfury totem", 20.0f), nullptr)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"medium mana",
|
||||
NextAction::array(0, new NextAction("shamanistic rage", 23.0f), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("medium mana", NextAction::array(0, new NextAction("shamanistic rage", 23.0f), nullptr)));
|
||||
}
|
||||
|
||||
void MeleeAoeShamanStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
{
|
||||
|
||||
// triggers.push_back(new TriggerNode("magma totem", NextAction::array(0, new NextAction("magma totem", 26.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("medium aoe", NextAction::array(0, new NextAction("fire nova", 25.0f), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("magma totem", NextAction::array(0, new NextAction("magma totem", 26.0f),
|
||||
// nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("medium aoe", NextAction::array(0, new NextAction("fire nova", 25.0f), nullptr)));
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_MELEESHAMANSTRATEGY_H
|
||||
@@ -11,22 +12,22 @@ class PlayerbotAI;
|
||||
|
||||
class MeleeShamanStrategy : public GenericShamanStrategy
|
||||
{
|
||||
public:
|
||||
MeleeShamanStrategy(PlayerbotAI* botAI);
|
||||
public:
|
||||
MeleeShamanStrategy(PlayerbotAI* botAI);
|
||||
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
NextAction** getDefaultActions() override;
|
||||
std::string const getName() override { return "melee"; }
|
||||
uint32 GetType() const override { return STRATEGY_TYPE_COMBAT | STRATEGY_TYPE_DPS | STRATEGY_TYPE_MELEE; }
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
NextAction** getDefaultActions() override;
|
||||
std::string const getName() override { return "melee"; }
|
||||
uint32 GetType() const override { return STRATEGY_TYPE_COMBAT | STRATEGY_TYPE_DPS | STRATEGY_TYPE_MELEE; }
|
||||
};
|
||||
|
||||
class MeleeAoeShamanStrategy : public CombatStrategy
|
||||
{
|
||||
public:
|
||||
MeleeAoeShamanStrategy(PlayerbotAI* botAI) : CombatStrategy(botAI) { }
|
||||
public:
|
||||
MeleeAoeShamanStrategy(PlayerbotAI* botAI) : CombatStrategy(botAI) {}
|
||||
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
std::string const getName() override { return "melee aoe"; }
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
std::string const getName() override { return "melee aoe"; }
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,19 +1,24 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "ShamanActions.h"
|
||||
|
||||
#include "Playerbots.h"
|
||||
|
||||
bool CastTotemAction::isUseful()
|
||||
{
|
||||
if (needLifeTime > 0.1f) {
|
||||
if (needLifeTime > 0.1f)
|
||||
{
|
||||
Unit* target = AI_VALUE(Unit*, "current target");
|
||||
if (!target) {
|
||||
if (!target)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
float dps = AI_VALUE(float, "expected group dps");
|
||||
if (target->GetHealth() / dps < needLifeTime) {
|
||||
if (target->GetHealth() / dps < needLifeTime)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -27,7 +32,8 @@ bool CastManaSpringTotemAction::isUseful()
|
||||
|
||||
bool CastFlametongueTotemAction::isUseful()
|
||||
{
|
||||
return CastTotemAction::isUseful() && !AI_VALUE2(bool, "has totem", "magma totem") && !botAI->HasAura("totem of wrath", bot);
|
||||
return CastTotemAction::isUseful() && !AI_VALUE2(bool, "has totem", "magma totem") &&
|
||||
!botAI->HasAura("totem of wrath", bot);
|
||||
}
|
||||
|
||||
bool CastSearingTotemAction::isUseful()
|
||||
@@ -35,12 +41,9 @@ bool CastSearingTotemAction::isUseful()
|
||||
return CastTotemAction::isUseful() && !AI_VALUE2(bool, "has totem", "flametongue totem");
|
||||
}
|
||||
|
||||
bool CastMagmaTotemAction::isUseful()
|
||||
{
|
||||
return CastTotemAction::isUseful() && !AI_VALUE2(bool, "has totem", name);
|
||||
}
|
||||
bool CastMagmaTotemAction::isUseful() { return CastTotemAction::isUseful() && !AI_VALUE2(bool, "has totem", name); }
|
||||
|
||||
bool CastCleansingTotemAction::isUseful()
|
||||
{
|
||||
return CastTotemAction::isUseful() && !AI_VALUE2(bool, "has totem", "mana tide totem");
|
||||
bool CastCleansingTotemAction::isUseful()
|
||||
{
|
||||
return CastTotemAction::isUseful() && !AI_VALUE2(bool, "has totem", "mana tide totem");
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_SHAMANACTIONS_H
|
||||
@@ -12,352 +13,382 @@ class PlayerbotAI;
|
||||
|
||||
class CastLesserHealingWaveAction : public CastHealingSpellAction
|
||||
{
|
||||
public:
|
||||
CastLesserHealingWaveAction(PlayerbotAI* botAI) : CastHealingSpellAction(botAI, "lesser healing wave") { }
|
||||
public:
|
||||
CastLesserHealingWaveAction(PlayerbotAI* botAI) : CastHealingSpellAction(botAI, "lesser healing wave") {}
|
||||
};
|
||||
|
||||
class CastLesserHealingWaveOnPartyAction : public HealPartyMemberAction
|
||||
{
|
||||
public:
|
||||
CastLesserHealingWaveOnPartyAction(PlayerbotAI* botAI) : HealPartyMemberAction(botAI, "lesser healing wave", 25.0f, HealingManaEfficiency::LOW) { }
|
||||
public:
|
||||
CastLesserHealingWaveOnPartyAction(PlayerbotAI* botAI)
|
||||
: HealPartyMemberAction(botAI, "lesser healing wave", 25.0f, HealingManaEfficiency::LOW)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
class CastHealingWaveAction : public CastHealingSpellAction
|
||||
{
|
||||
public:
|
||||
CastHealingWaveAction(PlayerbotAI* botAI) : CastHealingSpellAction(botAI, "healing wave") { }
|
||||
public:
|
||||
CastHealingWaveAction(PlayerbotAI* botAI) : CastHealingSpellAction(botAI, "healing wave") {}
|
||||
};
|
||||
|
||||
class CastHealingWaveOnPartyAction : public HealPartyMemberAction
|
||||
{
|
||||
public:
|
||||
CastHealingWaveOnPartyAction(PlayerbotAI* botAI) : HealPartyMemberAction(botAI, "healing wave", 50.0f, HealingManaEfficiency::MEDIUM) { }
|
||||
public:
|
||||
CastHealingWaveOnPartyAction(PlayerbotAI* botAI)
|
||||
: HealPartyMemberAction(botAI, "healing wave", 50.0f, HealingManaEfficiency::MEDIUM)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
class CastChainHealAction : public CastAoeHealSpellAction
|
||||
{
|
||||
public:
|
||||
CastChainHealAction(PlayerbotAI* botAI) : CastAoeHealSpellAction(botAI, "chain heal", 15.0f, HealingManaEfficiency::HIGH) { }
|
||||
public:
|
||||
CastChainHealAction(PlayerbotAI* botAI)
|
||||
: CastAoeHealSpellAction(botAI, "chain heal", 15.0f, HealingManaEfficiency::HIGH)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
class CastRiptideAction : public CastHealingSpellAction
|
||||
{
|
||||
public:
|
||||
CastRiptideAction(PlayerbotAI* botAI) : CastHealingSpellAction(botAI, "riptide") { }
|
||||
public:
|
||||
CastRiptideAction(PlayerbotAI* botAI) : CastHealingSpellAction(botAI, "riptide") {}
|
||||
};
|
||||
|
||||
class CastRiptideOnPartyAction : public HealPartyMemberAction
|
||||
{
|
||||
public:
|
||||
CastRiptideOnPartyAction(PlayerbotAI* botAI) : HealPartyMemberAction(botAI, "riptide", 15.0f, HealingManaEfficiency::VERY_HIGH) { }
|
||||
public:
|
||||
CastRiptideOnPartyAction(PlayerbotAI* botAI)
|
||||
: HealPartyMemberAction(botAI, "riptide", 15.0f, HealingManaEfficiency::VERY_HIGH)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
class CastEarthShieldAction : public CastBuffSpellAction
|
||||
{
|
||||
public:
|
||||
CastEarthShieldAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "earth shield") { }
|
||||
public:
|
||||
CastEarthShieldAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "earth shield") {}
|
||||
};
|
||||
|
||||
class CastEarthShieldOnPartyAction : public BuffOnPartyAction
|
||||
{
|
||||
public:
|
||||
CastEarthShieldOnPartyAction(PlayerbotAI* botAI) : BuffOnPartyAction(botAI, "earth shield") { }
|
||||
public:
|
||||
CastEarthShieldOnPartyAction(PlayerbotAI* botAI) : BuffOnPartyAction(botAI, "earth shield") {}
|
||||
};
|
||||
|
||||
class CastWaterShieldAction : public CastBuffSpellAction
|
||||
{
|
||||
public:
|
||||
CastWaterShieldAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "water shield") { }
|
||||
public:
|
||||
CastWaterShieldAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "water shield") {}
|
||||
};
|
||||
|
||||
class CastLightningShieldAction : public CastBuffSpellAction
|
||||
{
|
||||
public:
|
||||
CastLightningShieldAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "lightning shield") { }
|
||||
public:
|
||||
CastLightningShieldAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "lightning shield") {}
|
||||
};
|
||||
|
||||
class CastEarthlivingWeaponAction : public CastEnchantItemAction
|
||||
{
|
||||
public:
|
||||
CastEarthlivingWeaponAction(PlayerbotAI* botAI) : CastEnchantItemAction(botAI, "earthliving weapon") { }
|
||||
public:
|
||||
CastEarthlivingWeaponAction(PlayerbotAI* botAI) : CastEnchantItemAction(botAI, "earthliving weapon") {}
|
||||
};
|
||||
|
||||
class CastRockbiterWeaponAction : public CastEnchantItemAction
|
||||
{
|
||||
public:
|
||||
CastRockbiterWeaponAction(PlayerbotAI* botAI) : CastEnchantItemAction(botAI, "rockbiter weapon") { }
|
||||
public:
|
||||
CastRockbiterWeaponAction(PlayerbotAI* botAI) : CastEnchantItemAction(botAI, "rockbiter weapon") {}
|
||||
};
|
||||
|
||||
class CastFlametongueWeaponAction : public CastEnchantItemAction
|
||||
{
|
||||
public:
|
||||
CastFlametongueWeaponAction(PlayerbotAI* botAI) : CastEnchantItemAction(botAI, "flametongue weapon") { }
|
||||
public:
|
||||
CastFlametongueWeaponAction(PlayerbotAI* botAI) : CastEnchantItemAction(botAI, "flametongue weapon") {}
|
||||
};
|
||||
|
||||
class CastFrostbrandWeaponAction : public CastEnchantItemAction
|
||||
{
|
||||
public:
|
||||
CastFrostbrandWeaponAction(PlayerbotAI* botAI) : CastEnchantItemAction(botAI, "frostbrand weapon") { }
|
||||
public:
|
||||
CastFrostbrandWeaponAction(PlayerbotAI* botAI) : CastEnchantItemAction(botAI, "frostbrand weapon") {}
|
||||
};
|
||||
|
||||
class CastWindfuryWeaponAction : public CastEnchantItemAction
|
||||
{
|
||||
public:
|
||||
CastWindfuryWeaponAction(PlayerbotAI* botAI) : CastEnchantItemAction(botAI, "windfury weapon") { }
|
||||
public:
|
||||
CastWindfuryWeaponAction(PlayerbotAI* botAI) : CastEnchantItemAction(botAI, "windfury weapon") {}
|
||||
};
|
||||
|
||||
class CastTotemAction : public CastBuffSpellAction
|
||||
{
|
||||
public:
|
||||
CastTotemAction(PlayerbotAI* botAI, std::string const spell, std::string const buffName = "", float needLifeTime = 8.0f)
|
||||
: CastBuffSpellAction(botAI, spell), needLifeTime(needLifeTime) {
|
||||
if (buffName == "") {
|
||||
buff = spell;
|
||||
} else {
|
||||
buff = buffName;
|
||||
}
|
||||
public:
|
||||
CastTotemAction(PlayerbotAI* botAI, std::string const spell, std::string const buffName = "",
|
||||
float needLifeTime = 8.0f)
|
||||
: CastBuffSpellAction(botAI, spell), needLifeTime(needLifeTime)
|
||||
{
|
||||
if (buffName == "")
|
||||
{
|
||||
buff = spell;
|
||||
}
|
||||
else
|
||||
{
|
||||
buff = buffName;
|
||||
}
|
||||
}
|
||||
|
||||
bool isUseful() override;
|
||||
protected:
|
||||
float needLifeTime;
|
||||
std::string buff;
|
||||
bool isUseful() override;
|
||||
|
||||
protected:
|
||||
float needLifeTime;
|
||||
std::string buff;
|
||||
};
|
||||
|
||||
class CastStoneskinTotemAction : public CastTotemAction
|
||||
{
|
||||
public:
|
||||
CastStoneskinTotemAction(PlayerbotAI* botAI) : CastTotemAction(botAI, "stoneskin totem") { }
|
||||
public:
|
||||
CastStoneskinTotemAction(PlayerbotAI* botAI) : CastTotemAction(botAI, "stoneskin totem") {}
|
||||
};
|
||||
|
||||
class CastEarthbindTotemAction : public CastTotemAction
|
||||
{
|
||||
public:
|
||||
CastEarthbindTotemAction(PlayerbotAI* botAI) : CastTotemAction(botAI, "earthbind totem") { }
|
||||
public:
|
||||
CastEarthbindTotemAction(PlayerbotAI* botAI) : CastTotemAction(botAI, "earthbind totem") {}
|
||||
};
|
||||
|
||||
class CastStrengthOfEarthTotemAction : public CastTotemAction
|
||||
{
|
||||
public:
|
||||
CastStrengthOfEarthTotemAction(PlayerbotAI* botAI) : CastTotemAction(botAI, "strength of earth totem", "strength of earth", 20.0f) { }
|
||||
public:
|
||||
CastStrengthOfEarthTotemAction(PlayerbotAI* botAI)
|
||||
: CastTotemAction(botAI, "strength of earth totem", "strength of earth", 20.0f)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
class CastManaSpringTotemAction : public CastTotemAction
|
||||
{
|
||||
public:
|
||||
CastManaSpringTotemAction(PlayerbotAI* botAI) : CastTotemAction(botAI, "mana spring totem", "mana spring", 0.0f) { }
|
||||
public:
|
||||
CastManaSpringTotemAction(PlayerbotAI* botAI) : CastTotemAction(botAI, "mana spring totem", "mana spring", 0.0f) {}
|
||||
|
||||
bool isUseful() override;
|
||||
bool isUseful() override;
|
||||
};
|
||||
|
||||
class CastManaTideTotemAction : public CastTotemAction
|
||||
{
|
||||
public:
|
||||
CastManaTideTotemAction(PlayerbotAI* botAI) : CastTotemAction(botAI, "mana tide totem") { }
|
||||
public:
|
||||
CastManaTideTotemAction(PlayerbotAI* botAI) : CastTotemAction(botAI, "mana tide totem") {}
|
||||
|
||||
std::string const GetTargetName() override { return "self target"; }
|
||||
std::string const GetTargetName() override { return "self target"; }
|
||||
};
|
||||
|
||||
class CastHealingStreamTotemAction : public CastTotemAction
|
||||
{
|
||||
public:
|
||||
CastHealingStreamTotemAction(PlayerbotAI* botAI) : CastTotemAction(botAI, "healing stream totem") { }
|
||||
public:
|
||||
CastHealingStreamTotemAction(PlayerbotAI* botAI) : CastTotemAction(botAI, "healing stream totem") {}
|
||||
};
|
||||
|
||||
class CastCleansingTotemAction : public CastTotemAction
|
||||
{
|
||||
public:
|
||||
CastCleansingTotemAction(PlayerbotAI* botAI) : CastTotemAction(botAI, "cleansing totem") { }
|
||||
virtual bool isUseful();
|
||||
public:
|
||||
CastCleansingTotemAction(PlayerbotAI* botAI) : CastTotemAction(botAI, "cleansing totem") {}
|
||||
virtual bool isUseful();
|
||||
};
|
||||
|
||||
class CastFlametongueTotemAction : public CastTotemAction
|
||||
{
|
||||
public:
|
||||
CastFlametongueTotemAction(PlayerbotAI* botAI) : CastTotemAction(botAI, "flametongue totem", "", 20.0f) { }
|
||||
public:
|
||||
CastFlametongueTotemAction(PlayerbotAI* botAI) : CastTotemAction(botAI, "flametongue totem", "", 20.0f) {}
|
||||
|
||||
bool isUseful() override;
|
||||
bool isUseful() override;
|
||||
};
|
||||
|
||||
class CastWindfuryTotemAction : public CastTotemAction
|
||||
{
|
||||
public:
|
||||
CastWindfuryTotemAction(PlayerbotAI* botAI) : CastTotemAction(botAI, "windfury totem") { }
|
||||
public:
|
||||
CastWindfuryTotemAction(PlayerbotAI* botAI) : CastTotemAction(botAI, "windfury totem") {}
|
||||
};
|
||||
|
||||
class CastGraceOfAirTotemAction : public CastTotemAction
|
||||
{
|
||||
public:
|
||||
CastGraceOfAirTotemAction(PlayerbotAI* botAI) : CastTotemAction(botAI, "grace of air totem") { }
|
||||
public:
|
||||
CastGraceOfAirTotemAction(PlayerbotAI* botAI) : CastTotemAction(botAI, "grace of air totem") {}
|
||||
};
|
||||
|
||||
class CastSearingTotemAction : public CastTotemAction
|
||||
{
|
||||
public:
|
||||
CastSearingTotemAction(PlayerbotAI* botAI) : CastTotemAction(botAI, "searing totem", "", 0.0f) { }
|
||||
public:
|
||||
CastSearingTotemAction(PlayerbotAI* botAI) : CastTotemAction(botAI, "searing totem", "", 0.0f) {}
|
||||
|
||||
std::string const GetTargetName() override { return "self target"; }
|
||||
bool isUseful() override;
|
||||
std::string const GetTargetName() override { return "self target"; }
|
||||
bool isUseful() override;
|
||||
};
|
||||
|
||||
class CastMagmaTotemAction : public CastTotemAction
|
||||
{
|
||||
public:
|
||||
CastMagmaTotemAction(PlayerbotAI* botAI) : CastTotemAction(botAI, "magma totem", "", 0.0f) { }
|
||||
public:
|
||||
CastMagmaTotemAction(PlayerbotAI* botAI) : CastTotemAction(botAI, "magma totem", "", 0.0f) {}
|
||||
|
||||
std::string const GetTargetName() override { return "self target"; }
|
||||
bool isUseful() override;
|
||||
std::string const GetTargetName() override { return "self target"; }
|
||||
bool isUseful() override;
|
||||
};
|
||||
|
||||
class CastFireNovaAction : public CastSpellAction
|
||||
{
|
||||
public:
|
||||
CastFireNovaAction(PlayerbotAI* botAI) : CastSpellAction(botAI, "fire nova") { }
|
||||
public:
|
||||
CastFireNovaAction(PlayerbotAI* botAI) : CastSpellAction(botAI, "fire nova") {}
|
||||
};
|
||||
|
||||
class CastWindShearAction : public CastSpellAction
|
||||
{
|
||||
public:
|
||||
CastWindShearAction(PlayerbotAI* botAI) : CastSpellAction(botAI, "wind shear") { }
|
||||
public:
|
||||
CastWindShearAction(PlayerbotAI* botAI) : CastSpellAction(botAI, "wind shear") {}
|
||||
};
|
||||
|
||||
class CastAncestralSpiritAction : public ResurrectPartyMemberAction
|
||||
{
|
||||
public:
|
||||
CastAncestralSpiritAction(PlayerbotAI* botAI) : ResurrectPartyMemberAction(botAI, "ancestral spirit") { }
|
||||
public:
|
||||
CastAncestralSpiritAction(PlayerbotAI* botAI) : ResurrectPartyMemberAction(botAI, "ancestral spirit") {}
|
||||
};
|
||||
|
||||
class CastPurgeAction : public CastSpellAction
|
||||
{
|
||||
public:
|
||||
CastPurgeAction(PlayerbotAI* botAI) : CastSpellAction(botAI, "purge") { }
|
||||
public:
|
||||
CastPurgeAction(PlayerbotAI* botAI) : CastSpellAction(botAI, "purge") {}
|
||||
};
|
||||
|
||||
class CastStormstrikeAction : public CastMeleeSpellAction
|
||||
{
|
||||
public:
|
||||
CastStormstrikeAction(PlayerbotAI* botAI) : CastMeleeSpellAction(botAI, "stormstrike") { }
|
||||
public:
|
||||
CastStormstrikeAction(PlayerbotAI* botAI) : CastMeleeSpellAction(botAI, "stormstrike") {}
|
||||
};
|
||||
|
||||
class CastLavaLashAction : public CastMeleeSpellAction
|
||||
{
|
||||
public:
|
||||
CastLavaLashAction(PlayerbotAI* botAI) : CastMeleeSpellAction(botAI, "lava lash") { }
|
||||
public:
|
||||
CastLavaLashAction(PlayerbotAI* botAI) : CastMeleeSpellAction(botAI, "lava lash") {}
|
||||
};
|
||||
|
||||
class CastWaterBreathingAction : public CastBuffSpellAction
|
||||
{
|
||||
public:
|
||||
CastWaterBreathingAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "water breathing") { }
|
||||
public:
|
||||
CastWaterBreathingAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "water breathing") {}
|
||||
};
|
||||
|
||||
class CastWaterWalkingAction : public CastBuffSpellAction
|
||||
{
|
||||
public:
|
||||
CastWaterWalkingAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "water walking") { }
|
||||
public:
|
||||
CastWaterWalkingAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "water walking") {}
|
||||
};
|
||||
|
||||
class CastWaterBreathingOnPartyAction : public BuffOnPartyAction
|
||||
{
|
||||
public:
|
||||
CastWaterBreathingOnPartyAction(PlayerbotAI* botAI) : BuffOnPartyAction(botAI, "water breathing") { }
|
||||
public:
|
||||
CastWaterBreathingOnPartyAction(PlayerbotAI* botAI) : BuffOnPartyAction(botAI, "water breathing") {}
|
||||
};
|
||||
|
||||
class CastWaterWalkingOnPartyAction : public BuffOnPartyAction
|
||||
{
|
||||
public:
|
||||
CastWaterWalkingOnPartyAction(PlayerbotAI* botAI) : BuffOnPartyAction(botAI, "water walking") { }
|
||||
public:
|
||||
CastWaterWalkingOnPartyAction(PlayerbotAI* botAI) : BuffOnPartyAction(botAI, "water walking") {}
|
||||
};
|
||||
|
||||
class CastCleanseSpiritAction : public CastCureSpellAction
|
||||
{
|
||||
public:
|
||||
CastCleanseSpiritAction(PlayerbotAI* botAI) : CastCureSpellAction(botAI, "cleanse spirit") { }
|
||||
public:
|
||||
CastCleanseSpiritAction(PlayerbotAI* botAI) : CastCureSpellAction(botAI, "cleanse spirit") {}
|
||||
};
|
||||
|
||||
class CastCleanseSpiritPoisonOnPartyAction : public CurePartyMemberAction
|
||||
{
|
||||
public:
|
||||
CastCleanseSpiritPoisonOnPartyAction(PlayerbotAI* botAI) : CurePartyMemberAction(botAI, "cleanse spirit", DISPEL_POISON) { }
|
||||
public:
|
||||
CastCleanseSpiritPoisonOnPartyAction(PlayerbotAI* botAI)
|
||||
: CurePartyMemberAction(botAI, "cleanse spirit", DISPEL_POISON)
|
||||
{
|
||||
}
|
||||
|
||||
std::string const getName() override { return "cleanse spirit poison on party"; }
|
||||
std::string const getName() override { return "cleanse spirit poison on party"; }
|
||||
};
|
||||
|
||||
class CastCleanseSpiritCurseOnPartyAction : public CurePartyMemberAction
|
||||
{
|
||||
public:
|
||||
CastCleanseSpiritCurseOnPartyAction(PlayerbotAI* botAI) : CurePartyMemberAction(botAI, "cleanse spirit", DISPEL_CURSE) { }
|
||||
public:
|
||||
CastCleanseSpiritCurseOnPartyAction(PlayerbotAI* botAI)
|
||||
: CurePartyMemberAction(botAI, "cleanse spirit", DISPEL_CURSE)
|
||||
{
|
||||
}
|
||||
|
||||
std::string const getName() override { return "cleanse spirit curse on party"; }
|
||||
std::string const getName() override { return "cleanse spirit curse on party"; }
|
||||
};
|
||||
|
||||
class CastCleanseSpiritDiseaseOnPartyAction : public CurePartyMemberAction
|
||||
{
|
||||
public:
|
||||
CastCleanseSpiritDiseaseOnPartyAction(PlayerbotAI* botAI) : CurePartyMemberAction(botAI, "cleanse spirit", DISPEL_DISEASE) { }
|
||||
public:
|
||||
CastCleanseSpiritDiseaseOnPartyAction(PlayerbotAI* botAI)
|
||||
: CurePartyMemberAction(botAI, "cleanse spirit", DISPEL_DISEASE)
|
||||
{
|
||||
}
|
||||
|
||||
std::string const getName() override { return "cleanse spirit disease on party"; }
|
||||
std::string const getName() override { return "cleanse spirit disease on party"; }
|
||||
};
|
||||
|
||||
class CastFlameShockAction : public CastDebuffSpellAction
|
||||
{
|
||||
public:
|
||||
CastFlameShockAction(PlayerbotAI* botAI) : CastDebuffSpellAction(botAI, "flame shock", true) { }
|
||||
public:
|
||||
CastFlameShockAction(PlayerbotAI* botAI) : CastDebuffSpellAction(botAI, "flame shock", true) {}
|
||||
};
|
||||
|
||||
class CastEarthShockAction : public CastSpellAction
|
||||
{
|
||||
public:
|
||||
CastEarthShockAction(PlayerbotAI* botAI) : CastSpellAction(botAI, "earth shock") { }
|
||||
public:
|
||||
CastEarthShockAction(PlayerbotAI* botAI) : CastSpellAction(botAI, "earth shock") {}
|
||||
};
|
||||
|
||||
class CastFrostShockAction : public CastSnareSpellAction
|
||||
{
|
||||
public:
|
||||
CastFrostShockAction(PlayerbotAI* botAI) : CastSnareSpellAction(botAI, "frost shock") { }
|
||||
public:
|
||||
CastFrostShockAction(PlayerbotAI* botAI) : CastSnareSpellAction(botAI, "frost shock") {}
|
||||
};
|
||||
|
||||
class CastChainLightningAction : public CastSpellAction
|
||||
{
|
||||
public:
|
||||
CastChainLightningAction(PlayerbotAI* botAI) : CastSpellAction(botAI, "chain lightning") { }
|
||||
ActionThreatType getThreatType() override { return ActionThreatType::Aoe; }
|
||||
public:
|
||||
CastChainLightningAction(PlayerbotAI* botAI) : CastSpellAction(botAI, "chain lightning") {}
|
||||
ActionThreatType getThreatType() override { return ActionThreatType::Aoe; }
|
||||
};
|
||||
|
||||
class CastLightningBoltAction : public CastSpellAction
|
||||
{
|
||||
public:
|
||||
CastLightningBoltAction(PlayerbotAI* botAI) : CastSpellAction(botAI, "lightning bolt") { }
|
||||
public:
|
||||
CastLightningBoltAction(PlayerbotAI* botAI) : CastSpellAction(botAI, "lightning bolt") {}
|
||||
};
|
||||
|
||||
class CastThunderstormAction : public CastSpellAction
|
||||
{
|
||||
public:
|
||||
CastThunderstormAction(PlayerbotAI* botAI) : CastSpellAction(botAI, "thunderstorm") { }
|
||||
public:
|
||||
CastThunderstormAction(PlayerbotAI* botAI) : CastSpellAction(botAI, "thunderstorm") {}
|
||||
};
|
||||
|
||||
class CastHeroismAction : public CastBuffSpellAction
|
||||
{
|
||||
public:
|
||||
CastHeroismAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "heroism") { }
|
||||
public:
|
||||
CastHeroismAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "heroism") {}
|
||||
};
|
||||
|
||||
class CastBloodlustAction : public CastBuffSpellAction
|
||||
{
|
||||
public:
|
||||
CastBloodlustAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "bloodlust") { }
|
||||
public:
|
||||
CastBloodlustAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "bloodlust") {}
|
||||
};
|
||||
|
||||
class CastElementalMasteryAction : public CastBuffSpellAction
|
||||
{
|
||||
public:
|
||||
CastElementalMasteryAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "elemental mastery") { }
|
||||
public:
|
||||
CastElementalMasteryAction(PlayerbotAI* botAI) : CastBuffSpellAction(botAI, "elemental mastery") {}
|
||||
};
|
||||
|
||||
class CastWindShearOnEnemyHealerAction : public CastSpellOnEnemyHealerAction
|
||||
{
|
||||
public:
|
||||
CastWindShearOnEnemyHealerAction(PlayerbotAI* botAI) : CastSpellOnEnemyHealerAction(botAI, "wind shear") { }
|
||||
public:
|
||||
CastWindShearOnEnemyHealerAction(PlayerbotAI* botAI) : CastSpellOnEnemyHealerAction(botAI, "wind shear") {}
|
||||
};
|
||||
|
||||
CURE_ACTION(CastCurePoisonActionSham, "cure disease");
|
||||
@@ -368,47 +399,47 @@ CURE_PARTY_ACTION(CastCureDiseaseOnPartyActionSham, "cure disease", DISPEL_DISEA
|
||||
|
||||
class CastLavaBurstAction : public CastSpellAction
|
||||
{
|
||||
public:
|
||||
CastLavaBurstAction(PlayerbotAI* ai) : CastSpellAction(ai, "lava burst") {}
|
||||
public:
|
||||
CastLavaBurstAction(PlayerbotAI* ai) : CastSpellAction(ai, "lava burst") {}
|
||||
};
|
||||
|
||||
class CastEarthShieldOnMainTankAction : public BuffOnMainTankAction
|
||||
{
|
||||
public:
|
||||
CastEarthShieldOnMainTankAction(PlayerbotAI* ai) : BuffOnMainTankAction(ai, "earth shield", false) {}
|
||||
public:
|
||||
CastEarthShieldOnMainTankAction(PlayerbotAI* ai) : BuffOnMainTankAction(ai, "earth shield", false) {}
|
||||
};
|
||||
|
||||
class CastTotemOfWrathAction : public CastTotemAction
|
||||
{
|
||||
public:
|
||||
CastTotemOfWrathAction(PlayerbotAI* ai) : CastTotemAction(ai, "totem of wrath") {}
|
||||
virtual std::string const GetTargetName() override { return "self target"; }
|
||||
virtual bool isUseful() override { return CastTotemAction::isUseful(); }
|
||||
public:
|
||||
CastTotemOfWrathAction(PlayerbotAI* ai) : CastTotemAction(ai, "totem of wrath") {}
|
||||
virtual std::string const GetTargetName() override { return "self target"; }
|
||||
virtual bool isUseful() override { return CastTotemAction::isUseful(); }
|
||||
};
|
||||
|
||||
class CastFireElementalTotemAction : public CastTotemAction
|
||||
{
|
||||
public:
|
||||
CastFireElementalTotemAction(PlayerbotAI* ai) : CastTotemAction(ai, "fire elemental totem", "", 0.0f) {}
|
||||
virtual std::string const GetTargetName() override { return "self target"; }
|
||||
virtual bool isUseful() override { return CastTotemAction::isUseful(); }
|
||||
public:
|
||||
CastFireElementalTotemAction(PlayerbotAI* ai) : CastTotemAction(ai, "fire elemental totem", "", 0.0f) {}
|
||||
virtual std::string const GetTargetName() override { return "self target"; }
|
||||
virtual bool isUseful() override { return CastTotemAction::isUseful(); }
|
||||
};
|
||||
|
||||
class CastWrathOfAirTotemAction : public CastTotemAction
|
||||
{
|
||||
public:
|
||||
CastWrathOfAirTotemAction(PlayerbotAI* ai) : CastTotemAction(ai, "wrath of air totem", "wrath of air totem") {}
|
||||
public:
|
||||
CastWrathOfAirTotemAction(PlayerbotAI* ai) : CastTotemAction(ai, "wrath of air totem", "wrath of air totem") {}
|
||||
};
|
||||
|
||||
class CastShamanisticRageAction : public CastBuffSpellAction
|
||||
{
|
||||
public:
|
||||
CastShamanisticRageAction(PlayerbotAI* ai) : CastBuffSpellAction(ai, "shamanistic rage") {}
|
||||
public:
|
||||
CastShamanisticRageAction(PlayerbotAI* ai) : CastBuffSpellAction(ai, "shamanistic rage") {}
|
||||
};
|
||||
|
||||
class CastFeralSpiritAction : public CastSpellAction
|
||||
{
|
||||
public:
|
||||
CastFeralSpiritAction(PlayerbotAI* ai) : CastSpellAction(ai, "feral spirit") {}
|
||||
public:
|
||||
CastFeralSpiritAction(PlayerbotAI* ai) : CastSpellAction(ai, "feral spirit") {}
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -1,295 +1,322 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "ShamanAiObjectContext.h"
|
||||
|
||||
#include "CasterShamanStrategy.h"
|
||||
#include "HealShamanStrategy.h"
|
||||
#include "MeleeShamanStrategy.h"
|
||||
#include "NamedObjectContext.h"
|
||||
#include "Playerbots.h"
|
||||
#include "ShamanActions.h"
|
||||
#include "ShamanNonCombatStrategy.h"
|
||||
#include "ShamanTriggers.h"
|
||||
#include "TotemsShamanStrategy.h"
|
||||
#include "NamedObjectContext.h"
|
||||
#include "Playerbots.h"
|
||||
|
||||
class ShamanStrategyFactoryInternal : public NamedObjectContext<Strategy>
|
||||
{
|
||||
public:
|
||||
ShamanStrategyFactoryInternal()
|
||||
{
|
||||
creators["nc"] = &ShamanStrategyFactoryInternal::nc;
|
||||
creators["totems"] = &ShamanStrategyFactoryInternal::totems;
|
||||
creators["melee aoe"] = &ShamanStrategyFactoryInternal::melee_aoe;
|
||||
creators["caster aoe"] = &ShamanStrategyFactoryInternal::caster_aoe;
|
||||
creators["cure"] = &ShamanStrategyFactoryInternal::cure;
|
||||
}
|
||||
public:
|
||||
ShamanStrategyFactoryInternal()
|
||||
{
|
||||
creators["nc"] = &ShamanStrategyFactoryInternal::nc;
|
||||
creators["totems"] = &ShamanStrategyFactoryInternal::totems;
|
||||
creators["melee aoe"] = &ShamanStrategyFactoryInternal::melee_aoe;
|
||||
creators["caster aoe"] = &ShamanStrategyFactoryInternal::caster_aoe;
|
||||
creators["cure"] = &ShamanStrategyFactoryInternal::cure;
|
||||
}
|
||||
|
||||
private:
|
||||
static Strategy* nc(PlayerbotAI* botAI) { return new ShamanNonCombatStrategy(botAI); }
|
||||
static Strategy* totems(PlayerbotAI* botAI) { return new TotemsShamanStrategy(botAI); }
|
||||
static Strategy* melee_aoe(PlayerbotAI* botAI) { return new MeleeAoeShamanStrategy(botAI); }
|
||||
static Strategy* caster_aoe(PlayerbotAI* botAI) { return new CasterAoeShamanStrategy(botAI); }
|
||||
static Strategy* cure(PlayerbotAI* botAI) { return new ShamanCureStrategy(botAI); }
|
||||
private:
|
||||
static Strategy* nc(PlayerbotAI* botAI) { return new ShamanNonCombatStrategy(botAI); }
|
||||
static Strategy* totems(PlayerbotAI* botAI) { return new TotemsShamanStrategy(botAI); }
|
||||
static Strategy* melee_aoe(PlayerbotAI* botAI) { return new MeleeAoeShamanStrategy(botAI); }
|
||||
static Strategy* caster_aoe(PlayerbotAI* botAI) { return new CasterAoeShamanStrategy(botAI); }
|
||||
static Strategy* cure(PlayerbotAI* botAI) { return new ShamanCureStrategy(botAI); }
|
||||
};
|
||||
|
||||
class ShamanBuffStrategyFactoryInternal : public NamedObjectContext<Strategy>
|
||||
{
|
||||
public:
|
||||
ShamanBuffStrategyFactoryInternal() : NamedObjectContext<Strategy>(false, true)
|
||||
{
|
||||
creators["bmana"] = &ShamanBuffStrategyFactoryInternal::bmana;
|
||||
creators["bdps"] = &ShamanBuffStrategyFactoryInternal::bdps;
|
||||
}
|
||||
public:
|
||||
ShamanBuffStrategyFactoryInternal() : NamedObjectContext<Strategy>(false, true)
|
||||
{
|
||||
creators["bmana"] = &ShamanBuffStrategyFactoryInternal::bmana;
|
||||
creators["bdps"] = &ShamanBuffStrategyFactoryInternal::bdps;
|
||||
}
|
||||
|
||||
private:
|
||||
static Strategy* bmana(PlayerbotAI* botAI) { return new ShamanBuffManaStrategy(botAI); }
|
||||
static Strategy* bdps(PlayerbotAI* botAI) { return new ShamanBuffDpsStrategy(botAI); }
|
||||
private:
|
||||
static Strategy* bmana(PlayerbotAI* botAI) { return new ShamanBuffManaStrategy(botAI); }
|
||||
static Strategy* bdps(PlayerbotAI* botAI) { return new ShamanBuffDpsStrategy(botAI); }
|
||||
};
|
||||
|
||||
class ShamanCombatStrategyFactoryInternal : public NamedObjectContext<Strategy>
|
||||
{
|
||||
public:
|
||||
ShamanCombatStrategyFactoryInternal() : NamedObjectContext<Strategy>(false, true)
|
||||
{
|
||||
creators["heal"] = &ShamanCombatStrategyFactoryInternal::heal;
|
||||
creators["melee"] = &ShamanCombatStrategyFactoryInternal::dps;
|
||||
creators["dps"] = &ShamanCombatStrategyFactoryInternal::dps;
|
||||
creators["caster"] = &ShamanCombatStrategyFactoryInternal::caster;
|
||||
}
|
||||
public:
|
||||
ShamanCombatStrategyFactoryInternal() : NamedObjectContext<Strategy>(false, true)
|
||||
{
|
||||
creators["heal"] = &ShamanCombatStrategyFactoryInternal::heal;
|
||||
creators["melee"] = &ShamanCombatStrategyFactoryInternal::dps;
|
||||
creators["dps"] = &ShamanCombatStrategyFactoryInternal::dps;
|
||||
creators["caster"] = &ShamanCombatStrategyFactoryInternal::caster;
|
||||
}
|
||||
|
||||
private:
|
||||
static Strategy* heal(PlayerbotAI* botAI) { return new HealShamanStrategy(botAI); }
|
||||
static Strategy* dps(PlayerbotAI* botAI) { return new MeleeShamanStrategy(botAI); }
|
||||
static Strategy* caster(PlayerbotAI* botAI) { return new CasterShamanStrategy(botAI); }
|
||||
private:
|
||||
static Strategy* heal(PlayerbotAI* botAI) { return new HealShamanStrategy(botAI); }
|
||||
static Strategy* dps(PlayerbotAI* botAI) { return new MeleeShamanStrategy(botAI); }
|
||||
static Strategy* caster(PlayerbotAI* botAI) { return new CasterShamanStrategy(botAI); }
|
||||
};
|
||||
|
||||
class ShamanATriggerFactoryInternal : public NamedObjectContext<Trigger>
|
||||
{
|
||||
public:
|
||||
ShamanATriggerFactoryInternal()
|
||||
{
|
||||
creators["grace of air totem"] = &ShamanATriggerFactoryInternal::grace_of_air_totem;
|
||||
creators["windfury totem"] = &ShamanATriggerFactoryInternal::windfury_totem;
|
||||
creators["mana spring totem"] = &ShamanATriggerFactoryInternal::mana_spring_totem;
|
||||
creators["flametongue totem"] = &ShamanATriggerFactoryInternal::flametongue_totem;
|
||||
creators["strength of earth totem"] = &ShamanATriggerFactoryInternal::strength_of_earth_totem;
|
||||
creators["fire elemental totem"] = &ShamanATriggerFactoryInternal::fire_elemental_totem;
|
||||
creators["magma totem"] = &ShamanATriggerFactoryInternal::magma_totem;
|
||||
creators["searing totem"] = &ShamanATriggerFactoryInternal::searing_totem;
|
||||
creators["wind shear"] = &ShamanATriggerFactoryInternal::wind_shear;
|
||||
creators["purge"] = &ShamanATriggerFactoryInternal::purge;
|
||||
//creators["shaman weapon"] = &ShamanATriggerFactoryInternal::shaman_weapon;
|
||||
creators["main hand weapon no imbue"] = &ShamanATriggerFactoryInternal::main_hand_weapon_no_imbue;
|
||||
creators["off hand weapon no imbue"] = &ShamanATriggerFactoryInternal::off_hand_weapon_no_imbue;
|
||||
creators["water shield"] = &ShamanATriggerFactoryInternal::water_shield;
|
||||
creators["lightning shield"] = &ShamanATriggerFactoryInternal::lightning_shield;
|
||||
creators["water breathing"] = &ShamanATriggerFactoryInternal::water_breathing;
|
||||
creators["water walking"] = &ShamanATriggerFactoryInternal::water_walking;
|
||||
creators["water breathing on party"] = &ShamanATriggerFactoryInternal::water_breathing_on_party;
|
||||
creators["water walking on party"] = &ShamanATriggerFactoryInternal::water_walking_on_party;
|
||||
creators["cleanse spirit poison"] = &ShamanATriggerFactoryInternal::cleanse_poison;
|
||||
creators["cleanse spirit curse"] = &ShamanATriggerFactoryInternal::cleanse_curse;
|
||||
creators["cleanse spirit disease"] = &ShamanATriggerFactoryInternal::cleanse_disease;
|
||||
creators["party member cleanse spirit poison"] = &ShamanATriggerFactoryInternal::party_member_cleanse_poison;
|
||||
creators["party member cleanse spirit curse"] = &ShamanATriggerFactoryInternal::party_member_cleanse_curse;
|
||||
creators["party member cleanse spirit disease"] = &ShamanATriggerFactoryInternal::party_member_cleanse_disease;
|
||||
creators["shock"] = &ShamanATriggerFactoryInternal::shock;
|
||||
creators["frost shock snare"] = &ShamanATriggerFactoryInternal::frost_shock_snare;
|
||||
creators["heroism"] = &ShamanATriggerFactoryInternal::heroism;
|
||||
creators["bloodlust"] = &ShamanATriggerFactoryInternal::bloodlust;
|
||||
creators["elemental mastery"] = &ShamanATriggerFactoryInternal::elemental_mastery;
|
||||
creators["wind shear on enemy healer"] = &ShamanATriggerFactoryInternal::wind_shear_on_enemy_healer;
|
||||
creators["cure poison"] = &ShamanATriggerFactoryInternal::cure_poison;
|
||||
creators["party member cure poison"] = &ShamanATriggerFactoryInternal::party_member_cure_poison;
|
||||
creators["cure disease"] = &ShamanATriggerFactoryInternal::cure_disease;
|
||||
creators["party member cure disease"] = &ShamanATriggerFactoryInternal::party_member_cure_disease;
|
||||
creators["no fire totem"] = &ShamanATriggerFactoryInternal::no_fire_totem;
|
||||
creators["no water totem"] = &ShamanATriggerFactoryInternal::no_water_totem;
|
||||
creators["no air totem"] = &ShamanATriggerFactoryInternal::no_air_totem;
|
||||
creators["earth shield on main tank"] = &ShamanATriggerFactoryInternal::earth_shield_on_main_tank;
|
||||
creators["maelstrom weapon"] = &ShamanATriggerFactoryInternal::maelstrom_weapon;
|
||||
creators["flame shock"] = &ShamanATriggerFactoryInternal::flame_shock;
|
||||
creators["wrath of air totem"] = &ShamanATriggerFactoryInternal::wrath_of_air_totem;
|
||||
}
|
||||
public:
|
||||
ShamanATriggerFactoryInternal()
|
||||
{
|
||||
creators["grace of air totem"] = &ShamanATriggerFactoryInternal::grace_of_air_totem;
|
||||
creators["windfury totem"] = &ShamanATriggerFactoryInternal::windfury_totem;
|
||||
creators["mana spring totem"] = &ShamanATriggerFactoryInternal::mana_spring_totem;
|
||||
creators["flametongue totem"] = &ShamanATriggerFactoryInternal::flametongue_totem;
|
||||
creators["strength of earth totem"] = &ShamanATriggerFactoryInternal::strength_of_earth_totem;
|
||||
creators["fire elemental totem"] = &ShamanATriggerFactoryInternal::fire_elemental_totem;
|
||||
creators["magma totem"] = &ShamanATriggerFactoryInternal::magma_totem;
|
||||
creators["searing totem"] = &ShamanATriggerFactoryInternal::searing_totem;
|
||||
creators["wind shear"] = &ShamanATriggerFactoryInternal::wind_shear;
|
||||
creators["purge"] = &ShamanATriggerFactoryInternal::purge;
|
||||
// creators["shaman weapon"] = &ShamanATriggerFactoryInternal::shaman_weapon;
|
||||
creators["main hand weapon no imbue"] = &ShamanATriggerFactoryInternal::main_hand_weapon_no_imbue;
|
||||
creators["off hand weapon no imbue"] = &ShamanATriggerFactoryInternal::off_hand_weapon_no_imbue;
|
||||
creators["water shield"] = &ShamanATriggerFactoryInternal::water_shield;
|
||||
creators["lightning shield"] = &ShamanATriggerFactoryInternal::lightning_shield;
|
||||
creators["water breathing"] = &ShamanATriggerFactoryInternal::water_breathing;
|
||||
creators["water walking"] = &ShamanATriggerFactoryInternal::water_walking;
|
||||
creators["water breathing on party"] = &ShamanATriggerFactoryInternal::water_breathing_on_party;
|
||||
creators["water walking on party"] = &ShamanATriggerFactoryInternal::water_walking_on_party;
|
||||
creators["cleanse spirit poison"] = &ShamanATriggerFactoryInternal::cleanse_poison;
|
||||
creators["cleanse spirit curse"] = &ShamanATriggerFactoryInternal::cleanse_curse;
|
||||
creators["cleanse spirit disease"] = &ShamanATriggerFactoryInternal::cleanse_disease;
|
||||
creators["party member cleanse spirit poison"] = &ShamanATriggerFactoryInternal::party_member_cleanse_poison;
|
||||
creators["party member cleanse spirit curse"] = &ShamanATriggerFactoryInternal::party_member_cleanse_curse;
|
||||
creators["party member cleanse spirit disease"] = &ShamanATriggerFactoryInternal::party_member_cleanse_disease;
|
||||
creators["shock"] = &ShamanATriggerFactoryInternal::shock;
|
||||
creators["frost shock snare"] = &ShamanATriggerFactoryInternal::frost_shock_snare;
|
||||
creators["heroism"] = &ShamanATriggerFactoryInternal::heroism;
|
||||
creators["bloodlust"] = &ShamanATriggerFactoryInternal::bloodlust;
|
||||
creators["elemental mastery"] = &ShamanATriggerFactoryInternal::elemental_mastery;
|
||||
creators["wind shear on enemy healer"] = &ShamanATriggerFactoryInternal::wind_shear_on_enemy_healer;
|
||||
creators["cure poison"] = &ShamanATriggerFactoryInternal::cure_poison;
|
||||
creators["party member cure poison"] = &ShamanATriggerFactoryInternal::party_member_cure_poison;
|
||||
creators["cure disease"] = &ShamanATriggerFactoryInternal::cure_disease;
|
||||
creators["party member cure disease"] = &ShamanATriggerFactoryInternal::party_member_cure_disease;
|
||||
creators["no fire totem"] = &ShamanATriggerFactoryInternal::no_fire_totem;
|
||||
creators["no water totem"] = &ShamanATriggerFactoryInternal::no_water_totem;
|
||||
creators["no air totem"] = &ShamanATriggerFactoryInternal::no_air_totem;
|
||||
creators["earth shield on main tank"] = &ShamanATriggerFactoryInternal::earth_shield_on_main_tank;
|
||||
creators["maelstrom weapon"] = &ShamanATriggerFactoryInternal::maelstrom_weapon;
|
||||
creators["flame shock"] = &ShamanATriggerFactoryInternal::flame_shock;
|
||||
creators["wrath of air totem"] = &ShamanATriggerFactoryInternal::wrath_of_air_totem;
|
||||
}
|
||||
|
||||
private:
|
||||
static Trigger* maelstrom_weapon(PlayerbotAI* botAI) { return new MaelstromWeaponTrigger(botAI); }
|
||||
static Trigger* heroism(PlayerbotAI* botAI) { return new HeroismTrigger(botAI); }
|
||||
static Trigger* bloodlust(PlayerbotAI* botAI) { return new BloodlustTrigger(botAI); }
|
||||
static Trigger* elemental_mastery(PlayerbotAI* botAI) { return new ElementalMasteryTrigger(botAI); }
|
||||
static Trigger* party_member_cleanse_disease(PlayerbotAI* botAI) { return new PartyMemberCleanseSpiritDiseaseTrigger(botAI); }
|
||||
static Trigger* party_member_cleanse_curse(PlayerbotAI* botAI) { return new PartyMemberCleanseSpiritCurseTrigger(botAI); }
|
||||
static Trigger* party_member_cleanse_poison(PlayerbotAI* botAI) { return new PartyMemberCleanseSpiritPoisonTrigger(botAI); }
|
||||
static Trigger* cleanse_disease(PlayerbotAI* botAI) { return new CleanseSpiritDiseaseTrigger(botAI); }
|
||||
static Trigger* cleanse_curse(PlayerbotAI* botAI) { return new CleanseSpiritCurseTrigger(botAI); }
|
||||
static Trigger* cleanse_poison(PlayerbotAI* botAI) { return new CleanseSpiritPoisonTrigger(botAI); }
|
||||
static Trigger* water_breathing(PlayerbotAI* botAI) { return new WaterBreathingTrigger(botAI); }
|
||||
static Trigger* water_walking(PlayerbotAI* botAI) { return new WaterWalkingTrigger(botAI); }
|
||||
static Trigger* water_breathing_on_party(PlayerbotAI* botAI) { return new WaterBreathingOnPartyTrigger(botAI); }
|
||||
static Trigger* water_walking_on_party(PlayerbotAI* botAI) { return new WaterWalkingOnPartyTrigger(botAI); }
|
||||
static Trigger* windfury_totem(PlayerbotAI* botAI) { return new WindfuryTotemTrigger(botAI); }
|
||||
static Trigger* grace_of_air_totem(PlayerbotAI* botAI) { return new GraceOfAirTotemTrigger(botAI); }
|
||||
static Trigger* mana_spring_totem(PlayerbotAI* botAI) { return new ManaSpringTotemTrigger(botAI); }
|
||||
static Trigger* flametongue_totem(PlayerbotAI* botAI) { return new FlametongueTotemTrigger(botAI); }
|
||||
static Trigger* strength_of_earth_totem(PlayerbotAI* botAI) { return new StrengthOfEarthTotemTrigger(botAI); }
|
||||
static Trigger* fire_elemental_totem(PlayerbotAI* botAI) { return new FireElementalTotemTrigger(botAI); }
|
||||
static Trigger* magma_totem(PlayerbotAI* botAI) { return new MagmaTotemTrigger(botAI); }
|
||||
static Trigger* searing_totem(PlayerbotAI* botAI) { return new SearingTotemTrigger(botAI); }
|
||||
static Trigger* wind_shear(PlayerbotAI* botAI) { return new WindShearInterruptSpellTrigger(botAI); }
|
||||
static Trigger* purge(PlayerbotAI* botAI) { return new PurgeTrigger(botAI); }
|
||||
//static Trigger* shaman_weapon(PlayerbotAI* botAI) { return new ShamanWeaponTrigger(botAI); }
|
||||
static Trigger* main_hand_weapon_no_imbue(PlayerbotAI* botAI) { return new MainHandWeaponNoImbueTrigger(botAI); }
|
||||
static Trigger* off_hand_weapon_no_imbue(PlayerbotAI* botAI) { return new OffHandWeaponNoImbueTrigger(botAI); }
|
||||
static Trigger* water_shield(PlayerbotAI* botAI) { return new WaterShieldTrigger(botAI); }
|
||||
static Trigger* lightning_shield(PlayerbotAI* botAI) { return new LightningShieldTrigger(botAI); }
|
||||
static Trigger* shock(PlayerbotAI* botAI) { return new ShockTrigger(botAI); }
|
||||
static Trigger* frost_shock_snare(PlayerbotAI* botAI) { return new FrostShockSnareTrigger(botAI); }
|
||||
static Trigger* wind_shear_on_enemy_healer(PlayerbotAI* botAI) { return new WindShearInterruptEnemyHealerSpellTrigger(botAI); }
|
||||
static Trigger* cure_poison(PlayerbotAI* botAI) { return new CurePoisonTrigger(botAI); }
|
||||
static Trigger* party_member_cure_poison(PlayerbotAI* botAI) { return new PartyMemberCurePoisonTrigger(botAI); }
|
||||
static Trigger* cure_disease(PlayerbotAI* botAI) { return new CureDiseaseTrigger(botAI); }
|
||||
static Trigger* party_member_cure_disease(PlayerbotAI* botAI) { return new PartyMemberCureDiseaseTrigger(botAI); }
|
||||
static Trigger* no_fire_totem(PlayerbotAI* ai) { return new NoFireTotemTrigger(ai); }
|
||||
static Trigger* no_water_totem(PlayerbotAI* ai) { return new NoWaterTotemTrigger(ai); }
|
||||
static Trigger* no_air_totem(PlayerbotAI* ai) { return new NoAirTotemTrigger(ai); }
|
||||
static Trigger* earth_shield_on_main_tank(PlayerbotAI* ai) { return new EarthShieldOnMainTankTrigger(ai); }
|
||||
static Trigger* flame_shock(PlayerbotAI* ai) { return new FlameShockTrigger(ai); }
|
||||
static Trigger* wrath_of_air_totem(PlayerbotAI* ai) { return new WrathOfAirTotemTrigger(ai); }
|
||||
private:
|
||||
static Trigger* maelstrom_weapon(PlayerbotAI* botAI) { return new MaelstromWeaponTrigger(botAI); }
|
||||
static Trigger* heroism(PlayerbotAI* botAI) { return new HeroismTrigger(botAI); }
|
||||
static Trigger* bloodlust(PlayerbotAI* botAI) { return new BloodlustTrigger(botAI); }
|
||||
static Trigger* elemental_mastery(PlayerbotAI* botAI) { return new ElementalMasteryTrigger(botAI); }
|
||||
static Trigger* party_member_cleanse_disease(PlayerbotAI* botAI)
|
||||
{
|
||||
return new PartyMemberCleanseSpiritDiseaseTrigger(botAI);
|
||||
}
|
||||
static Trigger* party_member_cleanse_curse(PlayerbotAI* botAI)
|
||||
{
|
||||
return new PartyMemberCleanseSpiritCurseTrigger(botAI);
|
||||
}
|
||||
static Trigger* party_member_cleanse_poison(PlayerbotAI* botAI)
|
||||
{
|
||||
return new PartyMemberCleanseSpiritPoisonTrigger(botAI);
|
||||
}
|
||||
static Trigger* cleanse_disease(PlayerbotAI* botAI) { return new CleanseSpiritDiseaseTrigger(botAI); }
|
||||
static Trigger* cleanse_curse(PlayerbotAI* botAI) { return new CleanseSpiritCurseTrigger(botAI); }
|
||||
static Trigger* cleanse_poison(PlayerbotAI* botAI) { return new CleanseSpiritPoisonTrigger(botAI); }
|
||||
static Trigger* water_breathing(PlayerbotAI* botAI) { return new WaterBreathingTrigger(botAI); }
|
||||
static Trigger* water_walking(PlayerbotAI* botAI) { return new WaterWalkingTrigger(botAI); }
|
||||
static Trigger* water_breathing_on_party(PlayerbotAI* botAI) { return new WaterBreathingOnPartyTrigger(botAI); }
|
||||
static Trigger* water_walking_on_party(PlayerbotAI* botAI) { return new WaterWalkingOnPartyTrigger(botAI); }
|
||||
static Trigger* windfury_totem(PlayerbotAI* botAI) { return new WindfuryTotemTrigger(botAI); }
|
||||
static Trigger* grace_of_air_totem(PlayerbotAI* botAI) { return new GraceOfAirTotemTrigger(botAI); }
|
||||
static Trigger* mana_spring_totem(PlayerbotAI* botAI) { return new ManaSpringTotemTrigger(botAI); }
|
||||
static Trigger* flametongue_totem(PlayerbotAI* botAI) { return new FlametongueTotemTrigger(botAI); }
|
||||
static Trigger* strength_of_earth_totem(PlayerbotAI* botAI) { return new StrengthOfEarthTotemTrigger(botAI); }
|
||||
static Trigger* fire_elemental_totem(PlayerbotAI* botAI) { return new FireElementalTotemTrigger(botAI); }
|
||||
static Trigger* magma_totem(PlayerbotAI* botAI) { return new MagmaTotemTrigger(botAI); }
|
||||
static Trigger* searing_totem(PlayerbotAI* botAI) { return new SearingTotemTrigger(botAI); }
|
||||
static Trigger* wind_shear(PlayerbotAI* botAI) { return new WindShearInterruptSpellTrigger(botAI); }
|
||||
static Trigger* purge(PlayerbotAI* botAI) { return new PurgeTrigger(botAI); }
|
||||
// static Trigger* shaman_weapon(PlayerbotAI* botAI) { return new ShamanWeaponTrigger(botAI); }
|
||||
static Trigger* main_hand_weapon_no_imbue(PlayerbotAI* botAI) { return new MainHandWeaponNoImbueTrigger(botAI); }
|
||||
static Trigger* off_hand_weapon_no_imbue(PlayerbotAI* botAI) { return new OffHandWeaponNoImbueTrigger(botAI); }
|
||||
static Trigger* water_shield(PlayerbotAI* botAI) { return new WaterShieldTrigger(botAI); }
|
||||
static Trigger* lightning_shield(PlayerbotAI* botAI) { return new LightningShieldTrigger(botAI); }
|
||||
static Trigger* shock(PlayerbotAI* botAI) { return new ShockTrigger(botAI); }
|
||||
static Trigger* frost_shock_snare(PlayerbotAI* botAI) { return new FrostShockSnareTrigger(botAI); }
|
||||
static Trigger* wind_shear_on_enemy_healer(PlayerbotAI* botAI)
|
||||
{
|
||||
return new WindShearInterruptEnemyHealerSpellTrigger(botAI);
|
||||
}
|
||||
static Trigger* cure_poison(PlayerbotAI* botAI) { return new CurePoisonTrigger(botAI); }
|
||||
static Trigger* party_member_cure_poison(PlayerbotAI* botAI) { return new PartyMemberCurePoisonTrigger(botAI); }
|
||||
static Trigger* cure_disease(PlayerbotAI* botAI) { return new CureDiseaseTrigger(botAI); }
|
||||
static Trigger* party_member_cure_disease(PlayerbotAI* botAI) { return new PartyMemberCureDiseaseTrigger(botAI); }
|
||||
static Trigger* no_fire_totem(PlayerbotAI* ai) { return new NoFireTotemTrigger(ai); }
|
||||
static Trigger* no_water_totem(PlayerbotAI* ai) { return new NoWaterTotemTrigger(ai); }
|
||||
static Trigger* no_air_totem(PlayerbotAI* ai) { return new NoAirTotemTrigger(ai); }
|
||||
static Trigger* earth_shield_on_main_tank(PlayerbotAI* ai) { return new EarthShieldOnMainTankTrigger(ai); }
|
||||
static Trigger* flame_shock(PlayerbotAI* ai) { return new FlameShockTrigger(ai); }
|
||||
static Trigger* wrath_of_air_totem(PlayerbotAI* ai) { return new WrathOfAirTotemTrigger(ai); }
|
||||
};
|
||||
|
||||
class ShamanAiObjectContextInternal : public NamedObjectContext<Action>
|
||||
{
|
||||
public:
|
||||
ShamanAiObjectContextInternal()
|
||||
{
|
||||
creators["water shield"] = &ShamanAiObjectContextInternal::water_shield;
|
||||
creators["lightning shield"] = &ShamanAiObjectContextInternal::lightning_shield;
|
||||
creators["strength of earth totem"] = &ShamanAiObjectContextInternal::strength_of_earth_totem;
|
||||
creators["flametongue totem"] = &ShamanAiObjectContextInternal::flametongue_totem;
|
||||
creators["searing totem"] = &ShamanAiObjectContextInternal::searing_totem;
|
||||
creators["magma totem"] = &ShamanAiObjectContextInternal::magma_totem;
|
||||
creators["windfury totem"] = &ShamanAiObjectContextInternal::windfury_totem;
|
||||
creators["grace of air totem"] = &ShamanAiObjectContextInternal::grace_of_air_totem;
|
||||
creators["mana spring totem"] = &ShamanAiObjectContextInternal::mana_spring_totem;
|
||||
creators["mana tide totem"] = &ShamanAiObjectContextInternal::mana_tide_totem;
|
||||
creators["earthbind totem"] = &ShamanAiObjectContextInternal::earthbind_totem;
|
||||
creators["healing stream totem"] = &ShamanAiObjectContextInternal::healing_stream_totem;
|
||||
creators["wind shear"] = &ShamanAiObjectContextInternal::wind_shear;
|
||||
creators["wind shear on enemy healer"] = &ShamanAiObjectContextInternal::wind_shear_on_enemy_healer;
|
||||
creators["rockbiter weapon"] = &ShamanAiObjectContextInternal::rockbiter_weapon;
|
||||
creators["flametongue weapon"] = &ShamanAiObjectContextInternal::flametongue_weapon;
|
||||
creators["frostbrand weapon"] = &ShamanAiObjectContextInternal::frostbrand_weapon;
|
||||
creators["windfury weapon"] = &ShamanAiObjectContextInternal::windfury_weapon;
|
||||
creators["earthliving weapon"] = &ShamanAiObjectContextInternal::earthliving_weapon;
|
||||
creators["purge"] = &ShamanAiObjectContextInternal::purge;
|
||||
creators["healing wave"] = &ShamanAiObjectContextInternal::healing_wave;
|
||||
creators["lesser healing wave"] = &ShamanAiObjectContextInternal::lesser_healing_wave;
|
||||
creators["healing wave on party"] = &ShamanAiObjectContextInternal::healing_wave_on_party;
|
||||
creators["lesser healing wave on party"] = &ShamanAiObjectContextInternal::lesser_healing_wave_on_party;
|
||||
creators["earth shield"] = &ShamanAiObjectContextInternal::earth_shield;
|
||||
creators["earth shield on party"] = &ShamanAiObjectContextInternal::earth_shield_on_party;
|
||||
creators["chain heal"] = &ShamanAiObjectContextInternal::chain_heal;
|
||||
creators["riptide"] = &ShamanAiObjectContextInternal::riptide;
|
||||
creators["riptide on party"] = &ShamanAiObjectContextInternal::riptide_on_party;
|
||||
creators["stormstrike"] = &ShamanAiObjectContextInternal::stormstrike;
|
||||
creators["lava lash"] = &ShamanAiObjectContextInternal::lava_lash;
|
||||
creators["fire nova"] = &ShamanAiObjectContextInternal::fire_nova;
|
||||
creators["ancestral spirit"] = &ShamanAiObjectContextInternal::ancestral_spirit;
|
||||
creators["water walking"] = &ShamanAiObjectContextInternal::water_walking;
|
||||
creators["water breathing"] = &ShamanAiObjectContextInternal::water_breathing;
|
||||
creators["water walking on party"] = &ShamanAiObjectContextInternal::water_walking_on_party;
|
||||
creators["water breathing on party"] = &ShamanAiObjectContextInternal::water_breathing_on_party;
|
||||
creators["cleanse spirit"] = &ShamanAiObjectContextInternal::cleanse_spirit;
|
||||
creators["cleanse spirit poison on party"] = &ShamanAiObjectContextInternal::cleanse_spirit_poison_on_party;
|
||||
creators["cleanse spirit disease on party"] = &ShamanAiObjectContextInternal::cleanse_spirit_disease_on_party;
|
||||
creators["cleanse spirit curse on party"] = &ShamanAiObjectContextInternal::cleanse_spirit_curse_on_party;
|
||||
creators["flame shock"] = &ShamanAiObjectContextInternal::flame_shock;
|
||||
creators["earth shock"] = &ShamanAiObjectContextInternal::earth_shock;
|
||||
creators["frost shock"] = &ShamanAiObjectContextInternal::frost_shock;
|
||||
creators["chain lightning"] = &ShamanAiObjectContextInternal::chain_lightning;
|
||||
creators["lightning bolt"] = &ShamanAiObjectContextInternal::lightning_bolt;
|
||||
creators["thunderstorm"] = &ShamanAiObjectContextInternal::thunderstorm;
|
||||
creators["heroism"] = &ShamanAiObjectContextInternal::heroism;
|
||||
creators["bloodlust"] = &ShamanAiObjectContextInternal::bloodlust;
|
||||
creators["elemental mastery"] = &ShamanAiObjectContextInternal::elemental_mastery;
|
||||
creators["cure disease"] = &ShamanAiObjectContextInternal::cure_disease;
|
||||
creators["cure disease on party"] = &ShamanAiObjectContextInternal::cure_disease_on_party;
|
||||
creators["cure poison"] = &ShamanAiObjectContextInternal::cure_poison;
|
||||
creators["cure poison on party"] = &ShamanAiObjectContextInternal::cure_poison_on_party;
|
||||
creators["lava burst"] = &ShamanAiObjectContextInternal::lava_burst;
|
||||
creators["earth shield on main tank"] = &ShamanAiObjectContextInternal::earth_shield_on_main_tank;
|
||||
creators["fire elemental totem"] = &ShamanAiObjectContextInternal::fire_elemental_totem;
|
||||
creators["totem of wrath"] = &ShamanAiObjectContextInternal::totem_of_wrath;
|
||||
creators["wrath of air totem"] = &ShamanAiObjectContextInternal::wrath_of_air_totem;
|
||||
creators["shamanistic rage"] = &ShamanAiObjectContextInternal::shamanistic_rage;
|
||||
creators["feral spirit"] = &ShamanAiObjectContextInternal::feral_spirit;
|
||||
}
|
||||
public:
|
||||
ShamanAiObjectContextInternal()
|
||||
{
|
||||
creators["water shield"] = &ShamanAiObjectContextInternal::water_shield;
|
||||
creators["lightning shield"] = &ShamanAiObjectContextInternal::lightning_shield;
|
||||
creators["strength of earth totem"] = &ShamanAiObjectContextInternal::strength_of_earth_totem;
|
||||
creators["flametongue totem"] = &ShamanAiObjectContextInternal::flametongue_totem;
|
||||
creators["searing totem"] = &ShamanAiObjectContextInternal::searing_totem;
|
||||
creators["magma totem"] = &ShamanAiObjectContextInternal::magma_totem;
|
||||
creators["windfury totem"] = &ShamanAiObjectContextInternal::windfury_totem;
|
||||
creators["grace of air totem"] = &ShamanAiObjectContextInternal::grace_of_air_totem;
|
||||
creators["mana spring totem"] = &ShamanAiObjectContextInternal::mana_spring_totem;
|
||||
creators["mana tide totem"] = &ShamanAiObjectContextInternal::mana_tide_totem;
|
||||
creators["earthbind totem"] = &ShamanAiObjectContextInternal::earthbind_totem;
|
||||
creators["healing stream totem"] = &ShamanAiObjectContextInternal::healing_stream_totem;
|
||||
creators["wind shear"] = &ShamanAiObjectContextInternal::wind_shear;
|
||||
creators["wind shear on enemy healer"] = &ShamanAiObjectContextInternal::wind_shear_on_enemy_healer;
|
||||
creators["rockbiter weapon"] = &ShamanAiObjectContextInternal::rockbiter_weapon;
|
||||
creators["flametongue weapon"] = &ShamanAiObjectContextInternal::flametongue_weapon;
|
||||
creators["frostbrand weapon"] = &ShamanAiObjectContextInternal::frostbrand_weapon;
|
||||
creators["windfury weapon"] = &ShamanAiObjectContextInternal::windfury_weapon;
|
||||
creators["earthliving weapon"] = &ShamanAiObjectContextInternal::earthliving_weapon;
|
||||
creators["purge"] = &ShamanAiObjectContextInternal::purge;
|
||||
creators["healing wave"] = &ShamanAiObjectContextInternal::healing_wave;
|
||||
creators["lesser healing wave"] = &ShamanAiObjectContextInternal::lesser_healing_wave;
|
||||
creators["healing wave on party"] = &ShamanAiObjectContextInternal::healing_wave_on_party;
|
||||
creators["lesser healing wave on party"] = &ShamanAiObjectContextInternal::lesser_healing_wave_on_party;
|
||||
creators["earth shield"] = &ShamanAiObjectContextInternal::earth_shield;
|
||||
creators["earth shield on party"] = &ShamanAiObjectContextInternal::earth_shield_on_party;
|
||||
creators["chain heal"] = &ShamanAiObjectContextInternal::chain_heal;
|
||||
creators["riptide"] = &ShamanAiObjectContextInternal::riptide;
|
||||
creators["riptide on party"] = &ShamanAiObjectContextInternal::riptide_on_party;
|
||||
creators["stormstrike"] = &ShamanAiObjectContextInternal::stormstrike;
|
||||
creators["lava lash"] = &ShamanAiObjectContextInternal::lava_lash;
|
||||
creators["fire nova"] = &ShamanAiObjectContextInternal::fire_nova;
|
||||
creators["ancestral spirit"] = &ShamanAiObjectContextInternal::ancestral_spirit;
|
||||
creators["water walking"] = &ShamanAiObjectContextInternal::water_walking;
|
||||
creators["water breathing"] = &ShamanAiObjectContextInternal::water_breathing;
|
||||
creators["water walking on party"] = &ShamanAiObjectContextInternal::water_walking_on_party;
|
||||
creators["water breathing on party"] = &ShamanAiObjectContextInternal::water_breathing_on_party;
|
||||
creators["cleanse spirit"] = &ShamanAiObjectContextInternal::cleanse_spirit;
|
||||
creators["cleanse spirit poison on party"] = &ShamanAiObjectContextInternal::cleanse_spirit_poison_on_party;
|
||||
creators["cleanse spirit disease on party"] = &ShamanAiObjectContextInternal::cleanse_spirit_disease_on_party;
|
||||
creators["cleanse spirit curse on party"] = &ShamanAiObjectContextInternal::cleanse_spirit_curse_on_party;
|
||||
creators["flame shock"] = &ShamanAiObjectContextInternal::flame_shock;
|
||||
creators["earth shock"] = &ShamanAiObjectContextInternal::earth_shock;
|
||||
creators["frost shock"] = &ShamanAiObjectContextInternal::frost_shock;
|
||||
creators["chain lightning"] = &ShamanAiObjectContextInternal::chain_lightning;
|
||||
creators["lightning bolt"] = &ShamanAiObjectContextInternal::lightning_bolt;
|
||||
creators["thunderstorm"] = &ShamanAiObjectContextInternal::thunderstorm;
|
||||
creators["heroism"] = &ShamanAiObjectContextInternal::heroism;
|
||||
creators["bloodlust"] = &ShamanAiObjectContextInternal::bloodlust;
|
||||
creators["elemental mastery"] = &ShamanAiObjectContextInternal::elemental_mastery;
|
||||
creators["cure disease"] = &ShamanAiObjectContextInternal::cure_disease;
|
||||
creators["cure disease on party"] = &ShamanAiObjectContextInternal::cure_disease_on_party;
|
||||
creators["cure poison"] = &ShamanAiObjectContextInternal::cure_poison;
|
||||
creators["cure poison on party"] = &ShamanAiObjectContextInternal::cure_poison_on_party;
|
||||
creators["lava burst"] = &ShamanAiObjectContextInternal::lava_burst;
|
||||
creators["earth shield on main tank"] = &ShamanAiObjectContextInternal::earth_shield_on_main_tank;
|
||||
creators["fire elemental totem"] = &ShamanAiObjectContextInternal::fire_elemental_totem;
|
||||
creators["totem of wrath"] = &ShamanAiObjectContextInternal::totem_of_wrath;
|
||||
creators["wrath of air totem"] = &ShamanAiObjectContextInternal::wrath_of_air_totem;
|
||||
creators["shamanistic rage"] = &ShamanAiObjectContextInternal::shamanistic_rage;
|
||||
creators["feral spirit"] = &ShamanAiObjectContextInternal::feral_spirit;
|
||||
}
|
||||
|
||||
private:
|
||||
static Action* heroism(PlayerbotAI* botAI) { return new CastHeroismAction(botAI); }
|
||||
static Action* bloodlust(PlayerbotAI* botAI) { return new CastBloodlustAction(botAI); }
|
||||
static Action* elemental_mastery(PlayerbotAI* botAI) { return new CastElementalMasteryAction(botAI); }
|
||||
static Action* thunderstorm(PlayerbotAI* botAI) { return new CastThunderstormAction(botAI); }
|
||||
static Action* lightning_bolt(PlayerbotAI* botAI) { return new CastLightningBoltAction(botAI); }
|
||||
static Action* chain_lightning(PlayerbotAI* botAI) { return new CastChainLightningAction(botAI); }
|
||||
static Action* frost_shock(PlayerbotAI* botAI) { return new CastFrostShockAction(botAI); }
|
||||
static Action* earth_shock(PlayerbotAI* botAI) { return new CastEarthShockAction(botAI); }
|
||||
static Action* flame_shock(PlayerbotAI* botAI) { return new CastFlameShockAction(botAI); }
|
||||
static Action* cleanse_spirit_poison_on_party(PlayerbotAI* botAI) { return new CastCleanseSpiritPoisonOnPartyAction(botAI); }
|
||||
static Action* cleanse_spirit_disease_on_party(PlayerbotAI* botAI) { return new CastCleanseSpiritDiseaseOnPartyAction(botAI); }
|
||||
static Action* cleanse_spirit_curse_on_party(PlayerbotAI* botAI) { return new CastCleanseSpiritCurseOnPartyAction(botAI); }
|
||||
static Action* cleanse_spirit(PlayerbotAI* botAI) { return new CastCleanseSpiritAction(botAI); }
|
||||
static Action* water_walking(PlayerbotAI* botAI) { return new CastWaterWalkingAction(botAI); }
|
||||
static Action* water_breathing(PlayerbotAI* botAI) { return new CastWaterBreathingAction(botAI); }
|
||||
static Action* water_walking_on_party(PlayerbotAI* botAI) { return new CastWaterWalkingOnPartyAction(botAI); }
|
||||
static Action* water_breathing_on_party(PlayerbotAI* botAI) { return new CastWaterBreathingOnPartyAction(botAI); }
|
||||
static Action* water_shield(PlayerbotAI* botAI) { return new CastWaterShieldAction(botAI); }
|
||||
static Action* lightning_shield(PlayerbotAI* botAI) { return new CastLightningShieldAction(botAI); }
|
||||
static Action* strength_of_earth_totem(PlayerbotAI* botAI) { return new CastStrengthOfEarthTotemAction(botAI); }
|
||||
static Action* flametongue_totem(PlayerbotAI* botAI) { return new CastFlametongueTotemAction(botAI); }
|
||||
static Action* magma_totem(PlayerbotAI* botAI) { return new CastMagmaTotemAction(botAI); }
|
||||
static Action* searing_totem(PlayerbotAI* botAI) { return new CastSearingTotemAction(botAI); }
|
||||
static Action* fire_nova(PlayerbotAI* botAI) { return new CastFireNovaAction(botAI); }
|
||||
static Action* windfury_totem(PlayerbotAI* botAI) { return new CastWindfuryTotemAction(botAI); }
|
||||
static Action* grace_of_air_totem(PlayerbotAI* botAI) { return new CastGraceOfAirTotemAction(botAI); }
|
||||
static Action* mana_spring_totem(PlayerbotAI* botAI) { return new CastManaSpringTotemAction(botAI); }
|
||||
static Action* mana_tide_totem(PlayerbotAI* botAI) { return new CastManaTideTotemAction(botAI); }
|
||||
static Action* earthbind_totem(PlayerbotAI* botAI) { return new CastEarthbindTotemAction(botAI); }
|
||||
static Action* healing_stream_totem(PlayerbotAI* botAI) { return new CastHealingStreamTotemAction(botAI); }
|
||||
static Action* wind_shear(PlayerbotAI* botAI) { return new CastWindShearAction(botAI); }
|
||||
static Action* rockbiter_weapon(PlayerbotAI* botAI) { return new CastRockbiterWeaponAction(botAI); }
|
||||
static Action* flametongue_weapon(PlayerbotAI* botAI) { return new CastFlametongueWeaponAction(botAI); }
|
||||
static Action* frostbrand_weapon(PlayerbotAI* botAI) { return new CastFrostbrandWeaponAction(botAI); }
|
||||
static Action* windfury_weapon(PlayerbotAI* botAI) { return new CastWindfuryWeaponAction(botAI); }
|
||||
static Action* earthliving_weapon(PlayerbotAI* botAI) { return new CastEarthlivingWeaponAction(botAI); }
|
||||
static Action* purge(PlayerbotAI* botAI) { return new CastPurgeAction(botAI); }
|
||||
static Action* healing_wave(PlayerbotAI* botAI) { return new CastHealingWaveAction(botAI); }
|
||||
static Action* lesser_healing_wave(PlayerbotAI* botAI) { return new CastLesserHealingWaveAction(botAI); }
|
||||
static Action* healing_wave_on_party(PlayerbotAI* botAI) { return new CastHealingWaveOnPartyAction(botAI); }
|
||||
static Action* lesser_healing_wave_on_party(PlayerbotAI* botAI) { return new CastLesserHealingWaveOnPartyAction(botAI); }
|
||||
static Action* earth_shield(PlayerbotAI* botAI) { return new CastEarthShieldAction(botAI); }
|
||||
static Action* earth_shield_on_party(PlayerbotAI* botAI) { return new CastEarthShieldOnPartyAction(botAI); }
|
||||
static Action* chain_heal(PlayerbotAI* botAI) { return new CastChainHealAction(botAI); }
|
||||
static Action* riptide(PlayerbotAI* botAI) { return new CastRiptideAction(botAI); }
|
||||
static Action* riptide_on_party(PlayerbotAI* botAI) { return new CastRiptideOnPartyAction(botAI); }
|
||||
static Action* stormstrike(PlayerbotAI* botAI) { return new CastStormstrikeAction(botAI); }
|
||||
static Action* lava_lash(PlayerbotAI* botAI) { return new CastLavaLashAction(botAI); }
|
||||
static Action* ancestral_spirit(PlayerbotAI* botAI) { return new CastAncestralSpiritAction(botAI); }
|
||||
static Action* wind_shear_on_enemy_healer(PlayerbotAI* botAI) { return new CastWindShearOnEnemyHealerAction(botAI); }
|
||||
static Action* cure_poison(PlayerbotAI* botAI) { return new CastCurePoisonActionSham(botAI); }
|
||||
static Action* cure_poison_on_party(PlayerbotAI* botAI) { return new CastCurePoisonOnPartyActionSham(botAI); }
|
||||
static Action* cure_disease(PlayerbotAI* botAI) { return new CastCureDiseaseActionSham(botAI); }
|
||||
static Action* cure_disease_on_party(PlayerbotAI* botAI) { return new CastCureDiseaseOnPartyActionSham(botAI); }
|
||||
static Action* lava_burst(PlayerbotAI* ai) { return new CastLavaBurstAction(ai); }
|
||||
static Action* earth_shield_on_main_tank(PlayerbotAI* ai) { return new CastEarthShieldOnMainTankAction(ai); }
|
||||
static Action* totem_of_wrath(PlayerbotAI* ai) { return new CastTotemOfWrathAction(ai); }
|
||||
static Action* fire_elemental_totem(PlayerbotAI* ai) { return new CastFireElementalTotemAction(ai); }
|
||||
static Action* wrath_of_air_totem(PlayerbotAI* ai) { return new CastWrathOfAirTotemAction(ai); }
|
||||
static Action* shamanistic_rage(PlayerbotAI* ai) { return new CastShamanisticRageAction(ai); }
|
||||
static Action* feral_spirit(PlayerbotAI* ai) { return new CastFeralSpiritAction(ai); }
|
||||
|
||||
|
||||
private:
|
||||
static Action* heroism(PlayerbotAI* botAI) { return new CastHeroismAction(botAI); }
|
||||
static Action* bloodlust(PlayerbotAI* botAI) { return new CastBloodlustAction(botAI); }
|
||||
static Action* elemental_mastery(PlayerbotAI* botAI) { return new CastElementalMasteryAction(botAI); }
|
||||
static Action* thunderstorm(PlayerbotAI* botAI) { return new CastThunderstormAction(botAI); }
|
||||
static Action* lightning_bolt(PlayerbotAI* botAI) { return new CastLightningBoltAction(botAI); }
|
||||
static Action* chain_lightning(PlayerbotAI* botAI) { return new CastChainLightningAction(botAI); }
|
||||
static Action* frost_shock(PlayerbotAI* botAI) { return new CastFrostShockAction(botAI); }
|
||||
static Action* earth_shock(PlayerbotAI* botAI) { return new CastEarthShockAction(botAI); }
|
||||
static Action* flame_shock(PlayerbotAI* botAI) { return new CastFlameShockAction(botAI); }
|
||||
static Action* cleanse_spirit_poison_on_party(PlayerbotAI* botAI)
|
||||
{
|
||||
return new CastCleanseSpiritPoisonOnPartyAction(botAI);
|
||||
}
|
||||
static Action* cleanse_spirit_disease_on_party(PlayerbotAI* botAI)
|
||||
{
|
||||
return new CastCleanseSpiritDiseaseOnPartyAction(botAI);
|
||||
}
|
||||
static Action* cleanse_spirit_curse_on_party(PlayerbotAI* botAI)
|
||||
{
|
||||
return new CastCleanseSpiritCurseOnPartyAction(botAI);
|
||||
}
|
||||
static Action* cleanse_spirit(PlayerbotAI* botAI) { return new CastCleanseSpiritAction(botAI); }
|
||||
static Action* water_walking(PlayerbotAI* botAI) { return new CastWaterWalkingAction(botAI); }
|
||||
static Action* water_breathing(PlayerbotAI* botAI) { return new CastWaterBreathingAction(botAI); }
|
||||
static Action* water_walking_on_party(PlayerbotAI* botAI) { return new CastWaterWalkingOnPartyAction(botAI); }
|
||||
static Action* water_breathing_on_party(PlayerbotAI* botAI) { return new CastWaterBreathingOnPartyAction(botAI); }
|
||||
static Action* water_shield(PlayerbotAI* botAI) { return new CastWaterShieldAction(botAI); }
|
||||
static Action* lightning_shield(PlayerbotAI* botAI) { return new CastLightningShieldAction(botAI); }
|
||||
static Action* strength_of_earth_totem(PlayerbotAI* botAI) { return new CastStrengthOfEarthTotemAction(botAI); }
|
||||
static Action* flametongue_totem(PlayerbotAI* botAI) { return new CastFlametongueTotemAction(botAI); }
|
||||
static Action* magma_totem(PlayerbotAI* botAI) { return new CastMagmaTotemAction(botAI); }
|
||||
static Action* searing_totem(PlayerbotAI* botAI) { return new CastSearingTotemAction(botAI); }
|
||||
static Action* fire_nova(PlayerbotAI* botAI) { return new CastFireNovaAction(botAI); }
|
||||
static Action* windfury_totem(PlayerbotAI* botAI) { return new CastWindfuryTotemAction(botAI); }
|
||||
static Action* grace_of_air_totem(PlayerbotAI* botAI) { return new CastGraceOfAirTotemAction(botAI); }
|
||||
static Action* mana_spring_totem(PlayerbotAI* botAI) { return new CastManaSpringTotemAction(botAI); }
|
||||
static Action* mana_tide_totem(PlayerbotAI* botAI) { return new CastManaTideTotemAction(botAI); }
|
||||
static Action* earthbind_totem(PlayerbotAI* botAI) { return new CastEarthbindTotemAction(botAI); }
|
||||
static Action* healing_stream_totem(PlayerbotAI* botAI) { return new CastHealingStreamTotemAction(botAI); }
|
||||
static Action* wind_shear(PlayerbotAI* botAI) { return new CastWindShearAction(botAI); }
|
||||
static Action* rockbiter_weapon(PlayerbotAI* botAI) { return new CastRockbiterWeaponAction(botAI); }
|
||||
static Action* flametongue_weapon(PlayerbotAI* botAI) { return new CastFlametongueWeaponAction(botAI); }
|
||||
static Action* frostbrand_weapon(PlayerbotAI* botAI) { return new CastFrostbrandWeaponAction(botAI); }
|
||||
static Action* windfury_weapon(PlayerbotAI* botAI) { return new CastWindfuryWeaponAction(botAI); }
|
||||
static Action* earthliving_weapon(PlayerbotAI* botAI) { return new CastEarthlivingWeaponAction(botAI); }
|
||||
static Action* purge(PlayerbotAI* botAI) { return new CastPurgeAction(botAI); }
|
||||
static Action* healing_wave(PlayerbotAI* botAI) { return new CastHealingWaveAction(botAI); }
|
||||
static Action* lesser_healing_wave(PlayerbotAI* botAI) { return new CastLesserHealingWaveAction(botAI); }
|
||||
static Action* healing_wave_on_party(PlayerbotAI* botAI) { return new CastHealingWaveOnPartyAction(botAI); }
|
||||
static Action* lesser_healing_wave_on_party(PlayerbotAI* botAI)
|
||||
{
|
||||
return new CastLesserHealingWaveOnPartyAction(botAI);
|
||||
}
|
||||
static Action* earth_shield(PlayerbotAI* botAI) { return new CastEarthShieldAction(botAI); }
|
||||
static Action* earth_shield_on_party(PlayerbotAI* botAI) { return new CastEarthShieldOnPartyAction(botAI); }
|
||||
static Action* chain_heal(PlayerbotAI* botAI) { return new CastChainHealAction(botAI); }
|
||||
static Action* riptide(PlayerbotAI* botAI) { return new CastRiptideAction(botAI); }
|
||||
static Action* riptide_on_party(PlayerbotAI* botAI) { return new CastRiptideOnPartyAction(botAI); }
|
||||
static Action* stormstrike(PlayerbotAI* botAI) { return new CastStormstrikeAction(botAI); }
|
||||
static Action* lava_lash(PlayerbotAI* botAI) { return new CastLavaLashAction(botAI); }
|
||||
static Action* ancestral_spirit(PlayerbotAI* botAI) { return new CastAncestralSpiritAction(botAI); }
|
||||
static Action* wind_shear_on_enemy_healer(PlayerbotAI* botAI)
|
||||
{
|
||||
return new CastWindShearOnEnemyHealerAction(botAI);
|
||||
}
|
||||
static Action* cure_poison(PlayerbotAI* botAI) { return new CastCurePoisonActionSham(botAI); }
|
||||
static Action* cure_poison_on_party(PlayerbotAI* botAI) { return new CastCurePoisonOnPartyActionSham(botAI); }
|
||||
static Action* cure_disease(PlayerbotAI* botAI) { return new CastCureDiseaseActionSham(botAI); }
|
||||
static Action* cure_disease_on_party(PlayerbotAI* botAI) { return new CastCureDiseaseOnPartyActionSham(botAI); }
|
||||
static Action* lava_burst(PlayerbotAI* ai) { return new CastLavaBurstAction(ai); }
|
||||
static Action* earth_shield_on_main_tank(PlayerbotAI* ai) { return new CastEarthShieldOnMainTankAction(ai); }
|
||||
static Action* totem_of_wrath(PlayerbotAI* ai) { return new CastTotemOfWrathAction(ai); }
|
||||
static Action* fire_elemental_totem(PlayerbotAI* ai) { return new CastFireElementalTotemAction(ai); }
|
||||
static Action* wrath_of_air_totem(PlayerbotAI* ai) { return new CastWrathOfAirTotemAction(ai); }
|
||||
static Action* shamanistic_rage(PlayerbotAI* ai) { return new CastShamanisticRageAction(ai); }
|
||||
static Action* feral_spirit(PlayerbotAI* ai) { return new CastFeralSpiritAction(ai); }
|
||||
};
|
||||
|
||||
ShamanAiObjectContext::ShamanAiObjectContext(PlayerbotAI* botAI) : AiObjectContext(botAI)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_SHAMANAIOBJECTCONTEXT_H
|
||||
@@ -11,8 +12,8 @@ class PlayerbotAI;
|
||||
|
||||
class ShamanAiObjectContext : public AiObjectContext
|
||||
{
|
||||
public:
|
||||
ShamanAiObjectContext(PlayerbotAI* botAI);
|
||||
public:
|
||||
ShamanAiObjectContext(PlayerbotAI* botAI);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,47 +1,57 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "ShamanNonCombatStrategy.h"
|
||||
|
||||
#include "Playerbots.h"
|
||||
|
||||
void ShamanNonCombatStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
{
|
||||
NonCombatStrategy::InitTriggers(triggers);
|
||||
|
||||
triggers.push_back(new TriggerNode("party member dead", NextAction::array(0, new NextAction("ancestral spirit", ACTION_CRITICAL_HEAL + 10), nullptr)));
|
||||
triggers.push_back(new TriggerNode("water breathing", NextAction::array(0, new NextAction("water breathing", 12.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("water walking", NextAction::array(0, new NextAction("water walking", 12.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("water breathing on party", NextAction::array(0, new NextAction("water breathing on party", 11.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("water walking on party", NextAction::array(0, new NextAction("water walking on party", 11.0f), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("party member dead",
|
||||
NextAction::array(0, new NextAction("ancestral spirit", ACTION_CRITICAL_HEAL + 10), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("water breathing", NextAction::array(0, new NextAction("water breathing", 12.0f), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("water walking", NextAction::array(0, new NextAction("water walking", 12.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"party member critical health",
|
||||
NextAction::array(0, new NextAction("riptide on party", 31.0f), new NextAction("healing wave on party", 30.0f), NULL)));
|
||||
"water breathing on party", NextAction::array(0, new NextAction("water breathing on party", 11.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("water walking on party",
|
||||
NextAction::array(0, new NextAction("water walking on party", 11.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("party member critical health",
|
||||
NextAction::array(0, new NextAction("riptide on party", 31.0f),
|
||||
new NextAction("healing wave on party", 30.0f), NULL)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"party member low health",
|
||||
NextAction::array(0, new NextAction("riptide on party", 29.0f), new NextAction("healing wave on party", 28.0f), NULL)));
|
||||
triggers.push_back(new TriggerNode("party member low health",
|
||||
NextAction::array(0, new NextAction("riptide on party", 29.0f),
|
||||
new NextAction("healing wave on party", 28.0f), NULL)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"party member medium health",
|
||||
NextAction::array(0, new NextAction("riptide on party", 27.0f), new NextAction("healing wave on party", 26.0f), NULL)));
|
||||
triggers.push_back(new TriggerNode("party member medium health",
|
||||
NextAction::array(0, new NextAction("riptide on party", 27.0f),
|
||||
new NextAction("healing wave on party", 26.0f), NULL)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"party member almost full health",
|
||||
NextAction::array(0, new NextAction("riptide on party", 25.0f), new NextAction("lesser healing wave on party", 24.0f), NULL)));
|
||||
triggers.push_back(new TriggerNode("party member almost full health",
|
||||
NextAction::array(0, new NextAction("riptide on party", 25.0f),
|
||||
new NextAction("lesser healing wave on party", 24.0f), NULL)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"medium aoe heal",
|
||||
NextAction::array(0, new NextAction("chain heal", 27.0f), NULL)));
|
||||
|
||||
triggers.push_back(new TriggerNode("cure poison", NextAction::array(0, new NextAction("cure poison", 21.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("party member cure poison", NextAction::array(0, new NextAction("cure poison on party", 21.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("cure disease", NextAction::array(0, new NextAction("cure disease", 31.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("party member cure disease", NextAction::array(0, new NextAction("cure disease on party", 30.0f), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("medium aoe heal", NextAction::array(0, new NextAction("chain heal", 27.0f), NULL)));
|
||||
|
||||
triggers.push_back(
|
||||
new TriggerNode("cure poison", NextAction::array(0, new NextAction("cure poison", 21.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("party member cure poison",
|
||||
NextAction::array(0, new NextAction("cure poison on party", 21.0f), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("cure disease", NextAction::array(0, new NextAction("cure disease", 31.0f), nullptr)));
|
||||
triggers.push_back(new TriggerNode("party member cure disease",
|
||||
NextAction::array(0, new NextAction("cure disease on party", 30.0f), nullptr)));
|
||||
}
|
||||
|
||||
void ShamanNonCombatStrategy::InitMultipliers(std::vector<Multiplier*>& multipliers)
|
||||
{
|
||||
NonCombatStrategy::InitMultipliers(multipliers);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_SHAMANNONCOMBATSTRATEGY_H
|
||||
@@ -11,12 +12,12 @@ class PlayerbotAI;
|
||||
|
||||
class ShamanNonCombatStrategy : public NonCombatStrategy
|
||||
{
|
||||
public:
|
||||
ShamanNonCombatStrategy(PlayerbotAI* botAI) : NonCombatStrategy(botAI) { }
|
||||
public:
|
||||
ShamanNonCombatStrategy(PlayerbotAI* botAI) : NonCombatStrategy(botAI) {}
|
||||
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
void InitMultipliers(std::vector<Multiplier*>& multipliers) override;
|
||||
std::string const getName() override { return "nc"; }
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
void InitMultipliers(std::vector<Multiplier*>& multipliers) override;
|
||||
std::string const getName() override { return "nc"; }
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "ShamanTriggers.h"
|
||||
|
||||
#include "Playerbots.h"
|
||||
|
||||
/*
|
||||
@@ -33,16 +35,19 @@ bool ShamanWeaponTrigger::IsActive()
|
||||
}
|
||||
*/
|
||||
|
||||
bool MainHandWeaponNoImbueTrigger::IsActive() {
|
||||
bool MainHandWeaponNoImbueTrigger::IsActive()
|
||||
{
|
||||
Item* const itemForSpell = bot->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND);
|
||||
if (!itemForSpell || itemForSpell->GetEnchantmentId(TEMP_ENCHANTMENT_SLOT))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool OffHandWeaponNoImbueTrigger::IsActive() {
|
||||
bool OffHandWeaponNoImbueTrigger::IsActive()
|
||||
{
|
||||
Item* const itemForSpell = bot->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND);
|
||||
if (!itemForSpell || itemForSpell->GetEnchantmentId(TEMP_ENCHANTMENT_SLOT) || itemForSpell->GetTemplate()->InventoryType != INVTYPE_WEAPON)
|
||||
if (!itemForSpell || itemForSpell->GetEnchantmentId(TEMP_ENCHANTMENT_SLOT) ||
|
||||
itemForSpell->GetTemplate()->InventoryType != INVTYPE_WEAPON)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
@@ -50,28 +55,24 @@ bool OffHandWeaponNoImbueTrigger::IsActive() {
|
||||
bool ShockTrigger::IsActive()
|
||||
{
|
||||
return SpellTrigger::IsActive() && !botAI->HasAura("flame shock", GetTarget(), false, true) &&
|
||||
!botAI->HasAura("frost shock", GetTarget(), false, true);
|
||||
!botAI->HasAura("frost shock", GetTarget(), false, true);
|
||||
}
|
||||
|
||||
bool TotemTrigger::IsActive()
|
||||
{
|
||||
return AI_VALUE(uint8, "attacker count") >= attackerCount && !AI_VALUE2(bool, "has totem", name) && !botAI->HasAura(name, bot);
|
||||
return AI_VALUE(uint8, "attacker count") >= attackerCount && !AI_VALUE2(bool, "has totem", name) &&
|
||||
!botAI->HasAura(name, bot);
|
||||
}
|
||||
|
||||
bool ManaSpringTotemTrigger::IsActive()
|
||||
{
|
||||
return AI_VALUE(uint8, "attacker count") >= attackerCount && !AI_VALUE2(bool, "has totem", "mana tide totem") && !AI_VALUE2(bool, "has totem", name);
|
||||
return AI_VALUE(uint8, "attacker count") >= attackerCount && !AI_VALUE2(bool, "has totem", "mana tide totem") &&
|
||||
!AI_VALUE2(bool, "has totem", name);
|
||||
}
|
||||
|
||||
bool WaterWalkingTrigger::IsActive()
|
||||
{
|
||||
return BuffTrigger::IsActive() && AI_VALUE2(bool, "swimming", "self target");
|
||||
}
|
||||
bool WaterWalkingTrigger::IsActive() { return BuffTrigger::IsActive() && AI_VALUE2(bool, "swimming", "self target"); }
|
||||
|
||||
bool WaterBreathingTrigger::IsActive()
|
||||
{
|
||||
return BuffTrigger::IsActive() && AI_VALUE2(bool, "swimming", "self target");
|
||||
}
|
||||
bool WaterBreathingTrigger::IsActive() { return BuffTrigger::IsActive() && AI_VALUE2(bool, "swimming", "self target"); }
|
||||
|
||||
bool WaterWalkingOnPartyTrigger::IsActive()
|
||||
{
|
||||
@@ -85,25 +86,19 @@ bool WaterBreathingOnPartyTrigger::IsActive()
|
||||
|
||||
bool NoFireTotemTrigger::IsActive()
|
||||
{
|
||||
return !AI_VALUE2(bool, "has totem", "magma totem") &&
|
||||
!AI_VALUE2(bool, "has totem", "flametongue totem") &&
|
||||
!AI_VALUE2(bool, "has totem", "searing totem") &&
|
||||
!AI_VALUE2(bool, "has totem", "fire elemental totem") &&
|
||||
!AI_VALUE2(bool, "has totem", "frost resistance totem") &&
|
||||
!AI_VALUE2(bool, "has totem", "totem of wrath");
|
||||
return !AI_VALUE2(bool, "has totem", "magma totem") && !AI_VALUE2(bool, "has totem", "flametongue totem") &&
|
||||
!AI_VALUE2(bool, "has totem", "searing totem") && !AI_VALUE2(bool, "has totem", "fire elemental totem") &&
|
||||
!AI_VALUE2(bool, "has totem", "frost resistance totem") && !AI_VALUE2(bool, "has totem", "totem of wrath");
|
||||
}
|
||||
|
||||
bool NoWaterTotemTrigger::IsActive()
|
||||
{
|
||||
return !AI_VALUE2(bool, "has totem", "fire resistance totem") &&
|
||||
!AI_VALUE2(bool, "has totem", "mana tide totem") &&
|
||||
!AI_VALUE2(bool, "has totem", "cleansing totem") &&
|
||||
!AI_VALUE2(bool, "has totem", "mana spring totem") &&
|
||||
!AI_VALUE2(bool, "has totem", "healing stream totem");
|
||||
return !AI_VALUE2(bool, "has totem", "fire resistance totem") && !AI_VALUE2(bool, "has totem", "mana tide totem") &&
|
||||
!AI_VALUE2(bool, "has totem", "cleansing totem") && !AI_VALUE2(bool, "has totem", "mana spring totem") &&
|
||||
!AI_VALUE2(bool, "has totem", "healing stream totem");
|
||||
}
|
||||
|
||||
bool NoAirTotemTrigger::IsActive()
|
||||
{
|
||||
return !AI_VALUE2(bool, "has totem", "wrath of air totem") &&
|
||||
!AI_VALUE2(bool, "has totem", "windfury totem");
|
||||
return !AI_VALUE2(bool, "has totem", "wrath of air totem") && !AI_VALUE2(bool, "has totem", "windfury totem");
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_SHAMANTRIGGERS_H
|
||||
@@ -26,272 +27,294 @@ class ShamanWeaponTrigger : public BuffTrigger
|
||||
|
||||
class MainHandWeaponNoImbueTrigger : public BuffTrigger
|
||||
{
|
||||
public:
|
||||
MainHandWeaponNoImbueTrigger(PlayerbotAI* ai) : BuffTrigger(ai, "main hand", 1) {}
|
||||
virtual bool IsActive();
|
||||
public:
|
||||
MainHandWeaponNoImbueTrigger(PlayerbotAI* ai) : BuffTrigger(ai, "main hand", 1) {}
|
||||
virtual bool IsActive();
|
||||
};
|
||||
|
||||
class OffHandWeaponNoImbueTrigger : public BuffTrigger
|
||||
{
|
||||
public:
|
||||
OffHandWeaponNoImbueTrigger(PlayerbotAI* ai) : BuffTrigger(ai, "off hand", 1) {}
|
||||
virtual bool IsActive();
|
||||
public:
|
||||
OffHandWeaponNoImbueTrigger(PlayerbotAI* ai) : BuffTrigger(ai, "off hand", 1) {}
|
||||
virtual bool IsActive();
|
||||
};
|
||||
|
||||
class TotemTrigger : public Trigger
|
||||
{
|
||||
public:
|
||||
TotemTrigger(PlayerbotAI* botAI, std::string const spell, uint32 attackerCount = 0) : Trigger(botAI, spell), attackerCount(attackerCount) { }
|
||||
public:
|
||||
TotemTrigger(PlayerbotAI* botAI, std::string const spell, uint32 attackerCount = 0)
|
||||
: Trigger(botAI, spell), attackerCount(attackerCount)
|
||||
{
|
||||
}
|
||||
|
||||
bool IsActive() override;
|
||||
bool IsActive() override;
|
||||
|
||||
protected:
|
||||
uint32 attackerCount;
|
||||
protected:
|
||||
uint32 attackerCount;
|
||||
};
|
||||
|
||||
class WindfuryTotemTrigger : public TotemTrigger
|
||||
{
|
||||
public:
|
||||
WindfuryTotemTrigger(PlayerbotAI* botAI) : TotemTrigger(botAI, "windfury totem") { }
|
||||
public:
|
||||
WindfuryTotemTrigger(PlayerbotAI* botAI) : TotemTrigger(botAI, "windfury totem") {}
|
||||
};
|
||||
|
||||
class GraceOfAirTotemTrigger : public TotemTrigger
|
||||
{
|
||||
public:
|
||||
GraceOfAirTotemTrigger(PlayerbotAI* botAI) : TotemTrigger(botAI, "grace of air totem") { }
|
||||
public:
|
||||
GraceOfAirTotemTrigger(PlayerbotAI* botAI) : TotemTrigger(botAI, "grace of air totem") {}
|
||||
};
|
||||
|
||||
class ManaSpringTotemTrigger : public TotemTrigger
|
||||
{
|
||||
public:
|
||||
ManaSpringTotemTrigger(PlayerbotAI* botAI) : TotemTrigger(botAI, "mana spring totem") { }
|
||||
public:
|
||||
ManaSpringTotemTrigger(PlayerbotAI* botAI) : TotemTrigger(botAI, "mana spring totem") {}
|
||||
|
||||
bool IsActive() override;
|
||||
bool IsActive() override;
|
||||
};
|
||||
|
||||
class FlametongueTotemTrigger : public TotemTrigger
|
||||
{
|
||||
public:
|
||||
FlametongueTotemTrigger(PlayerbotAI* botAI) : TotemTrigger(botAI, "flametongue totem") { }
|
||||
public:
|
||||
FlametongueTotemTrigger(PlayerbotAI* botAI) : TotemTrigger(botAI, "flametongue totem") {}
|
||||
};
|
||||
|
||||
class StrengthOfEarthTotemTrigger : public TotemTrigger
|
||||
{
|
||||
public:
|
||||
StrengthOfEarthTotemTrigger(PlayerbotAI* botAI) : TotemTrigger(botAI, "strength of earth totem") { }
|
||||
public:
|
||||
StrengthOfEarthTotemTrigger(PlayerbotAI* botAI) : TotemTrigger(botAI, "strength of earth totem") {}
|
||||
};
|
||||
|
||||
class FireElementalTotemTrigger : public BoostTrigger
|
||||
{
|
||||
public:
|
||||
FireElementalTotemTrigger(PlayerbotAI* botAI) : BoostTrigger(botAI, "fire elemental totem") { }
|
||||
public:
|
||||
FireElementalTotemTrigger(PlayerbotAI* botAI) : BoostTrigger(botAI, "fire elemental totem") {}
|
||||
};
|
||||
|
||||
class MagmaTotemTrigger : public TotemTrigger
|
||||
{
|
||||
public:
|
||||
MagmaTotemTrigger(PlayerbotAI* botAI) : TotemTrigger(botAI, "magma totem", 3) { }
|
||||
public:
|
||||
MagmaTotemTrigger(PlayerbotAI* botAI) : TotemTrigger(botAI, "magma totem", 3) {}
|
||||
};
|
||||
|
||||
class SearingTotemTrigger : public TotemTrigger
|
||||
{
|
||||
public:
|
||||
SearingTotemTrigger(PlayerbotAI* botAI) : TotemTrigger(botAI, "searing totem", 1) { }
|
||||
public:
|
||||
SearingTotemTrigger(PlayerbotAI* botAI) : TotemTrigger(botAI, "searing totem", 1) {}
|
||||
};
|
||||
|
||||
class WindShearInterruptSpellTrigger : public InterruptSpellTrigger
|
||||
{
|
||||
public:
|
||||
WindShearInterruptSpellTrigger(PlayerbotAI* botAI) : InterruptSpellTrigger(botAI, "wind shear") { }
|
||||
public:
|
||||
WindShearInterruptSpellTrigger(PlayerbotAI* botAI) : InterruptSpellTrigger(botAI, "wind shear") {}
|
||||
};
|
||||
|
||||
class WaterShieldTrigger : public BuffTrigger
|
||||
{
|
||||
public:
|
||||
WaterShieldTrigger(PlayerbotAI* botAI) : BuffTrigger(botAI, "water shield") { }
|
||||
public:
|
||||
WaterShieldTrigger(PlayerbotAI* botAI) : BuffTrigger(botAI, "water shield") {}
|
||||
};
|
||||
|
||||
class LightningShieldTrigger : public BuffTrigger
|
||||
{
|
||||
public:
|
||||
LightningShieldTrigger(PlayerbotAI* botAI) : BuffTrigger(botAI, "lightning shield") { }
|
||||
public:
|
||||
LightningShieldTrigger(PlayerbotAI* botAI) : BuffTrigger(botAI, "lightning shield") {}
|
||||
};
|
||||
|
||||
class PurgeTrigger : public TargetAuraDispelTrigger
|
||||
{
|
||||
public:
|
||||
PurgeTrigger(PlayerbotAI* botAI) : TargetAuraDispelTrigger(botAI, "purge", DISPEL_MAGIC) { }
|
||||
public:
|
||||
PurgeTrigger(PlayerbotAI* botAI) : TargetAuraDispelTrigger(botAI, "purge", DISPEL_MAGIC) {}
|
||||
};
|
||||
|
||||
class WaterWalkingTrigger : public BuffTrigger
|
||||
{
|
||||
public:
|
||||
WaterWalkingTrigger(PlayerbotAI* botAI) : BuffTrigger(botAI, "water walking", 7) { }
|
||||
public:
|
||||
WaterWalkingTrigger(PlayerbotAI* botAI) : BuffTrigger(botAI, "water walking", 7) {}
|
||||
|
||||
bool IsActive() override;
|
||||
bool IsActive() override;
|
||||
};
|
||||
|
||||
class WaterBreathingTrigger : public BuffTrigger
|
||||
{
|
||||
public:
|
||||
WaterBreathingTrigger(PlayerbotAI* botAI) : BuffTrigger(botAI, "water breathing", 5 * 2000) { }
|
||||
public:
|
||||
WaterBreathingTrigger(PlayerbotAI* botAI) : BuffTrigger(botAI, "water breathing", 5 * 2000) {}
|
||||
|
||||
bool IsActive() override;
|
||||
bool IsActive() override;
|
||||
};
|
||||
|
||||
class WaterWalkingOnPartyTrigger : public BuffOnPartyTrigger
|
||||
{
|
||||
public:
|
||||
WaterWalkingOnPartyTrigger(PlayerbotAI* botAI) : BuffOnPartyTrigger(botAI, "water walking on party", 2 * 2000) { }
|
||||
public:
|
||||
WaterWalkingOnPartyTrigger(PlayerbotAI* botAI) : BuffOnPartyTrigger(botAI, "water walking on party", 2 * 2000) {}
|
||||
|
||||
bool IsActive() override;
|
||||
bool IsActive() override;
|
||||
};
|
||||
|
||||
class WaterBreathingOnPartyTrigger : public BuffOnPartyTrigger
|
||||
{
|
||||
public:
|
||||
WaterBreathingOnPartyTrigger(PlayerbotAI* botAI) : BuffOnPartyTrigger(botAI, "water breathing on party", 2 * 2000) { }
|
||||
public:
|
||||
WaterBreathingOnPartyTrigger(PlayerbotAI* botAI) : BuffOnPartyTrigger(botAI, "water breathing on party", 2 * 2000)
|
||||
{
|
||||
}
|
||||
|
||||
bool IsActive() override;
|
||||
bool IsActive() override;
|
||||
};
|
||||
|
||||
class CleanseSpiritPoisonTrigger : public NeedCureTrigger
|
||||
{
|
||||
public:
|
||||
CleanseSpiritPoisonTrigger(PlayerbotAI* botAI) : NeedCureTrigger(botAI, "cleanse spirit", DISPEL_POISON) { }
|
||||
public:
|
||||
CleanseSpiritPoisonTrigger(PlayerbotAI* botAI) : NeedCureTrigger(botAI, "cleanse spirit", DISPEL_POISON) {}
|
||||
};
|
||||
|
||||
class PartyMemberCleanseSpiritPoisonTrigger : public PartyMemberNeedCureTrigger
|
||||
{
|
||||
public:
|
||||
PartyMemberCleanseSpiritPoisonTrigger(PlayerbotAI* botAI) : PartyMemberNeedCureTrigger(botAI, "cleanse spirit", DISPEL_POISON) { }
|
||||
public:
|
||||
PartyMemberCleanseSpiritPoisonTrigger(PlayerbotAI* botAI)
|
||||
: PartyMemberNeedCureTrigger(botAI, "cleanse spirit", DISPEL_POISON)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
class CleanseSpiritCurseTrigger : public NeedCureTrigger
|
||||
{
|
||||
public:
|
||||
CleanseSpiritCurseTrigger(PlayerbotAI* botAI) : NeedCureTrigger(botAI, "cleanse spirit", DISPEL_CURSE) { }
|
||||
public:
|
||||
CleanseSpiritCurseTrigger(PlayerbotAI* botAI) : NeedCureTrigger(botAI, "cleanse spirit", DISPEL_CURSE) {}
|
||||
};
|
||||
|
||||
class PartyMemberCleanseSpiritCurseTrigger : public PartyMemberNeedCureTrigger
|
||||
{
|
||||
public:
|
||||
PartyMemberCleanseSpiritCurseTrigger(PlayerbotAI* botAI) : PartyMemberNeedCureTrigger(botAI, "cleanse spirit", DISPEL_CURSE) { }
|
||||
public:
|
||||
PartyMemberCleanseSpiritCurseTrigger(PlayerbotAI* botAI)
|
||||
: PartyMemberNeedCureTrigger(botAI, "cleanse spirit", DISPEL_CURSE)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
class CleanseSpiritDiseaseTrigger : public NeedCureTrigger
|
||||
{
|
||||
public:
|
||||
CleanseSpiritDiseaseTrigger(PlayerbotAI* botAI) : NeedCureTrigger(botAI, "cleanse spirit", DISPEL_DISEASE) { }
|
||||
public:
|
||||
CleanseSpiritDiseaseTrigger(PlayerbotAI* botAI) : NeedCureTrigger(botAI, "cleanse spirit", DISPEL_DISEASE) {}
|
||||
};
|
||||
|
||||
class PartyMemberCleanseSpiritDiseaseTrigger : public PartyMemberNeedCureTrigger
|
||||
{
|
||||
public:
|
||||
PartyMemberCleanseSpiritDiseaseTrigger(PlayerbotAI* botAI) : PartyMemberNeedCureTrigger(botAI, "cleanse spirit", DISPEL_DISEASE) { }
|
||||
public:
|
||||
PartyMemberCleanseSpiritDiseaseTrigger(PlayerbotAI* botAI)
|
||||
: PartyMemberNeedCureTrigger(botAI, "cleanse spirit", DISPEL_DISEASE)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
class ShockTrigger : public DebuffTrigger
|
||||
{
|
||||
public:
|
||||
ShockTrigger(PlayerbotAI* botAI) : DebuffTrigger(botAI, "earth shock", 1, true) { }
|
||||
public:
|
||||
ShockTrigger(PlayerbotAI* botAI) : DebuffTrigger(botAI, "earth shock", 1, true) {}
|
||||
|
||||
bool IsActive() override;
|
||||
bool IsActive() override;
|
||||
};
|
||||
|
||||
class FrostShockSnareTrigger : public SnareTargetTrigger
|
||||
{
|
||||
public:
|
||||
FrostShockSnareTrigger(PlayerbotAI* botAI) : SnareTargetTrigger(botAI, "frost shock") { }
|
||||
public:
|
||||
FrostShockSnareTrigger(PlayerbotAI* botAI) : SnareTargetTrigger(botAI, "frost shock") {}
|
||||
};
|
||||
|
||||
class HeroismTrigger : public BoostTrigger
|
||||
{
|
||||
public:
|
||||
HeroismTrigger(PlayerbotAI* botAI) : BoostTrigger(botAI, "heroism") { }
|
||||
public:
|
||||
HeroismTrigger(PlayerbotAI* botAI) : BoostTrigger(botAI, "heroism") {}
|
||||
};
|
||||
|
||||
class BloodlustTrigger : public BoostTrigger
|
||||
{
|
||||
public:
|
||||
BloodlustTrigger(PlayerbotAI* botAI) : BoostTrigger(botAI, "bloodlust") { }
|
||||
public:
|
||||
BloodlustTrigger(PlayerbotAI* botAI) : BoostTrigger(botAI, "bloodlust") {}
|
||||
};
|
||||
|
||||
class ElementalMasteryTrigger : public BoostTrigger
|
||||
{
|
||||
public:
|
||||
ElementalMasteryTrigger(PlayerbotAI* botAI) : BoostTrigger(botAI, "elemental mastery") { }
|
||||
public:
|
||||
ElementalMasteryTrigger(PlayerbotAI* botAI) : BoostTrigger(botAI, "elemental mastery") {}
|
||||
};
|
||||
|
||||
class MaelstromWeaponTrigger : public HasAuraStackTrigger
|
||||
{
|
||||
public:
|
||||
MaelstromWeaponTrigger(PlayerbotAI* botAI) : HasAuraStackTrigger(botAI, "maelstrom weapon", 5) { }
|
||||
public:
|
||||
MaelstromWeaponTrigger(PlayerbotAI* botAI) : HasAuraStackTrigger(botAI, "maelstrom weapon", 5) {}
|
||||
};
|
||||
|
||||
class WindShearInterruptEnemyHealerSpellTrigger : public InterruptEnemyHealerTrigger
|
||||
{
|
||||
public:
|
||||
WindShearInterruptEnemyHealerSpellTrigger(PlayerbotAI* botAI) : InterruptEnemyHealerTrigger(botAI, "wind shear") { }
|
||||
public:
|
||||
WindShearInterruptEnemyHealerSpellTrigger(PlayerbotAI* botAI) : InterruptEnemyHealerTrigger(botAI, "wind shear") {}
|
||||
};
|
||||
|
||||
class CurePoisonTrigger : public NeedCureTrigger
|
||||
{
|
||||
public:
|
||||
CurePoisonTrigger(PlayerbotAI* botAI) : NeedCureTrigger(botAI, "cure poison", DISPEL_POISON) { }
|
||||
public:
|
||||
CurePoisonTrigger(PlayerbotAI* botAI) : NeedCureTrigger(botAI, "cure poison", DISPEL_POISON) {}
|
||||
};
|
||||
|
||||
class PartyMemberCurePoisonTrigger : public PartyMemberNeedCureTrigger
|
||||
{
|
||||
public:
|
||||
PartyMemberCurePoisonTrigger(PlayerbotAI* botAI) : PartyMemberNeedCureTrigger(botAI, "cure poison", DISPEL_POISON) { }
|
||||
public:
|
||||
PartyMemberCurePoisonTrigger(PlayerbotAI* botAI) : PartyMemberNeedCureTrigger(botAI, "cure poison", DISPEL_POISON)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
class CureDiseaseTrigger : public NeedCureTrigger
|
||||
{
|
||||
public:
|
||||
CureDiseaseTrigger(PlayerbotAI* botAI) : NeedCureTrigger(botAI, "cure disease", DISPEL_DISEASE) { }
|
||||
public:
|
||||
CureDiseaseTrigger(PlayerbotAI* botAI) : NeedCureTrigger(botAI, "cure disease", DISPEL_DISEASE) {}
|
||||
};
|
||||
|
||||
class PartyMemberCureDiseaseTrigger : public PartyMemberNeedCureTrigger
|
||||
{
|
||||
public:
|
||||
PartyMemberCureDiseaseTrigger(PlayerbotAI* botAI) : PartyMemberNeedCureTrigger(botAI, "cure disease", DISPEL_DISEASE) { }
|
||||
public:
|
||||
PartyMemberCureDiseaseTrigger(PlayerbotAI* botAI)
|
||||
: PartyMemberNeedCureTrigger(botAI, "cure disease", DISPEL_DISEASE)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
class NoFireTotemTrigger : public Trigger {
|
||||
public:
|
||||
NoFireTotemTrigger(PlayerbotAI* ai) : Trigger(ai, "no fire totem") {}
|
||||
bool IsActive() override;
|
||||
class NoFireTotemTrigger : public Trigger
|
||||
{
|
||||
public:
|
||||
NoFireTotemTrigger(PlayerbotAI* ai) : Trigger(ai, "no fire totem") {}
|
||||
bool IsActive() override;
|
||||
};
|
||||
|
||||
class NoWaterTotemTrigger : public Trigger {
|
||||
public:
|
||||
NoWaterTotemTrigger(PlayerbotAI* ai) : Trigger(ai, "no water totem") {}
|
||||
bool IsActive() override;
|
||||
class NoWaterTotemTrigger : public Trigger
|
||||
{
|
||||
public:
|
||||
NoWaterTotemTrigger(PlayerbotAI* ai) : Trigger(ai, "no water totem") {}
|
||||
bool IsActive() override;
|
||||
};
|
||||
|
||||
class EarthShieldOnMainTankTrigger : public BuffOnMainTankTrigger
|
||||
{
|
||||
public:
|
||||
EarthShieldOnMainTankTrigger(PlayerbotAI* botAI) : BuffOnMainTankTrigger(botAI, "earth shield", false) {}
|
||||
public:
|
||||
EarthShieldOnMainTankTrigger(PlayerbotAI* botAI) : BuffOnMainTankTrigger(botAI, "earth shield", false) {}
|
||||
};
|
||||
|
||||
class FlameShockTrigger : public DebuffTrigger {
|
||||
public:
|
||||
FlameShockTrigger(PlayerbotAI* ai) : DebuffTrigger(ai, "flame shock", 1, true) {}
|
||||
class FlameShockTrigger : public DebuffTrigger
|
||||
{
|
||||
public:
|
||||
FlameShockTrigger(PlayerbotAI* ai) : DebuffTrigger(ai, "flame shock", 1, true) {}
|
||||
};
|
||||
|
||||
class WrathOfAirTotemTrigger : public TotemTrigger
|
||||
{
|
||||
public:
|
||||
WrathOfAirTotemTrigger(PlayerbotAI* ai) : TotemTrigger(ai, "wrath of air totem") {}
|
||||
public:
|
||||
WrathOfAirTotemTrigger(PlayerbotAI* ai) : TotemTrigger(ai, "wrath of air totem") {}
|
||||
};
|
||||
|
||||
class NoAirTotemTrigger : public TotemTrigger
|
||||
{
|
||||
public:
|
||||
NoAirTotemTrigger(PlayerbotAI* ai) : TotemTrigger(ai, "no air totem") {}
|
||||
bool IsActive() override;
|
||||
public:
|
||||
NoAirTotemTrigger(PlayerbotAI* ai) : TotemTrigger(ai, "no air totem") {}
|
||||
bool IsActive() override;
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -1,40 +1,32 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "TotemsShamanStrategy.h"
|
||||
|
||||
#include "Playerbots.h"
|
||||
|
||||
TotemsShamanStrategy::TotemsShamanStrategy(PlayerbotAI* botAI) : GenericShamanStrategy(botAI)
|
||||
{
|
||||
}
|
||||
TotemsShamanStrategy::TotemsShamanStrategy(PlayerbotAI* botAI) : GenericShamanStrategy(botAI) {}
|
||||
|
||||
void TotemsShamanStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
{
|
||||
GenericShamanStrategy::InitTriggers(triggers);
|
||||
|
||||
triggers.push_back(new TriggerNode("fire elemental totem", NextAction::array(0, new NextAction("fire elemental totem", 32.0f), nullptr)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"no air totem",
|
||||
NextAction::array(0, new NextAction("wrath of air totem", 8.0f), NULL)));
|
||||
triggers.push_back(new TriggerNode("fire elemental totem",
|
||||
NextAction::array(0, new NextAction("fire elemental totem", 32.0f), nullptr)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"no water totem",
|
||||
NextAction::array(0,
|
||||
new NextAction("mana spring totem", 7.0f),
|
||||
new NextAction("healing stream totem", 6.0f),
|
||||
nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("no air totem", NextAction::array(0, new NextAction("wrath of air totem", 8.0f), NULL)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"no fire totem",
|
||||
NextAction::array(0,
|
||||
new NextAction("flametongue totem", 7.0f),
|
||||
new NextAction("searing totem", 6.0f),
|
||||
nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("no water totem", NextAction::array(0, new NextAction("mana spring totem", 7.0f),
|
||||
new NextAction("healing stream totem", 6.0f), nullptr)));
|
||||
|
||||
triggers.push_back(new TriggerNode(
|
||||
"strength of earth totem",
|
||||
NextAction::array(0, new NextAction("strength of earth totem", 6.0f), NULL)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("no fire totem", NextAction::array(0, new NextAction("flametongue totem", 7.0f),
|
||||
new NextAction("searing totem", 6.0f), nullptr)));
|
||||
|
||||
triggers.push_back(new TriggerNode("strength of earth totem",
|
||||
NextAction::array(0, new NextAction("strength of earth totem", 6.0f), NULL)));
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it
|
||||
* and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#ifndef _PLAYERBOT_TOTEMSSHAMANSTRATEGY_H
|
||||
@@ -11,11 +12,11 @@ class PlayerbotAI;
|
||||
|
||||
class TotemsShamanStrategy : public GenericShamanStrategy
|
||||
{
|
||||
public:
|
||||
TotemsShamanStrategy(PlayerbotAI* botAI);
|
||||
public:
|
||||
TotemsShamanStrategy(PlayerbotAI* botAI);
|
||||
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
std::string const getName() override { return "totems"; }
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
std::string const getName() override { return "totems"; }
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user