Exemple #1
0
        public override void OnHit( Mobile attacker, Mobile defender, int damage )
        {
            if ( !Validate( attacker ) || !CheckMana( attacker, true ) )
            {
                return;
            }

            attacker.PlaySound( 0x5BC ); // Bladeweave sound effect
            attacker.FixedParticles( 0x376A, 1, 20, 0x7F5, 0x960, 0x3, EffectLayer.Waist ); // TODO: Revisar efecto

            switch ( Utility.RandomMinMax( 1, 7 ) )
            {
                case 1:
                    {
                        attacker.SendLocalizedMessage( 1072841, "Paralyzing Blow" ); // You weave your blade to execute a ~1_attack~.
                        ParalyzingBlow at = new ParalyzingBlow();
                        at.IsBladeweaveAttack = true;
                        at.OnHit( attacker, defender, damage );
                        break;
                    }
                case 2:
                    {
                        attacker.SendLocalizedMessage( 1072841, "Bleed Attack" ); // You weave your blade to execute a ~1_attack~.
                        BleedAttack at = new BleedAttack();
                        at.IsBladeweaveAttack = true;
                        at.OnHit( attacker, defender, damage );
                        break;
                    }
                case 3:
                    {
                        attacker.SendLocalizedMessage( 1072841, "Double Strike" ); // You weave your blade to execute a ~1_attack~.
                        DoubleStrike at = new DoubleStrike();
                        at.IsBladeweaveAttack = true;
                        at.OnHit( attacker, defender, damage );
                        break;
                    }
                case 4:
                    {
                        attacker.SendLocalizedMessage( 1072841, "Feint" ); // You weave your blade to execute a ~1_attack~.
                        Feint at = new Feint();
                        at.IsBladeweaveAttack = true;
                        at.OnHit( attacker, defender, damage );
                        break;
                    }
                case 5:
                    {
                        attacker.SendLocalizedMessage( 1072841, "Mortal Strike" ); // You weave your blade to execute a ~1_attack~.
                        MortalStrike at = new MortalStrike();
                        at.IsBladeweaveAttack = true;
                        at.OnHit( attacker, defender, damage );
                        break;
                    }
                case 6:
                    {
                        attacker.SendLocalizedMessage( 1072841, "block" ); // You weave your blade to execute a ~1_attack~.
                        Block at = new Block();
                        at.IsBladeweaveAttack = true;
                        at.OnHit( attacker, defender, damage );
                        break;
                    }
                case 7:
                    {
                        attacker.SendLocalizedMessage( 1072841, "Crushing Blow" ); // You weave your blade to execute a ~1_attack~.
                        CrushingBlow at = new CrushingBlow();
                        at.IsBladeweaveAttack = true;
                        at.OnHit( attacker, defender, damage );
                        break;
                    }
            }
        }
Exemple #2
0
        public override bool OnBeforeSwing(Mobile attacker, Mobile defender)
        {
            if (!Validate(attacker) || !CheckMana(attacker, false))
            {
                return(false);
            }

            int ran = -1;

            if (attacker is BaseCreature && PetTrainingHelper.CheckSecondarySkill((BaseCreature)attacker, SkillName.Bushido))
            {
                ran = Utility.Random(9);
            }
            else
            {
                bool canfeint = attacker.Skills[Feint.GetSecondarySkill(attacker)].Value >= Feint.GetRequiredSecondarySkill(attacker);
                bool canblock = attacker.Skills[Block.GetSecondarySkill(attacker)].Value >= Block.GetRequiredSecondarySkill(attacker);

                if (canfeint && canblock)
                {
                    ran = Utility.Random(9);
                }
                else if (canblock)
                {
                    ran = Utility.Random(8);
                }
                else
                {
                    ran = Utility.RandomList(0, 1, 2, 3, 4, 5, 6, 8);
                }
            }

            switch (ran)
            {
            case 0:
                m_NewAttack[attacker] = new BladeWeaveRedirect(ArmorIgnore, 1028838);
                break;

            case 1:
                m_NewAttack[attacker] = new BladeWeaveRedirect(BleedAttack, 1028839);
                break;

            case 2:
                m_NewAttack[attacker] = new BladeWeaveRedirect(ConcussionBlow, 1028840);
                break;

            case 3:
                m_NewAttack[attacker] = new BladeWeaveRedirect(CrushingBlow, 1028841);
                break;

            case 4:
                m_NewAttack[attacker] = new BladeWeaveRedirect(DoubleStrike, 1028844);
                break;

            case 5:
                m_NewAttack[attacker] = new BladeWeaveRedirect(MortalStrike, 1028846);
                break;

            case 6:
                m_NewAttack[attacker] = new BladeWeaveRedirect(ParalyzingBlow, 1028848);
                break;

            case 7:
                m_NewAttack[attacker] = new BladeWeaveRedirect(Block, 1028853);
                break;

            case 8:
                m_NewAttack[attacker] = new BladeWeaveRedirect(Feint, 1028857);
                break;

            default:
                // should never happen
                return(false);
            }

            return(m_NewAttack[attacker].NewAbility.OnBeforeSwing(attacker, defender));
        }
