示例#1
0
        public void SetTileType(uint x, uint y, ushort tileType, bool sendEvent)
        {
            ushort regionId = regionLocator.GetRegionIndex(x, y);

            lock (RegionChanges)
            {
                IRegion region = GetRegion(x, y);

                long idx = (regionLocator.GetTileIndex(x, y) * Region.TILE_SIZE) + (Region.TILE_SIZE * RegionSize * regionId);
                RegionChanges.Seek(idx, SeekOrigin.Begin);
                RegionChanges.Write(BitConverter.GetBytes(tileType), 0, 2);
                RegionChanges.Flush();

                region.SetTileType(x, y, tileType);
            }

            if (sendEvent && Global.Current.FireEvents)
            {
                var packet = new Packet(Command.RegionSetTile);
                packet.AddUInt16(1);
                packet.AddUInt32(x);
                packet.AddUInt32(y);
                packet.AddUInt16(tileType);

                channel.Post("/WORLD/" + regionId, packet);
            }
        }
示例#2
0
 public void Unload()
 {
     RegionChanges.Close();
 }