public HItem(IHFormat format, ref ReadOnlySpan <byte> packetSpan) { RoomItemId = format.Read <int>(ref packetSpan); Type = (HProductType)format.ReadUTF8(ref packetSpan)[0]; Id = format.Read <int>(ref packetSpan); TypeId = format.Read <int>(ref packetSpan); Category = (HFurniCategory)format.Read <int>(ref packetSpan); StuffData = HStuffData.Parse(format, ref packetSpan); IsRecyclable = format.Read <bool>(ref packetSpan); IsTradable = format.Read <bool>(ref packetSpan); IsGroupable = format.Read <bool>(ref packetSpan); IsSellable = format.Read <bool>(ref packetSpan); CanPlaceInMarketplace = format.Read <bool>(ref packetSpan); SecondsToExpiration = format.Read <int>(ref packetSpan); HasRentPeriodStarted = format.Read <bool>(ref packetSpan); RoomId = format.Read <int>(ref packetSpan); if (Type == HProductType.Stuff) { SlotId = format.ReadUTF8(ref packetSpan); Extra = format.Read <int>(ref packetSpan); } }
public HFloorObject(IHFormat format, ref ReadOnlySpan <byte> packetSpan) { Id = format.Read <int>(ref packetSpan); TypeId = format.Read <int>(ref packetSpan); int x = format.Read <int>(ref packetSpan); int y = format.Read <int>(ref packetSpan); Facing = (HDirection)format.Read <int>(ref packetSpan); Tile = new HPoint(x, y, float.Parse(format.ReadUTF8(ref packetSpan), CultureInfo.InvariantCulture)); Height = double.Parse(format.ReadUTF8(ref packetSpan), CultureInfo.InvariantCulture); Extra = format.Read <int>(ref packetSpan); StuffData = HStuffData.Parse(format, ref packetSpan); SecondsToExpiration = format.Read <int>(ref packetSpan); UsagePolicy = (HUsagePolicy)format.Read <int>(ref packetSpan); OwnerId = format.Read <int>(ref packetSpan); if (TypeId < 0) { StaticClass = format.ReadUTF8(ref packetSpan); } }
public static HStuffData Parse(IHFormat format, ref ReadOnlySpan <byte> packetSpan) { int value = format.Read <int>(ref packetSpan); HStuffData stuffData = (HStuffDataFormat)(value & 0xFF) switch { HStuffDataFormat.Legacy => new HLegacyStuffData(format, ref packetSpan), HStuffDataFormat.Map => new HMapStuffData(format, ref packetSpan), HStuffDataFormat.StringArray => new HStringArrayStuffData(format, ref packetSpan), HStuffDataFormat.VoteResult => new HVoteResultStuffData(format, ref packetSpan), HStuffDataFormat.Empty => new HStuffData(), HStuffDataFormat.IntArray => new HIntArrayStuffData(format, ref packetSpan), HStuffDataFormat.HighScore => new HHighScoreStuffData(format, ref packetSpan), HStuffDataFormat.Crackable => new HCrackableStuffData(format, ref packetSpan), _ => throw new NotImplementedException((value & 0xFF).ToString()), }; stuffData.Flags = (HStuffDataFlags)(value & 0xFF00); if (stuffData.Flags.HasFlag(HStuffDataFlags.HasUniqueSerialNumber)) { stuffData.UniqueSerialNumber = format.Read <int>(ref packetSpan); stuffData.UniqueSeriesSize = format.Read <int>(ref packetSpan); } return(stuffData); }