- 累计送礼:
- 0 个
- 累计收礼:
- 0 个
TA的每日心情 | 开心 昨天 18:01 |
---|
签到天数: 114 天 连续签到: 4 天 [LV.6]常住居民II

管理员
  
- VIP
- 6
- 卡币
- 10632
- OK点
- 16
- 推广点
- 0
- 同能卷
- 0
- 积分
- 13401


|
猫儿的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) endend#vswap = Variable_Swap.new#vswap.swap(1, 2)#exit复制代码
复制代码 本帖来自P1论坛作者各种压力的猫君,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址: https://rpg.blue/forum.php?mod=viewthread&tid=224469 若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。 |
|