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