[7952] Implement rogue talent 51690. Author: Lightguard
--HG-- branch : trunk
This commit is contained in:
@@ -803,6 +803,25 @@ namespace Trinity
|
||||
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
|
||||
{
|
||||
public:
|
||||
|
||||
+41
-8
@@ -6628,20 +6628,53 @@ void AuraEffect::PeriodicDummyTick()
|
||||
{
|
||||
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
|
||||
case 31666:
|
||||
if (!m_target->HasAuraType(SPELL_AURA_MOD_STEALTH))
|
||||
m_target->RemoveAurasDueToSpell(31665);
|
||||
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;
|
||||
// default:
|
||||
// break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user