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); }