aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/DynamicObject.cpp2
-rw-r--r--src/game/Object.h1
-rw-r--r--src/game/SpellAuras.cpp25
-rw-r--r--src/game/Unit.cpp20
4 files changed, 26 insertions, 22 deletions
diff --git a/src/game/DynamicObject.cpp b/src/game/DynamicObject.cpp
index dcac7f08a9b..d7badd57892 100644
--- a/src/game/DynamicObject.cpp
+++ b/src/game/DynamicObject.cpp
@@ -116,7 +116,7 @@ void DynamicObject::Update(uint32 p_time)
if(m_updateTimer < p_time)
{
Trinity::DynamicObjectUpdater notifier(*this,caster);
- GetMap()->VisitAll(GetPositionX(), GetPositionY(), GetRadius(), notifier);
+ VisitNearbyObject(GetRadius(), notifier);
m_updateTimer = 500; // is this official-like?
}else m_updateTimer -= p_time;
diff --git a/src/game/Object.h b/src/game/Object.h
index 4eab67185df..70bb50893da 100644
--- a/src/game/Object.h
+++ b/src/game/Object.h
@@ -479,6 +479,7 @@ class TRINITY_DLL_SPEC WorldObject : public Object
Creature* SummonTrigger(float x, float y, float z, float ang, uint32 dur, CreatureAI* (*GetAI)(Creature*) = NULL);
bool isActive() const { return m_isActive; }
void setActive(bool isActive);
+ template<class NOTIFIER> void VisitNearbyObject(const float &radius, NOTIFIER &notifier) const { GetMap()->VisitAll(GetPositionX(), GetPositionY(), radius, notifier); }
protected:
explicit WorldObject();
std::string m_name;
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index 9d477b16406..a6e7be8d15d 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -2097,8 +2097,9 @@ void Aura::HandleAuraDummy(bool apply, bool Real)
{
if (GetAuraDuration() <= 0 || m_removeMode==AURA_REMOVE_BY_DISPEL)
{
- int32 bp0 = m_modifier.m_amount; //GetModifierValue();
- m_target->CastCustomSpell(m_target,33778,&bp0,NULL,NULL,true,NULL,this,GetCasterGUID());
+ // final heal
+ if(m_target->IsInWorld())
+ m_target->CastCustomSpell(m_target,33778,&m_modifier.m_amount,NULL,NULL,true,NULL,this,GetCasterGUID());
}
}
return;
@@ -3061,8 +3062,24 @@ void Aura::HandleFeignDeath(bool apply, bool Real)
m_target->SendMessageToSet(&data,true);
*/
- m_target->SetVisibility(VISIBILITY_OFF);
- m_target->SetVisibility(VISIBILITY_ON);
+ std::list<Unit*> targets;
+ Trinity::AnyUnfriendlyUnitInObjectRangeCheck u_check(m_target, m_target, 100);
+ Trinity::UnitListSearcher<Trinity::AnyUnfriendlyUnitInObjectRangeCheck> searcher(targets, u_check);
+ m_target->VisitNearbyObject(100, searcher);
+ for(std::list<Unit*>::iterator iter = targets.begin(); iter != targets.end(); ++iter)
+ {
+ if(!(*iter)->hasUnitState(UNIT_STAT_CASTING))
+ continue;
+
+ for(uint32 i = CURRENT_FIRST_NON_MELEE_SPELL; i < CURRENT_MAX_SPELL; i++)
+ {
+ if((*iter)->m_currentSpells[i]
+ && (*iter)->m_currentSpells[i]->m_targets.getUnitTargetGUID() == m_target->GetGUID())
+ {
+ (*iter)->InterruptSpell(i, false);
+ }
+ }
+ }
// blizz like 2.0.x
m_target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNKNOWN6);
// blizz like 2.0.x
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index 19ea4029cf8..f3a0b56c1fa 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -12089,24 +12089,10 @@ void Unit::UpdateReactives( uint32 p_time )
Unit* Unit::SelectNearbyTarget(float dist) const
{
- CellPair p(Trinity::ComputeCellPair(GetPositionX(), GetPositionY()));
- Cell cell(p);
- cell.data.Part.reserved = ALL_DISTRICT;
- cell.SetNoCreate();
-
std::list<Unit *> targets;
-
- {
- Trinity::AnyUnfriendlyUnitInObjectRangeCheck u_check(this, this, dist);
- Trinity::UnitListSearcher<Trinity::AnyUnfriendlyUnitInObjectRangeCheck> searcher(targets, u_check);
-
- TypeContainerVisitor<Trinity::UnitListSearcher<Trinity::AnyUnfriendlyUnitInObjectRangeCheck>, WorldTypeMapContainer > world_unit_searcher(searcher);
- TypeContainerVisitor<Trinity::UnitListSearcher<Trinity::AnyUnfriendlyUnitInObjectRangeCheck>, GridTypeMapContainer > grid_unit_searcher(searcher);
-
- CellLock<GridReadGuard> cell_lock(cell, p);
- cell_lock->Visit(cell_lock, world_unit_searcher, *MapManager::Instance().GetMap(GetMapId(), this));
- cell_lock->Visit(cell_lock, grid_unit_searcher, *MapManager::Instance().GetMap(GetMapId(), this));
- }
+ Trinity::AnyUnfriendlyUnitInObjectRangeCheck u_check(this, this, dist);
+ Trinity::UnitListSearcher<Trinity::AnyUnfriendlyUnitInObjectRangeCheck> searcher(targets, u_check);
+ VisitNearbyObject(dist, searcher);
// remove current target
if(getVictim())