Merge pull request #16644 from Treeston/3.3.5-customcharmai
Core/UnitAI: Rework creature-controlled player behavior.
This commit is contained in:
commit
4e4b2b9a13
13 files changed
+304
-102
No files matched your search
@@ -1237,12 +1237,7 @@ void Player::Update(uint32 p_time)
|
||||
|
||||
UpdateAfkReport(now);
|
||||
|
||||
if (IsCharmed())
|
||||
if (Unit* charmer = GetCharmer())
|
||||
if (charmer->GetTypeId() == TYPEID_UNIT && charmer->IsAlive())
|
||||
UpdateCharmedAI();
|
||||
|
||||
if (GetAI() && IsAIEnabled)
|
||||
if (IsAIEnabled && GetAI())
|
||||
GetAI()->UpdateAI(p_time);
|
||||
|
||||
// Update items that have just a limited lifetime
|
||||
@@ -24129,38 +24124,6 @@ bool Player::isTotalImmunity()
|
||||
return false;
|
||||
}
|
||||
|
||||
void Player::UpdateCharmedAI()
|
||||
{
|
||||
//This should only called in Player::Update
|
||||
Creature* charmer = GetCharmer()->ToCreature();
|
||||
|
||||
//kill self if charm aura has infinite duration
|
||||
if (charmer->IsInEvadeMode())
|
||||
{
|
||||
AuraEffectList const& auras = GetAuraEffectsByType(SPELL_AURA_MOD_CHARM);
|
||||
for (AuraEffectList::const_iterator iter = auras.begin(); iter != auras.end(); ++iter)
|
||||
if ((*iter)->GetCasterGUID() == charmer->GetGUID() && (*iter)->GetBase()->IsPermanent())
|
||||
{
|
||||
charmer->DealDamage(this, GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!charmer->IsInCombat())
|
||||
GetMotionMaster()->MoveFollow(charmer, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
|
||||
|
||||
Unit* target = GetVictim();
|
||||
if (!target || !charmer->IsValidAttackTarget(target))
|
||||
{
|
||||
target = charmer->SelectNearestTarget();
|
||||
if (!target)
|
||||
return;
|
||||
|
||||
GetMotionMaster()->MoveChase(target);
|
||||
Attack(target, true);
|
||||
}
|
||||
}
|
||||
|
||||
uint32 Player::GetRuneBaseCooldown(uint8 index)
|
||||
{
|
||||
uint8 rune = GetBaseRune(index);
|
||||
|
||||
Reference in new issue
Block a user