mirror of
https://github.com/mod-playerbots/mod-playerbots.git
synced 2026-01-16 18:30:27 +00:00
debuff on melee attackers
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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); }
|
||||
|
||||
Reference in New Issue
Block a user