debuff on melee attackers

This commit is contained in:
Yunfan Li
2023-08-28 17:28:36 +08:00
parent 953f09364a
commit 1136b7bfdc
17 changed files with 88 additions and 22 deletions

View File

@@ -8,19 +8,27 @@
Unit* AttackerWithoutAuraTargetValue::Calculate()
{
GuidVector attackers = botAI->GetAiObjectContext()->GetValue<GuidVector >("attackers")->Get();
Unit* target = botAI->GetAiObjectContext()->GetValue<Unit*>("current target")->Get();
// Unit* target = botAI->GetAiObjectContext()->GetValue<Unit*>("current target")->Get();
uint32 max_health = 0;
Unit* result = nullptr;
for (ObjectGuid const guid : attackers)
{
Unit* unit = botAI->GetUnit(guid);
if (!unit || unit == target)
if (!unit || !unit->IsAlive())
continue;
if (bot->GetDistance(unit) > botAI->GetRange("spell"))
if (bot->GetDistance(unit) > botAI->GetRange(range))
continue;
if (!botAI->HasAura(qualifier, unit, false, true))
return unit;
if (unit->GetHealth() < max_health) {
continue;
}
if (!botAI->HasAura(qualifier, unit, false, true)) {
max_health = unit->GetHealth();
result = unit;
}
}
return nullptr;
return result;
}

View File

@@ -14,10 +14,17 @@ class Unit;
class AttackerWithoutAuraTargetValue : public UnitCalculatedValue, public Qualified
{
public:
AttackerWithoutAuraTargetValue(PlayerbotAI* botAI) : UnitCalculatedValue(botAI, "attacker without aura") { }
AttackerWithoutAuraTargetValue(PlayerbotAI* botAI, std::string range = "spell") : UnitCalculatedValue(botAI, "attacker without aura"), range(range) { }
protected:
Unit* Calculate() override;
std::string range;
};
class MeleeAttackerWithoutAuraTargetValue : public AttackerWithoutAuraTargetValue
{
public:
MeleeAttackerWithoutAuraTargetValue(PlayerbotAI* botAI) : AttackerWithoutAuraTargetValue(botAI, "melee") {}
};
#endif

View File

@@ -116,6 +116,7 @@ class ValueContext : public NamedObjectContext<UntypedValue>
creators["log level"] = &ValueContext::log_level;
creators["party member without aura"] = &ValueContext::party_member_without_aura;
creators["attacker without aura"] = &ValueContext::attacker_without_aura;
creators["melee attacker without aura"] = &ValueContext::melee_attacker_without_aura;
creators["party member to heal"] = &ValueContext::party_member_to_heal;
creators["party member to resurrect"] = &ValueContext::party_member_to_resurrect;
creators["current target"] = &ValueContext::current_target;
@@ -376,6 +377,7 @@ class ValueContext : public NamedObjectContext<UntypedValue>
static UntypedValue* nearest_adds(PlayerbotAI* botAI) { return new NearestAddsValue(botAI); }
static UntypedValue* party_member_without_aura(PlayerbotAI* botAI) { return new PartyMemberWithoutAuraValue(botAI); }
static UntypedValue* attacker_without_aura(PlayerbotAI* botAI) { return new AttackerWithoutAuraTargetValue(botAI); }
static UntypedValue* melee_attacker_without_aura(PlayerbotAI* botAI) { return new MeleeAttackerWithoutAuraTargetValue(botAI); }
static UntypedValue* party_member_to_heal(PlayerbotAI* botAI) { return new PartyMemberToHeal(botAI); }
static UntypedValue* party_member_to_resurrect(PlayerbotAI* botAI) { return new PartyMemberToResurrect(botAI); }
static UntypedValue* party_member_to_dispel(PlayerbotAI* botAI) { return new PartyMemberToDispel(botAI); }