设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3831|回复: 18
打印 上一主题 下一主题

[已经解决] 公共事件是保存在 .rxdata 文件里吗?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2013-7-24
帖子
67
跳转到指定楼层
1
发表于 2015-2-21 07:25:45 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
比如我想给一个游戏做MOD/补丁,需要做一些新的公共事件,然后把这些新做的公共事件打包,给别人,别人就可以给自己的游戏打补丁,而不需要我到别人的电脑上再去重新做那些公共事件

请问这个如何实现?

Lv1.梦旅人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2013-7-24
帖子
67
19
 楼主| 发表于 2015-2-21 13:29:29 | 只看该作者
本帖最后由 cimmy210 于 2015-2-21 13:33 编辑
RyanBern 发表于 2015-2-21 12:52
导出公共事件到一个文件中(按照事件的ID):
def export_common_event(event_id)
  event = $data_commo ...


例如,如果 MyNewEvents.rxdata 中存有我新做的公共事件,现在要把它整合进 Data/CommonEventsBackup.rxdata 文件里去,能做到吗?

如果多人做了多个新增事件,命名为:MyNewEvents1.rxdata、MyNewEvents2.rxdata、MyNewEvents3.rxdata 等,要把它们全部整合进原版的 Data/CommonEventsBackup.rxdata 文件里去,怎么弄?

其实,如果事件编辑器里可以 右键 --> Export / Import,就不用这么麻烦了...

点评

新工程的作用只是用来保存。编辑和测试什么的,还要在原版工程进行。  发表于 2015-2-21 13:47
新开一个工程,导出的时候,从你原有的工程里面复制过去。导入的时候,打开那个新工程,把它复制回你的原版工程继续编辑测试即可  发表于 2015-2-21 13:46
哦,谢谢~  发表于 2015-2-21 13:45
我想把自己新做的事件,和原版的事件分开保存,需要时可以导入/导出。  发表于 2015-2-21 13:42
可以啊,不试试你怎么知道不可以呢?  发表于 2015-2-21 13:41
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2013-7-24
帖子
67
18
 楼主| 发表于 2015-2-21 13:04:54 | 只看该作者
本帖最后由 cimmy210 于 2015-2-21 13:07 编辑
RyanBern 发表于 2015-2-21 12:52
导出公共事件到一个文件中(按照事件的ID):
def export_common_event(event_id)
  event = $data_commo ...


这个能导出单个事件吗?能否再给个导入事件的函数?

有了导出/导入单个事件的函数,就不需要把 CommonEvents.rxdata 改名那种方法了。
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

17
发表于 2015-2-21 12:52:35 | 只看该作者
cimmy210 发表于 2015-2-21 12:40
果然无法提取/备份单独一个公共事件?所以只能建议我用纯脚本了?

导出公共事件到一个文件中(按照事件的ID):
RUBY 代码复制
  1. def export_common_event(event_id)
  2.   event = $data_common_events[event_id]
  3.   return if event == nil
  4.   data = load_data("Data/CommonEventsBackup.rxdata") # 要求事先建立好一个文件,文件里面存的是一个Array
  5.   data << event
  6.   file = File.open("Data/CommonEventsBackup.rxdata", "wb")
  7.   marshal.dump(data, file)
  8.   file.close
  9. end

这样导出的公共事件的ID再导入回去要重新设置。

点评

能否把导出的事件转译成 RGSS1 明文?  发表于 2015-2-21 13:12
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2013-7-24
帖子
67
16
 楼主| 发表于 2015-2-21 12:52:20 | 只看该作者
RyanBern 发表于 2015-2-21 12:29
思路可以这样,如果想用公共事件导入DLC或者MOD什么的,也不是不可以。因为原版的游戏已经有了CommonEvents ...

用公共事件编辑器做的事件,会自动保存在 CommonEvents.rxdata 文件里呀,怎么让它保存到别的文件里?

点评

自动保存没关系,做好了之后,复制一下这个文件,改名,然后放到Mods文件夹里面  发表于 2015-2-21 12:53
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2013-7-24
帖子
67
15
 楼主| 发表于 2015-2-21 12:48:39 | 只看该作者
taroxd 发表于 2015-2-21 12:19
把那一个指令的实现理解了,你也就会写了

还是参考之前给你的事件转译器脚本 ...

事件转译器的 DEBUG 模式输出的现成代码,是 RGSS3 吧?RMXP 不能用啊?

点评

思路一致,可以参考  发表于 2015-2-21 12:57
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2013-7-24
帖子
67
14
 楼主| 发表于 2015-2-21 12:40:56 | 只看该作者
