[7952] Implement rogue talent 51690. Author: Lightguard

--HG--
branch : trunk
This commit is contained in:
megamage
2009-06-04 16:18:52 -05:00
parent 8bb75918a8
commit 797fa43274
2 changed files with 60 additions and 8 deletions
+19
View File
@@ -803,6 +803,25 @@ namespace Trinity
float i_range; 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 CreatureWithDbGUIDCheck class CreatureWithDbGUIDCheck
{ {
public: public:
+41 -8
View File
@@ -6628,20 +6628,53 @@ void AuraEffect::PeriodicDummyTick()
{ {
switch (spell->Id) switch (spell->Id)
{ {
// Killing Spree
// case 51690: break;
// Overkill
case 58428:
if (!m_target->HasAuraType(SPELL_AURA_MOD_STEALTH))
m_target->RemoveAurasDueToSpell(58427);
break;
// Master of Subtlety // Master of Subtlety
case 31666: case 31666:
if (!m_target->HasAuraType(SPELL_AURA_MOD_STEALTH)) if (!m_target->HasAuraType(SPELL_AURA_MOD_STEALTH))
m_target->RemoveAurasDueToSpell(31665); m_target->RemoveAurasDueToSpell(31665);
break; break;
default: // Killing Spree
case 51690:
{
std::list<Unit*> 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<MaNGOS::AnyUnfriendlyVisibleUnitInObjectRangeCheck> checker(caster,targets, u_check);
TypeContainerVisitor<MaNGOS::UnitListSearcher<MaNGOS::AnyUnfriendlyVisibleUnitInObjectRangeCheck>, GridTypeMapContainer > grid_object_checker(checker);
TypeContainerVisitor<MaNGOS::UnitListSearcher<MaNGOS::AnyUnfriendlyVisibleUnitInObjectRangeCheck>, WorldTypeMapContainer > world_object_checker(checker);
CellLock<GridReadGuard> 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<Unit*>::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;
}
// Overkill
case 58428:
if (!m_target->HasAuraType(SPELL_AURA_MOD_STEALTH))
m_target->RemoveAurasDueToSpell(58427);
break; break;
// default:
// break;
} }
break; break;
} }