设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3616|回复: 11
打印 上一主题 下一主题

[已经过期] 求怪物自动设定等级属性的脚本

[复制链接]

Lv1.梦旅人

梦石
0
星屑
62
在线时间
57 小时
注册时间
2010-7-27
帖子
57
跳转到指定楼层
1
发表于 2010-8-24 17:34:56 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
如题,要VX能用的,:loveliness:

点评

搜索 自动设定  发表于 2010-8-24 18:06

Lv1.梦旅人

梦石
0
星屑
50
在线时间
336 小时
注册时间
2010-8-26
帖子
428
12
发表于 2010-8-26 00:22:27 | 只看该作者

作者的话:3/26 V 2.05
与小幽的战斗AI整合,完全可以与其配合使用
参考了该脚本内敌人种类设定,增加了种类标签
设定种类後会变更各项能力值
=begin
================================================================================
使用方法:
    1. 敌人等级直接设定
   
    在敌人的备注栏里打上
   
    [等级 n]
   
    例如:[等级 25]
    n 为该敌人等级。(「等级」二字简繁体皆可,也可以打成英文的 level)
   
    2. 敌人等级与角色队伍平均等级相同
   
    在敌人的备注栏里打上

    [主角等级]
   
    则自动依队伍平均等级计算该敌人等级
    (「主角等级」四字可以为简繁体,或是英文的 player_level)

    3. 敌人等级为角色队伍平均等级的差距
   
    在敌人的备注栏里打上

    [强度 X]
   
    例如:[强度 很弱]
    X 为下面的哈希表所设置的强度,可以自己修改,
    (「强度」二字可以为简繁体,或是英文的 strength)
   
    强度标签单独使用时,是使用主角队伍平均等级计算
    若是与等级标签同用,则是以该等级计算
    详细看下面的范例设定。
   
    4. 敌人类型
      (其实是参考了小幽的战斗AI脚本,可以配合该脚本使用
        在战斗AI里设定好的类型,这里就不用再设定一次了
        如果读取到了战斗AI脚本的敌人类型,就会忽略数据库里的设定。)
      
    在敌人的备注栏里打上

    [类型 X]
   
    例如:[类型 巫师]
    X 为下面的哈希表所设置的强度,可以自己修改,
    (「类型」二字可以为简繁体,或是英文的 type)
   
    5. 经验值系数设定
      EXPERIENCE 是设定一般敌人经验值
        0.1 表示所得经验值为角色队伍在该等级所需升级的经验值数的十分之一
      BOSS_EXP   是设定BOSS敌人经验值
        3 表示计算经验值後再加值计算的经验值
   
    6. 哈希表设置部分说明
      ENEMY_TYPE 哈希表
        字符部分为类型,可以修改,数字部分为类型代号,不要修改
  
      STRENGTH 哈希表
        字符部分为强度,数字部分为与主角平均等级差
        
      例如:"很弱" =>  -3
   
      表示当敌人强度设为「很弱」时,该敌人等级为队伍等级-3
   
      例如:
        1 角色  等级:3
        2 角色  等级:4
        3 角色  等级:8
        4 角色  等级:6
         怪物1设为 [强度 弱]
         怪物2设为 [很强 很强] [等级 1]
   
        那麽怪物1等级就是:
          (3+4+8+6)/4 = 5.25 <= 取整为5
          5 - 2 = 3          <= 怪物等级为3
         
        那麽怪物2等级就是:
          1 + 3 = 4          <= 怪物等级为4
        
      要注意的是,当等级为0或以下时则自动修正为1
      若无法在哈希表中找到相对应的key,就会将该敌人设置为与主角队伍平均等级相同
   
    7. 掉落物品
      除了在备注中设置了 [不掉落物品] 的敌人, 其他敌人会根据其等级自动计算
      
      不会掉落的物品:
        1. 在脚本中设置为不掉落物品的物品(参看「物品自动计算设置」脚本)
        2. 价格为0的物品
        3. 非消耗品不会掉落
        三者只要满足一项就不会掉落
      
      敌人会掉落的物品为:敌人等级与物品等级差在2以下
      物品设置请看「物品自动计算设置」脚本内容
   
    配合使用方法:
   
    一般敌人建议用第一种方法,设立(伪)绝对等级,主角成长後依然为弱怪的敌人。
    头目敌人可以直接指定其类型为 BOSS,但是其能力值增值方面就比较死板,
      若是想做成巫师型的血低魔高的BOSS,可以用下面的方法
      
      用第二、三种方法,设立相对等级,主角成长也会跟着成长的敌人。
          设立为「弱」时,虽然对主角来说依然是弱怪,
          但是会随着主角成长,HP、MP、经验值会随着增加,
          可以用来做练级用的怪。
        
        
    调用敌人图鉴方式:
    在调用前先执行脚本 make_enemy_database
    只要 WRITE_2_DATABASE 设为 false
    就不会覆写数据库的资料,而是在游戏中调用而已。
    不过说明方面就会有点问题了
   
    覆写数据库方法:
    将WRITE_2_DATABASE 设为 true
    随意在地图上用一个事件执行 make_enemy_database
    再回到脚本将WRITE_2_DATABASE 设为 false(以免在运行中误操作)
   
=end

# 设置部分:
module Auto_Enemy
  
  # 是否写入数据库
  WRITE_2_DATABASE = false
  
  # 是否自動設置屬性有效度
  AUTO_SET_ELEMENT = true
  
  # 是否自動設定狀態抵禦度
  AUTO_SET_STATES  = true
  
  # 经验值计算系数
  EXPERIENCE = 0.1
  BOSS_EXP   = 3
  
  STRENGTH = {
      "很弱" =>  -3,
      "弱"   =>  -2,
      "同"   =>   1,
      "强"   =>   2,
      "很强" =>   3,
      "default" => 0  # 这行不要修改,除错用的
  }
  
  # 敌人类型设定
  ENEMY_TYPE = {
  
      "普通"   => 0,  # 普通敌人,能力值依队伍平均计算
      "武士"   => 1,  # 武士型敌人,物理攻击等偏高
      "法师"   => 2,  # 法师型敌人,魔法攻击偏高
      "牧师"   => 3,  # 牧师型敌人,魔力值偏高
      "巫师"   => 4,  # 巫师型敌人,命中率偏高
      "挡箭牌" => 5,  # 挡箭牌型敌人,血高肉厚
      "BOSS"   => 6,  # BOSS型敌人,各项能力值都增强
      # 以上的数值可以在下面的数组变更
      
      "随机"   => -1, # 随机,看看它的运气,加值在 1~1.99
      "default"=> 0   # 这行不要修改,除错用,默认为普通
  }
  
  # 敌人能力值加值参数,对应上放哈希表的敌人类型。不会改的话就别改了。
  #                 普通 武士  法师  牧师  巫师  档箭  BOSS
  ENEMY_TYPE_HP  = [1,   1.5,  0.75, 0.6,  0.8,  2,    4]  # 体力最大值
  ENEMY_TYPE_MP  = [1,   0.75, 1.5,  3,    1.4,  1.1,  4]  # 魔力最大值
  ENEMY_TYPE_ATK = [1,   2,    0.75, 0.5,  0.6,  1.1,  4]  # 攻击力
  ENEMY_TYPE_DEF = [1,   1.25, 0.5,  0.75, 0.7,  3,    4]  # 防御力
  ENEMY_TYPE_SPI = [1,   0.1,  2,    1.75, 1.5,  0,    2]  # 精神力
  ENEMY_TYPE_AGI = [1,   1.2,  2,    0.8,  1.1,  0.2,  2]  # 敏捷
  ENEMY_TYPE_HIT = [1,   1.3,  1.1,  1.5,  1.8,  1 ]       # 命中率
  ENEMY_TYPE_EVA = [1,   1,    1,    0.9,  1.1,  0 ]       # 闪躲率
                               # BOSS的命中率和闪躲率为默认最高的95%

