| 赞 | 343  | 
 
| VIP | 10 | 
 
| 好人卡 | 8 | 
 
| 积分 | 263 | 
 
| 经验 | 235776 | 
 
| 最后登录 | 2025-11-3 | 
 
| 在线时间 | 2365 小时 | 
 
 
 
 
 
Lv5.捕梦者 (版主) 遠航の猫咪 
	- 梦石
 - 3 
 
        - 星屑
 - 23275 
 
        - 在线时间
 - 2365 小时
 
        - 注册时间
 - 2005-10-15
 
        - 帖子
 - 1163
 
 
  
 
 | 
	
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员  
 
x
 
 本帖最后由 SailCat 于 2012-3-6 03:12 编辑  
 
猫儿的RGSS Assistant脚本第四弹——变量名交换工具 
不多说,上代码,功能见注释 
主要用于变量名搞乱了(相似功能的没放在一起)之后的整理重排 
- #==============================================================================
 
 - # ■ Variable_Swap
 
 - #------------------------------------------------------------------------------
 
 - #  变量互换工具 by SailCat
 
 - #   该程序能够互换两个变量的一切引用
 
 - #   使用说明:
 
 - #     插入本脚本到Game_Temp(注意:不是Main)之前后执行就可以,你也可以手工做:
 
 - #     vswap = Variable_Swap.new
 
 - #     vswap.swap(1, 2)  # 互换对变量1和变量2的所有引用
 
 - #     互换日志写在工程目录下的VSwap.txt文件里
 
 - #     Debug模式下运行的话,运行完后要关闭工程重新打开
 
 - #     注释掉第316,359,406行的语句可以仅输出日志而不修改游戏工程
 
 - #     注释掉第425行及以下的语句可以屏蔽这个功能,正常测试游戏
 
 - #==============================================================================
 
 - class Variable_Swap
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 初期化
 
 -   #--------------------------------------------------------------------------
 
 -   def initialize
 
 -     # 删除前次导出的文件
 
 -     if FileTest.exist?("VSwap.txt")
 
 -       File.delete("VSwap.txt")
 
 -     end
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 按事件内容交换变量
 
 -   #     command: 事件指令
 
 -   #     var_id1: 变量1 编号
 
 -   #     var_id2: 变量2 编号
 
 -   #--------------------------------------------------------------------------
 
 -   def swap_in_command(command, var_id1, var_id2)
 
 -     log = ""
 
 -     # 检查相关变量的指令
 
 -     case command.code
 
 -     when 101, 401 # 显示文章
 
 -       regex1 = /\\v\[#{var_id1}\]/
 
 -       regex2 = /\\v\[#{var_id2}\]/
 
 -       if command.parameters[0][regex1] != nil
 
 -         command.parameters[0].gsub!(regex1) { "\001" }
 
 -         log = sprintf(" 引用变量 %d -> %d", var_id1, var_id2)
 
 -       end
 
 -       if command.parameters[0][regex2] != nil
 
 -         command.parameters[0].gsub!(regex2) { "\\v[#{var_id1}]" }
 
 -         log += sprintf(" 引用变量 %d -> %d", var_id2, var_id1)
 
 -       end
 
 -       if command.parameters[0][/\001/] != nil
 
 -         command.parameters[0].gsub!(/\001/) { "\\v[#{var_id2}]" }
 
 -       end
 
 -       if log != "" 
 
 -         log = sprintf("显示文章:%s\n", log)
 
 -       end
 
 -     when 102 # 显示选择项
 
 -       regex1 = /\\v\[#{var_id1}\]/
 
 -       regex2 = /\\v\[#{var_id2}\]/
 
 -       for i in 0...command.parameters[0].size
 
 -         if command.parameters[0][i][regex1] != nil
 
 -           command.parameters[0][i].gsub!(regex1) { "\001" }
 
 -           log += sprintf(" 引用变量 %d -> %d", var_id1, var_id2)
 
 -         end
 
 -         if command.parameters[0][i][regex2] != nil
 
 -           command.parameters[0][i].gsub!(regex2) { "\\v[#{var_id1}]" }
 
 -           log += sprintf(" 引用变量 %d -> %d", var_id2, var_id1)
 
 -         end
 
 -         if command.parameters[0][i][/\001/] != nil
 
 -           command.parameters[0][i].gsub!(/\001/) { "\\v[#{var_id2}]" }
 
 -         end
 
 -       end
 
 -       if log != "" 
 
 -         log = sprintf("显示选择项:%s\n", log)
 
 -       end
 
 -     when 103, 105 # 输入数值,接受按键
 
 -       if command.parameters[0] == var_id1
 
 -         command.parameters[0] = var_id2
 
 -         log = sprintf("输入变量: %d -> %d\n", var_id1, var_id2)
 
 -       elsif command.parameters[0] == var_id2
 
 -         command.parameters[0] = var_id1
 
 -         log = sprintf("输入变量: %d -> %d\n", var_id2, var_id1)
 
 -       end
 
 -     when 111 # 分歧
 
 -       # 变量
 
 -       if command.parameters[0] == 1
 
 -         if command.parameters[1] == var_id1
 
 -           command.parameters[1] = var_id2
 
 -           log = sprintf(" 变量 %d -> %d", var_id1, var_id2)
 
 -         elsif command.parameters[1] == var_id2
 
 -           command.parameters[1] = var_id1
 
 -           log = sprintf(" 变量 %d -> %d", var_id2, var_id1)
 
 -         end
 
 -         if command.parameters[2] == 1
 
 -           if command.parameters[3] == var_id1
 
 -             command.parameters[3] = var_id2
 
 -             log += sprintf(" 参比变量 %d -> %d", var_id1, var_id2)
 
 -           elsif command.parameters[3] == var_id2
 
 -             command.parameters[3] = var_id1
 
 -             log += sprintf(" 参比变量 %d -> %d", var_id2, var_id1)
 
 -           end
 
 -         end
 
 -       # 脚本
 
 -       elsif command.parameters[0] == 12
 
 -         regex1 = /\$game_variables\[#{var_id1}\]/
 
 -         regex2 = /\$game_variables\[#{var_id2}\]/
 
 -         if command.parameters[1][regex1] != nil
 
 -           command.parameters[1].gsub!(regex1) { "\001" }
 
 -           log = sprintf(" 脚本变量 %d -> %d\n", var_id1, var_id2)
 
 -         end
 
 -         if command.parameters[1][regex2] != nil
 
 -           command.parameters[1].gsub!(regex2) { "$game_variables[#{var_id1}]" }
 
 -           log += sprintf(" 脚本变量 %d -> %d\n", var_id2, var_id1)
 
 -         end
 
 -         if command.parameters[1][/\001/] != nil
 
 -           command.parameters[1].gsub!(/\001/) { "$game_variables[#{var_id2}]" }
 
 -         end
 
 -       end
 
 -       if log != ""
 
 -         log = sprintf("条件分歧:%s\n", log)
 
 -       end
 
 -     when 122 # 变量操作
 
 -       # 只对单独操作的变量有效
 
 -       if command.parameters[0] == command.parameters[1]
 
 -         if command.parameters[0] == var_id1
 
 -           command.parameters[0] = var_id2
 
 -           command.parameters[1] = var_id2
 
 -           log = sprintf(" 元变量 %d -> %d", var_id1, var_id2)
 
 -         elsif command.parameters[0] == var_id2
 
 -           command.parameters[0] = var_id1
 
 -           command.parameters[1] = var_id1
 
 -           log = sprintf(" 元变量 %d -> %d", var_id2, var_id1)
 
 -         end
 
 -       end
 
 -       # 变量的引用
 
 -       if command.parameters[3] == 1
 
 -         if command.parameters[4] == var_id1
 
 -           command.parameters[4] = var_id2
 
 -           log += sprintf(" 引用变量 %d -> %d", var_id1, var_id2)
 
 -         elsif command.parameters[4] == var_id2
 
 -           command.parameters[4] = var_id1
 
 -           log += sprintf(" 引用变量 %d -> %d", var_id2, var_id1)
 
 -         end
 
 -       end
 
 -       if log != ""
 
 -         log = sprintf("变量操作:%s\n", log)
 
 -       end
 
 -     when 125 # 增减金钱
 
 -       # 使用变量指定的情况下
 
 -       if command.parameters[1] == 1 
 
 -         if command.parameters[2] == var_id1
 
 -           command.parameters[2] = var_id2
 
 -           log = sprintf("增减金钱: 数量 %d -> %d\n", var_id1, var_id2)
 
 -         elsif command.parameters[2] == var_id2
 
 -           command.parameters[2] = var_id1
 
 -           log = sprintf("增减金钱: 数量 %d -> %d\n", var_id2, var_id1)
 
 -         end
 
 -       end
 
 -     when 126, 127, 128 # 增减物品,武器,防具
 
 -       s = ["物品", "武器", "防具"][command.code-126]
 
 -       # 使用变量指定的情况下
 
 -       if command.parameters[2] == 1 
 
 -         if command.parameters[3] == var_id1
 
 -           command.parameters[3] = var_id2
 
 -           log = sprintf("增减%s: 数量 %d -> %d\n", s, var_id1, var_id2)
 
 -         elsif command.parameters[3] == var_id2
 
 -           command.parameters[3] = var_id1
 
 -           log = sprintf("增减%s: 数量 %d -> %d\n", s, var_id2, var_id1)
 
 -         end
 
 -       end
 
 -     when 201 # 场所移动
 
 -       # 使用变量指定的情况下
 
 -       if command.parameters[0] == 1 
 
 -         if command.parameters[1] == var_id1
 
 -           command.parameters[1] = var_id2
 
 -           log = sprintf(" 地图 %d -> %d", var_id1, var_id2)
 
 -         elsif command.parameters[1] == var_id2
 
 -           command.parameters[1] = var_id1
 
 -           log = sprintf(" 地图 %d -> %d", var_id2, var_id1)
 
 -         end
 
 -         if command.parameters[2] == var_id1
 
 -           command.parameters[2] = var_id2
 
 -           log += sprintf(" X坐标 %d -> %d", var_id1, var_id2)
 
 -         elsif command.parameters[2] == var_id2
 
 -           command.parameters[2] = var_id1
 
 -           log += sprintf(" X坐标 %d -> %d", var_id2, var_id1)
 
 -         end
 
 -         if command.parameters[3] == var_id1
 
 -           command.parameters[3] = var_id2
 
 -           log += sprintf(" Y坐标 %d -> %d", var_id1, var_id2)
 
 -         elsif command.parameters[3] == var_id2
 
 -           command.parameters[3] = var_id1
 
 -           log += sprintf(" Y坐标 %d -> %d", var_id2, var_id1)
 
 -         end
 
 -       end
 
 -       if log != ""
 
 -         log = sprintf("场所移动:%s\n", log)
 
 -       end
 
 -     when 202 # 设置事件位置
 
 -       # 使用变量指定的情况下
 
 -       if command.parameters[1] == 1 
 
 -         if command.parameters[2] == var_id1
 
 -           command.parameters[2] = var_id2
 
 -           log = sprintf(" X坐标 %d -> %d", var_id1, var_id2)
 
 -         elsif command.parameters[2] == var_id2
 
 -           command.parameters[2] = var_id1
 
 -           log = sprintf(" X坐标 %d -> %d", var_id2, var_id1)
 
 -         end
 
 -         if command.parameters[3] == var_id1
 
 -           command.parameters[3] = var_id2
 
 -           log += sprintf(" Y坐标 %d -> %d", var_id1, var_id2)
 
 -         elsif command.parameters[3] == var_id2
 
 -           command.parameters[3] = var_id1
 
 -           log += sprintf(" Y坐标 %d -> %d", var_id2, var_id1)
 
 -         end
 
 -       end
 
 -       if log != ""
 
 -         log = sprintf("设置事件位置:%s\n", log)
 
 -       end
 
 -     when 231, 232 # 显示图片,移动图片
 
 -       s = ["显示", "移动"][command.code-231]
 
 -       # 使用变量指定的情况下
 
 -       if command.parameters[3] == 1 
 
 -         if command.parameters[4] == var_id1
 
 -           command.parameters[4] = var_id2
 
 -           log = sprintf(" X坐标 %d -> %d", var_id1, var_id2)
 
 -         elsif command.parameters[4] == var_id2
 
 -           command.parameters[4] = var_id1
 
 -           log = sprintf(" X坐标 %d -> %d", var_id2, var_id1)
 
 -         end
 
 -         if command.parameters[5] == var_id1
 
 -           command.parameters[5] = var_id2
 
 -           log += sprintf(" Y坐标 %d -> %d", var_id1, var_id2)
 
 -         elsif command.parameters[5] == var_id2
 
 -           command.parameters[5] = var_id1
 
 -           log += sprintf(" Y坐标 %d -> %d", var_id2, var_id1)
 
 -         end
 
 -       end
 
 -       if log != ""
 
 -         log = sprintf("%s图片:%s\n", s, log)
 
 -       end
 
 -     when 355, 655 # 脚本
 
 -       regex1 = /\$game_variables\[#{var_id1}\]/
 
 -       regex2 = /\$game_variables\[#{var_id2}\]/
 
 -       if command.parameters[0][regex1] != nil
 
 -         command.parameters[0].gsub!(regex1) { "\001" }
 
 -         log = sprintf(" %d -> %d", var_id1, var_id2)
 
 -       end
 
 -       if command.parameters[0][regex2] != nil
 
 -         command.parameters[0].gsub!(regex2) { "$game_variables[#{var_id1}]" }
 
 -         log += sprintf(" %d -> %d", var_id2, var_id1)
 
 -       end
 
 -       if command.parameters[0][/\001/] != nil
 
 -         command.parameters[0].gsub!(/\001/) { "$game_variables[#{var_id2}]" }
 
 -       end
 
 -       if log != ""
 
 -         log = sprintf("脚本:%s\n", log)
 
 -       end
 
 -     end
 
 -     return log
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 执行地图变量交换
 
 -   #     map_id: 地图ID
 
 -   #     var_id1: 变量1 编号
 
 -   #     var_id2: 变量2 编号
 
 -   #--------------------------------------------------------------------------
 
 -   def swap_in_map(map_id, var_id1, var_id2)
 
 -     File.open("VSwap.txt", "a") do |f|
 
 -       map_name = sprintf("Data/Map%03d.rxdata", map_id)
 
 -       if FileTest.exist?(map_name)
 
 -         # 载入当前地图
 
 -         map = load_data(map_name)
 
 -         s = false
 
 -         # 循环地图中所有事件
 
 -         for i in 1..999
 
 -           event = map.events[i]
 
 -           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.condition.variable_valid
 
 -                 # 交换变量
 
 -                 if page.condition.variable_id == var_id1
 
 -                   t = true
 
 -                   page.condition.variable_id = var_id2
 
 -                   log += sprintf("    页 %d: 条件引用变量 %d -> %d\n", page_id,
 
 -                     var_id1, var_id2)
 
 -                 elsif page.condition.variable_id == var_id2
 
 -                   t = true
 
 -                   page.condition.variable_id = var_id1
 
 -                   log += sprintf("    页 %d: 条件引用变量 %d -> %d\n", page_id,
 
 -                     var_id2, var_id1)
 
 -                 end
 
 -               end
 
 -               # 如果指令不为空
 
 -               if page.list.length > 0
 
 -                 # 循环页的所有指令
 
 -                 page.list.each do |command|
 
 -                   vlog = swap_in_command(command, var_id1, var_id2)
 
 -                   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)
 
 -               save_data(map, map_name)
 
 -             end
 
 -           end
 
 -         end
 
 -       end
 
 -     end
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 执行公共变量交换
 
 -   #     var_id1: 变量1 编号
 
 -   #     var_id2: 变量2 编号
 
 -   #--------------------------------------------------------------------------
 
 -   def swap_in_common(var_id1, var_id2)
 
 -     File.open("VSwap.txt", "a") do |f|
 
 -       # 载入公共事件
 
 -       common_events = load_data("Data/CommonEvents.rxdata")
 
 -       s = false
 
 -       # 循环每个事件
 
 -       for i in 1...common_events.size
 
 -         event = common_events[i]
 
 -         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 = swap_in_command(command, var_id1, var_id2)
 
 -               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)
 
 -             save_data(common_events, "Data/CommonEvents.rxdata")
 
 -           end
 
 -         end
 
 -       end
 
 -     end
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 执行战斗变量交换
 
 -   #     var_id1: 变量1 编号
 
 -   #     var_id2: 变量2 编号
 
 -   #--------------------------------------------------------------------------
 
 -   def swap_in_troops(var_id1, var_id2)
 
 -     File.open("VSwap.txt", "a") do |f|
 
 -       # 载入战斗事件
 
 -       troops = load_data("Data/Troops.rxdata")
 
 -       s = false
 
 -       # 循环地图中所有事件
 
 -       for i in 1..troops.size
 
 -         troop = troops[i]
 
 -         if troop != nil
 
 -           t = false
 
 -           log = sprintf(" □ 队伍 %d: %s \n", troop.id, troop.name)
 
 -           # 循环事件的每一页
 
 -           page_id = 0
 
 -           troop.pages.each do |page|
 
 -             page_id += 1
 
 -             # 如果指令不为空
 
 -             if page.list.length > 0
 
 -               # 循环页的所有指令
 
 -               page.list.each do |command|
 
 -                 vlog = swap_in_command(command, var_id1, var_id2)
 
 -                 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)
 
 -             save_data(troops, "Data/Troops.rxdata")
 
 -           end
 
 -         end
 
 -       end
 
 -     end
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 批量交换变量
 
 -   #     var_id1: 变量1 编号
 
 -   #     var_id2: 变量2 编号
 
 -   #--------------------------------------------------------------------------
 
 -   def swap(var_id1, var_id2)
 
 -     for map_id in 1..999
 
 -       swap_in_map(map_id, var_id1, var_id2)
 
 -     end
 
 -     swap_in_common(var_id1, var_id2)
 
 -     swap_in_troops(var_id1, var_id2)
 
 -   end
 
 - end
 
 - #vswap = Variable_Swap.new
 
 - #vswap.swap(1, 2)
 
 - #exit
 
 
  复制代码 |   
 
评分
- 
查看全部评分
 
 
 
 
 
 |