diff --git a/src/game/GridNotifiers.h b/src/game/GridNotifiers.h index 20e46dd65..b6e6c4779 100644 --- a/src/game/GridNotifiers.h +++ b/src/game/GridNotifiers.h @@ -767,6 +767,25 @@ namespace MaNGOS float i_range; }; + class AnyUnfriendlyVisibleUnitInObjectRangeCheck + { + public: + AnyUnfriendlyVisibleUnitInObjectRangeCheck(WorldObject const* obj, Unit const* funit, float range) + : i_obj(obj), i_funit(funit), i_range(range) {} + + bool operator()(Unit* u) + { + return u->isAlive() + && i_obj->IsWithinDistInMap(u, i_range) + && !i_funit->IsFriendlyTo(u) + && u->isVisibleForOrDetect(i_funit, false); + } + private: + WorldObject const* i_obj; + Unit const* i_funit; + float i_range; + }; + class AnyFriendlyUnitInObjectRangeCheck { public: diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index eca3292bd..6cb7a79fc 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -6449,8 +6449,42 @@ void Aura::PeriodicDummyTick() } case SPELLFAMILY_ROGUE: { -// switch (spell->Id) -// { + switch (spell->Id) + { + case 51690: + { + std::list targets; + { + // eff_radius ==0 + float radius = GetSpellMaxRange(sSpellRangeStore.LookupEntry(spell->rangeIndex)); + + CellPair p(MaNGOS::ComputeCellPair(caster->GetPositionX(),caster->GetPositionY())); + Cell cell(p); + cell.data.Part.reserved = ALL_DISTRICT; + + MaNGOS::AnyUnfriendlyVisibleUnitInObjectRangeCheck u_check(caster, caster, radius); + MaNGOS::UnitListSearcher checker(caster,targets, u_check); + + TypeContainerVisitor, GridTypeMapContainer > grid_object_checker(checker); + TypeContainerVisitor, WorldTypeMapContainer > world_object_checker(checker); + + CellLock cell_lock(cell, p); + + cell_lock->Visit(cell_lock, grid_object_checker, *caster->GetMap()); + cell_lock->Visit(cell_lock, world_object_checker, *caster->GetMap()); + } + + if(targets.empty()) + return; + + std::list::const_iterator itr = targets.begin(); + std::advance(itr, rand()%targets.size()); + Unit* target = *itr; + + caster->CastSpell(target, 57840, true); + caster->CastSpell(target, 57841, true); + return; + } // Master of Subtlety // case 31666: break; // Killing Spree @@ -6459,7 +6493,7 @@ void Aura::PeriodicDummyTick() // case 58428: break; // default: // break; -// } + } break; } case SPELLFAMILY_HUNTER: diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 8a203e84c..78f3faa17 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "7951" + #define REVISION_NR "7952" #endif // __REVISION_NR_H__