end

class Game_Party
  def avg_number(number, level=nil)
    average = 0
    for i in @actors
      actor = level ? $data_actors[i] : $game_actors[i]
      case number
      when "level"
        average += $game_actors[i].level
      when "exp"
        average += $game_actors[i].next_exp_s
      when "hp"
        if level
          average += actor.parameters[0, level]
        else
          average += actor.maxhp
        end
      when "mp"
        if level
          average += actor.parameters[1, level]
        else
          average += actor.maxmp
        end
      when "atk"
        if level
          average += actor.parameters[2, level]
        else
          average += actor.atk
        end
      when "def"
        if level
          average += actor.parameters[3, level]
        else
          average += actor.def
        end
      when "spi"
        if level
          average += actor.parameters[4, level]
        else
          average += actor.spi
        end
      when "agi"
        if level
          average += actor.parameters[5, level]
        else
          average += actor.agi
        end
      when "hit"
        average += $game_actors[i].hit
      when "eva"
        average += $game_actors[i].eva
      end
    end
    average /= members.size
    return average
  end
  
  # 獲取平均等級
  def avg_level
    return avg_number("level")
  end
  
  # 獲取平均升級經驗
  def avg_exp_needed
    return avg_number("exp")
  end
  
  def avg_hp_max(level=nil)
    return avg_number("hp", level)
  end

  def avg_mp_max(level=nil)
    return avg_number("mp", level)
  end

  def avg_atk(level=nil)
    return avg_number("atk", level)
  end

  def avg_def(level=nil)
    return avg_number("def", level)
  end
  
  def avg_spi(level=nil)
    return avg_number("spi", level)
  end
  
  def avg_agi(level=nil)
    return avg_number("agi", level)
  end
  
  def avg_hit
    return avg_number("hit")
  end
  
  def avg_eva
    return avg_number("eva")
  end
end

class RPG::Enemy
  # 获取等级
  def get_level
    elevel = 0
    self.note.split(/[ ]+/).each { |line|
      if line =~ /[(level|等級|等级) {1,2}]/
        a = line.split(/ /)[1]
        elevel += a.to_i
      elsif line =~ /[player_level|主角等級|主角等级]/
        elevel += $game_party.avg_level
      end
    }
    return elevel==0 ? nil : elevel
  end
  
  # 获取强度
  def get_str
    self.note.split(/[ ]+/).each { |line|
      if line =~ /[(strength|強度|强度) w+]/
        a = line.split(/ /)[1]
        d = ""
        while ((c = a.slice!(/./m)) != nil)
          d += c if c != "]"
        end
        return d
      end
    }
    return "default"
  end
  
  def get_enemy_type
    self.note.split(/[ ]+/).each { |line|
      if line =~ /[(type|類型|类型) w+]/
        a = line.split(/ /)[1]
        d = ""
        while ((c = a.slice!(/./m)) != nil)
          d += c if c != "]"
        end
        return d
      end
    }
    return "default"
  end
  
  def drop_item?
    self.note.split(/[ ]+/).each { |line|
      return if !(line =~ /[(no_drop|不掉落物品|不掉落物品)]/)
    }
  end
  
  # 计算等级
  def level
    if auto_level?
      if auto_str?
        return [get_level + str, 1].max
      else
        return get_level
      end
    elsif auto_str?
      elevel = $game_party.avg_level + str
      return [elevel, 1].max
    end
  end
  
  def str
    estr = Auto_Enemy::STRENGTH[get_str]
    if estr != nil
      return estr
    else
      return Auto_Enemy::STRENGTH["default"]
    end
  end
  
  def type
    if $enemies_class != nil
      return $enemies_class[@enemy_id] if $enemies_class[@enemy_id]!=nil
    end
    return Auto_Enemy::ENEMY_TYPE[get_enemy_type]
  end
  
  def auto_level?
    return get_level
  end
  def auto_str?
    return get_str
  end
  def auto_setup?
    return (auto_level? or auto_str?)
  end
end

#==============================================================================
# ■ Game_Enemy
#------------------------------------------------------------------------------
#  处理敌人的类。本类在 Game_Troop 类 ($game_troop) 的 内部使用。
#==============================================================================

