diff options
author | gvcoman <none@none> | 2008-11-14 20:40:35 -0600 |
---|---|---|
committer | gvcoman <none@none> | 2008-11-14 20:40:35 -0600 |
commit | 5deef1bb59ba53570d481a97e5c1df39ef316f37 (patch) | |
tree | 334e913e1247419d2ad485f1681e859aa8875044 /src/game/Map.cpp | |
parent | 3085e66b966fec0012decf2543c7e32064b47102 (diff) |
[svn] * Reimplemented packet/update forwarding in more generic way
* Implemented far sight spells (Far Sight, Eagle Eye, etc) at unlimited range and properly forward packets
* Implemented bind vision spells (Mind Vision, etc) to forward packets at unlimited distance
* Implemented Sentry Totem (both vision switching/forwarding and alerting)
* Other misc possession fixes
* Added .bindsight and .unbindsight commands
Please test out the above spells (including Mind Control) and report any issues on the forums.
--HG--
branch : trunk
Diffstat (limited to 'src/game/Map.cpp')
-rw-r--r-- | src/game/Map.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/game/Map.cpp b/src/game/Map.cpp index 2dde5708b1a..7b3e40c00b3 100644 --- a/src/game/Map.cpp +++ b/src/game/Map.cpp @@ -315,21 +315,29 @@ void Map::SwitchGridContainers(T* obj, bool active) { CellPair pair = Trinity::ComputeCellPair(obj->GetPositionX(), obj->GetPositionY()); Cell cell(pair); - NGridType *grid = getNGrid(cell.GridX(), cell.GridY()); + NGridType *ngrid = getNGrid(cell.GridX(), cell.GridY()); + GridType &grid = (*ngrid)(cell.CellX(), cell.CellY()); if (active) { - (*grid)(cell.CellX(), cell.CellY()).RemoveGridObject<T>(obj, obj->GetGUID()); - (*grid)(cell.CellX(), cell.CellY()).AddWorldObject<T>(obj, obj->GetGUID()); + if (!grid.GetWorldObject(obj->GetGUID(), obj)) + { + grid.RemoveGridObject<T>(obj, obj->GetGUID()); + grid.AddWorldObject<T>(obj, obj->GetGUID()); + } } else { - (*grid)(cell.CellX(), cell.CellY()).RemoveWorldObject<T>(obj, obj->GetGUID()); - (*grid)(cell.CellX(), cell.CellY()).AddGridObject<T>(obj, obj->GetGUID()); + if (!grid.GetGridObject(obj->GetGUID(), obj)) + { + grid.RemoveWorldObject<T>(obj, obj->GetGUID()); + grid.AddGridObject<T>(obj, obj->GetGUID()); + } } } template void Map::SwitchGridContainers(Creature *, bool); template void Map::SwitchGridContainers(Corpse *, bool); +template void Map::SwitchGridContainers(DynamicObject *, bool); template<class T> void Map::DeleteFromWorld(T* obj) |