Example #1
0
 public D2Action_Damage(AbilityDamageType damageType, AbilityDamageFlag damageFlag,
                        AbilityValueSource damageValueSource, List <D2Action> successActions, ActionTarget actionTarget) : base(actionTarget)
 {
     this.damageType      = damageType;
     this.damageFlag      = damageFlag;
     m_SuccessActions     = successActions;
     m_AbilityValueSource = damageValueSource;
 }
    // 造成伤害
    public static void ApplyDamage(BattleUnit caster, BattleUnit victim, AbilityDamageType damageType,
                                   AbilityDamageFlag damageFlag, AbilityValueSource damageValueSource, string configName)
    {
        int            casterLevel    = caster.GetLevel();
        BattleProperty casterProperty = caster.GetProperty();
        BattleProperty victimProperty = victim.GetProperty();
        float          abilityValue   = damageValueSource.GetAbilityValue(casterLevel, casterProperty, victimProperty);
        float          finalDamage    = CalcDamageByDamageType(abilityValue, damageType, casterProperty, victimProperty);

        // 护盾
        // 吸血

        victim.UpdateHP(-finalDamage);
        BattleLog.LogRpgBattleAttacker(BattleLogic.instance.logicFrame, caster, victim, configName, finalDamage);
    }
    private static AbilityValueSource ParseValueSource(JsonData json, AbilityData abilityData)
    {
        var abilityValueSource  = new AbilityValueSource();
        var valueSourceJsonData = GetJsonValue(json, "ValueSource");

        if (valueSourceJsonData == null)
        {
            return(abilityValueSource);
        }

        var valueBasicParamsConfig = GetJsonValue(valueSourceJsonData, "ValueBasicParams");

        if (valueBasicParamsConfig == null)
        {
            return(abilityValueSource);
        }

        if (!valueBasicParamsConfig.IsArray)
        {
            BattleLog.LogError("技能[%s]中的[ValueSource]的[ValueBasicParams]的配置必须是数组类型", abilityData.configFileName);
        }
        else
        {
            var baseJsonData     = valueBasicParamsConfig[0].ToString();
            var baseGrowJsonData = valueBasicParamsConfig[1].ToString();
            var baseValue        = string.IsNullOrEmpty(baseJsonData) ? 0f : float.Parse(baseJsonData);
            var baseValueGrow    = string.IsNullOrEmpty(baseGrowJsonData) ? 0f : float.Parse(baseGrowJsonData);
            abilityValueSource.baseValue     = baseValue;
            abilityValueSource.baseValueGrow = baseValueGrow;
        }
        //todo 附加值
        var valueAdditionParamsConfig = GetJsonValue(valueSourceJsonData, "ValueAdditionParams");

        if (valueAdditionParamsConfig != null)
        {
            if (valueAdditionParamsConfig.IsArray)
            {
                for (int i = 0; i < valueAdditionParamsConfig.Count; i++)
                {
                    var additionValueConfig     = valueAdditionParamsConfig[i];
                    var valueSourceType         = GetEnumValue <AbilityValueSourceType>(additionValueConfig, "ValueSourceType");
                    var valueSourceParamsConfig = GetJsonValue(additionValueConfig, "ValueSourceParams");
                    if (valueSourceParamsConfig != null)
                    {
                        if (valueSourceParamsConfig.IsArray)
                        {
                            int sourceValueCoefficient     = valueSourceParamsConfig.Count >= 1 ? (int)valueSourceParamsConfig[0] : 0;
                            int sourceValueCoefficientGrow = valueSourceParamsConfig.Count >= 2 ? (int)valueSourceParamsConfig[1] : 0;
                            int limitBasicValue            = valueSourceParamsConfig.Count >= 3 ? (int)valueSourceParamsConfig[2] : 0;
                            int limitBasicValueGrow        = valueSourceParamsConfig.Count >= 4 ? (int)valueSourceParamsConfig[3] : 0;
                            abilityValueSource.AddAdditionValueParams(valueSourceType,
                                                                      sourceValueCoefficient, sourceValueCoefficientGrow, limitBasicValue, limitBasicValueGrow);
                        }
                        else
                        {
                            BattleLog.LogError("技能[%s]中的[ValueSource]的[ValueSourceParams]的配置必须是数组类型", abilityData.configFileName);
                        }
                    }
                }
            }
            else
            {
                BattleLog.LogError("技能[%s]中的[ValueSource]的[ValueAdditionParams]的配置必须是数组类型", abilityData.configFileName);
            }
        }

        return(abilityValueSource);
    }