Esempio n. 1
0
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadByte();

			if ( version == 0 )
			{
				Timer.DelayCall( TimeSpan.Zero, delegate()
				{
					for ( int i = 0; i < Components.Count; ++i )
					{
						AddonComponent ac = Components[i] as AddonComponent;

						if ( ac != null && ac.Hue == 2118 )
							ac.Hue = 1161;
					}
				} );
			}

			if ( version <= 1 )
			{
				Timer.DelayCall( TimeSpan.Zero, delegate()
				{
					for ( int i = 0; i < Components.Count; ++i )
					{
						AddonComponent ac = Components[i] as AddonComponent;

						if ( ac != null )
							ac.Name = "jack-o-lantern";
					}
				} );
			}
		}
Esempio n. 2
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadByte();

            if (this.ItemID == 4678 || this.ItemID == 4679)
                this.ItemID = 4656;
            else if (this.ItemID == 4712 || this.ItemID == 4713)
                this.ItemID = 4702;
        }
Esempio n. 3
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);
            int version = reader.ReadInt();

            this.m_Code = reader.ReadByte();
            this.m_Controller = reader.ReadItem() as PrimevalLichPuzzle;

            // remove if no controller exists or is deleted
            if (null == this.m_Controller || this.m_Controller.Deleted)
                this.Delete();
        }
Esempio n. 4
0
		public VirtueInfo(GenericReader reader)
		{
			int version = reader.ReadByte();

			switch (version)
			{
				case 1: //Changed the values throughout the virtue system
				case 0:
					{
						int mask = reader.ReadByte();

						if (mask != 0)
						{
							m_Values = new int[8];

							for (int i = 0; i < 8; ++i)
							{
								if ((mask & (1 << i)) != 0)
								{
									m_Values[i] = reader.ReadInt();
								}
							}
						}

						break;
					}
			}

			if (version == 0)
			{
				Compassion *= 200;
				Sacrifice *= 250; //Even though 40 (the max) only gives 10k, It's because it was formerly too easy

				//No direct conversion factor for Justice, this is just an approximation
				Justice *= 500;

				//All the other virtues haven't been defined at 'version 0' point in time in the scripts.
			}
		}
Esempio n. 5
0
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadByte();

			switch ( version )
			{
				case 0:
				{
					m_LabelNumber = reader.ReadEncodedInt();
					break;
				}
			}
		}
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();
            switch (version)
            {
                case 0:
                    //_PoisonChancePenaltyPerFollower = reader.ReadDouble();
                    _ItemsBlockPlacement = (HousePlacementItemBlocking)reader.ReadByte();
                    _MobsBlockPlacement = reader.ReadBool();
                    _PetsBlockPlacement = reader.ReadBool();
                    _MinPlaceDelay = reader.ReadInt();
                    _MaxPlaceDelay = reader.ReadInt();
                    break;
            }
            m_Instance = this;
        }
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();
            switch (version)
            {
                case 2:
                    {
                        m_EventType = (EventType)reader.ReadByte();
                        goto case 1;
                    }
                case 1:
                    {
                        m_TargetLocation = reader.ReadPoint3D();
                        m_TargetMap = reader.ReadMap();
                        break;
                    }
            }
        }
Esempio n. 8
0
		public FactionItem( GenericReader reader, Faction faction )
		{
			int version = reader.ReadEncodedInt();

			switch ( version )
			{
				case 1:
				{
					m_OrigLootType = (LootType)reader.ReadByte();
					m_OrigHue = reader.ReadInt();
					goto case 0;
				}
				case 0:
				{
					m_Item = reader.ReadItem();
					m_Expiration = reader.ReadDateTime();
					break;
				}
			}

			m_Faction = faction;
		}
Esempio n. 9
0
        public static object Object(GenericReader reader)
        { 
            if (reader == null)
                return null;
					
            byte type = reader.ReadByte();
			
            switch ( type )
            {
                case 0x0:
                    return null; // invalid
                case 0x1:
                    return reader.ReadInt();
                case 0x2:
                    return reader.ReadString();
                case 0x3:
                    return reader.ReadItem();
                case 0x4:
                    return reader.ReadMobile();
            }
			
            return null;
        }
Esempio n. 10
0
        public override void Deserialize( GenericReader reader )
        {
            base.Deserialize( reader );

            int version = reader.ReadInt();

            m_CollectionTitles = new ArrayList();

            switch ( version )
            {
                case 56:
                    {
                        bool hasAnyBardMastery = reader.ReadBool();

                        if ( hasAnyBardMastery )
                        {
                            m_BardMastery = BardMastery.GetFromId( reader.ReadEncodedInt() );
                            m_BardElementDamage = (ResistanceType) reader.ReadEncodedInt();
                            m_NextBardMasterySwitch = reader.ReadDateTime();
                            m_BardMasteryLearnedMask = reader.ReadEncodedInt();
                        }

                        goto case 55;
                    }
                case 55:
                    {
                        m_NextAnkhPendantUse = reader.ReadDateTime();

                        goto case 54;
                    }
                case 54:
                    {
                        m_NextTenthAnniversarySculptureUse = reader.ReadDateTime();

                        goto case 53;
                    }
                case 53:
                    {
                        m_LastForgedPardonUse = reader.ReadDateTime();

                        goto case 52;
                    }
                case 52:
                    {
                        m_DoomCredits = reader.ReadInt();

                        m_TieredQuestInfo = new TieredQuestInfo( reader );

                        m_LoyaltyInfo = new LoyaltyInfo( reader );

                        m_FloorTrapsPlaced = reader.ReadInt();

                        m_NextPuzzleAttempt = reader.ReadDateTime();

                        m_NextDrinkExplodingTarPotion = reader.ReadDateTime();

                        m_NextLuckyCoinWish = reader.ReadDateTime();

                        m_NextSilverSaplingUse = reader.ReadDateTime();

                        m_SacredQuestNextChance = reader.ReadDateTime();

                        m_HumilityQuestStatus = (HumilityQuestStatus) reader.ReadInt();
                        m_HumilityQuestNextChance = reader.ReadDateTime();

                        m_NextGemOfSalvationUse = reader.ReadDateTime();

                        m_AnkhNextUse = reader.ReadDateTime();

                        m_Quests = QuestReader.Quests( reader, this );
                        m_Chains = QuestReader.Chains( reader );

                        m_TenthAnniversaryCredits = reader.ReadDouble();

                        m_KRStartingQuestStep = reader.ReadByte();

                        m_CurrentCollectionTitle = reader.ReadInt();
                        int titlecount = reader.ReadInt();

                        for ( int i = 0; i < titlecount; i++ )
                        {
                            int title = reader.ReadInt();
                            m_CollectionTitles.Add( title );
                        }

                        int recipeCount = reader.ReadInt();

                        if ( recipeCount > 0 )
                        {
                            m_AcquiredRecipes = new Hashtable();

                            for ( int i = 0; i < recipeCount; i++ )
                            {
                                int r = reader.ReadInt();
                                if ( reader.ReadBool() )	//Don't add in recipies which we haven't gotten or have been removed
                                    m_AcquiredRecipes.Add( r, true );
                            }
                        }

                        m_AutoStabledPets = reader.ReadMobileList();

                        ACState = (AdvancedCharacterState) reader.ReadInt();

                        Deaths = reader.ReadInt();

                        NextDrinkConflagrationPotion = reader.ReadTimeSpan();
                        NextDrinkMaskOfDeathPotion = reader.ReadTimeSpan();
                        NextDrinkConfusionPotion = reader.ReadTimeSpan();

                        m_GuildRank = reader.ReadInt();

                        m_LastLogin = reader.ReadDateTime();

                        m_ToTItemsTurnedIn = reader.ReadInt();
                        m_ToTTotalMonsterFame = reader.ReadDouble();

                        LastTierLoss = reader.ReadDeltaTime();

                        LastChampionTierLoss = reader.ReadDeltaTime();

                        LastSuperChampionTierLoss = reader.ReadDeltaTime();

                        int length_super = reader.ReadInt();

                        for ( int i = 0; i < length_super; i++ )
                            SuperChampionTiers[i] = reader.ReadInt();

                        int length = reader.ReadInt();

                        for ( int i = 0; i < length; i++ )
                            ChampionTiers[i] = reader.ReadDouble();

                        m_LastValorLoss = reader.ReadDeltaTime();

                        m_LastHonorLoss = reader.ReadDeltaTime();
                        m_SolenFriendship = (SolenFriendship) reader.ReadEncodedInt();

                        m_Quest = QuestSerializer.DeserializeQuest( reader );

                        if ( m_Quest != null )
                            m_Quest.From = this;

                        int count = reader.ReadEncodedInt();

                        if ( count > 0 )
                        {
                            m_DoneQuests = new List<QuestRestartInfo>();

                            for ( int i = 0; i < count; ++i )
                            {
                                Type questType = QuestSerializer.ReadType( QuestSystem.QuestTypes, reader );
                                DateTime restartTime = reader.ReadDateTime();

                                m_DoneQuests.Add( new QuestRestartInfo( questType, restartTime ) );
                            }
                        }

                        m_Profession = reader.ReadEncodedInt();

                        m_LastCompassionLoss = reader.ReadDeltaTime();

                        m_CompassionGains = reader.ReadEncodedInt();

                        if ( m_CompassionGains > 0 )
                            m_NextCompassionDay = reader.ReadDeltaTime();

                        m_BOBFilter = new Engines.BulkOrders.BOBFilter( reader );

                        if ( reader.ReadBool() )
                        {
                            m_HairModID = reader.ReadInt();
                            m_HairModHue = reader.ReadInt();
                            m_BeardModID = reader.ReadInt();
                            m_BeardModHue = reader.ReadInt();

                            // We cannot call SetHairMods( -1, -1 ) here because the items have not yet loaded
                            Timer.DelayCall( TimeSpan.Zero, new TimerCallback( RevertHair ) );
                        }

                        SavagePaintExpiration = reader.ReadTimeSpan();

                        if ( SavagePaintExpiration > TimeSpan.Zero )
                        {
                            BodyMod = ( Female ? 184 : 183 );
                            HueMod = 0;
                        }

                        m_NpcGuild = (NpcGuild) reader.ReadInt();
                        m_NpcGuildJoinTime = reader.ReadDateTime();
                        m_NpcGuildGameTime = reader.ReadTimeSpan();

                        m_PermaFlags = reader.ReadMobileList();

                        NextTailorBulkOrder = reader.ReadTimeSpan();

                        NextSmithBulkOrder = reader.ReadTimeSpan();

                        m_LastJusticeLoss = reader.ReadDeltaTime();
                        m_JusticeProtectors = reader.ReadMobileList();

                        m_LastSacrificeGain = reader.ReadDeltaTime();
                        m_LastSacrificeLoss = reader.ReadDeltaTime();
                        m_AvailableResurrects = reader.ReadInt();

                        m_Flags = (PlayerFlag) reader.ReadInt();

                        m_LongTermElapse = reader.ReadTimeSpan();
                        m_ShortTermElapse = reader.ReadTimeSpan();
                        m_GameTime = reader.ReadTimeSpan();

                        break;
                    }
            }

            #region ML Quest System
            if ( m_Quests == null )
                m_Quests = new List<BaseQuest>();

            if ( m_Chains == null )
                m_Chains = new Dictionary<QuestChain, BaseChain>();

            if ( m_DoneQuests == null )
                m_DoneQuests = new List<QuestRestartInfo>();
            #endregion

            if ( this != null && this.Region.IsPartOf( typeof( DoomLampRoom ) ) )
            {
                Rectangle2D rect = new Rectangle2D( 342, 168, 16, 16 );

                int x = Utility.Random( rect.X, rect.Width );
                int y = Utility.Random( rect.Y, rect.Height );

                if ( x >= 345 && x <= 352 && y >= 173 && y <= 179 )
                {
                    x = 353;
                    y = 172;
                }

                this.MoveToWorld( new Point3D( x, y, -1 ), Map.Malas );
            }

            // Professions weren't verified on 1.0 RC0
            if ( !CharacterCreation.VerifyProfession( m_Profession ) )
                m_Profession = 0;

            if ( m_PermaFlags == null )
                m_PermaFlags = new ArrayList();

            if ( m_JusticeProtectors == null )
                m_JusticeProtectors = new ArrayList();

            if ( m_BOBFilter == null )
                m_BOBFilter = new Engines.BulkOrders.BOBFilter();

            if ( m_LoyaltyInfo == null )
                m_LoyaltyInfo = new LoyaltyInfo();

            if ( m_TieredQuestInfo == null )
                m_TieredQuestInfo = new TieredQuestInfo();

            List<Mobile> list = this.Stabled;

            for ( int i = 0; i < list.Count; ++i )
            {
                BaseCreature bc = list[i] as BaseCreature;

                if ( bc != null )
                    bc.IsStabled = true;
            }

            if ( Hidden ) // Hiding is the only buff where it has an effect that's serialized.
                this.AddBuff( new BuffInfo( BuffIcon.HidingAndOrStealth, 1075655 ) );
        }
