예제 #1
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);
        }
예제 #2
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);
        }
예제 #3
0
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();

			switch ( version )
			{
				case 5:
				{
					#region Mondain's Legacy
					m_Quality = (BookQuality) reader.ReadByte();		
					#endregion					
					
					goto case 4;
				}
				case 4:
				{
					#region Mondain's Legacy
					m_EngravedText = reader.ReadString();		
					#endregion
					
					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();
		}
예제 #4
0
		public override void Deserialize(GenericReader reader)
		{
			base.Deserialize(reader);
			int version = reader.ReadInt();
			m_Active = reader.ReadBool();
			m_Casino = (Casino)reader.ReadInt();
			m_CasinoName = reader.ReadString();
			m_TotalPlays = reader.ReadULong();
			m_TotalCollected = reader.ReadULong();
			m_TotalWon = reader.ReadULong();
			m_ErrorCode = reader.ReadInt();
			m_OrigHue = reader.ReadInt();

			m_InUseBy = reader.ReadMobile();
			m_OnCredit = reader.ReadInt();
			m_Escrow = reader.ReadInt();

			m_SecurityCamMobile = reader.ReadMobile();
			m_SecurityChatter = (VerboseType)reader.ReadInt();

			m_Bet = reader.ReadInt();
			m_TestMode = reader.ReadBool();

			m_DealerDelay = reader.ReadBool();
			m_DoubleAfterSplit = reader.ReadBool();
			m_DealerHitsSoft17 = reader.ReadBool();
			m_DealerTakesPush = reader.ReadBool();
			m_Resplits = reader.ReadBool();
			m_SplitAces = (SplitAces)reader.ReadInt();
			m_BJSplitAces21 = reader.ReadBool();
			m_BJSplitAcesPaysEven = reader.ReadBool();
			m_DoubleDown = (DoubleDown)reader.ReadInt();
			m_PlayerCardsFaceUp = reader.ReadBool();
			m_DealerCardsFaceUp = reader.ReadBool();
			m_NumberOfDecks = reader.ReadShort();
			m_ContinuousShuffle = reader.ReadBool();
			m_MinBet = (BetValues)reader.ReadInt();
			m_MaxBet = (BetValues)reader.ReadInt();
			m_BlackJackPays = (BlackJackPays)reader.ReadInt();
			m_CardSounds = reader.ReadBool();
			carddeck = new CardDeck(m_NumberOfDecks,0);
			m_BJInfo.HandInfo = new HandStruct[5];
			for (int h = 0; h < 5; h++)
			{
				m_BJInfo.HandInfo[h].bet = 0;
				m_BJInfo.HandInfo[h].totalcards = 0;
				m_BJInfo.HandInfo[h].card = new short[12];
				for (int c = 0; c < 12; c++)
					m_BJInfo.HandInfo[h].card[c] = -1;
				m_BJInfo.HandInfo[h].bestscore = 0;
				m_BJInfo.HandInfo[h].altscore = 0;
			}
		}
예제 #5
0
        public MultiComponentList(GenericReader reader)
        {
            var version = reader.ReadInt();

            m_Min    = reader.ReadPoint2D();
            m_Max    = reader.ReadPoint2D();
            m_Center = reader.ReadPoint2D();
            Width    = reader.ReadInt();
            Height   = reader.ReadInt();

            var length = reader.ReadInt();

            var allTiles = m_List = new MultiTileEntry[length];

            if (version == 0)
            {
                for (var i = 0; i < length; ++i)
                {
                    int id = reader.ReadShort();

                    if (id >= 0x4000)
                    {
                        id -= 0x4000;
                    }

                    allTiles[i].m_ItemID  = (ushort)id;
                    allTiles[i].m_OffsetX = reader.ReadShort();
                    allTiles[i].m_OffsetY = reader.ReadShort();
                    allTiles[i].m_OffsetZ = reader.ReadShort();

                    allTiles[i].m_Flags = (TileFlag)reader.ReadUInt();
                }
            }
            else
            {
                for (var i = 0; i < length; ++i)
                {
                    allTiles[i].m_ItemID  = reader.ReadUShort();
                    allTiles[i].m_OffsetX = reader.ReadShort();
                    allTiles[i].m_OffsetY = reader.ReadShort();
                    allTiles[i].m_OffsetZ = reader.ReadShort();

                    if (version > 1)
                    {
                        allTiles[i].m_Flags = (TileFlag)reader.ReadULong();
                    }
                    else
                    {
                        allTiles[i].m_Flags = (TileFlag)reader.ReadUInt();
                    }
                }
            }

            var tiles = new TileList[Width][];

            Tiles = new StaticTile[Width][][];

            for (var x = 0; x < Width; ++x)
            {
                tiles[x] = new TileList[Height];
                Tiles[x] = new StaticTile[Height][];

                for (var y = 0; y < Height; ++y)
                {
                    tiles[x][y] = new TileList();
                }
            }

            for (var i = 0; i < allTiles.Length; ++i)
            {
                if (i == 0 || allTiles[i].m_Flags != 0)
                {
                    var xOffset = allTiles[i].m_OffsetX + m_Center.m_X;
                    var yOffset = allTiles[i].m_OffsetY + m_Center.m_Y;
                    var itemID  = (allTiles[i].m_ItemID & TileData.MaxItemValue) | 0x10000;

                    tiles[xOffset][yOffset].Add((ushort)itemID, (sbyte)allTiles[i].m_OffsetZ);
                }
            }

            for (var x = 0; x < Width; ++x)
            {
                for (var y = 0; y < Height; ++y)
                {
                    Tiles[x][y] = tiles[x][y].ToArray();
                }
            }
        }
예제 #6
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);
            int version = reader.ReadInt();
            m_Active = reader.ReadBool();
            m_Theme = (ThemeType)reader.ReadInt();
            m_TotalSpins = reader.ReadULong();
            m_TotalCollected = reader.ReadULong();
            m_TotalWon = reader.ReadULong();
            m_ErrorCode = reader.ReadInt();
            m_OrigHue = reader.ReadInt();
            m_Throttle = reader.ReadBool();
            m_ThrottleSeconds = reader.ReadDouble();
            m_CardClubOnly = reader.ReadBool();
            m_MembershipCard = reader.ReadBool();

            m_LastWonBy = reader.ReadMobile();
            m_LastWonByDate = reader.ReadDateTime();
            m_LastWonAmount = reader.ReadInt();

            m_SecurityCamMobile = reader.ReadMobile();
            m_SecurityChatter = (VerboseType)reader.ReadInt();
            m_TotalPlayers = reader.ReadInt();
            InvalidateProperties();
            if (m_TotalPlayers > 0)
            {
                for (int i = 0; i < m_TotalPlayers; i++)
                {
                    PlayerInfo player = new PlayerInfo();

                    player.mobile = reader.ReadMobile();
                    player.LastPlayed = reader.ReadDateTime();
                    player.OnCredit = reader.ReadInt();
                    player.Cost = reader.ReadInt();
                    PlayerList.Add(player);
                }
            }

            for (int i = 0; i < m_HitStats.Length; i++)
                m_HitStats[i] = reader.ReadULong();

            if (m_OrigHue != -1 && m_Active)
            {
                this.Hue = m_OrigHue;
                m_OrigHue = -1;
            }
            SetupTheme(m_Theme);
            ActivateIdleTimer(TimeSpan.FromMinutes(5));
            m_GameSpeed = Utility.RandomList(5, 6, 7, 8, 9, 10, 11, 12);
        }