class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # ● 获取基本体力最大值
  #--------------------------------------------------------------------------
  def base_maxhp
    if enemy.auto_setup?
      enemy_maxhp = $game_party.avg_hp_max(enemy.level)
      if enemy.type == -1
        enemy_maxhp *= (1 + rand(0))
      else
        enemy_maxhp *= Auto_Enemy::ENEMY_TYPE_HP[enemy.type]
      end
      enemy_maxhp = enemy_maxhp.to_i
      enemy_maxhp += rand(10)
      return enemy_maxhp
    else
      return enemy.maxhp
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取基本魔力最大值
  #--------------------------------------------------------------------------
  def base_maxmp
    if enemy.auto_setup?
      enemy_maxmp = $game_party.avg_mp_max(enemy.level)
      if enemy.type == -1
        enemy_maxmp *= (1 + rand(0))
      else
        enemy_maxmp *= Auto_Enemy::ENEMY_TYPE_MP[enemy.type]
      end
      enemy_maxmp = enemy_maxmp.to_i
      enemy_maxmp += rand(5)
      return enemy_maxmp
    else
      return enemy.maxmp
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取基本攻击力
  #--------------------------------------------------------------------------
  def base_atk
    if enemy.auto_setup?
      enemy_atk = $game_party.avg_atk(enemy.level)
      if enemy.type == -1
        enemy_atk *= (1 + rand(0))
      else
        enemy_atk *= Auto_Enemy::ENEMY_TYPE_ATK[enemy.type]
      end
      enemy_atk = enemy_atk.to_i
      enemy_atk += rand(5)
      return enemy_atk
    else
      return enemy.atk
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取基本防御力
  #--------------------------------------------------------------------------
  def base_def
    if enemy.auto_setup?
      enemy_def = $game_party.avg_def(enemy.level)
      if enemy.type == -1
        enemy_def *= (1 + rand(0))
      else
        enemy_def *= Auto_Enemy::ENEMY_TYPE_DEF[enemy.type]
      end
      enemy_def = enemy_def.to_i
      enemy_def += rand(5)
      return enemy_def
    else
      return enemy.def
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取基本精神力
  #--------------------------------------------------------------------------
  def base_spi
    if enemy.auto_setup?
      enemy_spi = $game_party.avg_spi(enemy.level)
      if enemy.type == -1
        enemy_spi *= (1 + rand(0))
      else
        enemy_spi *= Auto_Enemy::ENEMY_TYPE_SPI[enemy.type]
      end
      enemy_spi = enemy_spi.to_i
      enemy_spi += rand(5)
      return enemy_spi
    else
      return enemy.spi
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取基本敏捷
  #--------------------------------------------------------------------------
  def base_agi
    if enemy.auto_setup?
      enemy_agi = $game_party.avg_agi(enemy.level)
      if enemy.type == -1
        enemy_agi *= (1 + rand(0))
      else
        enemy_agi *= Auto_Enemy::ENEMY_TYPE_AGI[enemy.type]
      end
      enemy_agi = enemy_agi.to_i
      enemy_agi += rand(5)
      return enemy_agi
    else
      return enemy.agi
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取命中率
  #--------------------------------------------------------------------------
  def hit
    if enemy.auto_setup?
      enemy_hit = $game_party.avg_hit
      if enemy.type == -1
        enemy_hit *= (1 + rand(0))
      elsif enemy.type == 6
        enemy_hit = 95
      else
        enemy_hit *= Auto_Enemy::ENEMY_TYPE_HIT[enemy.type]
      end
      return [[enemy_hit.to_i, 95].min, 50].max
    else
      return enemy.hit
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取闪躲率
  #--------------------------------------------------------------------------
  def eva
    if enemy.auto_setup?
      enemy_eva = $game_party.avg_eva
      if enemy.type == -1
        enemy_eva *= (1 + rand(0))
      elsif enemy.type == 6
        enemy_eva = 95
      else
        enemy_eva *= Auto_Enemy::ENEMY_TYPE_EVA[enemy.type]
      end
      return [[enemy_eva.to_i, 95].min, 0].max
    else
      return enemy.eva
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取经验值
  #--------------------------------------------------------------------------
  def exp
    if enemy.auto_setup?
      exp = ($game_party.avg_exp_needed * Auto_Enemy::EXPERIENCE).to_i
      exp =* enemy.type == 6 ? Auto_Enemy::BOSS_EXP : 1
      exp += rand(10)
      return exp
    else
      return enemy.exp
    end
  end
  
  def drop_item1
    if enemy.auto_setup? or drop_item?
      get_drop_item
    else
      return @drop_item1
    end
  end
  
  def drop_item2
    if (enemy.auto_setup? or drop_item?) and drop_item1.kind != 0
      get_drop_item
    else
      return RPG::Enemy::DropItem.new
    end
  end
  
  def get_drop_item
    possible_drop_item = []
    drop = RPG::Enemy::DropItem.new
    drop.kind = rand(4)
    case drop.kind
    when 1
      for i in 1...$data_items.size
        item = $data_items[i]
        if (item.level - enemy.level).abs <= 2 and item.level == 0
          possible_drop_item.push(item.id) unless item.cannot_drop
        end
      end
      drop.item_id = possible_drop_item[rand(possible_drop_item.size)]
    when 2
      for i in 1...$data_weapons.size
        weapon  = $data_weapons[i]
        if (weapon.level - enemy.level).abs <= 2 and weapon.level == 0
          possible_drop_item.push(weapon.id) unless weapon.cannot_drop
        end
      end
      drop.weapon_id = possible_drop_item[rand(possible_drop_item.size)]
    when 3
      for i in 1...$data_armors.size
        armor  = $data_armors[i]
        if (armor.level - enemy.level).abs <= 2 and armor.level == 0
          possible_drop_item.push(armor.id) unless armor.cannot_drop
        end
      end
      drop.armor_id = possible_drop_item[rand(possible_drop_item.size)]
    end
   
    drop.kind = 0 if possible_drop_item == []
   
    ratio = enemy.level * rand(5) / Item_Setup::DROP_COEF
    drop.denominator = [ratio, 1].max
    return drop
  end
  
end

class Game_Interpreter
  def make_enemy_database
    for i in 1...$data_enemies.size
      game_enemy = Game_Enemy.new(1, i)
      if $data_enemies[i].auto_setup?
        $data_enemies[i].maxhp      = game_enemy.base_maxhp
        $data_enemies[i].maxmp      = game_enemy.base_maxmp
        $data_enemies[i].atk        = game_enemy.base_atk
        $data_enemies[i].def        = game_enemy.base_def
        $data_enemies[i].spi        = game_enemy.base_spi
        $data_enemies[i].agi        = game_enemy.base_agi
        $data_enemies[i].hit        = game_enemy.hit
        $data_enemies[i].eva        = game_enemy.eva
        $data_enemies[i].exp        = game_enemy.exp
        if $lazy_item_setup
          $data_enemies[i].drop_item1 = game_enemy.drop_item1
          $data_enemies[i].drop_item2 = game_enemy.drop_item2
        end
      end
    end
    save_data($data_enemies,"Data/Enemies.rvdata") if Auto_Enemy::WRITE_2_DATABASE
  end
end





* 教学正文:


=begin
================================================================================
使用方法:
    1. 敌人等级直接设定
   
    在敌人的备注栏里打上
   
    [等级 n]
   
    例如:[等级 25]
    n 为该敌人等级。(「等级」二字简繁体皆可,也可以打成英文的 level)
   
    2. 敌人等级与角色队伍平均等级相同
   
    在敌人的备注栏里打上

    [主角等级]
   
    则自动依队伍平均等级计算该敌人等级
    (「主角等级」四字可以为简繁体,或是英文的 player_level)

    3. 敌人等级为角色队伍平均等级的差距
   
    在敌人的备注栏里打上

    [强度 X]
   
    例如:[强度 很弱]
    X 为下面的哈希表所设置的强度,可以自己修改,
    (「强度」二字可以为简繁体,或是英文的 strength)
   
    强度标签单独使用时,是使用主角队伍平均等级计算
    若是与等级标签同用,则是以该等级计算
    详细看下面的范例设定。
   
    4. 敌人类型
      (其实是参考了小幽的战斗AI脚本,可以配合该脚本使用
        在战斗AI里设定好的类型,这里就不用再设定一次了
        如果读取到了战斗AI脚本的敌人类型,就会忽略数据库里的设定。)
      
    在敌人的备注栏里打上

    [类型 X]
   
    例如:[类型 巫师]
    X 为下面的哈希表所设置的强度,可以自己修改,
    (「类型」二字可以为简繁体,或是英文的 type)
   
    5. 经验值系数设定
      EXPERIENCE 是设定一般敌人经验值
        0.1 表示所得经验值为角色队伍在该等级所需升级的经验值数的十分之一
      BOSS_EXP   是设定BOSS敌人经验值
        3 表示计算经验值後再加值计算的经验值
   
    6. 哈希表设置部分说明
      ENEMY_TYPE 哈希表
        字符部分为类型,可以修改,数字部分为类型代号,不要修改
  
      STRENGTH 哈希表
        字符部分为强度,数字部分为与主角平均等级差
        
      例如:"很弱" =>  -3
   
      表示当敌人强度设为「很弱」时,该敌人等级为队伍等级-3
   
      例如:
        1 角色  等级:3
        2 角色  等级:4
        3 角色  等级:8
        4 角色  等级:6
         怪物1设为 [强度 弱]
         怪物2设为 [很强 很强] [等级 1]
   
        那麽怪物1等级就是:
          (3+4+8+6)/4 = 5.25 <= 取整为5
          5 - 2 = 3          <= 怪物等级为3
         
        那麽怪物2等级就是:
          1 + 3 = 4          <= 怪物等级为4
        
      要注意的是,当等级为0或以下时则自动修正为1
      若无法在哈希表中找到相对应的key,就会将该敌人设置为与主角队伍平均等级相同
   
    7. 掉落物品
      除了在备注中设置了 [不掉落物品] 的敌人, 其他敌人会根据其等级自动计算
      
      不会掉落的物品:
        1. 在脚本中设置为不掉落物品的物品(参看「物品自动计算设置」脚本)
        2. 价格为0的物品
        3. 非消耗品不会掉落
        三者只要满足一项就不会掉落
      
      敌人会掉落的物品为:敌人等级与物品等级差在2以下
      物品设置请看「物品自动计算设置」脚本内容
   
    配合使用方法:
   
    一般敌人建议用第一种方法,设立(伪)绝对等级,主角成长後依然为弱怪的敌人。
    头目敌人可以直接指定其类型为 BOSS,但是其能力值增值方面就比较死板,
      若是想做成巫师型的血低魔高的BOSS,可以用下面的方法
      
      用第二、三种方法,设立相对等级,主角成长也会跟着成长的敌人。
          设立为「弱」时,虽然对主角来说依然是弱怪,
          但是会随着主角成长,HP、MP、经验值会随着增加,
          可以用来做练级用的怪。
        
        
    调用敌人图鉴方式:
    在调用前先执行脚本 make_enemy_database
    只要 WRITE_2_DATABASE 设为 false
    就不会覆写数据库的资料,而是在游戏中调用而已。
    不过说明方面就会有点问题了
   
    覆写数据库方法:
    将WRITE_2_DATABASE 设为 true
    随意在地图上用一个事件执行 make_enemy_database
    再回到脚本将WRITE_2_DATABASE 设为 false(以免在运行中误操作)
   