Esempio n. 11
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.GetVersion();

            switch (version)
            {
            case 3:
                AllowNoOwner = reader.ReadBool();
                goto case 2;

            case 2:
            case 1:
                Silent = reader.ReadBool();
                goto case 0;

            case 0:
            {
                Usage         = reader.ReadString();
                Token         = reader.ReadString();
                AllowCombat   = reader.ReadBool();
                AllowDeadUser = reader.ReadBool();
                Consumable    = reader.ReadBool();
                ClearHands    = reader.ReadBool();
                DismountUser  = reader.ReadBool();
                EffectID      = reader.ReadInt();
                EffectHue     = reader.ReadInt();
                EffectSpeed   = reader.ReadInt();

                if (version < 2)
                {
                    EffectRender = (EffectRender)reader.ReadShort();
                    TargetFlags  = (TargetFlags)reader.ReadByte();
                }
                else
                {
                    EffectRender = reader.ReadFlag <EffectRender>();
                    TargetFlags  = reader.ReadFlag <TargetFlags>();
                }

                ThrowSound    = reader.ReadInt();
                ImpactSound   = reader.ReadInt();
                ThrowRange    = reader.ReadInt();
                ThrowRecovery = reader.ReadTimeSpan();
                ThrownLast    = reader.ReadDateTime();

                if (version < 2)
                {
                    RequiredSkill = (SkillName)reader.ReadShort();
                }
                else
                {
                    RequiredSkill = reader.ReadFlag <SkillName>();
                }

                RequiredSkillValue = reader.ReadDouble();
            }
            break;
            }
        }
Esempio n. 12
0
 public SecureInfo(GenericReader reader)
 {
     this.m_Item = reader.ReadItem() as Container;
     this.m_Level = (SecureLevel)reader.ReadByte();
 }
Esempio n. 13
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();

            switch (version)
            {
            case 2:
            {
                SaveFlag flags = (SaveFlag)reader.ReadByte();

                if (GetSaveFlag(flags, SaveFlag.MaxItems))
                {
                    m_MaxItems = reader.ReadEncodedInt();
                }
                else
                {
                    m_MaxItems = -1;
                }

                if (GetSaveFlag(flags, SaveFlag.GumpID))
                {
                    m_GumpID = reader.ReadEncodedInt();
                }
                else
                {
                    m_GumpID = -1;
                }

                if (GetSaveFlag(flags, SaveFlag.DropSound))
                {
                    m_DropSound = reader.ReadEncodedInt();
                }
                else
                {
                    m_DropSound = -1;
                }

                break;
            }

            case 1:
            {
                m_MaxItems = reader.ReadInt();
                goto case 0;
            }

            case 0:
            {
                if (version < 1)
                {
                    m_MaxItems = m_GlobalMaxItems;
                }

                m_GumpID    = reader.ReadInt();
                m_DropSound = reader.ReadInt();

                if (m_GumpID == DefaultGumpID)
                {
                    m_GumpID = -1;
                }

                if (m_DropSound == DefaultDropSound)
                {
                    m_DropSound = -1;
                }

                if (m_MaxItems == DefaultMaxItems)
                {
                    m_MaxItems = -1;
                }

                //m_Bounds = new Rectangle2D( reader.ReadPoint2D(), reader.ReadPoint2D() );
                reader.ReadPoint2D();
                reader.ReadPoint2D();

                break;
            }
            }
        }
Esempio n. 14
0
 public DaviesDeedEntry(GenericReader reader)
 {
     int version = reader.ReadByte();
     m_type = reader.ReadInt();
     m_Level = reader.ReadInt();
     m_Decoder = reader.ReadMobile();
     m_Map = reader.ReadMap();
     m_Location2d = reader.ReadPoint2D();
     m_Location3d = reader.ReadPoint3D();
     m_Bounds = reader.ReadRect2D();
     m_Mapnumber = reader.ReadString();
 }
Esempio n. 15
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();
            switch (version)
            {
                case 1:
                    _AnybodyAllowedInStronghold = reader.ReadBool();
                    goto case 0;

                case 0:
                    //_PoisonChancePenaltyPerFollower = reader.ReadDouble();
                    
                    _CriminalCanUseOthersGates = reader.ReadBool();
                    _SigilAnnounceStolen = (SigilStolenAnnouncing)reader.ReadByte();
                    _SigilCorruptionGrace = reader.ReadTimeSpan();
                    _SigilCorruptionPeriod = reader.ReadTimeSpan();
                    _SigilReturnPeriod = reader.ReadTimeSpan();
                    _SigilPurificationPeriod = reader.ReadTimeSpan();
                    break;
            }
            m_Instance = this;
        }
Esempio n. 16
0
        /// <summary>
        /// Loads an archived file's data.
        /// </summary>
        Task <byte[]> LoadFileDataAsync(FileMetadata file)
        {
            var fileSize = (int)file.Size;

            byte[] fileData;
            bool   bsaCompressed;
            int    newFileSize;

            lock (_r)
            {
                _r.Position = file.Offset;
                if (_hasNamePrefix)
                {
                    var len = _r.ReadByte();
                    fileSize   -= len + 1;
                    _r.Position = file.Offset + 1 + len;
                }
                fileData      = _r.ReadBytes(fileSize);
                bsaCompressed = file.SizeFlags > 0 && file.Compressed ^ _compressToggle;
                newFileSize   = Version == SSE_BSAHEADER_VERSION && bsaCompressed?_r.ReadInt32() - 4 : fileSize;
            }
            // BSA
            if (bsaCompressed)
            {
                var newFileData = new byte[newFileSize];
                if (Version != SSE_BSAHEADER_VERSION)
                {
                    if (fileData.Length > 4)
                    {
                        using (var s = new MemoryStream(fileData, 4, fileSize - 4))
                            using (var gs = new InflaterInputStream(s))
                                gs.Read(newFileData, 0, newFileData.Length);
                    }
                    else
                    {
                        newFileData = fileData;
                    }
                }
                else
                {
                    using (var s = new MemoryStream(fileData))
                        using (var gs = new Lzw​Input​Stream(s))
                            gs.Read(newFileData, 0, newFileData.Length);
                }
                fileData = newFileData;
            }
            // General BA2
            else if (file.PackedSize > 0 && file.Tex.Chunks == null)
            {
                var newFileData = new byte[file.UnpackedSize];
                using (var s = new MemoryStream(fileData))
                    using (var gs = new InflaterInputStream(s))
                        gs.Read(newFileData, 0, newFileData.Length);
                fileData = newFileData;
            }
            // Fill DDS Header
            else if (file.Tex.Chunks != null)
            {
                // Fill DDS Header
                var ddsHeader = new DDSHeader
                {
                    dwFlags       = DDSFlags.HEADER_FLAGS_TEXTURE | DDSFlags.HEADER_FLAGS_LINEARSIZE | DDSFlags.HEADER_FLAGS_MIPMAP,
                    dwHeight      = file.Tex.Height,
                    dwWidth       = file.Tex.Width,
                    dwMipMapCount = file.Tex.NumMips,
                    dwCaps        = DDSCaps.SURFACE_FLAGS_TEXTURE | DDSCaps.SURFACE_FLAGS_MIPMAP,
                    dwCaps2       = file.Tex.Unk16 == 2049 ? DDSCaps2.CUBEMAP_ALLFACES : 0,
                };
                var dx10Header = new DDSHeader_DXT10();
                var dx10       = false;
                // map tex format
                switch (file.Tex.Format)
                {
                case DXGIFormat.BC1_UNORM:
                    ddsHeader.ddspf.dwFlags       = DDSPixelFormats.FourCC;
                    ddsHeader.ddspf.dwFourCC      = Encoding.ASCII.GetBytes("DXT1");
                    ddsHeader.dwPitchOrLinearSize = (uint)file.Tex.Width * file.Tex.Height / 2U;     // 4bpp
                    break;

                case DXGIFormat.BC2_UNORM:
                    ddsHeader.ddspf.dwFlags       = DDSPixelFormats.FourCC;
                    ddsHeader.ddspf.dwFourCC      = Encoding.ASCII.GetBytes("DXT3");
                    ddsHeader.dwPitchOrLinearSize = (uint)file.Tex.Width * file.Tex.Height;     // 8bpp
                    break;

                case DXGIFormat.BC3_UNORM:
                    ddsHeader.ddspf.dwFlags       = DDSPixelFormats.FourCC;
                    ddsHeader.ddspf.dwFourCC      = Encoding.ASCII.GetBytes("DXT5");
                    ddsHeader.dwPitchOrLinearSize = (uint)file.Tex.Width * file.Tex.Height;     // 8bpp
                    break;

                case DXGIFormat.BC5_UNORM:
                    ddsHeader.ddspf.dwFlags       = DDSPixelFormats.FourCC;
                    ddsHeader.ddspf.dwFourCC      = Encoding.ASCII.GetBytes("ATI2");
                    ddsHeader.dwPitchOrLinearSize = (uint)file.Tex.Width * file.Tex.Height;     // 8bpp
                    break;

                case DXGIFormat.BC7_UNORM:
                    ddsHeader.ddspf.dwFlags       = DDSPixelFormats.FourCC;
                    ddsHeader.ddspf.dwFourCC      = Encoding.ASCII.GetBytes("DX10");
                    ddsHeader.dwPitchOrLinearSize = (uint)file.Tex.Width * file.Tex.Height;     // 8bpp
                    dx10 = true;
                    dx10Header.dxgiFormat = DXGIFormat.BC7_UNORM;
                    break;

                case DXGIFormat.DXGI_FORMAT_B8G8R8A8_UNORM:
                    ddsHeader.ddspf.dwFlags       = DDSPixelFormats.RGB | DDSPixelFormats.AlphaPixels;
                    ddsHeader.ddspf.dwRGBBitCount = 32;
                    ddsHeader.ddspf.dwRBitMask    = 0x00FF0000;
                    ddsHeader.ddspf.dwGBitMask    = 0x0000FF00;
                    ddsHeader.ddspf.dwBBitMask    = 0x000000FF;
                    ddsHeader.ddspf.dwABitMask    = 0xFF000000;
                    ddsHeader.dwPitchOrLinearSize = (uint)file.Tex.Width * file.Tex.Height * 4;     // 32bpp
                    break;

                case DXGIFormat.DXGI_FORMAT_R8_UNORM:
                    ddsHeader.ddspf.dwFlags       = DDSPixelFormats.RGB;
                    ddsHeader.ddspf.dwRGBBitCount = 8;
                    ddsHeader.ddspf.dwRBitMask    = 0xFF;
                    ddsHeader.dwPitchOrLinearSize = (uint)file.Tex.Width * file.Tex.Height;     // 8bpp
                    break;

                default: throw new InvalidOperationException("DDS FAILED");
                }
                if (dx10)
                {
                    dx10Header.resourceDimension = DDSDimension.Texture2D;
                    dx10Header.miscFlag          = 0;
                    dx10Header.arraySize         = 1;
                    dx10Header.miscFlags2        = 0;
                    dx10Header.Write(null);
                    //char dds2[sizeof(dx10Header)];
                    //memcpy(dds2, &dx10Header, sizeof(dx10Header));
                    //content.append(QByteArray::fromRawData(dds2, sizeof(dx10Header)));
                }
            }
            return(Task.FromResult(fileData));
        }
