コード例 #1
0
ファイル: MobileStam_A3.cs プロジェクト: Ben1028/SpyUO
 protected override void Parse(BigEndianReader reader)
 {
     reader.ReadByte(); // ID
     _Serial = reader.ReadUInt32();
     _MaxStamina = reader.ReadInt16();
     _Stamina = reader.ReadInt16();
 }
コード例 #2
0
ファイル: MapChange_BF08.cs プロジェクト: Ben1028/SpyUO
        protected override void Parse( BigEndianReader reader )
        {
            reader.ReadByte(); // ID
            reader.ReadInt16(); // Size
            reader.ReadInt16(); // Command

            _MapID = (MapNames) reader.ReadByte();
        }
コード例 #3
0
ファイル: MobileHits_A1.cs プロジェクト: Ben1028/SpyUO
        protected override void Parse(BigEndianReader reader)
        {
            reader.ReadByte(); // ID

            _Serial = reader.ReadUInt32();
            _MaxHitpoints = reader.ReadInt16();
            _Hitpoints = reader.ReadInt16();
        }
コード例 #4
0
ファイル: UnknownPacket_BF24.cs プロジェクト: Ben1028/SpyUO
        protected override void Parse( BigEndianReader reader )
        {
            reader.ReadByte(); // ID
            reader.ReadInt16(); // Size
            reader.ReadInt16(); // Command

            _WTF = reader.ReadByte();
        }
コード例 #5
0
ファイル: MobileAnimation.cs プロジェクト: greeduomacro/SpyUO
        protected override void Parse( BigEndianReader reader )
        {
            reader.ReadByte(); // ID

            _Serial = reader.ReadUInt32();
            _AnimationType = (AnimationType) reader.ReadInt16();
            _Action = reader.ReadInt16();
            _Delay = reader.ReadByte();
        }
コード例 #6
0
ファイル: CloseGump_BF04.cs プロジェクト: Ben1028/SpyUO
        protected override void Parse( BigEndianReader reader )
        {
            reader.ReadByte(); // ID
            reader.ReadInt16(); // Size
            reader.ReadInt16(); // Command

            _GumpID = reader.ReadUInt32();
            _ButtonID = reader.ReadUInt32();
        }
コード例 #7
0
        protected override void Parse( BigEndianReader reader )
        {
            reader.ReadByte();
            reader.ReadInt16();

            _Serial = reader.ReadUInt32();
            reader.ReadInt16();
            _Status = reader.ReadInt16();
            _Flag = reader.ReadByte();
        }
コード例 #8
0
ファイル: PlaySound_54.cs プロジェクト: Ben1028/SpyUO
        protected override void Parse( BigEndianReader reader )
        {
            reader.ReadByte(); // ID

            _Flags = reader.ReadByte();
            _SoundID = reader.ReadInt16();
            _Volume = reader.ReadInt16();
            _X = reader.ReadInt16();
            _Y = reader.ReadInt16();
            _Z = reader.ReadInt16();
        }
コード例 #9
0
        protected override void Parse(BigEndianReader reader)
        {
            reader.ReadByte(); // ID
            reader.ReadInt16(); // Size
            reader.ReadInt16(); // Command

            _Serial = reader.ReadUInt32();
            _FacingDirection = (Direction)reader.ReadByte();
            _MovingDirection = (Direction)reader.ReadByte();
            _BoatCommand = (BoatCommand)reader.ReadByte();
        }
コード例 #10
0
ファイル: EquipUpdate_2E.cs プロジェクト: Ben1028/SpyUO
        protected override void Parse(BigEndianReader reader)
        {
            reader.ReadByte(); // ID

            _Serial = reader.ReadUInt32();
            _ObjectID = reader.ReadInt16();
            reader.ReadByte(); //0x00
            _Layer = (ItemLayer)reader.ReadByte();
            _ParentSerial = reader.ReadUInt32();
            _Hue = reader.ReadInt16();
        }
コード例 #11
0
ファイル: Animation_6E.cs プロジェクト: Ben1028/SpyUO
        protected override void Parse( BigEndianReader reader )
        {
            reader.ReadByte(); // ID

            _Serial = reader.ReadUInt32();
            _Action = reader.ReadInt16();
            _FrameCount = reader.ReadInt16();
            _RepeatTimes = reader.ReadInt16();
            _Forward = reader.ReadByte();
            _Repeat = reader.ReadByte();
            _Delay = reader.ReadByte();
        }
コード例 #12
0
        protected override void Parse( BigEndianReader reader )
        {
            reader.ReadByte(); // ID
            _Serial = reader.ReadUInt32();
            _GumpID = reader.ReadInt16();

            int type = reader.ReadInt16();

            if ( type == 0 )
                _ContainerType = ContainerType.Vendor;
            else
                _ContainerType = ContainerType.ContainerOrSpellbook;
        }
コード例 #13
0
ファイル: UnicodeMessage.cs プロジェクト: greeduomacro/SpyUO
 protected override void Parse( BigEndianReader reader )
 {
     reader.ReadByte(); // ID
     reader.ReadInt16();
     _Serial = reader.ReadUInt32();
     _Graphics = reader.ReadInt16();
     _Type = (MessageType) reader.ReadByte();
     _Hue = reader.ReadInt16();
     _Font = reader.ReadInt16();
     _Language = reader.ReadAsciiString( 4 );
     _EntityName = reader.ReadAsciiString( 30 );
     _Message = reader.ReadUnicodeString( ( Data.Length - 44 ) / 2 );
 }
コード例 #14
0
 public ContainerItem( UltimaPacket parent, BigEndianReader reader )
 {
     _Parent = parent;
     _Serial = reader.ReadUInt32();
     _ItemID = reader.ReadInt16();
     _ItemIDOffset = reader.ReadByte();
     _Amount = reader.ReadInt16();
     _X = reader.ReadInt16();
     _Y = reader.ReadInt16();
     _GridLocation = reader.ReadByte();
     _ParentSerial = reader.ReadUInt32();
     _Hue = reader.ReadInt16();
 }
コード例 #15
0
ファイル: AsciiMessage_1C.cs プロジェクト: Ben1028/SpyUO
        protected override void Parse( BigEndianReader reader )
        {
            reader.ReadByte(); // ID

            int length = reader.ReadInt16() - 44;

            _Serial = reader.ReadUInt32();
            _Graphics = reader.ReadInt16();
            _Type = (MessageType) reader.ReadByte();
            _Hue = reader.ReadInt16();
            _Font = reader.ReadInt16();
            _EntityName = reader.ReadAsciiString( 30 );
            _Message = reader.ReadAsciiString( length );
        }
コード例 #16
0
        protected override void Parse( BigEndianReader reader )
        {
            reader.ReadByte(); // ID
            reader.ReadInt16(); // Size

            int count = reader.ReadInt16();
            _Items = new List<ContainerItem>();

            for ( int i = 0; i < count; i++ )
            {
                _Items.Add( new ContainerItem( this, reader ) );
                _Serial = _Items[ 0 ].ParentSerial;
            }
        }
