示例#1
0
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();

			switch ( version )
			{
                case 8:
			        m_IsRenamed = reader.ReadBool();
			        goto case 7;
				case 7:
				case 6:
				case 5:
				{
					SaveFlag flags = (SaveFlag)reader.ReadEncodedInt();

					if ( GetSaveFlag( flags, SaveFlag.Attributes ) )
						m_AosAttributes = new AosAttributes( this, reader );
					else
						m_AosAttributes = new AosAttributes( this );

					if ( GetSaveFlag( flags, SaveFlag.ArmorAttributes ) )
						m_AosArmorAttributes = new AosArmorAttributes( this, reader );
					else
						m_AosArmorAttributes = new AosArmorAttributes( this );

					if ( GetSaveFlag( flags, SaveFlag.PhysicalBonus ) )
						m_PhysicalBonus = reader.ReadEncodedInt();

					if ( GetSaveFlag( flags, SaveFlag.FireBonus ) )
						m_FireBonus = reader.ReadEncodedInt();

					if ( GetSaveFlag( flags, SaveFlag.ColdBonus ) )
						m_ColdBonus = reader.ReadEncodedInt();

					if ( GetSaveFlag( flags, SaveFlag.PoisonBonus ) )
						m_PoisonBonus = reader.ReadEncodedInt();

					if ( GetSaveFlag( flags, SaveFlag.EnergyBonus ) )
						m_EnergyBonus = reader.ReadEncodedInt();

					if ( GetSaveFlag( flags, SaveFlag.Identified ) )
						m_Identified = ( version >= 7 || reader.ReadBool() );

					if ( GetSaveFlag( flags, SaveFlag.MaxHitPoints ) )
						m_MaxHitPoints = reader.ReadEncodedInt();

					if ( GetSaveFlag( flags, SaveFlag.HitPoints ) )
						m_HitPoints = reader.ReadEncodedInt();

					if ( GetSaveFlag( flags, SaveFlag.Crafter ) )
						m_Crafter = reader.ReadMobile();

					if ( GetSaveFlag( flags, SaveFlag.Quality ) )
						m_Quality = (ArmorQuality)reader.ReadEncodedInt();
					else
						m_Quality = ArmorQuality.Regular;

					if ( version == 5 && m_Quality == ArmorQuality.Low )
						m_Quality = ArmorQuality.Regular;

					if ( GetSaveFlag( flags, SaveFlag.Durability ) )
					{
						m_Durability = (ArmorDurabilityLevel)reader.ReadEncodedInt();

						if ( m_Durability > ArmorDurabilityLevel.Indestructible )
							m_Durability = ArmorDurabilityLevel.Durable;
					}

					if ( GetSaveFlag( flags, SaveFlag.Protection ) )
					{
						m_Protection = (ArmorProtectionLevel)reader.ReadEncodedInt();

						if ( m_Protection > ArmorProtectionLevel.Invulnerability )
							m_Protection = ArmorProtectionLevel.Defense;
					}

					if ( GetSaveFlag( flags, SaveFlag.Resource ) )
						m_Resource = (CraftResource)reader.ReadEncodedInt();
					else
						m_Resource = DefaultResource;

					if ( m_Resource == CraftResource.None )
						m_Resource = DefaultResource;

					if ( GetSaveFlag( flags, SaveFlag.BaseArmor ) )
						m_ArmorBase = reader.ReadEncodedInt();
					else
						m_ArmorBase = -1;

					if ( GetSaveFlag( flags, SaveFlag.StrBonus ) )
						m_StrBonus = reader.ReadEncodedInt();
					else
						m_StrBonus = -1;

					if ( GetSaveFlag( flags, SaveFlag.DexBonus ) )
						m_DexBonus = reader.ReadEncodedInt();
					else
						m_DexBonus = -1;

					if ( GetSaveFlag( flags, SaveFlag.IntBonus ) )
						m_IntBonus = reader.ReadEncodedInt();
					else
						m_IntBonus = -1;

					if ( GetSaveFlag( flags, SaveFlag.StrReq ) )
						m_StrReq = reader.ReadEncodedInt();
					else
						m_StrReq = -1;

					if ( GetSaveFlag( flags, SaveFlag.DexReq ) )
						m_DexReq = reader.ReadEncodedInt();
					else
						m_DexReq = -1;

					if ( GetSaveFlag( flags, SaveFlag.IntReq ) )
						m_IntReq = reader.ReadEncodedInt();
					else
						m_IntReq = -1;

					if ( GetSaveFlag( flags, SaveFlag.MedAllowance ) )
						m_Meditate = (ArmorMeditationAllowance)reader.ReadEncodedInt();
					else
						m_Meditate = (ArmorMeditationAllowance)(-1);

					if ( GetSaveFlag( flags, SaveFlag.SkillBonuses ) )
						m_AosSkillBonuses = new AosSkillBonuses( this, reader );

					if ( GetSaveFlag( flags, SaveFlag.PlayerConstructed ) )
						m_PlayerConstructed = true;

					break;
				}
				case 4:
				{
					m_AosAttributes = new AosAttributes( this, reader );
					m_AosArmorAttributes = new AosArmorAttributes( this, reader );
					goto case 3;
				}
				case 3:
				{
					m_PhysicalBonus = reader.ReadInt();
					m_FireBonus = reader.ReadInt();
					m_ColdBonus = reader.ReadInt();
					m_PoisonBonus = reader.ReadInt();
					m_EnergyBonus = reader.ReadInt();
					goto case 2;
				}
				case 2:
				case 1:
				{
					m_Identified = reader.ReadBool();
					goto case 0;
				}
				case 0:
				{
					m_ArmorBase = reader.ReadInt();
					m_MaxHitPoints = reader.ReadInt();
					m_HitPoints = reader.ReadInt();
					m_Crafter = reader.ReadMobile();
					m_Quality = (ArmorQuality)reader.ReadInt();
					m_Durability = (ArmorDurabilityLevel)reader.ReadInt();
					m_Protection = (ArmorProtectionLevel)reader.ReadInt();

					ArmorMaterialType mat = (ArmorMaterialType)reader.ReadInt();

					if ( m_ArmorBase == RevertArmorBase )
						m_ArmorBase = -1;

					/*m_BodyPos = (ArmorBodyType)*/reader.ReadInt();

					if ( version < 4 )
					{
						m_AosAttributes = new AosAttributes( this );
						m_AosArmorAttributes = new AosArmorAttributes( this );
					}

					if ( version < 3 && m_Quality == ArmorQuality.Exceptional )
						DistributeBonuses( 6 );

					if ( version >= 2 )
					{
						m_Resource = (CraftResource)reader.ReadInt();
					}
					else
					{
						OreInfo info;

						switch ( reader.ReadInt() )
						{
							default:
							case 0: info = OreInfo.Iron; break;
							case 1: info = OreInfo.DullCopper; break;
							case 2: info = OreInfo.ShadowIron; break;
							case 3: info = OreInfo.Copper; break;
							case 4: info = OreInfo.Bronze; break;
							case 5: info = OreInfo.Gold; break;
							case 6: info = OreInfo.Agapite; break;
							case 7: info = OreInfo.Verite; break;
							case 8: info = OreInfo.Valorite; break;
						}

						m_Resource = CraftResources.GetFromOreInfo( info, mat );
					}

					m_StrBonus = reader.ReadInt();
					m_DexBonus = reader.ReadInt();
					m_IntBonus = reader.ReadInt();
					m_StrReq = reader.ReadInt();
					m_DexReq = reader.ReadInt();
					m_IntReq = reader.ReadInt();

					if ( m_StrBonus == OldStrBonus )
						m_StrBonus = -1;

					if ( m_DexBonus == OldDexBonus )
						m_DexBonus = -1;

					if ( m_IntBonus == OldIntBonus )
						m_IntBonus = -1;

					if ( m_StrReq == OldStrReq )
						m_StrReq = -1;

					if ( m_DexReq == OldDexReq )
						m_DexReq = -1;

					if ( m_IntReq == OldIntReq )
						m_IntReq = -1;

					m_Meditate = (ArmorMeditationAllowance)reader.ReadInt();

					if ( m_Meditate == OldMedAllowance )
						m_Meditate = (ArmorMeditationAllowance)(-1);

					if ( m_Resource == CraftResource.None )
					{
						if ( mat == ArmorMaterialType.Studded || mat == ArmorMaterialType.Leather )
							m_Resource = CraftResource.RegularLeather;
						else if ( mat == ArmorMaterialType.Spined )
							m_Resource = CraftResource.SpinedLeather;
						else if ( mat == ArmorMaterialType.Horned )
							m_Resource = CraftResource.HornedLeather;
						else if ( mat == ArmorMaterialType.Barbed )
							m_Resource = CraftResource.BarbedLeather;
						else
							m_Resource = CraftResource.Iron;
					}

					if ( m_MaxHitPoints == 0 && m_HitPoints == 0 )
						m_HitPoints = m_MaxHitPoints = Utility.RandomMinMax( InitMinHits, InitMaxHits );

					break;
				}
			}

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

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

			int strBonus = ComputeStatBonus( StatType.Str );
			int dexBonus = ComputeStatBonus( StatType.Dex );
			int intBonus = ComputeStatBonus( StatType.Int );

			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();

			if ( version < 7 )
				m_PlayerConstructed = true; // we don't know, so, assume it's crafted
		}
