public static int CalculateEnemyDifficulty(enemy_character_type_info enemy, Dictionary <string, game_config_info> game_config) { float[] eea = BreakStringArray(game_config["enemy_effect_attack"].parameter_value, s => float.Parse(s)); float[] eed = BreakStringArray(game_config["enemy_effect_defence"].parameter_value, s => float.Parse(s)); if (eea.Length < 5 || eed.Length < 5) { return(-1); } // effect_attack = 22 * 当前人数 * ((伤害 + 破防 * 0.85)* 射速 / 50 * 命中 / (命中 + 35) + 2) // effect_attack = 22 * 人数 * ((伤害 + 破防 * 0.85)* 射速 / 50 * 命中 / (命中 + 35) + 2) int effect_attack = UECeiling(eea[0] * enemy.number * ((enemy.pow + eea[4] * enemy.def_break) * enemy.rate / eea[1] * enemy.hit / (enemy.hit + eea[2]) + eea[3])); // effect_defence = 0.25 * (当前总生命 * (35 + 回避) / 35 * 200 / (200 - 护甲) + 100) * (防护 * 2 - 当前防护 + 150 * 2) / (防护 - 当前防护 + 150) / 2 // effect_defence = 0.25 * (总生命 * (35 + 回避) / 35 * 200 / (200 - 护甲) + 100) * (防护 + 300) / 300 int effect_defence = UECeiling(eed[0] * (enemy.maxlife * (eed[1] + enemy.dodge) / eed[1] * eed[2] / (eed[2] - enemy.armor) + eed[3]) * (enemy.def + eed[4] * 2) / eed[4] / 2); int effect = UECeiling(enemy.effect_ratio * (effect_attack + effect_defence)); return(effect); }
public enemy_character_type_info get_info_at_level(int level, int number, Dictionary <int, enemy_standard_attribute_info> lv_info) { enemy_character_type_info result = new enemy_character_type_info(); enemy_standard_attribute_info lv_from = lv_info[this.level]; enemy_standard_attribute_info lv_to = lv_info[level]; result.id = this.id; result.type = this.type; result.name = this.name; result.code = this.code; result.maxlife = GFDecoder.UERound(this.maxlife * lv_to.maxlife / lv_from.maxlife * number); result.pow = GFDecoder.UERound(this.pow * lv_to.pow / lv_from.pow); result.hit = GFDecoder.UERound(this.hit * lv_to.hit / lv_from.hit); result.dodge = GFDecoder.UERound(this.dodge * lv_to.dodge / lv_from.dodge); result.range = this.range; result.speed = this.speed; result.number = number; result.angle = this.angle; result.armor_piercing = GFDecoder.UERound(this.armor_piercing * lv_to.armor_piercing / lv_from.armor_piercing); result.armor = GFDecoder.UERound(this.armor * lv_to.armor / lv_from.armor); result.shield = GFDecoder.UERound(this.shield * lv_to.shield / lv_from.shield); result.rate = this.rate; result.boss_hp = this.boss_hp; result.def = GFDecoder.UERound(this.def * lv_to.def / lv_from.def); result.def_break = GFDecoder.UERound(this.def_break * lv_to.def_break / lv_from.def_break); result.debuff_resistance = this.debuff_resistance; result.level = level; result.character = this.character; result.special_attack = this.special_attack; result.normal_attack = this.normal_attack; result.passive_skill = this.passive_skill; result.effect_ratio = this.effect_ratio; result.unable_buff_type = this.unable_buff_type; result.voice = this.voice; return(result); }