fix party member dispel.

This commit is contained in:
Yunfan Li
2023-05-29 23:03:21 +08:00
parent aaa358bdbe
commit d45a7dc5b8
27 changed files with 316 additions and 89 deletions

View File

@@ -22,6 +22,7 @@ class ChatTriggerContext : public NamedObjectContext<Trigger>
creators["reputation"] = &ChatTriggerContext::reputation;
creators["log"] = &ChatTriggerContext::log;
creators["los"] = &ChatTriggerContext::los;
creators["aura"] = &ChatTriggerContext::aura;
creators["drop"] = &ChatTriggerContext::drop;
creators["share"] = &ChatTriggerContext::share;
creators["q"] = &ChatTriggerContext::q;
@@ -187,6 +188,7 @@ class ChatTriggerContext : public NamedObjectContext<Trigger>
static Trigger* reputation(PlayerbotAI* botAI) { return new ChatCommandTrigger(botAI, "reputation"); }
static Trigger* log(PlayerbotAI* botAI) { return new ChatCommandTrigger(botAI, "log"); }
static Trigger* los(PlayerbotAI* botAI) { return new ChatCommandTrigger(botAI, "los"); }
static Trigger* aura(PlayerbotAI* ai) { return new ChatCommandTrigger(ai, "aura"); }
static Trigger* loot_all(PlayerbotAI* botAI) { return new ChatCommandTrigger(botAI, "add all loot"); }
static Trigger* release(PlayerbotAI* botAI) { return new ChatCommandTrigger(botAI, "release"); }
static Trigger* reset_ai(PlayerbotAI* botAI) { return new ChatCommandTrigger(botAI, "reset botAI"); }

View File

@@ -13,7 +13,7 @@ class Unit;
class NeedCureTrigger : public SpellTrigger
{
public:
NeedCureTrigger(PlayerbotAI* botAI, std::string const spell, uint32 dispelType) : SpellTrigger(botAI, spell, 5), dispelType(dispelType) { }
NeedCureTrigger(PlayerbotAI* botAI, std::string const spell, uint32 dispelType) : SpellTrigger(botAI, spell, 1), dispelType(dispelType) { }
std::string const GetTargetName() override { return "self target"; }
bool IsActive() override;

View File

@@ -21,6 +21,10 @@ bool NoPetTrigger::IsActive()
return !AI_VALUE(Unit*, "pet target") && !AI_VALUE2(bool, "mounted", "self target");
}
bool HasPetTrigger::IsActive() {
return AI_VALUE(Unit*, "pet target") && !AI_VALUE2(bool, "mounted", "self target");;
}
bool HighManaTrigger::IsActive()
{
return AI_VALUE2(bool, "has mana", "self target") && AI_VALUE2(uint8, "mana", "self target") < 65;

View File

@@ -418,6 +418,14 @@ class NoPetTrigger : public Trigger
bool IsActive() override;
};
class HasPetTrigger : public Trigger
{
public:
HasPetTrigger(PlayerbotAI* ai) : Trigger(ai, "no pet", 5) {}
virtual bool IsActive() override;
};
class ItemCountTrigger : public Trigger
{
public:

View File

@@ -30,3 +30,8 @@ bool AoeHealTrigger::IsActive()
return AI_VALUE2(uint8, "aoe heal", type) >= count;
}
bool AoeInGroupTrigger::IsActive()
{
Group *group = bot->GetGroup();
return group && AI_VALUE2(uint8, "aoe heal", type) >= (group->GetMembersCount() * ratio);
}

View File

@@ -132,4 +132,14 @@ class AoeHealTrigger : public Trigger
std::string const type;
};
class AoeInGroupTrigger : public Trigger {
public:
AoeInGroupTrigger(PlayerbotAI* ai, std::string name, std::string type, float ratio) :
Trigger(ai, name), ratio(ratio), type(type) {}
virtual bool IsActive();
protected:
float ratio;
std::string type;
};
#endif

View File

@@ -97,6 +97,7 @@ class TriggerContext : public NamedObjectContext<Trigger>
creators["corpse near"] = &TriggerContext::corpse_near;
creators["party member dead"] = &TriggerContext::PartyMemberDead;
creators["no pet"] = &TriggerContext::no_pet;
creators["has pet"] = &TriggerContext::has_pet;
creators["has attackers"] = &TriggerContext::has_attackers;
creators["no possible targets"] = &TriggerContext::no_possible_targets;
creators["possible adds"] = &TriggerContext::possible_adds;
@@ -118,6 +119,7 @@ class TriggerContext : public NamedObjectContext<Trigger>
creators["critical aoe heal"] = &TriggerContext::critical_aoe_heal;
creators["low aoe heal"] = &TriggerContext::low_aoe_heal;
creators["medium aoe heal"] = &TriggerContext::medium_aoe_heal;
creators["group heal occasion"] = &TriggerContext::group_heal_occasion;
creators["invalid target"] = &TriggerContext::invalid_target;
creators["lfg proposal active"] = &TriggerContext::lfg_proposal_active;
@@ -210,6 +212,7 @@ class TriggerContext : public NamedObjectContext<Trigger>
static Trigger* critical_aoe_heal(PlayerbotAI* botAI) { return new AoeHealTrigger(botAI, "critical aoe heal", "critical", 2); }
static Trigger* low_aoe_heal(PlayerbotAI* botAI) { return new AoeHealTrigger(botAI, "low aoe heal", "low", 2); }
static Trigger* medium_aoe_heal(PlayerbotAI* botAI) { return new AoeHealTrigger(botAI, "medium aoe heal", "medium", 2); }
static Trigger* group_heal_occasion(PlayerbotAI* ai) { return new AoeInGroupTrigger(ai, "group heal occasion", "almost full", 0.4); }
static Trigger* target_changed(PlayerbotAI* botAI) { return new TargetChangedTrigger(botAI); }
static Trigger* swimming(PlayerbotAI* botAI) { return new IsSwimmingTrigger(botAI); }
static Trigger* no_possible_targets(PlayerbotAI* botAI) { return new NoPossibleTargetsTrigger(botAI); }
@@ -277,6 +280,7 @@ class TriggerContext : public NamedObjectContext<Trigger>
static Trigger* PartyMemberCriticalHealth(PlayerbotAI* botAI) { return new PartyMemberCriticalHealthTrigger(botAI); }
static Trigger* protect_party_member(PlayerbotAI* botAI) { return new ProtectPartyMemberTrigger(botAI); }
static Trigger* no_pet(PlayerbotAI* botAI) { return new NoPetTrigger(botAI); }
static Trigger* has_pet(PlayerbotAI* botAI) { return new HasPetTrigger(botAI); }
static Trigger* has_attackers(PlayerbotAI* botAI) { return new HasAttackersTrigger(botAI); }
static Trigger* random_bot_update_trigger(PlayerbotAI* botAI) { return new RandomBotUpdateTrigger(botAI); }
static Trigger* no_non_bot_players_around(PlayerbotAI* botAI) { return new NoNonBotPlayersAroundTrigger(botAI); }