debuff on attacker

This commit is contained in:
Yunfan Li
2023-09-05 01:41:13 +08:00
parent 5b4e2a849e
commit 5e676e60e0
6 changed files with 16 additions and 8 deletions

View File

@@ -292,3 +292,7 @@ Value<Unit*>* BuffOnMainTankAction::GetTargetValue()
return context->GetValue<Unit*>("main tank", spell);
}
bool CastDebuffSpellAction::isUseful()
{
return CastAuraSpellAction::isUseful() && GetTarget() && (GetTarget()->GetHealth() / AI_VALUE(float, "expected group dps")) >= needLifeTime;
}

View File

@@ -50,13 +50,16 @@ class CastMeleeSpellAction : public CastSpellAction
class CastDebuffSpellAction : public CastAuraSpellAction
{
public:
CastDebuffSpellAction(PlayerbotAI* botAI, std::string const spell, bool isOwner = false) : CastAuraSpellAction(botAI, spell, isOwner) { }
CastDebuffSpellAction(PlayerbotAI* botAI, std::string const spell, bool isOwner = false, float needLifeTime = 8.0f) : CastAuraSpellAction(botAI, spell, isOwner), needLifeTime(needLifeTime) { }
bool isUseful() override;
private:
float needLifeTime;
};
class CastDebuffSpellOnAttackerAction : public CastAuraSpellAction
class CastDebuffSpellOnAttackerAction : public CastDebuffSpellAction
{
public:
CastDebuffSpellOnAttackerAction(PlayerbotAI* botAI, std::string const spell, bool isOwner = true) : CastAuraSpellAction(botAI, spell, isOwner) { }
CastDebuffSpellOnAttackerAction(PlayerbotAI* botAI, std::string const spell, bool isOwner = true, float needLifeTime = 8.0f) : CastDebuffSpellAction(botAI, spell, isOwner, needLifeTime) { }
Value<Unit*>* GetTargetValue() override;
std::string const getName() override { return spell + " on attacker"; }

View File

@@ -3,6 +3,7 @@
*/
#include "HunterTriggers.h"
#include "GenericTriggers.h"
#include "HunterActions.h"
#include "Playerbots.h"
#include "ServerFacade.h"
@@ -18,7 +19,7 @@ bool HunterAspectOfTheHawkTrigger::IsActive()
bool HunterNoStingsActiveTrigger::IsActive()
{
Unit* target = AI_VALUE(Unit*, "current target");
return target && AI_VALUE2(uint8, "health", "current target") > 15 &&
return DebuffTrigger::IsActive() && target &&
!botAI->HasAura("serpent sting", target, false, true) &&
!botAI->HasAura("scorpid sting", target, false, true) &&
!botAI->HasAura("viper sting", target, false, true);

View File

@@ -11,10 +11,10 @@
class PlayerbotAI;
class HunterNoStingsActiveTrigger : public Trigger
class HunterNoStingsActiveTrigger : public DebuffTrigger
{
public:
HunterNoStingsActiveTrigger(PlayerbotAI* botAI): Trigger(botAI, "no stings") {}
HunterNoStingsActiveTrigger(PlayerbotAI* botAI): DebuffTrigger(botAI, "no stings") {}
bool IsActive() override;
};

View File

@@ -333,7 +333,7 @@ class DebuffOnBossTrigger : public DebuffTrigger
class DebuffOnAttackerTrigger : public DebuffTrigger
{
public:
DebuffOnAttackerTrigger(PlayerbotAI* botAI, std::string const spell, bool checkIsOwner = true, float needLifeTime = 8000.0f) : DebuffTrigger(botAI, spell, 1, checkIsOwner, needLifeTime) { }
DebuffOnAttackerTrigger(PlayerbotAI* botAI, std::string const spell, bool checkIsOwner = true, float needLifeTime = 8.0f) : DebuffTrigger(botAI, spell, 1, checkIsOwner, needLifeTime) { }
Value<Unit*>* GetTargetValue() override;
std::string const getName() override { return spell + " on attacker"; }

View File

@@ -141,7 +141,7 @@ class CastBanishAction : public CastBuffSpellAction
class CastSeedOfCorruptionAction : public CastDebuffSpellAction
{
public:
CastSeedOfCorruptionAction(PlayerbotAI* botAI) : CastDebuffSpellAction(botAI, "seed of corruption", true) { }
CastSeedOfCorruptionAction(PlayerbotAI* botAI) : CastDebuffSpellAction(botAI, "seed of corruption", true, 0) { }
};
class CastRainOfFireAction : public CastSpellAction