예제 #1
0
        public static T ReadBlock <T>(this GenericReader reader, Func <GenericReader, T> onDeserialize)
        {
            using (var ms = new MemoryStream())
            {
                var length    = reader.ReadLong() - 8;
                var chunkSize = (int)Math.Min(0xFFFF, length);
                var chunk     = new byte[chunkSize];

                while (length > 0)
                {
                    chunkSize = (int)Math.Min(chunkSize, length);

                    for (var i = 0; i < chunkSize; i++)
                    {
                        chunk[i] = reader.ReadByte();
                    }

                    ms.Write(chunk, 0, chunkSize);

                    length -= chunkSize;
                }

                ms.Seek(0, SeekOrigin.Begin);

                return(VitaNexCore.TryCatchGet(onDeserialize, ms.GetBinaryReader()));
            }
        }
예제 #2
0
        public static byte[] ReadLongBytes(this GenericReader reader)
        {
            long length = reader.ReadLong();
            var  block  = new byte[length];

            for (int i = 0; i < length; i++)
            {
                block[i] = reader.ReadByte();
            }

            return(block);
        }
예제 #3
0
        public static byte[] ReadLongBytes(this GenericReader reader)
        {
            var length = reader.ReadLong();

            var block = new byte[length];

            for (long i = 0; i < length && !reader.End(); i++)
            {
                block[i] = reader.ReadByte();
            }

            return(block);
        }
예제 #4
0
        /// <summary>
        ///     DO NOT USE IN ITEM, MOBILE OR GUILD SERIALIZATION
        /// </summary>
        public static void ReadBlock(this GenericReader reader, Action <GenericReader> onDeserialize)
        {
            VitaNexCore.TryCatch(
                () =>
            {
                long pos    = reader.Seek(0, SeekOrigin.Current);
                long length = reader.ReadLong();

                VitaNexCore.TryCatch(() => onDeserialize(reader), VitaNexCore.ToConsole);

                reader.Seek(pos + length, SeekOrigin.Begin);
            },
                VitaNexCore.ToConsole);
        }
예제 #5
0
        public static TEnum ReadFlag <TEnum>(this GenericReader reader)
            where TEnum : struct, IComparable, IFormattable, IConvertible
        {
            var type = typeof(TEnum);
            var flag = default(TEnum);

            if (!type.IsEnum)
            {
                return(flag);
            }

            switch (reader.ReadByte())
            {
            case 0x01:
                flag = ToEnum <TEnum>(reader.ReadByte());
                break;

            case 0x02:
                flag = ToEnum <TEnum>(reader.ReadShort());
                break;

            case 0x03:
                flag = ToEnum <TEnum>(reader.ReadUShort());
                break;

            case 0x04:
                flag = ToEnum <TEnum>(reader.ReadInt());
                break;

            case 0x05:
                flag = ToEnum <TEnum>(reader.ReadUInt());
                break;

            case 0x06:
                flag = ToEnum <TEnum>(reader.ReadLong());
                break;

            case 0x07:
                flag = ToEnum <TEnum>(reader.ReadULong());
                break;
            }

            return(flag);
        }
예제 #6
0
        public static TEnum ReadFlag <TEnum>(this GenericReader reader) where TEnum : struct
        {
            TEnum flag = default(TEnum);

            if (!typeof(TEnum).IsEnum)
            {
                return(flag);
            }

            switch (reader.ReadByte())
            {
            case 0x01:
                flag = ToEnum <TEnum>(reader.ReadByte());
                break;

            case 0x02:
                flag = ToEnum <TEnum>(reader.ReadShort());
                break;

            case 0x03:
                flag = ToEnum <TEnum>(reader.ReadUShort());
                break;

            case 0x04:
                flag = ToEnum <TEnum>(reader.ReadInt());
                break;

            case 0x05:
                flag = ToEnum <TEnum>(reader.ReadUInt());
                break;

            case 0x06:
                flag = ToEnum <TEnum>(reader.ReadLong());
                break;

            case 0x07:
                flag = ToEnum <TEnum>(reader.ReadULong());
                break;
            }

            return(flag);
        }
예제 #7
0
        public static void ReadBlock(this GenericReader reader, Action <GenericReader> onDeserialize)
        {
            /*var block = ReadLongBytes(reader);
             *
             * using (var ms = new MemoryStream(block.Length))
             * {
             *      ms.Write(block, 0, block.Length);
             *      ms.Seek(0, SeekOrigin.Begin);
             *
             *      VitaNexCore.TryCatch(onDeserialize, ms.GetBinaryReader());
             *
             *      ms.Close();
             * }*/

            long pos    = reader.Seek(0, SeekOrigin.Current);
            long length = reader.ReadLong();

            VitaNexCore.TryCatch(onDeserialize, reader);

            reader.Seek(pos + length, SeekOrigin.Begin);
        }