예제 #7
0
        public override void Deserialize( GenericReader reader )
        {
            base.Deserialize( reader );
            LootType = LootType.Blessed;

            int version = reader.ReadInt();

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

                    break;
                }
            }
        }
예제 #8
0
        public override void Deserialize( GenericReader reader )
        {
            base.Deserialize( reader );

            if ( !( this is TomeOfEnlightenment || this is TomeOfLostKnowledge || this is FactionTomeOfLostKnowledge ) )
                LootType = LootType.Blessed;

            int version = reader.ReadInt();

            switch ( version )
            {
                case 7:
                    {
                        m_Exceptional = reader.ReadBool();
                        m_Crafter = reader.ReadMobile();

                        goto case 6;
                    }
                case 6:
                case 5:
                    {
                        m_Slayer2 = (SlayerName) reader.ReadEncodedInt();
                        goto case 4;
                    }
                case 4:
                    {
                        m_EngraveString = reader.ReadString();
                        goto case 3;
                    }
                case 3:
                case 2:
                    {
                        m_Slayer = (SlayerName) reader.ReadEncodedInt();

                        goto case 1;
                    }
                case 1:
                    {
                        m_MagicalAttributes = new MagicalAttributes( this, reader );
                        m_SkillBonuses = new SkillBonuses( this, reader );

                        if ( this is ScrappersCompendium )
                        {
                            Attributes.SpellDamage = 25;
                            Attributes.LowerManaCost = 10;
                        }
                        else if ( this is ClaininsSpellbook )
                        {
                            Attributes.LowerRegCost = 15;
                            Attributes.RegenMana = 3;
                        }
                        else if ( this is TomeOfEnlightenment )
                        {
                            Attributes.BonusInt = 5;
                            Attributes.SpellDamage = 10;
                            Attributes.CastSpeed = 1;
                        }
                        else if ( this is TomeOfLostKnowledge )
                        {
                            SkillBonuses.SetValues( 0, SkillName.Magery, 15.0 );
                            Attributes.BonusInt = 8;
                            Attributes.SpellDamage = 15;
                            Attributes.LowerManaCost = 15;
                        }
                        else if ( this is FactionTomeOfLostKnowledge )
                        {
                            SkillBonuses.SetValues( 0, SkillName.Magery, 15.0 );
                            Attributes.BonusInt = 8;
                            Attributes.SpellDamage = 15;
                            Attributes.LowerManaCost = 15;
                            Attributes.RegenMana = 3;
                        }
                        else if ( this is ConjurersGrimoire )
                        {
                            SkillBonuses.SetValues( 0, SkillName.Magery, 15.0 );
                            Attributes.BonusInt = 8;
                            Attributes.SpellDamage = 15;
                            Attributes.LowerManaCost = 10;
                        }
                        else if ( this is FallenMysticsSpellbook )
                        {
                            Attributes.SpellDamage = 10;
                        }
                        else
                        {
                            FixAttributes();
                        }

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

                        break;
                    }
            }

            if ( m_MagicalAttributes == null )
                m_MagicalAttributes = new MagicalAttributes( this );

            if ( m_SkillBonuses == null )
                m_SkillBonuses = new SkillBonuses( this );

            if ( Parent is Mobile )
                m_SkillBonuses.AddTo( (Mobile) Parent );

            int strBonus = m_MagicalAttributes.BonusStr;
            int dexBonus = m_MagicalAttributes.BonusDex;
            int intBonus = m_MagicalAttributes.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();
        }
