Modify file structure

This commit is contained in:
Yunfan Li
2024-12-13 20:14:25 +08:00
parent a7496b3eb5
commit e7416db7dc
183 changed files with 0 additions and 0 deletions

View File

@@ -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)));
}

View File

@@ -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

View File

@@ -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)));
}

View File

@@ -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

View File

@@ -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)));
}

View File

@@ -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

View File

@@ -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)));
}

View File

@@ -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

View File

@@ -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)));
}

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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());
}

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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