Exemple #3
0
        // Taken from BaseWeapon.cs
        // TODO: Make static function to use everywhere
        public static bool CheckHitChance(Mobile attacker, Mobile defender)
        {
//			BaseWeapon atkWeapon = attacker.Weapon as BaseWeapon;
            BaseWeapon defWeapon = defender.Weapon as BaseWeapon;

            Skill atkSkill = attacker.Skills[SkillName.Ninjitsu];
            Skill defSkill = defender.Skills[defWeapon.Skill];

            double atkValue = atkSkill.Value;
            double defValue = defWeapon.GetDefendSkillValue(attacker, defender);

            //attacker.CheckSkill( atkSkill.SkillName, defValue - 20.0, 120.0 );
            //defender.CheckSkill( defSkill.SkillName, atkValue - 20.0, 120.0 );

            double ourValue, theirValue;

            int bonus = 0;

            if (Core.AOS)
            {
                if (atkValue <= -20.0)
                {
                    atkValue = -19.9;
                }

                if (defValue <= -20.0)
                {
                    defValue = -19.9;
                }

                // Hit Chance Increase = 45%
                int atkChance = AosAttributes.GetValue(attacker, AosAttribute.AttackChance);
                if (atkChance > 45)
                {
                    atkChance = 45;
                }

                bonus += atkChance;

                if (attacker.BodyMod == 0xF6 || attacker.BodyMod == 0x19)
                {
                    bonus += (int)(attacker.Skills[SkillName.Ninjitsu].Value * 0.1);
                }                 // TODO: verify

                if (Spells.Chivalry.DivineFurySpell.UnderEffect(attacker))
                {
                    bonus += 10;
                }                 // attacker gets 10% bonus when they're under divine fury

                if (HitLower.IsUnderAttackEffect(attacker))
                {
                    bonus -= 25;
                }                 // Under Hit Lower Attack effect -> 25% malus

                if (LightningStrike.UnderEffect(attacker))
                {
                    bonus = 45;
                }

                ourValue = (atkValue + 20.0) * (100 + bonus);

                // Defense Chance Increase = 45%
                bonus = AosAttributes.GetValue(defender, AosAttribute.DefendChance);
                if (bonus > 45)
                {
                    bonus = 45;
                }

                if (Spells.Chivalry.DivineFurySpell.UnderEffect(defender))
                {
                    bonus -= 20;
                }                 // defender loses 20% bonus when they're under divine fury

                if (HitLower.IsUnderDefenseEffect(defender))
                {
                    bonus -= 25;
                }                 // Under Hit Lower Defense effect -> 25% malus


                if (BaseWeapon.UnderSurprise(defender))
                {
                    bonus -= 20;
                }                 // TODO: verify


                if (Feint.UnderEffect(defender) && defender.Combatant != null && defender.Combatant == attacker)
                {
                    int chf = Utility.Random(10, 15);

                    bonus += (int)((chf / 100.0) * bonus);
                }

                if (Block.UnderEffect(defender))
                {
                    int chb = Utility.Random(10, 15);

                    bonus += (int)((chb / 100.0) * bonus);
                }

                double discordanceScalar = 0.0;

                if (SkillHandlers.Discordance.GetScalar(attacker, ref discordanceScalar))
                {
                    bonus += (int)(discordanceScalar * 100);
                }

                theirValue = (defValue + 20.0) * (100 + bonus);

                bonus = 0;
            }
            else
            {
                if (atkValue <= -50.0)
                {
                    atkValue = -49.9;
                }

                if (defValue <= -50.0)
                {
                    defValue = -49.9;
                }

                ourValue   = (atkValue + 50.0);
                theirValue = (defValue + 50.0);
            }

            double chance = ourValue / (theirValue * 2.0);

            chance *= 1.0 + ((double)bonus / 100);

            if (Core.AOS && chance < 0.02)
            {
                chance = 0.02;
            }

            WeaponAbility ability = WeaponAbility.GetCurrentAbility(attacker);

            if (ability != null)
            {
                chance *= ability.AccuracyScalar;
            }

            return(attacker.CheckSkill(atkSkill.SkillName, chance));

            //return ( chance >= Utility.RandomDouble() );
        }
