查看: 6407|回复: 4

[原创发布] [猫儿的RMXP工具箱脚本第八弹]数据库完全重排工具

[复制链接]

遠航の猫咪

梦石
3
星屑
26947
在线时间
2423 小时
注册时间
2005-10-15
回帖
987

开拓者

发表于 2016-1-28 02:06:22 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 SailCat 于 2016-1-28 02:05 编辑

你有过999条数据不够用的时候吗?
你有过给主角设置了15把武器(1-15)结果游戏都快做完了,发现剧情需要再多一把,然而新武器的ID变成了100往后吗?
你有过本来想让200号敌人开始是boss,结果说什么普通敌人都只有195个,导致敌人图鉴什么的脚本完全不能用吗?

不是不能在数据库里做剪切粘贴,实在是因为修改数据库的数据编号,将会导致所有地图的所有事件全部要手工重刷,甚至比这更多……

够了!来尝试这个重排工具,享受四大便利吧!
一:扩展数据库13大类数据的条数上限(我试到9999条仍然有效,再多没试)
二:任意在某个数据库位置前插入N个空白数据
三:交换任意两个数据的编号
四:删除所有空白的无效数据,将所有数据库从1开始进行紧密编号
所有这些操作,将会自动重刷全工程内对于它们的引用,保证你的游戏逻辑不受影响

警告:
1)本脚本发布前已经过详细测试并尽可能的考虑覆盖情况,但不保证100%覆盖到位,强烈建议使用前备份原工程。
2)本脚本支持对于事件脚本的转换,但仅限标准写法(如$data_actors[2].xx这样的写法),不支持变量指针ID引用,也不支持对于RGSS脚本系统本身引用的转换。(原始系统中实际上没有这类引用,但不排除你改过的系统中有)
3)本脚本在转换后,不能追溯修改已有游戏存档中的数据。


用法:
插入本脚本(见下,一共14个分割定义)到Game_Temp(注意不是Main)之前,然后在最后一个分割定义的后面,添加指令:
dr = Data_Reorder.new
dr.insert_enemy(101,100) # 在101号敌人前面插入100个空白的敌人
dr.swap_class(4, 7) # 交换4号职业和7号职业
dr.set_actor_id(5..9, 15) # 把5号到9号角色的位置挪到15号开始
dr.expand_weapon(1500) # 将武器上限扩展至1500个
dr.sort_armor # 将防具中的空白项(包括末尾空白项)删除恢复为1开始的紧密编号
dr.zap # 将数据库中的所有内容恢复为1开始的紧密编号
exit # 退出操作
这里面的enemy, class, actor, weapon, armor等,都可以改换为数据库的13大类数据名称

在执行完本脚本后,请勿做其他操作,立即关闭工程重新打开!如果系统问你要不要保存工程,选择不要!

修改日志会写在DReorder.txt文件中,可以打开查看。

以下为脚本:
[fold=Data_Reorder (分割定义1) 核心引擎][pre lang="ruby"]#==============================================================================
# ■ Data_Reorder (分割定义 1)
#------------------------------------------------------------------------------
#  数据库重排工具 by SailCat
#   该程序能够将数据库内容ID重新排列,包括插入空序列,紧密重排,交换,重设等
#==============================================================================
class Data_Reorder
  #--------------------------------------------------------------------------
  # ● 初期化
  #--------------------------------------------------------------------------
  def initialize
    # 加载数据文件
    $data_actors        = load_data("Data/Actors.rxdata")
    $data_classes       = load_data("Data/Classes.rxdata")
    $data_skills        = load_data("Data/Skills.rxdata")
    $data_items         = load_data("Data/Items.rxdata")
    $data_weapons       = load_data("Data/Weapons.rxdata")
    $data_armors        = load_data("Data/Armors.rxdata")
    $data_enemies       = load_data("Data/Enemies.rxdata")
    $data_troops        = load_data("Data/Troops.rxdata")
    $data_states        = load_data("Data/States.rxdata")
    $data_animations    = load_data("Data/Animations.rxdata")
    $data_tilesets      = load_data("Data/Tilesets.rxdata")
    $data_common_events = load_data("Data/CommonEvents.rxdata")
    $data_system        = load_data("Data/System.rxdata")
    # 初始化被修改的ID表
    @mod_actor_ids = {}
    @mod_class_ids = {}
    @mod_skill_ids = {}
    @mod_item_ids = {}
    @mod_weapon_ids = {}
    @mod_armor_ids = {}
    @mod_enemy_ids = {}
    @mod_troop_ids = {}
    @mod_state_ids = {}
    @mod_anime_ids = {}
    @mod_tileset_ids = {}
    @mod_common_ids = {}
    @mod_element_ids = {}
    # 删除前次导出的文件
    if FileTest.exist?("DReorder.txt")
      File.delete("DReorder.txt")
    end
  end
  #--------------------------------------------------------------------------
  # ● 文本的变换
  #     用于显示文章、脚本变换等
  #     text: 源文本
  #     mod_ids: 变换用ID表
  #     regex: 正则表达式
  #--------------------------------------------------------------------------
  def translate_text(text, mod_ids, regex)
    log = ""
    loop do
      if text[regex] != nil
        id = $2.to_i
        if mod_ids.has_key?(id)
          log += " 引用 #{id} -> #{mod_ids[id]}"
          id = mod_ids[id]
        end
        text.sub!(regex) {$1 + "\001#{id}\001" + $3}
      else
        text.gsub!(/\001/) {""}
        break
      end
    end
    return log
  end
  #--------------------------------------------------------------------------
  # ● 处理战斗事件
  #     f: 输出日志的文件
  #     proc: 变换的内容
  #     check_actor: 检查角色
  #     check_enemy: 检查敌人
  #--------------------------------------------------------------------------
  def translate_troop_events(f, proc, check_actor = false, check_enemy = false)
    s = false
    # 循环队伍中所有事件
    for i in 1...$data_troops.size
      troop = $data_troops
      if troop != nil
        t = false
        log = sprintf(" □ 队伍 %d: %s \n", troop.id, troop.name)
        # 如果要检查敌人情况
        if check_enemy
          for member in troop.members
            if @mod_enemy_ids.has_key?(member.enemy_id)
              t = true
              log += sprintf("    敌人: %d -> %d\n",
                member.enemy_id, @mod_enemy_ids[member.enemy_id])
              member.enemy_id = @mod_enemy_ids[member.enemy_id]
            end
          end
        end
        # 循环事件的每一页
        page_id = 0
        troop.pages.each do |page|
          page_id += 1
          # 如果条件中引用了角色
          if check_actor and page.condition.actor_valid
            if @mod_actor_ids.has_key?(page.condition.actor_id)
              t = true
              log += sprintf("    页 %d: 条件角色 %d -> %d\n", page_id,
                page.condition.actor_id, @mod_actor_ids[page.condition.actor_id])
              page.condition.actor_id = @mod_actor_ids[page.condition.actor_id]
            end
          end
          # 如果指令不为空
          if page.list.length > 0
            # 循环页的所有指令
            page.list.each do |command|
              vlog = proc.call(command)
              if vlog != ""
                t = true
                log += sprintf("    页 %d: 指令 %s", page_id, vlog)
              end
            end
          end
        end
        # 输出事件提示字样
        if t
          unless s
            f.write("-----------------------------------------------------\n")
            f.write(" ■ 战斗事件\n")
            f.write("-----------------------------------------------------\n")
            s = true
          end
          f.write(log)
        end
      end
    end
    save_data($data_troops, "Data/Troops.rxdata") if s
  end
  #--------------------------------------------------------------------------
  # ● 处理公共事件
  #     f: 输出日志的文件
  #     proc: 变换的内容
  #--------------------------------------------------------------------------
  def translate_common_events(f, proc)
    # 处理公共事件
    s = false
    # 循环所有公共事件
    for i in 1...$data_common_events.size
      event = $data_common_events
      if event != nil
        t = false
        log = sprintf(" □ 公共事件 %d: %s \n", event.id, event.name)
        # 如果指令不为空
        if event.list.length > 0
          # 循环事件的所有指令
          event.list.each do |command|
            vlog = proc.call(command)
            if vlog != ""
              t = true
              log += sprintf("    指令 %s", vlog)
            end
          end
        end
        # 输出事件提示字样
        if t
          unless s
            f.write("-----------------------------------------------------\n")
            f.write(" ■ 公共事件\n")
            f.write("-----------------------------------------------------\n")
            s = true
          end
          f.write(log)
        end
      end
    end
    save_data($data_common_events, "Data/CommonEvents.rxdata") if s
  end
  #--------------------------------------------------------------------------
  # ● 处理地图事件
  #     f: 输出日志的文件
  #     proc: 变换的内容
  #     mod_ids: 变换事件脚本用的对照表
  #     regexs: 变换事件脚本用的正则表达式
  #     check_enemy: 检查遇敌列表
  #     check_tileset: 检查图块
  #--------------------------------------------------------------------------
  def translate_map_events(f, proc, mod_ids, regexs, check_troop = false, check_tileset = false)
    # 循环所有地图
    for map_id in 1..999
      map_name = sprintf("Data/Map%03d.rxdata", map_id)
      # 载入当前地图
      if FileTest.exist?(map_name)
        Graphics.update
        map = load_data(map_name)
      else
        next
      end
      s = false
      # 循环地图中所有事件
      for i in 1..999
        event = map.events
        if event != nil
          t = false
          log = sprintf(" □ 事件 %d: %s \n", event.id, event.name)
          # 循环事件的每一页
          page_id = 0
          event.pages.each do |page|
            page_id += 1
            # 如果自定义移动路线
            if page.move_type == 3
              log2 = ""
              # 循环自定义移动指令
              for movecommand in page.move_route.list
                # 脚本
                if movecommand.code == 45
                  regexs.each do |r|
                    log2 += translate_text(movecommand.parameters[0],
                      mod_ids, r)
                  end
                end
              end
              if log2 != ""
                t = true
                log += sprintf("    页 %d: 自定义路线:%s\n", page_id, log2)
              end
            end
            # 如果指令不为空
            if page.list.length > 0
              # 循环页的所有指令
              page.list.each do |command|
                vlog = proc.call(command)
                if vlog != ""
                  t = true
                  log += sprintf("    页 %d: 指令 %s", page_id, vlog)
                end
              end
            end
          end
          # 输出事件提示字样
          if t
            unless s
              f.write("-----------------------------------------------------\n")
              f.write(sprintf(" ■ 地图ID: %d\n", map_id))
              f.write("-----------------------------------------------------\n")
              s = true
            end
            f.write(log)
          end
        end
      end
      # 如果要检查遇敌列表
      log = ""
      if check_troop
        for i in 0...map.encounter_list.size
          if @mod_troop_ids.has_key?(map.encounter_list)
            log += sprintf(" □ 遇敌队伍: %d -> %d\n",
              map.encounter_list, @mod_troop_ids[map.encounter_list])
            map.encounter_list = @mod_troop_ids[map.encounter_list]
          end
        end
      end
      # 如果要检查图块
      if check_tileset
        if @mod_tileset_ids.has_key?(map.tileset_id)
          log += sprintf(" □ 图块 ID: %d -> %d\n",
            map.tileset_id, @mod_tileset_ids[map.tileset_id])
          map.tileset_id = @mod_tileset_ids[map.tileset_id]
        end
      end
      # 输出事件提示字样
      if log != ""
        unless s
          f.write("-----------------------------------------------------\n")
          f.write(sprintf(" ■ 地图ID: %d\n", map_id))
          f.write("-----------------------------------------------------\n")
          s = true
        end
        f.write(log)
      end
      save_data(map, map_name) if s
    end
  end
  #--------------------------------------------------------------------------
  # ● 插入序号
  #     data_source: 数据源
  #     mod_ids: 记录变更的表
  #     new_object: 空白对象
  #     position: 插入位置
  #     count: 插入的数目
  #--------------------------------------------------------------------------
  def insert(data_source, mod_ids, new_object, position, count)
    # 初始化被修改的ID表
    mod_ids.clear
    # 从最后一个开始
    id = position + count - 1
    # 循环每一个大于position的ID
    while id >= position
      object = data_source[id]
      # 如果该对象存在
      if object != nil
        # 对象后移
        object.id = id + count
        data_source[id + count] = object
        # 设置修改标记
        mod_ids[id] = id + count
      end
      # 原位置空
      dummy_object = new_object.clone
      dummy_object.id = id
      data_source[id] = dummy_object
      id -= 1
    end
  end
  #--------------------------------------------------------------------------
  # ● 交换序号
  #     data_source: 数据源
  #     mod_ids: 记录变更的表
  #     id1: 序号1
  #     id2: 序号2
  #--------------------------------------------------------------------------
  def swap(data_source, mod_ids, id1, id2)
    # 初始化被修改的ID表
    mod_ids.clear
    # 取得2个对象
    object1 = data_source[id1]
    object2 = data_source[id2]
    # 两个对象都存在的情况下
    if object1 != nil and object2 != nil
      # 互换ID
      object1.id = id2
      object2.id = id1
      # 互换对象
      data_source[id1] = object2
      data_source[id2] = object1
      # 设置修改标记
      mod_ids[id1] = id2
      mod_ids[id2] = id1
    end
  end
  #--------------------------------------------------------------------------
  # ● 设置新的序号
  #     data_source: 数据源
  #     mod_ids: 记录变更的表
  #     old_ids: 原序号
  #     new_id: 新序号
  #--------------------------------------------------------------------------
  def set_id(data_source, mod_ids, old_ids, new_id)
    # 初始化被修改的ID表
    mod_ids.clear
    # 单个调整的情况下,转换为区段调整
    if old_ids.is_a?(Integer)
      old_ids = old_ids..old_ids
    end
    offset = new_id - old_ids.first
    range = old_ids.last - old_ids.first
    range += 1 unless old_ids.exclude_end?
    return if offset == 0
    # 取得原对象
    objects = data_source[old_ids]
    objects.each do |object|
      # 如果原对象存在
      if object != nil
        # 更改对象ID
        mod_ids[object.id] = object.id + offset
        object.id += offset
      end
    end
    # 移位操作
    if offset > 0
      last_id = old_ids.first + range
      last_id.upto(new_id + range - 1) do |id|
        object = data_source[id]
        object.id -= range
        data_source[id - range] = object
        mod_ids[id] = object.id
      end
    else
      last_id = old_ids.first - 1
      last_id.downto(new_id) do |id|
        object = data_source[id]
        object.id += range
        data_source[id + range] = object
        mod_ids[id] = object.id
      end
    end
    # 设置对象索引
    objects.each do |object|
      if objects != nil
        data_source[object.id] = object
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 重排序号(从1开始连续排)
  #     data_source: 数据源
  #     mod_ids: 记录变更的表
  #--------------------------------------------------------------------------
  def sort(data_source, mod_ids)
    # 初始化被修改的ID表
    mod_ids.clear
    # 从1开始
    new_id = 1
    # 循环每个ID
    for i in 1...data_source.size
      object = data_source
      # 如果该对象存在且不为空
      if object != nil and object.name != ""
        # 如果对象已经移位
        if i != new_id
          # 跟着前移
          object.id = new_id
          data_source[new_id] = object
          # 设置修改标记
          mod_ids = new_id
        end
        new_id += 1
      end
    end
    data_source.delete_at(new_id) until data_source.size == new_id
  end
  #--------------------------------------------------------------------------
  # ● 压缩数据库
  #--------------------------------------------------------------------------
  def zap
    sort_actor
    sort_class
    sort_skill
    sort_item
    sort_weapon
    sort_armor
    sort_enemy
    sort_troop
    sort_state
    sort_anime
    sort_tileset
    sort_common
    sort_element
  end