Esempio n. 17
0
        private static bool ParseBlock(GenericReader gr, StringBuilder sb, StreamWriter swe, StreamWriter data)
        {
            ulong guid = 0;

            UpdateTypes updatetype = (UpdateTypes)gr.ReadByte();

            sb.AppendLine("Updatetype: " + updatetype);

            // check if updatetype is valid
            if (updatetype < UpdateTypes.UPDATETYPE_VALUES || updatetype > UpdateTypes.UPDATETYPE_NEAR_OBJECTS)
            {
                long pos = gr.BaseStream.Position;
                swe.WriteLine("wrong updatetype at position {0}", pos.ToString("X16"));

                // we there only if we read packet wrong way
                swe.WriteLine("Updatetype {0} is not supported", updatetype);
                return(false);
            }

            switch (updatetype)
            {
            case UpdateTypes.UPDATETYPE_VALUES:
                guid = gr.ReadPackedGuid();
                sb.AppendLine("Object guid: " + guid.ToString("X16"));

                if (guid == 0)
                {
                    long pos = gr.BaseStream.Position;
                    swe.WriteLine("wrong guid at position {0}", pos.ToString("X2"));

                    // we there only if we read packet wrong way
                    swe.WriteLine("Updatetype {0} can't be with NULL guid", updatetype);
                    return(false);
                }

                ObjectTypes objecttype = ObjectTypes.TYPEID_OBJECT;     // 0
                if (Binparser.m_objects.ContainsKey(guid))
                {
                    objecttype = Binparser.m_objects[guid];
                }
                else        // try old method...
                {
                    // object type auto detection:
                    // F00C0000, F02B0000 - gameobjects
                    // F00CXXXX, F02BXXXX - units (XXXX == 0000 for pets etc...)
                    // F02B00000000XXXX - corpses
                    // F02B00000000XXXX - dynamicobjects
                    if (guid.ToString("X16").Substring(0, 8).Equals("40000000"))
                    {
                        objecttype = ObjectTypes.TYPEID_ITEM;
                    }
                    else if (guid.ToString("X16").Substring(0, 8).Equals("00000000"))
                    {
                        objecttype = ObjectTypes.TYPEID_PLAYER;
                    }
                    else
                    {
                        objecttype = ObjectTypes.TYPEID_UNIT;     // also can be go, do, corpse
                    }
                    swe.WriteLine("problem with objecttypeid detection for UPDATETYPE_VALUES");
                }

                sb.AppendLine("objectTypeId " + objecttype);

                if (!ParseValuesUpdateBlock(gr, sb, swe, data, objecttype, updatetype, null))
                {
                    return(false);
                }

                return(true);

            case UpdateTypes.UPDATETYPE_MOVEMENT:
                guid = gr.ReadPackedGuid();
                sb.AppendLine("Object guid: " + guid.ToString("X16"));

                if (!ParseMovementUpdateBlock(gr, sb, swe, data, ObjectTypes.TYPEID_UNIT, null))
                {
                    return(false);
                }

                return(true);

            case UpdateTypes.UPDATETYPE_CREATE_OBJECT:
            case UpdateTypes.UPDATETYPE_CREATE_OBJECT2:
                guid = gr.ReadPackedGuid();
                sb.AppendLine("Object guid: " + guid.ToString("X16"));

                ObjectTypes objectTypeId = (ObjectTypes)gr.ReadByte();
                sb.AppendLine("objectTypeId " + objectTypeId);

                // check object existance and remove it if needed...
                //if (Binparser.m_objects.ContainsKey(guid))
                //    Binparser.m_objects.Remove(guid);

                // now we can add this object to Dictionary to get correct object type later...
                //Binparser.m_objects.Add(guid, objectTypeId);

                WoWObject obj = new WoWObject(0, objectTypeId);

                // add new object only if we not have it already
                if (!Binparser.m_objects.ContainsKey(guid))
                {
                    obj.IsNew = true;
                    Binparser.m_objects.Add(guid, objectTypeId);
                }

                switch (objectTypeId)
                {
                case ObjectTypes.TYPEID_OBJECT:
                case ObjectTypes.TYPEID_AIGROUP:
                case ObjectTypes.TYPEID_AREATRIGGER:
                    swe.WriteLine("Unhandled object type {0}", objectTypeId);
                    return(false);

                case ObjectTypes.TYPEID_ITEM:
                case ObjectTypes.TYPEID_CONTAINER:
                case ObjectTypes.TYPEID_UNIT:
                case ObjectTypes.TYPEID_PLAYER:
                case ObjectTypes.TYPEID_GAMEOBJECT:
                case ObjectTypes.TYPEID_DYNAMICOBJECT:
                case ObjectTypes.TYPEID_CORPSE:
                    if (!ParseMovementUpdateBlock(gr, sb, swe, data, objectTypeId, obj))
                    {
                        return(false);
                    }
                    if (!ParseValuesUpdateBlock(gr, sb, swe, data, objectTypeId, updatetype, obj))
                    {
                        return(false);
                    }
                    return(true);

                default:
                    swe.WriteLine("Unknown object type {0}", objectTypeId);
                    return(false);
                }

            case UpdateTypes.UPDATETYPE_OUT_OF_RANGE_OBJECTS:
            case UpdateTypes.UPDATETYPE_NEAR_OBJECTS:
                uint objects_count = gr.ReadUInt32();

                if (objects_count > 1000)     // we read packet wrong way
                {
                    long pos = gr.BaseStream.Position;
                    swe.WriteLine("error position {0}", pos.ToString("X2"));

                    swe.WriteLine("Too many {0} objects", updatetype);
                    return(false);
                }

                sb.AppendLine("guids_count " + objects_count);

                for (uint i = 0; i < objects_count; i++)
                {
                    sb.AppendLine("Guid" + i + ": " + gr.ReadPackedGuid().ToString("X16"));
                }
                return(true);

            default:
                swe.WriteLine("Unknown updatetype {0}", updatetype);
                return(false);
            }
        }
Esempio n. 18
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadByte();
        }
Esempio n. 19
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();

            switch (version)
            {
            case 6:
            {
                m_NegativeAttributes = new NegativeAttributes(this, reader);


                m_MaxHitPoints = reader.ReadInt();
                m_HitPoints    = reader.ReadInt();

                _VvVItem   = reader.ReadBool();
                _Owner     = reader.ReadMobile();
                _OwnerName = reader.ReadString();

                goto case 5;
            }

            case 5:
            {
                m_Quality = (BookQuality)reader.ReadByte();

                goto case 4;
            }

            case 4:
            {
                m_EngravedText = reader.ReadString();

                goto case 3;
            }

            case 3:
            {
                m_Crafter = reader.ReadMobile();
                goto case 2;
            }

            case 2:
            {
                m_Slayer  = (SlayerName)reader.ReadInt();
                m_Slayer2 = (SlayerName)reader.ReadInt();
                goto case 1;
            }

            case 1:
            {
                m_AosAttributes   = new AosAttributes(this, reader);
                m_AosSkillBonuses = new AosSkillBonuses(this, reader);

                goto case 0;
            }

            case 0:
            {
                m_Content = reader.ReadULong();
                m_Count   = reader.ReadInt();

                break;
            }
            }

            if (m_AosAttributes == null)
            {
                m_AosAttributes = new AosAttributes(this);
            }

            if (m_AosSkillBonuses == null)
            {
                m_AosSkillBonuses = new AosSkillBonuses(this);
            }

            if (m_NegativeAttributes == null)
            {
                m_NegativeAttributes = new NegativeAttributes(this);
            }

            if (Core.AOS && Parent is Mobile)
            {
                m_AosSkillBonuses.AddTo((Mobile)Parent);
            }

            int strBonus = m_AosAttributes.BonusStr;
            int dexBonus = m_AosAttributes.BonusDex;
            int intBonus = m_AosAttributes.BonusInt;

            if (Parent is Mobile && (strBonus != 0 || dexBonus != 0 || intBonus != 0))
            {
                Mobile m = (Mobile)Parent;

                string modName = Serial.ToString();

                if (strBonus != 0)
                {
                    m.AddStatMod(new StatMod(StatType.Str, modName + "Str", strBonus, TimeSpan.Zero));
                }

                if (dexBonus != 0)
                {
                    m.AddStatMod(new StatMod(StatType.Dex, modName + "Dex", dexBonus, TimeSpan.Zero));
                }

                if (intBonus != 0)
                {
                    m.AddStatMod(new StatMod(StatType.Int, modName + "Int", intBonus, TimeSpan.Zero));
                }
            }

            if (Parent is Mobile)
            {
                ((Mobile)Parent).CheckStatTimers();
            }
        }
