mirror of
https://github.com/mod-playerbots/mod-playerbots.git
synced 2026-02-17 00:54:35 +00:00
Fix stuck on knockback, enhance movement & flee and trap weave strats (#980)
* Hunter trap weave strats * Do not allow actions to stack * Remove trap weave by default * Refactor on Engine Co-authored-by: SaW <swerkhoven@outlook.com> * Remove unused funcs in Queue * Remove ExpireActionTime config --------- Co-authored-by: SaW <swerkhoven@outlook.com>
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
#include "FireMageStrategy.h"
|
||||
|
||||
#include "Playerbots.h"
|
||||
#include "Strategy.h"
|
||||
|
||||
NextAction** FireMageStrategy::getDefaultActions()
|
||||
{
|
||||
@@ -32,11 +33,12 @@ void FireMageStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
|
||||
void FireMageAoeStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
{
|
||||
// higher priority to cast before move away
|
||||
triggers.push_back(
|
||||
new TriggerNode("medium aoe", NextAction::array(0,
|
||||
new NextAction("dragon's breath", 24.0f),
|
||||
new NextAction("flamestrike", 23.0f),
|
||||
new NextAction("blast wave", 22.0f),
|
||||
new NextAction("dragon's breath", ACTION_MOVE + 9),
|
||||
new NextAction("flamestrike", ACTION_MOVE + 8),
|
||||
new NextAction("blast wave", ACTION_MOVE + 7),
|
||||
new NextAction("living bomb on attackers", 21.0f),
|
||||
new NextAction("blizzard", 20.0f), nullptr)));
|
||||
}
|
||||
|
||||
@@ -179,6 +179,9 @@ void GenericMageStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
new TriggerNode("fire ward", NextAction::array(0, new NextAction("fire ward", ACTION_EMERGENCY), nullptr)));
|
||||
triggers.push_back(
|
||||
new TriggerNode("frost ward", NextAction::array(0, new NextAction("frost ward", ACTION_EMERGENCY), nullptr)));
|
||||
|
||||
triggers.push_back(new TriggerNode("enemy too close for spell",
|
||||
NextAction::array(0, new NextAction("blink back", ACTION_MOVE + 5), nullptr)));
|
||||
}
|
||||
|
||||
void MageCureStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
*/
|
||||
|
||||
#include "MageActions.h"
|
||||
#include <cmath>
|
||||
|
||||
#include "PlayerbotAIConfig.h"
|
||||
#include "Playerbots.h"
|
||||
@@ -17,6 +18,10 @@ bool CastFrostNovaAction::isUseful()
|
||||
Unit* target = AI_VALUE(Unit*, "current target");
|
||||
if (target && target->ToCreature() && target->ToCreature()->HasMechanicTemplateImmunity(1 << (MECHANIC_FREEZE - 1)))
|
||||
return false;
|
||||
|
||||
if (target->isFrozen())
|
||||
return false;
|
||||
|
||||
return sServerFacade->IsDistanceLessOrEqualThan(AI_VALUE2(float, "distance", GetTargetName()), 10.f);
|
||||
}
|
||||
|
||||
@@ -87,4 +92,14 @@ Unit* CastFocusMagicOnPartyAction::GetTarget()
|
||||
return healer;
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
bool CastBlinkBackAction::Execute(Event event)
|
||||
{
|
||||
Unit* target = AI_VALUE(Unit*, "current target");
|
||||
if (!target)
|
||||
return false;
|
||||
// can cast spell check passed in isUseful()
|
||||
bot->SetOrientation(bot->GetAngle(target) + M_PI);
|
||||
return CastSpellAction::Execute(event);
|
||||
}
|
||||
@@ -309,4 +309,11 @@ public:
|
||||
Unit* GetTarget() override;
|
||||
};
|
||||
|
||||
class CastBlinkBackAction : public CastSpellAction
|
||||
{
|
||||
public:
|
||||
CastBlinkBackAction(PlayerbotAI* botAI) : CastSpellAction(botAI, "blink") {}
|
||||
|
||||
bool Execute(Event event) override;
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -206,6 +206,7 @@ public:
|
||||
creators["frost ward"] = &MageAiObjectContextInternal::frost_ward;
|
||||
creators["mirror image"] = &MageAiObjectContextInternal::mirror_image;
|
||||
creators["focus magic on party"] = &MageAiObjectContextInternal::focus_magic_on_party;
|
||||
creators["blink back"] = &MageAiObjectContextInternal::blink_back;
|
||||
}
|
||||
|
||||
private:
|
||||
@@ -264,6 +265,7 @@ private:
|
||||
}
|
||||
static Action* mirror_image(PlayerbotAI* botAI) { return new CastMirrorImageAction(botAI); }
|
||||
static Action* focus_magic_on_party(PlayerbotAI* botAI) { return new CastFocusMagicOnPartyAction(botAI); }
|
||||
static Action* blink_back(PlayerbotAI* botAI) { return new CastBlinkBackAction(botAI); }
|
||||
};
|
||||
|
||||
MageAiObjectContext::MageAiObjectContext(PlayerbotAI* botAI) : AiObjectContext(botAI)
|
||||
|
||||
Reference in New Issue
Block a user