mirror of
https://github.com/mangosfour/server.git
synced 2025-12-12 19:37:03 +00:00
[11220] Implement support positive persistent auras
Note this alos have bad side: if some spell wrongly checks as possitive then it will work wrong after. So report if any.
This commit is contained in:
parent
8f3d97d955
commit
d3947b2026
5 changed files with 10 additions and 6 deletions
|
|
@ -96,6 +96,7 @@ bool DynamicObject::Create( uint32 guidlow, Unit *caster, uint32 spellId, SpellE
|
||||||
m_radius = radius;
|
m_radius = radius;
|
||||||
m_effIndex = effIndex;
|
m_effIndex = effIndex;
|
||||||
m_spellId = spellId;
|
m_spellId = spellId;
|
||||||
|
m_positive = IsPositiveEffect(m_spellId, m_effIndex);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -127,7 +128,7 @@ void DynamicObject::Update(uint32 update_diff, uint32 p_time)
|
||||||
if(m_radius)
|
if(m_radius)
|
||||||
{
|
{
|
||||||
// TODO: make a timer and update this in larger intervals
|
// TODO: make a timer and update this in larger intervals
|
||||||
MaNGOS::DynamicObjectUpdater notifier(*this, caster);
|
MaNGOS::DynamicObjectUpdater notifier(*this, caster, m_positive);
|
||||||
Cell::VisitAllObjects(this, notifier, m_radius);
|
Cell::VisitAllObjects(this, notifier, m_radius);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,7 @@ class DynamicObject : public WorldObject
|
||||||
SpellEffectIndex m_effIndex;
|
SpellEffectIndex m_effIndex;
|
||||||
int32 m_aliveDuration;
|
int32 m_aliveDuration;
|
||||||
float m_radius; // radius apply persistent effect, 0 = no persistent effect
|
float m_radius; // radius apply persistent effect, 0 = no persistent effect
|
||||||
|
bool m_positive;
|
||||||
AffectedSet m_affected;
|
AffectedSet m_affected;
|
||||||
private:
|
private:
|
||||||
GridReference<DynamicObject> m_gridRef;
|
GridReference<DynamicObject> m_gridRef;
|
||||||
|
|
|
||||||
|
|
@ -148,7 +148,8 @@ namespace MaNGOS
|
||||||
{
|
{
|
||||||
DynamicObject &i_dynobject;
|
DynamicObject &i_dynobject;
|
||||||
Unit* i_check;
|
Unit* i_check;
|
||||||
DynamicObjectUpdater(DynamicObject &dynobject, Unit* caster) : i_dynobject(dynobject)
|
bool i_positive;
|
||||||
|
DynamicObjectUpdater(DynamicObject &dynobject, Unit* caster, bool positive) : i_dynobject(dynobject), i_positive(positive)
|
||||||
{
|
{
|
||||||
i_check = caster;
|
i_check = caster;
|
||||||
Unit* owner = i_check->GetOwner();
|
Unit* owner = i_check->GetOwner();
|
||||||
|
|
|
||||||
|
|
@ -136,14 +136,15 @@ inline void MaNGOS::DynamicObjectUpdater::VisitHelper(Unit* target)
|
||||||
if (target->GetTypeId() == TYPEID_PLAYER && target != i_check && (((Player*)target)->isGameMaster() || ((Player*)target)->GetVisibility() == VISIBILITY_OFF))
|
if (target->GetTypeId() == TYPEID_PLAYER && target != i_check && (((Player*)target)->isGameMaster() || ((Player*)target)->GetVisibility() == VISIBILITY_OFF))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// for player casts use less strict negative and more stricted positive targeting
|
||||||
if (i_check->GetTypeId() == TYPEID_PLAYER )
|
if (i_check->GetTypeId() == TYPEID_PLAYER )
|
||||||
{
|
{
|
||||||
if (i_check->IsFriendlyTo( target ))
|
if (i_check->IsFriendlyTo( target ) != i_positive)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!i_check->IsHostileTo( target ))
|
if (i_check->IsHostileTo( target ) == i_positive)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "11219"
|
#define REVISION_NR "11220"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue