| 
 
| 赞 | 0 |  
| VIP | 0 |  
| 好人卡 | 0 |  
| 积分 | 4 |  
| 经验 | 0 |  
| 最后登录 | 2025-5-23 |  
| 在线时间 | 27 小时 |  
 Lv2.观梦者 
	梦石0 星屑389 在线时间27 小时注册时间2019-6-8帖子5 | 
| 本帖最后由 23n1nbb 于 2021-1-29 09:54 编辑 
 我这里有一个方案。
 
 复制代码#获取“敌人等级”的正则,格式为[ELV lv],写在敌人备注里
class Game_Enemy
  def enemy_level(id)
      $data_enemies[id].note.split(/[\r\n]+/).each { |line|
      if line =~ /\[ELV (\w+)\]/
        return ($1.nil?) ? nil : $1.to_i
      end}
  end
  
end
class Game_Actor
  LEVEL_DIF_NO_EXP_GAIN = 10 #与敌人的等级差大于这个数字时不能获得经验
  def gain_exp(exp)
    exptot = 0
    if exp
      if exp[1]
        exp.each {|exps| (@level >= exps[1] + LEVEL_DIF_NO_EXP_GAIN)? nil : exptot += exps[0]}
      else
        exptot = exp
      end
    end
    change_exp(self.exp + (exptot * final_exp_rate).to_i, true)
  end
end
class Game_Troop
  
  def exp_total
    r = []
    dead_members.each {|enemy|
    r.push([enemy.exp, enemy.enemy_level(enemy.enemy_id)])}
  end
end
module BattleManager
  
  def self.gain_exp
    $game_party.all_members.each do |actor|
      actor.gain_exp($game_troop.exp_total)
    end
    wait_for_message
  end
  def self.display_exp
    sum = 0
    $game_troop.exp_total.each {|obd| sum += obd[0]}
    if sum > 0
      text = sprintf(Vocab::ObtainExp, sum)
      $game_message.add('\.' + text)
    end
  end
end
学艺不精,写的代码兼容性较差。
 格式是在敌人的备注栏里写[ELV xxx]。xxx就是你的“敌人等级”。
 中间你要的等级差可以自己改。前面的正则如果你懂也可以改。
 如果代码你也懂——
 | 
 |