Skip to content

Commit 050a010

Browse files
authored
Warlock bot fixes to actions (#293)
1 parent 2b2a3ec commit 050a010

7 files changed

Lines changed: 92 additions & 3 deletions

File tree

src/modules/Bots/playerbot/strategy/warlock/DpsWarlockStrategy.cpp

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ class DpsWarlockStrategyActionNodeFactory : public NamedObjectFactory<ActionNode
1313
DpsWarlockStrategyActionNodeFactory()
1414
{
1515
creators["shadow bolt"] = &shadow_bolt;
16+
creators["incinerate"] = &incinerate;
1617
}
1718
private:
1819
static ActionNode* shadow_bolt(PlayerbotAI* ai)
@@ -22,17 +23,54 @@ class DpsWarlockStrategyActionNodeFactory : public NamedObjectFactory<ActionNode
2223
/*A*/ NextAction::array(0, new NextAction("shoot"), NULL),
2324
/*C*/ NULL);
2425
}
26+
static ActionNode* incinerate(PlayerbotAI* ai)
27+
{
28+
return new ActionNode ("incinerate",
29+
/*P*/ NULL,
30+
/*A*/ NextAction::array(0, new NextAction("shadow bolt"), NULL),
31+
/*C*/ NULL);
32+
}
33+
};
34+
35+
class DpsAoeWarlockStrategyActionNodeFactory : public NamedObjectFactory<ActionNode>
36+
{
37+
public:
38+
DpsAoeWarlockStrategyActionNodeFactory()
39+
{
40+
creators["seed of corruption"] = &seed_of_corruption;
41+
creators["shadowfury"] = &shadowfury;
42+
}
43+
private:
44+
static ActionNode* seed_of_corruption(PlayerbotAI* ai)
45+
{
46+
return new ActionNode ("seed of corruption",
47+
/*P*/ NULL,
48+
/*A*/ NextAction::array(0, new NextAction("rain of fire"), NULL),
49+
/*C*/ NULL);
50+
}
51+
static ActionNode* shadowfury(PlayerbotAI* ai)
52+
{
53+
return new ActionNode ("shadowfury",
54+
/*P*/ NULL,
55+
/*A*/ NextAction::array(0, new NextAction("rain of fire"), NULL),
56+
/*C*/ NULL);
57+
}
2558
};
2659

2760
DpsWarlockStrategy::DpsWarlockStrategy(PlayerbotAI* ai) : GenericWarlockStrategy(ai)
2861
{
2962
actionNodeFactories.Add(new DpsWarlockStrategyActionNodeFactory());
3063
}
3164

65+
DpsAoeWarlockStrategy::DpsAoeWarlockStrategy(PlayerbotAI* ai) : CombatStrategy(ai)
66+
{
67+
actionNodeFactories.Add(new DpsAoeWarlockStrategyActionNodeFactory());
68+
}
69+
3270

3371
NextAction** DpsWarlockStrategy::getDefaultActions()
3472
{
35-
return NextAction::array(0, new NextAction("incinirate", 10.0f), new NextAction("shadow bolt", 10.0f), NULL);
73+
return NextAction::array(0, new NextAction("incinerate", 10.0f), new NextAction("shadow bolt", 10.0f), NULL);
3674
}
3775

3876
void DpsWarlockStrategy::InitTriggers(std::list<TriggerNode*> &triggers)

src/modules/Bots/playerbot/strategy/warlock/DpsWarlockStrategy.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ namespace ai
1919
class DpsAoeWarlockStrategy : public CombatStrategy
2020
{
2121
public:
22-
DpsAoeWarlockStrategy(PlayerbotAI* ai) : CombatStrategy(ai) {}
22+
DpsAoeWarlockStrategy(PlayerbotAI* ai);
2323

2424
public:
2525
virtual void InitTriggers(std::list<TriggerNode*> &triggers);

src/modules/Bots/playerbot/strategy/warlock/GenericWarlockStrategy.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class GenericWarlockStrategyActionNodeFactory : public NamedObjectFactory<Action
1212
{
1313
creators["summon voidwalker"] = &summon_voidwalker;
1414
creators["banish"] = &banish;
15+
creators["curse of agony"] = &curse_of_agony;
1516
}
1617
private:
1718
static ActionNode* summon_voidwalker(PlayerbotAI* ai)
@@ -28,6 +29,13 @@ class GenericWarlockStrategyActionNodeFactory : public NamedObjectFactory<Action
2829
/*A*/ NextAction::array(0, new NextAction("fear"), NULL),
2930
/*C*/ NULL);
3031
}
32+
static ActionNode* curse_of_agony(PlayerbotAI* ai)
33+
{
34+
return new ActionNode ("curse of agony",
35+
/*P*/ NULL,
36+
/*A*/ NextAction::array(0, new NextAction("curse of weakness"), NULL),
37+
/*C*/ NULL);
38+
}
3139
};
3240

