mirror of
https://github.com/mod-playerbots/mod-playerbots
synced 2025-11-29 15:58:20 +08:00
Prevent Warriors using Charge during Ionar Disperse and Loken Lightning Nova (#836)
This commit is contained in:
@@ -6,6 +6,8 @@
|
|||||||
#include "HallsOfLightningTriggers.h"
|
#include "HallsOfLightningTriggers.h"
|
||||||
#include "Action.h"
|
#include "Action.h"
|
||||||
|
|
||||||
|
#include "WarriorActions.h"
|
||||||
|
|
||||||
float BjarngrimMultiplier::GetValue(Action* action)
|
float BjarngrimMultiplier::GetValue(Action* action)
|
||||||
{
|
{
|
||||||
Unit* boss = AI_VALUE2(Unit*, "find target", "general bjarngrim");
|
Unit* boss = AI_VALUE2(Unit*, "find target", "general bjarngrim");
|
||||||
@@ -73,31 +75,52 @@ float IonarMultiplier::GetValue(Action* action)
|
|||||||
Unit* boss = AI_VALUE2(Unit*, "find target", "ionar");
|
Unit* boss = AI_VALUE2(Unit*, "find target", "ionar");
|
||||||
if (!boss) { return 1.0f; }
|
if (!boss) { return 1.0f; }
|
||||||
|
|
||||||
if(!bot->CanSeeOrDetect(boss))
|
// Check if the boss has dispersed into Sparks (not visible).
|
||||||
|
if (!bot->CanSeeOrDetect(boss))
|
||||||
|
{
|
||||||
|
// Block MovementActions except for specific exceptions.
|
||||||
|
if (dynamic_cast<MovementAction*>(action)
|
||||||
|
&& !dynamic_cast<DispersePositionAction*>(action)
|
||||||
|
&& !dynamic_cast<StaticOverloadSpreadAction*>(action))
|
||||||
{
|
{
|
||||||
if (dynamic_cast<MovementAction*>(action)
|
return 0.0f;
|
||||||
&& !dynamic_cast<DispersePositionAction*>(action)
|
|
||||||
&& !dynamic_cast<StaticOverloadSpreadAction*>(action))
|
|
||||||
{
|
|
||||||
return 0.0f;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (boss->FindCurrentSpellBySpellId(SPELL_DISPERSE))
|
||||||
|
{
|
||||||
|
// Explicitly block the CastChargeAction during dispersal.
|
||||||
|
if (dynamic_cast<CastChargeAction*>(action))
|
||||||
|
{
|
||||||
|
return 0.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
return 1.0f;
|
return 1.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
float LokenMultiplier::GetValue(Action* action)
|
float LokenMultiplier::GetValue(Action* action)
|
||||||
{
|
{
|
||||||
Unit* boss = AI_VALUE2(Unit*, "find target", "loken");
|
Unit* boss = AI_VALUE2(Unit*, "find target", "loken");
|
||||||
if (!boss) { return 1.0f; }
|
if (!boss) { return 1.0f; }
|
||||||
|
|
||||||
|
// Prevent FleeAction from being executed.
|
||||||
if (dynamic_cast<FleeAction*>(action)) { return 0.0f; }
|
if (dynamic_cast<FleeAction*>(action)) { return 0.0f; }
|
||||||
|
|
||||||
if (boss->FindCurrentSpellBySpellId(SPELL_LIGHTNING_NOVA)
|
// Prevent MovementActions during Lightning Nova unless it's AvoidLightningNovaAction.
|
||||||
&& dynamic_cast<MovementAction*>(action)
|
if (boss->FindCurrentSpellBySpellId(SPELL_LIGHTNING_NOVA))
|
||||||
&& !dynamic_cast<AvoidLightningNovaAction*>(action))
|
|
||||||
{
|
{
|
||||||
return 0.0f;
|
if (dynamic_cast<MovementAction*>(action)
|
||||||
|
&& !dynamic_cast<AvoidLightningNovaAction*>(action))
|
||||||
|
{
|
||||||
|
return 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Specifically prevent Charge during Lightning Nova.
|
||||||
|
if (dynamic_cast<CastChargeAction*>(action))
|
||||||
|
{
|
||||||
|
return 0.0f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1.0f;
|
return 1.0f; // Default multiplier value for other cases.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user