public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); switch (version) { case 1: { m_Attributes = new MagicalAttributes(this, reader); goto case 0; } case 0: { if (version == 0) { m_Attributes = new MagicalAttributes(this); } break; } } }
public BaseEquipableLight(int itemID) : base(itemID) { Layer = Layer.TwoHanded; m_Attributes = new MagicalAttributes(this); }
public FishingPole() : base(0x0DC0) { Layer = Layer.OneHanded; Weight = 8.0; m_Attributes = new MagicalAttributes( this ); }
public FishingPole() : base(0x0DC0) { Layer = Layer.OneHanded; Weight = 8.0; m_Attributes = new MagicalAttributes(this); }
public static void ApplyAttributesTo(Spellbook spellbook, bool isRunicTool, int luckChance, int attributeCount, int min, int max) { m_IsRunicTool = isRunicTool; m_LuckChance = luckChance; MagicalAttributes primary = spellbook.Attributes; SkillBonuses skills = spellbook.SkillBonuses; m_Props.SetAll(false); for (int i = 0; i < attributeCount; ++i) { int random = GetUniqueRandom(12); if (random == -1) { break; } switch (random) { case 0: ApplyAttribute(primary, min, max, MagicalAttribute.LowerRegCost, 1, 16); break; case 1: ApplyAttribute(primary, min, max, MagicalAttribute.LowerManaCost, 1, 6); break; case 2: ApplyAttribute(primary, min, max, MagicalAttribute.RegenMana, 1, 1); break; case 3: { ApplyAttribute(primary, min, max, MagicalAttribute.BonusInt, 1, 6); for (int j = 0; j < 4; ++j) { m_Props.Set(j, true); } break; } case 4: ApplyAttribute(primary, min, max, MagicalAttribute.BonusMana, 1, 6); break; case 5: ApplyAttribute(primary, min, max, MagicalAttribute.CastSpeed, 1, 1); break; case 6: ApplyAttribute(primary, min, max, MagicalAttribute.CastRecovery, 1, 2); break; case 7: ApplyAttribute(primary, min, max, MagicalAttribute.SpellDamage, 1, 9); break; case 8: ApplySkillBonus(skills, min, max, 0, 1, 12); break; case 9: ApplySkillBonus(skills, min, max, 1, 1, 12); break; case 10: ApplySkillBonus(skills, min, max, 2, 1, 12); break; case 11: ApplySkillBonus(skills, min, max, 3, 1, 12); break; } } }
public virtual void AlterFrom(BaseQuiver orig) { m_Altered = true; m_MagicalAttributes = orig.Attributes; Crafter = orig.Crafter; Exceptional = orig.Exceptional; }
private static void ApplyAttribute(MagicalAttributes attrs, int min, int max, MagicalAttribute attr, int low, int high, int scale) { if (attr == MagicalAttribute.CastSpeed) { attrs[attr] += Scale(min, max, low / scale, high / scale) * scale; } else { attrs[attr] = Scale(min, max, low / scale, high / scale) * scale; } }
public BaseQuiver() : base(0x2FB7) { Weight = 2.0; Layer = Layer.Cloak; GumpID = 0x108; DropSound = 0x4F; MaxItems = 1; m_Attributes = new MagicalAttributes(this); }
public Spellbook(ulong content, int itemID) : base(itemID) { m_MagicalAttributes = new MagicalAttributes(this); m_SkillBonuses = new SkillBonuses(this); Weight = 0.0; Layer = Layer.OneHanded; LootType = LootType.Blessed; Content = content; }
} // Talisman public BaseTalisman(int ItemID) : base(ItemID) { Layer = Layer.Talisman; m_MagicalAttributes = new MagicalAttributes(this); m_AosResistances = new ElementAttributes(this); m_SkillBonuses = new SkillBonuses(this); // 1% chance to spawn with the "Owned by no one" property. m_Ownable = (0.01 > Utility.RandomDouble()); m_HitPoints = m_MaxHitPoints = Utility.RandomMinMax(InitMinHits, InitMaxHits); }
public BaseJewel( int itemID, Layer layer ) : base(itemID) { m_MagicalAttributes = new MagicalAttributes( this ); m_AosResistances = new ElementAttributes( this ); m_SkillBonuses = new SkillBonuses( this ); m_AbsorptionAttributes = new AbsorptionAttributes( this ); m_Resource = CraftResource.Iron; m_GemType = GemType.None; Layer = layer; m_HitPoints = m_MaxHitPoints = Utility.RandomMinMax( InitMinHits, InitMaxHits ); }
public BaseJewel(int itemID, Layer layer) : base(itemID) { m_MagicalAttributes = new MagicalAttributes(this); m_AosResistances = new ElementAttributes(this); m_SkillBonuses = new SkillBonuses(this); m_AbsorptionAttributes = new AbsorptionAttributes(this); m_Resource = CraftResource.Iron; m_GemType = GemType.None; Layer = layer; m_HitPoints = m_MaxHitPoints = Utility.RandomMinMax(InitMinHits, InitMaxHits); }
public BaseClothing( int itemID, Layer layer, int hue ) : base(itemID) { Layer = layer; Hue = hue; m_Resource = DefaultResource; m_MagicalAttributes = new MagicalAttributes( this ); m_ClothingAttributes = new ArmorAttributes( this ); m_SkillBonuses = new SkillBonuses( this ); m_Resistances = new ElementAttributes( this ); m_AbsorptionAttributes = new AbsorptionAttributes( this ); m_HitPoints = m_MaxHitPoints = Utility.RandomMinMax( InitMinHits, InitMaxHits ); }
public BaseClothing(int itemID, Layer layer, int hue) : base(itemID) { Layer = layer; Hue = hue; m_Resource = DefaultResource; m_MagicalAttributes = new MagicalAttributes(this); m_ClothingAttributes = new ArmorAttributes(this); m_SkillBonuses = new SkillBonuses(this); m_Resistances = new ElementAttributes(this); m_AbsorptionAttributes = new AbsorptionAttributes(this); m_HitPoints = m_MaxHitPoints = Utility.RandomMinMax(InitMinHits, InitMaxHits); }
public virtual void AlterFrom(BaseClothing orig) { m_Altered = true; m_MagicalAttributes = orig.Attributes; m_ClothingAttributes = orig.ClothingAttributes; m_SkillBonuses = orig.SkillBonuses; m_Resistances = orig.Resistances; m_AbsorptionAttributes = orig.AbsorptionAttributes; Crafter = orig.Crafter; Exceptional = orig.Exceptional; MaxHitPoints = orig.MaxHitPoints; HitPoints = orig.HitPoints; }
public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); switch ( version ) { case 1: { m_Attributes = new MagicalAttributes( this, reader ); goto case 0; } case 0: { if ( version == 0 ) m_Attributes = new MagicalAttributes( this ); break; } } }
public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); switch (version) { case 3: { m_Exceptional = reader.ReadBool(); m_Crafter = reader.ReadMobile(); goto case 2; } case 2: { m_Attributes = new MagicalAttributes(this, reader); break; } } MaxItems = 1; }
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(); } }
public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); switch (version) { case 9: { SaveFlag flags = (SaveFlag)reader.ReadEncodedInt(); if (GetSaveFlag(flags, SaveFlag.Resource)) { m_Resource = (CraftResource)reader.ReadInt(); } else { m_Resource = DefaultResource; } if (GetSaveFlag(flags, SaveFlag.Attributes)) { m_MagicalAttributes = new MagicalAttributes(this, reader); } else { m_MagicalAttributes = new MagicalAttributes(this); } if (GetSaveFlag(flags, SaveFlag.ClothingAttributes)) { m_ClothingAttributes = new ArmorAttributes(this, reader); } else { m_ClothingAttributes = new ArmorAttributes(this); } if (GetSaveFlag(flags, SaveFlag.SkillBonuses)) { m_SkillBonuses = new SkillBonuses(this, reader); } else { m_SkillBonuses = new SkillBonuses(this); } if (GetSaveFlag(flags, SaveFlag.Resistances)) { m_Resistances = new ElementAttributes(this, reader); } else { m_Resistances = new ElementAttributes(this); } if (GetSaveFlag(flags, SaveFlag.MaxHitPoints)) { m_MaxHitPoints = reader.ReadInt(); } if (GetSaveFlag(flags, SaveFlag.HitPoints)) { m_HitPoints = reader.ReadInt(); } if (GetSaveFlag(flags, SaveFlag.Crafter)) { m_Crafter = reader.ReadMobile(); } if (GetSaveFlag(flags, SaveFlag.Exceptional)) { m_Exceptional = true; } if (GetSaveFlag(flags, SaveFlag.PlayerConstructed)) { m_PlayerConstructed = true; } if (GetSaveFlag(flags, SaveFlag.AbsorptionAttributes)) { m_AbsorptionAttributes = new AbsorptionAttributes(this, reader); } else { m_AbsorptionAttributes = new AbsorptionAttributes(this); } if (GetSaveFlag(flags, SaveFlag.Altered)) { m_Altered = true; } break; } case 8: { m_AbsorptionAttributes = new AbsorptionAttributes(this, reader); m_MaxHitPoints = reader.ReadInt(); m_HitPoints = reader.ReadInt(); m_Resource = (CraftResource)reader.ReadInt(); m_MagicalAttributes = new MagicalAttributes(this, reader); m_ClothingAttributes = new ArmorAttributes(this, reader); m_SkillBonuses = new SkillBonuses(this, reader); m_Resistances = new ElementAttributes(this, reader); break; } } Mobile parent = Parent as Mobile; if (parent != null) { m_SkillBonuses.AddTo(parent); AddStatBonuses(parent); parent.CheckStatTimers(); } }
public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); switch (version) { case 8: { m_Exceptional = reader.ReadBool(); m_PlayerConstructed = reader.ReadBool(); m_Crafter = reader.ReadMobile(); goto case 7; } case 7: { m_AbsorptionAttributes = new AbsorptionAttributes(this, reader); m_TimesImbued = reader.ReadEncodedInt(); m_MaxHitPoints = reader.ReadEncodedInt(); m_HitPoints = reader.ReadEncodedInt(); m_Resource = (CraftResource)reader.ReadEncodedInt(); m_GemType = (GemType)reader.ReadEncodedInt(); m_MagicalAttributes = new MagicalAttributes(this, reader); m_AosResistances = new ElementAttributes(this, reader); m_SkillBonuses = new SkillBonuses(this, reader); if (Parent is Mobile) { m_SkillBonuses.AddTo((Mobile)Parent); } break; } } 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(); } }
public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); switch (version) { case 4: { m_MaxHitPoints = reader.ReadEncodedInt(); m_HitPoints = reader.ReadEncodedInt(); goto case 3; } case 3: { m_Slayer = (SlayerName)reader.ReadInt(); m_Slayer2 = (SlayerName)reader.ReadInt(); goto case 2; } case 2: { m_Ownable = (bool)reader.ReadBool(); m_Owner = (Mobile)reader.ReadMobile(); m_CraftBonusRegular = (CraftList)reader.ReadInt(); m_CraftBonusRegularValue = reader.ReadInt(); m_CraftBonusExcep = (CraftList)reader.ReadInt(); m_CraftBonusExcepValue = reader.ReadInt(); m_ProtectionEntry = (NPC_Name)reader.ReadInt(); m_ProtectionValue = reader.ReadInt(); m_KillersEntry = (NPC_Name)reader.ReadInt(); m_KillersValue = reader.ReadInt(); m_TalisSlayer = (TalisSlayerName)reader.ReadInt(); m_TalismanType = (TalismanType)reader.ReadInt(); m_Charges = reader.ReadInt(); goto case 1; } case 1: { m_MagicalAttributes = new MagicalAttributes(this, reader); m_AosResistances = new ElementAttributes(this, reader); m_SkillBonuses = new SkillBonuses(this, reader); if (Parent is Mobile) { //-------- Charged Time Left ----------- m_isequiped = true; InvalidateProperties(); //------ FIN Charged Time Left --------- 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(); } break; } case 0: { if (Parent is Mobile) { //-------- Charged Time Left ----------- m_isequiped = true; InvalidateProperties(); //------ FIN Charged Time Left --------- m_SkillBonuses.AddTo((Mobile)Parent); } m_MagicalAttributes = new MagicalAttributes(this); m_AosResistances = new ElementAttributes(this); m_SkillBonuses = new SkillBonuses(this); break; } } if (version < 2) { m_Ownable = (bool)reader.ReadBool(); m_Owner = (Mobile)reader.ReadMobile(); m_CraftBonusRegular = (CraftList)reader.ReadInt(); m_CraftBonusRegularValue = reader.ReadInt(); m_CraftBonusExcep = (CraftList)reader.ReadInt(); m_CraftBonusExcepValue = reader.ReadInt(); m_ProtectionEntry = (NPC_Name)reader.ReadInt(); m_ProtectionValue = reader.ReadInt(); m_KillersEntry = (NPC_Name)reader.ReadInt(); m_KillersValue = reader.ReadInt(); m_TalisSlayer = (TalisSlayerName)reader.ReadInt(); m_TalismanType = (TalismanType)reader.ReadInt(); m_Charges = reader.ReadInt(); } }
private static void ApplyAttribute(MagicalAttributes attrs, int min, int max, MagicalAttribute attr, int low, int high) { ApplyAttribute(attrs, min, max, attr, low, high, 1); }
public static void ApplyAttributesTo(BaseWeapon weapon, bool isRunicTool, int luckChance, int attributeCount, int min, int max) { m_IsRunicTool = isRunicTool; m_LuckChance = luckChance; MagicalAttributes primary = weapon.Attributes; WeaponAttributes secondary = weapon.WeaponAttributes; ElementAttributes resistances = weapon.Resistances; m_Props.SetAll(false); if (weapon is BaseRanged || weapon is BaseThrowing) { m_Props.Set(2, true); // ranged weapons cannot be ubws or mageweapon } if (!(weapon is BaseRanged)) { m_Props.Set(28, true); // Solo los arcos pueden llevar la propiedad Balanced m_Props.Set(29, true); // Solo los arcos pueden llevar la propiedad Velocity } if (isRunicTool) { m_Props.Set(16, true); // Lower requirements don't spawn from runic tools } bool isRunicToolRanged = isRunicTool && weapon is BaseRanged; for (int i = 0; i < attributeCount; ++i) { int random = GetUniqueRandom(30); if (random == -1) { break; } switch (random) { case 0: { switch (Utility.Random(5)) { case 0: ApplyAttribute(secondary, min, max, WeaponAttribute.HitPhysicalArea, 2, 50, 2); break; case 1: ApplyAttribute(secondary, min, max, WeaponAttribute.HitFireArea, 2, 50, 2); break; case 2: ApplyAttribute(secondary, min, max, WeaponAttribute.HitColdArea, 2, 50, 2); break; case 3: ApplyAttribute(secondary, min, max, WeaponAttribute.HitPoisonArea, 2, 50, 2); break; case 4: ApplyAttribute(secondary, min, max, WeaponAttribute.HitEnergyArea, 2, 50, 2); break; } break; } case 1: { switch (Utility.Random(4)) { case 0: ApplyAttribute(secondary, min, max, WeaponAttribute.HitMagicArrow, 2, 50, 2); break; case 1: ApplyAttribute(secondary, min, max, WeaponAttribute.HitHarm, 2, 50, 2); break; case 2: ApplyAttribute(secondary, min, max, WeaponAttribute.HitFireball, 2, 50, 2); break; case 3: ApplyAttribute(secondary, min, max, WeaponAttribute.HitLightning, 2, 50, 2); break; } break; } case 2: { switch (Utility.Random(2)) { case 0: ApplyAttribute(secondary, min, max, WeaponAttribute.UseBestSkill, 1, 1); break; case 1: ApplyAttribute(secondary, min, max, WeaponAttribute.MageWeapon, 1, 10); break; } break; } case 3: { MagicalAttribute attr = MagicalAttribute.WeaponDamage; int oldValue = primary[attr]; ApplyAttribute(primary, min, max, attr, 1, 50); if (oldValue >= primary[attr]) { primary[attr] = oldValue; i--; } break; } case 4: ApplyAttribute(primary, min, max, MagicalAttribute.DefendChance, 1, isRunicToolRanged ? 25 : 15); break; case 5: ApplyAttribute(primary, min, max, MagicalAttribute.CastSpeed, 1, 1); break; case 6: ApplyAttribute(primary, min, max, MagicalAttribute.AttackChance, 1, isRunicToolRanged ? 25 : 15); break; case 7: ApplyAttribute(primary, min, max, MagicalAttribute.Luck, 1, isRunicToolRanged ? 120 : 100); break; case 8: ApplyAttribute(primary, min, max, MagicalAttribute.WeaponSpeed, 5, 30, 5); break; case 9: ApplyAttribute(primary, min, max, MagicalAttribute.SpellChanneling, 1, 1); break; case 10: ApplyAttribute(secondary, min, max, WeaponAttribute.HitDispel, 2, 50, 2); break; case 11: ApplyAttribute(secondary, min, max, WeaponAttribute.HitLeechHits, 2, 50, 2); break; case 12: ApplyAttribute(secondary, min, max, WeaponAttribute.HitLowerAttack, 2, 50, 2); break; case 13: ApplyAttribute(secondary, min, max, WeaponAttribute.HitLowerDefend, 2, 50, 2); break; case 14: ApplyAttribute(secondary, min, max, WeaponAttribute.HitLeechMana, 2, 50, 2); break; case 15: ApplyAttribute(secondary, min, max, WeaponAttribute.HitLeechStam, 2, 50, 2); break; case 16: ApplyAttribute(secondary, min, max, WeaponAttribute.LowerStatReq, 10, 100, 10); break; case 17: ApplyAttribute(resistances, min, max, ElementAttribute.Physical, 1, 15); break; case 18: ApplyAttribute(resistances, min, max, ElementAttribute.Fire, 1, 15); break; case 19: ApplyAttribute(resistances, min, max, ElementAttribute.Cold, 1, 15); break; case 20: ApplyAttribute(resistances, min, max, ElementAttribute.Poison, 1, 15); break; case 21: ApplyAttribute(resistances, min, max, ElementAttribute.Energy, 1, 15); break; case 22: ApplyAttribute(secondary, min, max, WeaponAttribute.DurabilityBonus, 10, 100, 10); i--; break; case 23: SlayerName slayer = GetRandomSlayer(); if (weapon.Slayer == SlayerName.None) { weapon.Slayer = slayer; } else { weapon.Slayer2 = slayer; } break; case 24: AssignElementalDamage(weapon, ElementAttribute.Fire); i--; break; case 25: AssignElementalDamage(weapon, ElementAttribute.Cold); i--; break; case 26: AssignElementalDamage(weapon, ElementAttribute.Poison); i--; break; case 27: AssignElementalDamage(weapon, ElementAttribute.Energy); i--; break; case 28: ApplyAttribute(secondary, min, max, WeaponAttribute.Balanced, 1, 1); break; case 29: ApplyAttribute(secondary, min, max, WeaponAttribute.Velocity, 10, 50, 1); break; } } }
public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); switch ( version ) { case 9: { SaveFlag flags = (SaveFlag) reader.ReadEncodedInt(); if ( GetSaveFlag( flags, SaveFlag.Resource ) ) m_Resource = (CraftResource) reader.ReadInt(); else m_Resource = DefaultResource; if ( GetSaveFlag( flags, SaveFlag.Attributes ) ) m_MagicalAttributes = new MagicalAttributes( this, reader ); else m_MagicalAttributes = new MagicalAttributes( this ); if ( GetSaveFlag( flags, SaveFlag.ClothingAttributes ) ) m_ClothingAttributes = new ArmorAttributes( this, reader ); else m_ClothingAttributes = new ArmorAttributes( this ); if ( GetSaveFlag( flags, SaveFlag.SkillBonuses ) ) m_SkillBonuses = new SkillBonuses( this, reader ); else m_SkillBonuses = new SkillBonuses( this ); if ( GetSaveFlag( flags, SaveFlag.Resistances ) ) m_Resistances = new ElementAttributes( this, reader ); else m_Resistances = new ElementAttributes( this ); if ( GetSaveFlag( flags, SaveFlag.MaxHitPoints ) ) m_MaxHitPoints = reader.ReadInt(); if ( GetSaveFlag( flags, SaveFlag.HitPoints ) ) m_HitPoints = reader.ReadInt(); if ( GetSaveFlag( flags, SaveFlag.Crafter ) ) m_Crafter = reader.ReadMobile(); if ( GetSaveFlag( flags, SaveFlag.Exceptional ) ) m_Exceptional = true; if ( GetSaveFlag( flags, SaveFlag.PlayerConstructed ) ) m_PlayerConstructed = true; if ( GetSaveFlag( flags, SaveFlag.AbsorptionAttributes ) ) m_AbsorptionAttributes = new AbsorptionAttributes( this, reader ); else m_AbsorptionAttributes = new AbsorptionAttributes( this ); if ( GetSaveFlag( flags, SaveFlag.Altered ) ) m_Altered = true; break; } case 8: { m_AbsorptionAttributes = new AbsorptionAttributes( this, reader ); m_MaxHitPoints = reader.ReadInt(); m_HitPoints = reader.ReadInt(); m_Resource = (CraftResource) reader.ReadInt(); m_MagicalAttributes = new MagicalAttributes( this, reader ); m_ClothingAttributes = new ArmorAttributes( this, reader ); m_SkillBonuses = new SkillBonuses( this, reader ); m_Resistances = new ElementAttributes( this, reader ); break; } } Mobile parent = Parent as Mobile; if ( parent != null ) { m_SkillBonuses.AddTo( parent ); AddStatBonuses( parent ); parent.CheckStatTimers(); } }
public virtual void AlterFrom( BaseQuiver orig ) { m_Altered = true; m_MagicalAttributes = orig.Attributes; Crafter = orig.Crafter; Exceptional = orig.Exceptional; }
public virtual void AlterFrom( BaseClothing orig ) { m_Altered = true; m_MagicalAttributes = orig.Attributes; m_ClothingAttributes = orig.ClothingAttributes; m_SkillBonuses = orig.SkillBonuses; m_Resistances = orig.Resistances; m_AbsorptionAttributes = orig.AbsorptionAttributes; Crafter = orig.Crafter; Exceptional = orig.Exceptional; MaxHitPoints = orig.MaxHitPoints; HitPoints = orig.HitPoints; }
public Spellbook( ulong content, int itemID ) : base(itemID) { m_MagicalAttributes = new MagicalAttributes( this ); m_SkillBonuses = new SkillBonuses( this ); Weight = 0.0; Layer = Layer.OneHanded; LootType = LootType.Blessed; Content = content; }
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(); }
public static void ApplyAttributesTo(BaseArmor armor, bool isRunicTool, int luckChance, int attributeCount, int min, int max) { m_IsRunicTool = isRunicTool; m_LuckChance = luckChance; MagicalAttributes primary = armor.Attributes; ArmorAttributes secondary = armor.ArmorAttributes; ElementAttributes resistances = armor.Resistances; m_Props.SetAll(false); bool isShield = (armor is BaseShield); int baseCount = (isShield ? 8 : 20); int baseOffset = (isShield ? 0 : 4); if (!isShield && armor.Meditable) { m_Props.Set(4, true); // remove mage armor from possible properties } if (armor.PlayerConstructed) { m_Props.Set(2, true); // remove durability bonus from crafted armor } if (armor.MaterialType == ArmorMaterialType.Leather) { m_Props.Set(0, true); // remove lower stat requiments from leather armor } for (int i = 0; i < attributeCount; ++i) { int random = GetUniqueRandom(baseCount); if (random == -1) { break; } random += baseOffset; switch (random) { /* Begin Shields */ case 0: ApplyAttribute(primary, min, max, MagicalAttribute.SpellChanneling, 1, 1); break; case 1: ApplyAttribute(primary, min, max, MagicalAttribute.DefendChance, 1, 15); break; case 2: ApplyAttribute(primary, min, max, MagicalAttribute.AttackChance, 1, 15); break; case 3: ApplyAttribute(primary, min, max, MagicalAttribute.CastSpeed, 1, 1); break; /* Begin Armor */ case 4: ApplyAttribute(secondary, min, max, ArmorAttribute.LowerStatReq, 10, 100, 10); break; case 5: ApplyAttribute(secondary, min, max, ArmorAttribute.SelfRepair, 1, 5); break; case 6: ApplyAttribute(secondary, min, max, ArmorAttribute.DurabilityBonus, 10, 100, 10); break; case 7: ApplyAttribute(primary, min, max, MagicalAttribute.ReflectPhysical, 1, 15); break; /* End Shields */ case 8: ApplyAttribute(secondary, min, max, ArmorAttribute.MageArmor, 1, 1); break; case 9: ApplyAttribute(primary, min, max, MagicalAttribute.RegenHits, 1, 2); break; case 10: ApplyAttribute(primary, min, max, MagicalAttribute.RegenStam, 1, 3); break; case 11: ApplyAttribute(primary, min, max, MagicalAttribute.RegenMana, 1, 2); break; case 12: ApplyAttribute(primary, min, max, MagicalAttribute.NightSight, 1, 1); break; case 13: ApplyAttribute(primary, min, max, MagicalAttribute.BonusHits, 1, 5); break; case 14: ApplyAttribute(primary, min, max, MagicalAttribute.BonusStam, 1, 8); break; case 15: ApplyAttribute(primary, min, max, MagicalAttribute.BonusMana, 1, 8); break; case 16: ApplyAttribute(primary, min, max, MagicalAttribute.LowerManaCost, 1, 8); break; case 17: ApplyAttribute(primary, min, max, MagicalAttribute.LowerRegCost, 1, 20); break; case 18: ApplyAttribute(primary, min, max, MagicalAttribute.Luck, 1, 100); break; case 19: { ApplyAttribute(resistances, min, max, ElementAttribute.Physical, 1, 15, armor.PhysicalBonus); armor.PhysicalBonus = 0; break; } case 20: { ApplyAttribute(resistances, min, max, ElementAttribute.Fire, 1, 15, armor.FireBonus); armor.FireBonus = 0; break; } case 21: { ApplyAttribute(resistances, min, max, ElementAttribute.Cold, 1, 15, armor.ColdBonus); armor.ColdBonus = 0; break; } case 22: { ApplyAttribute(resistances, min, max, ElementAttribute.Poison, 1, 15, armor.PoisonBonus); armor.PoisonBonus = 0; break; } case 23: { ApplyAttribute(resistances, min, max, ElementAttribute.Energy, 1, 15, armor.EnergyBonus); armor.EnergyBonus = 0; break; } /* End Armor */ } } }
public static void ApplyAttributesTo(BaseHat hat, bool isRunicTool, int luckChance, int attributeCount, int min, int max) { m_IsRunicTool = isRunicTool; m_LuckChance = luckChance; MagicalAttributes primary = hat.Attributes; ArmorAttributes secondary = hat.ClothingAttributes; ElementAttributes resists = hat.Resistances; m_Props.SetAll(false); for (int i = 0; i < attributeCount; ++i) { int random = GetUniqueRandom(19); if (random == -1) { break; } switch (random) { case 0: ApplyAttribute(secondary, min, max, ArmorAttribute.LowerStatReq, 10, 100, 10); break; case 1: ApplyAttribute(secondary, min, max, ArmorAttribute.SelfRepair, 1, 5); break; case 2: ApplyAttribute(secondary, min, max, ArmorAttribute.DurabilityBonus, 10, 100, 10); break; case 3: ApplyAttribute(primary, min, max, MagicalAttribute.ReflectPhysical, 1, 15); break; case 4: ApplyAttribute(primary, min, max, MagicalAttribute.RegenHits, 1, 2); break; case 5: ApplyAttribute(primary, min, max, MagicalAttribute.RegenStam, 1, 3); break; case 6: ApplyAttribute(primary, min, max, MagicalAttribute.RegenMana, 1, 2); break; case 7: ApplyAttribute(primary, min, max, MagicalAttribute.NightSight, 1, 1); break; case 8: ApplyAttribute(primary, min, max, MagicalAttribute.BonusHits, 1, 5); break; case 9: ApplyAttribute(primary, min, max, MagicalAttribute.BonusStam, 1, 8); break; case 10: ApplyAttribute(primary, min, max, MagicalAttribute.BonusMana, 1, 8); break; case 11: ApplyAttribute(primary, min, max, MagicalAttribute.LowerManaCost, 1, 8); break; case 12: ApplyAttribute(primary, min, max, MagicalAttribute.LowerRegCost, 1, 20); break; case 13: ApplyAttribute(primary, min, max, MagicalAttribute.Luck, 1, 100); break; case 14: ApplyAttribute(resists, min, max, ElementAttribute.Physical, 1, 15); break; case 15: ApplyAttribute(resists, min, max, ElementAttribute.Fire, 1, 15); break; case 16: ApplyAttribute(resists, min, max, ElementAttribute.Cold, 1, 15); break; case 17: ApplyAttribute(resists, min, max, ElementAttribute.Poison, 1, 15); break; case 18: ApplyAttribute(resists, min, max, ElementAttribute.Energy, 1, 15); break; } } }
public static void ApplyAttributesTo(BaseJewel jewelry, bool isRunicTool, int luckChance, int attributeCount, int min, int max) { m_IsRunicTool = isRunicTool; m_LuckChance = luckChance; MagicalAttributes primary = jewelry.Attributes; ElementAttributes resists = jewelry.Resistances; SkillBonuses skills = jewelry.SkillBonuses; m_Props.SetAll(false); for (int i = 0; i < attributeCount; ++i) { int random = GetUniqueRandom(24); if (random == -1) { break; } switch (random) { case 0: ApplyAttribute(resists, min, max, ElementAttribute.Physical, 1, 15); break; case 1: ApplyAttribute(resists, min, max, ElementAttribute.Fire, 1, 15); break; case 2: ApplyAttribute(resists, min, max, ElementAttribute.Cold, 1, 15); break; case 3: ApplyAttribute(resists, min, max, ElementAttribute.Poison, 1, 15); break; case 4: ApplyAttribute(resists, min, max, ElementAttribute.Energy, 1, 15); break; case 5: ApplyAttribute(primary, min, max, MagicalAttribute.WeaponDamage, 1, 25); break; case 6: ApplyAttribute(primary, min, max, MagicalAttribute.DefendChance, 1, 15); break; case 7: ApplyAttribute(primary, min, max, MagicalAttribute.AttackChance, 1, 15); break; case 8: ApplyAttribute(primary, min, max, MagicalAttribute.BonusStr, 1, 8); break; case 9: ApplyAttribute(primary, min, max, MagicalAttribute.BonusDex, 1, 8); break; case 10: ApplyAttribute(primary, min, max, MagicalAttribute.BonusInt, 1, 8); break; case 11: ApplyAttribute(primary, min, max, MagicalAttribute.EnhancePotions, 5, 25, 5); break; case 12: ApplyAttribute(primary, min, max, MagicalAttribute.CastSpeed, 1, 1); break; case 13: ApplyAttribute(primary, min, max, MagicalAttribute.CastRecovery, 1, 3); break; case 14: ApplyAttribute(primary, min, max, MagicalAttribute.LowerManaCost, 1, 8); break; case 15: ApplyAttribute(primary, min, max, MagicalAttribute.LowerRegCost, 1, 20); break; case 16: ApplyAttribute(primary, min, max, MagicalAttribute.Luck, 1, 100); break; case 17: ApplyAttribute(primary, min, max, MagicalAttribute.SpellDamage, 1, 12); break; case 18: ApplyAttribute(primary, min, max, MagicalAttribute.NightSight, 1, 1); break; case 19: ApplySkillBonus(skills, min, max, 0, 1, 15); break; case 20: ApplySkillBonus(skills, min, max, 1, 1, 15); break; case 21: ApplySkillBonus(skills, min, max, 2, 1, 15); break; case 22: ApplySkillBonus(skills, min, max, 3, 1, 15); break; case 23: ApplySkillBonus(skills, min, max, 4, 1, 15); break; } } }
public BaseTalisman( int ItemID ) : base(ItemID) { Layer = Layer.Talisman; m_MagicalAttributes = new MagicalAttributes( this ); m_AosResistances = new ElementAttributes( this ); m_SkillBonuses = new SkillBonuses( this ); // 1% chance to spawn with the "Owned by no one" property. m_Ownable = ( 0.01 > Utility.RandomDouble() ); m_HitPoints = m_MaxHitPoints = Utility.RandomMinMax( InitMinHits, InitMaxHits ); }
public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); switch ( version ) { case 4: { m_MaxHitPoints = reader.ReadEncodedInt(); m_HitPoints = reader.ReadEncodedInt(); goto case 3; } case 3: { m_Slayer = (SlayerName) reader.ReadInt(); m_Slayer2 = (SlayerName) reader.ReadInt(); goto case 2; } case 2: { m_Ownable = (bool) reader.ReadBool(); m_Owner = (Mobile) reader.ReadMobile(); m_CraftBonusRegular = (CraftList) reader.ReadInt(); m_CraftBonusRegularValue = reader.ReadInt(); m_CraftBonusExcep = (CraftList) reader.ReadInt(); m_CraftBonusExcepValue = reader.ReadInt(); m_ProtectionEntry = (NPC_Name) reader.ReadInt(); m_ProtectionValue = reader.ReadInt(); m_KillersEntry = (NPC_Name) reader.ReadInt(); m_KillersValue = reader.ReadInt(); m_TalisSlayer = (TalisSlayerName) reader.ReadInt(); m_TalismanType = (TalismanType) reader.ReadInt(); m_Charges = reader.ReadInt(); goto case 1; } case 1: { m_MagicalAttributes = new MagicalAttributes( this, reader ); m_AosResistances = new ElementAttributes( this, reader ); m_SkillBonuses = new SkillBonuses( this, reader ); if ( Parent is Mobile ) { //-------- Charged Time Left ----------- m_isequiped = true; InvalidateProperties(); //------ FIN Charged Time Left --------- 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(); break; } case 0: { if ( Parent is Mobile ) { //-------- Charged Time Left ----------- m_isequiped = true; InvalidateProperties(); //------ FIN Charged Time Left --------- m_SkillBonuses.AddTo( (Mobile) Parent ); } m_MagicalAttributes = new MagicalAttributes( this ); m_AosResistances = new ElementAttributes( this ); m_SkillBonuses = new SkillBonuses( this ); break; } } if ( version < 2 ) { m_Ownable = (bool) reader.ReadBool(); m_Owner = (Mobile) reader.ReadMobile(); m_CraftBonusRegular = (CraftList) reader.ReadInt(); m_CraftBonusRegularValue = reader.ReadInt(); m_CraftBonusExcep = (CraftList) reader.ReadInt(); m_CraftBonusExcepValue = reader.ReadInt(); m_ProtectionEntry = (NPC_Name) reader.ReadInt(); m_ProtectionValue = reader.ReadInt(); m_KillersEntry = (NPC_Name) reader.ReadInt(); m_KillersValue = reader.ReadInt(); m_TalisSlayer = (TalisSlayerName) reader.ReadInt(); m_TalismanType = (TalismanType) reader.ReadInt(); m_Charges = reader.ReadInt(); } }
private static void ApplyAttribute( MagicalAttributes attrs, int min, int max, MagicalAttribute attr, int low, int high ) { ApplyAttribute( attrs, min, max, attr, low, high, 1 ); }
private static void ApplyAttribute( MagicalAttributes attrs, int min, int max, MagicalAttribute attr, int low, int high, int scale ) { if ( attr == MagicalAttribute.CastSpeed ) attrs[attr] += Scale( min, max, low / scale, high / scale ) * scale; else attrs[attr] = Scale( min, max, low / scale, high / scale ) * scale; }
public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); switch ( version ) { case 8: { m_Exceptional = reader.ReadBool(); m_PlayerConstructed = reader.ReadBool(); m_Crafter = reader.ReadMobile(); goto case 7; } case 7: { m_AbsorptionAttributes = new AbsorptionAttributes( this, reader ); m_TimesImbued = reader.ReadEncodedInt(); m_MaxHitPoints = reader.ReadEncodedInt(); m_HitPoints = reader.ReadEncodedInt(); m_Resource = (CraftResource) reader.ReadEncodedInt(); m_GemType = (GemType) reader.ReadEncodedInt(); m_MagicalAttributes = new MagicalAttributes( this, reader ); m_AosResistances = new ElementAttributes( this, reader ); m_SkillBonuses = new SkillBonuses( this, reader ); if ( Parent is Mobile ) m_SkillBonuses.AddTo( (Mobile) Parent ); break; } } 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(); }