You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
710 lines
35 KiB
710 lines
35 KiB
//using ProtoCSStruct;
|
|
//using Sog;
|
|
//using System;
|
|
//using System.Collections.Generic;
|
|
//using static Battle.BattleHero;
|
|
|
|
//namespace Battle
|
|
//{
|
|
// public static class BattleBuffEffect
|
|
// {
|
|
// private static Func<BuffParam, int>[] m_buff_effect_mth = new Func<BuffParam, int>[(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<string, long> 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<CSPropIDType> prop2 = HeroProp.GetExtraProp();
|
|
// List<CSPropIDType> 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;
|
|
// //}
|
|
// }
|
|
//}
|
|
|