Esempio n. 20
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();

            switch (version)
            {
            case 4:
            {
                m_SecureLevel = (SecureLevel)reader.ReadInt();
                goto case 3;
            }

            case 3:
            case 2:
            {
                BookContent content = DefaultContent;

                SaveFlags flags = (SaveFlags)reader.ReadByte();

                if ((flags & SaveFlags.Title) != 0)
                {
                    m_Title = Utility.Intern(reader.ReadString());
                }
                else if (content != null)
                {
                    m_Title = content.Title;
                }

                if ((flags & SaveFlags.Author) != 0)
                {
                    m_Author = reader.ReadString();
                }
                else if (content != null)
                {
                    m_Author = content.Author;
                }

                m_Writable = (flags & SaveFlags.Writable) != 0;

                if ((flags & SaveFlags.Content) != 0)
                {
                    m_Pages = new BookPageInfo[reader.ReadEncodedInt()];

                    for (int i = 0; i < m_Pages.Length; ++i)
                    {
                        m_Pages[i] = new BookPageInfo(reader);
                    }
                }
                else
                {
                    if (content != null)
                    {
                        m_Pages = content.Copy();
                    }
                    else
                    {
                        m_Pages = new BookPageInfo[0];
                    }
                }

                break;
            }

            case 1:
            case 0:
            {
                m_Title    = reader.ReadString();
                m_Author   = reader.ReadString();
                m_Writable = reader.ReadBool();

                if (version == 0 || reader.ReadBool())
                {
                    m_Pages = new BookPageInfo[reader.ReadInt()];

                    for (int i = 0; i < m_Pages.Length; ++i)
                    {
                        m_Pages[i] = new BookPageInfo(reader);
                    }
                }
                else
                {
                    BookContent content = DefaultContent;

                    if (content != null)
                    {
                        m_Pages = content.Copy();
                    }
                    else
                    {
                        m_Pages = new BookPageInfo[0];
                    }
                }

                break;
            }
            }

            if (version < 3 && (Weight == 1 || Weight == 2))
            {
                Weight = -1;
            }
        }
Esempio n. 21
0
        private static bool ParseValuesUpdateBlock(GenericReader gr, StringBuilder sb, StreamWriter swe, StreamWriter data, ObjectTypes objectTypeId, UpdateTypes updatetype, WoWObject obj)
        {
            sb.AppendLine("=== values_update_block_start ===");

            byte blocks_count = gr.ReadByte(); // count of update blocks (4 bytes for each update block)

            sb.AppendLine("Bit mask blocks count: " + blocks_count);

            int[] updatemask = new int[blocks_count]; // create array of update blocks
            for (int j = 0; j < blocks_count; j++)
            {
                updatemask[j] = gr.ReadInt32(); // populate array of update blocks with data
            }
            Mask = new BitArray(updatemask);

            int reallength = Mask.Count; // bitmask size (bits)

            int  bitmask_max_size = 0;
            uint values_end       = 0;

            switch (objectTypeId)
            {
            case ObjectTypes.TYPEID_ITEM:
                bitmask_max_size = 64;
                values_end       = UpdateFieldsLoader.ITEM_END;
                break;

            case ObjectTypes.TYPEID_CONTAINER:
                bitmask_max_size = 160;
                values_end       = UpdateFieldsLoader.CONTAINER_END;
                break;

            case ObjectTypes.TYPEID_UNIT:
                bitmask_max_size = 256;
                values_end       = UpdateFieldsLoader.UNIT_END;
                break;

            case ObjectTypes.TYPEID_PLAYER:
                bitmask_max_size = 1536;     // 2.3.2 - 1472
                values_end       = UpdateFieldsLoader.PLAYER_END;
                break;

            case ObjectTypes.TYPEID_GAMEOBJECT:
                bitmask_max_size = 32;
                values_end       = UpdateFieldsLoader.GO_END;
                break;

            case ObjectTypes.TYPEID_DYNAMICOBJECT:
                bitmask_max_size = 32;
                values_end       = UpdateFieldsLoader.DO_END;
                break;

            case ObjectTypes.TYPEID_CORPSE:
                bitmask_max_size = 64;
                values_end       = UpdateFieldsLoader.CORPSE_END;
                break;
            }

            if (reallength > bitmask_max_size)
            {
                long pos = gr.BaseStream.Position;
                swe.WriteLine("error position {0}", pos.ToString("X2"));

                swe.WriteLine("error while parsing {0} values update block, count {1}", objectTypeId, reallength);
                return(false);
            }

            for (int index = 0; index < reallength; index++)
            {
                if (index > values_end)
                {
                    break;
                }

                if (Mask[index])
                {
                    UpdateField uf = new UpdateField();
                    switch (objectTypeId)
                    {
                    case ObjectTypes.TYPEID_ITEM:
                    case ObjectTypes.TYPEID_CONTAINER:
                        uf = UpdateFieldsLoader.item_uf[index];
                        break;

                    case ObjectTypes.TYPEID_UNIT:
                    case ObjectTypes.TYPEID_PLAYER:
                        uf = UpdateFieldsLoader.unit_uf[index];
                        break;

                    case ObjectTypes.TYPEID_GAMEOBJECT:
                        uf = UpdateFieldsLoader.go_uf[index];
                        break;

                    case ObjectTypes.TYPEID_DYNAMICOBJECT:
                        uf = UpdateFieldsLoader.do_uf[index];
                        break;

                    case ObjectTypes.TYPEID_CORPSE:
                        uf = UpdateFieldsLoader.corpse_uf[index];
                        break;
                    }
                    ReadAndDumpField(uf, sb, gr, updatetype, data, obj);
                }
            }

            if ((objectTypeId == ObjectTypes.TYPEID_GAMEOBJECT || objectTypeId == ObjectTypes.TYPEID_UNIT) && (updatetype == UpdateTypes.UPDATETYPE_CREATE_OBJECT || updatetype == UpdateTypes.UPDATETYPE_CREATE_OBJECT2) && obj.IsNew)
            {
                obj.Save();
            }

            sb.AppendLine("=== values_update_block_end ===");
            return(true);
        }
Esempio n. 22
0
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();

			switch ( version ) 
			{ 
				case 1:
				{
					m_VilleRace = (VilleRaciale)reader.ReadByte();
					
					goto case 0;
				}

				case 0:
				{

					m_Citoyens = reader.ReadMobileList();
					m_Candidats = reader.ReadMobileList();
					m_HLL = reader.ReadMobileList();
					m_Gardes = reader.ReadMobileList();
					m_gardes_pnj = reader.ReadItemList();
					m_Maire = (PlayerMobile)reader.ReadMobile();
					m_Conseiller = (PlayerMobile)reader.ReadMobile();
					m_Ambassadeur = (PlayerMobile)reader.ReadMobile();
					m_Capitaine = (PlayerMobile)reader.ReadMobile();
					m_Pomi = (POMI)reader.ReadItem();	
					m_MaireCloak = (PomiCloak)reader.ReadItem();
					m_ConseillerCloak = (PomiCloak)reader.ReadItem();
					m_AmbassadeurCloak = (PomiCloak)reader.ReadItem();
					m_CapitaineCloak = (PomiCloak)reader.ReadItem();
					m_CapitaineBook = (CapitaineBook)reader.ReadItem();
					m_GardeCloak = reader.ReadItemList();
					m_Nom = reader.ReadString();
					m_Charte0 = reader.ReadString();
					m_Charte1 = reader.ReadString();
					m_Charte2 = reader.ReadString();
					m_Charte3 = reader.ReadString();
					m_Charte4 = reader.ReadString();
					m_Charte5 = reader.ReadString();
					m_Charte6 = reader.ReadString();
					m_Charte7 = reader.ReadString();
					m_Votants = reader.ReadMobileList();
					m_Elections = reader.ReadMobileList();
					m_Resultats = reader.ReadMobileList();
					m_EndDate = reader.ReadDateTime();
					m_ElecTimer = new ElectionTimer(this, m_EndDate - DateTime.Now);
					m_ElecTimer.Start();
					m_ElecDelay = reader.ReadTimeSpan();
					m_MaxDistance = reader.ReadInt();
					m_Allies = reader.ReadItemList();
					m_Paix = reader.ReadItemList();
					m_Guerre = reader.ReadItemList();
					m_Neutre = reader.ReadItemList();
					m_Box = (TownBox)reader.ReadItem();
					break;
				}
			}

	}
Esempio n. 23
0
		public override void Deserialize( GenericReader gr )
		{
			int version = gr.ReadInt();
			//	id = gr.ReadInt();
			UInt64 g = gr.ReadInt64();				
			SpawnerLink = null;//(BaseSpawner)MobileList.TempSpawner[ g ];

			int esu = 0;
			int ech = 0;
			
			esu = gr.ReadInt();
			ech = gr.ReadInt();
			name = gr.ReadString();
			if ( version > 0 )
				classe = (Classes)gr.ReadInt();
			talent = gr.ReadInt();
			Level = gr.ReadInt();
			model = gr.ReadInt();
			exp = (uint)gr.ReadInt();
			guildId = (uint)gr.ReadInt();
			petLevel = (uint)gr.ReadInt();
			petCreatureFamily = (uint)gr.ReadInt();
			petDisplayId = (uint)gr.ReadInt();
			speed  = gr.ReadFloat();
			size = gr.ReadFloat();					
			faction = (Factions)gr.ReadInt();
			str = gr.ReadInt();
			agility = gr.ReadInt();
			stamina = gr.ReadInt();
			iq = gr.ReadInt();
			spirit = gr.ReadInt();
			baseStr = gr.ReadFloat();
			baseAgility = gr.ReadFloat();
			baseStamina = gr.ReadFloat();
			baseIq = gr.ReadFloat();
			baseSpirit = gr.ReadFloat();
			walkSpeed = gr.ReadFloat();
			if ( walkSpeed == 0 )
				walkSpeed = 4.7777f;
			runSpeed = gr.ReadFloat();
			if ( runSpeed == 0 )
				runSpeed = 7f;
			swimSpeed = gr.ReadFloat();
			if ( swimSpeed == 0 )
				swimSpeed = 4.72f;
			swimBackSpeed = gr.ReadFloat();
			if ( swimBackSpeed == 0 )
				swimBackSpeed = 2.5f;
			hitPoints = gr.ReadInt();
			mana = gr.ReadInt();
			energy = gr.ReadInt();
			rage = gr.ReadInt();
			focus = gr.ReadInt();
			baseHitPoints = gr.ReadInt();
			baseMana = gr.ReadInt();
			baseEnergy = gr.ReadInt();
			baseRage = gr.ReadInt();
			baseFocus = gr.ReadInt();

			block = gr.ReadInt();
			armor = gr.ReadInt();
			resistHoly = gr.ReadInt();
			resistFire = gr.ReadInt();
			resistNature = gr.ReadInt();
			resistFrost = gr.ReadInt();
			resistShadow = gr.ReadInt();
			resistArcane = gr.ReadInt();

			int nSkills = gr.ReadInt();
			for(int t = 0;t < nSkills;t++ )
			{
				ushort skill = (ushort)gr.ReadShort();
				allSkills[ skill ] = Skill.Deserialize( gr, t );
			}

			int nSpells = gr.ReadInt();
			for(int t = 0;t < nSpells;t++ )
			{
				ushort spell = (ushort)gr.ReadShort();
				byte place = gr.ReadByte();
				knownAbilities[ (int)spell ] = (int)place;
				/*	if ( TalentDescription.IsTalent( (int)spell ) )
					{
						if ( onInitialiseTalent[ (int)spell ] != null )
						{
							( onInitialiseTalent[ (int)spell ] as TalentHandlers.TalentHandler )( Abilities.abilities[ (int)spell ], this );
						}
					//	this.AddPermanentAura( Abilities.abilities[ (int)spell ], new Aura() );
					//	permanentAura.Add( spell );
					}*/
			}

			int nTalentList = gr.ReadInt();
			for(int t = 0;t < nTalentList;t++ )
			{
				int spell = gr.ReadInt();
				int lev = gr.ReadInt();
				talentList[ spell ] = (int)lev;
			}
			
			if ( gr.ReadInt() != 0 )
				freeze = true;
			int nit = gr.ReadInt();
			for(int t = 0;t < nit;t++ )
			{
				int n = gr.ReadInt();
				if ( n == 1 )
					items[ t ] = Item.Load( gr );
				else
					items[ t ] = null;
			}
			if ( gr.ReadInt() != 0 )
				movementChange = true;

			manaType = gr.ReadInt();
			professions = gr.ReadByte();
			standState = (StandStates)gr.ReadInt();
			base.Deserialize( gr );
			moveVector = new MoveVector( this, X, Y, Z );
			//	if ( this is BaseSpawner )
			//		MobileList.TempSpawner[ Guid ] = this;
			if ( esu != 0 )
				MobileList.TempSummon[ Guid ] = this;
			if ( ech != 0 )
				MobileList.TempSummon[ Guid ] = this;
			//movementTimer = new MovementTimer( this );
		}