end
[/pre][/fold]
[fold=Data_Reorder (分割定义2) 角色数据][pre lang="ruby"]#==============================================================================
# ■ Data_Reorder (分割定义 2)
#------------------------------------------------------------------------------
#  数据库重排工具 by SailCat
#   该程序能够将数据库内容ID重新排列,包括插入空序列,紧密重排,交换,重设等
#==============================================================================
class Data_Reorder
  #--------------------------------------------------------------------------
  # ● 插入角色序号
  #     position: 插入位置
  #     count: 插入的数目
  #--------------------------------------------------------------------------
  def insert_actor(position, count)
    insert($data_actors, @mod_actor_ids, RPG::Actor.new, position, count)
    # 刷新角色ID的引用
    reset_actors
  end
  #--------------------------------------------------------------------------
  # ● 交换角色序号
  #     actor_id1: 角色序号1
  #     actor_id2: 角色序号2
  #--------------------------------------------------------------------------
  def swap_actor(actor_id1, actor_id2)
    swap($data_actors, @mod_actor_ids, actor_id1, actor_id2)
    # 刷新角色ID的引用
    reset_actors
  end
  #--------------------------------------------------------------------------
  # ● 设置新的角色序号
  #     old_actor_ids: 原角色序号
  #     new_actor_id: 新角色序号
  #--------------------------------------------------------------------------
  def set_actor_id(old_actor_ids, new_actor_id)
    set_id($data_actors, @mod_actor_ids, old_actor_ids, new_actor_id)
    # 刷新角色ID的引用
    reset_actors
  end
  #--------------------------------------------------------------------------
  # ● 重排角色序号(从1开始连续排)
  #--------------------------------------------------------------------------
  def sort_actor
    sort($data_actors, @mod_actor_ids)
    # 刷新角色ID的引用
    reset_actors
  end
  #--------------------------------------------------------------------------
  # ● 扩展角色序号
  #     num: 新的角色个数
  #--------------------------------------------------------------------------
  def expand_actor(num)
    l = $data_actors.size
    if l <= num
      for i in l..num
        $data_actors = RPG::Actor.new
      end
      save_data($data_actors, "Data/Actors.rxdata")
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新角色ID的引用
  #--------------------------------------------------------------------------
  def reset_actors
    # 刷新数据库引用
    reset_actors_in_database
    # 刷新地图引用
    reset_actors_in_maps
    # 保存修改
    save_data($data_actors, "Data/Actors.rxdata")
  end
  #--------------------------------------------------------------------------
  # ● 刷新事件引用(角色)
  #     command: 指令
  #--------------------------------------------------------------------------
  def reset_actors_in_command(command)
    log = ""
    regex1 = /(\\n\[)([0-9]+)(\])/
    regex2 = /(\$game_actors\[|\$data_actors\[)([0-9]+)(\])/
    case command.code
    when 101, 401 # 显示文章
      log = translate_text(command.parameters[0], @mod_actor_ids, regex1)
      if log != ""
        log = sprintf("显示文章:%s\n", log)
      end
    when 102 # 显示选择项
      for i in 0...command.parameters[0].size
        log += translate_text(command.parameters[0], @mod_actor_ids, regex1)
      end
      if log != ""
        log = sprintf("显示选择项:%s\n", log)
      end
    when 111 # 条件分歧
      if command.parameters[0] == 4 # 角色
        if @mod_actor_ids.has_key?(command.parameters[1])
          log = sprintf(" 角色 %d -> %d", command.parameters[1],
            @mod_actor_ids[command.parameters[1]])
          command.parameters[1] = @mod_actor_ids[command.parameters[1]]
        end
      elsif command.parameters[0] == 12 # 脚本
        log = translate_text(command.parameters[1], @mod_actor_ids, regex2)
      end
      if log != ""
        log = sprintf("条件分歧:%s\n", log)
      end
    when 122 # 变量操作
      if command.parameters[3] == 4 # 角色
        if @mod_actor_ids.has_key?(command.parameters[4])
          log = sprintf("变量操作: 角色 %d -> %d", command.parameters[4],
            @mod_actor_ids[command.parameters[4]])
          command.parameters[4] = @mod_actor_ids[command.parameters[4]]
        end
      end
    when 129 # 替换队员
      if @mod_actor_ids.has_key?(command.parameters[0])
        log = sprintf("替换队员: %d -> %d\n", command.parameters[0],
          @mod_actor_ids[command.parameters[0]])
        command.parameters[0] = @mod_actor_ids[command.parameters[0]]
      end
    when 209 # 设置移动路线
      # 循环强制移动指令
      for movecommand in command.parameters[1].list
        # 脚本
        if movecommand.code == 45
          log = translate_text(movecommand.parameters[0], @mod_actor_ids, regex2)
        end
      end
      if log != ""
        log = sprintf("设置移动路线:%s\n", log)
      end
    when 303 # 输入名称
      if @mod_actor_ids.has_key?(command.parameters[0])
        log = sprintf("输入名称: %d -> %d\n", command.parameters[0],
          @mod_actor_ids[command.parameters[0]])
        command.parameters[0] = @mod_actor_ids[command.parameters[0]]
      end
    when 311..322 # 更改指数
      s = ["增减HP", "增减SP", "更改状态", "完全回复", "增减EXP", "增减等级",
           "增减能力", "增减特技", "变更装备", "变更角色姓名", "变更角色职业",
           "变更角色图形"][command.code - 311]
      if @mod_actor_ids.has_key?(command.parameters[0])
        log = sprintf("%s: %d -> %d\n", s, command.parameters[0],
          @mod_actor_ids[command.parameters[0]])
        command.parameters[0] = @mod_actor_ids[command.parameters[0]]
      end
    when 355, 655 # 脚本
      log = translate_text(command.parameters[0], @mod_actor_ids, regex2)
      if log != ""
        log = sprintf("脚本:%s\n", log)
      end
    end
    return log
  end
  #--------------------------------------------------------------------------
  # ● 刷新数据库引用(角色)
  #--------------------------------------------------------------------------
  def reset_actors_in_database
    proc = Proc.new {|c| reset_actors_in_command(c)}
    File.open("DReorder.txt", "a") do |f|
      # 通用处理
      translate_troop_events(f, proc, true)
      translate_common_events(f, proc)
      # 处理初期同伴
      s = false
      log = ""
      # 循环所有初期同伴
      for i in 0...$data_system.party_members.size
        if @mod_actor_ids.has_key?($data_system.party_members)
          s = true
          log += sprintf(" □ 初期同伴: %d -> %d\n", $data_system.party_members,
            @mod_actor_ids[$data_system.party_members])
          $data_system.party_members = @mod_actor_ids[$data_system.party_members]
        end
      end
      # 循环所有战斗测试员
      for i in 0...$data_system.test_battlers.size
        test_battler = $data_system.test_battlers
        if @mod_actor_ids.has_key?(test_battler.actor_id)
          s = true
          log += sprintf(" □ 战斗测试员: %d -> %d\n", test_battler.actor_id,
            @mod_actor_ids[test_battler.actor_id])
          test_battler.actor_id = @mod_actor_ids[test_battler.actor_id]
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 系统\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_system, "Data/System.rxdata")
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新地图引用(角色)
  #--------------------------------------------------------------------------
  def reset_actors_in_maps
    proc = Proc.new {|c| reset_actors_in_command(c)}
    regexs = [/(\$game_actors\[|\$data_actors\[)([0-9]+)(\])/]
    File.open("DReorder.txt", "a") do |f|
      translate_map_events(f, proc, @mod_actor_ids, regexs)
    end
  end
end
[/pre][/fold]
[fold=Data_Reorder (分割定义3) 职业数据][pre lang="ruby"]#==============================================================================
# ■ Data_Reorder (分割定义 3)
#------------------------------------------------------------------------------
#  数据库重排工具 by SailCat
#   该程序能够将数据库内容ID重新排列,包括插入空序列,紧密重排,交换,重设等
#==============================================================================
class Data_Reorder
  #--------------------------------------------------------------------------
  # ● 插入职业序号
  #     position: 插入位置
  #     count: 插入的数目
  #--------------------------------------------------------------------------
  def insert_class(position, count)
    insert($data_classes, @mod_class_ids, RPG::Class.new, position, count)
    # 刷新职业ID的引用
    reset_classes
  end
  #--------------------------------------------------------------------------
  # ● 交换职业序号
  #     class_id1: 职业序号1
  #     class_id2: 职业序号2
  #--------------------------------------------------------------------------
  def swap_class(class_id1, class_id2)
    swap($data_classes, @mod_class_ids, class_id1, class_id2)
    # 刷新职业ID的引用
    reset_classes
  end
  #--------------------------------------------------------------------------
  # ● 设置新的职业序号
  #     old_class_ids: 原职业序号
  #     new_class_id: 新职业序号
  #--------------------------------------------------------------------------
  def set_class_id(old_class_ids, new_class_id)
    set_id($data_classes, @mod_class_ids, old_class_ids, new_class_id)
    # 刷新职业ID的引用
    reset_classes
  end
  #--------------------------------------------------------------------------
  # ● 重排职业序号(从1开始连续排)
  #--------------------------------------------------------------------------
  def sort_class
    sort($data_classes, @mod_class_ids)
    # 刷新职业ID的引用
    reset_classes
  end
  #--------------------------------------------------------------------------
  # ● 扩展职业序号
  #     num: 新的职业个数
  #--------------------------------------------------------------------------
  def expand_class(num)
    l = $data_classes.size
    if l <= num
      for i in l..num
        $data_classes = RPG::Class.new
      end
      save_data($data_classes, "Data/Classes.rxdata")
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新职业ID的引用
  #--------------------------------------------------------------------------
  def reset_classes
    # 刷新数据库引用
    reset_classes_in_database
    # 刷新地图引用
    reset_classes_in_maps
    # 保存修改
    save_data($data_classes, "Data/Classes.rxdata")
  end
  #--------------------------------------------------------------------------
  # ● 刷新事件引用(职业)
  #     command: 指令
  #--------------------------------------------------------------------------
  def reset_classes_in_command(command)
    log = ""
    regex1 = /(\$data_classes\[)([0-9]+)(\])/
    regex2 = /(\.class_id[ <=>!]+)([0-9]+)()/
    case command.code
    when 111 # 条件分歧
      if command.parameters[0] == 12 # 脚本
        log = translate_text(command.parameters[1], @mod_class_ids, regex1)
        log += translate_text(command.parameters[1], @mod_class_ids, regex2)
      end
      if log != ""
        log = sprintf("条件分歧:%s\n", log)
      end
    when 209 # 设置移动路线
      # 循环强制移动指令
      for movecommand in command.parameters[1].list
        # 脚本
        if movecommand.code == 45
          log = translate_text(movecommand.parameters[0], @mod_class_ids, regex1)
          log += translate_text(movecommand.parameters[0], @mod_class_ids, regex2)
        end
      end
      if log != ""
        log = sprintf("设置移动路线:%s\n", log)
      end
    when 321 # 变更角色职业
      if @mod_class_ids.has_key?(command.parameters[1])
        log = sprintf("变更角色职业: %d -> %d\n", command.parameters[1],
          @mod_class_ids[command.parameters[1]])
        command.parameters[1] = @mod_class_ids[command.parameters[1]]
      end
    when 355, 655 # 脚本
      log = translate_text(command.parameters[0], @mod_class_ids, regex1)
      log += translate_text(command.parameters[0], @mod_class_ids, regex2)
      if log != ""
        log = sprintf("脚本:%s\n", log)
      end
    end
    return log
  end
  #--------------------------------------------------------------------------
  # ● 刷新数据库引用(职业)
  #--------------------------------------------------------------------------
  def reset_classes_in_database
    proc = Proc.new {|c| reset_classes_in_command(c)}
    File.open("DReorder.txt", "a") do |f|
      # 通用处理
      translate_troop_events(f, proc)
      translate_common_events(f, proc)
      # 处理角色职业
      s = false
      log = ""
      # 循环所有角色
      for actor in $data_actors
        if actor != nil and @mod_class_ids.has_key?(actor.class_id)
          s = true
          log += sprintf(" □ 角色 %s 的职业: %d -> %d\n", actor.name,
            actor.class_id, @mod_class_ids[actor.class_id])
          actor.class_id = @mod_class_ids[actor.class_id]
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 角色\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_actors, "Data/Actors.rxdata")
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新地图引用(职业)
  #--------------------------------------------------------------------------
  def reset_classes_in_maps
    proc = Proc.new {|c| reset_classes_in_command(c)}
    regexs = [/(\$data_classes\[)([0-9]+)(\])/, /(\.class_id[ <=>!]+)([0-9]+)()/]
    File.open("DReorder.txt", "a") do |f|
      translate_map_events(f, proc, @mod_class_ids, regexs)
    end
  end
