赞 | 4 |
VIP | 211 |
好人卡 | 175 |
积分 | 7 |
经验 | 48096 |
最后登录 | 2014-1-9 |
在线时间 | 1327 小时 |
Lv2.观梦者 (?????)
- 梦石
- 0
- 星屑
- 728
- 在线时间
- 1327 小时
- 注册时间
- 2011-7-18
- 帖子
- 3184
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 各种压力的猫君 于 2011-12-13 17:06 编辑
【原型版本在6L】- #==============================================================================
- # ■ VX Ace -> XP/VX RGSS_VERSION常量 v1.2 by 各种压力的猫君 @ 66RPG
- #------------------------------------------------------------------------------
- # 为XP/VX追加RGSS_VERSION常量
- # 同时追加RGSS_VER常量(纯数字版本号,亦可用于VA)
- #------------------------------------------------------------------------------
- # 可以在全局变量$neko_tec_rgss_version获取处理结果:
- # done 成功结束
- # error 异常结束(获取一位模糊值)
- # failed 处理失败
- #------------------------------------------------------------------------------
- # 更新记录:
- # 2011-12-13 v1.2 自动获取进程名(感谢灼眼的夏娜 @ 66RPG)
- # 2011-12-13 v1.1 追加异常处理
- # 2011-12-13 v1.0 读取ini获取精确版本号(感谢 goahead @ 66RPG)
- # 2011-12-13 γ 原型版本
- #==============================================================================
- begin
- unless $neko_tec_rgss_version == "done"
- # 声明Win32API,获取进程名(感谢 灼眼的夏娜 @ 66RPG)
- getmodulefilename = Win32API.new 'kernel32','GetModuleFileNameA',%w(l p l),'l'
- # 建立缓冲区
- temp = "\0" * 666
- # 调用API
- getmodulefilename.call(0,temp,666)
- # 清除多余内容
- temp.delete!("\0")
- # 分离文件名
- filename = File.basename(temp,".exe")
- # 生成ini文件名
- ini_filename = ".\\" + filename + ".ini"
- # 声明Win32API,读取ini(感谢 goahead @ 66RPG)
- getprivateprofilestring = Win32API.new 'kernel32','GetPrivateProfileStringA',%w(p p p p l p),'l'
- # 建立缓冲区
- temp = "\0" * 66
- # 调用API
- getprivateprofilestring.call('Game','Library','',temp,66,ini_filename)
- # 清除多余内容
- temp.delete!("\0")
- # 生成版本号字符串及数组
- temp_string = temp[/\d../]
- temp_array = temp_string.scan(/\d/)
- # 生成RGSS_VERSION
- rgss_version = temp_array[0] + "." + temp_array[1] + "." + temp_array[2]
- # 写入常量
- RGSS_VER = temp_string
- RGSS_VERSION = rgss_version unless defined? RGSS_VERSION
- # 成功结束标记
- $neko_tec_rgss_version = "done"
- end
- rescue
- begin
- # 若以上脚本发生异常则通过RUBY_VERSION和$TEMP判断
- # 此时RGSS_VER和RGSS_VERSION均只会返回一位模糊数值
- unless $neko_tec_rgss_version == "error"
- if RUBY_VERSION == "1.9.2"
- rescue_ver = 3
- elsif defined? $TEST
- rescue_ver = 2
- else
- rescue_ver = 1
- end
- # 写入常量
- RGSS_VER = rescue_ver
- RGSS_VERSION = rescue_ver unless defined? RGSS_VERSION
- # 异常结束标记
- $neko_tec_rgss_version = "error"
- end
- rescue
- # 失败标记
- $neko_tec_rgss_version = "failed"
- end
- end
复制代码 根据game.ini(如果你游戏改名了在脚本第13行自行修改)<-有没有API能直接判断运行时游戏进程名?望指教
↑v1.2:采用Win32API直接获取进程名,感谢万能的夏娜大 >V<
里Library记录的dll文件名生成RGSS_VERSION常量。
例:RPG MAKER 版本 | RGSS_VER | RGSS_VERSION | RGSS_VER(异常) | RGSS_VERSION(异常) | RMXP1.02 | 102 | 1.0.2 | 1 | 1 | RMXP1.03 | 103 | 1.0.3 | 1 | 1 | RMVX1.02 | 202 | 2.0.2 | 2 | 2 | RMVA1.00 trail | 300 | 3.0.0(缺省值) | 3 | 3.0.0(缺省值) |
如果用在VA上只会追加RGSS_VER常量,其余同理不再一一列举了。
本脚本正常运行的前提是dll文件名没有被乱改(只要文件名里的数字没被改就OK)
↑v1.1:当通过dll文件名获取失败时会通过RUBY_VERSION和$TEST利用排除法进行模糊判断,返回值一位数。
经过这脚本的编写过程对API的恐惧终于下降了点…… |
|