=end

# 设置部分:
module Auto_Enemy
  
  # 是否写入数据库
  WRITE_2_DATABASE = false
  
  # 是否自動設置屬性有效度
  AUTO_SET_ELEMENT = true
  
  # 是否自動設定狀態抵禦度
  AUTO_SET_STATES  = true
  
  # 经验值计算系数
  EXPERIENCE = 0.1
  BOSS_EXP   = 3
  
  STRENGTH = {
      "很弱" =>  -3,
      "弱"   =>  -2,
      "同"   =>   1,
      "强"   =>   2,
      "很强" =>   3,
      "default" => 0  # 这行不要修改,除错用的
  }
  
  # 敌人类型设定
  ENEMY_TYPE = {
  
      "普通"   => 0,  # 普通敌人,能力值依队伍平均计算
      "武士"   => 1,  # 武士型敌人,物理攻击等偏高
      "法师"   => 2,  # 法师型敌人,魔法攻击偏高
      "牧师"   => 3,  # 牧师型敌人,魔力值偏高
      "巫师"   => 4,  # 巫师型敌人,命中率偏高
      "挡箭牌" => 5,  # 挡箭牌型敌人,血高肉厚
      "BOSS"   => 6,  # BOSS型敌人,各项能力值都增强
      # 以上的数值可以在下面的数组变更
      
      "随机"   => -1, # 随机,看看它的运气,加值在 1~1.99
      "default"=> 0   # 这行不要修改,除错用,默认为普通
  }
  
  # 敌人能力值加值参数,对应上放哈希表的敌人类型。不会改的话就别改了。
  #                 普通 武士  法师  牧师  巫师  档箭  BOSS
  ENEMY_TYPE_HP  = [1,   1.5,  0.75, 0.6,  0.8,  2,    4]  # 体力最大值
  ENEMY_TYPE_MP  = [1,   0.75, 1.5,  3,    1.4,  1.1,  4]  # 魔力最大值
  ENEMY_TYPE_ATK = [1,   2,    0.75, 0.5,  0.6,  1.1,  4]  # 攻击力
  ENEMY_TYPE_DEF = [1,   1.25, 0.5,  0.75, 0.7,  3,    4]  # 防御力
  ENEMY_TYPE_SPI = [1,   0.1,  2,    1.75, 1.5,  0,    2]  # 精神力
  ENEMY_TYPE_AGI = [1,   1.2,  2,    0.8,  1.1,  0.2,  2]  # 敏捷
  ENEMY_TYPE_HIT = [1,   1.3,  1.1,  1.5,  1.8,  1 ]       # 命中率
  ENEMY_TYPE_EVA = [1,   1,    1,    0.9,  1.1,  0 ]       # 闪躲率
                               # BOSS的命中率和闪躲率为默认最高的95%

end

class Game_Party
  def avg_number(number, level=nil)
    average = 0
    for i in @actors
      actor = level ? $data_actors[i] : $game_actors[i]
      case number
      when "level"
        average += $game_actors[i].level
      when "exp"
        average += $game_actors[i].next_exp_s
      when "hp"
        if level
          average += actor.parameters[0, level]
        else
          average += actor.maxhp
        end
      when "mp"
        if level
          average += actor.parameters[1, level]
        else
          average += actor.maxmp
        end
      when "atk"
        if level
          average += actor.parameters[2, level]
        else
          average += actor.atk
        end
      when "def"
        if level
          average += actor.parameters[3, level]
        else
          average += actor.def
        end
      when "spi"
        if level
          average += actor.parameters[4, level]
        else
          average += actor.spi
        end
      when "agi"
        if level
          average += actor.parameters[5, level]
        else
          average += actor.agi
        end
      when "hit"
        average += $game_actors[i].hit
      when "eva"
        average += $game_actors[i].eva
      end
    end
    average /= members.size
    return average
  end
  
  # 獲取平均等級
  def avg_level
    return avg_number("level")
  end
  
  # 獲取平均升級經驗
  def avg_exp_needed
    return avg_number("exp")
  end
  
  def avg_hp_max(level=nil)
    return avg_number("hp", level)
  end

  def avg_mp_max(level=nil)
    return avg_number("mp", level)
  end

  def avg_atk(level=nil)
    return avg_number("atk", level)
  end

  def avg_def(level=nil)
    return avg_number("def", level)
  end
  
  def avg_spi(level=nil)
    return avg_number("spi", level)
  end
  
  def avg_agi(level=nil)
    return avg_number("agi", level)
  end
  
  def avg_hit
    return avg_number("hit")
  end
  
  def avg_eva
    return avg_number("eva")
  end
end

class RPG::Enemy
  # 获取等级
  def get_level
    elevel = 0
    self.note.split(/[ ]+/).each { |line|
      if line =~ /[(level|等級|等级) {1,2}]/
        a = line.split(/ /)[1]
        elevel += a.to_i
      elsif line =~ /[player_level|主角等級|主角等级]/
        elevel += $game_party.avg_level
      end
    }
    return elevel==0 ? nil : elevel
  end
  
  # 获取强度
  def get_str
    self.note.split(/[ ]+/).each { |line|
      if line =~ /[(strength|強度|强度) w+]/
        a = line.split(/ /)[1]
        d = ""
        while ((c = a.slice!(/./m)) != nil)
          d += c if c != "]"
        end
        return d
      end
    }
    return "default"
  end
  
  def get_enemy_type
    self.note.split(/[ ]+/).each { |line|
      if line =~ /[(type|類型|类型) w+]/
        a = line.split(/ /)[1]
        d = ""
        while ((c = a.slice!(/./m)) != nil)
          d += c if c != "]"
        end
        return d
      end
    }
    return "default"
  end
  
  def drop_item?
    self.note.split(/[ ]+/).each { |line|
      return if !(line =~ /[(no_drop|不掉落物品|不掉落物品)]/)
    }
  end
  
  # 计算等级
  def level
    if auto_level?
      if auto_str?
        return [get_level + str, 1].max
      else
        return get_level
      end
    elsif auto_str?
      elevel = $game_party.avg_level + str
      return [elevel, 1].max
    end
  end
  
  def str
    estr = Auto_Enemy::STRENGTH[get_str]
    if estr != nil
      return estr
    else
      return Auto_Enemy::STRENGTH["default"]
    end
  end
  
  def type
    if $enemies_class != nil
      return $enemies_class[@enemy_id] if $enemies_class[@enemy_id]!=nil
    end
    return Auto_Enemy::ENEMY_TYPE[get_enemy_type]
  end
  
  def auto_level?
    return get_level
  end
  def auto_str?
    return get_str
  end
  def auto_setup?
    return (auto_level? or auto_str?)
  end
