地图事件重排工具
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 endend#--------------------------------------------------------------------------# ● 插入事件序号# position: 插入位置# count: 插入的数目#--------------------------------------------------------------------------def insert(position, count) # 初始化被修改的事件ID表 @modified_ids = {} # 从999开始 event_id = 999 # 循环每一个大于position的事件ID while event_id >= position event = @map.events # 如果该事件存在 if event != nil # 如果无法插入就报错返回 if event_id > 999 - count print "该地图的事件太多,无法插入编号" return end # 设置插入后的事件ID event.id = event_id + count @map.events = event @map.events.delete(event_id) # 设置修改标记 @modified_ids = event_id + count end event_id -= 1 end # 刷新事件ID的引用 reset_commandsend#--------------------------------------------------------------------------# ● 重排事件序号(从1开始连续排)#--------------------------------------------------------------------------def sort # 初始化被修改的事件ID表 @modified_ids = {} # 从1开始 event_id = 1 new_event_id = 1 # 循环每个事件ID while event_id < 999 event = @map.events # 如果该事件存在 if event != nil # 如果前面已经移位 if event_id != new_event_id # 跟着前移 event.id = new_event_id @map.events = event @map.events.delete(event_id) # 设置修改标记 @modified_ids = new_event_id end new_event_id += 1 end event_id += 1 end # 刷新事件ID的引用 reset_commandsend#--------------------------------------------------------------------------# ● 交换事件序号# 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.clone event2 = @map.events.clone # 互换ID event1.id = event_id2 event2.id = event_id1 # 互换事件 @map.events = event2 @map.events = event1 # 设置修改标记 @modified_ids = event_id2 @modified_ids = event_id1 # 刷新事件ID的引用 reset_commands endend#--------------------------------------------------------------------------# ● 设置新的事件序号# 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 event.id = new_event_id @map.events = event @map.events.delete(old_event_id) # 设置修改标记 @modified_ids = new_event_id # 刷新事件ID的引用 reset_commands # 两个事件同时存在的情况下 else # 按交换处理 swap_event(old_event_id, new_event_id) end endend#--------------------------------------------------------------------------# ● 根据排序结果,重设本地图所有事件中对事件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 when 6 # 角色 if @modified_ids.has_key?(command.parameters) command.parameters = @modified_ids] end when 12 # 脚本 # 暂不支持 end when 122 # 变量操作 if command.parameters == 6 and @modified_ids.has_key?(command.parameters) command.parameters = @modified_ids] end when 202 # 设置事件位置 if @modified_ids.has_key?(command.parameters) command.parameters = @modified_ids] end if command.parameters == 2 and @modified_ids.has_key?(command.parameters) command.parameters = @modified_ids] end when 207, 209 # 显示动画, 强制移动 if @modified_ids.has_key?(command.parameters) command.parameters = @modified_ids] end when 355, 655 # 脚本 # 暂不支持 end end end end endend#--------------------------------------------------------------------------# ● 保存地图#--------------------------------------------------------------------------def save if @map_name != "" save_data(@map, @map_name) endendend复制代码
本帖来自P1论坛作者DeathKing,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=142148若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页:
[1]