Esempio n. 24
0
        public void Deserialize(GenericReader reader)
        {
            Flag = reader.ReadFlag <DataType>();
            Type = Flag.ToType();

            switch (Flag)
            {
            case DataType.Null:
                Value = null;
                break;

            case DataType.Bool:
                Value = reader.ReadBool();
                break;

            case DataType.Char:
                Value = reader.ReadChar();
                break;

            case DataType.Byte:
                Value = reader.ReadByte();
                break;

            case DataType.SByte:
                Value = reader.ReadSByte();
                break;

            case DataType.Short:
                Value = reader.ReadShort();
                break;

            case DataType.UShort:
                Value = reader.ReadUShort();
                break;

            case DataType.Int:
                Value = reader.ReadInt();
                break;

            case DataType.UInt:
                Value = reader.ReadUInt();
                break;

            case DataType.Long:
                Value = reader.ReadLong();
                break;

            case DataType.ULong:
                Value = reader.ReadULong();
                break;

            case DataType.Float:
                Value = reader.ReadFloat();
                break;

            case DataType.Decimal:
                Value = reader.ReadDecimal();
                break;

            case DataType.Double:
                Value = reader.ReadDouble();
                break;

            case DataType.String:
                Value = reader.ReadString() ?? String.Empty;
                break;

            case DataType.DateTime:
                Value = reader.ReadDateTime();
                break;

            case DataType.TimeSpan:
                Value = reader.ReadTimeSpan();
                break;
            }
        }
Esempio n. 25
0
		public override void Deserialize(GenericReader reader)
		{
			base.Deserialize(reader);

			int version = reader.ReadInt();

			switch (version)
			{
				case 5:
					{
						m_Quality = (BookQuality)reader.ReadByte();

						goto case 4;
					}
				case 4:
					{
						m_EngravedText = reader.ReadString();

						goto case 3;
					}
				case 3:
					{
						m_Crafter = reader.ReadMobile();
						goto case 2;
					}
				case 2:
					{
						m_Slayer = (SlayerName)reader.ReadInt();
						m_Slayer2 = (SlayerName)reader.ReadInt();
						goto case 1;
					}
				case 1:
					{
						m_AosAttributes = new AosAttributes(this, reader);
						m_AosSkillBonuses = new AosSkillBonuses(this, reader);

						goto case 0;
					}
				case 0:
					{
						m_Content = reader.ReadULong();
						m_Count = reader.ReadInt();

						break;
					}
			}

			if (m_AosAttributes == null)
			{
				m_AosAttributes = new AosAttributes(this);
			}

			if (m_AosSkillBonuses == null)
			{
				m_AosSkillBonuses = new AosSkillBonuses(this);
			}

			if (Core.AOS && Parent is Mobile)
			{
				m_AosSkillBonuses.AddTo((Mobile)Parent);
			}

			int strBonus = m_AosAttributes.BonusStr;
			int dexBonus = m_AosAttributes.BonusDex;
			int intBonus = m_AosAttributes.BonusInt;

			if (Parent is Mobile && (strBonus != 0 || dexBonus != 0 || intBonus != 0))
			{
				Mobile m = (Mobile)Parent;

				string modName = Serial.ToString();

				if (strBonus != 0)
				{
					m.AddStatMod(new StatMod(StatType.Str, modName + "Str", strBonus, TimeSpan.Zero));
				}

				if (dexBonus != 0)
				{
					m.AddStatMod(new StatMod(StatType.Dex, modName + "Dex", dexBonus, TimeSpan.Zero));
				}

				if (intBonus != 0)
				{
					m.AddStatMod(new StatMod(StatType.Int, modName + "Int", intBonus, TimeSpan.Zero));
				}
			}

			if (Parent is Mobile)
			{
				((Mobile)Parent).CheckStatTimers();
			}
		}
Esempio n. 26
0
        public override void Deserialize( GenericReader reader )
        {
            base.Deserialize( reader );

            int version = reader.ReadInt();

            switch ( version )
            {
                case 2:
                {
                    SaveFlag flags = (SaveFlag)reader.ReadByte();

                    if ( GetSaveFlag( flags, SaveFlag.MaxItems ) )
                        m_MaxItems = reader.ReadEncodedInt();
                    else
                        m_MaxItems = -1;

                    if ( GetSaveFlag( flags, SaveFlag.GumpID ) )
                        m_GumpID = reader.ReadEncodedInt();
                    else
                        m_GumpID = -1;

                    if ( GetSaveFlag( flags, SaveFlag.DropSound ) )
                        m_DropSound = reader.ReadEncodedInt();
                    else
                        m_DropSound = -1;

                    break;
                }
                case 1:
                {
                    m_MaxItems = reader.ReadInt();
                    goto case 0;
                }
                case 0:
                {
                    if ( version < 1 )
                        m_MaxItems = m_GlobalMaxItems;

                    m_GumpID = reader.ReadInt();
                    m_DropSound = reader.ReadInt();

                    if ( m_GumpID == DefaultGumpID )
                        m_GumpID = -1;

                    if ( m_DropSound == DefaultDropSound )
                        m_DropSound = -1;

                    if ( m_MaxItems == DefaultMaxItems )
                        m_MaxItems = -1;

                    //m_Bounds = new Rectangle2D( reader.ReadPoint2D(), reader.ReadPoint2D() );
                    reader.ReadPoint2D();
                    reader.ReadPoint2D();

                    break;
                }
            }
        }
Esempio n. 27
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();

            switch ( version )
            {
                case 4:
                    {
                        this.m_SecureLevel = (SecureLevel)reader.ReadInt();
                        goto case 3;
                    }
                case 3:
                case 2:
                    {
                        BookContent content = this.DefaultContent;

                        SaveFlags flags = (SaveFlags)reader.ReadByte();

                        if ((flags & SaveFlags.Title) != 0)
                            this.m_Title = Utility.Intern(reader.ReadString());
                        else if (content != null)
                            this.m_Title = content.Title;

                        if ((flags & SaveFlags.Author) != 0)
                            this.m_Author = reader.ReadString();
                        else if (content != null)
                            this.m_Author = content.Author;

                        this.m_Writable = (flags & SaveFlags.Writable) != 0;

                        if ((flags & SaveFlags.Content) != 0)
                        {
                            this.m_Pages = new BookPageInfo[reader.ReadEncodedInt()];

                            for (int i = 0; i < this.m_Pages.Length; ++i)
                                this.m_Pages[i] = new BookPageInfo(reader);
                        }
                        else
                        {
                            if (content != null)
                                this.m_Pages = content.Copy();
                            else
                                this.m_Pages = new BookPageInfo[0];
                        }

                        break;
                    }
                case 1:
                case 0:
                    {
                        this.m_Title = reader.ReadString();
                        this.m_Author = reader.ReadString();
                        this.m_Writable = reader.ReadBool();

                        if (version == 0 || reader.ReadBool())
                        {
                            this.m_Pages = new BookPageInfo[reader.ReadInt()];

                            for (int i = 0; i < this.m_Pages.Length; ++i)
                                this.m_Pages[i] = new BookPageInfo(reader);
                        }
                        else
                        {
                            BookContent content = this.DefaultContent;

                            if (content != null)
                                this.m_Pages = content.Copy();
                            else
                                this.m_Pages = new BookPageInfo[0];
                        }

                        break;
                    }
            }

            if (version < 3 && (this.Weight == 1 || this.Weight == 2))
                this.Weight = -1;
        }
