Core/Maps: Refactor duplicated code from all ***CellRelocation and CheckGridIntegrity into single templated function
Port From (https://github.com/TrinityCore/TrinityCore/commit/a8fb7109b78bdc951292c9de7eddcce59393afe9)
This commit is contained in:
+45
-182
@@ -1006,6 +1006,20 @@ namespace Game.Maps
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CheckGridIntegrity<T>(T obj, bool moved) where T : WorldObject
|
||||||
|
{
|
||||||
|
Cell cur_cell = obj.GetCurrentCell();
|
||||||
|
Cell xy_cell = new Cell(obj.GetPositionX(), obj.GetPositionY());
|
||||||
|
if (xy_cell != cur_cell)
|
||||||
|
{
|
||||||
|
//$"grid[{GetGridX()}, {GetGridY()}]cell[{GetCellX()}, {GetCellY()}]";
|
||||||
|
Log.outDebug(LogFilter.Maps, $"{obj.GetTypeId()} ({obj.GetGUID()}) X: {obj.GetPositionX()} Y: {obj.GetPositionY()} ({(moved ? "final" : "original")}) is in {cur_cell} instead of {xy_cell}");
|
||||||
|
return true; // not crash at error, just output error in debug mode
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public void PlayerRelocation(Player player, float x, float y, float z, float orientation)
|
public void PlayerRelocation(Player player, float x, float y, float z, float orientation)
|
||||||
{
|
{
|
||||||
var oldcell = player.GetCurrentCell();
|
var oldcell = player.GetCurrentCell();
|
||||||
@@ -1040,9 +1054,8 @@ namespace Game.Maps
|
|||||||
|
|
||||||
public void CreatureRelocation(Creature creature, float x, float y, float z, float ang, bool respawnRelocationOnFail = true)
|
public void CreatureRelocation(Creature creature, float x, float y, float z, float ang, bool respawnRelocationOnFail = true)
|
||||||
{
|
{
|
||||||
CheckGridIntegrity(creature, false);
|
Cypher.Assert(CheckGridIntegrity(creature, false));
|
||||||
|
|
||||||
Cell old_cell = creature.GetCurrentCell();
|
|
||||||
var new_cell = new Cell(x, y);
|
var new_cell = new Cell(x, y);
|
||||||
|
|
||||||
if (!respawnRelocationOnFail && GetGrid(new_cell.GetGridX(), new_cell.GetGridY()) == null)
|
if (!respawnRelocationOnFail && GetGrid(new_cell.GetGridX(), new_cell.GetGridY()) == null)
|
||||||
@@ -1054,6 +1067,7 @@ namespace Game.Maps
|
|||||||
if (creature.HasUnitMovementFlag(MovementFlag.Hover))
|
if (creature.HasUnitMovementFlag(MovementFlag.Hover))
|
||||||
z += creature.m_unitData.HoverHeight;
|
z += creature.m_unitData.HoverHeight;
|
||||||
|
|
||||||
|
Cell old_cell = creature.GetCurrentCell();
|
||||||
// delay creature move for grid/cell to grid/cell moves
|
// delay creature move for grid/cell to grid/cell moves
|
||||||
if (old_cell.DiffCell(new_cell) || old_cell.DiffGrid(new_cell))
|
if (old_cell.DiffCell(new_cell) || old_cell.DiffGrid(new_cell))
|
||||||
{
|
{
|
||||||
@@ -1070,17 +1084,18 @@ namespace Game.Maps
|
|||||||
RemoveCreatureFromMoveList(creature);
|
RemoveCreatureFromMoveList(creature);
|
||||||
}
|
}
|
||||||
|
|
||||||
CheckGridIntegrity(creature, true);
|
Cypher.Assert(CheckGridIntegrity(creature, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void GameObjectRelocation(GameObject go, float x, float y, float z, float orientation, bool respawnRelocationOnFail = true)
|
public void GameObjectRelocation(GameObject go, float x, float y, float z, float orientation, bool respawnRelocationOnFail = true)
|
||||||
{
|
{
|
||||||
Cell old_cell = go.GetCurrentCell();
|
Cypher.Assert(CheckGridIntegrity(go, false));
|
||||||
|
|
||||||
var new_cell = new Cell(x, y);
|
var new_cell = new Cell(x, y);
|
||||||
if (!respawnRelocationOnFail && GetGrid(new_cell.GetGridX(), new_cell.GetGridY()) == null)
|
if (!respawnRelocationOnFail && GetGrid(new_cell.GetGridX(), new_cell.GetGridY()) == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
Cell old_cell = go.GetCurrentCell();
|
||||||
// delay creature move for grid/cell to grid/cell moves
|
// delay creature move for grid/cell to grid/cell moves
|
||||||
if (old_cell.DiffCell(new_cell) || old_cell.DiffGrid(new_cell))
|
if (old_cell.DiffCell(new_cell) || old_cell.DiffGrid(new_cell))
|
||||||
{
|
{
|
||||||
@@ -1100,20 +1115,19 @@ namespace Game.Maps
|
|||||||
go.UpdateObjectVisibility(false);
|
go.UpdateObjectVisibility(false);
|
||||||
RemoveGameObjectFromMoveList(go);
|
RemoveGameObjectFromMoveList(go);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Cypher.Assert(CheckGridIntegrity(go, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DynamicObjectRelocation(DynamicObject dynObj, float x, float y, float z, float orientation)
|
public void DynamicObjectRelocation(DynamicObject dynObj, float x, float y, float z, float orientation)
|
||||||
{
|
{
|
||||||
Cell integrity_check = new(dynObj.GetPositionX(), dynObj.GetPositionY());
|
Cypher.Assert(CheckGridIntegrity(dynObj, false));
|
||||||
Cell old_cell = dynObj.GetCurrentCell();
|
|
||||||
|
|
||||||
Cypher.Assert(integrity_check == old_cell);
|
|
||||||
|
|
||||||
Cell new_cell = new(x, y);
|
Cell new_cell = new(x, y);
|
||||||
|
|
||||||
if (GetGrid(new_cell.GetGridX(), new_cell.GetGridY()) == null)
|
if (GetGrid(new_cell.GetGridX(), new_cell.GetGridY()) == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
Cell old_cell = dynObj.GetCurrentCell();
|
||||||
// delay creature move for grid/cell to grid/cell moves
|
// delay creature move for grid/cell to grid/cell moves
|
||||||
if (old_cell.DiffCell(new_cell) || old_cell.DiffGrid(new_cell))
|
if (old_cell.DiffCell(new_cell) || old_cell.DiffGrid(new_cell))
|
||||||
{
|
{
|
||||||
@@ -1132,23 +1146,18 @@ namespace Game.Maps
|
|||||||
RemoveDynamicObjectFromMoveList(dynObj);
|
RemoveDynamicObjectFromMoveList(dynObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
old_cell = dynObj.GetCurrentCell();
|
Cypher.Assert(CheckGridIntegrity(dynObj, true));
|
||||||
integrity_check = new Cell(dynObj.GetPositionX(), dynObj.GetPositionY());
|
|
||||||
|
|
||||||
Cypher.Assert(integrity_check == old_cell);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AreaTriggerRelocation(AreaTrigger at, float x, float y, float z, float orientation)
|
public void AreaTriggerRelocation(AreaTrigger at, float x, float y, float z, float orientation)
|
||||||
{
|
{
|
||||||
Cell integrity_check = new(at.GetPositionX(), at.GetPositionY());
|
Cypher.Assert(CheckGridIntegrity(at, false));
|
||||||
Cell old_cell = at.GetCurrentCell();
|
|
||||||
|
|
||||||
Cypher.Assert(integrity_check == old_cell);
|
|
||||||
Cell new_cell = new(x, y);
|
Cell new_cell = new(x, y);
|
||||||
|
|
||||||
if (GetGrid(new_cell.GetGridX(), new_cell.GetGridY()) == null)
|
if (GetGrid(new_cell.GetGridX(), new_cell.GetGridY()) == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
Cell old_cell = at.GetCurrentCell();
|
||||||
// delay areatrigger move for grid/cell to grid/cell moves
|
// delay areatrigger move for grid/cell to grid/cell moves
|
||||||
if (old_cell.DiffCell(new_cell) || old_cell.DiffGrid(new_cell))
|
if (old_cell.DiffCell(new_cell) || old_cell.DiffGrid(new_cell))
|
||||||
{
|
{
|
||||||
@@ -1165,9 +1174,7 @@ namespace Game.Maps
|
|||||||
RemoveAreaTriggerFromMoveList(at);
|
RemoveAreaTriggerFromMoveList(at);
|
||||||
}
|
}
|
||||||
|
|
||||||
old_cell = at.GetCurrentCell();
|
Cypher.Assert(CheckGridIntegrity(at, true));
|
||||||
integrity_check = new Cell(at.GetPositionX(), at.GetPositionY());
|
|
||||||
Cypher.Assert(integrity_check == old_cell);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddCreatureToMoveList(Creature c, float x, float y, float z, float ang)
|
void AddCreatureToMoveList(Creature c, float x, float y, float z, float ang)
|
||||||
@@ -1423,32 +1430,32 @@ namespace Game.Maps
|
|||||||
_areaTriggersToMoveLock = false;
|
_areaTriggersToMoveLock = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool CreatureCellRelocation(Creature c, Cell new_cell)
|
bool MapObjectCellRelocation<T>(T obj, Cell new_cell) where T : WorldObject
|
||||||
{
|
{
|
||||||
Cell old_cell = c.GetCurrentCell();
|
Cell old_cell = obj.GetCurrentCell();
|
||||||
if (!old_cell.DiffGrid(new_cell)) // in same grid
|
if (!old_cell.DiffGrid(new_cell)) // in same grid
|
||||||
{
|
{
|
||||||
// if in same cell then none do
|
// if in same cell then none do
|
||||||
if (old_cell.DiffCell(new_cell))
|
if (old_cell.DiffCell(new_cell))
|
||||||
{
|
{
|
||||||
RemoveFromGrid(c, old_cell);
|
RemoveFromGrid(obj, old_cell);
|
||||||
AddToGrid(c, new_cell);
|
AddToGrid(obj, new_cell);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// in diff. grids but active creature
|
// in diff. grids but active creature
|
||||||
if (c.IsActiveObject())
|
if (obj.IsActiveObject())
|
||||||
{
|
{
|
||||||
EnsureGridLoadedForActiveObject(new_cell, c);
|
EnsureGridLoadedForActiveObject(new_cell, obj);
|
||||||
|
|
||||||
Log.outDebug(LogFilter.Maps,
|
Log.outDebug(LogFilter.Maps,
|
||||||
"Active creature (GUID: {0} Entry: {1}) moved from grid[{2}, {3}] to grid[{4}, {5}].",
|
"Active creature (GUID: {0} Entry: {1}) moved from grid[{2}, {3}] to grid[{4}, {5}].",
|
||||||
c.GetGUID().ToString(), c.GetEntry(), old_cell.GetGridX(),
|
obj.GetGUID().ToString(), obj.GetEntry(), old_cell.GetGridX(),
|
||||||
old_cell.GetGridY(), new_cell.GetGridX(), new_cell.GetGridY());
|
old_cell.GetGridY(), new_cell.GetGridX(), new_cell.GetGridY());
|
||||||
RemoveFromGrid(c, old_cell);
|
RemoveFromGrid(obj, old_cell);
|
||||||
AddToGrid(c, new_cell);
|
AddToGrid(obj, new_cell);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1457,9 +1464,9 @@ namespace Game.Maps
|
|||||||
var grid = new GridCoord(new_cell.GetGridX(), new_cell.GetGridY());
|
var grid = new GridCoord(new_cell.GetGridX(), new_cell.GetGridY());
|
||||||
if (IsGridLoaded(grid))
|
if (IsGridLoaded(grid))
|
||||||
{
|
{
|
||||||
RemoveFromGrid(c, old_cell);
|
RemoveFromGrid(obj, old_cell);
|
||||||
EnsureGridCreated(grid);
|
EnsureGridCreated(grid);
|
||||||
AddToGrid(c, new_cell);
|
AddToGrid(obj, new_cell);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1467,158 +1474,24 @@ namespace Game.Maps
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool GameObjectCellRelocation(GameObject go, Cell new_cell)
|
bool CreatureCellRelocation(Creature c, Cell new_cell)
|
||||||
{
|
{
|
||||||
Cell old_cell = go.GetCurrentCell();
|
return MapObjectCellRelocation(c, new_cell);
|
||||||
if (!old_cell.DiffGrid(new_cell)) // in same grid
|
|
||||||
{
|
|
||||||
// if in same cell then none do
|
|
||||||
if (old_cell.DiffCell(new_cell))
|
|
||||||
{
|
|
||||||
RemoveFromGrid(go, old_cell);
|
|
||||||
AddToGrid(go, new_cell);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
bool GameObjectCellRelocation(GameObject go, Cell new_cell)
|
||||||
}
|
|
||||||
|
|
||||||
// in diff. grids but active GameObject
|
|
||||||
if (go.IsActiveObject())
|
|
||||||
{
|
{
|
||||||
EnsureGridLoadedForActiveObject(new_cell, go);
|
return MapObjectCellRelocation(go, new_cell);
|
||||||
|
|
||||||
Log.outDebug(LogFilter.Maps,
|
|
||||||
"Active GameObject (GUID: {0} Entry: {1}) moved from grid[{2}, {3}] to grid[{4}, {5}].",
|
|
||||||
go.GetGUID().ToString(), go.GetEntry(), old_cell.GetGridX(), old_cell.GetGridY(), new_cell.GetGridX(),
|
|
||||||
new_cell.GetGridY());
|
|
||||||
|
|
||||||
RemoveFromGrid(go, old_cell);
|
|
||||||
AddToGrid(go, new_cell);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// in diff. loaded grid normal GameObject
|
bool DynamicObjectCellRelocation(DynamicObject go, Cell new_cell)
|
||||||
if (IsGridLoaded(new GridCoord(new_cell.GetGridX(), new_cell.GetGridY())))
|
|
||||||
{
|
{
|
||||||
Log.outDebug(LogFilter.Maps,
|
return MapObjectCellRelocation(go, new_cell);
|
||||||
"GameObject (GUID: {0} Entry: {1}) moved from grid[{2}, {3}] to grid[{4}, {5}].", go.GetGUID().ToString(),
|
|
||||||
go.GetEntry(), old_cell.GetGridX(), old_cell.GetGridY(), new_cell.GetGridX(), new_cell.GetGridY());
|
|
||||||
|
|
||||||
RemoveFromGrid(go, old_cell);
|
|
||||||
EnsureGridCreated(new GridCoord(new_cell.GetGridX(), new_cell.GetGridY()));
|
|
||||||
AddToGrid(go, new_cell);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// fail to move: normal GameObject attempt move to unloaded grid
|
|
||||||
Log.outDebug(LogFilter.Maps,
|
|
||||||
"GameObject (GUID: {0} Entry: {1}) attempted to move from grid[{2}, {3}] to unloaded grid[{4}, {5}].",
|
|
||||||
go.GetGUID().ToString(), go.GetEntry(), old_cell.GetGridX(), old_cell.GetGridY(), new_cell.GetGridX(),
|
|
||||||
new_cell.GetGridY());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool DynamicObjectCellRelocation(DynamicObject go, Cell new_cell)
|
|
||||||
{
|
|
||||||
Cell old_cell = go.GetCurrentCell();
|
|
||||||
if (!old_cell.DiffGrid(new_cell)) // in same grid
|
|
||||||
{
|
|
||||||
// if in same cell then none do
|
|
||||||
if (old_cell.DiffCell(new_cell))
|
|
||||||
{
|
|
||||||
Log.outDebug(LogFilter.Maps, "DynamicObject (GUID: {0}) moved in grid[{1}, {2}] from cell[{3}, {4}] to cell[{5}, {6}].", go.GetGUID().ToString(), old_cell.GetGridX(), old_cell.GetGridY(), old_cell.GetCellX(), old_cell.GetCellY(), new_cell.GetCellX(), new_cell.GetCellY());
|
|
||||||
|
|
||||||
RemoveFromGrid(go, old_cell);
|
|
||||||
AddToGrid(go, new_cell);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
Log.outDebug(LogFilter.Maps, "DynamicObject (GUID: {0}) moved in same {1}.", go.GetGUID().ToString(), old_cell.ToString());
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// in diff. grids but active GameObject
|
|
||||||
if (go.IsActiveObject())
|
|
||||||
{
|
|
||||||
EnsureGridLoadedForActiveObject(new_cell, go);
|
|
||||||
|
|
||||||
Log.outDebug(LogFilter.Maps, "Active DynamicObject (GUID: {0}) moved from {1} to {2}.", go.GetGUID().ToString(), old_cell.ToString(), new_cell.ToString());
|
|
||||||
|
|
||||||
RemoveFromGrid(go, old_cell);
|
|
||||||
AddToGrid(go, new_cell);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// in diff. loaded grid normal GameObject
|
|
||||||
if (IsGridLoaded(new GridCoord(new_cell.GetGridX(), new_cell.GetGridY())))
|
|
||||||
{
|
|
||||||
Log.outDebug(LogFilter.Maps, "DynamicObject (GUID: {0}) moved from {1} to {2}.", go.GetGUID().ToString(), old_cell.ToString(), new_cell.ToString());
|
|
||||||
|
|
||||||
RemoveFromGrid(go, old_cell);
|
|
||||||
EnsureGridCreated(new GridCoord(new_cell.GetGridX(), new_cell.GetGridY()));
|
|
||||||
AddToGrid(go, new_cell);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// fail to move: normal GameObject attempt move to unloaded grid
|
|
||||||
Log.outDebug(LogFilter.Maps, "DynamicObject (GUID: {0}) attempted to move from {1} to unloaded {2}.", go.GetGUID().ToString(), old_cell.ToString(), new_cell.ToString());
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AreaTriggerCellRelocation(AreaTrigger at, Cell new_cell)
|
bool AreaTriggerCellRelocation(AreaTrigger at, Cell new_cell)
|
||||||
{
|
{
|
||||||
Cell old_cell = at.GetCurrentCell();
|
return MapObjectCellRelocation(at, new_cell);
|
||||||
if (!old_cell.DiffGrid(new_cell)) // in same grid
|
|
||||||
{
|
|
||||||
// if in same cell then none do
|
|
||||||
if (old_cell.DiffCell(new_cell))
|
|
||||||
{
|
|
||||||
Log.outDebug(LogFilter.Maps, "AreaTrigger ({0}) moved in grid[{0}, {1}] from cell[{2}, {3}] to cell[{4}, {5}].", at.GetGUID().ToString(), old_cell.GetGridX(), old_cell.GetGridY(),
|
|
||||||
old_cell.GetCellX(), old_cell.GetCellY(), new_cell.GetCellX(), new_cell.GetCellY());
|
|
||||||
|
|
||||||
RemoveFromGrid(at, old_cell);
|
|
||||||
AddToGrid(at, new_cell);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Log.outDebug(LogFilter.Maps, "AreaTrigger ({0}) moved in same grid[{1}, {2}]cell[{3}, {4}].", at.GetGUID().ToString(), old_cell.GetGridX(), old_cell.GetGridY(), old_cell.GetCellX(), old_cell.GetCellY());
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// in diff. grids but active AreaTrigger
|
|
||||||
if (at.IsActiveObject())
|
|
||||||
{
|
|
||||||
EnsureGridLoadedForActiveObject(new_cell, at);
|
|
||||||
|
|
||||||
Log.outDebug(LogFilter.Maps, "Active AreaTrigger ({0}) moved from {1} to {2}.", at.GetGUID().ToString(), old_cell.ToString(), new_cell.ToString());
|
|
||||||
|
|
||||||
RemoveFromGrid(at, old_cell);
|
|
||||||
AddToGrid(at, new_cell);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// in diff. loaded grid normal AreaTrigger
|
|
||||||
if (IsGridLoaded(new GridCoord(new_cell.GetGridX(), new_cell.GetGridY())))
|
|
||||||
{
|
|
||||||
Log.outDebug(LogFilter.Maps, "AreaTrigger ({0}) moved from {1} to {2}.", at.GetGUID().ToString(), old_cell.ToString(), new_cell.ToString());
|
|
||||||
|
|
||||||
RemoveFromGrid(at, old_cell);
|
|
||||||
EnsureGridCreated(new GridCoord(new_cell.GetGridX(), new_cell.GetGridY()));
|
|
||||||
AddToGrid(at, new_cell);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// fail to move: normal AreaTrigger attempt move to unloaded grid
|
|
||||||
Log.outDebug(LogFilter.Maps, "AreaTrigger ({0}) attempted to move from {1} to unloaded {2}.", at.GetGUID().ToString(), old_cell.ToString(), new_cell.ToString());
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CreatureRespawnRelocation(Creature c, bool diffGridOnly)
|
public bool CreatureRespawnRelocation(Creature c, bool diffGridOnly)
|
||||||
@@ -2341,16 +2214,6 @@ namespace Game.Maps
|
|||||||
return Convert.ToBoolean(GetLiquidStatus(phaseShift, x, y, z, MapConst.MapLiquidTypeWater | MapConst.MapLiquidTypeOcean) & ZLiquidStatus.UnderWater);
|
return Convert.ToBoolean(GetLiquidStatus(phaseShift, x, y, z, MapConst.MapLiquidTypeWater | MapConst.MapLiquidTypeOcean) & ZLiquidStatus.UnderWater);
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool CheckGridIntegrity(Creature c, bool moved)
|
|
||||||
{
|
|
||||||
Cell cur_cell = c.GetCurrentCell();
|
|
||||||
var xy_cell = new Cell(c.GetPositionX(), c.GetPositionY());
|
|
||||||
if (xy_cell != cur_cell)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string GetMapName()
|
public string GetMapName()
|
||||||
{
|
{
|
||||||
return i_mapRecord != null ? i_mapRecord.MapName[Global.WorldMgr.GetDefaultDbcLocale()] : "UNNAMEDMAP";
|
return i_mapRecord != null ? i_mapRecord.MapName[Global.WorldMgr.GetDefaultDbcLocale()] : "UNNAMEDMAP";
|
||||||
|
|||||||
Reference in New Issue
Block a user