mirror of
https://github.com/mod-playerbots/mod-playerbots.git
synced 2026-02-06 20:27:48 +00:00
Hodir tactics (#977)
* - Added tactic for Hodir Biting Cold ability * - Added tactic for Hodir Flash Freeze - Modified tactic for Hodir Biting Cold
This commit is contained in:
@@ -24,6 +24,7 @@ public:
|
|||||||
creators["razorscale grounded"] = &RaidUlduarActionContext::razorscale_grounded;
|
creators["razorscale grounded"] = &RaidUlduarActionContext::razorscale_grounded;
|
||||||
creators["razorscale harpoon action"] = &RaidUlduarActionContext::razorscale_harpoon_action;
|
creators["razorscale harpoon action"] = &RaidUlduarActionContext::razorscale_harpoon_action;
|
||||||
creators["razorscale fuse armor action"] = &RaidUlduarActionContext::razorscale_fuse_armor_action;
|
creators["razorscale fuse armor action"] = &RaidUlduarActionContext::razorscale_fuse_armor_action;
|
||||||
|
creators["hodir move snowpacked icicle"] = &RaidUlduarActionContext::hodir_move_snowpacked_icicle;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -36,6 +37,7 @@ private:
|
|||||||
static Action* razorscale_grounded(PlayerbotAI* ai) { return new RazorscaleGroundedAction(ai); }
|
static Action* razorscale_grounded(PlayerbotAI* ai) { return new RazorscaleGroundedAction(ai); }
|
||||||
static Action* razorscale_harpoon_action(PlayerbotAI* ai) { return new RazorscaleHarpoonAction(ai); }
|
static Action* razorscale_harpoon_action(PlayerbotAI* ai) { return new RazorscaleHarpoonAction(ai); }
|
||||||
static Action* razorscale_fuse_armor_action(PlayerbotAI* ai) { return new RazorscaleFuseArmorAction(ai); }
|
static Action* razorscale_fuse_armor_action(PlayerbotAI* ai) { return new RazorscaleFuseArmorAction(ai); }
|
||||||
|
static Action* hodir_move_snowpacked_icicle(PlayerbotAI* ai) { return new HodirMoveSnowpackedIcicleAction(ai); }
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1154,3 +1154,34 @@ bool RazorscaleFuseArmorAction::Execute(Event event)
|
|||||||
bossHelper.AssignRolesBasedOnHealth();
|
bossHelper.AssignRolesBasedOnHealth();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool HodirMoveSnowpackedIcicleAction::isUseful()
|
||||||
|
{
|
||||||
|
// Check boss and it is alive
|
||||||
|
Unit* boss = AI_VALUE2(Unit*, "find target", "hodir");
|
||||||
|
if (!boss || !boss->IsAlive())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find the nearest Snowpacked Icicle Target
|
||||||
|
Creature* target = bot->FindNearestCreature(33174, 100.0f);
|
||||||
|
if (!target)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Check that boss is stacked on Snowpacked Icicle
|
||||||
|
if (bot->GetDistance2d(target->GetPositionX(), target->GetPositionY()) <= 3.0f)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HodirMoveSnowpackedIcicleAction::Execute(Event event)
|
||||||
|
{
|
||||||
|
Creature* target = bot->FindNearestCreature(33174, 100.0f);
|
||||||
|
if (!target)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return MoveTo(target->GetMapId(), target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), false,
|
||||||
|
false, false, true, MovementPriority::MOVEMENT_NORMAL);
|
||||||
|
}
|
||||||
|
|||||||
@@ -106,4 +106,12 @@ public:
|
|||||||
bool isUseful() override;
|
bool isUseful() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class HodirMoveSnowpackedIcicleAction : public MovementAction
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
HodirMoveSnowpackedIcicleAction(PlayerbotAI* botAI) : MovementAction(botAI, "hodir move snowpacked icicle") {}
|
||||||
|
bool Execute(Event event) override;
|
||||||
|
bool isUseful() override;
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -46,6 +46,15 @@ void RaidUlduarStrategy::InitTriggers(std::vector<TriggerNode*>& triggers)
|
|||||||
"razorscale fuse armor trigger",
|
"razorscale fuse armor trigger",
|
||||||
NextAction::array(0, new NextAction("razorscale fuse armor action", ACTION_RAID + 2), nullptr)));
|
NextAction::array(0, new NextAction("razorscale fuse armor action", ACTION_RAID + 2), nullptr)));
|
||||||
|
|
||||||
|
//
|
||||||
|
// Hodir
|
||||||
|
//
|
||||||
|
triggers.push_back(new TriggerNode(
|
||||||
|
"hodir near snowpacked icicle",
|
||||||
|
NextAction::array(0, new NextAction("hodir move snowpacked icicle", ACTION_RAID + 5), nullptr)));
|
||||||
|
triggers.push_back(new TriggerNode(
|
||||||
|
"hodir biting cold", NextAction::array(0, new NextAction("intense cold jump", ACTION_RAID + 4), nullptr)));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RaidUlduarStrategy::InitMultipliers(std::vector<Multiplier*>& multipliers)
|
void RaidUlduarStrategy::InitMultipliers(std::vector<Multiplier*>& multipliers)
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ public:
|
|||||||
creators["razorscale grounded"] = &RaidUlduarTriggerContext::razorscale_grounded;
|
creators["razorscale grounded"] = &RaidUlduarTriggerContext::razorscale_grounded;
|
||||||
creators["razorscale harpoon trigger"] = &RaidUlduarTriggerContext::razorscale_harpoon_trigger;
|
creators["razorscale harpoon trigger"] = &RaidUlduarTriggerContext::razorscale_harpoon_trigger;
|
||||||
creators["razorscale fuse armor trigger"] = &RaidUlduarTriggerContext::razorscale_fuse_armor_trigger;
|
creators["razorscale fuse armor trigger"] = &RaidUlduarTriggerContext::razorscale_fuse_armor_trigger;
|
||||||
|
creators["hodir biting cold"] = &RaidUlduarTriggerContext::hodir_biting_cold;
|
||||||
|
creators["hodir near snowpacked icicle"] = &RaidUlduarTriggerContext::hodir_near_snowpacked_icicle;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -36,6 +38,8 @@ private:
|
|||||||
static Trigger* razorscale_grounded(PlayerbotAI* ai) { return new RazorscaleGroundedTrigger(ai); }
|
static Trigger* razorscale_grounded(PlayerbotAI* ai) { return new RazorscaleGroundedTrigger(ai); }
|
||||||
static Trigger* razorscale_harpoon_trigger(PlayerbotAI* ai) { return new RazorscaleHarpoonAvailableTrigger(ai); }
|
static Trigger* razorscale_harpoon_trigger(PlayerbotAI* ai) { return new RazorscaleHarpoonAvailableTrigger(ai); }
|
||||||
static Trigger* razorscale_fuse_armor_trigger(PlayerbotAI* ai) { return new RazorscaleFuseArmorTrigger(ai); }
|
static Trigger* razorscale_fuse_armor_trigger(PlayerbotAI* ai) { return new RazorscaleFuseArmorTrigger(ai); }
|
||||||
|
static Trigger* hodir_biting_cold(PlayerbotAI* ai) { return new HodirBitingColdTrigger(ai); }
|
||||||
|
static Trigger* hodir_near_snowpacked_icicle(PlayerbotAI* ai) { return new HodirNearSnowpackedIcicleTrigger(ai); }
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -241,3 +241,25 @@ bool RazorscaleFuseArmorTrigger::IsActive()
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool HodirBitingColdTrigger::IsActive()
|
||||||
|
{
|
||||||
|
Unit* boss = AI_VALUE2(Unit*, "find target", "hodir");
|
||||||
|
return boss && botAI->GetAura("biting cold", bot, false, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Snowpacked Icicle Target
|
||||||
|
bool HodirNearSnowpackedIcicleTrigger::IsActive()
|
||||||
|
{
|
||||||
|
// Check boss and it is alive
|
||||||
|
Unit* boss = AI_VALUE2(Unit*, "find target", "hodir");
|
||||||
|
if (!boss || !boss->IsAlive())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find the nearest Snowpacked Icicle Target
|
||||||
|
Creature* target = bot->FindNearestCreature(33174, 100.0f);
|
||||||
|
if (!target)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|||||||
@@ -76,4 +76,18 @@ public:
|
|||||||
bool IsActive() override;
|
bool IsActive() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class HodirBitingColdTrigger : public Trigger
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
HodirBitingColdTrigger(PlayerbotAI* ai) : Trigger(ai, "hodir biting cold") {}
|
||||||
|
bool IsActive() override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class HodirNearSnowpackedIcicleTrigger : public Trigger
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
HodirNearSnowpackedIcicleTrigger(PlayerbotAI* ai) : Trigger(ai, "hodir near snowpacked icicle") {}
|
||||||
|
bool IsActive() override;
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user