コード例 #17
0
ファイル: Damage_0B.cs プロジェクト: Ben1028/SpyUO
        protected override void Parse( BigEndianReader reader )
        {
            reader.ReadByte(); // ID

            _Serial = reader.ReadUInt32();
            _Damage = reader.ReadInt16();
        }
コード例 #18
0
ファイル: MobileName_98.cs プロジェクト: Ben1028/SpyUO
        protected override void Parse( BigEndianReader reader )
        {
            reader.ReadByte(); // ID
            reader.ReadInt16(); // Size

            _Serial = reader.ReadUInt32();
            _MobileName = reader.ReadAsciiString( 30 );
        }
コード例 #19
0
        /// <summary>
        /// Creates <see cref="TtfFileInfo"/> from <see cref="System.IO.Stream"/>.
        /// </summary>
        /// <param name="stream">Stream to create the structure. Stream will be disposed after use.</param>
        /// <returns><see cref="TtfFileInfo"/> if successful, otherwise null.</returns>
        public static TtfFileInfo FromStream(Stream stream)
        {
            try
            {
                using (var reader = new BigEndianReader(stream))
                {
                    var ttfFile = new TtfFileInfo()
                    {
                        Version = reader.ReadInt32()
                    };

                    if (ttfFile.Version != 0x74727565 && ttfFile.Version != 0x00010000) return null;

                    ttfFile.TableCount = reader.ReadInt16();
                    reader.BaseStream.Seek(6, SeekOrigin.Current);

                    for (var tableIndex = 0; tableIndex < ttfFile.TableCount; tableIndex++)
                    {
                        var tag = reader.ReadInt32();
                        reader.BaseStream.Seek(4, SeekOrigin.Current);
                        var offset = reader.ReadInt32();
                        var length = reader.ReadInt32();

                        if (tag != 0x6E616D65) continue;

                        reader.BaseStream.Seek(offset, SeekOrigin.Begin);

                        var table = reader.ReadBytes(length);

                        var count = GetInt16(table, 2);
                        var stringOffset = GetInt16(table, 4);

                        for (var record = 0; record < count; record++)
                        {
                            var nameidOffset = record*12 + 6;
                            var platformId = GetInt16(table, nameidOffset);
                            var nameidValue = GetInt16(table, nameidOffset + 6);

                            if (nameidValue != 4 || platformId != 1) continue;

                            var nameLength = GetInt16(table, nameidOffset + 8);
                            var nameOffset = stringOffset + GetInt16(table, nameidOffset + 10);

                            if (nameOffset < 0 || nameOffset + nameLength >= table.Length) continue;

                            ttfFile.FontName = Encoding.UTF8.GetString(table, nameOffset, nameLength);
                            return ttfFile;
                        }
                    }
                }
            }
            catch
            {
                return null;
            }

            return null;
        }
コード例 #20
0
ファイル: ShopList.cs プロジェクト: greeduomacro/SpyUO
        protected override void Parse( BigEndianReader reader )
        {
            reader.ReadByte(); // ID
            reader.ReadInt16(); // Size

            _Serial = reader.ReadUInt32();

            int itemCount = reader.ReadByte();
            _Items = new List<ShopListItem>();

            for ( int i = 0; i < itemCount; i++ )
                _Items.Add( new ShopListItem( reader ) );
        }
コード例 #21
0
        protected override void Parse( BigEndianReader reader )
        {
            reader.ReadByte(); // ID
            reader.ReadInt16(); // Size

            _Items = new List<QueryPropertiesItem>();
            uint serial = 0;
            int maxCount = ( Data.Length - 3 ) / 4;
            int count = 0;

            while ( count++ < maxCount && ( serial = reader.ReadUInt32() ) != 0 )
                _Items.Add( new QueryPropertiesItem( this, serial ) );
        }
コード例 #22
0
ファイル: GenericGump_B0.cs プロジェクト: Ben1028/SpyUO
        protected override void Parse( BigEndianReader reader )
        {
            reader.ReadByte(); // ID
            reader.ReadInt16(); // Size

            _Serial = reader.ReadUInt32();
            _GumpID = reader.ReadInt32();
            _X = reader.ReadInt32();
            _Y = reader.ReadInt32();

            string layout = reader.ReadAsciiString();

            int textLength = reader.ReadInt16();
            _Text = new List<string>( textLength );

            for ( int i = 0; i < textLength; i++ )
            {
                _Text.Add( reader.ReadAsciiString() );
            }

            Parse( layout );
        }
コード例 #23
0
        protected override void Parse(BigEndianReader reader)
        {
            reader.ReadByte();             // ID
            reader.ReadInt16();            // Size

            _Items = new List <QueryPropertiesItem>();
            uint serial   = 0;
            int  maxCount = (Data.Length - 3) / 4;
            int  count    = 0;

            while (count++ < maxCount && (serial = reader.ReadUInt32()) != 0)
            {
                _Items.Add(new QueryPropertiesItem(this, serial));
            }
        }
コード例 #24
0
ファイル: CompressedGump.cs プロジェクト: greeduomacro/SpyUO
        protected override void Parse( BigEndianReader reader )
        {
            reader.ReadByte(); // ID
            reader.ReadInt16(); // Size

            _Serial = reader.ReadUInt32();
            _GumpID = reader.ReadInt32();
            _X = reader.ReadInt32();
            _Y = reader.ReadInt32();

            int compressedEntriesLength = reader.ReadInt32() - 4;
            int decompressedEntriesLength = reader.ReadInt32();

            byte[] compressedEntries = reader.ReadBytes( compressedEntriesLength );
            byte[] decompressedEntries = new byte[ decompressedEntriesLength ];

            Ultima.Package.Zlib.Decompress( decompressedEntries, ref decompressedEntriesLength, compressedEntries, compressedEntriesLength );
            string entries = Encoding.ASCII.GetString( decompressedEntries );

            int lineCount = reader.ReadInt32();
            int compressedStringsLength = reader.ReadInt32() - 4;
            int decompressedStringsLength = reader.ReadInt32();

            byte[] compressedStrings = reader.ReadBytes( compressedStringsLength );
            byte[] decompressedStrings = new byte[ decompressedStringsLength ];

            Ultima.Package.Zlib.Decompress( decompressedStrings, ref decompressedStringsLength, compressedStrings, compressedStringsLength );
            string strings = Encoding.ASCII.GetString( decompressedStrings );

            _Text = new List<string>();

            int start = 0;

            for ( int i = 0; i < strings.Length; i++ )
            {
                if ( strings[ i ] == 0 )
                {
                    if ( i - start > 0 )
                        _Text.Add( strings.Substring( start, i - start ) );
                    else
                        _Text.Add( String.Empty );

                    start = i + 1;
                }
            }

            Parse( entries );
        }
コード例 #25
0
ファイル: ShopList.cs プロジェクト: mbnunes/SpyUO
        protected override void Parse(BigEndianReader reader)
        {
            reader.ReadByte();             // ID
            reader.ReadInt16();            // Size

            _Serial = reader.ReadUInt32();

            int itemCount = reader.ReadByte();

            _Items = new List <ShopListItem>();

            for (int i = 0; i < itemCount; i++)
            {
                _Items.Add(new ShopListItem(reader));
            }
        }
