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

Project1

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

[通用发布] 为XP/VX追加RGSS_VERSION常量 v1.2

[复制链接]

Lv2.观梦者

(?????)

梦石
0
星屑
700
在线时间
1327 小时
注册时间
2011-7-18
帖子
3184

贵宾

跳转到指定楼层
1
发表于 2011-12-13 06:41:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 各种压力的猫君 于 2011-12-13 17:06 编辑

【原型版本在6L】
  1. #==============================================================================
  2. # ■ VX Ace -> XP/VX RGSS_VERSION常量 v1.2 by 各种压力的猫君 @ 66RPG
  3. #------------------------------------------------------------------------------
  4. #   为XP/VX追加RGSS_VERSION常量
  5. #   同时追加RGSS_VER常量(纯数字版本号,亦可用于VA)
  6. #------------------------------------------------------------------------------
  7. #   可以在全局变量$neko_tec_rgss_version获取处理结果:
  8. #     done    成功结束
  9. #     error   异常结束(获取一位模糊值)
  10. #     failed  处理失败
  11. #------------------------------------------------------------------------------
  12. #   更新记录:
  13. #   2011-12-13 v1.2 自动获取进程名(感谢灼眼的夏娜 @ 66RPG)
  14. #   2011-12-13 v1.1 追加异常处理
  15. #   2011-12-13 v1.0 读取ini获取精确版本号(感谢 goahead @ 66RPG)
  16. #   2011-12-13 γ 原型版本
  17. #==============================================================================

  18. begin
  19.   unless $neko_tec_rgss_version == "done"
  20.     # 声明Win32API,获取进程名(感谢 灼眼的夏娜 @ 66RPG)
  21.     getmodulefilename = Win32API.new 'kernel32','GetModuleFileNameA',%w(l p l),'l'
  22.     # 建立缓冲区
  23.     temp = "\0" * 666
  24.     # 调用API
  25.     getmodulefilename.call(0,temp,666)
  26.     # 清除多余内容
  27.     temp.delete!("\0")
  28.     # 分离文件名
  29.     filename = File.basename(temp,".exe")
  30.     # 生成ini文件名
  31.     ini_filename = ".\\" + filename + ".ini"
  32.     # 声明Win32API,读取ini(感谢 goahead @ 66RPG)
  33.     getprivateprofilestring = Win32API.new 'kernel32','GetPrivateProfileStringA',%w(p p p p l p),'l'
  34.     # 建立缓冲区
  35.     temp = "\0" * 66
  36.     # 调用API
  37.     getprivateprofilestring.call('Game','Library','',temp,66,ini_filename)
  38.     # 清除多余内容
  39.     temp.delete!("\0")
  40.     # 生成版本号字符串及数组
  41.     temp_string  = temp[/\d../]
  42.     temp_array   = temp_string.scan(/\d/)
  43.     # 生成RGSS_VERSION
  44.     rgss_version = temp_array[0] + "." + temp_array[1] + "." + temp_array[2]
  45.     # 写入常量
  46.     RGSS_VER = temp_string
  47.     RGSS_VERSION = rgss_version unless defined? RGSS_VERSION
  48.     # 成功结束标记
  49.     $neko_tec_rgss_version = "done"
  50.   end
  51. rescue
  52.   begin
  53.     # 若以上脚本发生异常则通过RUBY_VERSION和$TEMP判断
  54.     # 此时RGSS_VER和RGSS_VERSION均只会返回一位模糊数值
  55.     unless $neko_tec_rgss_version == "error"
  56.       if RUBY_VERSION == "1.9.2"
  57.         rescue_ver = 3
  58.       elsif defined? $TEST
  59.         rescue_ver = 2
  60.       else
  61.         rescue_ver = 1
  62.       end
  63.       # 写入常量
  64.       RGSS_VER = rescue_ver
  65.       RGSS_VERSION = rescue_ver unless defined? RGSS_VERSION
  66.       # 异常结束标记
  67.       $neko_tec_rgss_version = "error"
  68.     end
  69.   rescue
  70.     # 失败标记
  71.     $neko_tec_rgss_version = "failed"
  72.   end
  73. end
复制代码
根据game.ini(如果你游戏改名了在脚本第13行自行修改)<-有没有API能直接判断运行时游戏进程名?望指教
        ↑v1.2:采用Win32API直接获取进程名,感谢万能的夏娜大 >V<
