private void ParseServerFloorDescription(InMessage message, List <Tile> tiles, int x, int y, int z, int width, int height, int offset, ref int skipTiles) { for (int nx = 0; nx < width; nx++) { for (int ny = 0; ny < height; ny++) { if (skipTiles == 0) { var tileOpt = message.PeekUShort(); // Decide if we have to skip tiles // or if it is a real tile if (tileOpt >= 0xFF00) { skipTiles = (short)(message.ReadUShort() & 0xFF); } else { //real tile so read tile tiles.Add(ParseServerTileDescription(message, new Location(x + nx + offset, y + ny + offset, z))); skipTiles = (short)(message.ReadUShort() & 0xFF); } } else { skipTiles--; } } } }
private Tile ParseServerTileDescription(InMessage message, Location location) { Tile tile = new Tile(location); if (message.PeekUShort() < 0xFF00) { message.ReadUShort(); } while (message.PeekUShort() < 0xFF00) { tile.AddThing(GetThing(message)); } client.Map.SetTile(tile); return(tile); }
private void ParseServerUpdateTile(InMessage message) { Location location = message.ReadLocation(); var thingId = message.PeekUShort(); if (thingId == 0xFF01) { message.ReadUShort(); Tile tile = client.Map.GetTile(location); if (tile == null) { throw new Exception("[ParseServerUpdateTile] Tile not found."); } tile.Clear(); } else { ParseServerTileDescription(message, location); message.ReadUShort(); } }
private void ParseServerFloorDescription(InMessage message, List<Tile> tiles, int x, int y, int z, int width, int height, int offset, ref int skipTiles) { for (int nx = 0; nx < width; nx++) { for (int ny = 0; ny < height; ny++) { if (skipTiles == 0) { var tileOpt = message.PeekUShort(); // Decide if we have to skip tiles // or if it is a real tile if (tileOpt >= 0xFF00) skipTiles = (short)(message.ReadUShort() & 0xFF); else { //real tile so read tile tiles.Add(ParseServerTileDescription(message, new Location(x + nx + offset, y + ny + offset, z))); skipTiles = (short)(message.ReadUShort() & 0xFF); } } else skipTiles--; } } }
private void ParseServerUpdateTile(InMessage message) { Location location = message.ReadLocation(); var thingId = message.PeekUShort(); if (thingId == 0xFF01) { message.ReadUShort(); Tile tile = client.Map.GetTile(location); if (tile == null) throw new Exception("[ParseServerUpdateTile] Tile not found."); tile.Clear(); } else { ParseServerTileDescription(message, location); message.ReadUShort(); } }
private Tile ParseServerTileDescription(InMessage message, Location location) { Tile tile = new Tile(location); if (message.PeekUShort() < 0xFF00) message.ReadUShort(); while (message.PeekUShort() < 0xFF00) tile.AddThing(GetThing(message)); client.Map.SetTile(tile); return tile; }