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