end

#==============================================================================
# ■ Game_Enemy
#------------------------------------------------------------------------------
#  处理敌人的类。本类在 Game_Troop 类 ($game_troop) 的 内部使用。
#==============================================================================

class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # ● 获取基本体力最大值
  #--------------------------------------------------------------------------
  def base_maxhp
    if enemy.auto_setup?
      enemy_maxhp = $game_party.avg_hp_max(enemy.level)
      if enemy.type == -1
        enemy_maxhp *= (1 + rand(0))
      else
        enemy_maxhp *= Auto_Enemy::ENEMY_TYPE_HP[enemy.type]
      end
      enemy_maxhp = enemy_maxhp.to_i
      enemy_maxhp += rand(10)
      return enemy_maxhp
    else
      return enemy.maxhp
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取基本魔力最大值
  #--------------------------------------------------------------------------
  def base_maxmp
    if enemy.auto_setup?
      enemy_maxmp = $game_party.avg_mp_max(enemy.level)
      if enemy.type == -1
        enemy_maxmp *= (1 + rand(0))
      else
        enemy_maxmp *= Auto_Enemy::ENEMY_TYPE_MP[enemy.type]
      end
      enemy_maxmp = enemy_maxmp.to_i
      enemy_maxmp += rand(5)
      return enemy_maxmp
    else
      return enemy.maxmp
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取基本攻击力
  #--------------------------------------------------------------------------
  def base_atk
    if enemy.auto_setup?
      enemy_atk = $game_party.avg_atk(enemy.level)
      if enemy.type == -1
        enemy_atk *= (1 + rand(0))
      else
        enemy_atk *= Auto_Enemy::ENEMY_TYPE_ATK[enemy.type]
      end
      enemy_atk = enemy_atk.to_i
      enemy_atk += rand(5)
      return enemy_atk
    else
      return enemy.atk
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取基本防御力
  #--------------------------------------------------------------------------
  def base_def
    if enemy.auto_setup?
      enemy_def = $game_party.avg_def(enemy.level)
      if enemy.type == -1
        enemy_def *= (1 + rand(0))
      else
        enemy_def *= Auto_Enemy::ENEMY_TYPE_DEF[enemy.type]
      end
      enemy_def = enemy_def.to_i
      enemy_def += rand(5)
      return enemy_def
    else
      return enemy.def
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取基本精神力
  #--------------------------------------------------------------------------
  def base_spi
    if enemy.auto_setup?
      enemy_spi = $game_party.avg_spi(enemy.level)
      if enemy.type == -1
        enemy_spi *= (1 + rand(0))
      else
        enemy_spi *= Auto_Enemy::ENEMY_TYPE_SPI[enemy.type]
      end
      enemy_spi = enemy_spi.to_i
      enemy_spi += rand(5)
      return enemy_spi
    else
      return enemy.spi
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取基本敏捷
  #--------------------------------------------------------------------------
  def base_agi
    if enemy.auto_setup?
      enemy_agi = $game_party.avg_agi(enemy.level)
      if enemy.type == -1
        enemy_agi *= (1 + rand(0))
      else
        enemy_agi *= Auto_Enemy::ENEMY_TYPE_AGI[enemy.type]
      end
      enemy_agi = enemy_agi.to_i
      enemy_agi += rand(5)
      return enemy_agi
    else
      return enemy.agi
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取命中率
  #--------------------------------------------------------------------------
  def hit
    if enemy.auto_setup?
      enemy_hit = $game_party.avg_hit
      if enemy.type == -1
        enemy_hit *= (1 + rand(0))
      elsif enemy.type == 6
        enemy_hit = 95
      else
        enemy_hit *= Auto_Enemy::ENEMY_TYPE_HIT[enemy.type]
      end
      return [[enemy_hit.to_i, 95].min, 50].max
    else
      return enemy.hit
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取闪躲率
  #--------------------------------------------------------------------------
  def eva
    if enemy.auto_setup?
      enemy_eva = $game_party.avg_eva
      if enemy.type == -1
        enemy_eva *= (1 + rand(0))
      elsif enemy.type == 6
        enemy_eva = 95
      else
        enemy_eva *= Auto_Enemy::ENEMY_TYPE_EVA[enemy.type]
      end
      return [[enemy_eva.to_i, 95].min, 0].max
    else
      return enemy.eva
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取经验值
  #--------------------------------------------------------------------------
  def exp
    if enemy.auto_setup?
      exp = ($game_party.avg_exp_needed * Auto_Enemy::EXPERIENCE).to_i
      exp =* enemy.type == 6 ? Auto_Enemy::BOSS_EXP : 1
      exp += rand(10)
      return exp
    else
      return enemy.exp
    end
  end
  
  def drop_item1
    if enemy.auto_setup? or drop_item?
      get_drop_item
    else
      return @drop_item1
    end
  end
  
  def drop_item2
    if (enemy.auto_setup? or drop_item?) and drop_item1.kind != 0
      get_drop_item
    else
      return RPG::Enemy::DropItem.new
    end
  end
  
  def get_drop_item
    possible_drop_item = []
    drop = RPG::Enemy::DropItem.new
    drop.kind = rand(4)
    case drop.kind
    when 1
      for i in 1...$data_items.size
        item = $data_items[i]
        if (item.level - enemy.level).abs <= 2 and item.level == 0
          possible_drop_item.push(item.id) unless item.cannot_drop
        end
      end
      drop.item_id = possible_drop_item[rand(possible_drop_item.size)]
    when 2
      for i in 1...$data_weapons.size
        weapon  = $data_weapons[i]
        if (weapon.level - enemy.level).abs <= 2 and weapon.level == 0
          possible_drop_item.push(weapon.id) unless weapon.cannot_drop
        end
      end
      drop.weapon_id = possible_drop_item[rand(possible_drop_item.size)]
    when 3
      for i in 1...$data_armors.size
        armor  = $data_armors[i]
        if (armor.level - enemy.level).abs <= 2 and armor.level == 0
          possible_drop_item.push(armor.id) unless armor.cannot_drop
        end
      end
      drop.armor_id = possible_drop_item[rand(possible_drop_item.size)]
    end
   
    drop.kind = 0 if possible_drop_item == []
   
    ratio = enemy.level * rand(5) / Item_Setup::DROP_COEF
    drop.denominator = [ratio, 1].max
    return drop
  end
  
end