コード例 #26
0
        protected override void Parse(BigEndianReader reader)
        {
            reader.ReadByte();             // ID
            reader.ReadInt16();            // Size place holder

            _DataType       = (WorldObjectType)reader.ReadByte();
            _Serial         = reader.ReadUInt32();
            _ObjectID       = reader.ReadInt16();
            _ObjectIDOffset = reader.ReadByte();
            _Amount         = reader.ReadInt16();

            reader.ReadInt16();             // Amount again?

            _X          = reader.ReadInt16();
            _Y          = reader.ReadInt16();
            _Z          = reader.ReadSByte();
            _LightLevel = reader.ReadByte();
            _Hue        = reader.ReadInt16();

            byte flags = reader.ReadByte();

            if ((flags & 0x20) > 0)
            {
                _HasProperties = true;
            }
            else
            {
                _HasProperties = false;
            }

            if ((flags & 0x80) > 0)
            {
                _IsVisible = true;
            }
            else
            {
                _IsVisible = false;
            }

            _Access = (WorldObjectAccess)reader.ReadInt16();
        }
コード例 #27
0
ファイル: GumpResponse.cs プロジェクト: greeduomacro/SpyUO
        protected override void Parse( BigEndianReader reader )
        {
            reader.ReadByte(); // ID
            reader.ReadInt16(); // Size

            _Serial = reader.ReadUInt32();
            _GumpID = reader.ReadInt32();
            _ButtonID = reader.ReadInt32();

            int switchCount = reader.ReadInt32();
            _Switches = new List<int>( switchCount );

            for ( int i = 0; i < switchCount; i++ )
                _Switches.Add( reader.ReadInt32() );

            int entryCount = reader.ReadInt32();
            _TextEntries = new List<GumpResponseTextEntry>( entryCount );

            for ( int i = 0; i < entryCount; i++ )
                _TextEntries.Add( new GumpResponseTextEntry( reader ) );
        }
コード例 #28
0
 protected override void Parse(BigEndianReader reader)
 {
     reader.ReadByte();             // ID
     _Unk1       = reader.ReadUInt32();
     _Unk2       = reader.ReadUInt32();
     _Unk3       = reader.ReadByte();
     _CharName   = reader.ReadAsciiString(30);
     _Unk4       = reader.ReadInt16();
     _Flags      = reader.ReadUInt32();
     _Unk5       = reader.ReadUInt32();
     _LoginCount = reader.ReadUInt32();
     _Profession = reader.ReadByte();
     reader.ReadBytes(15);
     _GenderAndRace = reader.ReadByte();
     _Strength      = reader.ReadByte();
     _Dexterity     = reader.ReadByte();
     _Intelligence  = reader.ReadByte();
     _Skill1        = reader.ReadByte();
     _Skill1Amount  = reader.ReadByte();
     _Skill2        = reader.ReadByte();
     _Skill2Amount  = reader.ReadByte();
     _Skill3        = reader.ReadByte();
     _Skill3Amount  = reader.ReadByte();
     _Skill4        = reader.ReadByte();
     _Skill4Amount  = reader.ReadByte();
     _SkinHue       = reader.ReadInt16();
     _HairStyle     = reader.ReadInt16();
     _HairHue       = reader.ReadInt16();
     _BeardStyle    = reader.ReadInt16();
     _BeardHue      = reader.ReadInt16();
     _ShardIndex    = reader.ReadByte();
     _StartingCity  = reader.ReadByte();
     _CharSlot      = reader.ReadUInt32();
     _ClientIP      = reader.ReadUInt32();
     _ShirtHue      = reader.ReadInt16();
     _PantsHue      = reader.ReadInt16();
 }
コード例 #29
0
        protected override void Parse(BigEndianReader reader)
        {
            reader.ReadByte();             // ID

            Type     = (GraphicalEffectType)reader.ReadByte();
            Source   = reader.ReadUInt32();
            Serial   = reader.ReadUInt32();
            ObjectID = reader.ReadInt16();
            SourceX  = reader.ReadInt16();
            SourceY  = reader.ReadInt16();
            SourceZ  = reader.ReadSByte();
            TargetX  = reader.ReadInt16();
            TargetY  = reader.ReadInt16();
            TargetZ  = reader.ReadSByte();
            Speed    = reader.ReadByte();
            Duration = reader.ReadByte();
            reader.ReadInt16();
            reader.ReadInt16();
            FixedDirection = reader.ReadBoolean();
            Explode        = reader.ReadBoolean();
        }
コード例 #30
0
        private TrueTypeFontTable ReadFontHeader(uint length, TrueTypeTableEntryList list, BigEndianReader reader)
        {
            FontHeader fh = new FontHeader(reader.Position);

            fh.TableVersion       = reader.ReadFixedVersion();
            fh.FontRevision       = reader.ReadFixedVersion();
            fh.ChecksumAdjustment = reader.ReadUInt32();
            fh.MagicNumber        = reader.ReadUInt32();
            fh.FontFlags          = (FontHeaderFlags)reader.ReadUInt16();
            fh.UnitsPerEm         = reader.ReadUInt16();
            fh.Created            = reader.ReadDateTime();
            fh.Modified           = reader.ReadDateTime();
            fh.XMin                  = reader.ReadInt16();
            fh.YMin                  = reader.ReadInt16();
            fh.XMax                  = reader.ReadInt16();
            fh.YMax                  = reader.ReadInt16();
            fh.MacStyle              = (FontStyleFlags)reader.ReadUInt16();
            fh.SmallestScreenFont    = reader.ReadUInt16();
            fh.DirectionHints        = (FontDirectionFlags)reader.ReadInt16();
            fh.IndexToLocationFormat = (FontIndexLocationFormat)reader.ReadInt16();
            fh.GlyphDataFormat       = (GlyphDataFormat)reader.ReadInt16();
            return(fh);
        }