里Library记录的dll文件名生成RGSS_VERSION常量。
例:
RPG MAKER 版本     RGSS_VERRGSS_VERSIONRGSS_VER(异常)RGSS_VERSION(异常)
RMXP1.021021.0.211
RMXP1.031031.0.311
RMVX1.022022.0.222
RMVA1.00 trail3003.0.0(缺省值)33.0.0(缺省值)
如果用在VA上只会追加RGSS_VER常量,其余同理不再一一列举了。

本脚本正常运行的前提是dll文件名没有被乱改(只要文件名里的数字没被改就OK)
↑v1.1:当通过dll文件名获取失败时会通过RUBY_VERSION和$TEST利用排除法进行模糊判断,返回值一位数。

经过这脚本的编写过程对API的恐惧终于下降了点……

点评

有何意义?  发表于 2012-1-12 00:22
↓ 如何查 = = ?  发表于 2011-12-14 06:00
建议别用GetModuleFileName 以及涉及ini还有exe的脚本,这些不利于兼容性,另外你可以试试查倒入的DLL  发表于 2011-12-13 19:37
GetModuleFileName  发表于 2011-12-13 13:35

Lv1.梦旅人

梦石
0
星屑
100
在线时间
5250 小时
注册时间
2011-10-7
帖子
1885

开拓者贵宾

2
发表于 2011-12-13 09:42:22 | 只看该作者
这样就可以写三版自动兼容的脚本了,在不同版本有的区别的地方判断一下。
回复 支持 反对

使用道具 举报

Lv2.观梦者

(?????)

梦石
0
星屑
700
在线时间
1327 小时
注册时间
2011-7-18
帖子
3184

贵宾

3
 楼主| 发表于 2011-12-13 09:56:15 | 只看该作者
本帖最后由 各种压力的猫君 于 2011-12-13 10:11 编辑
Shy07 发表于 2011-12-13 09:25
其实不用那么麻烦……

不过这没大用处,PS0是为Ace和RGSS3服务的,所以只要留一句就行了: ...


原来只有VX Ace才有RUBY_VERSION这个常量啊……疏忽了……
于是上面16-23行的定义可以改成这样:
  def self.RGSS_VERSION
    return 3 if defined? RUBY_VERSION
    return 2 if defined? $TEST
    return 1
  end

点评

「↓ 如何查 = = ?」EnumProcessModules、EnumProcessModulesEx  发表于 2011-12-14 14:59
↓咱就是在精神分裂的过程中追求真理的 —v— + 实践是检验真理的唯一标准  发表于 2011-12-13 10:19
猫君再这样自问自答下去,会得精神分裂的 = =  发表于 2011-12-13 10:17
↓果然……  发表于 2011-12-13 10:10
↓啊咧不对啊XP也是有RUBY_VERSION这个常量的啊……难道VX Ace本身就有RGSS_VERSION这个常量?  发表于 2011-12-13 10:09
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1071 小时
注册时间
2011-5-12
帖子
2317

贵宾

4
发表于 2011-12-13 10:00:47 | 只看该作者
我记得我曾经在国外的网站见过某个蛋疼的XP脚本,居然把$TEST给写出来了(大雾)

点评

额,居然被认出来了|||— 3—  发表于 2011-12-13 10:05
这2K蛇一样的句式应该不是姐夫 = =  发表于 2011-12-13 10:03
找我请找芙蕾娅
顺带一提,完全看得懂我头像请捡起你自己的节操哟(自重
回复 支持 反对

使用道具 举报

Lv2.观梦者

(?????)

梦石
0
星屑
700
在线时间
1327 小时
注册时间
2011-7-18
帖子
3184

贵宾

5
 楼主| 发表于 2011-12-13 11:05:12 | 只看该作者

[XP/VX/VA][PS0]RGSS版本检测 γ版

本帖最后由 各种压力的猫君 于 2011-12-13 11:59 编辑

【这是原型版本】
  1. #==============================================================================
  2. # ■ [PS0] RGSS版本检测 γ版
  3. #------------------------------------------------------------------------------
  4. #   定义了四个获取当前RGSS/RM版本的方法,方便脚本兼容性判定。
  5. #------------------------------------------------------------------------------
  6. #   更新记录:
  7. #   2011-12-13 γ版 by 各种压力的猫君 @ 66RPG
  8. #------------------------------------------------------------------------------
  9. #   方法:
  10. #   PS0::RGSS_VERSION  返回RGSS版本(1/2/3)
  11. #   PS0::RGSS?(2)      检测RGSS版本是否为RGSS2(true/false)
  12. #   PS0::RM_VERSION    返回RM版本缩写(XP/VX/VA)
  13. #   PS0::RM?("XP")     检测版本是否为XP(true/false)
  14. #==============================================================================
  15. module PS0 # <- PS Zero
  16.   def self.RGSS_VERSION
  17.     if defined? $TEST
  18.       return 3 if RUBY_VERSION == "1.9.2"
  19.       return 2
  20.     else
  21.       return 1
  22.     end
  23.   end
  24.   def self.RM_VERSION
  25.     rgss_version = self.RGSS_VERSION
  26.     return "XP" if rgss_version == 1
  27.     return "VX" if rgss_version == 2
  28.     return "VA" if rgss_version == 3
  29.   end
  30.   def self.RM?(ps0)
  31.     rm_version = self.RM_VERSION
  32.     return true if ps0 == rm_version
  33.     return false
  34.   end
  35.   def self.RGSS?(ps0)
  36.     rgss_version = self.RGSS_VERSION
  37.     return true if ps0 == rgss_version
  38.     return false
  39.   end
  40. end
复制代码
看着PS0的各位都在忙翻译……只有咱帮不上忙各种着急 {:nm_1:}
于是PS0第一个脚本的位置咱就占下了 {:nm_4:}

很简单的排除法,XP不存在$TEST,VX和VA的ruby版本不同。
(当然也可以先判断ruby版本后判断$TEST是否存在……)

之所以标为γ版是因为PS0的脚本协议还没成型……
大概不会有BUG了,如果真的碰到了请反馈 -W-

点评

你们识别个版本还真累。  发表于 2012-1-11 21:29
回复 支持 反对

使用道具 举报

Lv1.梦旅人

小小的百鬼夜行<

梦石
0
星屑
54
在线时间
579 小时
注册时间
2010-7-29
帖子
2682

贵宾

6
发表于 2011-12-13 19:14:32 | 只看该作者
{:nm_8:}我记得当初忧雪姐姐和XXX吵了半天,为的是$TEST和$DEBUG......
如今ACE又现身了,其实都想找三者的不同之处啊- -|

点评

见任意 ISA 脚本。  发表于 2012-1-11 21:26
某只PHP/HTML小白鼠→退屈の间


Cause I knew you were trouble when you walked in
So shame is on me now
I flow me to place i ve never been
till you put me down oh
Now Im lying on the cold hard ground
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1055
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

7
发表于 2011-12-13 23:24:53 手机端发表。 | 只看该作者
是用于脚本兼容不同版本的RM么?不太赞同这样啊,虽然可以一石三鸟,不过出错的几率也就大了啊。

点评

ISA 无压力。  发表于 2012-1-11 21:26

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

8
发表于 2011-12-14 00:07:18 | 只看该作者
本帖最后由 精灵使者 于 2011-12-14 00:10 编辑

http://rpg.blue/forum.php?mod=viewthread&tid=200353
猫君……
有必要我想整合ACE,但需要脚本测试

点评

呃撞车了么…… 其实我最早想通过libogg的版本号来辨别的……苦于没找到读取这个版本号的方法啊  发表于 2011-12-14 06:06
回复 支持 反对

使用道具 举报

Lv2.观梦者

虚構歪曲

梦石
0
星屑
309
在线时间
1194 小时
注册时间
2010-12-18
帖子
3928

贵宾

9
发表于 2012-1-11 21:27:54 | 只看该作者
本帖最后由 忧雪の伤 于 2012-1-12 00:23 编辑

孩子,你撞车很多年了。
RUBY_VERSION 无论哪个 RPG Maker 的版本都有 ——

http://rpg.blue/thread-181551-1-1.html 识别版本参见这里。
好吧,原来还能检测出 1.031.02 这样的差别……不过意义不明。实际上只需要软件版本就够了……

点评

亲……这是RGSS_VERSION来着……  发表于 2012-1-11 23:39
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-11 02:21

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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