class Game_Interpreter
  def make_enemy_database
    for i in 1...$data_enemies.size
      game_enemy = Game_Enemy.new(1, i)
      if $data_enemies[i].auto_setup?
        $data_enemies[i].maxhp      = game_enemy.base_maxhp
        $data_enemies[i].maxmp      = game_enemy.base_maxmp
        $data_enemies[i].atk        = game_enemy.base_atk
        $data_enemies[i].def        = game_enemy.base_def
        $data_enemies[i].spi        = game_enemy.base_spi
        $data_enemies[i].agi        = game_enemy.base_agi
        $data_enemies[i].hit        = game_enemy.hit
        $data_enemies[i].eva        = game_enemy.eva
        $data_enemies[i].exp        = game_enemy.exp
        if $lazy_item_setup
          $data_enemies[i].drop_item1 = game_enemy.drop_item1
          $data_enemies[i].drop_item2 = game_enemy.drop_item2
        end
      end
    end
    save_data($data_enemies,"Data/Enemies.rvdata") if Auto_Enemy::WRITE_2_DATABASE
  end
end





* 教学正文:


=begin
================================================================================
使用方法:
    1. 敌人等级直接设定
   
    在敌人的备注栏里打上
   
    [等级 n]
   
    例如:[等级 25]
    n 为该敌人等级。(「等级」二字简繁体皆可,也可以打成英文的 level)
   
    2. 敌人等级与角色队伍平均等级相同
   
    在敌人的备注栏里打上

    [主角等级]
   
    则自动依队伍平均等级计算该敌人等级
    (「主角等级」四字可以为简繁体,或是英文的 player_level)

    3. 敌人等级为角色队伍平均等级的差距
   
    在敌人的备注栏里打上

    [强度 X]
   
    例如:[强度 很弱]
    X 为下面的哈希表所设置的强度,可以自己修改,
    (「强度」二字可以为简繁体,或是英文的 strength)
   
    强度标签单独使用时,是使用主角队伍平均等级计算
    若是与等级标签同用,则是以该等级计算
    详细看下面的范例设定。
   
    4. 敌人类型
      (其实是参考了小幽的战斗AI脚本,可以配合该脚本使用
        在战斗AI里设定好的类型,这里就不用再设定一次了
        如果读取到了战斗AI脚本的敌人类型,就会忽略数据库里的设定。)
      
    在敌人的备注栏里打上

    [类型 X]
   
    例如:[类型 巫师]
    X 为下面的哈希表所设置的强度,可以自己修改,
    (「类型」二字可以为简繁体,或是英文的 type)
   
    5. 经验值系数设定
      EXPERIENCE 是设定一般敌人经验值
        0.1 表示所得经验值为角色队伍在该等级所需升级的经验值数的十分之一
      BOSS_EXP   是设定BOSS敌人经验值
        3 表示计算经验值後再加值计算的经验值
   
    6. 哈希表设置部分说明
      ENEMY_TYPE 哈希表
        字符部分为类型,可以修改,数字部分为类型代号,不要修改
  
      STRENGTH 哈希表
        字符部分为强度,数字部分为与主角平均等级差
        
      例如:"很弱" =>  -3
   
      表示当敌人强度设为「很弱」时,该敌人等级为队伍等级-3
   
      例如:
        1 角色  等级:3
        2 角色  等级:4
        3 角色  等级:8
        4 角色  等级:6
         怪物1设为 [强度 弱]
         怪物2设为 [很强 很强] [等级 1]
   
        那麽怪物1等级就是:
          (3+4+8+6)/4 = 5.25 <= 取整为5
          5 - 2 = 3          <= 怪物等级为3
         
        那麽怪物2等级就是:
          1 + 3 = 4          <= 怪物等级为4
        
      要注意的是,当等级为0或以下时则自动修正为1
      若无法在哈希表中找到相对应的key,就会将该敌人设置为与主角队伍平均等级相同
   
    7. 掉落物品
      除了在备注中设置了 [不掉落物品] 的敌人, 其他敌人会根据其等级自动计算
      
      不会掉落的物品:
        1. 在脚本中设置为不掉落物品的物品(参看「物品自动计算设置」脚本)
        2. 价格为0的物品
        3. 非消耗品不会掉落
        三者只要满足一项就不会掉落
      
      敌人会掉落的物品为:敌人等级与物品等级差在2以下
      物品设置请看「物品自动计算设置」脚本内容
   
    配合使用方法:
   
    一般敌人建议用第一种方法,设立(伪)绝对等级,主角成长後依然为弱怪的敌人。
    头目敌人可以直接指定其类型为 BOSS,但是其能力值增值方面就比较死板,
      若是想做成巫师型的血低魔高的BOSS,可以用下面的方法
      
      用第二、三种方法,设立相对等级,主角成长也会跟着成长的敌人。
          设立为「弱」时,虽然对主角来说依然是弱怪,
          但是会随着主角成长,HP、MP、经验值会随着增加,
          可以用来做练级用的怪。
        
        
    调用敌人图鉴方式:
    在调用前先执行脚本 make_enemy_database
    只要 WRITE_2_DATABASE 设为 false
    就不会覆写数据库的资料,而是在游戏中调用而已。
    不过说明方面就会有点问题了
   
    覆写数据库方法:
    将WRITE_2_DATABASE 设为 true
    随意在地图上用一个事件执行 make_enemy_database
    再回到脚本将WRITE_2_DATABASE 设为 false(以免在运行中误操作)
   
=end

# 设置部分:
module Auto_Enemy
  
  # 是否写入数据库
  WRITE_2_DATABASE = false
  
  # 是否自動設置屬性有效度
  AUTO_SET_ELEMENT = true
  
  # 是否自動設定狀態抵禦度
  AUTO_SET_STATES  = true
  
  # 经验值计算系数
  EXPERIENCE = 0.1
  BOSS_EXP   = 3
  
  STRENGTH = {
      "很弱" =>  -3,
      "弱"   =>  -2,
      "同"   =>   1,
      "强"   =>   2,
      "很强" =>   3,
      "default" => 0  # 这行不要修改,除错用的
  }
  
  # 敌人类型设定
  ENEMY_TYPE = {
  
      "普通"   => 0,  # 普通敌人,能力值依队伍平均计算
      "武士"   => 1,  # 武士型敌人,物理攻击等偏高
      "法师"   => 2,  # 法师型敌人,魔法攻击偏高
      "牧师"   => 3,  # 牧师型敌人,魔力值偏高
      "巫师"   => 4,  # 巫师型敌人,命中率偏高
      "挡箭牌" => 5,  # 挡箭牌型敌人,血高肉厚
      "BOSS"   => 6,  # BOSS型敌人,各项能力值都增强
      # 以上的数值可以在下面的数组变更
      
      "随机"   => -1, # 随机,看看它的运气,加值在 1~1.99
      "default"=> 0   # 这行不要修改,除错用,默认为普通
  }
  
  # 敌人能力值加值参数,对应上放哈希表的敌人类型。不会改的话就别改了。
  #                 普通 武士  法师  牧师  巫师  档箭  BOSS
  ENEMY_TYPE_HP  = [1,   1.5,  0.75, 0.6,  0.8,  2,    4]  # 体力最大值
  ENEMY_TYPE_MP  = [1,   0.75, 1.5,  3,    1.4,  1.1,  4]  # 魔力最大值
  ENEMY_TYPE_ATK = [1,   2,    0.75, 0.5,  0.6,  1.1,  4]  # 攻击力
  ENEMY_TYPE_DEF = [1,   1.25, 0.5,  0.75, 0.7,  3,    4]  # 防御力
  ENEMY_TYPE_SPI = [1,   0.1,  2,    1.75, 1.5,  0,    2]  # 精神力
  ENEMY_TYPE_AGI = [1,   1.2,  2,    0.8,  1.1,  0.2,  2]  # 敏捷
  ENEMY_TYPE_HIT = [1,   1.3,  1.1,  1.5,  1.8,  1 ]       # 命中率
  ENEMY_TYPE_EVA = [1,   1,    1,    0.9,  1.1,  0 ]       # 闪躲率
                               # BOSS的命中率和闪躲率为默认最高的95%

