赞 | 27 |
VIP | 400 |
好人卡 | 13 |
积分 | 17 |
经验 | 69730 |
最后登录 | 2023-6-12 |
在线时间 | 3038 小时 |
Lv3.寻梦者 (暗夜天使) 精灵族の天使
- 梦石
- 0
- 星屑
- 1697
- 在线时间
- 3038 小时
- 注册时间
- 2007-3-16
- 帖子
- 33731
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 精灵使者 于 2011-7-30 15:58 编辑
此脚本可以识别出是在XP,VX和RGE下运行,同时还可以判断版本号。
没有任何效果,仅留关键变量供其他脚本使用。如果使用的话请放到要使用脚本的上方。
更新日志:
2011年7月30日
v1.4更新
增加了其他版本不需要默认RTP的场合的处理。
v1.3更新
增加了默认RTP是否存在 DEF_RTP_EXIST
v1.2更新
更新了算法,使其更加明白清晰。
更改了常量入口的名字,防止误解
增添了新常量:NO_RTP来判定是否脱离RTP
v1.1更新
大幅度优化了代码,提高了计算效率。(感谢fux2)
修正了正式游戏中无法获取变量的BUG。(感谢⑨、FUX2和秋庭里香)
2011年7月28日
发布版本1.0
脚本如下:
- #############################################################################
- #
- # 检测运行环境脚本v1.4 by 精灵使者
- #
- # 感谢⑨ 忧雪君 fux2 秋庭里香 david50407 改进脚本
- #
- # 编码转换和寻找RTP 感谢 david50407
- #
- # 更新了其他的版本不需要RTP时候的场合判定。
- # 修正了正式游戏的时候无法正常判断常量的BUG。
- # 修正了常量名和规则,增添一个入口常量。
- # 添加了RTP是否存在,感谢david50407
- #
- # 常量名单有:
- # 操作版本 FAY::PLATFORM RMXP/RMVX/RGE/UNKNOWN
- # 版本号 FAY::PLATFORM_VER 版本号
- # DLL使用语言 FAY::DLL_LANGUAGE Japan/English
- # 测试开关 FAY::TESTMODE ON/OFF
- # RGSS版本 FAY::RGSS_VER RGSS/RGSS2/RGE/UNKNOWN
- # 是否脱离RTP FAY::NO_RTP YES/NO/NONEED
- # 对应的RTP是否存在 FAY::DEF_RTP_EXIST YES/NO/NONEED
- #
- #############################################################################
- #获取顶层变量
- KEY = self
- #==============================================================================
- # ■ String
- #------------------------------------------------------------------------------
- # 字符串类。可处理任意长度的字节串。 (追加编码转换的定义)
- #==============================================================================
- class String
- #--------------------------------------------------------------------------
- # ● 用来编码Ruby 字符串、解码unicode 的两个Windows API 函数
- #--------------------------------------------------------------------------
- @@MultiByteToWideChar = Win32API.new("kernel32", "MultiByteToWideChar", ['I', 'L', 'P', 'I', 'P', 'I'], 'I')
- @@WideCharToMultiByte = Win32API.new("kernel32", "WideCharToMultiByte", ['I', 'L', 'P', 'I', 'P', 'I', 'P', 'P'], 'I')
- #--------------------------------------------------------------------------
- # ● 返回将Ruby UTF-8 字符串对象(本身)编码为unicode 后的字符串
- #--------------------------------------------------------------------------
- def to_unicode
- len = @@MultiByteToWideChar.call(65001, 0, self, -1, 0, 0) << 1
- buf =" " * len
- # 65001: UTF-8 字符集编码(代码页)
- @@MultiByteToWideChar.call(65001, 0, self, -1, buf, len)
- return buf
- end
- #--------------------------------------------------------------------------
- # ● 返回将编码为unicode 的字符串对象(本身)解码为UTF-8 后的字符串
- #--------------------------------------------------------------------------
- def to_UTF8
- len = @@WideCharToMultiByte.call(65001, 0, self, -1, 0, 0, 0, 0)
- buf =" " * len
- @@WideCharToMultiByte.call(65001, 0, self, -1, buf, len, 0, 0)
- # 去掉'\0' 字符串结束符(因为转换之后仅仅用于Ruby 字符串)
- buf.slice!(-1, 1)
- return buf
- end
- end
- #============================================================================
- #
- # 检索RTP
- #
- #============================================================================
- #必要的API
- RegOpenKeyEx = Win32API.new('advapi32', 'RegOpenKeyEx', 'lpiip', 'l')
- RegQueryValueEx = Win32API.new('advapi32', 'RegQueryValueExW', 'lppppp', 'l')
- RegCloseKey = Win32API.new('advapi32', 'RegCloseKey', 'l', 'l')
- #寻找RTP (XP = RMXP,VX = RMVX)
-
- def findRTPs(value,*args)
- rtpexist = false
- hKey = ' '
- case value
- when "RMXP"
- RegOpenKeyEx.call(-2147483646, 'SOFTWARE\Enterbrain\RGSS\RTP', 0, 0x20019 | 0x0200, hKey)
- when "RMVX"
- RegOpenKeyEx.call(-2147483646, 'SOFTWARE\Enterbrain\RGSS2\RTP', 0, 0x20019 | 0x0200, hKey)
- end
- hKey = hKey.unpack('l')[0]
- for rtp in args
- data, cbData = ' ' * 32, [128].pack('l')
- RegQueryValueEx.call(hKey, rtp.to_unicode, 0, 0, data, cbData)
- rtpexist = (data == ' ' * 32) ? false : true
- end
- RegCloseKey.call(hKey)
- return rtpexist
- end
- #============================================================================
- #
- # 定义模块
- #
- #============================================================================
- module FAY
-
- #必要的API
- GetCommandLine = Win32API.new("kernel32.dll", "GetCommandLine","v","p")
- Readini = Win32API.new('kernel32.dll', 'GetPrivateProfileStringA', %w(p p p p l p),'l')
-
- #获取命令行和文件名
- @uw = File.basename(GetCommandLine.call()).gsub(/(.*)\"(.*)/){$1+$2}
- #读取测试状态
- @test = @uw.split()[1].nil? ? "null" : @uw.split()[1]
- #生成ini文件名
- @ini_name = @uw.split(".")[0] + ".ini"
- #从ini读取RGSSdll和RTP名称
- @library = "\0" * 256
- Readini.call('Game','Library','',@library,255,".\\"+@ini_name)
- @library.delete!("\0")
- @rtp = "\0" * 256
- Readini.call('Game','RTP','',@rtp,255,".\\"+@ini_name)
- @rtp.delete!("\0")
- @rtp1 = "\0" * 256
- Readini.call('Game','RTP1','',@rtp1,255,".\\"+@ini_name)
- @rtp1.delete!("\0")
- @rtp2 = "\0" * 256
- Readini.call('Game','RTP2','',@rtp2,255,".\\"+@ini_name)
- @rtp2.delete!("\0")
- @rtp3 = "\0" * 256
- Readini.call('Game','RTP3','',@rtp3,255,".\\"+@ini_name)
- @rtp3.delete!("\0")
- #获取文件参数
- @ver = (@library.split("RGSS")[1]).split(".")[0]
- verlist = {"J"=>"Japan","E"=>"English"}
- oslist = {"1"=>"RMXP","2"=>"RMVX"}
- PLATFORM = oslist[@ver[0,1]] ? oslist[@ver[0,1]] : (@ver[/RGE/] ? "RGE": "OTHER")
- PLATFORM_VER = @ver.insert(1, ".")[0,4]
- DLL_LANGUAGE = verlist[@ver[-1,1]] ? verlist[@ver[-1,1]] : (@ver[/RGE/] ? "Japan" : "UNKNOWN")
- #获取RTP是否脱离
- if PLATFORM == "RMXP"
- NO_RTP = (@rtp1 == "" and @rtp2 == "" and @rtp3 == "") ? "YES" : "NO"
- else
- if PLATFORM == "RMVX"
- NO_RTP = @rtp == "" ? "YES" : "NO"
- else
- NO_RTP = "NONEED"
- end
- end
- #测试模式
- TESTMODE = ((@test.split == ["test"] or @test.split == ["debug"])) ? "ON" : "OFF"
- #RGSS版本
- RGSS_VER = KEY ? "RGSS2" : (Module.constants.include?('RGE') ? "RGE" : "RGSS")
- #RTP检测
- @rtp_name = "Standard" if PLATFORM == "RMXP"
- @rtp_name = "RPGVX" if PLATFORM == "RMVX"
- if PLATFORM == "RMXP" or PLATFORM == "RMVX"
- DEF_RTP_EXIST = findRTPs(PLATFORM,@rtp_name) ? "YES" : "NO"
- else
- DEF_RTP_EXIST = "NONEED"
- end
- end
复制代码 可以用以下脚本测试常量:
- p "PLATFORM = " + FAY::PLATFORM,"PLATFORM_VER = " + FAY::PLATFORM_VER,"DLL_LANGUAGE = " +
- FAY::DLL_LANGUAGE,"TESTMODE = " + FAY::TESTMODE,"RGSS_VER = " + FAY::RGSS_VER, "NO_RTP = " +
- FAY::NO_RTP,"DEF_RTP_EXIST = " + FAY::DEF_RTP_EXIST
复制代码 |
|