mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 16:37:01 +00:00
[7966] Clean up in Spell:SetTargetMap
* Little optimization * Code style cleanup * Formating cleanup Signed-off-by: ApoC <apoc@nymfe.net>
This commit is contained in:
parent
30c054ae38
commit
e5e8a3755f
2 changed files with 33 additions and 42 deletions
|
|
@ -1561,7 +1561,8 @@ void Spell::SetTargetMap(uint32 i,uint32 cur,UnitList& TagUnitMap)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Unit* pUnitTarget = m_targets.getUnitTarget();
|
Unit* pUnitTarget = m_targets.getUnitTarget();
|
||||||
if(!pUnitTarget)
|
Unit* originalCaster = GetOriginalCaster();
|
||||||
|
if(!pUnitTarget || !originalCaster)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
unMaxTargets = EffectChainTarget;
|
unMaxTargets = EffectChainTarget;
|
||||||
|
|
@ -1578,55 +1579,45 @@ void Spell::SetTargetMap(uint32 i,uint32 cur,UnitList& TagUnitMap)
|
||||||
cell.data.Part.reserved = ALL_DISTRICT;
|
cell.data.Part.reserved = ALL_DISTRICT;
|
||||||
cell.SetNoCreate();
|
cell.SetNoCreate();
|
||||||
|
|
||||||
Unit* originalCaster = GetOriginalCaster();
|
std::list<Unit *> tempUnitMap;
|
||||||
if(originalCaster)
|
|
||||||
{
|
{
|
||||||
std::list<Unit *> tempUnitMap;
|
MaNGOS::AnyAoETargetUnitInObjectRangeCheck u_check(pUnitTarget, originalCaster, max_range, false);
|
||||||
|
MaNGOS::UnitListSearcher<MaNGOS::AnyAoETargetUnitInObjectRangeCheck> searcher(m_caster, tempUnitMap, u_check);
|
||||||
|
TypeContainerVisitor<MaNGOS::UnitListSearcher<MaNGOS::AnyAoETargetUnitInObjectRangeCheck>, WorldTypeMapContainer> world_unit_searcher(searcher);
|
||||||
|
TypeContainerVisitor<MaNGOS::UnitListSearcher<MaNGOS::AnyAoETargetUnitInObjectRangeCheck>, GridTypeMapContainer> grid_unit_searcher(searcher);
|
||||||
|
CellLock<GridReadGuard> cell_lock(cell, p);
|
||||||
|
|
||||||
{
|
cell_lock->Visit(cell_lock, world_unit_searcher, *m_caster->GetMap());
|
||||||
MaNGOS::AnyAoETargetUnitInObjectRangeCheck u_check(pUnitTarget, originalCaster, max_range, false);
|
cell_lock->Visit(cell_lock, grid_unit_searcher, *m_caster->GetMap());
|
||||||
MaNGOS::UnitListSearcher<MaNGOS::AnyAoETargetUnitInObjectRangeCheck> searcher(m_caster, tempUnitMap, u_check);
|
}
|
||||||
|
if (tempUnitMap.empty())
|
||||||
|
break;
|
||||||
|
|
||||||
TypeContainerVisitor<MaNGOS::UnitListSearcher<MaNGOS::AnyAoETargetUnitInObjectRangeCheck>, WorldTypeMapContainer > world_unit_searcher(searcher);
|
tempUnitMap.sort(TargetDistanceOrder(pUnitTarget));
|
||||||
TypeContainerVisitor<MaNGOS::UnitListSearcher<MaNGOS::AnyAoETargetUnitInObjectRangeCheck>, GridTypeMapContainer > grid_unit_searcher(searcher);
|
|
||||||
|
|
||||||
CellLock<GridReadGuard> cell_lock(cell, p);
|
if (*tempUnitMap.begin() == pUnitTarget)
|
||||||
cell_lock->Visit(cell_lock, world_unit_searcher, *m_caster->GetMap());
|
tempUnitMap.erase (tempUnitMap.begin());
|
||||||
cell_lock->Visit(cell_lock, grid_unit_searcher, *m_caster->GetMap());
|
|
||||||
}
|
|
||||||
|
|
||||||
tempUnitMap.sort(TargetDistanceOrder(pUnitTarget));
|
TagUnitMap.push_back(pUnitTarget);
|
||||||
|
uint32 t = unMaxTargets - 1;
|
||||||
|
Unit *prev = pUnitTarget;
|
||||||
|
std::list<Unit*>::iterator next = tempUnitMap.begin();
|
||||||
|
|
||||||
if(tempUnitMap.empty())
|
while (t && next != tempUnitMap.end())
|
||||||
|
{
|
||||||
|
if (!prev->IsWithinDist (*next,CHAIN_SPELL_JUMP_RADIUS))
|
||||||
break;
|
break;
|
||||||
|
if (!prev->IsWithinLOSInMap (*next))
|
||||||
if(*tempUnitMap.begin() == pUnitTarget)
|
|
||||||
tempUnitMap.erase(tempUnitMap.begin());
|
|
||||||
|
|
||||||
TagUnitMap.push_back(pUnitTarget);
|
|
||||||
uint32 t = unMaxTargets - 1;
|
|
||||||
Unit *prev = pUnitTarget;
|
|
||||||
std::list<Unit*>::iterator next = tempUnitMap.begin();
|
|
||||||
|
|
||||||
while(t && next != tempUnitMap.end() )
|
|
||||||
{
|
{
|
||||||
if(!prev->IsWithinDist(*next,CHAIN_SPELL_JUMP_RADIUS))
|
++next;
|
||||||
break;
|
continue;
|
||||||
|
|
||||||
if(!prev->IsWithinLOSInMap(*next))
|
|
||||||
{
|
|
||||||
++next;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
prev = *next;
|
|
||||||
TagUnitMap.push_back(prev);
|
|
||||||
tempUnitMap.erase(next);
|
|
||||||
tempUnitMap.sort(TargetDistanceOrder(prev));
|
|
||||||
next = tempUnitMap.begin();
|
|
||||||
|
|
||||||
--t;
|
|
||||||
}
|
}
|
||||||
|
prev = *next;
|
||||||
|
TagUnitMap.push_back(prev);
|
||||||
|
tempUnitMap.erase(next);
|
||||||
|
tempUnitMap.sort (TargetDistanceOrder(prev));
|
||||||
|
next = tempUnitMap.begin();
|
||||||
|
--t;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "7965"
|
#define REVISION_NR "7966"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue