示例#1
0
        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);
        }
示例#2
0
        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);
        }