예제 #8
0
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );
			
			int version = reader.ReadInt();			
			
			m_Points = reader.ReadLong();
			m_StartTier = reader.ReadLong();
			m_NextTier = reader.ReadLong();
			m_DailyDecay = reader.ReadLong();
			m_Tier = reader.ReadInt();		
			
			m_DonationTitle = QuestReader.Object( reader );
			
			Init();
			
			for ( int i = reader.ReadInt(); i > 0; i -- )
			{
				List<object> list = new List<object>();
			
				for ( int j = reader.ReadInt(); j > 0; j -- )
					list.Add( QuestReader.Object( reader ) );
					
				m_Tiers.Add( list );
			}
			
			if ( CantWalk )
				Frozen = true;
		}
예제 #9
0
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );
			int version = reader.ReadInt();

			switch ( version )
			{
				case 0:
					Gold = reader.ReadLong();
					Tokens = reader.ReadLong();
					break;
				case 1:
					DateLastPaid = reader.ReadDateTime();
					goto case 0;
			}
		}
예제 #10
0
		private static void ReadIndex(
			GenericReader idx,
			out Type type,
			out Serial serial,
			out Serial parent,
			out long index,
			out long length)
		{
			type = idx.ReadType();
			serial = idx.ReadInt();
			parent = idx.ReadInt();
			index = idx.ReadLong();
			length = idx.ReadLong();
		}
예제 #11
0
		private static void ReadLength(GenericReader idx, bool reset, out long length, out int count)
		{
			var index = idx.Seek(0, SeekOrigin.Current);

			idx.Seek(4, SeekOrigin.Begin);

			length = idx.ReadLong();
			count = idx.ReadInt();

			if (reset)
			{
				idx.Seek(index, SeekOrigin.Begin);
			}
		}
예제 #12
0
        public BestWave(GenericReader reader)
        {
            int version = reader.ReadInt();
            Waves = reader.ReadInt();
            TotalScore = reader.ReadLong();
            Date = reader.ReadString();

            Score = new Dictionary<Mobile, long>();

            int cnt = reader.ReadInt();
            for (int i = 0; i < cnt; i++)
            {
                Mobile m = reader.ReadMobile();
                long score = reader.ReadLong();
                if (m != null)
                    Score[m] = score;
            }
        }
예제 #13
0
		public void Deserialize(GenericReader reader)
		{
			int version = reader.ReadInt();

			switch (version)
			{
				case 0:
				{
					m_TransactionID = reader.ReadLong();
					m_Date = reader.ReadDateTime();
					m_TransType = (TransactionType)reader.ReadInt();
					ResName = reader.ReadString();
					Amount = reader.ReadInt();
					Price = reader.ReadDouble();
					NewAmount = reader.ReadInt();
					VendorID = (Serial)reader.ReadInt();
					break;
				}
				default:
				{
					Console.WriteLine("Error: Invalid save version for Resource Transaction.");
					break;
				}
			}
		}
예제 #14
0
		public override void Deserialize(GenericReader reader)
		{
			base.Deserialize(reader);
			int version = reader.ReadInt();
			switch (version)
			{
				case 1:
					{
						m_Cost = reader.ReadInt();
						m_AmountCollected = reader.ReadLong();
						goto case 0;
					}

				case 0:
					{
						m_Active = reader.ReadBool();
						m_Decays = reader.ReadBool();
						m_DecayTime = reader.ReadTimeSpan();
						if (reader.ReadBool())
							m_RuneBooks = reader.ReadItemList();
						if (m_Decays)
							m_TimeLeft = reader.ReadTimeSpan();
						LootType = LootType.Blessed;
						break;
					}
			}
		}
