public static void AppTheat(Effect effectData, EntityParent caster, List <long> effectTargetIDs, XPoint basePoint, int skillID, bool isAddEffect, bool isCommunicateMix)
    {
        if (!LocalAgent.GetEntityCalculatable(caster, isCommunicateMix))
        {
            return;
        }
        XDict <GameData.AttrType, long> effectCasterTempAttr = LocalBattleEffectCalculatorHandler.GetEffectCasterTempAttr(effectData, caster, skillID);
        bool flag = isAddEffect && isCommunicateMix;

        for (int i = 0; i < effectTargetIDs.get_Count(); i++)
        {
            EntityParent entityByID = LocalAgent.GetEntityByID(effectTargetIDs.get_Item(i));
            if (LocalAgent.GetEntityIsCurable(entityByID, isCommunicateMix))
            {
                if (!entityByID.IsUnconspicuous || effectData.forcePickup != 0)
                {
                    long num = BattleCalculator.CalculateTreatment(caster.BattleBaseAttrs, entityByID.BattleBaseAttrs, entityByID.IsEntitySelfType || entityByID.IsEntityPlayerType, effectCasterTempAttr, null);
                    if (num != 0L)
                    {
                        List <ClientDrvBuffInfo> casterBuffInfo = null;
                        List <ClientDrvBuffInfo> targetBuffInfo = null;
                        if (isCommunicateMix)
                        {
                            casterBuffInfo = LocalAgent.MakeClientDrvBuffInfo(caster.ID);
                            targetBuffInfo = LocalAgent.MakeClientDrvBuffInfo(effectTargetIDs.get_Item(i));
                        }
                        long num2 = LocalAgent.GetSpiritCurHp(entityByID, isCommunicateMix) + num;
                        if (num2 > entityByID.RealHpLmt)
                        {
                            num2 = entityByID.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(entityByID, num2, isCommunicateMix);
                        if (isCommunicateMix)
                        {
                            GlobalBattleNetwork.Instance.SendClientDriveBattleEffectDamage(caster.ID, effectTargetIDs.get_Item(i), caster.Hp, num2, num, skillID, effectData.id, flag, true, casterBuffInfo, targetBuffInfo, basePoint, new List <long>(), string.Concat(new object[]
                            {
                                caster.TryAddValue(GameData.AttrType.SkillTreatScaleBOAtk, effectCasterTempAttr),
                                "_",
                                caster.TryAddValue(GameData.AttrType.SkillTreatScaleBOHpLmt, effectCasterTempAttr),
                                "_",
                                caster.TryAddValue(GameData.AttrType.SkillIgnoreDefenceHurt, effectCasterTempAttr)
                            }), false);
                        }
                        LocalBattleProtocolSimulator.SendTreat(effectTargetIDs.get_Item(i), (GameObjectType.ENUM)entityByID.WrapType, caster.ID, (GameObjectType.ENUM)caster.WrapType, BattleAction_Treat.TreatSrcType.Treat, num, num2, pos);
                        if (flag)
                        {
                            flag = false;
                        }
                    }
                }
            }
        }
    }
Beispiel #2
0
    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);
        }
    }