123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using UnityEngine;
- namespace YLBattle
- {
- /// <summary>
- /// 战斗公式
- /// </summary>
- public class BattleFomula
- {
- /// <summary>
- /// buff治疗公式
- /// </summary>
- /// <param name="target">目标对象</param>
- /// <returns>治疗值</returns>
- public static float buffCure(float cure)
- {
- return cure;
- }
- /// <summary>
- /// 治疗量计算
- /// </summary>
- /// <param name="ada">技能适配器</param>
- /// <param name="skillID">技能id1</param>
- /// <param name="skillLev">技能等级</param>
- /// <param name="caster">施法者</param>
- /// <param name="target">目标</param>
- /// <returns>实际治疗</returns>
- public static float Cure(ISkillAdapter ada, string skillID, int level, LogicFighter caster, LogicFighter target)
- {
- int dianshu = int.Parse(ada.GetSkillProperty(skillID, ESkillProperty.ESKILL_PROPERTY_parmValue, level));
- string proValue = ada.GetSkillProperty(skillID, ESkillProperty.ESKILL_PROPERTY_proValue, level);
- if (proValue.IndexOf('F') != -1)
- {
- proValue = proValue.Substring(0, proValue.IndexOf('F'));
- }
- int bili = int.Parse(proValue);
- float maxHp = target.GetProperty(EBattleProperty.HPMAX);
- float result = dianshu + maxHp * bili / 100;
- LogHelper.Log(String.Format(target.ID() + " 恢复血量:skillID:{0},CastarPlayerTID:{1},PlayerLevel:{2}:目标MAXHP:{3},增加血量值{4}",
- skillID, caster.TID(), caster.Level, maxHp, (int)result));
- return result;
- }
- /// <summary>
- /// 物理(普攻)伤害
- /// </summary>
- /// <param name="target">目标</param>
- /// <param name="dama">伤害值</param>
- /// <returns>公式伤害</returns>
- public static float PhyDamage(LogicFighter caster, LogicFighter target, int dianshu, float phypower, bool iscritical = false, string skillid = "")
- {
- //Debug.LogError(caster.ID() + " attack....." + skillID);
- //2017-09-19版,公式
- //角色属性:战斗力、生命值、能量值、物理攻击、法术强度、护甲、魔抗、攻速、暴击
- //A*100/(D+100)+a*100/(d+100)=对敌方造成的伤害(战斗公式)
- //A=己方物理攻击 D=敌方护甲 a=己方法术强度 d=敌方魔抗
- //己方物理攻击*100/(敌方护甲+100)+己方法术强度*100/(敌方魔抗+100)=伤害
- float casterWulishanghai = dianshu + phypower;
- float casterFashu = caster.GetProperty(EBattleProperty.MAGICSTRENGTH);///己方法术强度
- float targethujia = target.GetProperty(EBattleProperty.DEFENSE);//敌方护甲
- float targetMokang = target.GetProperty(EBattleProperty.MAGICFORCE);//敌方魔抗
- float result = casterWulishanghai * 100 / (targethujia + 100) + casterFashu * 100 / (targetMokang + 100);
- //Debug.Log(String.Format(target.ID() + " 受到物理伤害:skillID:{0},PlayerTID:{1},PlayerLevel:{2}:({3}+{4}) * 100 / ({5} + 100) + {6} * 100 / ({7} + 100)={8}",
- // skillid, caster.TID(), caster.Level, dianshu, phypower, targethujia, casterFashu, targetMokang, (int)result));
- if (iscritical)
- {
- result = BattleFomula.CritticalDmage(result);
- }
- return result;
- }
- /// <summary>
- /// 魔法伤害
- /// </summary>
- /// <param name="target">目标</param>
- /// <param name="dama">伤害值</param>
- /// <returns>公式伤害</returns>
- public static float MagicDamage(LogicFighter caster, LogicFighter target, int dianshu, float magpower, bool iscritical = false, string skillid = "")
- {
- //2017-09-19版,公式
- //角色属性:战斗力、生命值、能量值、物理攻击、法术强度、护甲、魔抗、攻速、暴击
- //A*100/(D+100)+a*100/(d+100)=对敌方造成的伤害(战斗公式)
- //A=己方物理攻击 D=敌方护甲 a=己方法术强度 d=敌方魔抗
- //己方物理攻击*100/(敌方护甲+100)+己方法术强度*100/(敌方魔抗+100)=伤害
- float casterWulishanghai = caster.GetProperty(EBattleProperty.ATTACK);///己方物理攻击
- float casterFashu = dianshu + magpower;///己方法术强度
- float targethujia = target.GetProperty(EBattleProperty.DEFENSE);//敌方护甲
- float targetMokang = target.GetProperty(EBattleProperty.MAGICFORCE);//敌方魔抗
- float result = casterWulishanghai * 100 / (targethujia + 100) + casterFashu * 100 / (targetMokang + 100);
- // Debug.Log(String.Format(target.ID() + " 受到魔法伤害:skillID:{0},PTID:{1},playerLevl:{2}: {3} * 100 / ( {4} + 100) + ({5}+{6}) * 100 / ( {7} + 100))={8}",
- //skillid, caster.TID(), caster.Level, casterWulishanghai, targethujia, dianshu, magpower, targetMokang, (int)result));
- if (iscritical)
- {
- result = BattleFomula.CritticalDmage(result);
- }
- return result * (iscritical ? 2 : 1);
- }
- /// <summary>
- /// 魔法暴击伤害公式
- /// </summary>
- /// <param name="damage">伤害值</param>
- /// <returns>换算暴击后数值</returns>
- public static float CritticalDmage(float damage)
- {
- //2017-11-08 暴击倍率=2 产生暴击率则伤害翻倍
- return damage * BattleConst.BattleCriticalDamageRate;
- }
- /// <summary>
- /// 暴击伤害
- /// </summary>
- /// <param name="caster">施法者</param>
- /// <param name="dama">伤害值</param>
- /// <returns>是否暴击</returns>
- public static bool CriticalRate(LogicFighter caster)
- {
- /*
- * ****暴击倍率默认为【2】
- * random 40 >30暴率率。。。。。100=100*2
- */
- int rateResult = UnityEngine.Random.Range(1, 100);
- float critical = caster.GetProperty(EBattleProperty.CRITICALPROB);
- return rateResult <= critical;
- }
- }
- }
|