end

class Game_Party
  def avg_number(number, level=nil)
    average = 0
    for i in @actors
      actor = level ? $data_actors[i] : $game_actors[i]
      case number
      when "level"
        average += $game_actors[i].level
      when "exp"
        average += $game_actors[i].next_exp_s
      when "hp"
        if level
          average += actor.parameters[0, level]
        else
          average += actor.maxhp
        end
      when "mp"
        if level
          average += actor.parameters[1, level]
        else
          average += actor.maxmp
        end
      when "atk"
        if level
          average += actor.parameters[2, level]
        else
          average += actor.atk
        end
      when "def"
        if level
          average += actor.parameters[3, level]
        else
          average += actor.def
        end
      when "spi"
        if level
          average += actor.parameters[4, level]
        else
          average += actor.spi
        end
      when "agi"
        if level
          average += actor.parameters[5, level]
        else
          average += actor.agi
        end
      when "hit"
        average += $game_actors[i].hit
      when "eva"
        average += $game_actors[i].eva
      end
    end
    average /= members.size
    return average
  end
  
  # 獲取平均等級
  def avg_level
    return avg_number("level")
  end
  
  # 獲取平均升級經驗
  def avg_exp_needed
    return avg_number("exp")
  end
  
  def avg_hp_max(level=nil)
    return avg_number("hp", level)
  end

  def avg_mp_max(level=nil)
    return avg_number("mp", level)
  end

  def avg_atk(level=nil)
    return avg_number("atk", level)
  end

  def avg_def(level=nil)
    return avg_number("def", level)
  end
  
  def avg_spi(level=nil)
    return avg_number("spi", level)
  end
  
  def avg_agi(level=nil)
    return avg_number("agi", level)
  end
  
  def avg_hit
    return avg_number("hit")
  end
  
  def avg_eva
    return avg_number("eva")
  end
end

class RPG::Enemy
  # 获取等级
  def get_level
    elevel = 0
    self.note.split(/[ ]+/).each { |line|
      if line =~ /[(level|等級|等级) {1,2}]/
        a = line.split(/ /)[1]
        elevel += a.to_i
      elsif line =~ /[player_level|主角等級|主角等级]/
        elevel += $game_party.avg_level
      end
    }
    return elevel==0 ? nil : elevel
  end
  
  # 获取强度
  def get_str
    self.note.split(/[ ]+/).each { |line|
      if line =~ /[(strength|強度|强度) w+]/
        a = line.split(/ /)[1]
        d = ""
        while ((c = a.slice!(/./m)) != nil)
          d += c if c != "]"
        end
        return d
      end
    }
    return "default"
  end
  
  def get_enemy_type
    self.note.split(/[ ]+/).each { |line|
      if line =~ /[(type|類型|类型) w+]/
        a = line.split(/ /)[1]
        d = ""
        while ((c = a.slice!(/./m)) != nil)
          d += c if c != "]"
        end
        return d
      end
    }
    return "default"
  end
  
  def drop_item?
    self.note.split(/[ ]+/).each { |line|
      return if !(line =~ /[(no_drop|不掉落物品|不掉落物品)]/)
    }
  end
  
  # 计算等级
  def level
    if auto_level?
      if auto_str?
        return [get_level + str, 1].max
      else
        return get_level
      end
    elsif auto_str?
      elevel = $game_party.avg_level + str
      return [elevel, 1].max
    end
  end
  
  def str
    estr = Auto_Enemy::STRENGTH[get_str]
    if estr != nil
      return estr
    else
      return Auto_Enemy::STRENGTH["default"]
    end
  end
  
  def type
    if $enemies_class != nil
      return $enemies_class[@enemy_id] if $enemies_class[@enemy_id]!=nil
    end
    return Auto_Enemy::ENEMY_TYPE[get_enemy_type]
  end
  
  def auto_level?
    return get_level
  end
  def auto_str?
    return get_str
  end
  def auto_setup?
    return (auto_level? or auto_str?)
  end
end

#==============================================================================
# ■ Game_Enemy
#------------------------------------------------------------------------------
#  处理敌人的类。本类在 Game_Troop 类 ($game_troop) 的 内部使用。
#==============================================================================

