protected static void AppTreat(Buff buffData, EntityParent caster, EntityParent target, int fromSkillID, int fromSkillLevel, XDict <GameData.AttrType, BattleSkillAttrAdd> fromSkillAttrChange, bool isCommunicateMix) { if (!LocalAgent.GetEntityCalculatable(caster, isCommunicateMix)) { return; } if (!LocalAgent.GetEntityIsCurable(target, isCommunicateMix)) { return; } if (target.IsUnconspicuous && buffData.forceHandle == 0) { return; } XDict <GameData.AttrType, long> buffCasterTempAttr = LocalBattleBuffCalculatorHandler.GetBuffCasterTempAttr(buffData, caster, fromSkillLevel, fromSkillAttrChange); XDict <GameData.AttrType, long> buffTargetTempAttr = LocalBattleBuffCalculatorHandler.GetBuffTargetTempAttr(buffData, caster, fromSkillLevel, fromSkillAttrChange); long num = BattleCalculator.CalculateTreatment(caster.BattleBaseAttrs, target.BattleBaseAttrs, target.IsEntitySelfType || target.IsEntityPlayerType, buffCasterTempAttr, buffTargetTempAttr); if (num != 0L) { List <ClientDrvBuffInfo> casterBuffInfo = null; List <ClientDrvBuffInfo> targetBuffInfo = null; if (isCommunicateMix) { casterBuffInfo = LocalAgent.MakeClientDrvBuffInfo(caster.ID); targetBuffInfo = LocalAgent.MakeClientDrvBuffInfo(target.ID); } long num2 = LocalAgent.GetSpiritCurHp(target, isCommunicateMix) + num; if (num2 > target.RealHpLmt) { num2 = target.RealHpLmt; } Pos pos = null; if (caster.Actor) { pos = new Pos(); pos.x = caster.Actor.FixTransform.get_position().x * 100f; pos.y = caster.Actor.FixTransform.get_position().z * 100f; } LocalAgent.SetSpiritCurHp(target, num2, isCommunicateMix); if (isCommunicateMix) { GlobalBattleNetwork.Instance.SendClientDriveBattleBuffDamage(caster.ID, target.ID, caster.Hp, num2, num, buffData.id, true, casterBuffInfo, targetBuffInfo, new List <long>(), string.Concat(new object[] { caster.TryAddValue(GameData.AttrType.SkillTreatScaleBOAtk, buffCasterTempAttr), "_", caster.TryAddValue(GameData.AttrType.SkillTreatScaleBOHpLmt, buffCasterTempAttr), "_", caster.TryAddValue(GameData.AttrType.SkillIgnoreDefenceHurt, buffCasterTempAttr) })); } LocalBattleProtocolSimulator.SendTreat(target.ID, (GameObjectType.ENUM)target.WrapType, caster.ID, (GameObjectType.ENUM)caster.WrapType, BattleAction_Treat.TreatSrcType.Treat, num, num2, pos); } }
protected static void AppDamage(Buff buffData, EntityParent caster, EntityParent target, int fromSkillID, int fromSkillLevel, XDict <GameData.AttrType, BattleSkillAttrAdd> fromSkillAttrChange, bool isCommunicateMix) { if (!LocalAgent.GetEntityCalculatable(caster, isCommunicateMix)) { return; } if (!LocalAgent.GetEntityCalculatable(target, isCommunicateMix)) { return; } if (target.IsUnconspicuous && buffData.forceHandle == 0) { return; } if (target.IsIgnoreFormula) { return; } XDict <GameData.AttrType, long> buffCasterTempAttr = LocalBattleBuffCalculatorHandler.GetBuffCasterTempAttr(buffData, caster, fromSkillLevel, fromSkillAttrChange); XDict <GameData.AttrType, long> buffTargetTempAttr = LocalBattleBuffCalculatorHandler.GetBuffTargetTempAttr(buffData, caster, fromSkillLevel, fromSkillAttrChange); BattleCalculator.DamageResult damageResult = BattleCalculator.CalculateDamage(caster.BattleBaseAttrs, target.BattleBaseAttrs, caster.IsEntitySelfType || caster.IsEntityPlayerType || caster.IsEntityPetType, target.IsEntitySelfType || target.IsEntityPlayerType, buffCasterTempAttr, buffTargetTempAttr); List <ClientDrvBuffInfo> casterBuffInfo = null; List <ClientDrvBuffInfo> targetBuffInfo = null; if (isCommunicateMix) { casterBuffInfo = LocalAgent.MakeClientDrvBuffInfo(caster.ID); targetBuffInfo = LocalAgent.MakeClientDrvBuffInfo(target.ID); } if (damageResult.Lifesteal > 0L && !damageResult.IsMiss && LocalAgent.GetEntityIsCurable(caster, isCommunicateMix)) { long num = LocalAgent.GetSpiritCurHp(caster, isCommunicateMix) + damageResult.Lifesteal; if (num > caster.RealHpLmt) { num = caster.RealHpLmt; } Pos pos = null; if (caster.Actor) { pos = new Pos(); pos.x = caster.Actor.FixTransform.get_position().x * 100f; pos.y = caster.Actor.FixTransform.get_position().z * 100f; } LocalAgent.SetSpiritCurHp(caster, num, isCommunicateMix); LocalBattleProtocolSimulator.SendTreat(caster.ID, (GameObjectType.ENUM)caster.WrapType, caster.ID, (GameObjectType.ENUM)caster.WrapType, BattleAction_Treat.TreatSrcType.SuckBlood, damageResult.Lifesteal, num, pos); } long num2 = LocalAgent.GetSpiritCurHp(target, isCommunicateMix) - damageResult.Damage; if (damageResult.IsMiss) { CauseMissAnnouncer.Announce(caster, target); UnderMissAnnouncer.Announce(target, caster); } else if (num2 <= 0L) { num2 = 0L; LocalBattleHitHandler.AppDead(target.ID); GlobalBattleNetwork.Instance.SendClientDrvBattleDeathNty(target.ID); } else { if (damageResult.IsCrit) { CauseCritAnnouncer.Announce(caster, target); UnderCritAnnouncer.Announce(target, caster); } if (damageResult.IsParry) { CauseParryAnnouncer.Announce(caster, target); UnderParryAnnouncer.Announce(target, caster); } LocalBattleHitHandler.AppWeakCalculate(caster, target, buffCasterTempAttr); } LocalAgent.SetSpiritCurHp(target, num2, isCommunicateMix); List <long> list = new List <long>(); if (isCommunicateMix && !damageResult.IsMiss) { list.Add((long)damageResult.parryRandomIndex); list.Add((long)damageResult.critRandomIndex); list.Add((long)damageResult.damageRandomIndex); GlobalBattleNetwork.Instance.SendClientDriveBattleBuffDamage(caster.ID, target.ID, caster.Hp, num2, damageResult.Damage, buffData.id, true, casterBuffInfo, targetBuffInfo, list, string.Concat(new object[] { caster.TryAddValue(GameData.AttrType.SkillNmlDmgScale, buffCasterTempAttr), "_", caster.TryAddValue(GameData.AttrType.SkillNmlDmgAddAmend, buffCasterTempAttr), "_", target.DefMulAmend, "_", caster.TryAddValue(GameData.AttrType.SkillIgnoreDefenceHurt, buffCasterTempAttr) })); } if (list.get_Count() == 3) { } LocalBattleProtocolSimulator.SendBleed(target.ID, (GameObjectType.ENUM)target.WrapType, caster.ID, (GameObjectType.ENUM)caster.WrapType, BattleAction_Bleed.DmgSrcType.Attack, ElemType.ENUM.Normal, damageResult.Damage, num2, damageResult.IsCrit, damageResult.IsParry, damageResult.IsMiss); }