//using ProtoCSStruct; //using Sog; //using System; //using System.Collections.Generic; //using static Battle.BattleHero; //namespace Battle //{ // public static class BattleBuffEffect // { // private static Func[] m_buff_effect_mth = new Func[(int)EffectType.Max]; // public static void Init() // { // m_buff_effect_mth[(int)EffectType.None] = null; // m_buff_effect_mth[(int)EffectType.AddEquipmentProp] = EffectAddEquipmentProp; // m_buff_effect_mth[(int)EffectType.EquipmentBaseProp] = EffectEquipmentBaseProp; // m_buff_effect_mth[(int)EffectType.AddProp] = EffectAddProp; // //m_buff_effect_mth[(int)EffectType.Heal] = EffectHeal; // m_buff_effect_mth[(int)EffectType.ConvertProp] = EffectConvertProp; // m_buff_effect_mth[(int)EffectType.AttBackAtStun] = EffectAttBackAtStun; // m_buff_effect_mth[(int)EffectType.AttackExtraTarget] = EffectAttackExtraTarget; // m_buff_effect_mth[(int)EffectType.DamIgnore] = Effect08.DoEffect; // m_buff_effect_mth[(int)EffectType.Dot] = EffectDot; // m_buff_effect_mth[(int)EffectType.AddBuff] = Effect10.DoEffect; // m_buff_effect_mth[(int)EffectType.DamUp] = EffectDamUp; // m_buff_effect_mth[(int)EffectType.HightestPropUp] = EffectHightestPropUp; // //m_buff_effect_mth[(int)EffectType.HightestPropAddByLowest] = EffectHightestPropAddByLowest; // m_buff_effect_mth[(int)EffectType.AvergeUnExtraProp] = EffectAverageUnExtraProp; // m_buff_effect_mth[(int)EffectType.UnExtraPropUp] = EffectUnExtraPropUp; // //m_buff_effect_mth[(int)EffectType.AddPropByCurrent] = EffectAddPropByCurrent; // m_buff_effect_mth[(int)EffectType.Relive] = EffectRelive; // m_buff_effect_mth[(int)EffectType.HealRate] = EffectHealRate; // m_buff_effect_mth[(int)EffectType.AddHighestProp] = EffectAddHighestProp; // m_buff_effect_mth[(int)EffectType.UnHeal] = EffectUnHeal; // //m_buff_effect_mth[(int)EffectType.RoundDot] = EffectRoundDot; // m_buff_effect_mth[(int)EffectType.Reflect] = EffectReflect; // //m_buff_effect_mth[(int)EffectType.AttackTargetChg] = EffectAttackTargetChg; // //m_buff_effect_mth[(int)EffectType.TargetCurHpDamage] = EffectTargetCurHpDamage; // //m_buff_effect_mth[(int)EffectType.SelfHpMaxDamage] = EffectSelfHpMaxDamage; // //m_buff_effect_mth[(int)EffectType.UpdateBuffTime] = EffectUpdateBuffTime; // //m_buff_effect_mth[(int)EffectType.Pursuit] = EffectPursuit; // //m_buff_effect_mth[(int)EffectType.ReplyRateHp] = EffectReplyRateHp; // //m_buff_effect_mth[(int)EffectType.PlayerDamUp] = EffectPlayerDamUp; // m_buff_effect_mth[(int)EffectType.DamageDown] = EffectDamageDown; // //m_buff_effect_mth[(int)EffectType.PlayerDamageDown] = EffectPlayerDamageDown; // m_buff_effect_mth[(int)EffectType.PursuitTotalDamage] = Effect33.DoEffect; // m_buff_effect_mth[(int)EffectType.UnExtraToMaxProp2] = EffectUnExtraToMaxProp2; // m_buff_effect_mth[(int)EffectType.Prop2Multiply] = EffectProp2Multiply; // m_buff_effect_mth[(int)EffectType.E36] = Effect36.DoEffect; // m_buff_effect_mth[(int)EffectType.E37] = Effect37.DoEffect; // m_buff_effect_mth[(int)EffectType.E38] = Effect38.DoEffect; // m_buff_effect_mth[(int)EffectType.E39] = Effect39.DoEffect; // m_buff_effect_mth[(int)EffectType.E40] = Effect40.DoEffect; // m_buff_effect_mth[(int)EffectType.E41] = Effect41.DoEffect; // m_buff_effect_mth[(int)EffectType.E42] = Effect42.DoEffect; // m_buff_effect_mth[(int)EffectType.E43] = Effect43.DoEffect; // m_buff_effect_mth[(int)EffectType.E44] = Effect44.DoEffect; // m_buff_effect_mth[(int)EffectType.E45] = Effect45.DoEffect; // m_buff_effect_mth[(int)EffectType.E46] = Effect46.DoEffect; // m_buff_effect_mth[(int)EffectType.E47] = Effect47.DoEffect; // m_buff_effect_mth[(int)EffectType.E48] = Effect48.DoEffect; // m_buff_effect_mth[(int)EffectType.E49] = Effect49.DoEffect; // m_buff_effect_mth[(int)EffectType.E50] = Effect50.DoEffect; // m_buff_effect_mth[(int)EffectType.E51] = Effect51.DoEffect; // m_buff_effect_mth[(int)EffectType.E52] = Effect52.DoEffect; // m_buff_effect_mth[(int)EffectType.E53] = Effect53.DoEffect; // m_buff_effect_mth[(int)EffectType.E54] = Effect54.DoEffect; // m_buff_effect_mth[(int)EffectType.E55] = Effect55.DoEffect; // m_buff_effect_mth[(int)EffectType.E56] = Effect56.DoEffect; // m_buff_effect_mth[(int)EffectType.E57] = Effect57.DoEffect; // m_buff_effect_mth[(int)EffectType.E58] = Effect58.DoEffect; // m_buff_effect_mth[(int)EffectType.E59] = Effect59.DoEffect; // m_buff_effect_mth[(int)EffectType.E60] = Effect60.DoEffect; // m_buff_effect_mth[(int)EffectType.E61] = Effect61.DoEffect; // m_buff_effect_mth[(int)EffectType.E62] = Effect62.DoEffect; // } // public static int BuffEffectMth(BattleObj battle, BattleHero caster, BattleHero _target, SkillDesc skillDesc, BattleHero.Buff buff // , Dictionary buffParam = null) // { // if (m_buff_effect_mth[buff.effect.type] == null) // return -1; // BuffParam param = new BuffParam(battle, caster, _target, skillDesc, buff,buffParam); // return m_buff_effect_mth[buff.effect.type](param); // } // private static int EffectAddEquipmentProp(BuffParam param) // { // ref var heroInfo = ref BattleHeroSvc.GetHeroByBattleHero(param.battle, param.target); // for (var i = 0; i < heroInfo.Dbhero.WearEquip.Count; i++) // { // if (heroInfo.Dbhero.WearEquip[i].Pos != param.effectDesc.Param1[param.buff.level - 1]) // { // continue; // } // for (var j = 0; j < heroInfo.Dbhero.WearEquip[i].AddProp.Count; j++) // { // param.target.prop.AddValue((CSPropIDType)heroInfo.Dbhero.WearEquip[i].AddProp[j].Id, // heroInfo.Dbhero.WearEquip[i].AddProp[j].Value * param.effectDesc.Param2[param.buff.level - 1] / 10000); // } // } // return 0; // } // private static int EffectAddProp(BuffParam param) // { // int level = param.buff.level; // if(param.effectDesc.Param1[level - 1] > 0) // { // param.target.AddProp(param.battle, (CSPropIDType)param.effectDesc.Param1[level - 1], param.effectDesc.Param2[level - 1]); // //target.prop.AddValue((CSPropIDType)effectDesc.param1, effectDesc.param2); // var idx = CreateBattleLog(param.battle, param.caster.objId, param.target.objId, BattleEventType.Buff, 0, 0, 0, param.skillDesc, param.effectDesc, param.buff.effectIdx); // if (idx == -1) // { // param.battle.Result = CSBattleResult.Failed; // return -1; // } // param.buff.targetId = param.target.objId; // } // return 0; // } // private static int EffectEquipmentBaseProp(BuffParam param) // { // ref var heroInfo = ref BattleHeroSvc.GetHeroByBattleHero(param.battle, param.target); // for (var i = 0; i < heroInfo.Dbhero.WearEquip.Count; i++) // { // if (heroInfo.Dbhero.WearEquip[i].Pos != param.effectDesc.Param1[param.buff.level - 1]) // { // continue; // } // for (var j = 0; j < (heroInfo.Dbhero.WearEquip[i].AddProp.Count > 4 ? 4 : heroInfo.Dbhero.WearEquip[i].AddProp.Count); j++) // { // param.target.prop.AddValue((CSPropIDType)heroInfo.Dbhero.WearEquip[i].AddProp[j].Id, // heroInfo.Dbhero.WearEquip[i].AddProp[j].Value * param.effectDesc.Param2[param.buff.level - 1] / 10000); // } // } // return 0; // } // private static int EffectConvertProp(BuffParam param) // { // var hr1 = HeroProp.GetPropRelation((CSPropIDType)param.effectDesc.Param1[param.buff.level - 1]); // var value = param.target.prop.GetValue((CSPropIDType)hr1.PropFinal); // param.target.prop.AddValue((CSPropIDType)param.effectDesc.Param2[param.buff.level - 1], value); // param.target.prop.SetValue((CSPropIDType)hr1.PropBase, 0); // param.target.prop.SetValue((CSPropIDType)hr1.PropBaseRate, 0); // param.target.prop.SetValue((CSPropIDType)hr1.PropEquip, 0); // param.target.prop.SetValue((CSPropIDType)hr1.PropEquipRate, 0); // param.target.prop.SetValue((CSPropIDType)hr1.PropTotal, 0); // param.target.prop.SetValue((CSPropIDType)hr1.PropTotalRate, 0); // param.battle.Trace("Effect5 convert {0} to {1} value {2}", hr1.PropFinal, param.effectDesc.Param2[param.buff.level - 1], value); // return 0; // } // private static int EffectAverageUnExtraProp(BuffParam param) // { // var total = 0L; // HeroProp.GetUnExtraProp().ForEach(prop => total += param.target.prop.GetValue(prop)); // HeroProp.GetUnExtraProp().ForEach(prop => param.target.prop.SetValue(prop, total / 6)); // return 0; // } // private static int EffectHightestPropUp(BuffParam param) // { // var highest = HeroProp.GetExtraProp()[0]; // for (var i = 1; i < HeroProp.GetExtraProp().Count; i++) // { // if (param.target.GetProp(HeroProp.GetExtraProp()[i]) > param.target.GetProp(highest)) // { // highest = HeroProp.GetExtraProp()[i]; // } // } // param.battle.Trace("Effect 12 add {0} value {1}, ovalue {2} ", highest, param.effectDesc.Param1[param.buff.level - 1], param.target.GetProp(highest)); // param.target.prop.AddValue(highest, param.effectDesc.Param1[param.buff.level - 1]); // return 0; // } // private static int EffectHightestPropAddByLowest(SkillDesc.Effect effectDesc, BattleObj battle, BattleHero caster, BattleHero target, SkillDesc skillDesc, BattleHero.Buff buff) // { // var highest = HeroProp.GetExtraProp()[0]; // var lowest = HeroProp.GetExtraProp()[0]; // for (var i = 1; i < HeroProp.GetExtraProp().Count; i++) // { // if (target.GetProp(HeroProp.GetExtraProp()[i]) > target.GetProp(highest)) // { // highest = HeroProp.GetExtraProp()[i]; // } // if (target.GetProp(HeroProp.GetExtraProp()[i]) < target.GetProp(lowest)) // { // lowest = HeroProp.GetExtraProp()[i]; // } // } // target.prop.AddValue(highest, target.GetProp(lowest) * effectDesc.Param1[buff.level - 1] / 10000); // return 0; // } // private static int EffectUnExtraPropUp(BuffParam param) // { // HeroProp.GetUnExtraProp().ForEach(prop => param.target.prop.AddValue(prop, param.effectDesc.Param1[param.buff.level - 1])); // return 0; // } // private static int EffectAttBackAtStun(BuffParam param) // { // param.target.prop.AddValue(CSPropIDType.AtkBackAtStun, 1); // param.buff.targetId = param.target.objId; // return 0; // } // // 这里复制了一份攻击时的代码 为了处理事件的递归调用, 举个例子 A 的普工触发AOE 如果还走原来的攻击的代码的话 又会有个攻击事件 导致递归 // // 同时还要处理战斗日志的问题 复制就复制吧 // private static int EffectAttackExtraTarget(BuffParam param) // { // if(param.caster.param.TryGetValue("EffectAttackExtraTarget", out var t) && t == 1) // { // return 1; // } // var targets = BattleHeroSvc.GetAliveEnemy(param.battle, param.caster); // int resultCode = 0; // for (int i = 0; i <= param.effectDesc.Param1[param.buff.level - 1]; i++) // { // if (i < targets.Count && targets[i].objId != param.target.objId) // { // //ref var log = ref BattleControl.GetBattleLog(param.battle, param.battle.curLogIdx); // //log.ResultBit = BitUtils.BitSet(log.ResultBit, (int)BattleEventBit.MulTarget); // param.caster.param["EffectAttackExtraTarget"] = 1; // //resultCode += BattleBuff.AttackWithOutEvent(param.battle, param.caster, targets[i], false); // BattleControl.Attack(param.battle, param.caster, targets[i], false, out _); // param.caster.param["EffectAttackExtraTarget"] = 0; // } // } // return resultCode; // } // private static int EffectDamIgnore(BuffParam param) // { // param.target.prop.AddValue(CSPropIDType.DamageIgnore, param.effectDesc.Param1[param.buff.level - 1]); // return 0; // } // private static int EffectDot(BuffParam param) // { // param.target.AddHp(-param.effectDesc.Param1[param.buff.level - 1]); // var idx = CreateBattleLog(param.battle, param.target.objId, param.target.objId, BattleEventType.Buff, 0, // (uint)param.effectDesc.Param1[param.buff.level - 1], 0, param.skillDesc, param.effectDesc, param.buff.effectIdx); // if (idx == -1) // { // param.battle.Result = CSBattleResult.Failed; // return -1; // } // return 0; // } // private static int EffectAddBuff(BuffParam param) // { // //var buffIndex = -1; // //for (var i = 0; i < target.buffs.Count; i++) // //{ // // if (target.buffs[i].buffid != effectDesc.param1 || target.buffs[i].level != effectDesc.param2) // // { // // continue; // // } // // buffIndex = i; // // break; // //} // //var buffDesc = SkillDescMgr.Instance.GetConfig(effectDesc.param1, effectDesc.param2); // //if(buffDesc == null) // //{ // // TraceLog.Error("BattleBuffEffect.EffectAddBuff skill {0} level {1}, buff id {2} {3} no buffDesc", skillDesc.id, skillDesc.level, effectDesc.param1, effectDesc.param2); // // return -1; // //} // //if (buffIndex != -1) // //{ // // if (buffDesc.maxlay != 0 && target.buffs[buffIndex].count >= buffDesc.maxlay) return 0; // // target.buffs[buffIndex].count += 1; // //} // //else // //{ // // var buff = new BattleHero.Buff // // { // // buffid = effectDesc.param1, // // level = effectDesc.param2, // // count = 1, // // overTime = buffDesc.over == (int)BattleEventType.None ? -1 : buffDesc.time, // // casterId = caster.objId // // }; // // if (buffDesc.over == (int)EffectEvent.BattleStart) // // { // // buff.overTime = -1; // // } // // target.buffs.Add(buff); // //} // //if (buffDesc.showId != 0) // //{ // // var idx = CreateBattleLog(battle, caster.objId, target.objId, BattleEventType.Buff, 0, 0, 0, skillDesc); // // if (idx == -1) // // { // // battle.Result = CSBattleResult.Failed; // // return -1; // // } // //} // //if (buffDesc.isEffective == 0) // //{ // // return 0; // //} // //var success = true; // //// buff是加到target身上的 是target去effect 注意的是这里如果caster和target是同一个的时候 要另外取敌人 // //for (var i = 0; i < buffDesc.effectNum; i++) // //{ // // success &= BattleBuff.ProcessEffectBuff(buffDesc.effectDesc[i], battle, target, caster, buffDesc) == 0; // //} // //return success ? 0 : -1; // return 0; // } // private static int EffectDamUp(BuffParam param) // { // param.target.prop.AddValue(CSPropIDType.DamageRate, param.effectDesc.Param1[param.buff.level - 1]); // param.buff.targetId = param.target.objId; // var idx = CreateBattleLog(param.battle, param.caster.objId, param.target.objId, BattleEventType.Buff, 0, 0, 0, param.skillDesc, param.effectDesc, param.buff.effectIdx); // if (idx == -1) // { // param.battle.Result = CSBattleResult.Failed; // return -1; // } // return 0; // } // private static int EffectPlayerDamUp(SkillDesc.Effect effectDesc, BattleObj battle, BattleHero caster, BattleHero target, SkillDesc skillDesc, BattleHero.Buff buff) // { // //TraceLog.Trace("BattleBuffEffect.EffectPlayerDamUp caster={0} target={1} param1={2}", caster.objId, target.objId, effectDesc.param1); // //target.prop.AddValue(CSPropIDType.DamageRatePlayer, effectDesc.param1); // return 0; // } // private static int EffectDamageDown(BuffParam param) // { // TraceLog.Trace("BattleBuffEffect.EffectDamageDown caster={0} target={1} param1={2}", param.caster.objId, param.target.objId, param.effectDesc.Param1[param.buff.level - 1]); // param.target.prop.AddValue(CSPropIDType.DamageDown, param.effectDesc.Param1[param.buff.level - 1]); // return 0; // } // private static int EffectPlayerDamageDown(SkillDesc.Effect effectDesc, BattleObj battle, BattleHero caster, BattleHero target, SkillDesc skillDesc, BattleHero.Buff buff) // { // //TraceLog.Trace("BattleBuffEffect.EffectPlayerDamageDown caster={0} target={1} param1={2}", caster.objId, target.objId, effectDesc.param1); // //target.prop.AddValue(CSPropIDType.DamageDownPlayer, effectDesc.param1); // return 0; // } // private static int EffectAddPropByCurrent(SkillDesc.Effect effectDesc, BattleObj battle, BattleHero caster, BattleHero target, SkillDesc skillDesc, BattleHero.Buff buff) // { // //var value = target.GetProp((CSPropIDType)effectDesc.param1); // //target.prop.AddValue((CSPropIDType)effectDesc.param1, value * effectDesc.param2 / 10000); // //int idx = CreateBattleLog(battle, caster.objId, target.objId, BattleEventType.Buff, 0, 0, 0, skillDesc); // //if (idx == -1) // //{ // // battle.Result = CSBattleResult.Failed; // // return -1; // //} // return 0; // } // private static int EffectHealRate(BuffParam param) // { // var healHp = param.target.GetHpMax() * param.effectDesc.Param1[param.buff.level - 1] / 10000; // BattleControl.Heal(param.battle, param.caster, param.target, ref healHp, true, 18); // return 0; // } // private static int EffectAddHighestProp(BuffParam param) // { // for (var i = 0; i < HeroProp.GetExtraProp().Count; i++) // { // param.target.prop.AddValue(HeroProp.GetExtraProp()[i], param.effectDesc.Param1[param.buff.level - 1]); // } // int idx = CreateBattleLog(param.battle, param.caster.objId, param.target.objId, BattleEventType.Buff, 0, 0, 0, param.skillDesc, param.effectDesc, param.buff.effectIdx); // if (idx == -1) // { // param.battle.Result = CSBattleResult.Failed; // return -1; // } // return 0; // } // private static int EffectUnHeal(BuffParam param) // { // param.target.prop.AddValue(CSPropIDType.HealRate, param.effectDesc.Param1[param.buff.level - 1]); // param.buff.targetId = param.target.objId; // CreateBattleLog(param.battle, param.caster.objId, param.target.objId, BattleEventType.Buff, 0, 0, 0, param.skillDesc, param.effectDesc, param.buff.effectIdx); // return 0; // } // private static int EffectRelive(BuffParam param) // { // param.target.SetRelive(); // param.target.SetHp(param.target.GetHpMax() * param.effectDesc.Param1[param.buff.level - 1] / 10_000); // CreateBattleLog(param.battle, param.caster.objId, param.target.objId, BattleEventType.Revive, 0, 0, // param.target.GetHpMax() * param.effectDesc.Param1[param.buff.level - 1] / 10_000, // param.skillDesc, param.buff.effect, param.buff.effectIdx); // BattleBuff.BuffEvent(EffectEvent.Relive, param.battle, param.target); // return 0; // } // private static int EffectHeal(SkillDesc.Effect effectDesc, BattleObj battle, BattleHero caster, BattleHero target, SkillDesc skillDesc, BattleHero.Buff buff) // { // //long healHp; // //if (effectDesc.param1 / 10000 > target.prop.GetValueNoCheck(CSPropIDType.HpMax) - target.prop.GetValueNoCheck(CSPropIDType.Hp)) // //{ // // healHp = target.prop.GetValueNoCheck(CSPropIDType.HpMax) - target.prop.GetValueNoCheck(CSPropIDType.Hp); // //} // //else // //{ // // healHp = effectDesc.param1 / 10000; // //} // //if (healHp == 0) return 0; // // todo 群体回复resultBit设置multarget // //return BattleControl.Heal(battle, caster, target, ref healHp); // return 0; // } // // 回合掉血 // private static int EffectRoundDot(SkillDesc.Effect effectDesc, BattleObj battle, BattleHero caster, BattleHero target, SkillDesc skillDesc, BattleHero.Buff buff) // { // //var costHp = caster.GetHp() * effectDesc.param1 / 10000; // //var atkVal = target.GetMinimumAtk() * effectDesc.param2 / 10000; // //TraceLog.Trace("BattleBuffEffect.EffectRoundDot caster={0} target={1} GetHp={2} costHp={3} GetMinimumAtk={4} atkVal={5} param1={6} param2={7}", // // caster.objId, target.objId, caster.GetHp(), costHp, target.GetMinimumAtk(), atkVal, effectDesc.param1, effectDesc.param2); // ////损失自身当前生命值万分比,不超过攻击万分比值 // //if (costHp > atkVal) // // costHp = atkVal; // //if (costHp <= 0) // // return 0; // //var idx = CreateBattleLog(battle, caster.objId, target.objId, BattleEventType.Buff, 0, -costHp, 0, skillDesc); // //if (idx == -1) // //{ // // battle.Result = CSBattleResult.Failed; // // return -1; // //} // //BuffDmg(battle, caster, target, idx, costHp); // return 0; // } // // 增加反弹伤害属性 // private static int EffectReflect(BuffParam param) // { // TraceLog.Trace("BattleBuffEffect.EffectReflect caster={0} target={1} param1={2}", // param.caster.objId, param.target.objId, param.effectDesc.Param1[0]); // param.caster.prop.AddValue(CSPropIDType.ReflectDamage, param.effectDesc.Param1[param.buff.level - 1]); // return 0; // } // // 攻击目标修改 // private static int EffectAttackTargetChg(BuffParam param) // { // //caster.lastAtkTarget = effectDesc.param1; // //TraceLog.Trace("BattleBuffEffect.EffectAttackTargetChg caster={0} target={1} effectDesc.param1={2}", caster.objId, target.objId, effectDesc.param1); // return 0; // } // // 额外造成敌人当前生命伤害万分比(需要普攻伤害 + 额外伤害汇总) // private static int EffectTargetCurHpDamage(SkillDesc.Effect effectDesc, BattleObj battle, BattleHero caster, BattleHero target, SkillDesc skillDesc, BattleHero.Buff buff) // { // //var costHp = target.GetHp() * effectDesc.param1 / 10000; // //var atkVal = caster.GetMinimumAtk() * effectDesc.param2 / 10000; // //TraceLog.Trace("BattleBuffEffect.EffectTargetCurHpDamage caster={0} target={1} GetHp={2} costHp={3} GetMinimumAtk={4} atkVal={5} param1={6} param2={7}", // // caster.objId, target.objId, target.GetHp(), costHp, caster.GetMinimumAtk(), atkVal, effectDesc.param1, effectDesc.param2); // ////额外造成敌人,当前生命值万分比,不超过攻击万分比值 // //if (costHp > atkVal) // // costHp = atkVal; // //if (costHp <= 0) // // return 0; // ////先临时记录额外伤害值 // //caster.buffExtraDmgList.Add(new BuffExtraDamage // //{ // // buffId = skillDesc.id, // // targetObjId = target.objId, // // dmg = costHp // //}); // return 0; // } // // 额外造成敌人自身生命上限伤害万分比(需要普攻伤害 + 额外伤害汇总) // private static int EffectSelfHpMaxDamage(SkillDesc.Effect effectDesc, BattleObj battle, BattleHero caster, BattleHero target, SkillDesc skillDesc, BattleHero.Buff buff) // { // //var costHp = target.GetHpMax() * effectDesc.param1 / 10000; // //var atkVal = caster.GetMinimumAtk() * effectDesc.param2 / 10000; // //TraceLog.Trace("BattleBuffEffect.EffectSelfHpMaxDamage caster={0} target={1} GetHpMax={2} costHp={3} GetMinimumAtk={4} atkVal={5} param1={6} param2={7}", // // caster.objId, target.objId, caster.GetHpMax(), costHp, caster.GetMinimumAtk(), atkVal, effectDesc.param1, effectDesc.param2); // ////额外造成敌人自身最大生命值万分比,不超过我方攻击万分比值 // //if (costHp > atkVal) // // costHp = atkVal; // //if (costHp <= 0) // // return 0; // ////先临时记录额外伤害值 // //caster.buffExtraDmgList.Add(new BuffExtraDamage // //{ // // buffId = skillDesc.id, // // targetObjId = target.objId, // // dmg = costHp // //}); // return 0; // } // // 更新目标buff的结束时间 // private static int EffectUpdateBuffTime(SkillDesc.Effect effectDesc, BattleObj battle, BattleHero caster, BattleHero target, SkillDesc skillDesc, BattleHero.Buff buff) // { // //TraceLog.Trace("BattleBuffEffect.EffectUpdateBuffTime caster={0} target={1} param1={2} param2={3}", caster.objId, target.objId, effectDesc.param1, effectDesc.param2); // //return AddBuffOverTime(battle, caster, target, effectDesc.param1, effectDesc.param2); // return 0; // } // // 对敌人额外追击额外伤害 // private static int EffectPursuit(SkillDesc.Effect effectDesc, BattleObj battle, BattleHero caster, BattleHero target, SkillDesc skillDesc, BattleHero.Buff buff) // { // //var costHp = caster.GetMinimumAtk() * effectDesc.param2 / 10000; // //if (costHp <= 0) // // return 0; // ////追击x次 // //for (int i = 0; i < effectDesc.param1; i++) // //{ // // TraceLog.Trace("BattleBuffEffect.EffectPursuit caster={0} target={1} param1={2} param2={3} costHp={4} buffId={5}", caster.objId, target.objId, effectDesc.param1, effectDesc.param2, costHp, skillDesc.id); // // var idx = CreateBattleLog(battle, caster.objId, target.objId, BattleEventType.Buff, 0, -costHp, 0, skillDesc); // // if (idx == -1) // // { // // battle.Result = CSBattleResult.Failed; // // return -1; // // } // // BuffDmg(battle, caster, target, idx, costHp); // // if (target.isDead) // // break; // //} // return 0; // } // ////二级属性乘以万分比倍数 // private static int EffectProp2Multiply(BuffParam param) // { // CSPropIDType propid = (CSPropIDType)param.effectDesc.Param1[param.buff.level - 1]; // long v = param.target.GetProp(propid); // v = (long)(v * (param.effectDesc.Param2[param.buff.level - 1] * 1.0D / 10_000)); // param.target.SetProp(propid, v); // return 0; // } // ////所有忽视属性变成最高的2级属性 // private static int EffectUnExtraToMaxProp2(BuffParam param) // { // List prop2 = HeroProp.GetExtraProp(); // List unprop = HeroProp.GetUnExtraProp(); // long max = 0; // //CSPropIDType maxid = CSPropIDType.None; // for(int i = 0; i < prop2.Count; i++) // { // CSPropIDType p = prop2[i]; // int pid = HeroProp.GetPropRelation(p).PropFinal; // long v = param.target.GetPropNoCheck((CSPropIDType)pid); // if(v > max) // { // max = v; // //maxid = p; // } // } // for (int i = 0; i < unprop.Count; i++) // { // CSPropIDType p = unprop[i]; // int pid = HeroProp.GetPropRelation(p).PropFinal; // param.target.SetProp((CSPropIDType)pid, max); // } // return 0; // } // // 对敌人额外追击汇总伤害(需要普攻伤害 + 额外伤害汇总) // private static int EffectPursuitTotalDamage(BuffParam param) // { // var costHp = param.caster.GetMinimumAtk() * param.effectDesc.Param2[param.buff.level - 1] / 10000; // if (costHp <= 0) // return 0; // //追击x次 // for (int i = 0; i < param.effectDesc.Param1[param.buff.level - 1]; i++) // { // TraceLog.Trace("BattleBuffEffect.EffectPursuitTotalDamage caster={0} target={1} param1={2} param2={3} costHp={4} buffId={5}", param.caster.objId, param.target.objId, // param.effectDesc.Param1, param.effectDesc.Param2, costHp, param.skillDesc.id); // //先临时记录额外伤害值 // param.caster.buffExtraDmgList.Add(new BuffExtraDamage // { // buffId = param.skillDesc.id, // targetObjId = param.target.objId, // dmg = costHp // }); // } // return 0; // } // // 回复目标自身生命上限万分比的生命 // private static int EffectReplyRateHp(SkillDesc.Effect effectDesc, BattleObj battle, BattleHero caster, BattleHero target, SkillDesc skillDesc, BattleHero.Buff buff) // { // var addHpVal = target.GetHpMax() * effectDesc.Param1[buff.level - 1] / 10000; // var maxAddHp = caster.GetMinimumAtk() * effectDesc.Param2[buff.level - 1] / 10000; // TraceLog.Trace("BattleBuffEffect.EffectReplyRateHp caster={0} target={1} param1={2} param2={3} addHpVal={4} GetHpMax={5} maxAddHp={6} GetMinimumAtk={7}", caster.objId, // target.objId, effectDesc.Param1, effectDesc.Param2, addHpVal, caster.GetHpMax(), maxAddHp, caster.GetMinimumAtk()); // //回复目标自身生命上限万分比血,但不超过施法者攻击万分比值 // if (addHpVal > maxAddHp) // addHpVal = maxAddHp; // if (addHpVal == 0) // return 0; // return BattleControl.Heal(battle, caster, target, ref addHpVal); // } // // todo: 修改m_buff_effect_mth的buffId为buffDesc, 最后传日志的时候在做过滤 // private static int CreateBattleLog(BattleObj battle, int casterId, int targetId, // BattleEventType evtType, uint resultBits, long dmg, long heal, SkillDesc skill, SkillDesc.Effect effect, int effectIdx) // { // if (effect.ShowID != 0) // { // return BattleControl.CreateBattleLog(battle, casterId, targetId, evtType, resultBits, dmg, heal, skill.id, effectIdx); // } // return 0; // } // //buff伤害 // public static void BuffDmg(BattleObj battle, BattleHero caster, BattleHero target, int idx, long dmg) // { // ref var evtLog = ref BattleControl.GetBattleLog(battle, idx); // BattleControl.Hurt(battle, caster, target, dmg, ref evtLog); // //BattleControl.LifeSteal(battle, caster, target, dmg, ref evtLog); // BattleControl.Dead(battle, caster, target, ref evtLog); // } // //private static int AddBuffOverTime(BattleObj battle, BattleHero caster, BattleHero target, int buffId, int addVal) // //{ // // for (var i = 0; i < target.buffs.Count; i++) // // { // // if (buffId == target.buffs[i].buffid) // // { // // if (target.buffs[i].overTime == -1) // // { // // continue; // // } // // target.buffs[i].overTime += addVal; // // if (target.buffs[i].overTime < 0) // // { // // target.buffs[i].overTime = 0; // // } // // var idx = CreateBattleLog(battle, caster.objId, target.objId, BattleEventType.UpdateBuffOverTime, 0, target.buffs[i].overTime, 0, target.buffs[i].buffid); // // if (idx == -1) // // { // // TraceLog.Trace("BattleBuffEffect.AddBuffOverTime caster={0} target={1} buffId={2} addVal = {3} overTime = {4} success = {5}" // // , caster.objId, target.objId, target.buffs[i].buffid, addVal, target.buffs[i].overTime, false); // // battle.Result = CSBattleResult.Failed; // // return -1; // // } // // break; // // } // // } // // return 0; // //} // } //}