taroxd 发表于 2015-2-21 12:01
不使用、模拟事件,直接用纯脚本可能会更快,更好

果然无法提取/备份单独一个公共事件?所以只能建议我用纯脚本了?

点评

12L给出了方法  发表于 2015-2-21 12:47
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

13
发表于 2015-2-21 12:32:28 | 只看该作者
RyanBern 发表于 2015-2-21 12:29
思路可以这样,如果想用公共事件导入DLC或者MOD什么的,也不是不可以。因为原版的游戏已经有了CommonEvents ...

还需要保存事件设置。可以从公共事件中直接导出

或者,可以在调用公共事件时,将子事件解释器的 list 设为读取出来的东西也行哦~ 这就不怕 id 冲突了

点评

是啊- -  发表于 2015-2-21 12:37
其实我也不知道LZ要这功能是干啥,感觉用公共事件导入很奇怪  发表于 2015-2-21 12:35
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

12
发表于 2015-2-21 12:29:07 | 只看该作者
本帖最后由 RyanBern 于 2015-2-21 13:32 编辑

思路可以这样,如果想用公共事件导入DLC或者MOD什么的,也不是不可以。因为原版的游戏已经有了CommonEvents.rxdata,所以你新做的东西覆盖过去肯定是不行的。因此必须要新开一个文件来储存新的公共事件。
然后就是文件导入问题,由于$data_common_events在游戏开始时候导入,所以你可以在导入$data_common_events的时候把自己新增的东西一起添加到游戏里面的$data_common_events中去。
1.在游戏目录下新建一个文件夹(文件夹名字为Mods),专门负责放置各种做好的公共事件数据文件,当然,名字不能一样,不过要保证里面的东西是公共事件。
2.在Scene_Title里面的$data_common_events = load_data("Data/CommonEvents.rxdata")后面增加导入MOD的代码。
3.导入mod的代码可以考虑这样:
RUBY 代码复制
  1. Dir.foreach("./Mods") do |filename|
  2.   next if filename == "." || filename == ".."
  3.   common_evs = load_data("Mods/#{filename}")
  4.   common_evs.each do |ev|
  5.     if ev != nil && ev.name != ""
  6.       $data_common_events[ev.id] = ev
  7.     end
  8.   end
  9. end

这样就可以导入所有公共事件,不过如果多人对同一ID的公共事件定义时,会产生冲突。
另外,这样定义的附加公共事件,不加处理是不能在RMXP中读取的,打开RMXP看到的仍然是原游戏的公共事件。


我详细说一下使用方法。
1.先准备上面那个脚本,把它弄到Scene_Title里面。

2.在一个工程1里面建立一个公共事件,然后在地图上调用这个公共事件。


3.新开一个工程2,在工程2里面同样的位置建立公共事件。保存。

4.找到工程2的Data文件夹里面的CommonEvents.rxdata,把它复制到工程1的Mods文件夹下(不存在的话新建之),然后改个名字。

5.运行工程1的游戏,激活事件,你会发现事件使用的是工程2里面的mod公共事件。

6.将复制的文件删除,再进入工程1的游戏,激活事件,你会发现事件使用的是工程1里面的公共事件了。

7.再开一个工程3,在工程3里面建立一个2号公共事件,保存。

8.再把工程3的公共事件数据复制到工程1的Mods文件夹下,改个不一样的名字。

9.工程1里面需要有地方调用2号公共事件,现在工程1里面的2号公共事件是空的。
10.运行工程1的游戏,激活事件,看到效果。


点评

可以啊,不过新增的事件不能和原有的事件位置相同。比如一个人负责做1号事件,另一个人负责做2号事件。完全可以导入啊  发表于 2015-2-21 13:23
不是要覆盖,是要新增事件呢?而且新增的事件由多人完成,如何把多人的工作整合在一起?  发表于 2015-2-21 13:21
多人一起做新事件的话倒不是什么困难的事情,因为每个人都需要一个原版的程序才能调试,做好事件之后,用这种方法导入到游戏里面即可  发表于 2015-2-21 13:15
是否新建一个工程,然后做个全新的 CommonEvents.rxdata 文件?但调试起来不方便啊........  发表于 2015-2-21 13:09
把新的 CommonEvents.rxdata 改个名字放别处?那如果多人一起做新事件呢?如何把各人新做的事件整合起来?  发表于 2015-2-21 12:58
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
9 小时
注册时间
2013-7-24
帖子
67
11
 楼主| 发表于 2015-2-21 12:28:19 | 只看该作者
话说,提取/备份某一公共事件的方法,貌似是没有了?
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-27 10:31

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表