예제 #9
0
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();

			if ( version >= 4 )
			{
				activeListA = reader.ReadBool();
				DeserializeList( reader, true );
				DeserializeList( reader, false );
			}
			else
			{
				activeListA = false;
				RestoreDefaultList();
				activeListA = true;
				DeserializeList( reader, true );
			}
			
			GoldLedger = reader.ReadBool();
			TokenLedger = reader.ReadBool();
			if ( version >= 3 )
			{
				try { lootSettings = (LootSettingsEnum)reader.ReadInt(); }
				catch { lootSettings = LootSettingsEnum.From_List; }
			}
			else
				lootSettings = reader.ReadBool()?LootSettingsEnum.Currency_Only:LootSettingsEnum.From_List;
			GoldAmount = reader.ReadULong();
			TokensAmount = reader.ReadULong();
			Owner = reader.ReadInt();
			if ( version > 1 )
				DeleteAllCorpses = reader.ReadBool();
		}
예제 #10
0
        public override void Deserialize( GenericReader reader )
        {
            base.Deserialize( reader );
            int version = reader.ReadInt();

            switch( version )
            {
                    // version 0 reads second integer, version 1 no longer
                    // needs it. No going to case 0 or serialization error
                    // will occur!!
                case 2:
                    m_Charges = reader.ReadInt();
                    goto case 1;
                case 1:
                    m_Content = reader.ReadULong();
                    break;
                case 0:
                    m_Content = reader.ReadULong();
                    int m_Count = reader.ReadInt();
                    break;
            }
        }