This commit is contained in:
mark 2010-12-06 06:45:45 +00:00
parent 34d969712e
commit d444b9ba5c
70 changed files with 569 additions and 495 deletions

View file

@ -97,7 +97,7 @@ namespace Server.Multis
int tileX = start.X + x;
int tileY = start.Y + y;
Tile[] addTiles = mcl.Tiles[x][y];
StaticTile[] addTiles = mcl.Tiles[x][y];
if ( addTiles.Length == 0 )
continue; // There are no tiles here, continue checking somewhere else
@ -117,10 +117,10 @@ namespace Server.Multis
return HousePlacementResult.BadRegion;
}
Tile landTile = map.Tiles.GetLandTile( tileX, tileY );
int landID = landTile.ID & 0x3FFF;
LandTile landTile = map.Tiles.GetLandTile( tileX, tileY );
int landID = landTile.ID & TileData.MaxLandValue;
Tile[] oldTiles = map.Tiles.GetStaticTiles( tileX, tileY, true );
StaticTile[] oldTiles = map.Tiles.GetStaticTiles( tileX, tileY, true );
Sector sector = map.GetSector( tileX, tileY );
@ -152,12 +152,12 @@ namespace Server.Multis
for ( int i = 0; i < addTiles.Length; ++i )
{
Tile addTile = addTiles[i];
StaticTile addTile = addTiles[i];
if ( addTile.ID == 0x4001 ) // Nodraw
if ( addTile.ID == 0x1 ) // Nodraw
continue;
TileFlag addTileFlags = TileData.ItemTable[addTile.ID & 0x3FFF].Flags;
TileFlag addTileFlags = TileData.ItemTable[addTile.ID & TileData.MaxItemValue].Flags;
bool isFoundation = ( addTile.Z == 0 && (addTileFlags & TileFlag.Wall) != 0 );
bool hasSurface = false;
@ -174,13 +174,13 @@ namespace Server.Multis
if ( addTileTop > landStartZ && landAvgZ > addTileZ )
return HousePlacementResult.BadLand; // Broke rule #2
if ( isFoundation && ((TileData.LandTable[landTile.ID & 0x3FFF].Flags & TileFlag.Impassable) == 0) && landAvgZ == center.Z )
if ( isFoundation && ((TileData.LandTable[landTile.ID & TileData.MaxLandValue].Flags & TileFlag.Impassable) == 0) && landAvgZ == center.Z )
hasSurface = true;
for ( int j = 0; j < oldTiles.Length; ++j )
{
Tile oldTile = oldTiles[j];
ItemData id = TileData.ItemTable[oldTile.ID & 0x3FFF];
StaticTile oldTile = oldTiles[j];
ItemData id = TileData.ItemTable[oldTile.ID & TileData.MaxItemValue];
if ( (id.Impassable || (id.Surface && (id.Flags & TileFlag.Background) == 0)) && addTileTop > oldTile.Z && (oldTile.Z + id.CalcHeight) > addTileZ )
return HousePlacementResult.BadStatic; // Broke rule #2
@ -251,14 +251,14 @@ namespace Server.Multis
if ( vx >= 0 && vx < mcl.Width && vy >= 0 && vy < mcl.Height )
{
Tile[] breakTiles = mcl.Tiles[vx][vy];
StaticTile[] breakTiles = mcl.Tiles[vx][vy];
bool shouldBreak = false;
for ( int i = 0; !shouldBreak && i < breakTiles.Length; ++i )
{
Tile breakTile = breakTiles[i];
StaticTile breakTile = breakTiles[i];
if ( breakTile.Height == 0 && breakTile.Z <= 8 && TileData.ItemTable[breakTile.ID & 0x3FFF].Surface )
if ( breakTile.Height == 0 && breakTile.Z <= 8 && TileData.ItemTable[breakTile.ID & TileData.MaxItemValue].Surface )
shouldBreak = true;
}
@ -280,8 +280,8 @@ namespace Server.Multis
{
Point2D borderPoint = borders[i];
Tile landTile = map.Tiles.GetLandTile( borderPoint.X, borderPoint.Y );
int landID = landTile.ID & 0x3FFF;
LandTile landTile = map.Tiles.GetLandTile( borderPoint.X, borderPoint.Y );
int landID = landTile.ID & TileData.MaxLandValue;
if ( (TileData.LandTable[landID].Flags & TileFlag.Impassable) != 0 )
return HousePlacementResult.BadLand;
@ -292,12 +292,12 @@ namespace Server.Multis
return HousePlacementResult.BadLand; // Broke rule #5
}
Tile[] tiles = map.Tiles.GetStaticTiles( borderPoint.X, borderPoint.Y, true );
StaticTile[] tiles = map.Tiles.GetStaticTiles( borderPoint.X, borderPoint.Y, true );
for ( int j = 0; j < tiles.Length; ++j )
{
Tile tile = tiles[j];
ItemData id = TileData.ItemTable[tile.ID & 0x3FFF];
StaticTile tile = tiles[j];
ItemData id = TileData.ItemTable[tile.ID & TileData.MaxItemValue];
if ( id.Impassable || (id.Surface && (id.Flags & TileFlag.Background) == 0 && (tile.Z + id.CalcHeight) > (center.Z + 2)) )
return HousePlacementResult.BadStatic; // Broke rule #1
@ -353,11 +353,11 @@ namespace Server.Multis
IPooledEnumerable eable = map.GetMultiTilesAt( yardPoint.X, yardPoint.Y );
foreach ( Tile[] tile in eable )
foreach ( StaticTile[] tile in eable )
{
for ( int j = 0; j < tile.Length; ++j )
{
if ( (TileData.ItemTable[tile[j].ID & 0x3FFF].Flags & (TileFlag.Impassable | TileFlag.Surface)) != 0 )
if ( (TileData.ItemTable[tile[j].ID & TileData.MaxItemValue].Flags & (TileFlag.Impassable | TileFlag.Surface)) != 0 )
{
eable.Free();
return HousePlacementResult.BadStatic; // Broke rule #3