コード例 #1
0
        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;
            }
            }
        }
コード例 #2
0
ファイル: BaseEquipableLight.cs プロジェクト: nogu3ira/xrunuo
        public BaseEquipableLight(int itemID)
            : base(itemID)
        {
            Layer = Layer.TwoHanded;

            m_Attributes = new MagicalAttributes(this);
        }
コード例 #3
0
ファイル: FishingPole.cs プロジェクト: Ravenwolfe/xrunuo
        public FishingPole()
            : base(0x0DC0)
        {
            Layer = Layer.OneHanded;
            Weight = 8.0;

            m_Attributes = new MagicalAttributes( this );
        }
コード例 #4
0
        public FishingPole()
            : base(0x0DC0)
        {
            Layer  = Layer.OneHanded;
            Weight = 8.0;

            m_Attributes = new MagicalAttributes(this);
        }
コード例 #5
0
ファイル: BaseRunicTool.cs プロジェクト: nogu3ira/xrunuo
        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;
                }
            }
        }
コード例 #6
0
ファイル: BaseClothing.cs プロジェクト: nogu3ira/xrunuo
        public virtual void AlterFrom(BaseQuiver orig)
        {
            m_Altered = true;

            m_MagicalAttributes = orig.Attributes;

            Crafter     = orig.Crafter;
            Exceptional = orig.Exceptional;
        }
コード例 #7
0
ファイル: BaseRunicTool.cs プロジェクト: nogu3ira/xrunuo
 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;
     }
 }
コード例 #8
0
        public BaseQuiver()
            : base(0x2FB7)
        {
            Weight = 2.0;
            Layer  = Layer.Cloak;

            GumpID    = 0x108;
            DropSound = 0x4F;
            MaxItems  = 1;

            m_Attributes = new MagicalAttributes(this);
        }
コード例 #9
0
ファイル: Spellbook.cs プロジェクト: nogu3ira/xrunuo
        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;
        }
コード例 #10
0
        }                                                                   // 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);
        }
コード例 #11
0
ファイル: BaseJewel.cs プロジェクト: Ravenwolfe/xrunuo
        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 );
        }
コード例 #12
0
ファイル: BaseJewel.cs プロジェクト: nogu3ira/xrunuo
        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);
        }
コード例 #13
0
ファイル: BaseClothing.cs プロジェクト: Ravenwolfe/xrunuo
        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 );
        }
コード例 #14
0
ファイル: BaseClothing.cs プロジェクト: nogu3ira/xrunuo
        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);
        }
コード例 #15
0
ファイル: BaseClothing.cs プロジェクト: nogu3ira/xrunuo
        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;
        }
コード例 #16
0
ファイル: FishingPole.cs プロジェクト: Ravenwolfe/xrunuo
        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;
                    }
            }
        }
コード例 #17
0
        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;
        }
コード例 #18
0
ファイル: Spellbook.cs プロジェクト: nogu3ira/xrunuo
        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();
            }
        }
コード例 #19
0
ファイル: BaseClothing.cs プロジェクト: nogu3ira/xrunuo
        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();
            }
        }
コード例 #20
0
ファイル: BaseJewel.cs プロジェクト: nogu3ira/xrunuo
        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();
            }
        }
コード例 #21
0
        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();
            }
        }
コード例 #22
0
ファイル: BaseRunicTool.cs プロジェクト: nogu3ira/xrunuo
 private static void ApplyAttribute(MagicalAttributes attrs, int min, int max, MagicalAttribute attr, int low, int high)
 {
     ApplyAttribute(attrs, min, max, attr, low, high, 1);
 }
コード例 #23
0
ファイル: BaseRunicTool.cs プロジェクト: nogu3ira/xrunuo
        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;
                }
            }
        }
コード例 #24
0
ファイル: BaseClothing.cs プロジェクト: Ravenwolfe/xrunuo
        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();
            }
        }
コード例 #25
0
ファイル: BaseClothing.cs プロジェクト: Ravenwolfe/xrunuo
        public virtual void AlterFrom( BaseQuiver orig )
        {
            m_Altered = true;

            m_MagicalAttributes = orig.Attributes;

            Crafter = orig.Crafter;
            Exceptional = orig.Exceptional;
        }
コード例 #26
0
ファイル: BaseClothing.cs プロジェクト: Ravenwolfe/xrunuo
        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;
        }
コード例 #27
0
ファイル: Spellbook.cs プロジェクト: Ravenwolfe/xrunuo
        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;
        }
コード例 #28
0
ファイル: Spellbook.cs プロジェクト: Ravenwolfe/xrunuo
        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();
        }
コード例 #29
0
ファイル: BaseRunicTool.cs プロジェクト: nogu3ira/xrunuo
        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 */
                }
            }
        }
コード例 #30
0
ファイル: BaseRunicTool.cs プロジェクト: nogu3ira/xrunuo
        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;
                }
            }
        }
コード例 #31
0
ファイル: BaseRunicTool.cs プロジェクト: nogu3ira/xrunuo
        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;
                }
            }
        }
コード例 #32
0
ファイル: BaseTalisman.cs プロジェクト: Ravenwolfe/xrunuo
        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 );
        }
コード例 #33
0
ファイル: BaseTalisman.cs プロジェクト: Ravenwolfe/xrunuo
        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();
            }
        }
コード例 #34
0
ファイル: BaseRunicTool.cs プロジェクト: Ravenwolfe/xrunuo
 private static void ApplyAttribute( MagicalAttributes attrs, int min, int max, MagicalAttribute attr, int low, int high )
 {
     ApplyAttribute( attrs, min, max, attr, low, high, 1 );
 }
コード例 #35
0
ファイル: BaseRunicTool.cs プロジェクト: Ravenwolfe/xrunuo
 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;
 }
コード例 #36
0
ファイル: BaseJewel.cs プロジェクト: Ravenwolfe/xrunuo
        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();
        }