mirror of
https://github.com/mod-playerbots/mod-playerbots.git
synced 2026-01-18 11:15:43 +00:00
Modify file structure
This commit is contained in:
@@ -1,83 +0,0 @@
|
||||
/*
|
||||
* 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 "ArmsWarriorStrategy.h"
|
||||
|
||||
#include "Playerbots.h"
|
||||
|
||||
class ArmsWarriorStrategyActionNodeFactory : public NamedObjectFactory<ActionNode>
|
||||
{
|
||||
public:
|
||||
ArmsWarriorStrategyActionNodeFactory()
|
||||
{
|
||||
creators["charge"] = &charge;
|
||||
creators["death wish"] = &death_wish;
|
||||
creators["piercing howl"] = &piercing_howl;
|
||||
creators["mocking blow"] = &mocking_blow;
|
||||
creators["heroic strike"] = &heroic_strike;
|
||||
}
|
||||
|
||||
private:
|
||||
ACTION_NODE_A(charge, "charge", "reach melee");
|
||||
ACTION_NODE_A(death_wish, "death wish", "bloodrage");
|
||||
ACTION_NODE_A(piercing_howl, "piercing howl", "mocking blow");
|
||||
ACTION_NODE_A(mocking_blow, "mocking blow", "hamstring");
|
||||
ACTION_NODE_A(heroic_strike, "heroic strike", "melee");
|
||||
};
|
||||
|
||||
ArmsWarriorStrategy::ArmsWarriorStrategy(PlayerbotAI* botAI) : GenericWarriorStrategy(botAI)
|
||||
{
|
||||
actionNodeFactories.Add(new ArmsWarriorStrategyActionNodeFactory());
|
||||
}
|
||||
|
||||
NextAction** ArmsWarriorStrategy::getDefaultActions()
|
||||
{
|
||||
return NextAction::array(0, new NextAction("bladestorm", ACTION_DEFAULT + 0.2f),
|
||||
new NextAction("mortal strike", ACTION_DEFAULT + 0.1f),
|
||||
new NextAction("melee", ACTION_DEFAULT), nullptr);
|
||||
}
|
||||
|
||||
void ArmsWarriorStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
{
|
||||
GenericWarriorStrategy::InitTriggers(triggers);
|
||||
|
||||
triggers.push_back(new TriggerNode("enemy out of melee",
|
||||
NextAction::array(0, new NextAction("charge", ACTION_MOVE + 9), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"battle stance", NextAction::array(0, new NextAction("battle stance", ACTION_HIGH + 9), nullptr)));
|
||||
triggers.push_back(new TriggerNode("battle shout",
|
||||
NextAction::array(0, new NextAction("battle shout", ACTION_HIGH + 8), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"mortal strike", NextAction::array(0, new NextAction("mortal strike", ACTION_HIGH + 1), nullptr)));
|
||||
triggers.push_back(new TriggerNode("target critical health",
|
||||
NextAction::array(0, new NextAction("execute", ACTION_HIGH + 4), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("sudden death", NextAction::array(0, new NextAction("execute", ACTION_HIGH + 4), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("hamstring", NextAction::array(0, new NextAction("piercing howl", ACTION_HIGH), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("overpower", NextAction::array(0, new NextAction("overpower", ACTION_HIGH + 3), nullptr)));
|
||||
triggers.push_back(new TriggerNode("taste for blood",
|
||||
NextAction::array(0, new NextAction("overpower", ACTION_HIGH + 3), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"victory rush", NextAction::array(0, new NextAction("victory rush", ACTION_INTERRUPT), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"high rage available", NextAction::array(0, new NextAction("heroic strike", ACTION_HIGH + 10), nullptr)));
|
||||
triggers.push_back(new TriggerNode("medium rage available",
|
||||
NextAction::array(0, new NextAction("slam", ACTION_HIGH + 1),
|
||||
new NextAction("thunder clap", ACTION_HIGH),
|
||||
nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("bloodrage", NextAction::array(0, new NextAction("bloodrage", ACTION_HIGH + 2), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("death wish", NextAction::array(0, new NextAction("death wish", ACTION_HIGH + 2), nullptr)));
|
||||
triggers.push_back(new TriggerNode("rend", NextAction::array(0, new NextAction("rend", ACTION_HIGH + 5), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"rend on attacker", NextAction::array(0, new NextAction("rend on attacker", ACTION_HIGH + 5), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"critical health", NextAction::array(0, new NextAction("intimidating shout", ACTION_EMERGENCY), nullptr)));
|
||||
triggers.push_back(new TriggerNode("medium aoe",
|
||||
NextAction::array(0, new NextAction("thunder clap", ACTION_HIGH + 2), nullptr)));
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
/*
|
||||
* 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_ARMSWARRIORSTRATEGY_H
|
||||
#define _PLAYERBOT_ARMSWARRIORSTRATEGY_H
|
||||
|
||||
#include "GenericWarriorStrategy.h"
|
||||
|
||||
class PlayerbotAI;
|
||||
|
||||
class ArmsWarriorStrategy : public GenericWarriorStrategy
|
||||
{
|
||||
public:
|
||||
ArmsWarriorStrategy(PlayerbotAI* botAI);
|
||||
|
||||
public:
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
std::string const getName() override { return "arms"; }
|
||||
NextAction** getDefaultActions() override;
|
||||
uint32 GetType() const override { return STRATEGY_TYPE_COMBAT | STRATEGY_TYPE_DPS | STRATEGY_TYPE_MELEE; }
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,86 +0,0 @@
|
||||
/*
|
||||
* 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 "FuryWarriorStrategy.h"
|
||||
|
||||
#include "Playerbots.h"
|
||||
|
||||
class FuryWarriorStrategyActionNodeFactory : public NamedObjectFactory<ActionNode>
|
||||
{
|
||||
public:
|
||||
FuryWarriorStrategyActionNodeFactory()
|
||||
{
|
||||
creators["charge"] = &charge;
|
||||
creators["intercept"] = &intercept;
|
||||
// creators["death wish"] = &death_wish;
|
||||
creators["piercing howl"] = &piercing_howl;
|
||||
// creators["bloodthirst"] = &bloodthirst;
|
||||
creators["pummel"] = &pummel;
|
||||
}
|
||||
|
||||
private:
|
||||
ACTION_NODE_A(charge, "charge", "intercept");
|
||||
ACTION_NODE_A(intercept, "intercept", "reach melee");
|
||||
ACTION_NODE_A(piercing_howl, "piercing howl", "hamstring");
|
||||
// ACTION_NODE_A(death_wish, "death wish", "berserker rage");
|
||||
// ACTION_NODE_A(bloodthirst, "bloodthirst", "melee");
|
||||
ACTION_NODE_A(pummel, "pummel", "intercept");
|
||||
};
|
||||
|
||||
FuryWarriorStrategy::FuryWarriorStrategy(PlayerbotAI* botAI) : GenericWarriorStrategy(botAI)
|
||||
{
|
||||
actionNodeFactories.Add(new FuryWarriorStrategyActionNodeFactory());
|
||||
}
|
||||
|
||||
NextAction** FuryWarriorStrategy::getDefaultActions()
|
||||
{
|
||||
return NextAction::array(
|
||||
0, new NextAction("bloodthirst", ACTION_DEFAULT + 0.5f), new NextAction("whirlwind", ACTION_DEFAULT + 0.4f),
|
||||
new NextAction("sunder armor", ACTION_DEFAULT + 0.3f), new NextAction("execute", ACTION_DEFAULT + 0.2f),
|
||||
// new NextAction("overpower", ACTION_DEFAULT + 0.1f),
|
||||
new NextAction("melee", ACTION_DEFAULT), NULL);
|
||||
}
|
||||
|
||||
void FuryWarriorStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
{
|
||||
GenericWarriorStrategy::InitTriggers(triggers);
|
||||
|
||||
triggers.push_back(new TriggerNode("enemy out of melee",
|
||||
NextAction::array(0, new NextAction("charge", ACTION_MOVE + 9), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"berserker stance", NextAction::array(0, new NextAction("berserker stance", ACTION_HIGH + 9), nullptr)));
|
||||
triggers.push_back(new TriggerNode("battle shout",
|
||||
NextAction::array(0, new NextAction("battle shout", ACTION_HIGH + 8), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("target critical health", NextAction::array(0, new NextAction("execute",
|
||||
// ACTION_HIGH + 4), nullptr))); triggers.push_back(new TriggerNode("sudden death", NextAction::array(0, new
|
||||
// NextAction("execute", ACTION_HIGH + 4), nullptr))); triggers.push_back(new TriggerNode("hamstring",
|
||||
// NextAction::array(0, new NextAction("piercing howl", ACTION_HIGH + 1), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("pummel on enemy healer",
|
||||
NextAction::array(0, new NextAction("pummel on enemy healer", ACTION_INTERRUPT), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("pummel", NextAction::array(0, new NextAction("pummel", ACTION_INTERRUPT), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"victory rush", NextAction::array(0, new NextAction("victory rush", ACTION_INTERRUPT), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("intercept on snare target", NextAction::array(0, new NextAction("intercept on
|
||||
// snare target", ACTION_HIGH), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("bloodthirst", NextAction::array(0, new NextAction("bloodthirst", ACTION_HIGH + 7), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("instant slam", NextAction::array(0, new NextAction("slam", ACTION_HIGH + 5), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("bloodrage", NextAction::array(0, new NextAction("bloodrage", ACTION_HIGH + 2), nullptr)));
|
||||
triggers.push_back(new TriggerNode("medium rage available",
|
||||
NextAction::array(0, new NextAction("heroic strike", ACTION_HIGH + 1), NULL)));
|
||||
// triggers.push_back(new TriggerNode("berserker rage", NextAction::array(0, new NextAction("berserker rage",
|
||||
// ACTION_HIGH + 2), nullptr))); triggers.push_back(new TriggerNode("light aoe", NextAction::array(0,
|
||||
// new NextAction("whirlwind", ACTION_HIGH + 2),
|
||||
// nullptr)));
|
||||
|
||||
triggers.push_back(
|
||||
new TriggerNode("death wish", NextAction::array(0, new NextAction("death wish", ACTION_HIGH), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("recklessness", NextAction::array(0, new NextAction("recklessness", ACTION_HIGH), nullptr)));
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
/*
|
||||
* 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_FURYWARRIORSTRATEGY_H
|
||||
#define _PLAYERBOT_FURYWARRIORSTRATEGY_H
|
||||
|
||||
#include "GenericWarriorStrategy.h"
|
||||
|
||||
class PlayerbotAI;
|
||||
|
||||
class FuryWarriorStrategy : public GenericWarriorStrategy
|
||||
{
|
||||
public:
|
||||
FuryWarriorStrategy(PlayerbotAI* botAI);
|
||||
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
std::string const getName() override { return "fury"; }
|
||||
NextAction** getDefaultActions() override;
|
||||
uint32 GetType() const override { return STRATEGY_TYPE_COMBAT | STRATEGY_TYPE_DPS | STRATEGY_TYPE_MELEE; }
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,17 +0,0 @@
|
||||
/*
|
||||
* 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 "GenericWarriorNonCombatStrategy.h"
|
||||
|
||||
#include "Playerbots.h"
|
||||
|
||||
void GenericWarriorNonCombatStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
{
|
||||
NonCombatStrategy::InitTriggers(triggers);
|
||||
|
||||
triggers.push_back(new TriggerNode("often", NextAction::array(0, new NextAction("apply stone", 1.0f), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("battle stance", NextAction::array(0, new NextAction("battle stance", 1.0f),
|
||||
// nullptr)));
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
/*
|
||||
* 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_GENERICWARRIORNONCOBATSTRATEGY_H
|
||||
#define _PLAYERBOT_GENERICWARRIORNONCOBATSTRATEGY_H
|
||||
|
||||
#include "NonCombatStrategy.h"
|
||||
|
||||
class PlayerbotAI;
|
||||
|
||||
class GenericWarriorNonCombatStrategy : public NonCombatStrategy
|
||||
{
|
||||
public:
|
||||
GenericWarriorNonCombatStrategy(PlayerbotAI* botAI) : NonCombatStrategy(botAI) {}
|
||||
|
||||
std::string const getName() override { return "nc"; }
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,63 +0,0 @@
|
||||
/*
|
||||
* 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 "GenericWarriorStrategy.h"
|
||||
|
||||
#include "Playerbots.h"
|
||||
|
||||
GenericWarriorStrategy::GenericWarriorStrategy(PlayerbotAI* botAI) : CombatStrategy(botAI)
|
||||
{
|
||||
// actionNodeFactories.Add(new WarriorStanceRequirementActionNodeFactory());
|
||||
}
|
||||
|
||||
void GenericWarriorStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
{
|
||||
CombatStrategy::InitTriggers(triggers);
|
||||
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("bloodrage", NextAction::array(0, new NextAction("bloodrage", ACTION_HIGH + 1),
|
||||
nullptr))); triggers.push_back(new TriggerNode("shield bash", NextAction::array(0, new NextAction("shield bash",
|
||||
ACTION_INTERRUPT + 4), nullptr))); triggers.push_back(new TriggerNode("shield bash on enemy healer",
|
||||
NextAction::array(0, new NextAction("shield bash on enemy healer", ACTION_INTERRUPT + 3), nullptr)));
|
||||
triggers.push_back(new TriggerNode("critical health", NextAction::array(0, new NextAction("intimidating shout",
|
||||
ACTION_EMERGENCY), nullptr)));*/
|
||||
}
|
||||
|
||||
class WarrirorAoeStrategyActionNodeFactory : public NamedObjectFactory<ActionNode>
|
||||
{
|
||||
public:
|
||||
WarrirorAoeStrategyActionNodeFactory()
|
||||
{
|
||||
// creators["whirlwind"] = &whirlwind;
|
||||
}
|
||||
|
||||
private:
|
||||
// ACTION_NODE_A(whirlwind, "whirlwind", "cleave");
|
||||
};
|
||||
|
||||
WarrirorAoeStrategy::WarrirorAoeStrategy(PlayerbotAI* botAI) : CombatStrategy(botAI)
|
||||
{
|
||||
actionNodeFactories.Add(new WarrirorAoeStrategyActionNodeFactory());
|
||||
}
|
||||
|
||||
void WarrirorAoeStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
{
|
||||
// triggers.push_back(new TriggerNode("thunder clap on snare target", NextAction::array(0, new NextAction("thunder
|
||||
// clap on snare target", ACTION_HIGH + 3), nullptr))); triggers.push_back(new TriggerNode("thunder clap",
|
||||
// NextAction::array(0, new NextAction("thunder clap", ACTION_HIGH + 10), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"light aoe", NextAction::array(0, new NextAction("thunder clap", ACTION_HIGH + 5),
|
||||
new NextAction("shockwave", ACTION_HIGH + 4),
|
||||
new NextAction("sweeping strikes", ACTION_HIGH + 3),
|
||||
new NextAction("bladestorm", ACTION_HIGH + 3),
|
||||
// new NextAction("whirlwind", ACTION_HIGH + 2),
|
||||
new NextAction("demoralizing shout without life time check", ACTION_HIGH + 1),
|
||||
new NextAction("cleave", ACTION_HIGH), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("shockwave on snare target",
|
||||
NextAction::array(0, new NextAction("shockwave on snare target", ACTION_HIGH + 5), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("high rage available", NextAction::array(0, new NextAction("whirlwind",
|
||||
// ACTION_HIGH + 10), nullptr)));
|
||||
}
|
||||
@@ -1,80 +0,0 @@
|
||||
/*
|
||||
* 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_GENERICWARRIORSTRATEGY_H
|
||||
#define _PLAYERBOT_GENERICWARRIORSTRATEGY_H
|
||||
|
||||
#include "CombatStrategy.h"
|
||||
|
||||
class PlayerbotAI;
|
||||
|
||||
// Stance requirements
|
||||
class WarriorStanceRequirementActionNodeFactory : public NamedObjectFactory<ActionNode>
|
||||
{
|
||||
public:
|
||||
WarriorStanceRequirementActionNodeFactory()
|
||||
{
|
||||
// battle only
|
||||
creators["charge"] = &charge;
|
||||
creators["mocking blow"] = &mocking_blow;
|
||||
creators["overpower"] = &overpower;
|
||||
|
||||
// temp
|
||||
creators["mortal strike"] = &mortal_strike;
|
||||
|
||||
// berserker only
|
||||
creators["berserker rage"] = &berserker_rage;
|
||||
creators["recklessness"] = &recklessness;
|
||||
creators["whirlwind"] = &whirlwind;
|
||||
creators["pummel"] = &pummel;
|
||||
creators["intercept"] = &intercept;
|
||||
|
||||
// defensive only
|
||||
creators["taunt"] = &taunt;
|
||||
creators["revenge"] = &revenge;
|
||||
creators["shield block"] = &shield_block;
|
||||
creators["disarm"] = &disarm;
|
||||
creators["shield wall"] = &shield_wall;
|
||||
creators["intervene"] = &intervene;
|
||||
}
|
||||
|
||||
private:
|
||||
ACTION_NODE_P(charge, "charge", "battle stance");
|
||||
ACTION_NODE_P(mocking_blow, "mocking blow", "battle stance");
|
||||
ACTION_NODE_P(overpower, "overpower", "battle stance");
|
||||
ACTION_NODE_P(berserker_rage, "berserker rage", "berserker stance");
|
||||
ACTION_NODE_P(recklessness, "recklessness", "berserker stance");
|
||||
ACTION_NODE_P(whirlwind, "whirlwind", "berserker stance");
|
||||
ACTION_NODE_P(pummel, "pummel", "berserker stance");
|
||||
ACTION_NODE_P(intercept, "intercept", "berserker stance");
|
||||
ACTION_NODE_P(taunt, "taunt", "defensive stance");
|
||||
ACTION_NODE_P(revenge, "revenge", "defensive stance");
|
||||
ACTION_NODE_P(shield_block, "shield block", "defensive stance");
|
||||
ACTION_NODE_P(disarm, "disarm", "defensive stance");
|
||||
ACTION_NODE_P(shield_wall, "shield wall", "defensive stance");
|
||||
ACTION_NODE_P(intervene, "intervene", "defensive stance");
|
||||
// temp
|
||||
ACTION_NODE_P(mortal_strike, "mortal strike", "battle stance");
|
||||
};
|
||||
|
||||
class GenericWarriorStrategy : public CombatStrategy
|
||||
{
|
||||
public:
|
||||
GenericWarriorStrategy(PlayerbotAI* botAI);
|
||||
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
std::string const getName() override { return "warrior"; }
|
||||
};
|
||||
|
||||
class WarrirorAoeStrategy : public CombatStrategy
|
||||
{
|
||||
public:
|
||||
WarrirorAoeStrategy(PlayerbotAI* botAI);
|
||||
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
std::string const getName() override { return "aoe"; }
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,123 +0,0 @@
|
||||
/*
|
||||
* 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 "TankWarriorStrategy.h"
|
||||
|
||||
#include "Playerbots.h"
|
||||
|
||||
class TankWarriorStrategyActionNodeFactory : public NamedObjectFactory<ActionNode>
|
||||
{
|
||||
public:
|
||||
TankWarriorStrategyActionNodeFactory()
|
||||
{
|
||||
creators["charge"] = &charge;
|
||||
creators["sunder armor"] = &sunder_armor;
|
||||
creators["commanding shout"] = &commanding_shout;
|
||||
// creators["shield slam"] = &shield_slam;
|
||||
creators["devastate"] = &devastate;
|
||||
creators["last stand"] = &last_stand;
|
||||
creators["heroic throw on snare target"] = &heroic_throw_on_snare_target;
|
||||
creators["heroic throw taunt"] = &heroic_throw_taunt;
|
||||
creators["taunt"] = &taunt;
|
||||
creators["taunt spell"] = &taunt;
|
||||
}
|
||||
|
||||
private:
|
||||
// ACTION_NODE_A(charge, "charge", "intercept with stance");
|
||||
ACTION_NODE_A(charge, "charge", "reach melee");
|
||||
ACTION_NODE_A(sunder_armor, "sunder armor", "melee");
|
||||
ACTION_NODE_A(commanding_shout, "commanding shout", "battle shout");
|
||||
// ACTION_NODE_A(shield_slam, "shield slam", "heroic strike");
|
||||
ACTION_NODE_A(devastate, "devastate", "sunder armor");
|
||||
ACTION_NODE_A(last_stand, "last stand", "intimidating shout");
|
||||
ACTION_NODE_A(heroic_throw_on_snare_target, "heroic throw on snare target", "taunt on snare target");
|
||||
ACTION_NODE_A(heroic_throw_taunt, "heroic throw", "shield slam");
|
||||
static ActionNode* taunt(PlayerbotAI* botAI)
|
||||
{
|
||||
return new ActionNode("taunt",
|
||||
/*P*/ nullptr,
|
||||
/*A*/ NextAction::array(0, new NextAction("heroic throw taunt"), nullptr),
|
||||
/*C*/ nullptr);
|
||||
}
|
||||
};
|
||||
|
||||
TankWarriorStrategy::TankWarriorStrategy(PlayerbotAI* botAI) : GenericWarriorStrategy(botAI)
|
||||
{
|
||||
actionNodeFactories.Add(new TankWarriorStrategyActionNodeFactory());
|
||||
}
|
||||
|
||||
NextAction** TankWarriorStrategy::getDefaultActions()
|
||||
{
|
||||
return NextAction::array(
|
||||
0, new NextAction("devastate", ACTION_DEFAULT + 0.3f), new NextAction("revenge", ACTION_DEFAULT + 0.2f),
|
||||
new NextAction("demoralizing shout", ACTION_DEFAULT + 0.1f), new NextAction("melee", ACTION_DEFAULT), NULL);
|
||||
}
|
||||
|
||||
void TankWarriorStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
{
|
||||
GenericWarriorStrategy::InitTriggers(triggers);
|
||||
|
||||
triggers.push_back(
|
||||
new TriggerNode("enemy out of melee", NextAction::array(0, new NextAction("heroic throw", ACTION_MOVE + 11),
|
||||
new NextAction("charge", ACTION_MOVE + 10), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("intercept and rage", NextAction::array(0, new NextAction("berserker stance",
|
||||
// ACTION_MOVE + 14), nullptr))); triggers.push_back(new TriggerNode("intercept and rage", NextAction::array(0, new
|
||||
// NextAction("intercept", ACTION_MOVE + 13), nullptr))); triggers.push_back(new TriggerNode("thunder clap and
|
||||
// rage", NextAction::array(0, new NextAction("battle stance", ACTION_MOVE + 12), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"thunder clap and rage", NextAction::array(0, new NextAction("thunder clap", ACTION_MOVE + 11), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"defensive stance", NextAction::array(0, new NextAction("defensive stance", ACTION_HIGH + 9), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"commanding shout", NextAction::array(0, new NextAction("commanding shout", ACTION_HIGH + 8), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("bloodrage", NextAction::array(0, new NextAction("bloodrage", ACTION_HIGH + 2), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("sunder armor", NextAction::array(0, new NextAction("devastate", ACTION_HIGH + 2), nullptr)));
|
||||
triggers.push_back(new TriggerNode("medium rage available",
|
||||
NextAction::array(0, new NextAction("shield slam", ACTION_HIGH + 1), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"shield block", NextAction::array(0, new NextAction("shield block", ACTION_INTERRUPT + 1), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("revenge", NextAction::array(0, new NextAction("revenge", ACTION_HIGH + 2), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("disarm", NextAction::array(0, new NextAction("disarm", ACTION_HIGH + 1), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("lose aggro", NextAction::array(0, new NextAction("taunt", ACTION_INTERRUPT + 1), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"taunt on snare target",
|
||||
NextAction::array(0, new NextAction("heroic throw on snare target", ACTION_INTERRUPT), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"low health", NextAction::array(0, new NextAction("shield wall", ACTION_MEDIUM_HEAL), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"critical health", NextAction::array(0, new NextAction("last stand", ACTION_EMERGENCY + 3), nullptr)));
|
||||
// triggers.push_back(new TriggerNode("medium aoe", NextAction::array(0, new NextAction("battle shout taunt",
|
||||
// ACTION_HIGH + 1), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"high aoe", NextAction::array(0, new NextAction("challenging shout", ACTION_HIGH + 3), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"concussion blow", NextAction::array(0, new NextAction("concussion blow", ACTION_INTERRUPT), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("shield bash", NextAction::array(0, new NextAction("shield bash", ACTION_INTERRUPT), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"shield bash on enemy healer",
|
||||
NextAction::array(0, new NextAction("shield bash on enemy healer", ACTION_INTERRUPT), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"spell reflection", NextAction::array(0, new NextAction("spell reflection", ACTION_INTERRUPT + 1), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"victory rush", NextAction::array(0, new NextAction("victory rush", ACTION_INTERRUPT), nullptr)));
|
||||
triggers.push_back(new TriggerNode("sword and board",
|
||||
NextAction::array(0, new NextAction("shield slam", ACTION_INTERRUPT), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("rend", NextAction::array(0, new NextAction("rend", ACTION_NORMAL + 1), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"rend on attacker", NextAction::array(0, new NextAction("rend on attacker", ACTION_NORMAL + 1), nullptr)));
|
||||
triggers.push_back(new TriggerNode("protect party member",
|
||||
NextAction::array(0, new NextAction("intervene", ACTION_EMERGENCY), nullptr)));
|
||||
triggers.push_back(new TriggerNode(
|
||||
"high rage available", NextAction::array(0, new NextAction("heroic strike", ACTION_HIGH + 1), nullptr)));
|
||||
triggers.push_back(new TriggerNode("medium rage available",
|
||||
NextAction::array(0, new NextAction("thunder clap", ACTION_HIGH + 1), nullptr)));
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
/*
|
||||
* 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_TANKWARRIORSTRATEGY_H
|
||||
#define _PLAYERBOT_TANKWARRIORSTRATEGY_H
|
||||
|
||||
#include "GenericWarriorStrategy.h"
|
||||
#include "WarriorTriggers.h"
|
||||
|
||||
class PlayerbotAI;
|
||||
|
||||
class TankWarriorStrategy : public GenericWarriorStrategy
|
||||
{
|
||||
public:
|
||||
TankWarriorStrategy(PlayerbotAI* botAI);
|
||||
|
||||
void InitTriggers(std::vector<TriggerNode*>& triggers) override;
|
||||
std::string const getName() override { return "tank"; }
|
||||
NextAction** getDefaultActions() override;
|
||||
uint32 GetType() const override { return STRATEGY_TYPE_TANK | STRATEGY_TYPE_MELEE; }
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,14 +0,0 @@
|
||||
/*
|
||||
* 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 "WarriorActions.h"
|
||||
|
||||
#include "Playerbots.h"
|
||||
|
||||
bool CastSunderArmorAction::isUseful()
|
||||
{
|
||||
Aura* aura = botAI->GetAura("sunder armor", GetTarget(), false, true);
|
||||
return !aura || aura->GetStackAmount() < 5 || aura->GetDuration() <= 6000;
|
||||
}
|
||||
@@ -1,138 +0,0 @@
|
||||
/*
|
||||
* 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_WARRIORACTIONS_H
|
||||
#define _PLAYERBOT_WARRIORACTIONS_H
|
||||
|
||||
#include "AiObject.h"
|
||||
#include "GenericSpellActions.h"
|
||||
#include "Player.h"
|
||||
#include "PlayerbotAI.h"
|
||||
#include "ReachTargetActions.h"
|
||||
|
||||
// stances
|
||||
BUFF_ACTION(CastBattleStanceAction, "battle stance");
|
||||
BUFF_ACTION(CastDefensiveStanceAction, "defensive stance");
|
||||
BUFF_ACTION(CastBerserkerStanceAction, "berserker stance");
|
||||
|
||||
// shouts
|
||||
BUFF_ACTION(CastBattleShoutAction, "battle shout");
|
||||
MELEE_ACTION_U(CastBattleShoutTauntAction, "battle shout", CastSpellAction::isUseful()); // useful to rebuff
|
||||
// DEBUFF_ACTION_R(CastDemoralizingShoutAction, "demoralizing shout", 8.0f); // low range debuff
|
||||
|
||||
class CastDemoralizingShoutAction : public CastMeleeDebuffSpellAction
|
||||
{
|
||||
public:
|
||||
CastDemoralizingShoutAction(PlayerbotAI* botAI)
|
||||
: CastMeleeDebuffSpellAction(botAI, "demoralizing shout") {}
|
||||
};
|
||||
|
||||
class CastDemoralizingShoutWithoutLifeTimeCheckAction : public CastMeleeDebuffSpellAction
|
||||
{
|
||||
public:
|
||||
CastDemoralizingShoutWithoutLifeTimeCheckAction(PlayerbotAI* botAI)
|
||||
: CastMeleeDebuffSpellAction(botAI, "demoralizing shout", false, 0.0f)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
MELEE_ACTION(CastChallengingShoutAction, "challenging shout");
|
||||
DEBUFF_ACTION_R(CastIntimidatingShoutAction, "intimidating shout", 8.0f);
|
||||
// shouts 2.4.3
|
||||
BUFF_ACTION(CastCommandingShoutAction, "commanding shout");
|
||||
|
||||
// arms
|
||||
MELEE_ACTION(CastHeroicStrikeAction, "heroic strike");
|
||||
REACH_ACTION(CastChargeAction, "charge", 8.0f);
|
||||
DEBUFF_CHECKISOWNER_ACTION(CastRendAction, "rend");
|
||||
// DEBUFF_ENEMY_ACTION(CastRendOnAttackerAction, "rend");
|
||||
|
||||
class CastRendOnAttackerAction : public CastDebuffSpellOnMeleeAttackerAction
|
||||
{
|
||||
public:
|
||||
CastRendOnAttackerAction(PlayerbotAI* botAI) : CastDebuffSpellOnMeleeAttackerAction(botAI, "rend") {}
|
||||
};
|
||||
|
||||
MELEE_ACTION(CastThunderClapAction, "thunder clap");
|
||||
SNARE_ACTION(CastThunderClapSnareAction, "thunder clap");
|
||||
SNARE_ACTION(CastHamstringAction, "hamstring");
|
||||
MELEE_ACTION(CastOverpowerAction, "overpower");
|
||||
MELEE_ACTION(CastMockingBlowAction, "mocking blow");
|
||||
BUFF_ACTION(CastRetaliationAction, "retaliation");
|
||||
// arms 3.3.5
|
||||
SPELL_ACTION(CastHeroicThrowAction, "heroic throw");
|
||||
SNARE_ACTION(CastHeroicThrowSnareAction, "heroic throw");
|
||||
DEBUFF_ACTION(CastShatteringThrowAction, "shattering throw");
|
||||
|
||||
// arms talents
|
||||
MELEE_ACTION(CastMortalStrikeAction, "mortal strike");
|
||||
BUFF_ACTION(CastSweepingStrikesAction, "sweeping strikes");
|
||||
// arms talents 3.3.5
|
||||
MELEE_ACTION(CastBladestormAction, "bladestorm");
|
||||
|
||||
// fury
|
||||
MELEE_ACTION(CastCleaveAction, "cleave");
|
||||
MELEE_ACTION(CastExecuteAction, "execute");
|
||||
REACH_ACTION(CastInterceptAction, "intercept", 8.0f);
|
||||
ENEMY_HEALER_ACTION(CastInterceptOnEnemyHealerAction, "intercept");
|
||||
SNARE_ACTION(CastInterceptOnSnareTargetAction, "intercept");
|
||||
MELEE_ACTION(CastSlamAction, "slam");
|
||||
BUFF_ACTION(CastBerserkerRageAction, "berserker rage");
|
||||
MELEE_ACTION(CastWhirlwindAction, "whirlwind");
|
||||
MELEE_ACTION(CastPummelAction, "pummel");
|
||||
ENEMY_HEALER_ACTION(CastPummelOnEnemyHealerAction, "pummel");
|
||||
// fury 2.4.3
|
||||
MELEE_ACTION(CastVictoryRushAction, "victory rush");
|
||||
// fury 3.3.5
|
||||
BUFF_ACTION(CastEnragedRegenerationAction, "enraged regeneration");
|
||||
BUFF_ACTION(CastHeroicFuryAction, "heroic fury");
|
||||
|
||||
// fury talents
|
||||
BUFF_ACTION(CastDeathWishAction, "death wish");
|
||||
BUFF_ACTION(CastRecklessnessAction, "recklessness");
|
||||
MELEE_ACTION(CastBloodthirstAction, "bloodthirst");
|
||||
DEBUFF_ACTION_R(CastPiercingHowlAction, "piercing howl", 8.0f);
|
||||
// fury talents 2.4.3
|
||||
BUFF_ACTION(CastRampageAction, "rampage");
|
||||
|
||||
// protection
|
||||
MELEE_ACTION_U(CastTauntAction, "taunt", GetTarget() && GetTarget()->GetTarget() != bot->GetGUID());
|
||||
SNARE_ACTION(CastTauntOnSnareTargetAction, "taunt");
|
||||
BUFF_ACTION(CastBloodrageAction, "bloodrage");
|
||||
MELEE_ACTION(CastShieldBashAction, "shield bash");
|
||||
ENEMY_HEALER_ACTION(CastShieldBashOnEnemyHealerAction, "shield bash");
|
||||
MELEE_ACTION(CastRevengeAction, "revenge");
|
||||
BUFF_ACTION(CastShieldBlockAction, "shield block");
|
||||
DEBUFF_ACTION_U(CastDisarmAction, "disarm",
|
||||
GetTarget() && GetTarget()->IsPlayer() ? !botAI->IsRanged((Player*)GetTarget())
|
||||
: CastDebuffSpellAction::isUseful());
|
||||
DEBUFF_ENEMY_ACTION(CastDisarmOnAttackerAction, "disarm");
|
||||
BUFF_ACTION(CastShieldWallAction, "shield wall");
|
||||
// protection 2.4.3
|
||||
PROTECT_ACTION(CastInterveneAction, "intervene");
|
||||
BUFF_ACTION(CastSpellReflectionAction, "spell reflection");
|
||||
|
||||
// protection talents
|
||||
BUFF_ACTION(CastLastStandAction, "last stand");
|
||||
MELEE_ACTION(CastShieldSlamAction, "shield slam");
|
||||
MELEE_ACTION(CastConcussionBlowAction, "concussion blow");
|
||||
// protection talents 2.4.3
|
||||
MELEE_ACTION(CastDevastateAction, "devastate");
|
||||
// protection talents 3.3.5
|
||||
DEBUFF_ACTION_R(CastShockwaveAction, "shockwave", 8.0f);
|
||||
SNARE_ACTION(CastShockwaveSnareAction, "shockwave");
|
||||
|
||||
class CastSunderArmorAction : public CastDebuffSpellAction
|
||||
{
|
||||
public:
|
||||
CastSunderArmorAction(PlayerbotAI* botAI) : CastDebuffSpellAction(botAI, "sunder armor")
|
||||
{
|
||||
range = ATTACK_DISTANCE;
|
||||
}
|
||||
|
||||
bool isUseful() override;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,315 +0,0 @@
|
||||
/*
|
||||
* 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 "WarriorAiObjectContext.h"
|
||||
|
||||
#include "ArmsWarriorStrategy.h"
|
||||
#include "FuryWarriorStrategy.h"
|
||||
#include "GenericWarriorNonCombatStrategy.h"
|
||||
#include "NamedObjectContext.h"
|
||||
#include "Playerbots.h"
|
||||
#include "PullStrategy.h"
|
||||
#include "TankWarriorStrategy.h"
|
||||
#include "WarriorActions.h"
|
||||
#include "WarriorTriggers.h"
|
||||
|
||||
class WarriorStrategyFactoryInternal : public NamedObjectContext<Strategy>
|
||||
{
|
||||
public:
|
||||
WarriorStrategyFactoryInternal()
|
||||
{
|
||||
creators["nc"] = &WarriorStrategyFactoryInternal::nc;
|
||||
creators["pull"] = &WarriorStrategyFactoryInternal::pull;
|
||||
creators["aoe"] = &WarriorStrategyFactoryInternal::warrior_aoe;
|
||||
}
|
||||
|
||||
private:
|
||||
static Strategy* nc(PlayerbotAI* botAI) { return new GenericWarriorNonCombatStrategy(botAI); }
|
||||
static Strategy* warrior_aoe(PlayerbotAI* botAI) { return new WarrirorAoeStrategy(botAI); }
|
||||
static Strategy* pull(PlayerbotAI* botAI) { return new PullStrategy(botAI, "shoot"); }
|
||||
};
|
||||
|
||||
class WarriorCombatStrategyFactoryInternal : public NamedObjectContext<Strategy>
|
||||
{
|
||||
public:
|
||||
WarriorCombatStrategyFactoryInternal() : NamedObjectContext<Strategy>(false, true)
|
||||
{
|
||||
creators["tank"] = &WarriorCombatStrategyFactoryInternal::tank;
|
||||
creators["arms"] = &WarriorCombatStrategyFactoryInternal::arms;
|
||||
creators["fury"] = &WarriorCombatStrategyFactoryInternal::fury;
|
||||
}
|
||||
|
||||
private:
|
||||
static Strategy* tank(PlayerbotAI* botAI) { return new TankWarriorStrategy(botAI); }
|
||||
static Strategy* arms(PlayerbotAI* botAI) { return new ArmsWarriorStrategy(botAI); }
|
||||
static Strategy* fury(PlayerbotAI* botAI) { return new FuryWarriorStrategy(botAI); }
|
||||
};
|
||||
|
||||
class WarriorTriggerFactoryInternal : public NamedObjectContext<Trigger>
|
||||
{
|
||||
public:
|
||||
WarriorTriggerFactoryInternal()
|
||||
{
|
||||
creators["hamstring"] = &WarriorTriggerFactoryInternal::hamstring;
|
||||
creators["victory rush"] = &WarriorTriggerFactoryInternal::victory_rush;
|
||||
creators["death wish"] = &WarriorTriggerFactoryInternal::death_wish;
|
||||
creators["recklessness"] = &WarriorTriggerFactoryInternal::recklessness;
|
||||
creators["battle shout"] = &WarriorTriggerFactoryInternal::battle_shout;
|
||||
creators["rend"] = &WarriorTriggerFactoryInternal::rend;
|
||||
creators["rend on attacker"] = &WarriorTriggerFactoryInternal::rend_on_attacker;
|
||||
creators["bloodrage"] = &WarriorTriggerFactoryInternal::bloodrage;
|
||||
creators["shield bash"] = &WarriorTriggerFactoryInternal::shield_bash;
|
||||
creators["disarm"] = &WarriorTriggerFactoryInternal::disarm;
|
||||
creators["concussion blow"] = &WarriorTriggerFactoryInternal::concussion_blow;
|
||||
creators["sword and board"] = &WarriorTriggerFactoryInternal::SwordAndBoard;
|
||||
creators["shield bash on enemy healer"] = &WarriorTriggerFactoryInternal::shield_bash_on_enemy_healer;
|
||||
creators["battle stance"] = &WarriorTriggerFactoryInternal::battle_stance;
|
||||
creators["defensive stance"] = &WarriorTriggerFactoryInternal::defensive_stance;
|
||||
creators["berserker stance"] = &WarriorTriggerFactoryInternal::berserker_stance;
|
||||
creators["shield block"] = &WarriorTriggerFactoryInternal::shield_block;
|
||||
creators["sunder armor"] = &WarriorTriggerFactoryInternal::sunder_armor;
|
||||
creators["revenge"] = &WarriorTriggerFactoryInternal::revenge;
|
||||
creators["overpower"] = &WarriorTriggerFactoryInternal::overpower;
|
||||
creators["mocking blow"] = &WarriorTriggerFactoryInternal::mocking_blow;
|
||||
creators["rampage"] = &WarriorTriggerFactoryInternal::rampage;
|
||||
creators["mortal strike"] = &WarriorTriggerFactoryInternal::mortal_strike;
|
||||
creators["thunder clap on snare target"] = &WarriorTriggerFactoryInternal::thunder_clap_on_snare_target;
|
||||
creators["thunder clap"] = &WarriorTriggerFactoryInternal::thunder_clap;
|
||||
creators["bloodthirst"] = &WarriorTriggerFactoryInternal::bloodthirst;
|
||||
creators["berserker rage"] = &WarriorTriggerFactoryInternal::berserker_rage;
|
||||
creators["pummel on enemy healer"] = &WarriorTriggerFactoryInternal::pummel_on_enemy_healer;
|
||||
creators["pummel"] = &WarriorTriggerFactoryInternal::pummel;
|
||||
creators["intercept on enemy healer"] = &WarriorTriggerFactoryInternal::intercept_on_enemy_healer;
|
||||
creators["intercept"] = &WarriorTriggerFactoryInternal::intercept;
|
||||
creators["taunt on snare target"] = &WarriorTriggerFactoryInternal::taunt_on_snare_target;
|
||||
creators["commanding shout"] = &WarriorTriggerFactoryInternal::commanding_shout;
|
||||
creators["intercept on snare target"] = &WarriorTriggerFactoryInternal::intercept_on_snare_target;
|
||||
creators["spell reflection"] = &WarriorTriggerFactoryInternal::spell_reflection;
|
||||
creators["sudden death"] = &WarriorTriggerFactoryInternal::sudden_death;
|
||||
creators["instant slam"] = &WarriorTriggerFactoryInternal::instant_slam;
|
||||
creators["shockwave"] = &WarriorTriggerFactoryInternal::shockwave;
|
||||
creators["shockwave on snare target"] = &WarriorTriggerFactoryInternal::shockwave_on_snare_target;
|
||||
creators["taste for blood"] = &WarriorTriggerFactoryInternal::taste_for_blood;
|
||||
|
||||
creators["thunder clap and rage"] = &WarriorTriggerFactoryInternal::thunderclap_and_rage;
|
||||
creators["intercept can cast"] = &WarriorTriggerFactoryInternal::intercept_can_cast;
|
||||
creators["intercept and far enemy"] = &WarriorTriggerFactoryInternal::intercept_and_far_enemy;
|
||||
creators["intercept and rage"] = &WarriorTriggerFactoryInternal::intercept_and_rage;
|
||||
// creators["slam"] = &WarriorTriggerFactoryInternal::slam;
|
||||
}
|
||||
|
||||
private:
|
||||
static Trigger* shield_block(PlayerbotAI* botAI) { return new ShieldBlockTrigger(botAI); }
|
||||
static Trigger* defensive_stance(PlayerbotAI* botAI) { return new DefensiveStanceTrigger(botAI); }
|
||||
static Trigger* berserker_stance(PlayerbotAI* botAI) { return new BerserkerStanceTrigger(botAI); }
|
||||
static Trigger* battle_stance(PlayerbotAI* botAI) { return new BattleStanceTrigger(botAI); }
|
||||
static Trigger* hamstring(PlayerbotAI* botAI) { return new HamstringTrigger(botAI); }
|
||||
static Trigger* victory_rush(PlayerbotAI* botAI) { return new VictoryRushTrigger(botAI); }
|
||||
static Trigger* death_wish(PlayerbotAI* botAI) { return new DeathWishTrigger(botAI); }
|
||||
static Trigger* recklessness(PlayerbotAI* botAI) { return new RecklessnessTrigger(botAI); }
|
||||
static Trigger* battle_shout(PlayerbotAI* botAI) { return new BattleShoutTrigger(botAI); }
|
||||
static Trigger* rend(PlayerbotAI* botAI) { return new RendDebuffTrigger(botAI); }
|
||||
static Trigger* rend_on_attacker(PlayerbotAI* botAI) { return new RendDebuffOnAttackerTrigger(botAI); }
|
||||
static Trigger* bloodrage(PlayerbotAI* botAI) { return new BloodrageBuffTrigger(botAI); }
|
||||
static Trigger* shield_bash(PlayerbotAI* botAI) { return new ShieldBashInterruptSpellTrigger(botAI); }
|
||||
static Trigger* disarm(PlayerbotAI* botAI) { return new DisarmDebuffTrigger(botAI); }
|
||||
static Trigger* concussion_blow(PlayerbotAI* botAI) { return new ConcussionBlowTrigger(botAI); }
|
||||
static Trigger* SwordAndBoard(PlayerbotAI* botAI) { return new SwordAndBoardTrigger(botAI); }
|
||||
static Trigger* shield_bash_on_enemy_healer(PlayerbotAI* botAI)
|
||||
{
|
||||
return new ShieldBashInterruptEnemyHealerSpellTrigger(botAI);
|
||||
}
|
||||
|
||||
static Trigger* thunderclap_and_rage(PlayerbotAI* botAI)
|
||||
{
|
||||
return new TwoTriggers(botAI, "thunder clap", "light rage available");
|
||||
}
|
||||
static Trigger* intercept_can_cast(PlayerbotAI* botAI) { return new InterceptCanCastTrigger(botAI); }
|
||||
static Trigger* intercept_and_far_enemy(PlayerbotAI* botAI)
|
||||
{
|
||||
return new TwoTriggers(botAI, "enemy is out of melee", "intercept can cast");
|
||||
}
|
||||
static Trigger* intercept_and_rage(PlayerbotAI* botAI)
|
||||
{
|
||||
return new TwoTriggers(botAI, "intercept and far enemy", "light rage available");
|
||||
}
|
||||
|
||||
static Trigger* intercept_on_snare_target(PlayerbotAI* botAI) { return new InterceptSnareTrigger(botAI); }
|
||||
static Trigger* spell_reflection(PlayerbotAI* botAI) { return new SpellReflectionTrigger(botAI); }
|
||||
static Trigger* taste_for_blood(PlayerbotAI* botAI) { return new TasteForBloodTrigger(botAI); }
|
||||
static Trigger* shockwave_on_snare_target(PlayerbotAI* botAI) { return new ShockwaveSnareTrigger(botAI); }
|
||||
static Trigger* shockwave(PlayerbotAI* botAI) { return new ShockwaveTrigger(botAI); }
|
||||
static Trigger* instant_slam(PlayerbotAI* botAI) { return new SlamInstantTrigger(botAI); }
|
||||
static Trigger* sudden_death(PlayerbotAI* botAI) { return new SuddenDeathTrigger(botAI); }
|
||||
static Trigger* commanding_shout(PlayerbotAI* botAI) { return new CommandingShoutTrigger(botAI); }
|
||||
static Trigger* taunt_on_snare_target(PlayerbotAI* botAI) { return new TauntSnareTrigger(botAI); }
|
||||
static Trigger* intercept(PlayerbotAI* botAI) { return new InterceptInterruptSpellTrigger(botAI); }
|
||||
static Trigger* intercept_on_enemy_healer(PlayerbotAI* botAI)
|
||||
{
|
||||
return new InterceptInterruptEnemyHealerSpellTrigger(botAI);
|
||||
}
|
||||
static Trigger* pummel(PlayerbotAI* botAI) { return new PummelInterruptSpellTrigger(botAI); }
|
||||
static Trigger* pummel_on_enemy_healer(PlayerbotAI* botAI)
|
||||
{
|
||||
return new PummelInterruptEnemyHealerSpellTrigger(botAI);
|
||||
}
|
||||
static Trigger* berserker_rage(PlayerbotAI* botAI) { return new BerserkerRageBuffTrigger(botAI); }
|
||||
static Trigger* bloodthirst(PlayerbotAI* botAI) { return new BloodthirstBuffTrigger(botAI); }
|
||||
static Trigger* thunder_clap_on_snare_target(PlayerbotAI* botAI) { return new ThunderClapSnareTrigger(botAI); }
|
||||
static Trigger* thunder_clap(PlayerbotAI* botAI) { return new ThunderClapTrigger(botAI); }
|
||||
static Trigger* mortal_strike(PlayerbotAI* botAI) { return new MortalStrikeDebuffTrigger(botAI); }
|
||||
static Trigger* rampage(PlayerbotAI* botAI) { return new RampageAvailableTrigger(botAI); }
|
||||
static Trigger* mocking_blow(PlayerbotAI* botAI) { return new MockingBlowTrigger(botAI); }
|
||||
static Trigger* overpower(PlayerbotAI* botAI) { return new OverpowerAvailableTrigger(botAI); }
|
||||
static Trigger* revenge(PlayerbotAI* botAI) { return new RevengeAvailableTrigger(botAI); }
|
||||
static Trigger* sunder_armor(PlayerbotAI* botAI) { return new SunderArmorDebuffTrigger(botAI); }
|
||||
// static Trigger* slam(PlayerbotAI* ai) { return new SlamTrigger(ai); }
|
||||
};
|
||||
|
||||
class WarriorAiObjectContextInternal : public NamedObjectContext<Action>
|
||||
{
|
||||
public:
|
||||
WarriorAiObjectContextInternal()
|
||||
{
|
||||
creators["devastate"] = &WarriorAiObjectContextInternal::devastate;
|
||||
creators["overpower"] = &WarriorAiObjectContextInternal::overpower;
|
||||
creators["charge"] = &WarriorAiObjectContextInternal::charge;
|
||||
creators["bloodthirst"] = &WarriorAiObjectContextInternal::bloodthirst;
|
||||
creators["rend"] = &WarriorAiObjectContextInternal::rend;
|
||||
creators["rend on attacker"] = &WarriorAiObjectContextInternal::rend_on_attacker;
|
||||
creators["mocking blow"] = &WarriorAiObjectContextInternal::mocking_blow;
|
||||
creators["death wish"] = &WarriorAiObjectContextInternal::death_wish;
|
||||
creators["recklessness"] = &WarriorAiObjectContextInternal::recklessness;
|
||||
creators["berserker rage"] = &WarriorAiObjectContextInternal::berserker_rage;
|
||||
creators["victory rush"] = &WarriorAiObjectContextInternal::victory_rush;
|
||||
creators["execute"] = &WarriorAiObjectContextInternal::execute;
|
||||
creators["defensive stance"] = &WarriorAiObjectContextInternal::defensive_stance;
|
||||
creators["hamstring"] = &WarriorAiObjectContextInternal::hamstring;
|
||||
creators["shield bash"] = &WarriorAiObjectContextInternal::shield_bash;
|
||||
creators["shield block"] = &WarriorAiObjectContextInternal::shield_block;
|
||||
creators["bloodrage"] = &WarriorAiObjectContextInternal::bloodrage;
|
||||
creators["battle stance"] = &WarriorAiObjectContextInternal::battle_stance;
|
||||
creators["heroic strike"] = &WarriorAiObjectContextInternal::heroic_strike;
|
||||
creators["intimidating shout"] = &WarriorAiObjectContextInternal::intimidating_shout;
|
||||
creators["demoralizing shout"] = &WarriorAiObjectContextInternal::demoralizing_shout;
|
||||
creators["demoralizing shout without life time check"] =
|
||||
&WarriorAiObjectContextInternal::demoralizing_shout_without_life_time_check;
|
||||
creators["challenging shout"] = &WarriorAiObjectContextInternal::challenging_shout;
|
||||
creators["shield wall"] = &WarriorAiObjectContextInternal::shield_wall;
|
||||
creators["battle shout"] = &WarriorAiObjectContextInternal::battle_shout;
|
||||
creators["battle shout taunt"] = &WarriorAiObjectContextInternal::battle_shout_taunt;
|
||||
creators["thunder clap"] = &WarriorAiObjectContextInternal::thunder_clap;
|
||||
creators["taunt"] = &WarriorAiObjectContextInternal::taunt;
|
||||
creators["revenge"] = &WarriorAiObjectContextInternal::revenge;
|
||||
creators["slam"] = &WarriorAiObjectContextInternal::slam;
|
||||
creators["shield slam"] = &WarriorAiObjectContextInternal::shield_slam;
|
||||
creators["disarm"] = &WarriorAiObjectContextInternal::disarm;
|
||||
creators["sunder armor"] = &WarriorAiObjectContextInternal::sunder_armor;
|
||||
creators["last stand"] = &WarriorAiObjectContextInternal::last_stand;
|
||||
creators["shockwave on snare target"] = &WarriorAiObjectContextInternal::shockwave_on_snare_target;
|
||||
creators["shockwave"] = &WarriorAiObjectContextInternal::shockwave;
|
||||
creators["cleave"] = &WarriorAiObjectContextInternal::cleave;
|
||||
creators["concussion blow"] = &WarriorAiObjectContextInternal::concussion_blow;
|
||||
creators["shield bash on enemy healer"] = &WarriorAiObjectContextInternal::shield_bash_on_enemy_healer;
|
||||
creators["berserker stance"] = &WarriorAiObjectContextInternal::berserker_stance;
|
||||
creators["commanding shout"] = &WarriorAiObjectContextInternal::commanding_shout;
|
||||
creators["retaliation"] = &WarriorAiObjectContextInternal::retaliation;
|
||||
creators["mortal strike"] = &WarriorAiObjectContextInternal::mortal_strike;
|
||||
creators["sweeping strikes"] = &WarriorAiObjectContextInternal::sweeping_strikes;
|
||||
creators["intercept"] = &WarriorAiObjectContextInternal::intercept;
|
||||
creators["whirlwind"] = &WarriorAiObjectContextInternal::whirlwind;
|
||||
creators["pummel"] = &WarriorAiObjectContextInternal::pummel;
|
||||
creators["pummel on enemy healer"] = &WarriorAiObjectContextInternal::pummel_on_enemy_healer;
|
||||
creators["recklessness"] = &WarriorAiObjectContextInternal::recklessness;
|
||||
creators["piercing howl"] = &WarriorAiObjectContextInternal::piercing_howl;
|
||||
creators["rampage"] = &WarriorAiObjectContextInternal::rampage;
|
||||
creators["intervene"] = &WarriorAiObjectContextInternal::intervene;
|
||||
creators["spell reflection"] = &WarriorAiObjectContextInternal::spell_reflection;
|
||||
creators["thunder clap on snare target"] = &WarriorAiObjectContextInternal::thunder_clap_on_snare_target;
|
||||
creators["taunt on snare target"] = &WarriorAiObjectContextInternal::taunt_on_snare_target;
|
||||
creators["intercept on enemy healer"] = &WarriorAiObjectContextInternal::intercept_on_enemy_healer;
|
||||
creators["intercept on snare target"] = &WarriorAiObjectContextInternal::intercept_on_snare_target;
|
||||
creators["bladestorm"] = &WarriorAiObjectContextInternal::bladestorm;
|
||||
creators["heroic throw"] = &WarriorAiObjectContextInternal::heroic_throw;
|
||||
creators["heroic throw on snare target"] = &WarriorAiObjectContextInternal::heroic_throw_on_snare_target;
|
||||
creators["shattering throw"] = &WarriorAiObjectContextInternal::shattering_throw;
|
||||
}
|
||||
|
||||
private:
|
||||
static Action* devastate(PlayerbotAI* botAI) { return new CastDevastateAction(botAI); }
|
||||
static Action* last_stand(PlayerbotAI* botAI) { return new CastLastStandAction(botAI); }
|
||||
static Action* shockwave(PlayerbotAI* botAI) { return new CastShockwaveAction(botAI); }
|
||||
static Action* shockwave_on_snare_target(PlayerbotAI* botAI) { return new CastShockwaveSnareAction(botAI); }
|
||||
static Action* cleave(PlayerbotAI* botAI) { return new CastCleaveAction(botAI); }
|
||||
static Action* concussion_blow(PlayerbotAI* botAI) { return new CastConcussionBlowAction(botAI); }
|
||||
static Action* taunt(PlayerbotAI* botAI) { return new CastTauntAction(botAI); }
|
||||
static Action* revenge(PlayerbotAI* botAI) { return new CastRevengeAction(botAI); }
|
||||
static Action* slam(PlayerbotAI* botAI) { return new CastSlamAction(botAI); }
|
||||
static Action* shield_slam(PlayerbotAI* botAI) { return new CastShieldSlamAction(botAI); }
|
||||
static Action* disarm(PlayerbotAI* botAI) { return new CastDisarmAction(botAI); }
|
||||
static Action* sunder_armor(PlayerbotAI* botAI) { return new CastSunderArmorAction(botAI); }
|
||||
static Action* overpower(PlayerbotAI* botAI) { return new CastOverpowerAction(botAI); }
|
||||
static Action* charge(PlayerbotAI* botAI) { return new CastChargeAction(botAI); }
|
||||
static Action* bloodthirst(PlayerbotAI* botAI) { return new CastBloodthirstAction(botAI); }
|
||||
static Action* rend(PlayerbotAI* botAI) { return new CastRendAction(botAI); }
|
||||
static Action* rend_on_attacker(PlayerbotAI* botAI) { return new CastRendOnAttackerAction(botAI); }
|
||||
static Action* mocking_blow(PlayerbotAI* botAI) { return new CastMockingBlowAction(botAI); }
|
||||
static Action* death_wish(PlayerbotAI* botAI) { return new CastDeathWishAction(botAI); }
|
||||
static Action* recklessness(PlayerbotAI* botAI) { return new CastRecklessnessAction(botAI); }
|
||||
static Action* berserker_rage(PlayerbotAI* botAI) { return new CastBerserkerRageAction(botAI); }
|
||||
static Action* victory_rush(PlayerbotAI* botAI) { return new CastVictoryRushAction(botAI); }
|
||||
static Action* execute(PlayerbotAI* botAI) { return new CastExecuteAction(botAI); }
|
||||
static Action* defensive_stance(PlayerbotAI* botAI) { return new CastDefensiveStanceAction(botAI); }
|
||||
static Action* hamstring(PlayerbotAI* botAI) { return new CastHamstringAction(botAI); }
|
||||
static Action* shield_bash(PlayerbotAI* botAI) { return new CastShieldBashAction(botAI); }
|
||||
static Action* shield_block(PlayerbotAI* botAI) { return new CastShieldBlockAction(botAI); }
|
||||
static Action* bloodrage(PlayerbotAI* botAI) { return new CastBloodrageAction(botAI); }
|
||||
static Action* battle_stance(PlayerbotAI* botAI) { return new CastBattleStanceAction(botAI); }
|
||||
static Action* heroic_strike(PlayerbotAI* botAI) { return new CastHeroicStrikeAction(botAI); }
|
||||
static Action* intimidating_shout(PlayerbotAI* botAI) { return new CastIntimidatingShoutAction(botAI); }
|
||||
static Action* demoralizing_shout(PlayerbotAI* botAI) { return new CastDemoralizingShoutAction(botAI); }
|
||||
static Action* demoralizing_shout_without_life_time_check(PlayerbotAI* botAI)
|
||||
{
|
||||
return new CastDemoralizingShoutWithoutLifeTimeCheckAction(botAI);
|
||||
}
|
||||
static Action* challenging_shout(PlayerbotAI* botAI) { return new CastChallengingShoutAction(botAI); }
|
||||
static Action* shield_wall(PlayerbotAI* botAI) { return new CastShieldWallAction(botAI); }
|
||||
static Action* battle_shout(PlayerbotAI* botAI) { return new CastBattleShoutAction(botAI); }
|
||||
static Action* battle_shout_taunt(PlayerbotAI* botAI) { return new CastBattleShoutTauntAction(botAI); }
|
||||
static Action* thunder_clap(PlayerbotAI* botAI) { return new CastThunderClapAction(botAI); }
|
||||
static Action* shield_bash_on_enemy_healer(PlayerbotAI* botAI)
|
||||
{
|
||||
return new CastShieldBashOnEnemyHealerAction(botAI);
|
||||
}
|
||||
static Action* intercept_on_snare_target(PlayerbotAI* botAI) { return new CastInterceptOnSnareTargetAction(botAI); }
|
||||
static Action* intercept_on_enemy_healer(PlayerbotAI* botAI) { return new CastInterceptOnEnemyHealerAction(botAI); }
|
||||
static Action* taunt_on_snare_target(PlayerbotAI* botAI) { return new CastTauntOnSnareTargetAction(botAI); }
|
||||
static Action* thunder_clap_on_snare_target(PlayerbotAI* botAI) { return new CastThunderClapSnareAction(botAI); }
|
||||
static Action* berserker_stance(PlayerbotAI* botAI) { return new CastBerserkerStanceAction(botAI); }
|
||||
static Action* commanding_shout(PlayerbotAI* botAI) { return new CastCommandingShoutAction(botAI); }
|
||||
static Action* retaliation(PlayerbotAI* botAI) { return new CastRetaliationAction(botAI); }
|
||||
static Action* mortal_strike(PlayerbotAI* botAI) { return new CastMortalStrikeAction(botAI); }
|
||||
static Action* sweeping_strikes(PlayerbotAI* botAI) { return new CastSweepingStrikesAction(botAI); }
|
||||
static Action* intercept(PlayerbotAI* botAI) { return new CastInterceptAction(botAI); }
|
||||
static Action* whirlwind(PlayerbotAI* botAI) { return new CastWhirlwindAction(botAI); }
|
||||
static Action* pummel(PlayerbotAI* botAI) { return new CastPummelAction(botAI); }
|
||||
static Action* pummel_on_enemy_healer(PlayerbotAI* botAI) { return new CastPummelOnEnemyHealerAction(botAI); }
|
||||
static Action* piercing_howl(PlayerbotAI* botAI) { return new CastPiercingHowlAction(botAI); }
|
||||
static Action* rampage(PlayerbotAI* botAI) { return new CastRampageAction(botAI); }
|
||||
static Action* intervene(PlayerbotAI* botAI) { return new CastInterveneAction(botAI); }
|
||||
static Action* spell_reflection(PlayerbotAI* botAI) { return new CastSpellReflectionAction(botAI); }
|
||||
static Action* shattering_throw(PlayerbotAI* botAI) { return new CastShatteringThrowAction(botAI); }
|
||||
static Action* heroic_throw_on_snare_target(PlayerbotAI* botAI) { return new CastHeroicThrowSnareAction(botAI); }
|
||||
static Action* heroic_throw(PlayerbotAI* botAI) { return new CastHeroicThrowAction(botAI); }
|
||||
static Action* bladestorm(PlayerbotAI* botAI) { return new CastBladestormAction(botAI); }
|
||||
};
|
||||
|
||||
WarriorAiObjectContext::WarriorAiObjectContext(PlayerbotAI* botAI) : AiObjectContext(botAI)
|
||||
{
|
||||
strategyContexts.Add(new WarriorStrategyFactoryInternal());
|
||||
strategyContexts.Add(new WarriorCombatStrategyFactoryInternal());
|
||||
actionContexts.Add(new WarriorAiObjectContextInternal());
|
||||
triggerContexts.Add(new WarriorTriggerFactoryInternal());
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
/*
|
||||
* 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_WARRIORAIOBJECTCONTEXT_H
|
||||
#define _PLAYERBOT_WARRIORAIOBJECTCONTEXT_H
|
||||
|
||||
#include "AiObjectContext.h"
|
||||
|
||||
class PlayerbotAI;
|
||||
|
||||
class WarriorAiObjectContext : public AiObjectContext
|
||||
{
|
||||
public:
|
||||
WarriorAiObjectContext(PlayerbotAI* botAI);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,14 +0,0 @@
|
||||
/*
|
||||
* 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 "WarriorTriggers.h"
|
||||
|
||||
#include "Playerbots.h"
|
||||
|
||||
bool BloodrageBuffTrigger::IsActive()
|
||||
{
|
||||
return AI_VALUE2(uint8, "health", "self target") >= sPlayerbotAIConfig->mediumHealth &&
|
||||
AI_VALUE2(uint8, "rage", "self target") < 20;
|
||||
}
|
||||
@@ -1,71 +0,0 @@
|
||||
/*
|
||||
* 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_WARRIORTRIGGERS_H
|
||||
#define _PLAYERBOT_WARRIORTRIGGERS_H
|
||||
|
||||
#include "GenericTriggers.h"
|
||||
#include "PlayerbotAI.h"
|
||||
|
||||
BUFF_TRIGGER(BattleShoutTrigger, "battle shout");
|
||||
BUFF_TRIGGER(BattleStanceTrigger, "battle stance");
|
||||
BUFF_TRIGGER(DefensiveStanceTrigger, "defensive stance");
|
||||
BUFF_TRIGGER(BerserkerStanceTrigger, "berserker stance");
|
||||
BUFF_TRIGGER(ShieldBlockTrigger, "shield block");
|
||||
BUFF_TRIGGER(CommandingShoutTrigger, "commanding shout");
|
||||
DEBUFF_TRIGGER(DisarmDebuffTrigger, "disarm");
|
||||
DEBUFF_TRIGGER(SunderArmorDebuffTrigger, "sunder armor");
|
||||
DEBUFF_TRIGGER(MortalStrikeDebuffTrigger, "mortal strike");
|
||||
// DEBUFF_ENEMY_TRIGGER(RendDebuffOnAttackerTrigger, "rend");
|
||||
|
||||
class RendDebuffOnAttackerTrigger : public DebuffOnMeleeAttackerTrigger
|
||||
{
|
||||
public:
|
||||
RendDebuffOnAttackerTrigger(PlayerbotAI* botAI) : DebuffOnMeleeAttackerTrigger(botAI, "rend") {}
|
||||
};
|
||||
|
||||
CAN_CAST_TRIGGER(RevengeAvailableTrigger, "revenge");
|
||||
CAN_CAST_TRIGGER(OverpowerAvailableTrigger, "overpower");
|
||||
BUFF_TRIGGER(RampageAvailableTrigger, "rampage");
|
||||
BUFF_TRIGGER_A(BloodrageBuffTrigger, "bloodrage");
|
||||
CAN_CAST_TRIGGER(VictoryRushTrigger, "victory rush");
|
||||
HAS_AURA_TRIGGER(SwordAndBoardTrigger, "sword and board");
|
||||
SNARE_TRIGGER(ConcussionBlowTrigger, "concussion blow");
|
||||
SNARE_TRIGGER(HamstringTrigger, "hamstring");
|
||||
SNARE_TRIGGER(MockingBlowTrigger, "mocking blow");
|
||||
SNARE_TRIGGER(ThunderClapSnareTrigger, "thunder clap");
|
||||
DEBUFF_TRIGGER(ThunderClapTrigger, "thunder clap");
|
||||
SNARE_TRIGGER(TauntSnareTrigger, "taunt");
|
||||
SNARE_TRIGGER(InterceptSnareTrigger, "intercept");
|
||||
CD_TRIGGER(InterceptCanCastTrigger, "intercept");
|
||||
SNARE_TRIGGER(ShockwaveSnareTrigger, "shockwave");
|
||||
DEBUFF_TRIGGER(ShockwaveTrigger, "shockwave");
|
||||
BOOST_TRIGGER(DeathWishTrigger, "death wish");
|
||||
BOOST_TRIGGER(RecklessnessTrigger, "recklessness");
|
||||
BUFF_TRIGGER(BloodthirstBuffTrigger, "bloodthirst");
|
||||
BUFF_TRIGGER(BerserkerRageBuffTrigger, "berserker rage");
|
||||
INTERRUPT_HEALER_TRIGGER(ShieldBashInterruptEnemyHealerSpellTrigger, "shield bash");
|
||||
INTERRUPT_TRIGGER(ShieldBashInterruptSpellTrigger, "shield bash");
|
||||
INTERRUPT_HEALER_TRIGGER(PummelInterruptEnemyHealerSpellTrigger, "pummel");
|
||||
INTERRUPT_TRIGGER(PummelInterruptSpellTrigger, "pummel");
|
||||
INTERRUPT_HEALER_TRIGGER(InterceptInterruptEnemyHealerSpellTrigger, "intercept");
|
||||
INTERRUPT_TRIGGER(InterceptInterruptSpellTrigger, "intercept");
|
||||
DEFLECT_TRIGGER(SpellReflectionTrigger, "spell reflection");
|
||||
HAS_AURA_TRIGGER(SuddenDeathTrigger, "sudden death");
|
||||
HAS_AURA_TRIGGER(SlamInstantTrigger, "slam!");
|
||||
HAS_AURA_TRIGGER(TasteForBloodTrigger, "taste for blood");
|
||||
|
||||
class RendDebuffTrigger : public DebuffTrigger
|
||||
{
|
||||
public:
|
||||
RendDebuffTrigger(PlayerbotAI* botAI) : DebuffTrigger(botAI, "rend", 1, true) {}
|
||||
};
|
||||
|
||||
// class SlamTrigger : public HasAuraTrigger
|
||||
// {
|
||||
// public:
|
||||
// SlamTrigger(PlayerbotAI* ai) : HasAuraTrigger(ai, "slam!") {}
|
||||
// };
|
||||
#endif
|
||||
Reference in New Issue
Block a user