3341
GenericWarlockStrategy::GenericWarlockStrategy(PlayerbotAI* ai) : RangedCombatStrategy(ai)
@@ -70,5 +78,9 @@ void GenericWarlockStrategy::InitTriggers(std::list<TriggerNode*> &triggers)
7078

7179
triggers.push_back(new TriggerNode(
7280
"immolate",
73-
NextAction::array(0, new NextAction("immolate", 19.0f), new NextAction("conflagrate", 19.0f), NULL)));
81+
NextAction::array(0, new NextAction("immolate", 19.0f), NULL)));
82+
83+
triggers.push_back(new TriggerNode(
84+
"target has immolate",
85+
NextAction::array(0, new NextAction("conflagrate", 20.0f), NULL)));
7486
}

src/modules/Bots/playerbot/strategy/warlock/WarlockActions.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ namespace ai
1818
BEGIN_RANGED_SPELL_ACTION(CastShadowBoltAction, "shadow bolt")
1919
END_SPELL_ACTION()
2020

21+
BEGIN_RANGED_SPELL_ACTION(CastIncinerateAction, "incinerate")
22+
END_SPELL_ACTION()
23+
2124
class CastDrainSoulAction : public CastSpellAction
2225
{
2326
public:
@@ -121,6 +124,15 @@ namespace ai
121124
CastConflagrateAction(PlayerbotAI* ai) : CastSpellAction(ai, "conflagrate") {}
122125
};
123126

127+
class CastSeedOfCorruptionAction : public CastDebuffSpellAction
128+
{
129+
public:
130+
CastSeedOfCorruptionAction(PlayerbotAI* ai) : CastDebuffSpellAction(ai, "seed of corruption") {}
131+
};
132+
133+
BEGIN_RANGED_SPELL_ACTION(CastShadowfuryAction, "shadowfury")
134+
END_SPELL_ACTION()
135+
124136
class CastFearAction : public CastDebuffSpellAction
125137
{
126138
public:

src/modules/Bots/playerbot/strategy/warlock/WarlockAiObjectContext.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,13 @@ namespace ai
7171
creators["corruption"] = &TriggerFactoryInternal::corruption;
7272
creators["corruption on attacker"] = &TriggerFactoryInternal::corruption_on_attacker;
7373
creators["curse of agony"] = &TriggerFactoryInternal::curse_of_agony;
74+
creators["curse of weakness"] = &TriggerFactoryInternal::curse_of_weakness;
7475
creators["banish"] = &TriggerFactoryInternal::banish;
7576
creators["spellstone"] = &TriggerFactoryInternal::spellstone;
7677
creators["backlash"] = &TriggerFactoryInternal::backlash;
7778
creators["fear"] = &TriggerFactoryInternal::fear;
7879
creators["immolate"] = &TriggerFactoryInternal::immolate;
80+
creators["target has immolate"] = &TriggerFactoryInternal::target_has_immolate;
7981

8082

8183
}
@@ -89,11 +91,13 @@ namespace ai
8991
static Trigger* corruption(PlayerbotAI* ai) { return new CorruptionTrigger(ai); }
9092
static Trigger* corruption_on_attacker(PlayerbotAI* ai) { return new CorruptionOnAttackerTrigger(ai); }
9193
static Trigger* curse_of_agony(PlayerbotAI* ai) { return new CurseOfAgonyTrigger(ai); }
94+
static Trigger* curse_of_weakness(PlayerbotAI* ai) { return new CurseOfWeaknessTrigger(ai); }
9295
static Trigger* banish(PlayerbotAI* ai) { return new BanishTrigger(ai); }
9396
static Trigger* spellstone(PlayerbotAI* ai) { return new SpellstoneTrigger(ai); }
9497
static Trigger* backlash(PlayerbotAI* ai) { return new BacklashTrigger(ai); }
9598
static Trigger* fear(PlayerbotAI* ai) { return new FearTrigger(ai); }
9699
static Trigger* immolate(PlayerbotAI* ai) { return new ImmolateTrigger(ai); }
100+
static Trigger* target_has_immolate(PlayerbotAI* ai) { return new TargetHasImmolateTrigger(ai); }
97101