Esempio n. 28
0
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );
			int version = reader.ReadInt();

			switch ( version )
			{
                case 44:
			        {
			            AntiMacroGump = reader.ReadBool();
			            goto case 43;
			        }
                case 43:
                    {
                        ShowTipsOnLogin = reader.ReadBool();
                        goto case 42;
                    }
                case 42:
			        {
			            AllowMulti = reader.ReadBool();
			            goto case 41;
			        }
                case 41:
                    {
                        GameInfoGumpType = (GameInfoGumpType)reader.ReadInt();
                        goto case 40;
                    }
                case 40:
                    {
                        m_EventType = (EventType)reader.ReadByte();
                        m_CurrentEvent = reader.ReadItem() as BaseGame;
                        goto case 39;
                    }
                case 39:
			        {
			            TempCheck = reader.ReadBool();
			            goto case 38;
			        }
                case 38:
                    {
                        m_AutoStabled = reader.ReadStrongMobileList();
                        m_AnkhNextUse = reader.ReadDateTime();
                        m_PeacedUntil = reader.ReadDateTime();
                        goto case 37;
                    }
                case 37:
			        {
			            ShowArriveMsg = reader.ReadBool();
			            goto case 36;
			        }
                case 36:
                    {
                        m_Rating = reader.ReadInt();
                        m_TournamentRating = reader.ReadInt();
                        m_CurrentEvent = null;
                        goto case 35;
                    }
                case 35:
                    {
                        m_Snoopers = reader.ReadStrongMobileList();
                        goto case 34;
                    }
                case 34:
                    m_HasStartingSkillBoost = reader.ReadBool();
                    goto case 33;
                case 33:
			        {
			            m_OriginalHairHue = reader.ReadInt();
			            m_OriginalHairItemID = reader.ReadInt();
			            m_OriginalHue = reader.ReadInt();
			            m_HasCustomRace = reader.ReadBool();
			            goto case 32;
			        }
                case 32:
                    VirtualArmor = reader.ReadInt();
                    goto case 31;
                case 31:
                    m_PlayerGuildGameTime = reader.ReadTimeSpan();
                    goto case 30;
                case 30:
                    m_AlwaysMurderer = reader.ReadBool();
                    goto case 29;
                case 29:
                    m_Imported = reader.ReadBool();
                    goto case 28;
                case 28:
                    /*Item nullItem = reader.ReadItem();
                    goto case 27;*/
                case 27:
                    m_Stoned = reader.ReadBool();
                    goto case 26;
				case 26:
					UseUnicodeSpeech = reader.ReadBool();
					goto case 25;
				case 25:
				{
					int recipeCount = reader.ReadInt();

					if( recipeCount > 0 )
					{
						m_AcquiredRecipes = new Dictionary<int, bool>();

						for( int i = 0; i < recipeCount; i++ )
						{
							int r = reader.ReadInt();
							if( reader.ReadBool() )	//Don't add in recipies which we haven't gotten or have been removed
								m_AcquiredRecipes.Add( r, true );
						}
					}
					goto case 24;
				}
				case 24:
				{
					m_LastHonorLoss = reader.ReadDeltaTime();
					goto case 23;
				}
				case 23:
				{
					m_ChampionTitles = new ChampionTitleInfo( reader );
					goto case 22;
				}
				case 22:
				{
					m_LastValorLoss = reader.ReadDateTime();
					goto case 21;
				}
				case 21:
				{
					m_ToTItemsTurnedIn = reader.ReadEncodedInt();
					m_ToTTotalMonsterFame = reader.ReadInt();
					goto case 20;
				}
				case 20:
				{
					AllianceMessageHue = reader.ReadEncodedInt();
					GuildMessageHue = reader.ReadEncodedInt();

					goto case 19;
				}
				case 19:
				{
					int rank = reader.ReadEncodedInt();
					int maxRank = RankDefinition.Ranks.Length -1;
					if( rank > maxRank )
						rank = maxRank;

					m_GuildRank = RankDefinition.Ranks[rank];
					LastOnline = reader.ReadDateTime();
					goto case 18;
				}
				case 18:
				{
					m_SolenFriendship = (SolenFriendship) reader.ReadEncodedInt();

					goto case 17;
				}
				case 17: // changed how DoneQuests is serialized
				case 16:
				{
					m_Quest = QuestSerializer.DeserializeQuest( reader );

					if ( m_Quest != null )
						m_Quest.From = this;

					int count = reader.ReadEncodedInt();

					if ( count > 0 )
					{
						m_DoneQuests = new List<QuestRestartInfo>();

						for ( int i = 0; i < count; ++i )
						{
							Type questType = QuestSerializer.ReadType( QuestSystem.QuestTypes, reader );
							DateTime restartTime;

							if ( version < 17 )
								restartTime = DateTime.MaxValue;
							else
								restartTime = reader.ReadDateTime();

							m_DoneQuests.Add( new QuestRestartInfo( questType, restartTime ) );
						}
					}

					Profession = reader.ReadEncodedInt();
					goto case 15;
				}
				case 15:
				{
					m_LastCompassionLoss = reader.ReadDeltaTime();
					goto case 14;
				}
				case 14:
				{
					m_CompassionGains = reader.ReadEncodedInt();

					if ( m_CompassionGains > 0 )
						m_NextCompassionDay = reader.ReadDeltaTime();

					goto case 13;
				}
				case 13: // just removed m_PayedInsurance list
				case 12:
				{
					m_BOBFilter = new BOBFilter( reader );
					goto case 11;
				}
				case 11:
				{
					if ( version < 13 )
					{
						List<Item> payed = reader.ReadStrongItemList();

						for ( int i = 0; i < payed.Count; ++i )
							payed[i].PayedInsurance = true;
					}

					goto case 10;
				}
				case 10:
				{
					if ( reader.ReadBool() )
					{
						m_HairModID = reader.ReadInt();
						m_HairModHue = reader.ReadInt();
						m_BeardModID = reader.ReadInt();
						m_BeardModHue = reader.ReadInt();
					}

					goto case 9;
				}
				case 9:
				{
					SavagePaintExpiration = reader.ReadTimeSpan();

					if ( SavagePaintExpiration > TimeSpan.Zero )
					{
						BodyMod = ( Female ? 184 : 183 );
						HueMod = 0;
					}

					goto case 8;
				}
				case 8:
				{
					NpcGuild = (NpcGuild)reader.ReadInt();
					NpcGuildJoinTime = reader.ReadDateTime();
					NpcGuildGameTime = reader.ReadTimeSpan();
					goto case 7;
				}
				case 7:
				{
					m_PermaFlags = reader.ReadStrongMobileList();
					goto case 6;
				}
				case 6:
				{
					NextTailorBulkOrder = reader.ReadTimeSpan();
					goto case 5;
				}
				case 5:
				{
					NextSmithBulkOrder = reader.ReadTimeSpan();
					goto case 4;
				}
				case 4:
				{
					m_LastJusticeLoss = reader.ReadDeltaTime();
					m_JusticeProtectors = reader.ReadStrongMobileList();
					goto case 3;
				}
				case 3:
				{
					m_LastSacrificeGain = reader.ReadDeltaTime();
					m_LastSacrificeLoss = reader.ReadDeltaTime();
					m_AvailableResurrects = reader.ReadInt();
					goto case 2;
				}
				case 2:
				{
					m_Flags = (PlayerFlag)reader.ReadInt();
					goto case 1;
				}
				case 1:
				{
					m_LongTermElapse = reader.ReadTimeSpan();
					m_ShortTermElapse = reader.ReadTimeSpan();
					m_GameTime = reader.ReadTimeSpan();
					goto case 0;
				}
				case 0:
				{
                    if (version < 43)
                        ShowTipsOnLogin = true;

                    if (version < 38)
                        m_AutoStabled = new List<Mobile>();
					break;
				}
			}

			// Professions weren't verified on 1.0 RC0
			if ( !CharacterCreation.VerifyProfession( Profession ) )
				Profession = 0;

			if ( m_PermaFlags == null )
				m_PermaFlags = new List<Mobile>();

            if ( m_Snoopers == null)
                m_Snoopers = new List<Mobile>();

			if ( m_JusticeProtectors == null )
				m_JusticeProtectors = new List<Mobile>();

			if ( m_BOBFilter == null )
				m_BOBFilter = new BOBFilter();

			if( m_GuildRank == null )
				m_GuildRank = RankDefinition.Member;	//Default to member if going from older verstion to new version (only time it should be null)

			if( LastOnline == DateTime.MinValue && Account != null )
				LastOnline = ((Account)Account).LastLogin;

			if( m_ChampionTitles == null )
				m_ChampionTitles = new ChampionTitleInfo();

            if (AccessLevel > AccessLevel.Player)
                m_IgnoreMobiles = true;

			List<Mobile> list = Stabled;

			for ( int i = 0; i < list.Count; ++i )
			{
				BaseCreature bc = list[i] as BaseCreature;

				if ( bc != null )
					bc.IsStabled = true;
			}

			CheckAtrophies( this );


			if( Hidden )	//Hiding is the only buff where it has an effect that's serialized.
				AddBuff( new BuffInfo( BuffIcon.HidingAndOrStealth, 1075655 ) );
		}
Esempio n. 29
0
		public override void Deserialize( GenericReader gr )
		{
			base.Deserialize( gr );
			int version = gr.ReadInt();
			if ( version > 6 )
			{
				int nreput = gr.ReadInt();
				for(int t = 0;t < nreput;t++ )
				{
					int krep = gr.ReadInt();
					int vrep = gr.ReadInt();
					reputationAdjustments[ krep ] = vrep;
				}
			}
			if ( version > 5 )
			{
				int nact = gr.ReadInt();
				for(int t = 0;t < nact;t++ )
					actionBar.Add( new Action( gr ) );
			}
			if ( version > 4 )
			{
				int nf = gr.ReadInt();
				for(int t = 0;t < nf;t++ )
				{
					UInt64 gu = (UInt64)gr.ReadInt64();
					friends.Add( gu );
					string user = gr.ReadString();
					friends.Add( user );
				}
			}
			if ( version > 2 )
			{
				BindingPointX = gr.ReadFloat();
				BindingPointY = gr.ReadFloat();
				BindingPointZ = gr.ReadFloat();
				BindingPointMapId = (UInt16)gr.ReadInt();
			}
			if ( version > 1 )
			{
				bool pa = gr.ReadBool();
				if ( pa )
				{
					petActions = new int[ 11 ];
					for(int t = 0;t < 11;t++ )
						petActions[ t ] = gr.ReadInt();
				}
			}
			int sum = gr.ReadInt();
			if ( sum != 0 )
			{
				UInt64 g = gr.ReadInt64();
				if ( version > 7 )
				{
					int sid = gr.ReadInt();
					Summon = new BaseCreature( gr );
					Summon.Id = sid;
				}
			//	Summon = (Mobile)MobileList.TempSummon[ g ];
				Summon.SummonedBy = this;					
				( Summon as BaseCreature ).AIEngine = new SummonedAI( this, Summon as BaseCreature );
			}
			sum = gr.ReadInt();
			if ( sum != 0 )
			{
				Charm = (Mobile)MobileList.TempSummon[ gr.ReadInt64() ];
				Charm.CharmedBy = this;
				( Charm as BaseCreature ).AIEngine = new SummonedAI( this, Charm as BaseCreature );
			}
			CorpseLocationX = gr.ReadFloat();
			CorpseLocationY = gr.ReadFloat();
			CorpseLocationZ = gr.ReadFloat();
			if ( version > 3 )
				CorpseMapId = (ushort)gr.ReadShort();
			corpsGuid = gr.ReadInt64();
			zones = new uint[ 32 ];
			for(int t = 0;t < 32;t++ )
				zones[ t ] = (uint)gr.ReadInt();
			int exi = gr.ReadInt();
			if ( exi == 1 )
			{
				mark = new Position( gr.ReadFloat(), gr.ReadFloat(), gr.ReadFloat(), gr.ReadInt() );
			}
			ammoType = gr.ReadInt();
			race = (Races)gr.ReadByte();
			if ( version == 0 )
				Classe = (Classes)gr.ReadByte();
			gender = gr.ReadByte();
			skin = gr.ReadByte();
			face = gr.ReadByte();
			hairStyle = gr.ReadByte();
			hairColour = gr.ReadByte();
			facialHair = gr.ReadByte();

			copper = (uint)gr.ReadInt();
			int nactq = 20;
			for(int t = 0;t < nactq;t++ )
			{
				int vv = gr.ReadInt();
				if ( vv == 1 )
				{
					ActiveQuest aq = new ActiveQuest( gr );
					if ( aq.Id > 0 )
						AddQuest( aq );
				}
			}

			int nq = gr.ReadInt();
			for(int t = 0;t < nq;t++ )
			{
				int id = gr.ReadInt();
				questsDone[ id ] = true;
			}
			for(int g = 0;g < 8;g++ )
			{
				int field = gr.ReadInt();
				TaxiField[ g ] = (uint)field;
			}
		//	RunSpeed = 11f;
			
		}
