/// <summary> /// 技能防御 /// </summary> public virtual void DefenseSkill(HeroMono attacker, HeroMono defender) { long hurt = 0; //完全物理攻击,没有任何添加 hurt = attacker.CurrentAttack + this.Attack - defender.CurrentDefense; defender.CurrentLife -= hurt; //播放动画 defender.PlayTriggerAnimation(HeroAnimation.MagicDefense1); if (!defender.HasLife()) { defender.ExcuteBuff(Global.BuffActiveState.IsDead); defender.ExcuteSkill(Global.BuffActiveState.IsDead); } else { //如果是物理攻击防御技能则发动 defender.ExcuteBuff(Global.BuffActiveState.Attacked); defender.ExcuteSkill(Global.BuffActiveState.Attacked); } //显示HeroHub if (hurt > 0) { defender.ShowHeroHub(HubType.DecreseLife, new ValueUnit(hurt, Global.UnitType.Value)); } else if (hurt == 0) { defender.ShowHeroHub(HubType.Miss); } //进行buff判断 AddSkillBuff(attacker, defender); Debug.Log((attacker.IsPlayerHero ? "玩家的" : "敌人的") + attacker.Name + "使用技能" + this.Name + "对" + defender.Name + "造成" + hurt + "点伤害"); }
public override void DefenseSkill(HeroMono attacker, HeroMono defender) { long hurt = 0; //完全物理攻击,没有任何添加 bool is_physicl_critical = this.IsInPercent(CriticalChance); hurt = attacker.CurrentAttack + Mathf.RoundToInt(this.Attack * (is_physicl_critical ? 2 : 1)) - defender.CurrentDefense; defender.CurrentLife -= hurt; //播放动画 defender.PlayTriggerAnimation(HeroAnimation.Defense1); if (!defender.HasLife()) { defender.ExcuteBuff(Global.BuffActiveState.IsDead); defender.ExcuteSkill(Global.BuffActiveState.IsDead); } else { //如果是物理攻击防御技能则发动 defender.ExcuteBuff(Global.BuffActiveState.Attacked); defender.ExcuteSkill(Global.BuffActiveState.Attacked); } //显示HeroHub if (is_physicl_critical) { if (hurt > 0) { defender.ShowHeroHub(HubType.Critical, new ValueUnit(hurt, Global.UnitType.Value)); } else if (hurt == 0) { defender.ShowHeroHub(HubType.Miss); } } //正常的显示 else if (hurt > 0) { defender.ShowHeroHub(HubType.DecreseLife, new ValueUnit(hurt, Global.UnitType.Value)); } else if (hurt == 0) { defender.ShowHeroHub(HubType.Miss); } //进行buff判断 AddSkillBuff(attacker, defender); // Debug.Log((attacker.IsPlayerHero ? "玩家的" : "敌人的") + attacker.Name + "使用技能" + this.Name + "对" + defender.Name + "造成" + hurt + "点伤害"); }
public override void DefenseSkill(HeroMono attacker, HeroMono defender) { //完全魔法攻击,没有任何添加 defender.CurrentLife += this.CauseHeroProperty.CurrentLife.RealTempValue(defender.CurrentMaxLife); //设置为未死亡状态 defender.IsDeath = false; //播放动画 defender.PlayTriggerAnimation(HeroAnimation.Idle); //正常的显示 defender.ShowHeroHub(HubType.IncreseLife, new ValueUnit(this.CauseHeroProperty.CurrentLife.RealTempValue(defender.CurrentMaxLife), Global.UnitType.Value)); //进行buff判断 AddSkillBuff(attacker, defender); // Debug.Log((attacker.IsPlayerHero ? "玩家的" : "敌人的") + attacker.Name + "使用技能" + this.Name + "对" + defender.Name + "造成0点伤害"); }
/// <summary> /// 执行一个Buff或者Debuff /// </summary> /// <param name="hero">buff执行对象</param> /// <param name="buff">要执行的buff</param> public void ExcuteBuff(HeroMono hero, Buff buff) { long temp = 0; switch (buff.BuffType) { case Global.BuffType.IncreaseAttack: temp = buff.ChangeHeroProperty.Attack.RealTempValue(hero.CurrentAttack); hero.CurrentAttack += temp; if (temp > 0) { hero.ShowHeroHub(HubType.IncreseAttack, new ValueUnit(temp, Global.UnitType.Value)); } else { hero.ShowHeroHub(HubType.DecreseAttack, new ValueUnit(-temp, Global.UnitType.Value)); } break; case Global.BuffType.IncreaseDefense: temp = buff.ChangeHeroProperty.Defense.RealTempValue(hero.CurrentDefense); hero.CurrentDefense += temp; if (temp > 0) { hero.ShowHeroHub(HubType.IncreseDefense, new ValueUnit(temp, Global.UnitType.Value)); } else { hero.ShowHeroHub(HubType.DecreseDefense, new ValueUnit(-temp, Global.UnitType.Value)); } break; case Global.BuffType.IncreaseLife: temp = buff.ChangeHeroProperty.CurrentLife.RealTempValue(hero.CurrentMaxLife); hero.CurrentLife += temp; if (temp > 0) { hero.ShowHeroHub(HubType.IncreseLife, new ValueUnit(temp, Global.UnitType.Value)); } else { hero.ShowHeroHub(HubType.DecreseLife, new ValueUnit(-temp, Global.UnitType.Value)); } break; case Global.BuffType.IncreaseMagic: temp = buff.ChangeHeroProperty.CurrentMagic.RealTempValue(hero.CurrentMaxMagic); hero.CurrentMagic += temp; if (temp > 0) { hero.ShowHeroHub(HubType.IncreseMagic, new ValueUnit(temp, Global.UnitType.Value)); } else { hero.ShowHeroHub(HubType.DecreseMagic, new ValueUnit(-temp, Global.UnitType.Value)); } break; case Global.BuffType.IncreaseMagicAttack: temp = buff.ChangeHeroProperty.MagicAttack.RealTempValue(hero.CurrentMagicAttack); hero.CurrentMagicAttack += temp; if (temp > 0) { hero.ShowHeroHub(HubType.IncreseMagicAttack, new ValueUnit(temp, Global.UnitType.Value)); } else { hero.ShowHeroHub(HubType.DecreseMagicAttack, new ValueUnit(-temp, Global.UnitType.Value)); } break; case Global.BuffType.IncreaseMagicDefense: temp = buff.ChangeHeroProperty.MagicDefense.RealTempValue(hero.CurrentMagicDefense); hero.CurrentMagicDefense += temp; if (temp > 0) { hero.ShowHeroHub(HubType.IncreseMagicDefense, new ValueUnit(temp, Global.UnitType.Value)); } else { hero.ShowHeroHub(HubType.DecreseMagicDefense, new ValueUnit(-temp, Global.UnitType.Value)); } break; case Global.BuffType.IncreaseSpeed: temp = buff.ChangeHeroProperty.Speed.RealTempValue(hero.CurrentSpeed); hero.CurrentSpeed += temp; if (temp > 0) { hero.ShowHeroHub(HubType.IncreseSpeed, new ValueUnit(temp, Global.UnitType.Value)); } else { hero.ShowHeroHub(HubType.DecreseSpeed, new ValueUnit(-temp, Global.UnitType.Value)); } break; case Global.BuffType.IncreaseMaxLife: temp = buff.ChangeHeroProperty.MaxLife.RealTempValue(hero.CurrentMaxLife); hero.CurrentMaxLife += temp; if (temp > 0) { hero.ShowHeroHub(HubType.IncreseMaxLife, new ValueUnit(temp, Global.UnitType.Value)); } else { hero.ShowHeroHub(HubType.DecreseMaxLife, new ValueUnit(-temp, Global.UnitType.Value)); } break; case Global.BuffType.IncreaseMaxMagic: temp = buff.ChangeHeroProperty.MaxMagic.RealTempValue(hero.CurrentMaxMagic); hero.CurrentMaxMagic += temp; if (temp > 0) { hero.ShowHeroHub(HubType.IncreseMaxMagic, new ValueUnit(-temp, Global.UnitType.Value)); } else { hero.ShowHeroHub(HubType.DecreseMaxMagic, new ValueUnit(-temp, Global.UnitType.Value)); } break; case Global.BuffType.ActiveTurn: hero.CurrentTurnLast += buff.ChangeHeroProperty.Turn; BattleController.Instance.DebugLog(LogType.INFO, hero.Name + "回合数增加:" + buff.ChangeHeroProperty.Turn); break; } }