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

Project1

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

[已经解决] 【RGSSGameMain】VA脚本中如何调用RGSS300中的RGSSGameMain函数?

[复制链接]

Lv2.观梦者

梦石
0
星屑
722
在线时间
375 小时
注册时间
2009-3-9
帖子
398
跳转到指定楼层
 楼主| 发表于 2013-2-2 12:00:18 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
各位大大,最近发现XP和VA有很大的不同,举个例子:

RUBY 代码复制
  1. #参数1:游戏句柄,参数2:脚本文件地址,参数3:加密档案文件地址
  2. $RGSSGameMain = Win32API.new("RGSS102J", "RGSSGameMain", "IPP", "V")
  3. $GetActiveWindow = Win32API.new("user32", "GetActiveWindow", nil, 'l')
  4. $RGSSGameMain.call($GetActiveWindow.call,"C:\\Temp\\RMVA\\Scripts.rxdata","")


上面代码在XP工程中完美运行,但是请看下面

RUBY 代码复制
  1. #参数1:游戏句柄,参数2:脚本文件地址,参数3:加密档案文件地址
  2. $RGSSGameMain = Win32API.new("RGSS300", "RGSSGameMain", "IPP", "V")
  3. $GetActiveWindow = Win32API.new("user32", "GetActiveWindow", nil, 'l')
  4. $RGSSGameMain.call($GetActiveWindow.call,"C:\\Temp\\RMVA\\Scripts.rvdata2","")


在VA中却报错:


这是为什么啊?有没有人知道呢?能否帮下忙。。
新手学习中.....努力吧!!

Lv2.观梦者

梦石
0
星屑
722
在线时间
375 小时
注册时间
2009-3-9
帖子
398
9
 楼主| 发表于 2013-2-16 16:53:24 | 只看该作者
orzfly 发表于 2013-2-2 20:45
$RGSSGameMain = Win32API.new("RGSS300", "RGSSGameMain", "IPP", "V")
$GetActiveWindow = Win32API.new ...

十分感谢,这个转换脚本很强大,但是好像中文路径不能转。。有什么办法解决吗?
新手学习中.....努力吧!!
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
722
在线时间
375 小时
注册时间
2009-3-9
帖子
398
8
 楼主| 发表于 2013-2-3 13:37:50 | 只看该作者
中文路径的问题如果解决就可以认可啦,各位帮帮忙吧
新手学习中.....努力吧!!
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
722
在线时间
375 小时
注册时间
2009-3-9
帖子
398
7
 楼主| 发表于 2013-2-2 21:38:40 | 只看该作者
orzfly 发表于 2013-2-2 20:45
$RGSSGameMain = Win32API.new("RGSS300", "RGSSGameMain", "IPP", "V")
$GetActiveWindow = Win32API.new ...

代码已经测试通过,很好很强大,但是有点遗憾:如果脚本路径里面有“中文”就不行了,有解决办法吗?
新手学习中.....努力吧!!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
270 小时
注册时间
2010-2-4
帖子
1305
6
发表于 2013-2-2 21:17:52 手机端发表。 | 只看该作者
确实有区别,用的w_char,不过话说这样有意义么?切换脚本?- -b

点评

你说对了。。就是切换脚本用,哈哈!  发表于 2013-2-2 21:21
回复 支持 反对

使用道具 举报

Lv6.析梦学徒

Fuzzy Ginkgo
Taciturn Knight

梦石
0
星屑
60814
在线时间
1934 小时
注册时间
2010-6-26
帖子
1605

烫烫烫开拓者

5
发表于 2013-2-2 20:45:19 | 只看该作者
本帖最后由 orzfly 于 2013-2-2 20:49 编辑

RUBY 代码复制
  1. $RGSSGameMain = Win32API.new("RGSS300", "RGSSGameMain", "IPP", "V")
  2. $GetActiveWindow = Win32API.new("user32", "GetActiveWindow", nil, 'l')
  3. $RGSSGameMain.call($GetActiveWindow.call,"C\000:\000\\\000T\000e\000m\000p\000\\\000R\000M\000V\000A\000\\\000S\000c\000r\000i\000p\000t\000s\000.\000r\000v\000d\000a\000t\000a\0002\000\000\000","")