コード例 #31
0
ファイル: MobileStatus.cs プロジェクト: greeduomacro/SpyUO
        protected override void Parse( BigEndianReader reader )
        {
            reader.ReadByte(); // ID
            reader.ReadInt16(); // Size

            _Serial = reader.ReadUInt32();
            _MobileName = reader.ReadAsciiString( 30 );

            _HitPoints = reader.ReadInt16();
            _MaxHitPoints = reader.ReadInt16();
            _AllowNameChange = reader.ReadByte() == 1 ? true : false;
            byte features = reader.ReadByte();
            _IsFemale = reader.ReadByte() == 1 ? true : false;
            _Strength = reader.ReadInt16();
            _Dexterity = reader.ReadInt16();
            _Intelligence = reader.ReadInt16();
            _Stamina = reader.ReadInt16();
            _MaxStamina = reader.ReadInt16();
            _Mana = reader.ReadInt16();
            _MaxMana = reader.ReadInt16();
            _Gold = reader.ReadInt32();
            _ArmorRating = reader.ReadInt16();
            _Weight = reader.ReadInt16();

            if ( ( features & 0x5 ) == 0x5 )
            {
                _MaxWeight = reader.ReadInt16();
                _Race = (MobileRace) reader.ReadByte();
            }

            if ( ( features & 0x2 ) == 0x2 )
            {
                _StatCap = reader.ReadInt16();
            }

            if ( ( features & 0x3 ) == 0x3 )
            {
                _Followers = reader.ReadByte();
                _MaxFollowers = reader.ReadByte();
            }

            if ( ( features & 0x4 ) == 0x4 )
            {
                _FireResistance = reader.ReadInt16();
                _ColdResistance = reader.ReadInt16();
                _PoisonResistance = reader.ReadInt16();
                _EnergyResistance = reader.ReadInt16();
                _Luck = reader.ReadInt16();
                _MinWeaponDamage = reader.ReadInt16();
                _MaxWeaponDamage = reader.ReadInt16();
                _TithingPoints = reader.ReadInt32();
            }

            if ( ( features & 0x6 ) == 0x6 )
            {
                _HitChanceIncrease = reader.ReadInt16();
                _SwingSpeedIncrease = reader.ReadInt16();
                _DamageChanceIncrease = reader.ReadInt16();
                _LowerReagentCost = reader.ReadInt16();
                _HitPointRegeneration = reader.ReadInt16();
                _StaminaRegeneration = reader.ReadInt16();
                _ManaRegeneration = reader.ReadInt16();
                _ReflectPhysicalDamage = reader.ReadInt16();
                _EnhancePotions = reader.ReadInt16();
                _DefenseChanceIncrease = reader.ReadInt16();
                _SpellDamageIncrease = reader.ReadInt16();
                _FasterCastRecovery = reader.ReadInt16();
                _FasterCasting = reader.ReadInt16();
                _LowerManaCost = reader.ReadInt16();
                _StrengthIncrease = reader.ReadInt16();
                _DexterityIncrease = reader.ReadInt16();
                _IntelligenceIncrease = reader.ReadInt16();
                _HitPointsIncrease = reader.ReadInt16();
                _StaminaIncrease = reader.ReadInt16();
                _ManaIncrease = reader.ReadInt16();
                _MaximumHitPointsIncrease = reader.ReadInt16();
                _MaximumStaminaIncrease = reader.ReadInt16();
                _MaximumManaIncrease = reader.ReadInt16();
            }
        }
コード例 #32
0
ファイル: HuedEffect.cs プロジェクト: deccer/SpyUO
        protected override void Parse(BigEndianReader reader)
        {
            reader.ReadByte();             // ID

            Type     = (HuedEffectType)reader.ReadByte();
            Source   = reader.ReadUInt32();
            Serial   = reader.ReadUInt32();
            ObjectID = reader.ReadInt16();
            SourceX  = reader.ReadInt16();
            SourceY  = reader.ReadInt16();
            SourceZ  = reader.ReadSByte();
            TargetX  = reader.ReadInt16();
            TargetY  = reader.ReadInt16();
            TargetZ  = reader.ReadSByte();
            Speed    = reader.ReadByte();
            Duration = reader.ReadByte();
            reader.ReadInt16();
            reader.ReadInt16();
            FixedDirection = reader.ReadBoolean();
            Explode        = reader.ReadBoolean();
            Hue            = reader.ReadInt16();
            RenderMode     = reader.ReadInt16();
            Effect         = reader.ReadInt16();
            ExplodeEffect  = reader.ReadInt16();
            ExplodeSound   = reader.ReadInt16();
            reader.ReadUInt32();
            Layer = (EffectLayer)reader.ReadByte();
        }
コード例 #33
0
        public void Transform(BigEndianReader reader)
        {
            //the glyf table is split into several substreams, to group like data together.

            //The transformed table consists of a number of fields specifying the size of each of the substreams,
            //followed by the substreams in sequence.

            //During the decoding process the reverse transformation takes place,
            //where data from various separate substreams are recombined to create a complete glyph record
            //for each entry of the original glyf table.

            //Transformed glyf Table

            //Data-Type Semantic                Description and value type(if applicable)
            //Fixed     version                 = 0x00000000
            //UInt16    numGlyphs               Number of glyphs
            //UInt16    indexFormatOffset      format for loca table,
            //                                 should be consistent with indexToLocFormat of
            //                                 the original head table(see[OFF] specification)

            //UInt32    nContourStreamSize      Size of nContour stream in bytes
            //UInt32    nPointsStreamSize       Size of nPoints stream in bytes
            //UInt32    flagStreamSize          Size of flag stream in bytes
            //UInt32    glyphStreamSize         Size of glyph stream in bytes(a stream of variable-length encoded values, see description below)
            //UInt32    compositeStreamSize     Size of composite stream in bytes(a stream of variable-length encoded values, see description below)
            //UInt32    bboxStreamSize          Size of bbox data in bytes representing combined length of bboxBitmap(a packed bit array) and bboxStream(a stream of Int16 values)
            //UInt32    instructionStreamSize   Size of instruction stream(a stream of UInt8 values)

            //Int16     nContourStream[]        Stream of Int16 values representing number of contours for each glyph record
            //255UInt16 nPointsStream[]         Stream of values representing number of outline points for each contour in glyph records
            //UInt8     flagStream[]            Stream of UInt8 values representing flag values for each outline point.
            //Vary      glyphStream[]           Stream of bytes representing point coordinate values using variable length encoding format(defined in subclause 5.2)
            //Vary      compositeStream[]       Stream of bytes representing component flag values and associated composite glyph data
            //UInt8     bboxBitmap[]            Bitmap(a numGlyphs-long bit array) indicating explicit bounding boxes
            //Int16     bboxStream[]            Stream of Int16 values representing glyph bounding box data
            //UInt8     instructionStream[]	    Stream of UInt8 values representing a set of instructions for each corresponding glyph


            uint   version           = reader.ReadUInt32();
            ushort numGlyphs         = reader.ReadUInt16();
            ushort indexFormatOffset = reader.ReadUInt16();

            uint nContourStreamSize    = reader.ReadUInt32(); //in bytes
            uint nPointsStreamSize     = reader.ReadUInt32(); //in bytes
            uint flagStreamSize        = reader.ReadUInt32(); //in bytes
            uint glyphStreamSize       = reader.ReadUInt32(); //in bytes
            uint compositeStreamSize   = reader.ReadUInt32(); //in bytes
            uint bboxStreamSize        = reader.ReadUInt32(); //in bytes
            uint instructionStreamSize = reader.ReadUInt32(); //in bytes


            long expected_nCountStartAt          = reader.BaseStream.Position;
            long expected_nPointStartAt          = expected_nCountStartAt + nContourStreamSize;
            long expected_FlagStreamStartAt      = expected_nPointStartAt + nPointsStreamSize;
            long expected_GlyphStreamStartAt     = expected_FlagStreamStartAt + flagStreamSize;
            long expected_CompositeStreamStartAt = expected_GlyphStreamStartAt + glyphStreamSize;

            long expected_BboxStreamStartAt        = expected_CompositeStreamStartAt + compositeStreamSize;
            long expected_InstructionStreamStartAt = expected_BboxStreamStartAt + bboxStreamSize;
            long expected_EndAt = expected_InstructionStreamStartAt + instructionStreamSize;

            Glyph[] glyphs = new Glyph[numGlyphs];

            TempGlyph[]   allGlyphs       = new TempGlyph[numGlyphs];
            List <ushort> compositeGlyphs = new List <ushort>();

            int contourCount = 0;

            for (ushort i = 0; i < numGlyphs; ++i)
            {
                short numContour = reader.ReadInt16();
                allGlyphs[i] = new TempGlyph(i, numContour);
                if (numContour > 0)
                {
                    contourCount += numContour;
                    //>0 => simple glyph
                    //-1 = compound
                    //0 = empty glyph
                }
                else if (numContour < 0)
                {
                    //composite glyph, resolve later
                    compositeGlyphs.Add(i);
                }
                else
                {
                }
            }

            ushort[] pntPerContours = new ushort[contourCount];
            for (int i = 0; i < contourCount; ++i)
            {
                // Each of these is the number of points of that contour.
                pntPerContours[i] = reader.Read255UInt16();
            }

            byte[] flagStream = reader.Read((int)flagStreamSize);

            //TODO: Read more from line 296 in OpenFoint.Woff2Reader

            using (var composites = new MemoryStream())
            {
                reader.Position = expected_CompositeStreamStartAt;

                var compositeData = reader.Read((int)compositeStreamSize);
                composites.Write(compositeData, 0, (int)compositeStreamSize);

                int compositeGlyphCount = compositeGlyphs.Count;
                using (var compositeReader = new BigEndianReader(composites))
                {
                    for (int i = 0; i < compositeGlyphCount; i++)
                    {
                        ushort compositeGlyphIndex = compositeGlyphs[i];
                        bool   hasInstructions     = CompositeHasInstructions(compositeReader, compositeGlyphIndex);
                        if (hasInstructions)
                        {
                            break;
                        }
                        allGlyphs[compositeGlyphIndex].compositeHasInstructions = hasInstructions;
                    }
                }
            }
        }
