Example #1
0
    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);
        }
    }
Example #2
0
    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);
        }
    }
Example #3
0
    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);
    }