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

Project1

 找回密码
 注册会员
搜索
楼主: guoxiaomi
打印 上一主题 下一主题

[原创发布] 【RGM】RGModern 1.0.4 - RMXP新runtime

[复制链接]

Lv5.捕梦者 (版主)

梦石
1
星屑
24004
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

61
 楼主| 发表于 2023-5-27 20:36:36 | 只看该作者
RTCanwind 发表于 2023-5-27 17:50
class Win32API
  @@RGSSWINDOW = nil
  @@GetCurrentThreadId       = Win32API.new('kernel32', 'GetCu ...

额,看来是ruby3不支持这种产生字符串的语法了。你要这样写:
  1. @@GetCurrentThreadId = Win32API.new('kernel32', 'GetCurrentThreadId', '', 'l')
  2. @@GetWindowThreadProcessId = Win32API.new('user32', 'GetWindowThreadProcessId', 'lp', 'l')
  3. @@FindWindowEx = Win32API.new('user32', 'FindWindowEx', 'llpp', 'l')
复制代码

以及你读这些Win32API是用作什么呢,如果是改分辨率、输入法之类的,RGM已经内置了这些功能。
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
831
在线时间
88 小时
注册时间
2020-12-15
帖子
25
62
发表于 2023-5-27 21:24:40 | 只看该作者
guoxiaomi 发表于 2023-5-27 20:36
额,看来是ruby3不支持这种产生字符串的语法了。你要这样写:
以及你读这些Win32API是用作什么呢,如果是 ...

是Pokemon essentials的老版本中的调用,我没太分析过具体作用()。

**后续又出现了一个未定义问题
2023-05-27 21:14:06 +0800
Error occurs when load Data/Scripts.rxdata.
undefined method `rect=' for class `Viewport'
- 007_Sprite_Resizer.rb:450:in `<class:Viewport>'
- 007_Sprite_Resizer.rb:446:in `block in load_scripts_from_folder'

对应的脚本是
class Viewport
  unless @SpriteResizerMethodsAliased
    alias _initialize_SpriteResizer initialize
    alias _rect_ViewportResizer rect
    alias _recteq_SpriteResizer rect=
    alias _oxeq_SpriteResizer ox=
    alias _oyeq_SpriteResizer oy=
    @SpriteResizerMethodsAliased=true
  end

点评

失误,确实忘了定义,下个版本会修复。你可以先定义一下:attr_accessor :rect  发表于 2023-5-27 21:41
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
23209
在线时间
2387 小时
注册时间
2005-10-15
帖子
1166

开拓者

63
发表于 2023-5-27 23:16:17 | 只看该作者
guoxiaomi 发表于 2023-5-27 20:36
额,看来是ruby3不支持这种产生字符串的语法了。你要这样写:
以及你读这些Win32API是用作什么呢,如果是 ...

从这个角度来说,这个现象如此普遍的话,可能真的需要一个ruby 3降级支持ruby 1.8的mod了
不然几乎所有以前的插件能废一大半

点评

但是它是拿引号括起来,然后在里面用%w的……  发表于 2023-5-29 09:40
%w(这个用法1.9也有啊…… 到2.4x好像还有,3有没有我不知道了……我平时用2.6  发表于 2023-5-28 21:57
说实话这代码我看得一身冷汗,感觉也是XP专属,后面的版本ruby升级到1.9之后代码就“规范”多了  发表于 2023-5-28 01:01
SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
831
在线时间
88 小时
注册时间
2020-12-15
帖子
25
64
发表于 2023-5-28 01:18:50 | 只看该作者
大佬我又来了(),感觉ess老版本确实有些时代眼泪了

出现的错误是
2023-05-27 22:00:54 +0800
Error occurs when load Data/Scripts.rxdata.
Exec format error
- Main:32:in `rescue in block in load_scripts_from_folder'
- Main:29:in `block in load_scripts_from_folder'
- Main:27:in `each'
- Main:27:in `load_scripts_from_folder'
- Main:40:in `block in load_scripts_from_folder'
- Main:39:in `each'
- Main:39:in `load_scripts_from_folder'
- Main:44:in `block in rgss_main'
- eval:36:in `eval'
- eval:36:in `block in rgss_main'
- eval:32:in `each'
- eval:32:in `rgss_main'
- eval:60:in `load_script'
- eval:23:in `load_script'
- eval:23:in `load_script'
- eval:69:in `<main>'
- ruby:in `load_script'

相关代码是负责从文件夹读取脚本的部分
RUBY 代码复制
  1. def load_scripts_from_folder(path)
  2.   files   = []
  3.   folders = []
  4.   Dir.foreach(path) do |f|
  5.     next if f == '.' || f == '..'
  6.     (File.directory?(path + "/" + f)) ? folders.push(f) :  files.push(f)
  7.   end
  8.   files.sort!
  9.   files.each do |f|
  10.     code = File.open(path + "/" + f, "r") { |file| file.read }
  11.     begin
  12.       eval(code, nil, f)
  13.     rescue ScriptError
  14.       raise ScriptError.new($!.message)
  15.     rescue
  16.       $!.message.sub!($!.message, traceback_report)
  17.       raise_traceback_error
  18.     end
  19.   end
  20.   folders.sort!
  21.   folders.each do |folder|
  22.     load_scripts_from_folder(path + "/" + folder)
  23.   end
  24. end
  25.  
  26. load_scripts_from_folder("Data/Scripts")


回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
24004
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

65
 楼主| 发表于 2023-5-28 08:43:52 | 只看该作者
RTCanwind 发表于 2023-5-28 01:18
大佬我又来了(),感觉ess老版本确实有些时代眼泪了

出现的错误是

这里不是读取有问题,而且被读取的代码有问题,因为抛出了scripterror。你需要在32行前面加一些调试信息,输出报错的代码位置。或者可以不捕获错误,让rgm来接管异常处理:29到36行只保留30行就行。然后根据报错提示去排查。
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
831
在线时间
88 小时
注册时间
2020-12-15
帖子
25
66
发表于 2023-5-28 12:25:44 | 只看该作者
guoxiaomi 发表于 2023-5-27 20:36
额,看来是ruby3不支持这种产生字符串的语法了。你要这样写:
以及你读这些Win32API是用作什么呢,如果是 ...

上面的Win32API的问题 似乎是用来找游戏窗口的
进行如上修改以后 点开Game,RGM不抛出错误,黑屏无响应
Ess给出以下错误:
Exception: RuntimeError
Message: Can't find RGSS player window

Backtrace:
004_Win32API.rb:31:in `pbFindRgssWindow'
RUBY 代码复制
  1. def Win32API.pbFindRgssWindow
  2.     return @@RGSSWINDOW if @@RGSSWINDOW
  3.     processid = [0].pack('l')
  4.     threadid = @@GetCurrentThreadId.call
  5.     nextwindow = 0
  6.     loop do
  7.       nextwindow = @@FindWindowEx.call(0,nextwindow,"RGSS Player",0)
  8.       if nextwindow!=0
  9.         wndthreadid = @@GetWindowThreadProcessId.call(nextwindow,processid)
  10.         if wndthreadid==threadid
  11.           @@RGSSWINDOW = nextwindow
  12.           return @@RGSSWINDOW
  13.         end
  14.       end
  15.       break if nextwindow==0
  16.     end
  17.     raise "Can't find RGSS player window"
  18.   end

点评

你要不直接把脚本打个包传上来让我看看  发表于 2023-5-28 14:21
因为rgm的window不再叫rgss player了,不过还是那句话,找到window之后要做什么,大概率就是改分辨率输入法鼠标这些……  发表于 2023-5-28 14:19
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
831
在线时间
88 小时
注册时间
2020-12-15
帖子
25
67
发表于 2023-5-28 18:50:22 | 只看该作者
RTCanwind 发表于 2023-5-28 12:25
上面的Win32API的问题 似乎是用来找游戏窗口的
进行如上修改以后 点开Game,RGM不抛出错误,黑屏无响应
E ...

不知道为什么站内的上传附件一直在请稍后
https://wwjk.lanzoub.com/i12PS0xj7z9e
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
24004
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

68
 楼主| 发表于 2023-5-30 00:14:20 | 只看该作者
本帖最后由 guoxiaomi 于 2023-5-30 00:20 编辑
RTCanwind 发表于 2023-5-28 18:50
不知道为什么站内的上传附件一直在请稍后
https://wwjk.lanzoub.com/i12PS0xj7z9e ...


基本上都是win32api的格式改动,大概改了10处吧,你可以对照看看。现在运行Game.exe的报错是找不到Animations.rxdata文件,说明脚本语法已经基本通过了,后续还有什么bug还需要运行时排查。

附上了新编译的Game.exe: test20230529.7z (5.6 MB, 下载次数: 7) ,相关的改动会在下一次发布RGM时同步。
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
831
在线时间
88 小时
注册时间
2020-12-15
帖子
25
69
发表于 2023-5-30 01:49:05 | 只看该作者
guoxiaomi 发表于 2023-5-30 00:14
基本上都是win32api的格式改动,大概改了10处吧,你可以对照看看。现在运行Game.exe的报错是找不到Animat ...

感谢~~
单独运行确实是到Animations.rxdata这步,不过在工程里运行时还有一些脚本报错,如
- 013_PictureEx.rb:114:in `new'
- 013_PictureEx.rb:114:in `initialize'
- 002_EventScene.rb:122:in `new'
- 002_EventScene.rb:122:in `addImage'
- 003_Scene_Intro.rb:10:in `initialize'
- 003_Scene_Intro.rb:130:in `new'
- 003_Scene_Intro.rb:130:in `main'
好像是Rect的初始化问题?
这里把v18.dev的原始工程(49M)传上来了,大佬如果有空再帮忙看看()
https://wwjk.lanzoub.com/igru70xnri8f

点评

吼,我先发布一下1.0.3,已经累计更新了一些内容了。  发表于 2023-5-30 10:53
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
24
星屑
7532
在线时间
249 小时
注册时间
2020-12-4
帖子
306

极短24获奖极短23获奖极短22获奖

70
发表于 2023-5-30 18:54:59 | 只看该作者
本帖最后由 纯属小虫 于 2023-5-31 17:27 编辑

2023.05.30
试了试自己的工程,尝试能不能移植(抱紧大佬大腿死缠烂打)

第一次错误报告



请问,问题是出在【对话】的两个脚本,以及【技能】●装备状态附加  这个脚本中码?
还是说我操作错了,我只把【Game.exe】丢到旧工程里替换了一下




2023.05.31
发生错误的代码


这个出错的代码是从图书馆里顺来的,感觉...内容有些高级,没太理解~~

出错的地方是这里
$WEAPONSKILLS_ORIG_ACTOR = Game_Actor.clone unless $WEAPONSKILLS_ORIG_ACTOR
class Game_Actor < $WEAPONSKILLS_ORIG_ACTOR



2023.05.31
然后有一处bitmap相关的错误。。。。
呼,完全超出修改能力之外了。。。。

另一处 error.log

发生错误的代码


这是用于烛光系统Bitmap相关的,也是从图书馆顺来的,
更...更改不来了

点评

找到出错的地方了....不过这段代码有些抽象,没理解到位,能求教一下咋改咩~~~  发表于 2023-5-31 17:19
问题出在【技能】●装备状态附加的第5行。一般只需要看error.log中的内容。报错信息说Game_Actor的父类不匹配。  发表于 2023-5-30 21:36
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-22 19:16

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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