Esempio n. 30
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadInt();

            switch (version)
            {
            case 21:
                _FastWalkPrevention = reader.ReadBool();
                goto case 20;

            case 20:
            {
                OnPlayerDeathUberScript     = reader.ReadString();
                CreaturesStealthLikePlayers = reader.ReadBool();
            }
                goto case 19;

            case 19:
                TreasureMapMobSpawnChance = reader.ReadDouble();
                goto case 18;

            case 18:
                OnLoginUberScript = reader.ReadString();
                goto case 17;

            case 17:
                AllowThirdDawnClient = reader.ReadBool();
                goto case 16;

            case 16:
            {
                MaxBODGoldRewardAllowed = reader.ReadInt();
                HoursBetweenBODs        = reader.ReadDouble();
                BondingAbandonDelay     = reader.ReadTimeSpan();
            }
                goto case 15;

            case 15:
            {
                TreasureChestDamageModifierChance = reader.ReadDouble();
                TreasureChestVanqChance           = reader.ReadDouble();
                TreasureChestPowerChance          = reader.ReadDouble();
                TreasureChestForceChance          = reader.ReadDouble();
                TreasureChestMightChance          = reader.ReadDouble();

                TreasureChestDurabilityModifierChance = reader.ReadDouble();
                TreasureChestIndestructibleChance     = reader.ReadDouble();
                TreasureChestFortifiedChance          = reader.ReadDouble();
                TreasureChestMassiveChance            = reader.ReadDouble();
                TreasureChestSubstantialChance        = reader.ReadDouble();

                TreasureChestAccuracyModifierChance = reader.ReadDouble();
                TreasureChestSupremelyChance        = reader.ReadDouble();
                TreasureChestExceedinglyChance      = reader.ReadDouble();
                TreasureChestEminentlyChance        = reader.ReadDouble();
                TreasureChestSurpassinglyChance     = reader.ReadDouble();
            }
                goto case 14;

            case 14:
            {
                AllowRedsInTown             = reader.ReadBool();
                CompanionMinutesBetweenHelp = reader.ReadDouble();
                ParagonRevertInHours        = reader.ReadDouble();
                AllowCriminalUseGate        = reader.ReadBool();
            }
                goto case 13;

            case 13:
            {
                AllowAllPossessedMobsSpeedBoost = reader.ReadBool();
                AllowPseudoseerMobsSpeedBoost   = reader.ReadBool();
            }
                goto case 12;

            case 12:
                JustMurderedMinutesTracked = reader.ReadDouble();
                goto case 11;

            case 11:
                SpeedHackSeriousThreshold = reader.ReadDouble();
                goto case 10;

            case 10:
            {
                ParagonChestPlatinumPerLevel = reader.ReadInt();
                MobStatueChance = reader.ReadDouble();
            }
                goto case 9;

            case 9:
            {
                ParagonChestChance           = reader.ReadDouble();
                PlatinumPerMissedDamageLevel = reader.ReadInt();
                ReplaceVanqWithSkillScrolls  = reader.ReadBool();
            }
                goto case 8;

            case 8:
            {
                ParagonMaxChance = reader.ReadDouble();
                ParagonMinChance = reader.ReadDouble();
            }
                goto case 7;

            case 7:
                HighestDamageLevelSpawn = reader.ReadInt();
                goto case 6;

            case 6:
                reader.ReadByte();
                goto case 5;

            case 5:
            {
                reader.ReadBool();
                _FastWalkThreshold = reader.ReadTimeSpan();
            }
                goto case 4;

            case 4:
                CreatureLootDropMultiplier = reader.ReadDouble();
                goto case 3;

            case 3:
                MovePSeerToLastPossessed = reader.ReadBool();
                goto case 2;

            case 2:
            {
                int numPseudoseers = reader.ReadInt();

                for (int i = 0; i < numPseudoseers; i++)
                {
                    PseudoseerUserNamesToReinstate.Add(reader.ReadString());
                    PseudoseerPermissionsToReinstate.Add(reader.ReadString());
                }
            }
                goto case 1;

            case 1:
            {
                CurrentPermissionsClipboard = reader.ReadString();
                SeerDuration = reader.ReadTimeSpan();
                MessageStaff = reader.ReadBool();
            }
            break;
            }

            _Instance = this;
        }
Esempio n. 31
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            this.LootType = LootType.Blessed;

            if (Core.SE && this.Weight == 3.0)
                this.Weight = 1.0;

            int version = reader.ReadInt();

            switch ( version )
            {
                case 3:
                    {
                        this.m_Quality = (BookQuality)reader.ReadByte();		
                        goto case 2;
                    }
                case 2:
                    {
                        this.m_Crafter = reader.ReadMobile();
                        goto case 1;
                    }
                case 1:
                    {
                        this.m_Level = (SecureLevel)reader.ReadInt();
                        goto case 0;
                    }
                case 0:
                    {
                        int count = reader.ReadInt();

                        this.m_Entries = new List<RunebookEntry>(count);

                        for (int i = 0; i < count; ++i)
                            this.m_Entries.Add(new RunebookEntry(reader));

                        this.m_Description = reader.ReadString();
                        this.m_CurCharges = reader.ReadInt();
                        this.m_MaxCharges = reader.ReadInt();
                        this.m_DefaultIndex = reader.ReadInt();

                        break;
                    }
            }
        }
Esempio n. 32
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadByte();
        }
Esempio n. 33
0
        public AdresseeEntry(GenericReader reader)
        {
            int version = reader.ReadByte();

            m_Adressee = reader.ReadMobile();
        }
Esempio n. 34
0
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();

			switch ( version )
			{
				case 3:
				{
					m_Quality = (BookQuality) reader.ReadByte();		
					goto case 2;
				}
				case 2:
				{
					m_Crafter = reader.ReadMobile();
					goto case 1;
				}
				case 1:
				case 0:
				{
					int count = reader.ReadInt();

					m_Entries = new List<RunebookEntry>( count );

					for ( int i = 0; i < count; ++i )
						m_Entries.Add( new RunebookEntry( reader ) );

					m_Description = reader.ReadString();
					m_CurCharges = reader.ReadInt();
					m_MaxCharges = reader.ReadInt();
					m_DefaultIndex = reader.ReadInt();

					break;
				}
			}
		}
Esempio n. 35
0
        private static bool ParseMovementUpdateBlock(GenericReader gr, StringBuilder sb, StreamWriter swe, StreamWriter data, ObjectTypes objectTypeId, WoWObject obj)
        {
            Coords4 coords;

            coords.X = 0;
            coords.Y = 0;
            coords.Z = 0;
            coords.O = 0;

            sb.AppendLine("=== movement_update_block_start ===");
            MovementFlags mf = MovementFlags.MOVEMENTFLAG_NONE;    // movement flags

            UpdateFlags flags = (UpdateFlags)gr.ReadByte();

            sb.AppendLine("Update Flags: " + flags.ToString("X") + " : " + flags);

            if ((UpdateFlags.UPDATEFLAG_LIVING & flags) != 0) // 0x20
            {
                mf = (MovementFlags)gr.ReadUInt32();
                sb.AppendLine("Movement Flags: " + mf.ToString("X") + " : " + mf);

                byte unk = gr.ReadByte();
                sb.AppendLine("Unknown Byte: " + unk.ToString("X2"));

                uint time = gr.ReadUInt32();
                sb.AppendLine("Time: " + time.ToString("X8"));
            }

            if ((UpdateFlags.UPDATEFLAG_HASPOSITION & flags) != 0) // 0x40
            {
                coords = gr.ReadCoords4();
                sb.AppendLine("Coords: " + coords.GetCoordsAsString());

                if (objectTypeId == ObjectTypes.TYPEID_UNIT || objectTypeId == ObjectTypes.TYPEID_GAMEOBJECT)
                {
                    if (obj != null)
                    {
                        obj.SetPosition(coords.X, coords.Y, coords.Z, coords.O);
                    }
                }
            }

            if ((flags & UpdateFlags.UPDATEFLAG_LIVING) != 0)   // 0x20
            {
                /*if (objectTypeId == ObjectTypes.TYPEID_UNIT || objectTypeId == ObjectTypes.TYPEID_GAMEOBJECT)
                 * {
                 *  data.WriteLine();
                 *  data.WriteLine(objectTypeId + ": " + coords.GetCoordsAsString());
                 * }*/

                if ((mf & MovementFlags.MOVEMENTFLAG_ONTRANSPORT) != 0) // transport
                {
                    ulong t_guid = gr.ReadUInt64();
                    sb.Append("Transport GUID: " + t_guid.ToString("X16") + ", ");

                    Coords4 transport = gr.ReadCoords4();
                    sb.AppendLine("Transport Coords: " + transport.GetCoordsAsString());

                    uint unk2 = gr.ReadUInt32(); // unk, probably timestamp
                    sb.AppendLine("Transport Unk: " + unk2.ToString("X8"));
                }

                if ((mf & (MovementFlags.MOVEMENTFLAG_SWIMMING | MovementFlags.MOVEMENTFLAG_UNK5)) != 0)
                {
                    float unkf1 = gr.ReadSingle();
                    sb.AppendLine("MovementFlags & (MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_UNK5): " + unkf1);
                }

                uint unk1 = gr.ReadUInt32();
                sb.AppendLine("Unk1: " + unk1.ToString("X8"));

                if ((mf & MovementFlags.MOVEMENTFLAG_JUMPING) != 0)
                {
                    // looks like orientation/coords/speed
                    float unk3 = gr.ReadSingle();
                    sb.AppendLine("unk3: " + unk3);
                    float unk4 = gr.ReadSingle();
                    sb.AppendLine("unk4: " + unk4);
                    float unk5 = gr.ReadSingle();
                    sb.AppendLine("unk5: " + unk5);
                    float unk6 = gr.ReadSingle();
                    sb.AppendLine("unk6: " + unk6);
                }

                if ((mf & MovementFlags.MOVEMENTFLAG_SPLINE) != 0)
                {
                    float unkf2 = gr.ReadSingle();
                    sb.AppendLine("MovementFlags & MOVEMENTFLAG_SPLINE: " + unkf2);
                }

                float ws = gr.ReadSingle();
                sb.AppendLine("Walk speed: " + ws);
                float rs = gr.ReadSingle();
                sb.AppendLine("Run speed: " + rs);
                float sbs = gr.ReadSingle();
                sb.AppendLine("Swimback speed: " + sbs);
                float ss = gr.ReadSingle();
                sb.AppendLine("Swim speed: " + ss);
                float wbs = gr.ReadSingle();
                sb.AppendLine("Walkback speed: " + wbs);
                float fs = gr.ReadSingle();
                sb.AppendLine("Fly speed: " + fs);
                float fbs = gr.ReadSingle();
                sb.AppendLine("Flyback speed: " + fbs);
                float ts = gr.ReadSingle();
                sb.AppendLine("Turn speed: " + ts); // pi = 3.14

                if ((mf & MovementFlags.MOVEMENTFLAG_SPLINE2) != 0)
                {
                    uint flags3 = gr.ReadUInt32();
                    sb.AppendLine("SplineFlags " + flags3.ToString("X8"));

                    if ((flags3 & 0x10000) != 0)
                    {
                        Coords3 c = gr.ReadCoords3();
                        sb.AppendLine("SplineFlags & 0x10000: " + c.GetCoords());
                    }
                    if ((flags3 & 0x20000) != 0)
                    {
                        ulong g3 = gr.ReadUInt64();
                        sb.AppendLine("flags3_guid: " + g3.ToString("X16")); // ????
                    }
                    if ((flags3 & 0x40000) != 0)
                    {
                        uint f3_3 = gr.ReadUInt32();
                        sb.AppendLine("flags3_unk_value3: " + f3_3.ToString("X8"));
                    }

                    uint t1 = gr.ReadUInt32();
                    sb.AppendLine("curr tick: " + t1.ToString("X8"));

                    uint t2 = gr.ReadUInt32();
                    sb.AppendLine("last tick: " + t2.ToString("X8"));

                    uint t3 = gr.ReadUInt32();
                    sb.AppendLine("tick count " + t3.ToString("X8"));

                    uint coords_count = gr.ReadUInt32();
                    sb.AppendLine("coords_count: " + coords_count.ToString("X8"));

                    for (uint i = 0; i < coords_count; i++)
                    {
                        Coords3 v = gr.ReadCoords3();
                        sb.AppendLine("coord" + i + ": " + v.GetCoords());
                    }

                    Coords3 end = gr.ReadCoords3();
                    sb.AppendLine("end: " + end.GetCoords());
                }
            }

            if ((flags & UpdateFlags.UPDATEFLAG_LOWGUID) != 0) // 0x08
            {
                uint temp = gr.ReadUInt32();                   // timestamp or something like it
                sb.AppendLine("UpdateFlags & 0x08 (lowguid): " + temp.ToString("X8"));
            }

            if ((UpdateFlags.UPDATEFLAG_HIGHGUID & flags) != 0) // 0x10
            {
                uint guid_high = gr.ReadUInt32();               // timestamp or something like it
                sb.AppendLine("UpdateFlags & 0x10 (highguid): " + guid_high.ToString("X8"));
            }

            if ((UpdateFlags.UPDATEFLAG_FULLGUID & flags) != 0) // 0x04
            {
                ulong guid2 = gr.ReadPackedGuid();              // guid, but what guid?
                sb.AppendLine("UpdateFlags & 0x04 guid: " + guid2.ToString("X16"));
            }

            if ((UpdateFlags.UPDATEFLAG_TRANSPORT & flags) != 0) // 0x02
            {
                uint time = gr.ReadUInt32();                     // time
                sb.AppendLine("UpdateFlags & 0x02 t_time: " + time.ToString("X8"));
            }

            if ((UpdateFlags.UPDATEFLAG_SELFTARGET & flags) != 0) // 0x01
            {
                sb.AppendLine("updating self!");
            }

            sb.AppendLine("=== movement_update_block_end ===");
            return(true);
        }