コード例 #34
0
        protected override void Parse( BigEndianReader reader )
        {
            reader.ReadByte(); // ID
            reader.ReadInt16(); // Size
            reader.ReadInt16();

            _Serial = reader.ReadUInt32();
            reader.ReadInt16();
            _Hash = reader.ReadUInt32();

            _Properties = new List<QueryPropertiesProperty>();
            int cliloc;

            while ( ( cliloc = reader.ReadInt32() ) != 0 )
                _Properties.Add( new QueryPropertiesProperty( cliloc, reader ) );
        }
コード例 #35
0
ファイル: MobileUpdate.cs プロジェクト: greeduomacro/SpyUO
        protected override void Parse( BigEndianReader reader )
        {
            reader.ReadByte(); // ID

            _Serial = reader.ReadUInt32();
            _Body = reader.ReadInt16();
            reader.ReadByte();
            _Hue = reader.ReadInt16();

            byte flags = reader.ReadByte();

            if ( ( flags & 0x1 ) > 0 )
                _IsFrozen = true;

            if ( ( flags & 0x2 ) > 0 )
                _IsFemale = true;

            if ( ( flags & 0x4 ) > 0 )
                _IsFlying = true;

            if ( ( flags & 0x8 ) > 0 )
                _HasYellowHealthBar = true;

            if ( ( flags & 0x10 ) > 0 )
                _IsIgnoringMobiles = true;

            if ( ( flags & 0x40 ) > 0 )
                _IsInWarMode = true;

            if ( ( flags & 0x80 ) > 0 )
                _IsHidden = true;

            _X = reader.ReadInt16();
            _Y = reader.ReadInt16();
            reader.ReadInt16();
            _Direction = (Direction) reader.ReadByte();
            _Z = reader.ReadSByte();
        }
コード例 #36
0
ファイル: MobileIncomming.cs プロジェクト: greeduomacro/SpyUO
        public MobileItem( uint serial, BigEndianReader reader )
        {
            _Serial = serial;
            _ItemID = reader.ReadInt16();
            _Layer = (ItemLayer) reader.ReadByte();

            if ( ( _ItemID & 0x8000 ) != 0 )
                _Hue = reader.ReadInt16();
            else
                _Hue = 0;
        }
コード例 #37
0
        protected override void Parse(BigEndianReader reader)
        {
            reader.ReadByte();             // ID

            _MusicID = reader.ReadInt16();
        }
コード例 #38
0
ファイル: MobileIncomming.cs プロジェクト: uotools/SpyUO-1
        protected override void Parse(BigEndianReader reader)
        {
            reader.ReadByte();             // ID
            reader.ReadInt16();            // Size

            _Serial    = reader.ReadUInt32();
            _Body      = reader.ReadInt16();
            _X         = reader.ReadInt16();
            _Y         = reader.ReadInt16();
            _Z         = reader.ReadSByte();
            _Direction = (Direction)reader.ReadByte();
            _Hue       = reader.ReadUInt16();

            byte flags = reader.ReadByte();

            if ((flags & 0x1) > 0)
            {
                _IsFrozen = true;
            }

            if ((flags & 0x2) > 0)
            {
                _IsFemale = true;
            }

            if ((flags & 0x4) > 0)
            {
                _IsFlying = true;
            }

            if ((flags & 0x8) > 0)
            {
                _HasYellowHealthBar = true;
            }

            if ((flags & 0x10) > 0)
            {
                _IsIgnoringMobiles = true;
            }

            if ((flags & 0x40) > 0)
            {
                _IsInWarMode = true;
            }

            if ((flags & 0x80) > 0)
            {
                _IsHidden = true;
            }

            _Notoriety = (Notoriety)reader.ReadByte();

            // Items
            _Items = new List <MobileItem>();

            uint serial = 0;

            while ((serial = reader.ReadUInt32()) != 0)
            {
                _Items.Add(new MobileItem(serial, reader));
            }
        }
コード例 #39
0
 /// <summary>
 /// read float, 2.14 format
 /// </summary>
 /// <param name="reader"></param>
 /// <returns></returns>
 public static float ReadF2Dot14(this BigEndianReader reader)
 {
     return(((float)reader.ReadInt16()) / (1 << 14)); /* Format 2.14 */
 }
