赞 | 342 |
VIP | 10 |
好人卡 | 8 |
积分 | 262 |
经验 | 235776 |
最后登录 | 2024-12-26 |
在线时间 | 2388 小时 |
Lv5.捕梦者 (版主) 遠航の猫咪
- 梦石
- 3
- 星屑
- 23219
- 在线时间
- 2388 小时
- 注册时间
- 2005-10-15
- 帖子
- 1167
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
cat之RGSS Assistant脚本第三弹:地图事件重排工具
RM给地图生成事件的时候,是自动从1开始顺序编号的
但在制作过程中,如果有删除了某个事件,又添加了其他的事件,会导致事件ID变的乱七八糟
再一个,比如原来的地图,觉得空,想加一些NPC,结果加的NPC编号都很靠后,和原来的事件都不在一起,找起来非常麻烦。
本脚本可以一定程度上解决这个问题,借用这个脚本,你可以很方便的安排事件的ID,按用途整理到一起,最后还能恢复到从1开始的紧密序号。
后续将推出,数据库(魔法、武器、防具、属性、状态、开关、变量)通用重排工具,敬请关注。- #==============================================================================
- # ■ Event_Reorder
- #------------------------------------------------------------------------------
- # 地图事件重排工具 by SailCat
- # 该程序能够将地图中的事件ID重新排列,包括插入空序列,紧密重排,交换,重设等
- # 使用说明:
- # 插入本脚本到Game_Temp(注意:不是Main)之前,然后在最后一行后面加上你需要的
- # 指令代码。
- # order = Event_Reorder.new
- # order.load(15) # 载入第15张地图
- # order.insert(12, 14) # 在事件ID12之前插入14个空事件,即1,2...11,26,27...
- # order.sort # 将事件ID从1开始紧密排列,原有顺序不变
- # order.swap_event(33, 99) # 将事件33和99的ID互换,内容不变
- # order.set_event_id(33, 99) # 将事件33的ID设为99,内容不变
- # order.save # 保存修改后的地图
- # 备注:
- # 1. 这个功能原本很简单,大段的代码都是用来保证ID重设后已有的逻辑不改变,但
- # 目前这个版本还不支持事件脚本中对事件ID的引用,请先备份已有地图。
- # 2. 修改后请关闭工程重新打开。
- # 3. 用完后请将你添加的指令代码全部删掉或注释掉,以正常测试游戏。
- #==============================================================================
- class Event_Reorder
- #--------------------------------------------------------------------------
- # ● 初期化
- #--------------------------------------------------------------------------
- def initialize
- # 初始化地图和文件名信息
- @map = nil
- @map_name = ""
- # 初始化被修改的事件ID表
- @modified_ids = {}
- end
- #--------------------------------------------------------------------------
- # ● 载入地图
- # map_id: 地图ID
- #--------------------------------------------------------------------------
- def load(map_id)
- @map_name = sprintf("Data/Map%03d.rxdata", map_id)
- # 载入当前地图
- if FileTest.exist?(@map_name)
- @map = load_data(@map_name)
- else
- print "地图ID错误"
- exit
- end
- end
- #--------------------------------------------------------------------------
- # ● 插入事件序号
- # position: 插入位置
- # count: 插入的数目
- #--------------------------------------------------------------------------
- def insert(position, count)
- # 初始化被修改的事件ID表
- @modified_ids = {}
- # 从999开始
- event_id = 999
- # 循环每一个大于position的事件ID
- while event_id >= position
- event = @map.events[event_id]
- # 如果该事件存在
- if event != nil
- # 如果无法插入就报错返回
- if event_id > 999 - count
- print "该地图的事件太多,无法插入编号"
- return
- end
- # 设置插入后的事件ID
- event.id = event_id + count
- @map.events[event_id + count] = event
- @map.events.delete(event_id)
- # 设置修改标记
- @modified_ids[event_id] = event_id + count
- end
- event_id -= 1
- end
- # 刷新事件ID的引用
- reset_commands
- end
- #--------------------------------------------------------------------------
- # ● 重排事件序号(从1开始连续排)
- #--------------------------------------------------------------------------
- def sort
- # 初始化被修改的事件ID表
- @modified_ids = {}
- # 从1开始
- event_id = 1
- new_event_id = 1
- # 循环每个事件ID
- while event_id < 999
- event = @map.events[event_id]
- # 如果该事件存在
- if event != nil
- # 如果前面已经移位
- if event_id != new_event_id
- # 跟着前移
- event.id = new_event_id
- @map.events[new_event_id] = event
- @map.events.delete(event_id)
- # 设置修改标记
- @modified_ids[event_id] = new_event_id
- end
- new_event_id += 1
- end
- event_id += 1
- end
- # 刷新事件ID的引用
- reset_commands
- end
- #--------------------------------------------------------------------------
- # ● 交换事件序号
- # event_id1: 事件序号1
- # event_id2: 事件序号2
- #--------------------------------------------------------------------------
- def swap_event(event_id1, event_id2)
- # 初始化被修改的事件ID表
- @modified_ids = {}
- # 如果两个事件都存在
- if @map.events.has_key?(event_id1) and @map.events.has_key?(event_id2)
- # 取得2个事件
- event1 = @map.events[event_id1].clone
- event2 = @map.events[event_id2].clone
- # 互换ID
- event1.id = event_id2
- event2.id = event_id1
- # 互换事件
- @map.events[event_id1] = event2
- @map.events[event_id2] = event1
- # 设置修改标记
- @modified_ids[event_id1] = event_id2
- @modified_ids[event_id2] = event_id1
- # 刷新事件ID的引用
- reset_commands
- end
- end
- #--------------------------------------------------------------------------
- # ● 设置新的事件序号
- # old_event_id: 原事件序号
- # new_event_id: 新事件序号
- #--------------------------------------------------------------------------
- def set_event_id(old_event_id, new_event_id)
- # 初始化被修改的事件ID表
- @modified_ids = {}
- # 如果源ID存在而目标ID不存在
- if @map.events.has_key?(old_event_id)
- unless @map.events.has_key?(new_event_id)
- # 更改事件ID
- event = @map.events[old_event_id]
- event.id = new_event_id
- @map.events[new_event_id] = event
- @map.events.delete(old_event_id)
- # 设置修改标记
- @modified_ids[old_event_id] = new_event_id
- # 刷新事件ID的引用
- reset_commands
- # 两个事件同时存在的情况下
- else
- # 按交换处理
- swap_event(old_event_id, new_event_id)
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 根据排序结果,重设本地图所有事件中对事件ID的引用
- #--------------------------------------------------------------------------
- def reset_commands
- @map.events.each_value do |value|
- value.pages.each do |page|
- # 如果指令不为空
- if page.list.length > 0
- # 循环页的所有指令
- page.list.each do |command|
- # 检查需要重新设置事件ID的指令
- case command.code
- when 111 # 条件分歧
- case command.parameters[0]
- when 6 # 角色
- if @modified_ids.has_key?(command.parameters[1])
- command.parameters[1] = @modified_ids[command.parameters[1]]
- end
- when 12 # 脚本
- # 暂不支持
- end
- when 122 # 变量操作
- if command.parameters[3] == 6 and
- @modified_ids.has_key?(command.parameters[4])
- command.parameters[4] = @modified_ids[command.parameters[4]]
- end
- when 202 # 设置事件位置
- if @modified_ids.has_key?(command.parameters[0])
- command.parameters[0] = @modified_ids[command.parameters[0]]
- end
- if command.parameters[1] == 2 and
- @modified_ids.has_key?(command.parameters[2])
- command.parameters[2] = @modified_ids[command.parameters[2]]
- end
- when 207, 209 # 显示动画, 强制移动
- if @modified_ids.has_key?(command.parameters[0])
- command.parameters[0] = @modified_ids[command.parameters[0]]
- end
- when 355, 655 # 脚本
- # 暂不支持
- end
- end
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 保存地图
- #--------------------------------------------------------------------------
- def save
- if @map_name != ""
- save_data(@map, @map_name)
- end
- end
- end
复制代码 |
|