end
[/pre][/fold]
[fold=Data_Reorder (分割定义4) 特技数据][pre lang="ruby"]#==============================================================================
# ■ Data_Reorder (分割定义 4)
#------------------------------------------------------------------------------
#  数据库重排工具 by SailCat
#   该程序能够将数据库内容ID重新排列,包括插入空序列,紧密重排,交换,重设等
#==============================================================================
class Data_Reorder
  #--------------------------------------------------------------------------
  # ● 插入特技序号
  #     position: 插入位置
  #     count: 插入的数目
  #--------------------------------------------------------------------------
  def insert_skill(position, count)
    insert($data_skills, @mod_skill_ids, RPG::Skill.new, position, count)
    # 刷新特技ID的引用
    reset_skills
  end
  #--------------------------------------------------------------------------
  # ● 交换特技序号
  #     skill_id1: 特技序号1
  #     skill_id2: 特技序号2
  #--------------------------------------------------------------------------
  def swap_skill(skill_id1, skill_id2)
    swap($data_skills, @mod_skill_ids, skill_id1, skill_id2)
    # 刷新特技ID的引用
    reset_skills
  end
  #--------------------------------------------------------------------------
  # ● 设置新的特技序号
  #     old_skill_ids: 原特技序号
  #     new_skill_id: 新特技序号
  #--------------------------------------------------------------------------
  def set_skill_id(old_skill_ids, new_skill_id)
    set_id($data_skills, @mod_skill_ids, old_skill_ids, new_skill_id)
    # 刷新特技ID的引用
    reset_skills
  end
  #--------------------------------------------------------------------------
  # ● 重排特技序号(从1开始连续排)
  #--------------------------------------------------------------------------
  def sort_skill
    sort($data_skills, @mod_skill_ids)
    # 刷新特技ID的引用
    reset_skills
  end
  #--------------------------------------------------------------------------
  # ● 扩展特技序号
  #     num: 新的特技个数
  #--------------------------------------------------------------------------
  def expand_skill(num)
    l = $data_skills.size
    if l <= num
      for i in l..num
        $data_skills = RPG::Skill.new
      end
      save_data($data_skills, "Data/Skills.rxdata")
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新特技ID的引用
  #--------------------------------------------------------------------------
  def reset_skills
    # 刷新数据库引用
    reset_skills_in_database
    # 刷新地图引用
    reset_skills_in_maps
    # 保存修改
    save_data($data_skills, "Data/Skills.rxdata")
  end
  #--------------------------------------------------------------------------
  # ● 刷新事件引用(特技)
  #     command: 指令
  #--------------------------------------------------------------------------
  def reset_skills_in_command(command)
    log = ""
    regex1 = /(\$data_skills\[)([0-9]+)(\])/
    regex2 = /(\.skill_learn\?\(|\.learn_skill\(|\.forget_skill\(|\.skill_can_use\?\()([0-9]+)(\))/
    case command.code
    when 111 # 条件分歧
      if command.parameters[0] == 4 and command.parameters[2] == 2 # 角色的特技
        if @mod_skill_ids.has_key?(command.parameters[3])
          log = sprintf(" 角色特技: %d -> %d", command.parameters[3],
            @mod_skill_ids[command.parameters[3]])
          command.parameters[3] = @mod_skill_ids[command.parameters[3]]
        end
      elsif command.parameters[0] == 12 # 脚本
        log = translate_text(command.parameters[1], @mod_skill_ids, regex1)
        log += translate_text(command.parameters[1], @mod_skill_ids, regex2)
      end
      if log != ""
        log = sprintf("条件分歧:%s\n", log)
      end
    when 209 # 设置移动路线
      # 循环强制移动指令
      for movecommand in command.parameters[1].list
        # 脚本
        if movecommand.code == 45
          log = translate_text(movecommand.parameters[0], @mod_skill_ids, regex1)
          log += translate_text(movecommand.parameters[0], @mod_skill_ids, regex2)
        end
      end
      if log != ""
        log = sprintf("设置移动路线:%s\n", log)
      end
    when 318 # 增减特技
      if @mod_skill_ids.has_key?(command.parameters[2])
        log = sprintf("增减特技: %d -> %d\n", command.parameters[2],
          @mod_skill_ids[command.parameters[2]])
        command.parameters[2] = @mod_skill_ids[command.parameters[2]]
      end
    when 339 # 强制行动
      if command.parameters[2] == 1 # 使用特技的情况下
        if @mod_skill_ids.has_key?(command.parameters[3])
          log = sprintf("强制行动: 特技 %d -> %d\n", command.parameters[3],
            @mod_skill_ids[command.parameters[3]])
          command.parameters[3] = @mod_skill_ids[command.parameters[3]]
        end
      end
    when 355, 655 # 脚本
      log = translate_text(command.parameters[0], @mod_skill_ids, regex1)
      log += translate_text(command.parameters[0], @mod_skill_ids, regex2)
      if log != ""
        log = sprintf("脚本:%s\n", log)
      end
    end
    return log
  end
  #--------------------------------------------------------------------------
  # ● 刷新数据库引用(特技)
  #--------------------------------------------------------------------------
  def reset_skills_in_database
    proc = Proc.new {|c| reset_skills_in_command(c)}
    File.open("DReorder.txt", "a") do |f|
      # 通用处理
      translate_troop_events(f, proc)
      translate_common_events(f, proc)
      # 处理职业特技
      s = false
      log = ""
      # 循环所有职业
      for klass in $data_classes
        if klass != nil
          for learning in klass.learnings
            if @mod_skill_ids.has_key?(learning.skill_id)
              s = true
              log += sprintf(" □ 职业 %s 的特技: %d -> %d\n", klass.name,
                learning.skill_id, @mod_skill_ids[learning.skill_id])
              learning.skill_id = @mod_skill_ids[learning.skill_id]
            end
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 职业\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_classes, "Data/Classes.rxdata")
      end
      # 处理敌人特技
      s = false
      log = ""
      for enemy in $data_enemies
        if enemy != nil
          for action in enemy.actions
            if @mod_skill_ids.has_key?(action.skill_id)
              s = true
              log += sprintf(" □ 敌人 %s 的特技: %d -> %d\n", enemy.name,
                action.skill_id, @mod_skill_ids[action.skill_id])
              action.skill_id = @mod_skill_ids[action.skill_id]
            end
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 敌人\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_enemies, "Data/Enemies.rxdata")
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新地图引用(特技)
  #--------------------------------------------------------------------------
  def reset_skills_in_maps
    proc = Proc.new {|c| reset_skills_in_command(c)}
    regexs = [/(\$data_skills\[)([0-9]+)(\])/,
      /(\.skill_learn\?\(|\.learn_skill\(|\.forget_skill\(|\.skill_can_use\?\()([0-9]+)(\))/]
    File.open("DReorder.txt", "a") do |f|
      translate_map_events(f, proc, @mod_skill_ids, regexs)
    end
  end
end
[/pre][/fold]
[fold=Data_Reorder (分割定义5) 物品数据][pre lang="ruby"]#==============================================================================
# ■ Data_Reorder (分割定义 5)
#------------------------------------------------------------------------------
#  数据库重排工具 by SailCat
#   该程序能够将数据库内容ID重新排列,包括插入空序列,紧密重排,交换,重设等
#==============================================================================
class Data_Reorder
  #--------------------------------------------------------------------------
  # ● 插入物品序号
  #     position: 插入位置
  #     count: 插入的数目
  #--------------------------------------------------------------------------
  def insert_item(position, count)
    insert($data_items, @mod_item_ids, RPG::Item.new, position, count)
    # 刷新物品ID的引用
    reset_items
  end
  #--------------------------------------------------------------------------
  # ● 交换物品序号
  #     item_id1: 物品序号1
  #     item_id2: 物品序号2
  #--------------------------------------------------------------------------
  def swap_item(item_id1, item_id2)
    swap($data_items, @mod_item_ids, item_id1, item_id2)
    # 刷新物品ID的引用
    reset_items
  end
  #--------------------------------------------------------------------------
  # ● 设置新的物品序号
  #     old_item_ids: 原物品序号
  #     new_item_id: 新物品序号
  #--------------------------------------------------------------------------
  def set_item_id(old_item_ids, new_item_id)
    set_id($data_items, @mod_item_ids, old_item_ids, new_item_id)
    # 刷新物品ID的引用
    reset_items
  end
  #--------------------------------------------------------------------------
  # ● 重排物品序号(从1开始连续排)
  #--------------------------------------------------------------------------
  def sort_item
    sort($data_items, @mod_item_ids)
    # 刷新物品ID的引用
    reset_items
  end
  #--------------------------------------------------------------------------
  # ● 扩展物品序号
  #     num: 新的物品个数
  #--------------------------------------------------------------------------
  def expand_item(num)
    l = $data_items.size
    if l <= num
      for i in l..num
        $data_items = RPG::Item.new
      end
      save_data($data_items, "Data/Items.rxdata")
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新物品ID的引用
  #--------------------------------------------------------------------------
  def reset_items
    # 刷新数据库引用
    reset_items_in_database
    # 刷新地图引用
    reset_items_in_maps
    # 保存修改
    save_data($data_items, "Data/Items.rxdata")
  end
  #--------------------------------------------------------------------------
  # ● 刷新事件引用(物品)
  #     command: 指令
  #--------------------------------------------------------------------------
  def reset_items_in_command(command)
    log = ""
    regex1 = /(\$data_items\[)([0-9]+)(\])/
    regex2 = /(\.item_can_use\?\(|\.gain_item\(|\.lose_item\(|\.item_number\()([0-9]+)(\)|,)/
    case command.code
    when 111 # 条件分歧
      if command.parameters[0] == 8 # 物品
        if @mod_item_ids.has_key?(command.parameters[1])
          log = sprintf(" 物品: %d -> %d", command.parameters[1],
            @mod_item_ids[command.parameters[1]])
          command.parameters[1] = @mod_item_ids[command.parameters[1]]
        end
      elsif command.parameters[0] == 12 # 脚本
        log = translate_text(command.parameters[1], @mod_item_ids, regex1)
        log += translate_text(command.parameters[1], @mod_item_ids, regex2)
      end
      if log != ""
        log = sprintf("条件分歧:%s\n", log)
      end
    when 122 # 变量操作
      if command.parameters[3] == 3 # 物品
        if @mod_item_ids.has_key?(command.parameters[4])
          log = sprintf("变量操作: 物品 %d -> %d", command.parameters[4],
            @mod_item_ids[command.parameters[4]])
          command.parameters[4] = @mod_item_ids[command.parameters[4]]
        end
      end
    when 126 # 增减物品
      if @mod_item_ids.has_key?(command.parameters[0])
        log = sprintf("增减物品: %d -> %d\n", command.parameters[0],
          @mod_item_ids[command.parameters[0]])
        command.parameters[0] = @mod_item_ids[command.parameters[0]]
      end
    when 209 # 设置移动路线
      # 循环强制移动指令
      for movecommand in command.parameters[1].list
        # 脚本
        if movecommand.code == 45
          log = translate_text(movecommand.parameters[0], @mod_item_ids, regex1)
          log += translate_text(movecommand.parameters[0], @mod_item_ids, regex2)
        end
      end
      if log != ""
        log = sprintf("设置移动路线:%s\n", log)
      end
    when 302, 605 # 商店处理
      if command.parameters[0] == 0 # 物品
        if @mod_item_ids.has_key?(command.parameters[1])
          log = sprintf("商店处理: 物品 %d -> %d\n", command.parameters[1],
            @mod_item_ids[command.parameters[1]])
          command.parameters[1] = @mod_item_ids[command.parameters[1]]
        end
      end
    when 355, 655 # 脚本
      log = translate_text(command.parameters[0], @mod_item_ids, regex1)
      log += translate_text(command.parameters[0], @mod_item_ids, regex2)
      if log != ""
        log = sprintf("脚本:%s\n", log)
      end
    end
    return log
  end
  #--------------------------------------------------------------------------
  # ● 刷新数据库引用(物品)
  #--------------------------------------------------------------------------
  def reset_items_in_database
    proc = Proc.new {|c| reset_items_in_command(c)}
    File.open("DReorder.txt", "a") do |f|
      # 通用处理
      translate_troop_events(f, proc)
      translate_common_events(f, proc)
      # 处理敌人物品
      s = false
      log = ""
      for enemy in $data_enemies
        if enemy != nil
          if @mod_item_ids.has_key?(enemy.item_id)
            s = true
            log += sprintf(" □ 敌人 %s 的物品: %d -> %d\n", enemy.name,
              enemy.item_id, @mod_item_ids[enemy.item_id])
            enemy.item_id = @mod_item_ids[enemy.item_id]
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 敌人\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_enemies, "Data/Enemies.rxdata")
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新地图引用(物品)
  #--------------------------------------------------------------------------
  def reset_items_in_maps
    proc = Proc.new {|c| reset_items_in_command(c)}
    regexs = [/(\$data_items\[)([0-9]+)(\])/,
      /(\.item_can_use\?\(|\.gain_item\(|\.lose_item\(|\.item_number\()([0-9]+)(\)|,)/]
    File.open("DReorder.txt", "a") do |f|
      translate_map_events(f, proc, @mod_item_ids, regexs)
    end
  end
end
[/pre][/fold]
[fold=Data_Reorder (分割定义6) 武器数据][pre lang="ruby"]#==============================================================================
# ■ Data_Reorder (分割定义 6)
#------------------------------------------------------------------------------
#  数据库重排工具 by SailCat
#   该程序能够将数据库内容ID重新排列,包括插入空序列,紧密重排,交换,重设等
#==============================================================================
class Data_Reorder
  #--------------------------------------------------------------------------
  # ● 插入武器序号
  #     position: 插入位置
  #     count: 插入的数目
  #--------------------------------------------------------------------------
  def insert_weapon(position, count)
    insert($data_weapons, @mod_weapon_ids, RPG::Weapon.new, position, count)
    # 刷新武器ID的引用
    reset_weapons
  end
  #--------------------------------------------------------------------------
  # ● 交换武器序号
  #     weapon_id1: 武器序号1
  #     weapon_id2: 武器序号2
  #--------------------------------------------------------------------------
  def swap_weapon(weapon_id1, weapon_id2)
    swap($data_weapons, @mod_weapon_ids, weapon_id1, weapon_id2)
    # 刷新武器ID的引用
    reset_weapons
  end
  #--------------------------------------------------------------------------
  # ● 设置新的武器序号
  #     old_weapon_ids: 原武器序号
  #     new_weapon_id: 新武器序号
  #--------------------------------------------------------------------------
  def set_weapon_id(old_weapon_ids, new_weapon_id)
    set_id($data_weapons, @mod_weapon_ids, old_weapon_ids, new_weapon_id)
    # 刷新武器ID的引用
    reset_weapons
  end
  #--------------------------------------------------------------------------
  # ● 重排武器序号(从1开始连续排)
  #--------------------------------------------------------------------------
  def sort_weapon
    sort($data_weapons, @mod_weapon_ids)
    # 刷新武器ID的引用
    reset_weapons
  end
  #--------------------------------------------------------------------------
  # ● 扩展武器序号
  #     num: 新的武器个数
  #--------------------------------------------------------------------------
  def expand_weapon(num)
    l = $data_weapons.size
    if l <= num
      for i in l..num
        $data_weapons = RPG::Weapon.new
      end
      save_data($data_weapons, "Data/Weapons.rxdata")
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新武器ID的引用
  #--------------------------------------------------------------------------
  def reset_weapons
    # 刷新数据库引用
    reset_weapons_in_database
    # 刷新地图引用
    reset_weapons_in_maps
    # 保存修改
    save_data($data_weapons, "Data/Weapons.rxdata")
  end
  #--------------------------------------------------------------------------
  # ● 刷新事件引用(武器)
  #     command: 指令
  #--------------------------------------------------------------------------
  def reset_weapons_in_command(command)
    log = ""
    regex1 = /(\$data_weapons\[)([0-9]+)(\])/
    regex2 = /(\.weapon_number\(|\.gain_weapon\(|\.lose_weapon\(|\.equip\(0, ?)([0-9]+)(\)|,)/
    case command.code
    when 111 # 条件分歧
      if command.parameters[0] == 4 and command.parameters[2] == 3 # 角色的武器
        if @mod_weapon_ids.has_key?(command.parameters[3])
          log = sprintf(" 角色武器: %d -> %d", command.parameters[3],
            @mod_weapon_ids[command.parameters[3]])
          command.parameters[3] = @mod_weapon_ids[command.parameters[3]]
        end
      elsif command.parameters[0] == 9 # 武器
        if @mod_weapon_ids.has_key?(command.parameters[1])
          log = sprintf(" 武器: %d -> %d", command.parameters[1],
            @mod_weapon_ids[command.parameters[1]])
          command.parameters[1] = @mod_weapon_ids[command.parameters[1]]
        end
      elsif command.parameters[0] == 12 # 脚本
        log = translate_text(command.parameters[1], @mod_weapon_ids, regex1)
        log += translate_text(command.parameters[1], @mod_weapon_ids, regex2)
      end
      if log != ""
        log = sprintf("条件分歧:%s\n", log)
      end
    when 127 # 增减武器
      if @mod_weapon_ids.has_key?(command.parameters[0])
        log = sprintf("增减武器: %d -> %d\n", command.parameters[0],
          @mod_weapon_ids[command.parameters[0]])
        command.parameters[0] = @mod_weapon_ids[command.parameters[0]]
      end
    when 209 # 设置移动路线
      # 循环强制移动指令
      for movecommand in command.parameters[1].list
        # 脚本
        if movecommand.code == 45
          log = translate_text(movecommand.parameters[0], @mod_weapon_ids, regex1)
          log += translate_text(movecommand.parameters[0], @mod_weapon_ids, regex2)
        end
      end
      if log != ""
        log = sprintf("设置移动路线:%s\n", log)
      end
    when 302, 605 # 商店处理
      if command.parameters[0] == 1 # 武器
        if @mod_weapon_ids.has_key?(command.parameters[1])
          log = sprintf("商店处理: 武器 %d -> %d\n", command.parameters[1],
            @mod_weapon_ids[command.parameters[1]])
          command.parameters[1] = @mod_weapon_ids[command.parameters[1]]
        end
      end
    when 319 # 变更装备
      if command.parameters[1] == 0 # 武器
        if @mod_weapon_ids.has_key?(command.parameters[2])
          log = sprintf("变更装备: 武器 %d -> %d\n", command.parameters[2],
            @mod_weapon_ids[command.parameters[2]])
          command.parameters[2] = @mod_weapon_ids[command.parameters[2]]
        end
      end
    when 355, 655 # 脚本
      log = translate_text(command.parameters[0], @mod_weapon_ids, regex1)
      log += translate_text(command.parameters[0], @mod_weapon_ids, regex2)
      if log != ""
        log = sprintf("脚本:%s\n", log)
      end
    end
    return log
  end
  #--------------------------------------------------------------------------
  # ● 刷新数据库引用(武器)
  #--------------------------------------------------------------------------
  def reset_weapons_in_database
    proc = Proc.new {|c| reset_weapons_in_command(c)}
    File.open("DReorder.txt", "a") do |f|
      # 通用处理
      translate_troop_events(f, proc)
      translate_common_events(f, proc)
      # 处理角色武器
      s = false
      log = ""
      for actor in $data_actors
        if actor != nil
          if @mod_weapon_ids.has_key?(actor.weapon_id)
            s = true
            log += sprintf(" □ 角色 %s 的武器: %d -> %d\n", actor.name,
              actor.weapon_id, @mod_weapon_ids[actor.weapon_id])
            actor.weapon_id = @mod_weapon_ids[actor.weapon_id]
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 角色\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_actors, "Data/Actors.rxdata")
      end
      # 处理职业武器
      s = false
      log = ""
      for klass in $data_classes
        if klass != nil
          for i in 0...klass.weapon_set.size
            if @mod_weapon_ids.has_key?(klass.weapon_set)
              s = true
              log += sprintf(" □ 职业 %s 的武器: %d -> %d\n", klass.name,
                klass.weapon_set, @mod_weapon_ids[klass.weapon_set])
              klass.weapon_set = @mod_weapon_ids[klass.weapon_set]
            end
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 职业\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_classes, "Data/Classes.rxdata")
      end
      # 处理敌人武器
      s = false
      log = ""
      for enemy in $data_enemies
        if enemy != nil
          if @mod_weapon_ids.has_key?(enemy.weapon_id)
            s = true
            log += sprintf(" □ 敌人 %s 的武器: %d -> %d\n", enemy.name,
              enemy.weapon_id, @mod_weapon_ids[enemy.weapon_id])
            enemy.weapon_id = @mod_weapon_ids[enemy.weapon_id]
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 敌人\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_enemies, "Data/Enemies.rxdata")
      end
      # 处理战斗测试员武器
      s = false
      log = ""
      for test_battler in $data_system.test_battlers
        if @mod_weapon_ids.has_key?(test_battler.weapon_id)
          s = true
          log += sprintf(" □ 战斗测试员 %d 的武器: %d -> %d\n", test_battler.actor_id,
            test_battler.weapon_id, @mod_weapon_ids[test_battler.weapon_id])
          test_battler.weapon_id = @mod_weapon_ids[test_battler.weapon_id]
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 系统\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_system, "Data/System.rxdata")
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新地图引用(武器)
  #--------------------------------------------------------------------------
  def reset_weapons_in_maps
    proc = Proc.new {|c| reset_weapons_in_command(c)}
    regexs = [/(\$data_weapons\[)([0-9]+)(\])/,
      /(\.weapon_number\(|\.gain_weapon\(|\.lose_weapon\(|\.equip\(0, ?)([0-9]+)(\)|,)/]
    File.open("DReorder.txt", "a") do |f|
      translate_map_events(f, proc, @mod_weapon_ids, regexs)
    end
  end
end
[/pre][/fold]
[fold=Data_Reorder (分割定义7) 防具数据][pre lang="ruby"]#==============================================================================
# ■ Data_Reorder (分割定义 7)
#------------------------------------------------------------------------------
#  数据库重排工具 by SailCat
#   该程序能够将数据库内容ID重新排列,包括插入空序列,紧密重排,交换,重设等
#==============================================================================
class Data_Reorder
  #--------------------------------------------------------------------------
  # ● 插入防具序号
  #     position: 插入位置
  #     count: 插入的数目
  #--------------------------------------------------------------------------
  def insert_armor(position, count)
    insert($data_armors, @mod_armor_ids, RPG::Armor.new, position, count)
    # 刷新防具ID的引用
    reset_armors
  end
  #--------------------------------------------------------------------------
  # ● 交换防具序号
  #     armor_id1: 防具序号1
  #     armor_id2: 防具序号2
  #--------------------------------------------------------------------------
  def swap_armor(armor_id1, armor_id2)
    swap($data_armors, @mod_armor_ids, armor_id1, armor_id2)
    # 刷新防具ID的引用
    reset_armors
  end
  #--------------------------------------------------------------------------
  # ● 设置新的防具序号
  #     old_armor_ids: 原防具序号
  #     new_armor_id: 新防具序号
  #--------------------------------------------------------------------------
  def set_armor_id(old_armor_ids, new_armor_id)
    set_id($data_armors, @mod_armor_ids, old_armor_ids, new_armor_id)
    # 刷新防具ID的引用
    reset_armors
  end
  #--------------------------------------------------------------------------
  # ● 重排防具序号(从1开始连续排)
  #--------------------------------------------------------------------------
  def sort_armor
    sort($data_armors, @mod_armor_ids)
    # 刷新防具ID的引用
    reset_armors
  end
  #--------------------------------------------------------------------------
  # ● 扩展防具序号
  #     num: 新的防具个数
  #--------------------------------------------------------------------------
  def expand_armor(num)
    l = $data_armors.size
    if l <= num
      for i in l..num
        $data_armors = RPG::Armor.new
      end
      save_data($data_armors, "Data/Armors.rxdata")
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新防具ID的引用
  #--------------------------------------------------------------------------
  def reset_armors
    # 刷新数据库引用
    reset_armors_in_database
    # 刷新地图引用
    reset_armors_in_maps
    # 保存修改
    save_data($data_armors, "Data/Armors.rxdata")
  end
  #--------------------------------------------------------------------------
  # ● 刷新事件引用(防具)
  #     command: 指令
  #--------------------------------------------------------------------------
  def reset_armors_in_command(command)
    log = ""
    regex1 = /(\$data_armors\[)([0-9]+)(\])/
    regex2 = /(\.armor_number\(|\.gain_armor\(|\.lose_armor\(|\.equip\([1-4], ?)([0-9]+)(\)|,)/
    case command.code
    when 111 # 条件分歧
      if command.parameters[0] == 4 and command.parameters[2] == 4 # 角色的防具
        if @mod_armor_ids.has_key?(command.parameters[3])
          log = sprintf(" 角色防具: %d -> %d", command.parameters[3],
            @mod_armor_ids[command.parameters[3]])
          command.parameters[3] = @mod_armor_ids[command.parameters[3]]
        end
      elsif command.parameters[0] == 10 # 防具
        if @mod_armor_ids.has_key?(command.parameters[1])
          log = sprintf(" 防具: %d -> %d", command.parameters[1],
            @mod_armor_ids[command.parameters[1]])
          command.parameters[1] = @mod_armor_ids[command.parameters[1]]
        end
      elsif command.parameters[0] == 12 # 脚本
        log = translate_text(command.parameters[1], @mod_armor_ids, regex1)
        log += translate_text(command.parameters[1], @mod_armor_ids, regex2)
      end
      if log != ""
        log = sprintf("条件分歧:%s\n", log)
      end
    when 128 # 增减防具
      if @mod_armor_ids.has_key?(command.parameters[0])
        log = sprintf("增减防具: %d -> %d\n", command.parameters[0],
          @mod_armor_ids[command.parameters[0]])
        command.parameters[0] = @mod_armor_ids[command.parameters[0]]
      end
    when 209 # 设置移动路线
      # 循环强制移动指令
      for movecommand in command.parameters[1].list
        # 脚本
        if movecommand.code == 45
          log = translate_text(movecommand.parameters[0], @mod_armor_ids, regex1)
          log += translate_text(movecommand.parameters[0], @mod_armor_ids, regex2)
        end
      end
      if log != ""
        log = sprintf("设置移动路线:%s\n", log)
      end
    when 302, 605 # 商店处理
      if command.parameters[0] == 2 # 防具
        if @mod_armor_ids.has_key?(command.parameters[1])
          log = sprintf("商店处理: 防具 %d -> %d\n", command.parameters[1],
            @mod_armor_ids[command.parameters[1]])
          command.parameters[1] = @mod_armor_ids[command.parameters[1]]
        end
      end
    when 319 # 变更装备
      if command.parameters[1] != 0 # 防具
        if @mod_armor_ids.has_key?(command.parameters[2])
          log = sprintf("变更装备: 防具 %d -> %d\n", command.parameters[2],
            @mod_armor_ids[command.parameters[2]])
          command.parameters[2] = @mod_armor_ids[command.parameters[2]]
        end
      end
    when 355, 655 # 脚本
      log = translate_text(command.parameters[0], @mod_armor_ids, regex1)
      log += translate_text(command.parameters[0], @mod_armor_ids, regex2)
      if log != ""
        log = sprintf("脚本:%s\n", log)
      end
    end
    return log
  end
  #--------------------------------------------------------------------------
  # ● 刷新数据库引用(防具)
  #--------------------------------------------------------------------------
  def reset_armors_in_database
    proc = Proc.new {|c| reset_armors_in_command(c)}
    File.open("DReorder.txt", "a") do |f|
      # 通用处理
      translate_troop_events(f, proc)
      translate_common_events(f, proc)
      # 处理角色防具
      s = false
      log = ""
      for actor in $data_actors
        t = false
        log2 = ""
        if actor != nil
          if @mod_armor_ids.has_key?(actor.armor1_id)
            t = true
            log2 += sprintf("         盾牌: %d -> %d\n",
              actor.armor1_id, @mod_armor_ids[actor.armor1_id])
            actor.armor1_id = @mod_armor_ids[actor.armor1_id]
          end
          if @mod_armor_ids.has_key?(actor.armor2_id)
            t = true
            log2 += sprintf("         头部: %d -> %d\n",
              actor.armor2_id, @mod_armor_ids[actor.armor2_id])
            actor.armor2_id = @mod_armor_ids[actor.armor2_id]
          end
          if @mod_armor_ids.has_key?(actor.armor3_id)
            t = true
            log2 += sprintf("         身体: %d -> %d\n",
              actor.armor3_id, @mod_armor_ids[actor.armor3_id])
            actor.armor3_id = @mod_armor_ids[actor.armor3_id]
          end
          if @mod_armor_ids.has_key?(actor.armor4_id)
            t = true
            log2 += sprintf("         饰品: %d -> %d\n",
              actor.armor4_id, @mod_armor_ids[actor.armor4_id])
            actor.armor4_id = @mod_armor_ids[actor.armor4_id]
          end
          if t
            s = true
            log += sprintf(" □ 角色 %s:\n%s", actor.name, log2)
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 角色\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_actors, "Data/Actors.rxdata")
      end
      # 处理职业防具
      s = false
      log = ""
      for klass in $data_classes
        if klass != nil
          for i in 0...klass.armor_set.size
            if @mod_armor_ids.has_key?(klass.armor_set)
              s = true
              log += sprintf(" □ 职业 %s 的防具: %d -> %d\n", klass.name,
                klass.armor_set, @mod_armor_ids[klass.armor_set])
              klass.armor_set = @mod_armor_ids[klass.armor_set]
            end
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 职业\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_classes, "Data/Classes.rxdata")
      end
      # 处理敌人防具
      s = false
      log = ""
      for enemy in $data_enemies
        if enemy != nil
          if @mod_armor_ids.has_key?(enemy.armor_id)
            s = true
            log += sprintf(" □ 敌人 %s 的防具: %d -> %d\n", enemy.name,
              enemy.armor_id, @mod_armor_ids[enemy.armor_id])
            enemy.armor_id = @mod_armor_ids[enemy.armor_id]
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 敌人\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_enemies, "Data/Enemies.rxdata")
      end
      # 处理战斗测试员防具
      s = false
      log = ""
      for test_battler in $data_system.test_battlers
        if @mod_armor_ids.has_key?(test_battler.armor1_id)
          s = true
          log += sprintf(" □ 战斗测试员 %d 的盾牌: %d -> %d\n", test_battler.actor_id,
            test_battler.armor1_id, @mod_armor_ids[test_battler.armor1_id])
          test_battler.armor1_id = @mod_armor_ids[test_battler.armor1_id]
        end
        if @mod_armor_ids.has_key?(test_battler.armor2_id)
          s = true
          log += sprintf(" □ 战斗测试员 %d 的头部: %d -> %d\n", test_battler.actor_id,
            test_battler.armor2_id, @mod_armor_ids[test_battler.armor2_id])
          test_battler.armor2_id = @mod_armor_ids[test_battler.armor2_id]
        end
        if @mod_armor_ids.has_key?(test_battler.armor3_id)
          s = true
          log += sprintf(" □ 战斗测试员 %d 的身体: %d -> %d\n", test_battler.actor_id,
            test_battler.armor3_id, @mod_armor_ids[test_battler.armor3_id])
          test_battler.armor3_id = @mod_armor_ids[test_battler.armor3_id]
        end
        if @mod_armor_ids.has_key?(test_battler.armor4_id)
          s = true
          log += sprintf(" □ 战斗测试员 %d 的饰品: %d -> %d\n", test_battler.actor_id,
            test_battler.armor4_id, @mod_armor_ids[test_battler.armor4_id])
          test_battler.armor4_id = @mod_armor_ids[test_battler.armor4_id]
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 系统\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_system, "Data/System.rxdata")
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新地图引用(防具)
  #--------------------------------------------------------------------------
  def reset_armors_in_maps
    proc = Proc.new {|c| reset_armors_in_command(c)}
    regexs = [/(\$data_armors\[)([0-9]+)(\])/,
      /(\.armor_number\(|\.gain_armor\(|\.lose_armor\(|\.equip\([1-4], ?)([0-9]+)(\)|,)/]
    File.open("DReorder.txt", "a") do |f|
      translate_map_events(f, proc, @mod_armor_ids, regexs)
    end
  end
end
[/pre][/fold]
[fold=Data_Reorder (分割定义8) 敌人数据][pre lang="ruby"]#==============================================================================
# ■ Data_Reorder (分割定义 8)
#------------------------------------------------------------------------------
#  数据库重排工具 by SailCat
#   该程序能够将数据库内容ID重新排列,包括插入空序列,紧密重排,交换,重设等
#==============================================================================
class Data_Reorder
  #--------------------------------------------------------------------------
  # ● 插入敌人序号
  #     position: 插入位置
  #     count: 插入的数目
  #--------------------------------------------------------------------------
  def insert_enemy(position, count)
    insert($data_enemies, @mod_enemy_ids, RPG::Enemy.new, position, count)
    # 刷新敌人ID的引用
    reset_enemies
  end
  #--------------------------------------------------------------------------
  # ● 交换敌人序号
  #     enemy_id1: 敌人序号1
  #     enemy_id2: 敌人序号2
  #--------------------------------------------------------------------------
  def swap_enemy(enemy_id1, enemy_id2)
    swap($data_enemies, @mod_enemy_ids, enemy_id1, enemy_id2)
    # 刷新敌人ID的引用
    reset_enemies
  end
  #--------------------------------------------------------------------------
  # ● 设置新的敌人序号
  #     old_enemy_ids: 原敌人序号
  #     new_enemy_id: 新敌人序号
  #--------------------------------------------------------------------------
  def set_enemy_id(old_enemy_ids, new_enemy_id)
    set_id($data_enemies, @mod_enemy_ids, old_enemy_ids, new_enemy_id)
    # 刷新敌人ID的引用
    reset_enemies
  end
  #--------------------------------------------------------------------------
  # ● 重排敌人序号(从1开始连续排)
  #--------------------------------------------------------------------------
  def sort_enemy
    sort($data_enemies, @mod_enemy_ids)
    # 刷新敌人ID的引用
    reset_enemies
  end
  #--------------------------------------------------------------------------
  # ● 扩展敌人序号
  #     num: 新的敌人个数
  #--------------------------------------------------------------------------
  def expand_enemy(num)
    l = $data_enemies.size
    if l <= num
      for i in l..num
        $data_enemies = RPG::Enemy.new
      end
      save_data($data_enemies, "Data/Enemies.rxdata")
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新敌人ID的引用
  #--------------------------------------------------------------------------
  def reset_enemies
    # 刷新数据库引用
    reset_enemies_in_database
    # 刷新地图引用
    reset_enemies_in_maps
    # 保存修改
    save_data($data_enemies, "Data/Enemies.rxdata")
  end
  #--------------------------------------------------------------------------
  # ● 刷新事件引用(敌人)
  #     command: 指令
  #--------------------------------------------------------------------------
  def reset_enemies_in_command(command)
    log = ""
    regex1 = /(\$data_enemies\[)([0-9]+)(\])/
    regex2 = /(\.transform\()([0-9]+)(\))/
    case command.code
    when 111 # 条件分歧
      if command.parameters[0] == 12 # 脚本
        log = translate_text(command.parameters[1], @mod_enemy_ids, regex1)
        log += translate_text(command.parameters[1], @mod_enemy_ids, regex2)
      end
      if log != ""
        log = sprintf("条件分歧:%s\n", log)
      end
    when 209 # 设置移动路线
      # 循环强制移动指令
      for movecommand in command.parameters[1].list
        # 脚本
        if movecommand.code == 45
          log = translate_text(movecommand.parameters[0], @mod_enemy_ids, regex1)
          log += translate_text(movecommand.parameters[0], @mod_enemy_ids, regex2)
        end
      end
      if log != ""
        log = sprintf("设置移动路线:%s\n", log)
      end
    when 336 # 敌人变身
      if @mod_enemy_ids.has_key?(command.parameters[1])
        log = sprintf("敌人变身: %d -> %d\n", command.parameters[1],
          @mod_enemy_ids[command.parameters[1]])
        command.parameters[1] = @mod_enemy_ids[command.parameters[1]]
      end
    when 355, 655 # 脚本
      log = translate_text(command.parameters[0], @mod_enemy_ids, regex1)
      log += translate_text(command.parameters[0], @mod_enemy_ids, regex2)
      if log != ""
        log = sprintf("脚本:%s\n", log)
      end
    end
    return log
  end
  #--------------------------------------------------------------------------
  # ● 刷新数据库引用(敌人)
  #--------------------------------------------------------------------------
  def reset_enemies_in_database
    proc = Proc.new {|c| reset_enemies_in_command(c)}
    File.open("DReorder.txt", "a") do |f|
      # 通用处理
      translate_troop_events(f, proc, false, true)
      translate_common_events(f, proc)
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新地图引用(敌人)
  #--------------------------------------------------------------------------
  def reset_enemies_in_maps
    proc = Proc.new {|c| reset_enemies_in_command(c)}
    regexs = [/(\$data_enemies\[)([0-9]+)(\])/,
      /(\.transform\()([0-9]+)(\))/]
    File.open("DReorder.txt", "a") do |f|
      translate_map_events(f, proc, @mod_enemy_ids, regexs)
    end
  end
end
[/pre][/fold]
[fold=Data_Reorder (分割定义9) 队伍数据][pre lang="ruby"]#==============================================================================
# ■ Data_Reorder (分割定义 9)
#------------------------------------------------------------------------------
#  数据库重排工具 by SailCat
#   该程序能够将数据库内容ID重新排列,包括插入空序列,紧密重排,交换,重设等
#==============================================================================
class Data_Reorder
  #--------------------------------------------------------------------------
  # ● 插入队伍序号
  #     position: 插入位置
  #     count: 插入的数目
  #--------------------------------------------------------------------------
  def insert_troop(position, count)
    insert($data_troops, @mod_troop_ids, RPG::Troop.new, position, count)
    # 刷新队伍ID的引用
    reset_troops
  end
  #--------------------------------------------------------------------------
  # ● 交换队伍序号
  #     troop_id1: 队伍序号1
  #     troop_id2: 队伍序号2
  #--------------------------------------------------------------------------
  def swap_troop(troop_id1, troop_id2)
    swap($data_troops, @mod_troop_ids, troop_id1, troop_id2)
    # 刷新队伍ID的引用
    reset_troops
  end
  #--------------------------------------------------------------------------
  # ● 设置新的队伍序号
  #     old_troop_ids: 原队伍序号
  #     new_troop_id: 新队伍序号
  #--------------------------------------------------------------------------
  def set_troop_id(old_troop_ids, new_troop_id)
    set_id($data_troops, @mod_troop_ids, old_troop_ids, new_troop_id)
    # 刷新队伍ID的引用
    reset_troops
  end
  #--------------------------------------------------------------------------
  # ● 重排队伍序号(从1开始连续排)
  #--------------------------------------------------------------------------
  def sort_troop
    sort($data_troops, @mod_troop_ids)
    # 刷新队伍ID的引用
    reset_troops
  end
  #--------------------------------------------------------------------------
  # ● 扩展队伍序号
  #     num: 新的队伍个数
  #--------------------------------------------------------------------------
  def expand_troop(num)
    l = $data_troops.size
    if l <= num
      for i in l..num
        $data_troops = RPG::Troop.new
      end
      save_data($data_troops, "Data/Troops.rxdata")
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新队伍ID的引用
  #--------------------------------------------------------------------------
  def reset_troops
    # 刷新数据库引用
    reset_troops_in_database
    # 刷新地图引用
    reset_troops_in_maps
    # 保存修改
    save_data($data_troops, "Data/Troops.rxdata")
  end
  #--------------------------------------------------------------------------
  # ● 刷新事件引用(队伍)
  #     command: 指令
  #--------------------------------------------------------------------------
  def reset_troops_in_command(command)
    log = ""
    regex = /(\$data_troops\[)([0-9]+)(\])/
    case command.code
    when 111 # 条件分歧
      if command.parameters[0] == 12 # 脚本
        log = translate_text(command.parameters[1], @mod_troop_ids, regex)
      end
      if log != ""
        log = sprintf("条件分歧:%s\n", log)
      end
    when 209 # 设置移动路线
      # 循环强制移动指令
      for movecommand in command.parameters[1].list
        # 脚本
        if movecommand.code == 45
          log = translate_text(movecommand.parameters[0], @mod_troop_ids, regex)
        end
      end
      if log != ""
        log = sprintf("设置移动路线:%s\n", log)
      end
    when 301 # 战斗处理
      if @mod_troop_ids.has_key?(command.parameters[0])
        log = sprintf("战斗处理: %d -> %d\n", command.parameters[0],
          @mod_troop_ids[command.parameters[0]])
        command.parameters[0] = @mod_troop_ids[command.parameters[0]]
      end
    when 355, 655 # 脚本
      log = translate_text(command.parameters[0], @mod_troop_ids, regex)
      if log != ""
        log = sprintf("脚本:%s\n", log)
      end
    end
    return log
  end
  #--------------------------------------------------------------------------
  # ● 刷新数据库引用(队伍)
  #--------------------------------------------------------------------------
  def reset_troops_in_database
    proc = Proc.new {|c| reset_troops_in_command(c)}
    File.open("DReorder.txt", "a") do |f|
      # 通用处理
      translate_troop_events(f, proc)
      translate_common_events(f, proc)
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新地图引用(队伍)
  #--------------------------------------------------------------------------
  def reset_troops_in_maps
    proc = Proc.new {|c| reset_troops_in_command(c)}
    regexs = [/(\$data_troops\[)([0-9]+)(\])/]
    File.open("DReorder.txt", "a") do |f|
      translate_map_events(f, proc, @mod_troop_ids, regexs, true)
    end
  end
end
[/pre][/fold]
[fold=Data_Reorder (分割定义10) 状态数据][pre lang="ruby"]#==============================================================================
# ■ Data_Reorder (分割定义 10)
#------------------------------------------------------------------------------
#  数据库重排工具 by SailCat
#   该程序能够将数据库内容ID重新排列,包括插入空序列,紧密重排,交换,重设等
#==============================================================================
class Data_Reorder
  #--------------------------------------------------------------------------
  # ● 插入状态序号
  #     position: 插入位置
  #     count: 插入的数目
  #--------------------------------------------------------------------------
  def insert_state(position, count)
    insert($data_states, @mod_state_ids, RPG::State.new, position, count)
    # 刷新状态ID的引用
    reset_states
  end
  #--------------------------------------------------------------------------
  # ● 交换状态序号
  #     state_id1: 状态序号1
  #     state_id2: 状态序号2
  #--------------------------------------------------------------------------
  def swap_state(state_id1, state_id2)
    swap($data_states, @mod_state_ids, state_id1, state_id2)
    # 刷新状态ID的引用
    reset_states
  end
  #--------------------------------------------------------------------------
  # ● 设置新的状态序号
  #     old_state_ids: 原状态序号
  #     new_state_id: 新状态序号
  #--------------------------------------------------------------------------
  def set_state_id(old_state_ids, new_state_id)
    set_id($data_states, @mod_state_ids, old_state_ids, new_state_id)
    # 刷新状态ID的引用
    reset_states
  end
  #--------------------------------------------------------------------------
  # ● 重排状态序号(从1开始连续排)
  #--------------------------------------------------------------------------
  def sort_state
    sort($data_states, @mod_state_ids)
    # 刷新状态ID的引用
    reset_states
  end
  #--------------------------------------------------------------------------
  # ● 扩展状态序号
  #     num: 新的状态个数
  #--------------------------------------------------------------------------
  def expand_state(num)
    l = $data_states.size
    if l <= num
      for i in l..num
        $data_states = RPG::State.new
      end
      save_data($data_states, "Data/States.rxdata")
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新状态ID的引用
  #--------------------------------------------------------------------------
  def reset_states
    # 刷新数据库引用
    reset_states_in_database
    # 刷新地图引用
    reset_states_in_maps
    # 保存修改
    save_data($data_states, "Data/States.rxdata")
  end
  #--------------------------------------------------------------------------
  # ● 刷新事件引用(状态)
  #     command: 指令
  #--------------------------------------------------------------------------
  def reset_states_in_command(command)
    log = ""
    regex1 = /(\$data_states\[)([0-9]+)(\])/
    regex2 = /(\.state\?\(|\.state_full\?\(|\.state_guard\?\(|\.add_state\(|\.remove_state\()([0-9]+)(\)|,)/
    case command.code
    when 111 # 条件分歧
      if command.parameters[0] == 4 and command.parameters[2] == 5 # 角色的状态
        if @mod_state_ids.has_key?(command.parameters[3])
          log = sprintf(" 角色状态: %d -> %d", command.parameters[3],
            @mod_state_ids[command.parameters[3]])
          command.parameters[3] = @mod_state_ids[command.parameters[3]]
        end
      elsif command.parameters[0] == 5 and command.parameters[2] == 1 # 敌人的状态
        if @mod_state_ids.has_key?(command.parameters[3])
          log = sprintf(" 敌人状态: %d -> %d", command.parameters[3],
            @mod_state_ids[command.parameters[3]])
          command.parameters[3] = @mod_state_ids[command.parameters[3]]
        end
      elsif command.parameters[0] == 12 # 脚本
        log = translate_text(command.parameters[1], @mod_state_ids, regex1)
        log += translate_text(command.parameters[1], @mod_state_ids, regex2)
      end
      if log != ""
        log = sprintf("条件分歧:%s\n", log)
      end
    when 209 # 设置移动路线
      # 循环强制移动指令
      for movecommand in command.parameters[1].list
        # 脚本
        if movecommand.code == 45
          log = translate_text(movecommand.parameters[0], @mod_state_ids, regex1)
          log += translate_text(movecommand.parameters[0], @mod_state_ids, regex2)
        end
      end
      if log != ""
        log = sprintf("设置移动路线:%s\n", log)
      end
    when 313, 333 # 更改状态
      if @mod_state_ids.has_key?(command.parameters[2])
        log = sprintf("更改%s状态: %d -> %d\n", command.code == 313 ? "角色" : "敌人",
          command.parameters[2], @mod_state_ids[command.parameters[2]])
        command.parameters[2] = @mod_state_ids[command.parameters[2]]
      end
    when 355, 655 # 脚本
      log = translate_text(command.parameters[0], @mod_state_ids, regex1)
      log += translate_text(command.parameters[0], @mod_state_ids, regex2)
      if log != ""
        log = sprintf("脚本:%s\n", log)
      end
    end
    return log
  end
  #--------------------------------------------------------------------------
  # ● 刷新数据库引用(状态)
  #--------------------------------------------------------------------------
  def reset_states_in_database
    proc = Proc.new {|c| reset_states_in_command(c)}
    File.open("DReorder.txt", "a") do |f|
      # 通用处理
      translate_troop_events(f, proc)
      translate_common_events(f, proc)
      # 处理职业状态
      s = false
      log = ""
      for klass in $data_classes
        if klass != nil
          next if klass.state_ranks.xsize == 1
          original_state_ranks = klass.state_ranks.clone
          size = $data_states.size
          klass.state_ranks.resize(size) if klass.state_ranks.xsize < size
          @mod_state_ids.each_key do |k|
            klass.state_ranks[k] = 3
          end
          @mod_state_ids.each do |k, v|
            s = true
            if original_state_ranks[k]
              klass.state_ranks[v] = original_state_ranks[k]
            else
              klass.state_ranks[v] = 3
            end
          end
          klass.state_ranks.resize(size) if klass.state_ranks.xsize > size
          log += sprintf(" □ 职业 %s 的状态有效度已重排\n", klass.name) if s
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 职业\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_classes, "Data/Classes.rxdata")
      end
      # 处理特技状态
      s = false
      log = ""
      for skill in $data_skills
        if skill != nil
          for i in 0...skill.plus_state_set.size
            if @mod_state_ids.has_key?(skill.plus_state_set)
              s = true
              log += sprintf(" □ 特技 %s 的(+)状态: %d -> %d\n", skill.name,
                skill.plus_state_set, @mod_state_ids[skill.plus_state_set])
              skill.plus_state_set = @mod_state_ids[skill.plus_state_set]
            end
          end
          for i in 0...skill.minus_state_set.size
            if @mod_state_ids.has_key?(skill.minus_state_set)
              s = true
              log += sprintf(" □ 特技 %s 的(-)状态: %d -> %d\n", skill.name,
                skill.minus_state_set, @mod_state_ids[skill.minus_state_set])
              skill.minus_state_set = @mod_state_ids[skill.minus_state_set]
            end
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 特技\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_skills, "Data/Skills.rxdata")
      end
      # 处理物品状态
      s = false
      log = ""
      for item in $data_items
        if item != nil
          for i in 0...item.plus_state_set.size
            if @mod_state_ids.has_key?(item.plus_state_set)
              s = true
              log += sprintf(" □ 物品 %s 的(+)状态: %d -> %d\n", item.name,
                item.plus_state_set, @mod_state_ids[item.plus_state_set])
              item.plus_state_set = @mod_state_ids[item.plus_state_set]
            end
          end
          for i in 0...item.minus_state_set.size
            if @mod_state_ids.has_key?(item.minus_state_set)
              s = true
              log += sprintf(" □ 物品 %s 的(-)状态: %d -> %d\n", item.name,
                item.minus_state_set, @mod_state_ids[item.minus_state_set])
              item.minus_state_set = @mod_state_ids[item.minus_state_set]
            end
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 物品\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_items, "Data/Items.rxdata")
      end
      # 处理武器状态
      s = false
      log = ""
      for weapon in $data_weapons
        if weapon != nil
          for i in 0...weapon.plus_state_set.size
            if @mod_state_ids.has_key?(weapon.plus_state_set)
              s = true
              log += sprintf(" □ 武器 %s 的(+)状态: %d -> %d\n", weapon.name,
                weapon.plus_state_set, @mod_state_ids[weapon.plus_state_set])
              weapon.plus_state_set = @mod_state_ids[weapon.plus_state_set]
            end
          end
          for i in 0...weapon.minus_state_set.size
            if @mod_state_ids.has_key?(weapon.minus_state_set)
              s = true
              log += sprintf(" □ 武器 %s 的(-)状态: %d -> %d\n", weapon.name,
                weapon.minus_state_set, @mod_state_ids[weapon.minus_state_set])
              weapon.minus_state_set = @mod_state_ids[weapon.minus_state_set]
            end
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 武器\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_weapons, "Data/Weapons.rxdata")
      end
      # 处理防具状态
      s = false
      log = ""
      for armor in $data_armors
        if armor != nil
          for i in 0...armor.guard_state_set.size
            if @mod_state_ids.has_key?(armor.guard_state_set)
              s = true
              log += sprintf(" □ 防具 %s 的防御状态: %d -> %d\n", armor.name,
                armor.guard_state_set, @mod_state_ids[armor.guard_state_set])
              armor.guard_state_set = @mod_state_ids[armor.guard_state_set]
            end
          end
          if @mod_state_ids.has_key?(armor.auto_state_id)
            s = true
            log += sprintf(" □ 防具 %s 的自动状态: %d -> %d\n", armor.name,
              armor.auto_state_id, @mod_state_ids[armor.auto_state_id])
            armor.auto_state_id = @mod_state_ids[armor.auto_state_id]
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 防具\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_armors, "Data/armors.rxdata")
      end
      # 处理敌人状态
      s = false
      log = ""
      for enemy in $data_enemies
        if enemy != nil
          next if enemy.state_ranks.xsize == 1
          original_state_ranks = enemy.state_ranks.clone
          size = $data_states.size
          enemy.state_ranks.resize(size) if enemy.state_ranks.xsize < size
          @mod_state_ids.each_key do |k|
            enemy.state_ranks[k] = 3
          end
          @mod_state_ids.each do |k, v|
            s = true
            if original_state_ranks[k]
              enemy.state_ranks[v] = original_state_ranks[k]
            else
              enemy.state_ranks[v] = 3
            end
          end
          enemy.state_ranks.resize(size) if enemy.state_ranks.xsize > size
          log += sprintf(" □ 敌人 %s 的状态有效度已重排\n", enemy.name) if s
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 敌人\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_enemies, "Data/Enemies.rxdata")
      end
      # 处理状态自身
      s = false
      log = ""
      for state in $data_states
        if state != nil
          for i in 0...state.plus_state_set.size
            if @mod_state_ids.has_key?(state.plus_state_set)
              s = true
              log += sprintf(" □ 状态 %s 的(+)状态: %d -> %d\n", state.name,
                state.plus_state_set, @mod_state_ids[state.plus_state_set])
              state.plus_state_set = @mod_state_ids[state.plus_state_set]
            end
          end
          for i in 0...state.minus_state_set.size
            if @mod_state_ids.has_key?(state.minus_state_set)
              s = true
              log += sprintf(" □ 状态 %s 的(-)状态: %d -> %d\n", state.name,
                state.minus_state_set, @mod_state_ids[state.minus_state_set])
              state.minus_state_set = @mod_state_ids[state.minus_state_set]
            end
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 状态\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_states, "Data/States.rxdata")
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新地图引用(状态)
  #--------------------------------------------------------------------------
  def reset_states_in_maps
    proc = Proc.new {|c| reset_states_in_command(c)}
    regexs = [/(\$data_states\[)([0-9]+)(\])/,
      /(\.state\?\(|\.state_full\?\(|\.state_guard\?\(|\.add_state\(|\.remove_state\()([0-9]+)(\)|,)/]
    File.open("DReorder.txt", "a") do |f|
      translate_map_events(f, proc, @mod_state_ids, regexs)
    end
  end
end
[/pre][/fold]
[fold=Data_Reorder (分割定义11) 动画数据][pre lang="ruby"]#==============================================================================
# ■ Data_Reorder (分割定义 11)
#------------------------------------------------------------------------------
#  数据库重排工具 by SailCat
#   该程序能够将数据库内容ID重新排列,包括插入空序列,紧密重排,交换,重设等
#==============================================================================
class Data_Reorder
  #--------------------------------------------------------------------------
  # ● 插入动画序号
  #     position: 插入位置
  #     count: 插入的数目
  #--------------------------------------------------------------------------
  def insert_anime(position, count)
    insert($data_animations, @mod_anime_ids, RPG::Animation.new, position, count)
    # 刷新动画ID的引用
    reset_animes
  end
  #--------------------------------------------------------------------------
  # ● 交换动画序号
  #     anime_id1: 动画序号1
  #     anime_id2: 动画序号2
  #--------------------------------------------------------------------------
  def swap_anime(anime_id1, anime_id2)
    swap($data_animations, @mod_anime_ids, anime_id1, anime_id2)
    # 刷新动画ID的引用
    reset_animes
  end
  #--------------------------------------------------------------------------
  # ● 设置新的动画序号
  #     old_anime_ids: 原动画序号
  #     new_anime_id: 新动画序号
  #--------------------------------------------------------------------------
  def set_anime_id(old_anime_ids, new_anime_id)
    set_id($data_animations, @mod_anime_ids, old_anime_ids, new_anime_id)
    # 刷新动画ID的引用
    reset_animes
  end
  #--------------------------------------------------------------------------
  # ● 重排动画序号(从1开始连续排)
  #--------------------------------------------------------------------------
  def sort_anime
    sort($data_animations, @mod_anime_ids)
    # 刷新动画ID的引用
    reset_animes
  end
  #--------------------------------------------------------------------------
  # ● 扩展动画序号
  #     num: 新的动画个数
  #--------------------------------------------------------------------------
  def expand_anime(num)
    l = $data_animations.size
    if l <= num
      for i in l..num
        $data_animations = RPG::Animation.new
      end
      save_data($data_animations, "Data/Animations.rxdata")
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新动画ID的引用
  #--------------------------------------------------------------------------
  def reset_animes
    # 刷新数据库引用
    reset_animes_in_database
    # 刷新地图引用
    reset_animes_in_maps
    # 保存修改
    save_data($data_animations, "Data/Animations.rxdata")
  end
  #--------------------------------------------------------------------------
  # ● 刷新事件引用(动画)
  #     command: 指令
  #--------------------------------------------------------------------------
  def reset_animes_in_command(command)
    log = ""
    regex1 = /(\$data_animations\[)([0-9]+)(\])/
    regex2 = /(animation[12]?_id[ <=>!]+)([0-9]+)()/
    case command.code
    when 111 # 条件分歧
      if command.parameters[0] == 12 # 脚本
        log = translate_text(command.parameters[1], @mod_anime_ids, regex1)
        log += translate_text(command.parameters[1], @mod_anime_ids, regex2)
      end
      if log != ""
        log = sprintf("条件分歧:%s\n", log)
      end
    when 207 # 显示动画
      if @mod_anime_ids.has_key?(command.parameters[1])
        log = sprintf("显示动画: %d -> %d\n",
          command.parameters[1], @mod_anime_ids[command.parameters[1]])
        command.parameters[1] = @mod_anime_ids[command.parameters[1]]
      end
    when 209 # 设置移动路线
      # 循环强制移动指令
      for movecommand in command.parameters[1].list
        # 脚本
        if movecommand.code == 45
          log = translate_text(movecommand.parameters[0], @mod_anime_ids, regex1)
          log += translate_text(movecommand.parameters[0], @mod_anime_ids, regex2)
        end
      end
      if log != ""
        log = sprintf("设置移动路线:%s\n", log)
      end
    when 337 # 显示动画
      if @mod_anime_ids.has_key?(command.parameters[2])
        log = sprintf("显示动画: %d -> %d\n",
          command.parameters[2], @mod_anime_ids[command.parameters[2]])
        command.parameters[2] = @mod_anime_ids[command.parameters[2]]
      end
    when 355, 655 # 脚本
      log = translate_text(command.parameters[0], @mod_anime_ids, regex1)
      log += translate_text(command.parameters[0], @mod_anime_ids, regex2)
      if log != ""
        log = sprintf("脚本:%s\n", log)
      end
    end
    return log
  end
  #--------------------------------------------------------------------------
  # ● 刷新数据库引用(动画)
  #--------------------------------------------------------------------------
  def reset_animes_in_database
    proc = Proc.new {|c| reset_animes_in_command(c)}
    File.open("DReorder.txt", "a") do |f|
      # 通用处理
      translate_troop_events(f, proc)
      translate_common_events(f, proc)
      # 处理特技动画
      s = false
      log = ""
      for skill in $data_skills
        if skill != nil
          if @mod_anime_ids.has_key?(skill.animation1_id)
            s = true
            log += sprintf(" □ 特技 %s 的攻击动画: %d -> %d\n", skill.name,
              skill.animation1_id, @mod_anime_ids[skill.animation1_id])
            skill.animation1_id = @mod_anime_ids[skill.animation1_id]
          end
          if @mod_anime_ids.has_key?(skill.animation2_id)
            s = true
            log += sprintf(" □ 特技 %s 的对象动画: %d -> %d\n", skill.name,
              skill.animation2_id, @mod_anime_ids[skill.animation2_id])
            skill.animation2_id = @mod_anime_ids[skill.animation2_id]
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 特技\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_skills, "Data/Skills.rxdata")
      end
      # 处理物品动画
      s = false
      log = ""
      for item in $data_items
        if item != nil
          if @mod_anime_ids.has_key?(item.animation1_id)
            s = true
            log += sprintf(" □ 物品 %s 的攻击动画: %d -> %d\n", item.name,
              item.animation1_id, @mod_anime_ids[item.animation1_id])
            item.animation1_id = @mod_anime_ids[item.animation1_id]
          end
          if @mod_anime_ids.has_key?(item.animation2_id)
            s = true
            log += sprintf(" □ 物品 %s 的对象动画: %d -> %d\n", item.name,
              item.animation2_id, @mod_anime_ids[item.animation2_id])
            item.animation2_id = @mod_anime_ids[item.animation2_id]
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 物品\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_items, "Data/Items.rxdata")
      end
      # 处理武器动画
      s = false
      log = ""
      for weapon in $data_weapons
        if weapon != nil
          if @mod_anime_ids.has_key?(weapon.animation1_id)
            s = true
            log += sprintf(" □ 武器 %s 的攻击动画: %d -> %d\n", weapon.name,
              weapon.animation1_id, @mod_anime_ids[weapon.animation1_id])
            weapon.animation1_id = @mod_anime_ids[weapon.animation1_id]
          end
          if @mod_anime_ids.has_key?(weapon.animation2_id)
            s = true
            log += sprintf(" □ 武器 %s 的对象动画: %d -> %d\n", weapon.name,
              weapon.animation2_id, @mod_anime_ids[weapon.animation2_id])
            weapon.animation2_id = @mod_anime_ids[weapon.animation2_id]
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 武器\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_weapons, "Data/Weapons.rxdata")
      end
      # 处理敌人动画
      s = false
      log = ""
      for enemy in $data_enemies
        if enemy != nil
          if @mod_anime_ids.has_key?(enemy.animation1_id)
            s = true
            log += sprintf(" □ 敌人 %s 的攻击动画: %d -> %d\n", enemy.name,
              enemy.animation1_id, @mod_anime_ids[enemy.animation1_id])
            enemy.animation1_id = @mod_anime_ids[enemy.animation1_id]
          end
          if @mod_anime_ids.has_key?(enemy.animation2_id)
            s = true
            log += sprintf(" □ 敌人 %s 的对象动画: %d -> %d\n", enemy.name,
              enemy.animation2_id, @mod_anime_ids[enemy.animation2_id])
            enemy.animation2_id = @mod_anime_ids[enemy.animation2_id]
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 敌人\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_enemies, "Data/Enemies.rxdata")
      end
      # 处理状态动画
      s = false
      log = ""
      for state in $data_states
        if state != nil
          if @mod_anime_ids.has_key?(state.animation_id)
            s = true
            log += sprintf(" □ 状态 %s 的动画: %d -> %d\n", state.name,
              state.animation_id, @mod_anime_ids[state.animation_id])
            state.animation_id = @mod_anime_ids[state.animation_id]
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 状态\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_states, "Data/States.rxdata")
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新地图引用(动画)
  #--------------------------------------------------------------------------
  def reset_animes_in_maps
    proc = Proc.new {|c| reset_animes_in_command(c)}
    regexs = [/(\$data_animations\[)([0-9]+)(\])/,
      /(animation[12]?_id[ <=>!]+)([0-9]+)()/]
    File.open("DReorder.txt", "a") do |f|
      translate_map_events(f, proc, @mod_anime_ids, regexs)
    end
  end
end
[/pre][/fold]
[fold=Data_Reorder (分割定义12) 图块数据][pre lang="ruby"]#==============================================================================
# ■ Data_Reorder (分割定义 12)
#------------------------------------------------------------------------------
#  数据库重排工具 by SailCat
#   该程序能够将数据库内容ID重新排列,包括插入空序列,紧密重排,交换,重设等
#==============================================================================
class Data_Reorder
  #--------------------------------------------------------------------------
  # ● 插入图块序号
  #     position: 插入位置
  #     count: 插入的数目
  #--------------------------------------------------------------------------
  def insert_tileset(position, count)
    insert($data_tilesets, @mod_tileset_ids, RPG::Tileset.new, position, count)
    # 刷新图块ID的引用
    reset_tilesets
  end
  #--------------------------------------------------------------------------
  # ● 交换图块序号
  #     tileset_id1: 图块序号1
  #     tileset_id2: 图块序号2
  #--------------------------------------------------------------------------
  def swap_tileset(tileset_id1, tileset_id2)
    swap($data_tilesets, @mod_tileset_ids, tileset_id1, tileset_id2)
    # 刷新图块ID的引用
    reset_tilesets
  end
  #--------------------------------------------------------------------------
  # ● 设置新的图块序号
  #     old_tileset_ids: 原图块序号
  #     new_tileset_id: 新图块序号
  #--------------------------------------------------------------------------
  def set_tileset_id(old_tileset_ids, new_tileset_id)
    set_id($data_tilesets, @mod_tileset_ids, old_tileset_ids, new_tileset_id)
    # 刷新图块ID的引用
    reset_tilesets
  end
  #--------------------------------------------------------------------------
  # ● 重排图块序号(从1开始连续排)
  #--------------------------------------------------------------------------
  def sort_tileset
    sort($data_tilesets, @mod_tileset_ids)
    # 刷新图块ID的引用
    reset_tilesets
  end
  #--------------------------------------------------------------------------
  # ● 扩展图块序号
  #     num: 新的图块个数
  #--------------------------------------------------------------------------
  def expand_tileset(num)
    l = $data_tilesets.size
    if l <= num
      for i in l..num
        $data_tilesets = RPG::Tileset.new
      end
      save_data($data_tilesets, "Data/Tilesets.rxdata")
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新图块ID的引用
  #--------------------------------------------------------------------------
  def reset_tilesets
    # 刷新数据库引用
    reset_tilesets_in_database
    # 刷新地图引用
    reset_tilesets_in_maps
    # 保存修改
    save_data($data_tilesets, "Data/Tilesets.rxdata")
  end
  #--------------------------------------------------------------------------
  # ● 刷新事件引用(图块)
  #     command: 指令
  #--------------------------------------------------------------------------
  def reset_tilesets_in_command(command)
    log = ""
    regex = /(\$data_tilesets\[)([0-9]+)(\])/
    case command.code
    when 111 # 条件分歧
      if command.parameters[0] == 12 # 脚本
        log = translate_text(command.parameters[1], @mod_tileset_ids, regex)
      end
      if log != ""
        log = sprintf("条件分歧:%s\n", log)
      end
    when 209 # 设置移动路线
      # 循环强制移动指令
      for movecommand in command.parameters[1].list
        # 脚本
        if movecommand.code == 45
          log = translate_text(movecommand.parameters[0], @mod_tileset_ids, regex)
        end
      end
      if log != ""
        log = sprintf("设置移动路线:%s\n", log)
      end
    when 355, 655 # 脚本
      log = translate_text(command.parameters[0], @mod_tileset_ids, regex)
      if log != ""
        log = sprintf("脚本:%s\n", log)
      end
    end
    return log
  end
  #--------------------------------------------------------------------------
  # ● 刷新数据库引用(图块)
  #--------------------------------------------------------------------------
  def reset_tilesets_in_database
    proc = Proc.new {|c| reset_tilesets_in_command(c)}
    File.open("DReorder.txt", "a") do |f|
      # 通用处理
      translate_troop_events(f, proc)
      translate_common_events(f, proc)
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新地图引用(图块)
  #--------------------------------------------------------------------------
  def reset_tilesets_in_maps
    proc = Proc.new {|c| reset_tilesets_in_command(c)}
    regexs = [/(\$data_tilesets\[)([0-9]+)(\])/]
    File.open("DReorder.txt", "a") do |f|
      translate_map_events(f, proc, @mod_tileset_ids, regexs, false, true)
    end
  end
end
[/pre][/fold]
[fold=Data_Reorder (分割定义13) 公共事件数据][pre lang="ruby"]#==============================================================================
# ■ Data_Reorder (分割定义 13)
#------------------------------------------------------------------------------
#  数据库重排工具 by SailCat
#   该程序能够将数据库内容ID重新排列,包括插入空序列,紧密重排,交换,重设等
#==============================================================================
class Data_Reorder
  #--------------------------------------------------------------------------
  # ● 插入公共事件序号
  #     position: 插入位置
  #     count: 插入的数目
  #--------------------------------------------------------------------------
  def insert_common(position, count)
    insert($data_common_events, @mod_common_ids, RPG::CommonEvent.new, position, count)
    # 刷新公共事件ID的引用
    reset_commons
  end
  #--------------------------------------------------------------------------
  # ● 交换公共事件序号
  #     common_id1: 公共事件序号1
  #     common_id2: 公共事件序号2
  #--------------------------------------------------------------------------
  def swap_common(common_id1, common_id2)
    swap($data_common_events, @mod_common_ids, common_id1, common_id2)
    # 刷新公共事件ID的引用
    reset_commons
  end
  #--------------------------------------------------------------------------
  # ● 设置新的公共事件序号
  #     old_common_ids: 原公共事件序号
  #     new_common_id: 新公共事件序号
  #--------------------------------------------------------------------------
  def set_common_id(old_common_ids, new_common_id)
    set_id($data_common_events, @mod_common_ids, old_common_ids, new_common_id)
    # 刷新公共事件ID的引用
    reset_commons
  end
  #--------------------------------------------------------------------------
  # ● 重排公共事件序号(从1开始连续排)
  #--------------------------------------------------------------------------
  def sort_common
    sort($data_common_events, @mod_common_ids)
    # 刷新公共事件ID的引用
    reset_commons
  end
  #--------------------------------------------------------------------------
  # ● 扩展公共事件序号
  #     num: 新的公共事件个数
  #--------------------------------------------------------------------------
  def expand_common(num)
    l = $data_common_events.size
    if l <= num
      for i in l..num
        $data_common_events = RPG::CommonEvent.new
      end
      save_data($data_common_events, "Data/CommonEvents.rxdata")
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新公共事件ID的引用
  #--------------------------------------------------------------------------
  def reset_commons
    # 刷新数据库引用
    reset_commons_in_database
    # 刷新地图引用
    reset_commons_in_maps
    # 保存修改
    save_data($data_common_events, "Data/CommonEvents.rxdata")
  end
  #--------------------------------------------------------------------------
  # ● 刷新事件引用(公共事件)
  #     command: 指令
  #--------------------------------------------------------------------------
  def reset_commons_in_command(command)
    log = ""
    regex1 = /(\$data_common_events\[)([0-9]+)(\])/
    regex2 = /(common_event_id[ <=>!]+)([0-9]+)()/
    case command.code
    when 111 # 条件分歧
      if command.parameters[0] == 12 # 脚本
        log = translate_text(command.parameters[1], @mod_common_ids, regex1)
        log += translate_text(command.parameters[1], @mod_common_ids, regex2)
      end
      if log != ""
        log = sprintf("条件分歧:%s\n", log)
      end
    when 117 # 公共事件
      if @mod_common_ids.has_key?(command.parameters[0])
        log = sprintf("公共事件: %d -> %d\n",
          command.parameters[0], @mod_common_ids[command.parameters[0]])
        command.parameters[0] = @mod_common_ids[command.parameters[0]]
      end
    when 209 # 设置移动路线
      # 循环强制移动指令
      for movecommand in command.parameters[1].list
        # 脚本
        if movecommand.code == 45
          log = translate_text(movecommand.parameters[0], @mod_common_ids, regex1)
          log += translate_text(movecommand.parameters[0], @mod_common_ids, regex2)
        end
      end
      if log != ""
        log = sprintf("设置移动路线:%s\n", log)
      end
    when 355, 655 # 脚本
      log = translate_text(command.parameters[0], @mod_common_ids, regex1)
      log += translate_text(command.parameters[0], @mod_common_ids, regex2)
      if log != ""
        log = sprintf("脚本:%s\n", log)
      end
    end
    return log
  end
  #--------------------------------------------------------------------------
  # ● 刷新数据库引用(公共事件)
  #--------------------------------------------------------------------------
  def reset_commons_in_database
    proc = Proc.new {|c| reset_commons_in_command(c)}
    File.open("DReorder.txt", "a") do |f|
      # 通用处理
      translate_troop_events(f, proc)
      translate_common_events(f, proc)
      # 处理特技公共事件
      s = false
      log = ""
      for skill in $data_skills
        if skill != nil
          if @mod_common_ids.has_key?(skill.common_event_id)
            s = true
            log += sprintf(" □ 特技 %s 的公共事件: %d -> %d\n", skill.name,
              skill.common_event_id, @mod_common_ids[skill.common_event_id])
            skill.common_event_id = @mod_common_ids[skill.common_event_id]
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 特技\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_skills, "Data/Skills.rxdata")
      end
      # 处理物品公共事件
      s = false
      log = ""
      for item in $data_items
        if item != nil
          if @mod_common_ids.has_key?(item.common_event_id)
            s = true
            log += sprintf(" □ 物品 %s 的公共事件: %d -> %d\n", item.name,
              item.common_event_id, @mod_common_ids[item.common_event_id])
            item.common_event_id = @mod_common_ids[item.common_event_id]
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 物品\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_items, "Data/Items.rxdata")
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新地图引用(公共事件)
  #--------------------------------------------------------------------------
  def reset_commons_in_maps
    proc = Proc.new {|c| reset_commons_in_command(c)}
    regexs = [/(\$data_common_events\[)([0-9]+)(\])/,
      /(common_event_id[ <=>!]+)([0-9]+)()/]
    File.open("DReorder.txt", "a") do |f|
      translate_map_events(f, proc, @mod_common_ids, regexs)
    end
  end
end
[/pre][/fold]
[fold=Data_Reorder (分割定义14) 属性数据][pre lang="ruby"]#==============================================================================
# ■ Data_Reorder (分割定义 14)
#------------------------------------------------------------------------------
#  数据库重排工具 by SailCat
#   该程序能够将数据库内容ID重新排列,包括插入空序列,紧密重排,交换,重设等
#==============================================================================
class Data_Reorder
  #--------------------------------------------------------------------------
  # ● 插入属性序号
  #     position: 插入位置
  #     count: 插入的数目
  #--------------------------------------------------------------------------
  def insert_element(position, count)
    # 初始化被修改的ID表
    @mod_element_ids.clear
    # 从最后一个开始
    element_id = $data_system.elements.size - 1
    # 循环每一个大于position的ID
    while element_id >= position
      element_name = $data_system.elements[element_id]
      # 如果该属性存在
      if element_name != nil
        $data_system.elements[element_id + count] = element_name
        $data_system.elements[element_id] = ""
        # 设置修改标记
        @mod_element_ids[element_id] = element_id + count
      end
      element_id -= 1
    end
    # 刷新属性ID的引用
    reset_elements
  end
  #--------------------------------------------------------------------------
  # ● 交换属性序号
  #     element_id1: 属性序号1
  #     element_id2: 属性序号2
  #--------------------------------------------------------------------------
  def swap_element(element_id1, element_id2)
    # 初始化被修改的ID表
    @mod_element_ids.clear
    # 取得2个属性
    element_name1 = $data_system.elements[element_id1]
    element_name2 = $data_system.elements[element_id2]
    # 两个属性都存在的情况下
    if element_name1 != nil and element_name2 != nil
      $data_system.elements[element_id1] = element_name2
      $data_system.elements[element_id2] = element_name1
      # 设置修改标记
      @mod_element_ids[element_id1] = element_id2
      @mod_element_ids[element_id2] = element_id1
    end
    # 刷新属性ID的引用
    reset_elements
  end
  #--------------------------------------------------------------------------
  # ● 设置新的属性序号
  #     old_element_ids: 原属性序号
  #     new_element_id: 新属性序号
  #--------------------------------------------------------------------------
  def set_element_id(old_element_ids, new_element_id)
    # 初始化被修改的ID表
    @mod_element_ids.clear
    # 单个调整的情况下,转换为区段调整
    if old_element_ids.is_a?(Integer)
      old_element_ids = old_element_ids..old_element_ids
    end
    offset = new_element_id - old_element_ids.first
    range = old_element_ids.last - old_element_ids.first
    range += 1 unless old_element_ids.exclude_end?
    return if offset == 0
    # 取得原属性
    element_names = $data_system.elements[old_element_ids].clone
    # 移位操作
    if offset > 0
      shift_range_before = old_element_ids.first + range...new_element_id + range
      shift_range_after = old_element_ids.first...new_element_id
    else
      shift_range_before = new_element_id...old_element_ids.first
      shift_range_after = new_element_id + range...old_element_ids.first + range
    end
    $data_system.elements[shift_range_after] = $data_system.elements[shift_range_before]
    new_element_ids = new_element_id...new_element_id + range
    $data_system.elements[new_element_ids] = element_names
    # 标记移位情况
    shift_range_before.each do |id|
      @mod_element_ids[id] = id + (offset > 0 ? -range: range)
    end
    old_element_ids.each do |id|
      @mod_element_ids[id] = id + offset
    end
    # 刷新属性ID的引用
    reset_elements
  end
  #--------------------------------------------------------------------------
  # ● 重排属性序号(从1开始连续排)
  #--------------------------------------------------------------------------
  def sort_element
    # 初始化被修改的ID表
    @mod_element_ids.clear
    # 从1开始
    new_element_id = 1
    # 循环每个ID
    for i in 1...$data_system.elements.size
      element_name = $data_system.elements
      # 如果该属性存在且不为空
      if element_name != nil and element_name != ""
        # 如果属性已经移位
        if i != new_element_id
          # 跟着前移
          $data_system.elements[new_element_id] = element_name
          # 设置修改标记
          @mod_element_ids = new_element_id
        end
        new_element_id += 1
      end
    end
    $data_system.elements.delete_at(new_element_id) until $data_system.elements.size == new_element_id
    # 刷新属性ID的引用
    reset_elements
  end
  #--------------------------------------------------------------------------
  # ● 扩展属性序号
  #     num: 新的属性个数
  #--------------------------------------------------------------------------
  def expand_element(num)
    l = $data_system.elements.size
    if l <= num
      for i in l..num
        $data_system.elements = ""
      end
      save_data($data_system, "Data/System.rxdata")
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新属性ID的引用
  #--------------------------------------------------------------------------
  def reset_elements
    # 刷新数据库引用
    reset_elements_in_database
    # 刷新地图引用
    reset_elements_in_maps
    # 保存修改
    save_data($data_system, "Data/System.rxdata")
  end
  #--------------------------------------------------------------------------
  # ● 刷新事件引用(属性)
  #     command: 指令
  #--------------------------------------------------------------------------
  def reset_elements_in_command(command)
    log = ""
    regex1 = /(\$data_system\.elements\[)([0-9]+)(\])/
    regex2 = /(\.element_rate\()([0-9]+)(\))/
    case command.code
    when 111 # 条件分歧
      if command.parameters[0] == 12 # 脚本
        log = translate_text(command.parameters[1], @mod_element_ids, regex1)
        log += translate_text(command.parameters[1], @mod_element_ids, regex2)
      end
      if log != ""
        log = sprintf("条件分歧:%s\n", log)
      end
    when 209 # 设置移动路线
      # 循环强制移动指令
      for movecommand in command.parameters[1].list
        # 脚本
        if movecommand.code == 45
          log = translate_text(movecommand.parameters[0], @mod_element_ids, regex1)
          log += translate_text(movecommand.parameters[0], @mod_element_ids, regex2)
        end
      end
      if log != ""
        log = sprintf("设置移动路线:%s\n", log)
      end
    when 355, 655 # 脚本
      log = translate_text(command.parameters[0], @mod_element_ids, regex1)
      log += translate_text(command.parameters[0], @mod_element_ids, regex2)
      if log != ""
        log = sprintf("脚本:%s\n", log)
      end
    end
    return log
  end
  #--------------------------------------------------------------------------
  # ● 刷新数据库引用(属性)
  #--------------------------------------------------------------------------
  def reset_elements_in_database
    proc = Proc.new {|c| reset_elements_in_command(c)}
    File.open("DReorder.txt", "a") do |f|
      # 通用处理
      translate_troop_events(f, proc)
      translate_common_events(f, proc)
      # 处理职业属性
      s = false
      log = ""
      for klass in $data_classes
        if klass != nil
          next if klass.element_ranks.xsize == 1
          original_element_ranks = klass.element_ranks.clone
          size = $data_system.elements.size
          klass.element_ranks.resize(size) if klass.element_ranks.xsize < size
          @mod_element_ids.each_key do |k|
            klass.element_ranks[k] = 3
          end
          @mod_element_ids.each do |k, v|
            s = true
            if original_element_ranks[k] != nil
              klass.element_ranks[v] = original_element_ranks[k]
            else
              klass.element_ranks[v] = 3
            end
          end
          klass.element_ranks.resize(size) if klass.element_ranks.xsize > size
          log += sprintf(" □ 职业 %s 的属性有效度已重排\n", klass.name) if s
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 职业\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_classes, "Data/Classes.rxdata")
      end
      # 处理特技属性
      s = false
      log = ""
      for skill in $data_skills
        if skill != nil
          for i in 0...skill.element_set.size
            if @mod_element_ids.has_key?(skill.element_set)
              s = true
              log += sprintf(" □ 特技 %s 的属性: %d -> %d\n", skill.name,
                skill.element_set, @mod_element_ids[skill.element_set])
              skill.element_set = @mod_element_ids[skill.element_set]
            end
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 特技\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_skills, "Data/Skills.rxdata")
      end
      # 处理物品属性
      s = false
      log = ""
      for item in $data_items
        if item != nil
          for i in 0...item.element_set.size
            if @mod_element_ids.has_key?(item.element_set)
              s = true
              log += sprintf(" □ 物品 %s 的属性: %d -> %d\n", item.name,
                item.element_set, @mod_element_ids[item.element_set])
              item.element_set = @mod_element_ids[item.element_set]
            end
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 物品\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_items, "Data/Items.rxdata")
      end
      # 处理武器属性
      s = false
      log = ""
      for weapon in $data_weapons
        if weapon != nil
          for i in 0...weapon.element_set.size
            if @mod_element_ids.has_key?(weapon.element_set)
              s = true
              log += sprintf(" □ 武器 %s 的属性: %d -> %d\n", weapon.name,
                weapon.element_set, @mod_element_ids[weapon.element_set])
              weapon.element_set = @mod_element_ids[weapon.element_set]
            end
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 武器\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_weapons, "Data/Weapons.rxdata")
      end
      # 处理防具属性
      s = false
      log = ""
      for armor in $data_armors
        if armor != nil
          for i in 0...armor.guard_element_set.size
            if @mod_element_ids.has_key?(armor.guard_element_set)
              s = true
              log += sprintf(" □ 防具 %s 的防御属性: %d -> %d\n", armor.name,
                armor.guard_element_set, @mod_element_ids[armor.guard_element_set])
              armor.guard_element_set = @mod_element_ids[armor.guard_element_set]
            end
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 防具\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_armors, "Data/armors.rxdata")
      end
      # 处理敌人属性
      s = false
      log = ""
      for enemy in $data_enemies
        if enemy != nil
          next if enemy.element_ranks.xsize == 1
          original_element_ranks = enemy.element_ranks.clone
          size = $data_system.elements.size
          enemy.element_ranks.resize(size) if enemy.element_ranks.xsize < size
          @mod_element_ids.each_key do |k|
            enemy.element_ranks[k] = 3
          end
          @mod_element_ids.each do |k, v|
            s = true
            if original_element_ranks[k]
              enemy.element_ranks[v] = original_element_ranks[k]
            else
              enemy.element_ranks[v] = 3
            end
          end
          enemy.element_ranks.resize(size) if enemy.element_ranks.xsize > size
          log += sprintf(" □ 敌人 %s 的属性有效度已重排\n", enemy.name) if s
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 敌人\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_enemies, "Data/Enemies.rxdata")
      end
      # 处理状态属性
      s = false
      log = ""
      for state in $data_states
        if state != nil
          for i in 0...state.guard_element_set.size
            if @mod_element_ids.has_key?(state.guard_element_set)
              s = true
              log += sprintf(" □ 状态 %s 的防御属性: %d -> %d\n", state.name,
                state.guard_element_set, @mod_element_ids[state.guard_element_set])
              state.guard_element_set = @mod_element_ids[state.guard_element_set]
            end
          end
        end
      end
      if s
        f.write("-----------------------------------------------------\n")
        f.write(" ■ 状态\n")
        f.write("-----------------------------------------------------\n")
        f.write(log)
        save_data($data_states, "Data/States.rxdata")
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新地图引用(属性)
  #--------------------------------------------------------------------------
  def reset_elements_in_maps
    proc = Proc.new {|c| reset_elements_in_command(c)}
    regexs = [/(\$data_system\.elements\[)([0-9]+)(\])/,
      /(\.element_rate\()([0-9]+)(\))/]
    File.open("DReorder.txt", "a") do |f|
      translate_map_events(f, proc, @mod_element_ids, regexs)
    end
  end
end
[/pre][/fold]

范例工程,可能有点小贵,支持下猫子吧,毕竟好几千行的代码和反复测试,不愿意下载就按我上面说的操作,实际上是一样的:
(友情提示,如果你只有一类或几类数据需要重排,你可以只插入分割定义1和那些类数据的分割定义,不过那样zap指令就不能用了)
Data Reorder.zip (253.56 KB, 下载次数: 107, 售价: 10 星屑)

点评

有前六弹的地址吗  发表于 2016-1-28 16:54

评分

参与人数 4星屑 +100 梦石 +1 赞 +2 收起 理由
u0113802 + 1 精品文章
小传子 + 1 + 1 精品文章
1105659784 + 15 我很赞同
kuerlulu + 85 围观前辈诈尸

查看全部评分

SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
梦石
0
星屑
12161
在线时间
4435 小时
注册时间
2014-4-11
回帖
5616

开拓者

发表于 2016-1-28 11:14:36 | 显示全部楼层
好东西。不久前刚吐槽了这个

点评

看到你的吐槽贴了,那就试试这个吧 我自己的200多张地图的游戏都用过了,整个调了一遍并未发现问题。  发表于 2016-1-28 11:38
回复

使用道具 举报

梦石
0
星屑
145
在线时间
190 小时
注册时间
2014-1-18
回帖
232
发表于 2016-4-17 16:34:48 | 显示全部楼层
挺希望有个开关来着的,为了让他清楚一点不得不弄很多空行,希望第四个功能可以有个开关
回复

使用道具 举报

梦石
0
星屑
77
在线时间
27 小时
注册时间
2022-4-18
回帖
3
发表于 2022-4-18 12:23:36 | 显示全部楼层
不知道怎么样,试试看
回复

使用道具 举报

梦石
0
星屑
25942
在线时间
151 小时
注册时间
2008-2-4
回帖
84
发表于 2023-6-23 08:21:43 | 显示全部楼层
支持下,哈哈
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部