コード例 #40
0
        protected override void Parse(BigEndianReader reader)
        {
            reader.ReadByte();  // ID
            reader.ReadInt16(); // Size

            Serial = reader.ReadUInt32();
            GumpID = reader.ReadInt32();
            X      = reader.ReadInt32();
            Y      = reader.ReadInt32();

            compressedEntriesLength   = reader.ReadInt32() - 4;
            decompressedEntriesLength = reader.ReadInt32();

            compressedEntries   = reader.ReadBytes(compressedEntriesLength);
            decompressedEntries = new byte[decompressedEntriesLength];

            if (SystemInfo.IsX64)
            {
                Ultima.Package.Zlib64.Decompress(decompressedEntries, ref decompressedEntriesLength, compressedEntries, compressedEntriesLength);
            }
            else
            {
                Ultima.Package.Zlib32.Decompress(decompressedEntries, ref decompressedEntriesLength, compressedEntries, compressedEntriesLength);
            }

            entries = Encoding.ASCII.GetString(decompressedEntries);

            lineCount = reader.ReadInt32();
            compressedStringsLength   = reader.ReadInt32() - 4;
            decompressedStringsLength = reader.ReadInt32();

            if (compressedStringsLength >= 0)
            {
                compressedStrings   = reader.ReadBytes(compressedStringsLength);
                decompressedStrings = new byte[decompressedStringsLength];

                if (SystemInfo.IsX64)
                {
                    Ultima.Package.Zlib64.Decompress(decompressedStrings, ref decompressedStringsLength, compressedStrings, compressedStringsLength);
                }
                else
                {
                    Ultima.Package.Zlib32.Decompress(decompressedStrings, ref decompressedStringsLength, compressedStrings, compressedStringsLength);
                }

                strings = Encoding.ASCII.GetString(decompressedStrings);

                Text = new List <string>();

                start = 0;

                for (int i = 0; i < strings.Length; i++)
                {
                    if (strings[i] == 0)
                    {
                        if (i - start > 0)
                        {
                            Text.Add(strings.Substring(start, i - start));
                        }
                        else
                        {
                            Text.Add(String.Empty);
                        }

                        start = i + 1;
                    }
                }
            }

            Parse(entries);
        }
コード例 #41
0
        private TrueTypeFontTable ReadOS2Table(uint length, TrueTypeTableEntryList list, BigEndianReader reader)
        {
            OS2Table os2 = new OS2Table(reader.Position);

            os2.Version           = (OS2TableVersion)reader.ReadUInt16();
            os2.XAverageCharWidth = reader.ReadInt16();
            os2.WeightClass       = (WeightClass)reader.ReadUInt16();
            os2.WidthClass        = (WidthClass)reader.ReadUInt16();
            os2.FSType            = (FontRestrictions)reader.ReadUInt16();

            os2.SubscriptXSize   = reader.ReadInt16();
            os2.SubscriptYSize   = reader.ReadInt16();
            os2.SubscriptXOffset = reader.ReadInt16();
            os2.SubscriptYOffset = reader.ReadInt16();

            os2.SuperScriptXSize   = reader.ReadInt16();
            os2.SuperScriptYSize   = reader.ReadInt16();
            os2.SuperscriptXOffset = reader.ReadInt16();
            os2.SuperscriptYOffset = reader.ReadInt16();

            os2.StrikeoutSize     = reader.ReadInt16();
            os2.StrikeoutPosition = reader.ReadInt16();

            byte hi = reader.ReadByte();
            byte lo = reader.ReadByte();

            os2.FamilyClass = new IBMFontClass(hi, lo);

            byte[] data = reader.Read(10);
            os2.Panose = new PanoseArray(data);

            uint zero  = reader.ReadUInt32();
            uint one   = reader.ReadUInt32();
            uint two   = reader.ReadUInt32();
            uint three = reader.ReadUInt32();

            os2.UnicodeRanges = new UnicodeRanges(zero, one, two, three);

            os2.VendorID  = reader.ReadString(4);
            os2.Selection = (FontSelection)reader.ReadUInt16();

            os2.FirstCharIndex = reader.ReadUInt16();
            os2.LastCharIndex  = reader.ReadUInt16();
            os2.TypoAscender   = reader.ReadInt16();
            os2.TypoDescender  = reader.ReadInt16();
            os2.TypoLineGap    = reader.ReadInt16();
            os2.WinAscent      = reader.ReadUInt16();
            os2.WinDescent     = reader.ReadUInt16();

            if (os2.Version >= OS2TableVersion.TrueType166)
            {
                zero = reader.ReadUInt32();
                one  = reader.ReadUInt32();
                os2.CodePageRanges = new CodePageRange(zero, one);

                if (os2.Version >= OS2TableVersion.OpenType12)
                {
                    os2.Height      = reader.ReadInt16();
                    os2.CapHeight   = reader.ReadInt16();
                    os2.DefaultChar = reader.ReadUInt16();
                    os2.BreakChar   = reader.ReadUInt16();
                    os2.MaxContext  = reader.ReadUInt16();
                }
            }

            return(os2);
        }
コード例 #42
0
        /// <summary>
        /// Creates <see cref="TtfFileInfo"/> from <see cref="System.IO.Stream"/>.
        /// </summary>
        /// <param name="stream">Stream to create the structure. Stream will be disposed after use.</param>
        /// <returns><see cref="TtfFileInfo"/> if successful, otherwise null.</returns>
        public static TtfFileInfo FromStream(Stream stream)
        {
            try
            {
                using (var reader = new BigEndianReader(stream))
                {
                    var ttfFile = new TtfFileInfo()
                    {
                        Version = reader.ReadInt32()
                    };

                    if (ttfFile.Version != 0x74727565 && ttfFile.Version != 0x00010000)
                    {
                        return(null);
                    }

                    ttfFile.TableCount = reader.ReadInt16();
                    reader.BaseStream.Seek(6, SeekOrigin.Current);

                    for (var tableIndex = 0; tableIndex < ttfFile.TableCount; tableIndex++)
                    {
                        var tag = reader.ReadInt32();
                        reader.BaseStream.Seek(4, SeekOrigin.Current);
                        var offset = reader.ReadInt32();
                        var length = reader.ReadInt32();

                        if (tag != 0x6E616D65)
                        {
                            continue;
                        }

                        reader.BaseStream.Seek(offset, SeekOrigin.Begin);

                        var table = reader.ReadBytes(length);

                        var count        = GetInt16(table, 2);
                        var stringOffset = GetInt16(table, 4);

                        for (var record = 0; record < count; record++)
                        {
                            var nameidOffset = record * 12 + 6;
                            var platformId   = GetInt16(table, nameidOffset);
                            var nameidValue  = GetInt16(table, nameidOffset + 6);

                            if (nameidValue != 4 || platformId != 1)
                            {
                                continue;
                            }

                            var nameLength = GetInt16(table, nameidOffset + 8);
                            var nameOffset = stringOffset + GetInt16(table, nameidOffset + 10);

                            if (nameOffset < 0 || nameOffset + nameLength >= table.Length)
                            {
                                continue;
                            }

                            ttfFile.FontName = Encoding.UTF8.GetString(table, nameOffset, nameLength);
                            return(ttfFile);
                        }
                    }
                }
            }
            catch
            {
                return(null);
            }

            return(null);
        }
コード例 #43
0
ファイル: Damage.cs プロジェクト: uotools/SpyUO-1
 protected override void Parse(BigEndianReader reader)
 {
     reader.ReadByte();             // ID
     _Serial = reader.ReadUInt32();
     _Damage = reader.ReadInt16();
 }
コード例 #44
0
 public GumpResponseTextEntry(BigEndianReader reader)
 {
     EntryID = reader.ReadInt16();
     Text    = reader.ReadUnicodeString();
 }
