/// <summary> /// 释放一个技能 /// </summary> /// <param name="attacker"></param> /// <param name="att_index"></param> /// <param name="target"></param> /// <param name="tar_index"></param> private void UseSkill(BaseCharacter attacker, int att_index, BaseCharacter target, int tar_index) { //过程中生存游戏提示信息的文本 string text = ""; int tempdamage = 0; MyDraw.DrawCharacterInfo(attacker, att_index); text = string.Format("{0}对{1}施放了{2}", attacker.name, target.name, name); MyDraw.DrawBattleMessageDelay(text); if (targetType == TargetType.EnemyMulti || targetType == TargetType.EnemySingle) { if (attacker.type == CharacterType.Hero) { MyDraw.DrawAttackAnimation(attacker, att_index, target, tar_index); } else { MyDraw.DrawAttackAnimationEnemy(attacker, att_index, target, tar_index); } } //对即时伤害的技能的处理 if (type == SkillType.Damage || type == SkillType.NormalAttack) { //获取技能的基础伤害值 if (skillDamage != null) { tempdamage = skillDamage.Invoke(attacker, target); //判断目标是否无敌 if (target.IsInvincible()) { return; } //判断目标是否具有技能伤害类型对应的反射状态 if (damageType == DamageType.Physical) { if (target.IsPhysicalReflect()) { if (target.type == CharacterType.Hero) { MyDraw.DrawAttackAnimation(target, tar_index, attacker, att_index); } else { MyDraw.DrawAttackAnimationEnemy(target, tar_index, attacker, att_index); } if (attacker.IsInvincible()) { return; } else { //获取攻击者和目标身上的物理伤害加深BUFF并且计算他们的效果 tempdamage = attacker.GetIncreaseDamage(tempdamage, StateType.PhysicalDamageIncrease); tempdamage = attacker.GetIncreaseDamage(tempdamage, StateType.PhysicalBeDamageIncrease); attacker.GetDamage(tempdamage, att_index); return; } } if (!IsHit(attacker) && noMiss == false) { text = string.Format("{0}未能击中目标!", attacker.name); MyDraw.DrawBattleMessageDelay(text); return; } if (IsCrit(attacker) || mustCrit == true) { text = string.Format("{0}触发了会心一击!", attacker.name); MyDraw.DrawBattleMessageDelay(text); tempdamage = tempdamage * 15 / 10; } //获取攻击者和目标身上的物理伤害加深BUFF并且计算他们的效果 tempdamage = attacker.GetIncreaseDamage(tempdamage, StateType.PhysicalDamageIncrease); tempdamage = target.GetIncreaseDamage(tempdamage, StateType.PhysicalBeDamageIncrease); } else if (damageType == DamageType.Magic) { if (target.IsMagicReflect()) { if (target.type == CharacterType.Hero) { MyDraw.DrawAttackAnimation(target, tar_index, attacker, att_index); } else { MyDraw.DrawAttackAnimationEnemy(target, tar_index, attacker, att_index); } if (attacker.IsInvincible()) { return; } else { //获取攻击者和目标身上的魔法伤害加深BUFF并且计算他们的效果 tempdamage = attacker.GetIncreaseDamage(tempdamage, StateType.MagicDamageIncrease); tempdamage = attacker.GetIncreaseDamage(tempdamage, StateType.MagicBeDamageIncrease); attacker.GetDamage(tempdamage, att_index); return; } } else { //获取攻击者和目标身上的魔法伤害加深BUFF并且计算他们的效果 tempdamage = attacker.GetIncreaseDamage(tempdamage, StateType.MagicDamageIncrease); tempdamage = target.GetIncreaseDamage(tempdamage, StateType.MagicBeDamageIncrease); } } //进行即时伤害并且生成对应的文字信息 for (int t = 0; t < hitTimes; t++) { int realdamage = Convert.ToInt32(tempdamage + tempdamage * Program.random.Next(-dispersion, dispersion) * 0.01); //处理即死效果 if (isDeathNow) { if (Program.random.Next(0, 100) < deathRatio) { MyDraw.DrawBattleMessageDelay("触发了即死效果。"); realdamage = target.maxHp; } } if (!target.GetDamage(realdamage, tar_index)) { break; } } } //如果技能有特殊效果,执行特殊效果 if (skillEffect != null) { MyDraw.DrawEffectAnimation(target, tar_index); skillEffect.Invoke(attacker, target); MyDraw.DrawState(target, tar_index); } return; } //对即时回复类技能的处理 if (type == SkillType.Heal) { if (skillDamage != null) { tempdamage = skillDamage.Invoke(attacker, target); if (!target.IsForbidHeal()) { target.GetRecover(tempdamage, tar_index); } } if (skillEffect != null) { MyDraw.DrawEffectAnimation(target, tar_index); skillEffect.Invoke(attacker, target); MyDraw.DrawState(target, tar_index); } return; } //对状态类技能的处理,主要是Buff,Debuff等 if (type == SkillType.State) { if (skillEffect != null) { MyDraw.DrawEffectAnimation(target, tar_index); skillEffect.Invoke(attacker, target); MyDraw.DrawState(target, tar_index); } } return; }