98102
};
99103
};
@@ -122,7 +126,9 @@ namespace ai
122126
creators["corruption"] = &AiObjectContextInternal::corruption;
123127
creators["corruption on attacker"] = &AiObjectContextInternal::corruption_on_attacker;
124128
creators["curse of agony"] = &AiObjectContextInternal::curse_of_agony;
129+
creators["curse of weakness"] = &AiObjectContextInternal::curse_of_weakness;
125130
creators["shadow bolt"] = &AiObjectContextInternal::shadow_bolt;
131+
creators["incinerate"] = &AiObjectContextInternal::incinerate;
126132
creators["drain soul"] = &AiObjectContextInternal::drain_soul;
127133
creators["drain mana"] = &AiObjectContextInternal::drain_mana;
128134
creators["drain life"] = &AiObjectContextInternal::drain_life;
@@ -132,10 +138,14 @@ namespace ai
132138
creators["fear"] = &AiObjectContextInternal::fear;
133139
creators["fear on cc"] = &AiObjectContextInternal::fear_on_cc;
134140
creators["conflagrate"] = &AiObjectContextInternal::conflagrate;
141+
creators["seed of corruption"] = &AiObjectContextInternal::seed_of_corruption;
142+
creators["shadowfury"] = &AiObjectContextInternal::shadowfury;
135143
}
136144

137145
private:
138146
static Action* conflagrate(PlayerbotAI* ai) { return new CastConflagrateAction(ai); }
147+
static Action* seed_of_corruption(PlayerbotAI* ai) { return new CastSeedOfCorruptionAction(ai); }
148+
static Action* shadowfury(PlayerbotAI* ai) { return new CastShadowfuryAction(ai); }
139149
static Action* fear_on_cc(PlayerbotAI* ai) { return new CastFearOnCcAction(ai); }
140150
static Action* fear(PlayerbotAI* ai) { return new CastFearAction(ai); }
141151
static Action* immolate(PlayerbotAI* ai) { return new CastImmolateAction(ai); }
@@ -150,7 +160,9 @@ namespace ai
150160
static Action* corruption(PlayerbotAI* ai) { return new CastCorruptionAction(ai); }
151161
static Action* corruption_on_attacker(PlayerbotAI* ai) { return new CastCorruptionOnAttackerAction(ai); }
152162
static Action* curse_of_agony(PlayerbotAI* ai) { return new CastCurseOfAgonyAction(ai); }
163+
static Action* curse_of_weakness(PlayerbotAI* ai) { return new CastCurseOfWeaknessAction(ai); }
153164
static Action* shadow_bolt(PlayerbotAI* ai) { return new CastShadowBoltAction(ai); }
165+
static Action* incinerate(PlayerbotAI* ai) { return new CastIncinerateAction(ai); }
154166
static Action* drain_soul(PlayerbotAI* ai) { return new CastDrainSoulAction(ai); }
155167
static Action* drain_mana(PlayerbotAI* ai) { return new CastDrainManaAction(ai); }
156168
static Action* drain_life(PlayerbotAI* ai) { return new CastDrainLifeAction(ai); }

src/modules/Bots/playerbot/strategy/warlock/WarlockTriggers.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,9 @@ bool SpellstoneTrigger::IsActive()
1717
{
1818
return BuffTrigger::IsActive() && AI_VALUE2(uint8, "item count", getName()) > 0;
1919
}
20+
21+
bool TargetHasImmolateTrigger::IsActive()
22+
{
23+
Unit* target = GetTarget();
24+
return target && ai->HasAura("immolate", target);
25+
}

src/modules/Bots/playerbot/strategy/warlock/WarlockTriggers.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ namespace ai
1818
};
1919

2020
DEBUFF_TRIGGER(CurseOfAgonyTrigger, "curse of agony", "curse of agony");
21+
DEBUFF_TRIGGER(CurseOfWeaknessTrigger, "curse of weakness", "curse of weakness");
2122
DEBUFF_TRIGGER(CorruptionTrigger, "corruption", "corruption");
2223

2324
class CorruptionOnAttackerTrigger : public DebuffOnAttackerTrigger
@@ -78,4 +79,12 @@ namespace ai
7879
FearTrigger(PlayerbotAI* ai) : HasCcTargetTrigger(ai, "fear") {}
7980
};
8081

82+
class TargetHasImmolateTrigger : public Trigger
83+
{
84+
public:
85+
TargetHasImmolateTrigger(PlayerbotAI* ai) : Trigger(ai, "target has immolate", 1) {}
86+
virtual string GetTargetName() { return "current target"; }
87+
virtual bool IsActive();
88+
};
89+
8190
}

0 commit comments

Comments
 (0)