コード例 #45
0
        protected override void Parse(BigEndianReader reader)
        {
            reader.ReadByte();             // ID
            reader.ReadInt16();            // Size

            _Serial     = reader.ReadUInt32();
            _MobileName = reader.ReadAsciiString(30);

            _HitPoints       = reader.ReadInt16();
            _MaxHitPoints    = reader.ReadInt16();
            _AllowNameChange = reader.ReadByte() == 1 ? true : false;
            byte features = reader.ReadByte();

            _IsFemale     = reader.ReadByte() == 1 ? true : false;
            _Strength     = reader.ReadInt16();
            _Dexterity    = reader.ReadInt16();
            _Intelligence = reader.ReadInt16();
            _Stamina      = reader.ReadInt16();
            _MaxStamina   = reader.ReadInt16();
            _Mana         = reader.ReadInt16();
            _MaxMana      = reader.ReadInt16();
            _Gold         = reader.ReadInt32();
            _ArmorRating  = reader.ReadInt16();
            _Weight       = reader.ReadInt16();

            if ((features & 0x5) == 0x5)
            {
                _MaxWeight = reader.ReadInt16();
                _Race      = (MobileRace)reader.ReadByte();
            }

            if ((features & 0x2) == 0x2)
            {
                _StatCap = reader.ReadInt16();
            }

            if ((features & 0x3) == 0x3)
            {
                _Followers    = reader.ReadByte();
                _MaxFollowers = reader.ReadByte();
            }

            if ((features & 0x4) == 0x4)
            {
                _FireResistance   = reader.ReadInt16();
                _ColdResistance   = reader.ReadInt16();
                _PoisonResistance = reader.ReadInt16();
                _EnergyResistance = reader.ReadInt16();
                _Luck             = reader.ReadInt16();
                _MinWeaponDamage  = reader.ReadInt16();
                _MaxWeaponDamage  = reader.ReadInt16();
                _TithingPoints    = reader.ReadInt32();
            }

            if ((features & 0x6) == 0x6)
            {
                _HitChanceIncrease        = reader.ReadInt16();
                _SwingSpeedIncrease       = reader.ReadInt16();
                _DamageChanceIncrease     = reader.ReadInt16();
                _LowerReagentCost         = reader.ReadInt16();
                _HitPointRegeneration     = reader.ReadInt16();
                _StaminaRegeneration      = reader.ReadInt16();
                _ManaRegeneration         = reader.ReadInt16();
                _ReflectPhysicalDamage    = reader.ReadInt16();
                _EnhancePotions           = reader.ReadInt16();
                _DefenseChanceIncrease    = reader.ReadInt16();
                _SpellDamageIncrease      = reader.ReadInt16();
                _FasterCastRecovery       = reader.ReadInt16();
                _FasterCasting            = reader.ReadInt16();
                _LowerManaCost            = reader.ReadInt16();
                _StrengthIncrease         = reader.ReadInt16();
                _DexterityIncrease        = reader.ReadInt16();
                _IntelligenceIncrease     = reader.ReadInt16();
                _HitPointsIncrease        = reader.ReadInt16();
                _StaminaIncrease          = reader.ReadInt16();
                _ManaIncrease             = reader.ReadInt16();
                _MaximumHitPointsIncrease = reader.ReadInt16();
                _MaximumStaminaIncrease   = reader.ReadInt16();
                _MaximumManaIncrease      = reader.ReadInt16();
            }
        }
コード例 #46
0
        public void Int16ReadWrite()
        {
            Int16 value;
            Int16 result;

            value = 20;

            ResetPosition();
            _writer.WriteInt16(value);

            ResetPosition();
            result = _reader.ReadInt16();

            Assert.AreEqual(value, result);


            //Multiple bytes

            value = 30000;

            ResetPosition();
            _writer.WriteInt16(value);

            ResetPosition();
            result = _reader.ReadInt16();

            Assert.AreEqual(value, result);

            //Negative Values

            value = -30;

            ResetPosition();
            _writer.WriteInt16(value);

            ResetPosition();
            result = _reader.ReadInt16();

            Assert.AreEqual(value, result);

            //Max Value

            value = 32767;

            ResetPosition();
            _writer.WriteInt16(value);
            ResetPosition();
            result = _reader.ReadInt16();

            Assert.AreEqual(value, result);

            //Min Value

            value = -32768;

            ResetPosition();
            _writer.WriteInt16(value);
            ResetPosition();
            result = _reader.ReadInt16();

            Assert.AreEqual(value, result);
        }
コード例 #47
0
        static bool CompositeHasInstructions(BigEndianReader reader, ushort compositeGlyphIndex)
        {
            //To find if a composite has instruction or not.

            //This method is similar to  ReadCompositeGlyph() (below)
            //but this dose not create actual composite glyph.

            CompositeGlyphFlags flags;

            do
            {
                flags = (CompositeGlyphFlags)reader.ReadUInt16();
                ushort glyphIndex = reader.ReadUInt16();
                short  arg1       = 0;
                short  arg2       = 0;
                ushort arg1and2   = 0;

                if (HasCompositeFlag(flags, CompositeGlyphFlags.ARG_1_AND_2_ARE_WORDS))
                {
                    arg1 = reader.ReadInt16();
                    arg2 = reader.ReadInt16();
                }
                else
                {
                    arg1and2 = reader.ReadUInt16();
                }
                //-----------------------------------------
                float xscale  = 1;
                float scale01 = 0;
                float scale10 = 0;
                float yscale  = 1;

                bool useMatrix = false;
                bool hasScale  = false;
                //-----------------------------------------

                if (HasCompositeFlag(flags, CompositeGlyphFlags.WE_HAVE_A_SCALE))
                {
                    //If the bit WE_HAVE_A_SCALE is set,
                    //the scale value is read in 2.14 format-the value can be between -2 to almost +2.
                    //The glyph will be scaled by this value before grid-fitting.
                    xscale   = yscale = reader.ReadF2Dot14(); /* Format 2.14 */
                    hasScale = true;
                }
                else if (HasCompositeFlag(flags, CompositeGlyphFlags.WE_HAVE_AN_X_AND_Y_SCALE))
                {
                    xscale   = reader.ReadF2Dot14(); /* Format 2.14 */
                    yscale   = reader.ReadF2Dot14(); /* Format 2.14 */
                    hasScale = true;
                }
                else if (HasCompositeFlag(flags, CompositeGlyphFlags.WE_HAVE_A_TWO_BY_TWO))
                {
                    //The bit WE_HAVE_A_TWO_BY_TWO allows for linear transformation of the X and Y coordinates by specifying a 2 × 2 matrix.
                    //This could be used for scaling and 90-degree*** rotations of the glyph components, for example.

                    //2x2 matrix

                    //The purpose of USE_MY_METRICS is to force the lsb and rsb to take on a desired value.
                    //For example, an i-circumflex (U+00EF) is often composed of the circumflex and a dotless-i.
                    //In order to force the composite to have the same metrics as the dotless-i,
                    //set USE_MY_METRICS for the dotless-i component of the composite.
                    //Without this bit, the rsb and lsb would be calculated from the hmtx entry for the composite
                    //(or would need to be explicitly set with TrueType instructions).

                    //Note that the behavior of the USE_MY_METRICS operation is undefined for rotated composite components.
                    useMatrix = true;
                    hasScale  = true;
                    xscale    = reader.ReadF2Dot14(); /* Format 2.14 */
                    scale01   = reader.ReadF2Dot14(); /* Format 2.14 */
                    scale10   = reader.ReadF2Dot14(); /* Format 2.14 */
                    yscale    = reader.ReadF2Dot14(); /* Format 2.14 */
                }

                if (useMatrix || hasScale)
                {
                    //This is to be implemented in WOFF2
                }
            } while (HasCompositeFlag(flags, CompositeGlyphFlags.MORE_COMPONENTS));


            //
            return(HasCompositeFlag(flags, CompositeGlyphFlags.WE_HAVE_INSTRUCTIONS));
        }