class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # ● 获取基本体力最大值
  #--------------------------------------------------------------------------
  def base_maxhp
    if enemy.auto_setup?
      enemy_maxhp = $game_party.avg_hp_max(enemy.level)
      if enemy.type == -1
        enemy_maxhp *= (1 + rand(0))
      else
        enemy_maxhp *= Auto_Enemy::ENEMY_TYPE_HP[enemy.type]
      end
      enemy_maxhp = enemy_maxhp.to_i
      enemy_maxhp += rand(10)
      return enemy_maxhp
    else
      return enemy.maxhp
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取基本魔力最大值
  #--------------------------------------------------------------------------
  def base_maxmp
    if enemy.auto_setup?
      enemy_maxmp = $game_party.avg_mp_max(enemy.level)
      if enemy.type == -1
        enemy_maxmp *= (1 + rand(0))
      else
        enemy_maxmp *= Auto_Enemy::ENEMY_TYPE_MP[enemy.type]
      end
      enemy_maxmp = enemy_maxmp.to_i
      enemy_maxmp += rand(5)
      return enemy_maxmp
    else
      return enemy.maxmp
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取基本攻击力
  #--------------------------------------------------------------------------
  def base_atk
    if enemy.auto_setup?
      enemy_atk = $game_party.avg_atk(enemy.level)
      if enemy.type == -1
        enemy_atk *= (1 + rand(0))
      else
        enemy_atk *= Auto_Enemy::ENEMY_TYPE_ATK[enemy.type]
      end
      enemy_atk = enemy_atk.to_i
      enemy_atk += rand(5)
      return enemy_atk
    else
      return enemy.atk
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取基本防御力
  #--------------------------------------------------------------------------
  def base_def
    if enemy.auto_setup?
      enemy_def = $game_party.avg_def(enemy.level)
      if enemy.type == -1
        enemy_def *= (1 + rand(0))
      else
        enemy_def *= Auto_Enemy::ENEMY_TYPE_DEF[enemy.type]
      end
      enemy_def = enemy_def.to_i
      enemy_def += rand(5)
      return enemy_def
    else
      return enemy.def
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取基本精神力
  #--------------------------------------------------------------------------
  def base_spi
    if enemy.auto_setup?
      enemy_spi = $game_party.avg_spi(enemy.level)
      if enemy.type == -1
        enemy_spi *= (1 + rand(0))
      else
        enemy_spi *= Auto_Enemy::ENEMY_TYPE_SPI[enemy.type]
      end
      enemy_spi = enemy_spi.to_i
      enemy_spi += rand(5)
      return enemy_spi
    else
      return enemy.spi
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取基本敏捷
  #--------------------------------------------------------------------------
  def base_agi
    if enemy.auto_setup?
      enemy_agi = $game_party.avg_agi(enemy.level)
      if enemy.type == -1
        enemy_agi *= (1 + rand(0))
      else
        enemy_agi *= Auto_Enemy::ENEMY_TYPE_AGI[enemy.type]
      end
      enemy_agi = enemy_agi.to_i
      enemy_agi += rand(5)
      return enemy_agi
    else
      return enemy.agi
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取命中率
  #--------------------------------------------------------------------------
  def hit
    if enemy.auto_setup?
      enemy_hit = $game_party.avg_hit
      if enemy.type == -1
        enemy_hit *= (1 + rand(0))
      elsif enemy.type == 6
        enemy_hit = 95
      else
        enemy_hit *= Auto_Enemy::ENEMY_TYPE_HIT[enemy.type]
      end
      return [[enemy_hit.to_i, 95].min, 50].max
    else
      return enemy.hit
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取闪躲率
  #--------------------------------------------------------------------------
  def eva
    if enemy.auto_setup?
      enemy_eva = $game_party.avg_eva
      if enemy.type == -1
        enemy_eva *= (1 + rand(0))
      elsif enemy.type == 6
        enemy_eva = 95
      else
        enemy_eva *= Auto_Enemy::ENEMY_TYPE_EVA[enemy.type]
      end
      return [[enemy_eva.to_i, 95].min, 0].max
    else
      return enemy.eva
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取经验值
  #--------------------------------------------------------------------------
  def exp
    if enemy.auto_setup?
      exp = ($game_party.avg_exp_needed * Auto_Enemy::EXPERIENCE).to_i
      exp =* enemy.type == 6 ? Auto_Enemy::BOSS_EXP : 1
      exp += rand(10)
      return exp
    else
      return enemy.exp
    end
  end
  
  def drop_item1
    if enemy.auto_setup? or drop_item?
      get_drop_item
    else
      return @drop_item1
    end
  end
  
  def drop_item2
    if (enemy.auto_setup? or drop_item?) and drop_item1.kind != 0
      get_drop_item
    else
      return RPG::Enemy::DropItem.new
    end
  end
  
  def get_drop_item
    possible_drop_item = []
    drop = RPG::Enemy::DropItem.new
    drop.kind = rand(4)
    case drop.kind
    when 1
      for i in 1...$data_items.size
        item = $data_items[i]
        if (item.level - enemy.level).abs <= 2 and item.level == 0
          possible_drop_item.push(item.id) unless item.cannot_drop
        end
      end
      drop.item_id = possible_drop_item[rand(possible_drop_item.size)]
    when 2
      for i in 1...$data_weapons.size
        weapon  = $data_weapons[i]
        if (weapon.level - enemy.level).abs <= 2 and weapon.level == 0
          possible_drop_item.push(weapon.id) unless weapon.cannot_drop
        end
      end
      drop.weapon_id = possible_drop_item[rand(possible_drop_item.size)]
    when 3
      for i in 1...$data_armors.size
        armor  = $data_armors[i]
        if (armor.level - enemy.level).abs <= 2 and armor.level == 0
          possible_drop_item.push(armor.id) unless armor.cannot_drop
        end
      end
      drop.armor_id = possible_drop_item[rand(possible_drop_item.size)]
    end
   
    drop.kind = 0 if possible_drop_item == []
   
    ratio = enemy.level * rand(5) / Item_Setup::DROP_COEF
    drop.denominator = [ratio, 1].max
    return drop
  end
  
end

class Game_Interpreter
  def make_enemy_database
    for i in 1...$data_enemies.size
      game_enemy = Game_Enemy.new(1, i)
      if $data_enemies[i].auto_setup?
        $data_enemies[i].maxhp      = game_enemy.base_maxhp
        $data_enemies[i].maxmp      = game_enemy.base_maxmp
        $data_enemies[i].atk        = game_enemy.base_atk
        $data_enemies[i].def        = game_enemy.base_def
        $data_enemies[i].spi        = game_enemy.base_spi
        $data_enemies[i].agi        = game_enemy.base_agi
        $data_enemies[i].hit        = game_enemy.hit
        $data_enemies[i].eva        = game_enemy.eva
        $data_enemies[i].exp        = game_enemy.exp
        if $lazy_item_setup
          $data_enemies[i].drop_item1 = game_enemy.drop_item1
          $data_enemies[i].drop_item2 = game_enemy.drop_item2
        end
      end
    end
    save_data($data_enemies,"Data/Enemies.rvdata") if Auto_Enemy::WRITE_2_DATABASE
  end
end


   
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
62
在线时间
57 小时
注册时间
2010-7-27
帖子
57
11
 楼主| 发表于 2010-8-25 14:54:25 | 只看该作者
怎么设定怪物初始值攻防血等在加上等级乘以X,
比如攻20 ,5级怪,X=2    攻=20+5X2=30
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
62
在线时间
57 小时
注册时间
2010-7-27
帖子
57
10
 楼主| 发表于 2010-8-25 14:50:55 | 只看该作者
回复 429259591 的帖子
脚本看不懂啊,做出来的怎么都是肉盾型啊,555555555

   
回复 支持 反对

使用道具 举报

Lv1.梦旅人

水土火风重逢处

梦石
0
星屑
239
在线时间
691 小时
注册时间
2010-7-17
帖子
3042
9
发表于 2010-8-25 12:34:17 | 只看该作者
奇怪啊,我怎么搜得到?http://rpg.blue/thread-81930-1-3.html
独坐望城,望断天涯
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
62
在线时间
57 小时
注册时间
2010-7-27
帖子
57
8
 楼主| 发表于 2010-8-25 11:43:03 | 只看该作者
回复 429259591 的帖子

搜索了不能用,谁能给个范例呀
   
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
62
在线时间
57 小时
注册时间
2010-7-27
帖子
57
7
 楼主| 发表于 2010-8-25 11:42:42 | 只看该作者
回复 冰舞蝶恋 的帖子

额.我不知道回复不能回评论
   
回复 支持 反对

使用道具 举报

Lv1.梦旅人

水土火风重逢处

梦石
0
星屑
239
在线时间
691 小时
注册时间
2010-7-17
帖子
3042
6
发表于 2010-8-24 21:30:43 | 只看该作者
LZ以后要多去发布区逛逛和多搜索
独坐望城,望断天涯
回复 支持 反对

使用道具 举报

Lv2.观梦者

花开堪折直须折

梦石
0
星屑
686
在线时间
943 小时
注册时间
2010-7-17
帖子
4963

贵宾

5
发表于 2010-8-24 18:55:08 | 只看该作者
wangswz不厚道!只发评论不发帖,让楼主4连帖啊~~

点评

。。有一帖是空的。。 不关我事。。。 这种类似的搜索贴 回贴顶上去。。没啥意思。。。  发表于 2010-8-24 19:01
大家好,我叫节操,有一天,我被吃了。
http://forever-dream.5d6d.com
永恒の梦制作组论坛

129993099
永恒の梦制作组QQ群
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
62
在线时间
57 小时
注册时间
2010-7-27
帖子
57
4
 楼主| 发表于 2010-8-24 18:25:31 | 只看该作者
回复 a123669520 的帖子

这个我用过了始终是一个类型的啊,能弄个范例给我吗?QQ123669520
   
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-10 20:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表