Exemple #4
0
        public override void OnHit(Mobile attacker, Mobile defender, int damage)
        {
            if (!Validate(attacker) || !CheckMana(attacker, true))
            {
                return;
            }

            attacker.PlaySound(0x5BC);                                                    // Bladeweave sound effect
            attacker.FixedParticles(0x376A, 1, 20, 0x7F5, 0x960, 0x3, EffectLayer.Waist); // TODO: Revisar efecto

            switch (Utility.RandomMinMax(1, 7))
            {
            case 1:
            {
                attacker.SendLocalizedMessage(1072841, "Paralyzing Blow");                                   // You weave your blade to execute a ~1_attack~.
                ParalyzingBlow at = new ParalyzingBlow();
                at.IsBladeweaveAttack = true;
                at.OnHit(attacker, defender, damage);
                break;
            }

            case 2:
            {
                attacker.SendLocalizedMessage(1072841, "Bleed Attack");                                   // You weave your blade to execute a ~1_attack~.
                BleedAttack at = new BleedAttack();
                at.IsBladeweaveAttack = true;
                at.OnHit(attacker, defender, damage);
                break;
            }

            case 3:
            {
                attacker.SendLocalizedMessage(1072841, "Double Strike");                                   // You weave your blade to execute a ~1_attack~.
                DoubleStrike at = new DoubleStrike();
                at.IsBladeweaveAttack = true;
                at.OnHit(attacker, defender, damage);
                break;
            }

            case 4:
            {
                attacker.SendLocalizedMessage(1072841, "Feint");                                   // You weave your blade to execute a ~1_attack~.
                Feint at = new Feint();
                at.IsBladeweaveAttack = true;
                at.OnHit(attacker, defender, damage);
                break;
            }

            case 5:
            {
                attacker.SendLocalizedMessage(1072841, "Mortal Strike");                                   // You weave your blade to execute a ~1_attack~.
                MortalStrike at = new MortalStrike();
                at.IsBladeweaveAttack = true;
                at.OnHit(attacker, defender, damage);
                break;
            }

            case 6:
            {
                attacker.SendLocalizedMessage(1072841, "block");                                   // You weave your blade to execute a ~1_attack~.
                Block at = new Block();
                at.IsBladeweaveAttack = true;
                at.OnHit(attacker, defender, damage);
                break;
            }

            case 7:
            {
                attacker.SendLocalizedMessage(1072841, "Crushing Blow");                                   // You weave your blade to execute a ~1_attack~.
                CrushingBlow at = new CrushingBlow();
                at.IsBladeweaveAttack = true;
                at.OnHit(attacker, defender, damage);
                break;
            }
            }
        }