예제 #15
0
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );
			int version = reader.ReadInt();

			switch ( version )
			{

                case 33:

                    #region SA
                    {
                        m_SSNextSeed = reader.ReadDateTime();
                        m_SSSeedExpire = reader.ReadDateTime();
                        m_SSSeedLocation = reader.ReadPoint3D();
                        m_SSSeedMap = reader.ReadMap();
                        goto case 32;
                    }
                    #endregion

                #region NeoLevelSystem      // Neo's Level System
                case 32:
                {
                    m_LevelExp = reader.ReadLong();
                    m_Exp = reader.ReadLong();
                    m_Level = reader.ReadInt();
                    
                    m_ExpTitle = reader.ReadString();
                    
                    goto case 31;
                }
                #endregion

                case 31: 
                    {
                        m_AutoStabled = reader.ReadStrongMobileList();
                        goto case 30;
                    }
                case 30:
                    {
                        m_FortuneType1 = reader.ReadEncodedInt();
                        if (m_FortuneType1 > 0)
                        {
                            m_FortunePower1 = reader.ReadEncodedInt();
                            m_FortuneType2 = reader.ReadEncodedInt();
                            m_FortunePower2 = reader.ReadEncodedInt();
                            FortuneExpire = reader.ReadDateTime();
                            if (FortuneExpire > DateTime.Now)
                            {
                                ApplyFortune(m_FortuneType1, m_FortunePower1);
                                ApplyFortune(m_FortuneType2, m_FortunePower2);
                                FortuneGump.Told.Add(this);
                            }
                            else
                                m_FortuneType1 = m_FortuneType2 = m_FortunePower1 = m_FortunePower2 = 0;
                        }

                        goto case 29;
                    }
               
				#region Mondain's Legacy
				case 29: 
					{
						m_AnkhNextUse = reader.ReadDateTime();

						goto case 28;
					}
				#endregion

				case 28:
				{
					m_TamingBOBFilter = new Engines.BulkOrders.TamingBOBFilter( reader );

					goto case 27;
					
					}
				case 27:
				{
					m_Bioenginer = reader.ReadBool();
					NextTamingBulkOrder = reader.ReadTimeSpan();
					goto case 26;
				}
				case 26:
				{
					#region Mondain's Legacy
					m_Quests = QuestReader.Quests( reader, this );
					m_Chains = QuestReader.Chains( reader );
					
					m_Collections = new Dictionary<Collection,int>();
					m_CollectionTitles = new List<object>();
					
					for ( int i = reader.ReadInt(); i > 0; i -- )
						m_Collections.Add( (Collection) reader.ReadInt(), reader.ReadInt() );
					
					for ( int i = reader.ReadInt(); i > 0; i -- )
						m_CollectionTitles.Add( QuestReader.Object( reader ) );										
					
					m_SelectedTitle = reader.ReadInt();
					m_Peaced = reader.ReadDateTime();

						goto case 25;
					}
				#endregion

				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:
				{
					m_AllianceMessageHue = reader.ReadEncodedInt();
					m_GuildMessageHue = reader.ReadEncodedInt();

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

					m_GuildRank = Guilds.RankDefinition.Ranks[rank];
					m_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 ) );
						}
					}

					m_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 Engines.BulkOrders.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();

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

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

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

					goto case 8;
				}
				case 8:
				{
					m_NpcGuild = (NpcGuild)reader.ReadInt();
					m_NpcGuildJoinTime = reader.ReadDateTime();
					m_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 < 32 )
						m_AutoStabled = new List<Mobile>();

                    #region SA
                    if (version < 33)
                    {
                        m_SSNextSeed = m_SSSeedExpire = DateTime.Now;
                        m_SSSeedLocation = Point3D.Zero;
                    }
                    #endregion

					break;
				}
            }

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


            #region NeoLevelSystem      // Neo's Level System

            if (version < 32)
            {
                m_LevelExp = 1000;
                m_Exp = -1000;
                m_Level = 0;

                m_ExpTitle = "TerMur-guest";
            }

            #endregion                  // End of Neo's Level System


			#region Mondain's Legacy
			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>();
				
			if ( m_Collections == null )
				m_Collections = new Dictionary<Collection,int>();
				
			if ( m_CollectionTitles == null )
				m_CollectionTitles = new List<object>();
			#endregion

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


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

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

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

			if ( m_TamingBOBFilter == null )
				m_TamingBOBFilter = new Engines.BulkOrders.TamingBOBFilter();

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

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

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

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

			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;
			}

			CheckAtrophies( this );


			if( Hidden )	//Hiding is the only buff where it has an effect that's serialized.
				AddBuff( new BuffInfo( BuffIcon.HidingAndOrStealth, 1075655 ) );
		}
