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

Project1

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

[通用发布] 补丁/插件脚本嵌入工具

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1939
在线时间
403 小时
注册时间
2015-8-30
帖子
395
跳转到指定楼层
1
发表于 2017-8-20 11:54:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
  1. module ScriptPorter
  2.   SCRIPT_NAMES = []
  3.   SCRIPT_FILENAMES = ["Data/NewScript%03d.rvdata2", "Data/NewScript*.rvdata2"]
  4.   def self.filenames
  5.     Dir.glob(SCRIPT_FILENAMES[1])
  6.   end
  7.   def self.script_contents
  8.     $RGSS_SCRIPTS.select {|content| SCRIPT_NAMES.include?(content[1]) }
  9.   end
  10.   def self.scripts
  11.     script_contents.collect {|content| content[3].force_encoding("UTF-8") }
  12.   end
  13.   def self.next_filename
  14.     sprintf(SCRIPT_FILENAMES[0], filenames.size + 1)
  15.   end
  16.   def self.read_script(filename)
  17.     File.open(filename, "rb") {|file| Marshal.load(file) } rescue ""
  18.   end
  19.   def self.write_script(script)
  20.     File.open(next_filename, "wb") {|file| Marshal.dump(script, file) } rescue delete_file
  21.   end
  22.   def self.push_script(script)
  23.     imported_scripts.push(script)
  24.   end
  25.   def self.delete_file
  26.     filenames.each {|filename| File.delete(filename) rescue next }
  27.   end
  28.   def self.port_scripts
  29.     $TEST ? export_scripts : import_scripts
  30.   end
  31.   def self.export_scripts
  32.     scripts.each {|script| write_script(script) rescue delete_file }
  33.   end
  34.   def self.import_scripts
  35.     filenames.each {|filename| push_script(read_script(filename)) }
  36.   end
  37.   def self.imported_scripts
  38.     @imported_scripts ||= []
  39.   end
  40. end
复制代码

作用:在工程中调用,把新的脚本或者修改过的脚本的修改过的部分制作成多个文件,发行新版本的游戏的补丁时就不需要出现完整的Scripts.rvdata2(我这里用rvdata2是因为我通常用VA)了
使用:把ScriptPorter::SCRIPT_NAMES设为补丁脚本名字组成的数组,ScriptPorter::SCRIPT_FILENAMES设为补丁的文件名的数组,前面一个是sprintf格式的,后面一个的文件名中要把sprintf格式的字符(%xx)换成文件名通配符(*)。当你确定需要制作补丁的时候,且确保上一个版本的游戏已经包含上面这个模块,请在下面加一句
  1. ScriptPorter.port_scripts
复制代码
然后以DEBUG模式运行游戏。另外,为了使脚本补丁生效,你还需要在玩家手上的游戏(当然这是你第一次使用本嵌入工具的时候就要加入的东西,此后就不必理会了,因为玩家手上的游戏的Scripts.rvdata2永远不会变)里面出现这一句
  1. ScriptPorter.imported_scripts.each {|script| eval(script) }
复制代码
小仙女一枚~

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

2
发表于 2017-11-14 12:55:24 | 只看该作者
如果补丁是自己控制,那可以这样弄吗:玩家拿到的是一个基础的游戏档案,通过更新补丁获取新的游戏内容,这个补丁文件可以在更新时先解包,把新东西放进去以后再重新打包
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-21 22:22

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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