Esempio n. 36
0
		public void Deserialize(GenericReader reader)
		{
			reader.ReadByte();

			Level = reader.ReadInt();
			Decoder = reader.ReadMobile();
			Map = reader.ReadMap();
			Location = reader.ReadPoint2D();
			Bounds = reader.ReadRect2D();
		}
Esempio n. 37
0
		public RunebookEntry( GenericReader reader )
		{
			int version = reader.ReadByte();

			switch ( version )
			{
				case 1:
				case 0:
				{
					m_Location = reader.ReadPoint3D();
					m_Map = reader.ReadMap();
					m_Description = reader.ReadString();

					break;
				}
			}
		}
Esempio n. 38
0
			public void Deserialize( GenericReader gr )
			{
				place = gr.ReadByte();
				action = (ushort)gr.ReadShort();
				type = gr.ReadByte();
				other = gr.ReadByte();
			}
Esempio n. 39
0
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();

			m_TreasureLevel = (TreasureLevel)reader.ReadByte();
			m_MinSpawnTime = reader.ReadShort();
			m_MaxSpawnTime = reader.ReadShort();

			if( !Locked )
				StartResetTimer();
		}
Esempio n. 40
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.ReadEncodedInt();

            switch (version)
            {
                case 0:
                {
                    if (SkillBonus == 0)
                        SkillBonus = 1;
                    m_Flags = (SkillScrollFlags) reader.ReadEncodedInt();
                    m_SkillBonus = reader.ReadInt();
                    m_SkillName = (SkillName) reader.ReadByte();
                    break;
                }
            }
        }
Esempio n. 41
0
		public static void Deserialize( GenericReader reader, int version, BaseObjectiveInstance objInstance )
		{
			if ( reader.ReadBool() )
			{
				DateTime endTime = reader.ReadDeltaTime();

				if ( objInstance != null )
					objInstance.EndTime = endTime;
			}

			DataType extraDataType = (DataType)reader.ReadByte();

			switch ( extraDataType )
			{
				case DataType.EscortObjective:
				{
					bool completed = reader.ReadBool();

					if ( objInstance is EscortObjectiveInstance )
						( (EscortObjectiveInstance)objInstance ).HasCompleted = completed;

					break;
				}
				case DataType.KillObjective:
				{
					int slain = reader.ReadInt();

					if ( objInstance is KillObjectiveInstance )
						( (KillObjectiveInstance)objInstance ).Slain = slain;

					break;
				}
				case DataType.DeliverObjective:
				{
					bool completed = reader.ReadBool();

					if ( objInstance is DeliverObjectiveInstance )
						( (DeliverObjectiveInstance)objInstance ).HasCompleted = completed;

					break;
				}
			}
		}
Esempio n. 42
0
        public RunebookEntry(GenericReader reader)
        {
            int version = reader.ReadByte();

            switch ( version )
            {
                case 1:
                    {
                        this.m_House = reader.ReadItem() as BaseHouse;
                        goto case 0;
                    }
                case 0:
                    {
                        this.m_Location = reader.ReadPoint3D();
                        this.m_Map = reader.ReadMap();
                        this.m_Description = reader.ReadString();

                        break;
                    }
            }
        }
Esempio n. 43
0
        /// <summary>
        /// Decodes a DXT5-compressed 4x4 block of texels.
        /// </summary>
        /// <remarks>See https://msdn.microsoft.com/en-us/library/windows/desktop/bb694531(v=vs.85).aspx#BC3 </remarks>
        static Color32[] DecodeDXT5TexelBlock(GenericReader r)
        {
            // Create the alpha table.
            var alphaTable = new float[8];

            alphaTable[0] = r.ReadByte();
            alphaTable[1] = r.ReadByte();
            if (alphaTable[0] > alphaTable[1])
            {
                for (var i = 0; i < 6; i++)
                {
                    alphaTable[2 + i] = Mathf.Lerp(alphaTable[0], alphaTable[1], (float)(1 + i) / 7);
                }
            }
            else
            {
                for (var i = 0; i < 4; i++)
                {
                    alphaTable[2 + i] = Mathf.Lerp(alphaTable[0], alphaTable[1], (float)(1 + i) / 5);
                }
                alphaTable[6] = 0;
                alphaTable[7] = 255;
            }

            // Read pixel alpha indices.
            var alphaIndices        = new uint[16];
            var alphaIndexBytesRow0 = new byte[3];

            r.Read(alphaIndexBytesRow0, 0, alphaIndexBytesRow0.Length); Array.Reverse(alphaIndexBytesRow0); // Take care of little-endianness.
            var alphaIndexBytesRow1 = new byte[3];

            r.Read(alphaIndexBytesRow1, 0, alphaIndexBytesRow1.Length); Array.Reverse(alphaIndexBytesRow1); // Take care of little-endianness.
            const uint bitsPerAlphaIndex = 3U;

            alphaIndices[0]  = (uint)Utils.GetBits(21, bitsPerAlphaIndex, alphaIndexBytesRow0);
            alphaIndices[1]  = (uint)Utils.GetBits(18, bitsPerAlphaIndex, alphaIndexBytesRow0);
            alphaIndices[2]  = (uint)Utils.GetBits(15, bitsPerAlphaIndex, alphaIndexBytesRow0);
            alphaIndices[3]  = (uint)Utils.GetBits(12, bitsPerAlphaIndex, alphaIndexBytesRow0);
            alphaIndices[4]  = (uint)Utils.GetBits(9, bitsPerAlphaIndex, alphaIndexBytesRow0);
            alphaIndices[5]  = (uint)Utils.GetBits(6, bitsPerAlphaIndex, alphaIndexBytesRow0);
            alphaIndices[6]  = (uint)Utils.GetBits(3, bitsPerAlphaIndex, alphaIndexBytesRow0);
            alphaIndices[7]  = (uint)Utils.GetBits(0, bitsPerAlphaIndex, alphaIndexBytesRow0);
            alphaIndices[8]  = (uint)Utils.GetBits(21, bitsPerAlphaIndex, alphaIndexBytesRow1);
            alphaIndices[9]  = (uint)Utils.GetBits(18, bitsPerAlphaIndex, alphaIndexBytesRow1);
            alphaIndices[10] = (uint)Utils.GetBits(15, bitsPerAlphaIndex, alphaIndexBytesRow1);
            alphaIndices[11] = (uint)Utils.GetBits(12, bitsPerAlphaIndex, alphaIndexBytesRow1);
            alphaIndices[12] = (uint)Utils.GetBits(9, bitsPerAlphaIndex, alphaIndexBytesRow1);
            alphaIndices[13] = (uint)Utils.GetBits(6, bitsPerAlphaIndex, alphaIndexBytesRow1);
            alphaIndices[14] = (uint)Utils.GetBits(3, bitsPerAlphaIndex, alphaIndexBytesRow1);
            alphaIndices[15] = (uint)Utils.GetBits(0, bitsPerAlphaIndex, alphaIndexBytesRow1);
            // Create the color table.
            var colorTable = new Color[4];

            colorTable[0] = r.ReadUInt16().B565ToColor();
            colorTable[1] = r.ReadUInt16().B565ToColor();
            colorTable[2] = Color.Lerp(colorTable[0], colorTable[1], 1.0f / 3);
            colorTable[3] = Color.Lerp(colorTable[0], colorTable[1], 2.0f / 3);
            // Calculate pixel colors.
            var colors = DecodeDXT1TexelBlock(r, colorTable);

            for (var i = 0; i < 16; i++)
            {
                colors[i].a = (byte)Mathf.Round(alphaTable[alphaIndices[i]]);
            }
            return(colors);
        }