예제 #16
0
		public override void Deserialize(GenericReader reader)
		{
            City = (City)reader.ReadInt();

			base.Deserialize(reader);
			int version = reader.ReadInt();
			
			CompletedTrades = reader.ReadInt();
            Governor = reader.ReadMobile();
            GovernorElect = reader.ReadMobile();
            PendingGovernor = reader.ReadBool();
            Treasury = reader.ReadLong();
            ActiveTradeDeal = (TradeDeal)reader.ReadInt();
            TradeDealStart = reader.ReadDateTime();
            NextTradeDealCheck = reader.ReadDateTime();
            CanUtilize = reader.ReadBool();

            Headline = reader.ReadString();
            Body = reader.ReadString();
            PostedOn = reader.ReadDateTime();

            if (reader.ReadInt() == 0)
                Election = new CityElection(this, reader);
            else
                Election = new CityElection(this);

            if (this.City == City.Britain)
            {
                _CitizenWait = new Dictionary<Mobile, DateTime>();

                int count = reader.ReadInt();
                for (int i = 0; i < count; i++)
                {
                    Mobile m = reader.ReadMobile();
                    DateTime dt = reader.ReadDateTime();

                    if (m != null && dt > DateTime.UtcNow)
                        _CitizenWait[m] = dt;
                }

                Timer.DelayCall(TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(10), OnTick);
            }
		}
예제 #17
0
		public void Deserialize(GenericReader reader)
		{
			int version = reader.GetVersion();

			switch (version)
			{
				case 0:
					{
						ID = reader.ReadString();
						_State = reader.ReadFlag<DonationTransactionState>();
						Account = reader.ReadAccount();
						Email = reader.ReadString();
						Total = reader.ReadDecimal();
						_Credit = reader.ReadLong();
						_Time = reader.ReadDouble();
						Version = reader.ReadInt();
						_InternalVersion = reader.ReadInt();
						_Notes = reader.ReadString();
						_Extra = reader.ReadString();

						DeliverFrom = reader.ReadMobile();
						DeliverTo = reader.ReadMobile();

						DeliveryTime = reader.ReadDouble();
					}
					break;
			}
		}
예제 #18
0
        public override void Deserialize( GenericReader reader )
        {
            base.Deserialize( reader );

            int version = reader.ReadInt();

            switch ( version )
            {
            case 1:
                m_Instance = reader.ReadItem() as PrimevalLichPuzzle;
                m_Altar = reader.ReadItem() as ChampionSpawn;
                m_Key = reader.ReadLong();
                m_Successful = reader.ReadMobile();
                m_Levers = reader.ReadStrongItemList<PrimevalLichPuzzleLever>();
                break;
            }

            if ( null == m_Levers )
                m_Levers = new List<PrimevalLichPuzzleLever>();

//            if ( null != m_Instance && m_Instance.Deleted && this == m_Instance )
//            {
//                m_Instance = null;
//                return;
//            }

//            // remove if no altar exists
//            if ( null == m_Altar )
//                Timer.DelayCall( TimeSpan.FromSeconds( 0.0 ), new TimerCallback( Delete ) );

//            ResetLevers();
        }
예제 #19
0
		public override void Deserialize(GenericReader reader)
		{
			base.Deserialize(reader);
			int version = reader.ReadInt();

			switch (version)
			{
				case 1:
					{
						m_Cost = reader.ReadInt();
						m_AmountCollected = reader.ReadLong();
						goto case 0;
					}

				case 0:
					{
						m_Active = reader.ReadBool();
						m_Owner = reader.ReadMobile();
						m_Decays = reader.ReadBool();
						m_DecayTime = reader.ReadTimeSpan();

						m_AccessLevel = (AccessLevel)reader.ReadInt();
						if (reader.ReadBool())
							m_RuneBooks = reader.ReadItemList();
						m_DecayRunning = reader.ReadBool();
						if (m_DecayRunning)
							this.DoDecayTimer(reader.ReadTimeSpan());
						break;
					}
		}
			UpdateDate();
		}
예제 #20
0
		private bool FindPosition(GenericReader rcreader)
		{
			((BinaryFileReader)rcreader).Seek(0, SeekOrigin.Begin);
			if (rcreader.End())
				return false;

			int rcversion = rcreader.ReadInt();
			switch (rcversion)
			{
				case 0:
				{
					long tableposition = rcreader.ReadLong();
					Console.WriteLine("Tableposition: {0}", tableposition);
					((BinaryFileReader)rcreader).Seek(tableposition, SeekOrigin.Begin);
					while (!rcreader.End())
					{
						string typename = rcreader.ReadString();
						long location = rcreader.ReadLong();
						Console.WriteLine("{0}, {1}", typename, location);
						if (typename == m_Type.FullName)
						{
							((BinaryFileReader)rcreader).Seek(location, SeekOrigin.Begin);
							return true;
						}
					}

					break;
				}
				default:
				{
					throw new Exception("ResourcePool error: Invalid consignments.dat save version");
				}
			}

			return false;
		}