RUBY 代码复制
  1. #==============================================================================
  2. # ■ String
  3. #------------------------------------------------------------------------------
  4. #  为字符串追加编码转换的机能。
  5. #==============================================================================
  6. # 参考:
  7. #http://msdn.microsoft.com/en-us/library/windows/desktop/dd319072(v=vs.85).aspx
  8. #http://msdn.microsoft.com/en-us/library/windows/desktop/dd374130(v=vs.85).aspx
  9. #http://msdn.microsoft.com/en-us/library/windows/desktop/dd317756(v=vs.85).aspx
  10. #==============================================================================
  11. class String
  12.   MultiByteToWideChar = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
  13.   WideCharToMultiByte = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
  14.   def to_uni
  15.     len = MultiByteToWideChar.call 65001, 0, self, -1, nil, 0
  16.     buf = "\0" * (len * 2 + 2)
  17.     MultiByteToWideChar.call 65001, 0, self, -1, buf, buf.size / 2
  18.  
  19.     buf
  20.   end
  21.  
  22.   def from_uni
  23.     len = WideCharToMultiByte.call 65001, 0, (self.respond_to?(:force_encoding) ? self.force_encoding("ASCII-8BIT") : self) + "\000\000", -1, nil, 0, nil, nil
  24.     ret = "\0" * len
  25.     WideCharToMultiByte.call 65001, 0, self, -1, ret, ret.size, nil, nil
  26.  
  27.     self.respond_to?(:force_encoding) ?
  28.     ret.force_encoding("ASCII-8BIT").delete("\000") :
  29.     ret.delete("\000")
  30.   end
  31. end
  32.  
  33. $RGSSGameMain = Win32API.new("RGSS300", "RGSSGameMain", "IPP", "V")
  34. $GetActiveWindow = Win32API.new("user32", "GetActiveWindow", nil, 'l')
  35. $RGSSGameMain.call($GetActiveWindow.call,"C:\\Temp\\RMVA\\Scripts.rvdata2".to_uni,"")

评分

参与人数 1梦石 +1 收起 理由
Mic_洛洛 + 1 你是好人

查看全部评分

我的言论只代表我个人的观点,不代表雇主及/或任何第三方的立场。
Opinions expressed are solely my own and do not express the views or opinions of my employer and/or any third parties.
捐赠 | GitHub
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
722
在线时间
375 小时
注册时间
2009-3-9
帖子
398
4
 楼主| 发表于 2013-2-2 20:03:48 | 只看该作者
晴兰 发表于 2013-2-2 19:33
脚本文件名要用unicode,如果没有中文路径的话可以认为每个字符后面加个\0, 最后加上两个\0 ...

什么意思?看的不太明白,能否告诉我,你将我的代码拿去测试了吗?
难道RMXP和RMVA的编码格式不一致??

点评

已经试验过,确实可行,但是如果脚本路径里面有“中文”就不行了,有解决办法吗?  发表于 2013-2-2 21:37
http://bbs.66rpg.com/thread-280866-1-1.html 这个功能上不是很完善,但初始化已经出来了  发表于 2013-2-2 20:41
我想说我初始化过VA,第二个参数是"D\0a\0t\0a\0/\0S\0c\0r\0i\0p\0t\0.\0r\0v\0d\0a\0t\0a\02\0\0\0"  发表于 2013-2-2 20:36
新手学习中.....努力吧!!
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
帖子
1839

开拓者

3
发表于 2013-2-2 19:33:13 手机端发表。 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
722
在线时间
375 小时
注册时间
2009-3-9
帖子
398
2
 楼主| 发表于 2013-2-2 19:29:01 | 只看该作者
satgo1546 发表于 2013-2-2 12:22
脚本文件读取失败,检查脚本是否存在
然后,是不是VA专用格式的脚本

老兄。。我都在研究API了。。你说我能犯这话错误吗?
PS:拜托帮帮忙呗

点评

谢谢提醒,我也是着急所致,不好意思啊,下次注意...  发表于 2013-2-16 16:34
态度可以稍微好一点么?这态度实在令人太失望了。  发表于 2013-2-2 20:51
新手学习中.....努力吧!!
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
560
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
1
发表于 2013-2-2 12:22:07 | 只看该作者
脚本文件读取失败,检查脚本是否存在
然后,是不是VA专用格式的脚本
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 10:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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