示例#2
0
            public DungeonArmorDetail(DungeonEnum dungeonType, int tierLevel)
            {
                Dungeon   = dungeonType;
                TierLevel = tierLevel;

                switch (Dungeon)
                {
                case DungeonEnum.None:
                    break;

                case DungeonEnum.Deceit:
                    DungeonName = "Deceit";
                    Hue         = 1908;
                    EffectHue   = Hue - 1;

                    TieredArmorRating = 40 + (5 * tierLevel);

                    DexPenalty          = -3;
                    MeditationAllowance = ArmorMeditationAllowance.Half;

                    EnergySiphonOnMeleeAttackChance = .20 + (.04 * tierLevel);

                    gumpText = new string[] {
                        "Deceit Dungeon Armor",
                        "Tier " + tierLevel.ToString(),
                        "",
                        "Armor Rating: " + TieredArmorRating.ToString(),
                        "Dex Penalty: " + DexPenalty.ToString(),
                        "Meditation Allowed: 50%",
                        "",
                        "Chance of Inflicting Energy Siphon on Melee Attack: " + Utility.CreatePercentageString(EnergySiphonOnMeleeAttackChance),
                    };
                    break;

                case DungeonEnum.Destard:
                    DungeonName = "Destard";
                    Hue         = 1778;
                    EffectHue   = Hue - 1;

                    TieredArmorRating = 55 + (5 * tierLevel);

                    DexPenalty          = -10;
                    MeditationAllowance = ArmorMeditationAllowance.None;

                    MeleeDamageReceivedBonus = .13 + (.03 * tierLevel);
                    SpellDamageReceivedBonus = .13 + (.03 * tierLevel);

                    BandageSelfTimeReduction = 2 + (.5 * tierLevel);

                    gumpText = new string[] {
                        "Destard Dungeon Armor",
                        "Tier " + tierLevel.ToString(),
                        "",
                        "Armor Rating: " + TieredArmorRating.ToString(),
                        "Dex Penalty: " + DexPenalty.ToString(),
                        "Meditation Allowed: 0%",
                        "",
                        "Melee Damage Reduction: " + Utility.CreatePercentageString(MeleeDamageReceivedBonus),
                        "Spell Damage Reduction: " + Utility.CreatePercentageString(SpellDamageReceivedBonus),
                        "Bandage Self Timer Reduction: " + BandageSelfTimeReduction.ToString() + " seconds",
                    };
                    break;

                case DungeonEnum.Hythloth:
                    DungeonName = "Hythloth";
                    Hue         = 1769;
                    EffectHue   = Hue - 1;

                    TieredArmorRating = 40 + (5 * tierLevel);

                    DexPenalty          = -3;
                    MeditationAllowance = ArmorMeditationAllowance.Half;

                    MeleeDamageInflictedBonus = .10 + (.025 * tierLevel);
                    SpecialWeaponAttackBonus  = .08 + (.02 * tierLevel);

                    gumpText = new string[] {
                        "Hythloth Dungeon Armor",
                        "Tier " + tierLevel.ToString(),
                        "",
                        "Armor Rating: " + TieredArmorRating.ToString(),
                        "Dex Penalty: " + DexPenalty.ToString(),
                        "Meditation Allowed: 50%",
                        "",
                        "Melee Damage Bonus: " + Utility.CreatePercentageString(MeleeDamageInflictedBonus),
                        "Special Weapon Attack Chance Bonus: " + Utility.CreatePercentageString(SpecialWeaponAttackBonus),
                    };
                    break;

                case DungeonEnum.Shame:
                    DungeonName = "Shame";
                    Hue         = 1763;
                    EffectHue   = Hue - 1;

                    TieredArmorRating = 30 + (5 * tierLevel);

                    DexPenalty          = 0;
                    MeditationAllowance = ArmorMeditationAllowance.All;

                    SpellDamageInflictedBonus  = .15 + (.05 * tierLevel);
                    ReducedSpellManaCostChance = .15 + (.05 * tierLevel);

                    gumpText = new string[] {
                        "Shame Dungeon Armor",
                        "Tier " + tierLevel.ToString(),
                        "",
                        "Armor Rating: " + TieredArmorRating.ToString(),
                        "Dex Penalty: " + DexPenalty.ToString(),
                        "Meditation Allowed: 100%",
                        "",
                        "Spell Damage Bonus: " + Utility.CreatePercentageString(SpellDamageInflictedBonus),
                        "Chance to Cast Spell At Reduced Mana Cost: " + Utility.CreatePercentageString(ReducedSpellManaCostChance),
                    };
                    break;

                case DungeonEnum.Covetous:
                    DungeonName = "Covetous";
                    Hue         = 2212;
                    EffectHue   = Hue - 1;

                    TieredArmorRating = 30 + (5 * tierLevel);

                    DexPenalty          = 0;
                    MeditationAllowance = ArmorMeditationAllowance.All;

                    PoisonDamageInflictedScalar = 1 + (.2 + (.025 * tierLevel));
                    PoisonSpellNoManaCostChance = .30 + (.05 * tierLevel);
                    NoPoisonChargeSpentChance   = .2 + (.025 * tierLevel);

                    gumpText = new string[] {
                        "Covetous Dungeon Armor",
                        "Tier " + tierLevel.ToString(),
                        "",
                        "Armor Rating: " + TieredArmorRating.ToString(),
                        "Dex Penalty: " + DexPenalty.ToString(),
                        "Meditation Allowed: 100%",
                        "",
                        "Poison Damage Inflicted Bonus: " + Utility.CreatePercentageString(PoisonDamageInflictedScalar - 1),
                        "Chance to Cast Poison Spells At No Mana Cost: " + Utility.CreatePercentageString(PoisonSpellNoManaCostChance),
                        "Chance to Apply Poison And Not Spend Poison Charge: " + Utility.CreatePercentageString(NoPoisonChargeSpentChance),
                    };
                    break;

                case DungeonEnum.Wrong:
                    DungeonName = "Wrong";
                    Hue         = 2675;
                    EffectHue   = Hue - 1;

                    TieredArmorRating = 40 + (5 * tierLevel);

                    DexPenalty          = -3;
                    MeditationAllowance = ArmorMeditationAllowance.Half;

                    BonusStealthSteps            = 4 + (1 * tierLevel);
                    BackstabDamageInflictedBonus = .40 + (.05 * tierLevel);
                    StealthLeavesFootprints      = true;

                    gumpText = new string[] {
                        "Wrong Dungeon Armor",
                        "Tier " + tierLevel.ToString(),
                        "",
                        "Armor Rating: " + TieredArmorRating.ToString(),
                        "Dex Penalty: " + DexPenalty.ToString(),
                        "Meditation Allowed: 50%",
                        "",
                        "Bonus Stealth Steps: " + BonusStealthSteps.ToString(),
                        "Backstab Damage Inflicted Bonus: " + Utility.CreatePercentageString(BackstabDamageInflictedBonus),
                        "Stealth Movement Now Leaves Footprints",
                    };
                    break;

                case DungeonEnum.Despise:
                    DungeonName = "Despise";
                    Hue         = 2516;
                    EffectHue   = Hue - 1;

                    TieredArmorRating = 30 + (5 * tierLevel);

                    DexPenalty          = 0;
                    MeditationAllowance = ArmorMeditationAllowance.All;

                    ProvokedCreatureDamageInflictedBonus = .2 + (.025 * tierLevel);
                    IgnorePeacemakingBreakChance         = .30 + (.05 * tierLevel);
                    DiscordanceEffectBonus = .04 + (.015 * tierLevel);

                    gumpText = new string[] {
                        "Despise Dungeon Armor",
                        "Tier " + tierLevel.ToString(),
                        "",
                        "Armor Rating: " + TieredArmorRating.ToString(),
                        "Dex Penalty: " + DexPenalty.ToString(),
                        "Meditation Allowed: 100%",
                        "",
                        "Provoked Creature Damage Inflicted Bonus: " + Utility.CreatePercentageString(ProvokedCreatureDamageInflictedBonus),
                        "Chance to Avoid Peacemaking Breaking: " + Utility.CreatePercentageString(IgnorePeacemakingBreakChance),
                        "Discordance Effect Bonus: " + Utility.CreatePercentageString(DiscordanceEffectBonus),
                    };
                    break;

                case DungeonEnum.Ice:
                    DungeonName = "Ice";
                    Hue         = 2579;
                    EffectHue   = Hue - 1;

                    TieredArmorRating = 55 + (5 * tierLevel);

                    DexPenalty          = -10;
                    MeditationAllowance = ArmorMeditationAllowance.None;

                    BreathDamageReceivedScalar  = 1 - (.40 + (.05 * tierLevel));
                    BleedDamageReceivedScalar   = 1 - (.40 + (.05 * tierLevel));
                    PoisonDamageReceivedScalar  = 1 - (.40 + (.05 * tierLevel));
                    DiseaseDamageReceivedScalar = 1 - (.40 + (.05 * tierLevel));

                    BandageHealThroughPoisonScalar = .40 + (.05 * tierLevel);

                    SpecialEffectAvoidanceChance = .40 + (.05 * tierLevel);

                    gumpText = new string[] {
                        "Ice Dungeon Armor",
                        "Tier " + tierLevel.ToString(),
                        "",
                        "Armor Rating: " + TieredArmorRating.ToString(),
                        "Dex Penalty: " + DexPenalty.ToString(),
                        "Meditation Allowed: 0%",
                        "",
                        "Breath Damage Reduction: " + Utility.CreatePercentageString(1 - BreathDamageReceivedScalar),
                        "Bleed Damage Reduction: " + Utility.CreatePercentageString(1 - BleedDamageReceivedScalar),
                        "Poison Damage Reduction: " + Utility.CreatePercentageString(1 - PoisonDamageReceivedScalar),
                        "Disease Damage Reduction: " + Utility.CreatePercentageString(1 - DiseaseDamageReceivedScalar),
                        "Bandage Heal Through Poison Amount: " + Utility.CreatePercentageString(BandageHealThroughPoisonScalar),
                        "Special Effect Avoidance Chance: " + Utility.CreatePercentageString(SpecialEffectAvoidanceChance),
                    };
                    break;

                case DungeonEnum.Fire:
                    DungeonName = "Fire";
                    Hue         = 2635;
                    EffectHue   = Hue - 1;

                    TieredArmorRating = 55 + (5 * tierLevel);

                    DexPenalty          = -10;
                    MeditationAllowance = ArmorMeditationAllowance.None;

                    BreathDamageReceivedScalar = 1 - (.40 + (.05 * tierLevel));

                    FlamestrikeOnMeleeAttackChance     = 0.10 + (.05 * tierLevel); //0.05 + (.025 * tierLevel) Old
                    FlamestrikeOnReceiveMeleeHitChance = 0.10 + (.05 * tierLevel); //0.05 + (.025 * tierLevel) Old

                    gumpText = new string[] {
                        "Fire Dungeon Armor",
                        "Tier " + tierLevel.ToString(),
                        "",
                        "Armor Rating: " + TieredArmorRating.ToString(),
                        "Dex Penalty: " + DexPenalty.ToString(),
                        "Meditation Allowed: 0%",
                        "",
                        "Breath Damage Reduction: " + Utility.CreatePercentageString(1 - BreathDamageReceivedScalar),
                        "Chance of Flamestrike on Melee Attack: " + Utility.CreatePercentageString(FlamestrikeOnMeleeAttackChance),
                        "Chance of Flamestrike on Being Hit By Melee Attack: " + Utility.CreatePercentageString(FlamestrikeOnReceiveMeleeHitChance),
                    };
                    break;
                }
            }