From 3742e8ddec39e82ee5ce2d596433077beae7902d Mon Sep 17 00:00:00 2001 From: linencloth Date: Mon, 25 Oct 2010 02:30:50 +0200 Subject: Core/Transport: Prevent creature passengers from teleporting to an invalid grid. --HG-- branch : trunk --- src/server/game/Maps/Map.cpp | 5 ++++- src/server/game/Maps/Map.h | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'src/server/game/Maps') diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index ff826e32887..ed77fee63dc 100755 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -779,7 +779,7 @@ Map::PlayerRelocation(Player *player, float x, float y, float z, float orientati } void -Map::CreatureRelocation(Creature *creature, float x, float y, float z, float ang) +Map::CreatureRelocation(Creature *creature, float x, float y, float z, float ang, bool respawnRelocationOnFail) { ASSERT(CheckGridIntegrity(creature,false)); @@ -788,6 +788,9 @@ Map::CreatureRelocation(Creature *creature, float x, float y, float z, float ang CellPair new_val = Trinity::ComputeCellPair(x, y); Cell new_cell(new_val); + if (!respawnRelocationOnFail && !getNGrid(new_cell.GridX(), new_cell.GridY())) + return; + // delay creature move for grid/cell to grid/cell moves if (old_cell.DiffCell(new_cell) || old_cell.DiffGrid(new_cell)) { diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index 7d87bba823f..534115e7e0d 100755 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -276,7 +276,7 @@ class Map : public GridRefManager virtual void InitVisibilityDistance(); void PlayerRelocation(Player *, float x, float y, float z, float orientation); - void CreatureRelocation(Creature *creature, float x, float y, float z, float ang); + void CreatureRelocation(Creature *creature, float x, float y, float z, float ang, bool respawnRelocationOnFail = true); template void Visit(const Cell& cell, TypeContainerVisitor &visitor); -- cgit v1.2.3