コード例 #48
0
        private TrueTypeFontTable ReadHorizontalHeader(uint length, TrueTypeTableEntryList list, BigEndianReader reader)
        {
            HorizontalHeader hhead = new HorizontalHeader(reader.Position);

            hhead.TableVersion            = reader.ReadFixedVersion();
            hhead.Ascender                = reader.ReadInt16();
            hhead.Descender               = reader.ReadInt16();
            hhead.LineGap                 = reader.ReadInt16();
            hhead.AdvanceWidthMax         = reader.ReadUInt16();
            hhead.MinimumLeftSideBearing  = reader.ReadInt16();
            hhead.MinimumRightSideBearing = reader.ReadInt16();
            hhead.XMaxExtent              = reader.ReadInt16();
            hhead.CaretSlopeRise          = reader.ReadInt16();
            hhead.CaretSlopeRun           = reader.ReadInt16();
            hhead.CaretOffset             = reader.ReadInt16();
            hhead.Reserved1               = reader.ReadInt16();
            hhead.Reserved2               = reader.ReadInt16();
            hhead.Reserved3               = reader.ReadInt16();
            hhead.Reserved4               = reader.ReadInt16();
            hhead.MetricDataFormat        = reader.ReadInt16();
            hhead.NumberOfHMetrics        = reader.ReadUInt16();

            return(hhead);
        }
コード例 #49
0
ファイル: MobileIncomming.cs プロジェクト: greeduomacro/SpyUO
        protected override void Parse( BigEndianReader reader )
        {
            reader.ReadByte(); // ID
            reader.ReadInt16(); // Size

            _Serial = reader.ReadUInt32();
            _Body = reader.ReadInt16();
            _X = reader.ReadInt16();
            _Y = reader.ReadInt16();
            _Z = reader.ReadSByte();
            _Direction = (Direction) reader.ReadByte();
            _Hue = reader.ReadUInt16();

            byte flags = reader.ReadByte();

            if ( ( flags & 0x1 ) > 0 )
                _IsFrozen = true;

            if ( ( flags & 0x2 ) > 0 )
                _IsFemale = true;

            if ( ( flags & 0x4 ) > 0 )
                _IsFlying = true;

            if ( ( flags & 0x8 ) > 0 )
                _HasYellowHealthBar = true;

            if ( ( flags & 0x10 ) > 0 )
                _IsIgnoringMobiles = true;

            if ( ( flags & 0x40 ) > 0 )
                _IsInWarMode = true;

            if ( ( flags & 0x80 ) > 0 )
                _IsHidden = true;

            _Notoriety = (Notoriety) reader.ReadByte();

            // Items
            _Items = new List<MobileItem>();

            uint serial = 0;

            while ( ( serial = reader.ReadUInt32() ) != 0 )
                _Items.Add( new MobileItem( serial, reader ) );
        }
コード例 #50
0
        // Methods
        internal void Init(BigEndianReader Reader, int MapVersion)
        {
            this.Floor = (Reader.ReadByte() * 10);
            if (this.Floor == -1280)
            {
                return;
            }

            if (MapVersion >= 9)
            {
                tmpbytesv9 = Reader.ReadInt16();

                Mov = (tmpbytesv9 & 1) == 0;
                NonWalkableDuringFight = (tmpbytesv9 & 2) != 0;
                NonWalkableDuringRP    = (tmpbytesv9 & 4) != 0;
                Los      = (tmpbytesv9 & 8) == 0;
                Blue     = (tmpbytesv9 & 16) != 0;
                Red      = (tmpbytesv9 & 32) != 0;
                Visible  = (tmpbytesv9 & 64) != 0;
                FarmCell = (tmpbytesv9 & 128) != 0;

                if (MapVersion >= 10)
                {
                    HavenbagCell = (tmpbytesv9 & 256) != 0;
                    TopArrow     = (tmpbytesv9 & 512) != 0;
                    BottomArrow  = (tmpbytesv9 & 1024) != 0;
                    RightArrow   = (tmpbytesv9 & 2048) != 0;
                    LeftArrow    = (tmpbytesv9 & 4096) != 0;
                }
                else
                {
                    TopArrow    = (tmpbytesv9 & 256) != 0;
                    BottomArrow = (tmpbytesv9 & 512) != 0;
                    RightArrow  = (tmpbytesv9 & 1024) != 0;
                    LeftArrow   = (tmpbytesv9 & 2048) != 0;
                }
            }
            else
            {
                LosMov = Reader.ReadSByte();

                this.Los                    = (LosMov & 2) >> 1 == 1;
                this.Mov                    = (LosMov & 1) == 1;
                this.Visible                = (LosMov & 64) >> 6 == 1;
                this.FarmCell               = ((LosMov & 32) >> 5) == 1;
                this.Blue                   = (LosMov & 16) >> 4 == 1;
                this.Red                    = (LosMov & 8) >> 3 == 1;
                this.NonWalkableDuringRP    = (LosMov & 128) >> 7 == 1;
                this.NonWalkableDuringFight = (LosMov & 4) >> 2 == 1;
            }
            this.Speed         = Reader.ReadByte();
            this.MapChangeData = Reader.ReadByte();
            if (MapVersion > 5)
            {
                this.MoveZone = Reader.ReadByte();
            }
            if (MapVersion == 8)
            {
                tmp   = Reader.ReadByte();
                Arrow = 15 & tmp;
            }
            IsTopChange   = (MapChangeData & 64) > 0 ? true : false;
            IsBotChange   = (MapChangeData & 4) > 0 ? true : false;
            IsLeftChange  = (MapChangeData & 16) > 0 ? true : false;;
            IsRightChange = (MapChangeData & 1) > 0 ? true : false;
        }
コード例 #51
0
 protected override void Parse( BigEndianReader reader )
 {
     reader.ReadByte(); // ID
     _Serial = reader.ReadUInt32();
     _ItemID = reader.ReadInt16();
     _ItemIDOffset = reader.ReadByte();
     _Amount = reader.ReadInt16();
     _X = reader.ReadInt16();
     _Y = reader.ReadInt16();
     _GridLocation = reader.ReadByte();
     _ParentSerial = reader.ReadUInt32();
     _Hue = reader.ReadInt16();
 }
コード例 #52
0
ファイル: PlayServer.cs プロジェクト: mbnunes/SpyUO
 protected override void Parse(BigEndianReader reader)
 {
     reader.ReadByte();             // ID
     _serverIndex = reader.ReadInt16();
 }