// -----------------------阵营人数统计------------------------------ /// <summary> /// 添加阵营生命值变更 /// </summary> /// <param name="camp">阵营</param> /// <param name="changeValue">变更值</param> /// <param name="demageOrCure">值变更类型</param> /// <param name="attackOrBeAttach">攻击或被攻击</param> private void AddCampHealthChange(int camp, float changeValue, DemageOrCure demageOrCure, AttackOrBeAttach attackOrBeAttach = AttackOrBeAttach.BeAttach) { var key = camp + "%" + demageOrCure + "%" + attackOrBeAttach; SetFloat(key, changeValue); AddAllhealthChange(changeValue, demageOrCure, attackOrBeAttach); }
/// <summary> /// 添加伤害统计 /// </summary> /// <param name="key">key</param> /// <param name="changeValue">变更量</param> /// <param name="camp">阵营</param> /// <param name="changeType">变更类型</param> /// <param name="demageType">伤害类型</param> /// <param name="attackOrBeAttach">攻击/被攻击</param> public void AddHealthChange(string key, float changeValue, int camp, DemageOrCure changeType, DemageType demageType, AttackOrBeAttach attackOrBeAttach = AttackOrBeAttach.BeAttach) { var tmpKey = key + "%" + camp + "%" + changeType + "%" + demageType + "%" + attackOrBeAttach; SetFloat(tmpKey, changeValue); AddCampHealthChange(camp, changeValue, changeType, attackOrBeAttach); }
/// <summary> /// 计算技能伤害/治疗 /// </summary> /// <param name="member"></param> /// <param name="target">技能目标</param> /// <param name="type">伤害或治疗</param> /// <param name="unitType">伤害/治疗值类型</param> /// <param name="calculationType">计算类型</param> /// <param name="value">具体值, 必须大于等于0</param> /// <returns>伤害/治疗具体量</returns> public static float GetHurtForSkill(DisplayOwner member, DisplayOwner target, DemageOrCure type, HealthChangeType unitType, HealthChangeCalculationType calculationType, float value) { if (member == null || member.ClusterData == null || target == null || target.ClusterData == null || target.ClusterData.AllData.MemberData == null) { throw new Exception("目标对象为空."); } if (value < 0) { throw new Exception("伤害/治疗值不能为负数."); } var result = 0f; // 区分伤害类型 switch (calculationType) { case HealthChangeCalculationType.Fix: { var zhanqianJueduizhi = member.ClusterData.AllData.MemberData.Attack1; var zhandouJueduizhiAdd = 0.0f; var zhanqianBaifenbiAdd = 0.0f; var zhandouBaifenbiAdd = 0.0f; // 伤害能力 var huoli = (zhanqianJueduizhi + zhandouJueduizhiAdd) * (1 + zhanqianBaifenbiAdd + zhandouBaifenbiAdd); // 减伤 var jianshanglv = AdjustJianshang(member, target); // 克制关系 var kezhixishu = AdjustKezhi(member, target); //if (unitType == HealthChangeType.Percentage) //{ // result = target.ClusterData.AllData.MemberData.TotalHp*value; //} var shanghaijiacheng = 0.0f; var mianyijiacheng = 0.0f; var jinengjiacheng = 0.0f; // 计算增伤 shanghaijiacheng = GetDemageUpper(member, target); // 计算减伤 mianyijiacheng = GetDemageLower(member, target); result = huoli * (1 - jianshanglv) * kezhixishu * (1 + Mathf.Max(-0.8f, (shanghaijiacheng - mianyijiacheng))) + jinengjiacheng; } break; case HealthChangeCalculationType.Calculation: break; } return(result); }
static int GetAllHealthChange(IntPtr L) { try { ToLua.CheckArgsCount(L, 3); FightDataStatistical obj = (FightDataStatistical)ToLua.CheckObject(L, 1, typeof(FightDataStatistical)); DemageOrCure arg0 = (DemageOrCure)ToLua.CheckObject(L, 2, typeof(DemageOrCure)); AttackOrBeAttach arg1 = (AttackOrBeAttach)ToLua.CheckObject(L, 3, typeof(AttackOrBeAttach)); float o = obj.GetAllHealthChange(arg0, arg1); LuaDLL.lua_pushnumber(L, o); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
static int GetHealthChange(IntPtr L) { try { ToLua.CheckArgsCount(L, 6); FightDataStatistical obj = (FightDataStatistical)ToLua.CheckObject(L, 1, typeof(FightDataStatistical)); string arg0 = ToLua.CheckString(L, 2); int arg1 = (int)LuaDLL.luaL_checknumber(L, 3); DemageOrCure arg2 = (DemageOrCure)ToLua.CheckObject(L, 4, typeof(DemageOrCure)); DemageType arg3 = (DemageType)ToLua.CheckObject(L, 5, typeof(DemageType)); AttackOrBeAttach arg4 = (AttackOrBeAttach)ToLua.CheckObject(L, 6, typeof(AttackOrBeAttach)); float o = obj.GetHealthChange(arg0, arg1, arg2, arg3, arg4); LuaDLL.lua_pushnumber(L, o); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
/// <summary> /// 获取所有生命值变更统计 /// </summary> /// <param name="demageOrCure">变更类型</param> /// <param name="attackOrBeAttach">攻击或被攻击</param> /// <returns></returns> public float GetAllHealthChange(DemageOrCure demageOrCure, AttackOrBeAttach attackOrBeAttach) { var key = demageOrCure + "%" + attackOrBeAttach; return(GetFloat(key)); }
// -----------------------全场生命变更统计------------------------------ /// <summary> /// 添加所有生命值变更统计 /// </summary> /// <param name="changeValue">变更值</param> /// <param name="demageOrCure">变更类型</param> /// <param name="attackOrBeAttach">攻击或被攻击</param> private void AddAllhealthChange(float changeValue, DemageOrCure demageOrCure, AttackOrBeAttach attackOrBeAttach = AttackOrBeAttach.BeAttach) { var key = demageOrCure + "%" + attackOrBeAttach; SetFloat(key, changeValue); }
/// <summary> /// 获取阵营生命值变更 /// </summary> /// <param name="camp"></param> /// <param name="demageOrCure"></param> /// <param name="attackOrBeAttach">攻击或被攻击</param> public float GetCampHealthChange(int camp, DemageOrCure demageOrCure, AttackOrBeAttach attackOrBeAttach) { var key = camp + "%" + demageOrCure + "%" + attackOrBeAttach; return(GetFloat(key)); }
/// <summary> /// 获取单位伤害统计 /// </summary> /// <param name="key"></param> /// <param name="camp">阵营</param> /// <param name="changeType">变更类型</param> /// <param name="demageType">伤害类型</param> /// <param name="attackOrBeAttach"></param> /// <returns>变更量</returns> public float GetHealthChange(string key, int camp, DemageOrCure changeType, DemageType demageType, AttackOrBeAttach attackOrBeAttach = AttackOrBeAttach.BeAttach) { var tmpKey = key + "%" + camp + "%" + changeType + "%" + demageType + "%" + attackOrBeAttach; return(GetFloat(tmpKey)); }