public LightningPath(Vector2 startPos, LightningStrike strike, Color col) { this.lightningStrike = strike; this.pos = startPos; this.color = col; pathPositions = new List <Vector2>() { this.pos }; }
void Update() { //게임 중일때 리벤지 모드일 경우 게이지 감소 if (Common.isRunning && isHighNoon) { valueMethod.AddRevengeGuage(-10 * Time.unscaledDeltaTime); } //리벤지 모드일때 게이지가 0이면 강제종료(공격X). //강제 종료이므로 AimLock된 Enemy들의 태그도 원래대로 되돌린다. if (valueMethod.GetRevengeGuage() == 0 && isHighNoon) { GameObject[] objs = GameObject.FindGameObjectsWithTag("AimLock"); foreach (GameObject enemy in objs) { enemy.tag = "Enemy"; } OnHighNoon(); } //번개 효과 그리기 if (pathPoints.Count > 1) { strikeTracker += Time.unscaledDeltaTime; if (strikeTracker >= strikeFrequency) { strikeTracker = 0.0f; LightningStrike.Strike(path: pathPoints.ToArray(), lineObject: lineRenderers[line_iterator], zigZagIntensity: 1, zigZagPerMeter: 1, smoothness: 0.5f); //반복자를 이용해서 일정 갯수(2개)를 돌려 쓴다 lineRenderers[line_iterator].GetComponent <Animator>().Play("Fade", 0, 0.0f); line_iterator = (line_iterator + 1); if (line_iterator == lineRenderers.Length) { line_iterator = 0; } } } }
// Use this for initialization public override void Start() { base.Start(); interruptableByNormalAttack = false; TrajectoryDetector.OnTrigger += TrajectoryGestureTriggered; HandUpDetector.OnTrigger += HandUpGestureTriggered; GrabDetector.OnGrab += GrabGestureTriggered; skillAntiGravity = new AntiGravity(); skillGrabbing = new Grabbing(); skillSpike = new EarthSpikes(); skillBeam = new LightBeam(); skillFireBall = new FireBallSpell(); skillLightning = new LightningStrike(); skillSummonHelper = new SummonHelper(); skillHeal = new Heal(); skillSpeedUp = new SpeedUp(); }
public override bool CheckCast() { if (!base.CheckCast()) { return(false); } if (!SamuraiSpell.CheckExpansion(Caster)) { Caster.SendLocalizedMessage(1063456); // You must upgrade to Samurai Empire in order to use that ability. return(false); } if (Caster.Skills[SkillName.Ninjitsu].Value < RequiredSkill) { string args = String.Format("{0}\t{1}\t ", RequiredSkill.ToString("F1"), CastSkill.ToString()); Caster.SendLocalizedMessage(1063013, args); // You need at least ~1_SKILL_REQUIREMENT~ ~2_SKILL_NAME~ skill to use that ability. return(false); } else if (Caster.Mana < ScaleMana(RequiredMana)) { Caster.SendLocalizedMessage(1060174, RequiredMana.ToString()); // You must have at least ~1_MANA_REQUIREMENT~ Mana to use this ability. return(false); } if (FocusAttack.UnderEffect(Caster) || DeathStrike.UnderEffect(Caster) || SurpriseAttack.UnderEffect(Caster) || Backstab.UnderEffect(Caster) || KiAttack.UnderEffect(Caster)) { return(true); } if (AnimalForm.UnderEffect(Caster)) { if (this is FocusAttack || this is DeathStrike || this is KiAttack || this is SurpriseAttack || this is Backstab) { Caster.SendLocalizedMessage(1063024); // You cannot perform this special move right now. return(false); } } WeaponAbility ability = WeaponAbility.GetCurrentAbility(Caster); if (ability != null) { WeaponAbility.ClearCurrentAbility(Caster); } if (HonorableExecution.UnderEffect(Caster)) { Caster.Send(new SetNewSpell(0x91, 0)); HonorableExecution.m_Table.Remove(Caster); } if (LightningStrike.UnderEffect(Caster)) { Caster.Send(new SetNewSpell(0x95, 0)); LightningStrike.m_Table.Remove(Caster); } if (MomentumStrike.UnderEffect(Caster)) { Caster.Send(new SetNewSpell(0x96, 0)); MomentumStrike.m_Table.Remove(Caster); } return(true); }
// 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 static bool SetCurrentAbility(Mobile m, WeaponAbility a) { if (!Core.AOS) { ClearCurrentAbility(m); return(false); } if (!IsWeaponAbility(m, a)) { ClearCurrentAbility(m); return(false); } if (a != null && !a.Validate(m)) { ClearCurrentAbility(m); return(false); } if (a == null) { m_Table.Remove(m); } else { m_Table[m] = a; } m.CanReveal = true; if (HonorableExecution.UnderEffect(m)) { m.Send(new SetNewSpell(0x91, 0)); HonorableExecution.m_Table.Remove(m); } if (LightningStrike.UnderEffect(m)) { m.Send(new SetNewSpell(0x95, 0)); LightningStrike.m_Table.Remove(m); } if (MomentumStrike.UnderEffect(m)) { m.Send(new SetNewSpell(0x96, 0)); MomentumStrike.m_Table.Remove(m); } if (FocusAttack.UnderEffect(m)) { m.Send(new SetNewSpell(0xF5, 0)); FocusAttack.m_Table.Remove(m); BaseWeapon weapon = m.Weapon as BaseWeapon; if (weapon != null) { FocusAttack.RemoveBonus(weapon); } } if (DeathStrike.UnderEffect(m)) { m.Send(new SetNewSpell(0xF6, 0)); DeathStrike.m_Table.Remove(m); } if (KiAttack.UnderEffect(m)) { m.Send(new SetNewSpell(0xF8, 0)); KiAttack.m_Table.Remove(m); } if (SurpriseAttack.UnderEffect(m)) { m.Send(new SetNewSpell(0xF9, 0)); SurpriseAttack.m_Table.Remove(m); } if (Backstab.UnderEffect(m)) { m.Send(new SetNewSpell(0xFA, 0)); Backstab.m_Table.Remove(m); } return(true); }