Project1
标题: 如何在没出错的时候用指令调出报错弹窗?已解决 [打印本页]
作者: 爱羊真知己 时间: 2023-1-26 14:37
标题: 如何在没出错的时候用指令调出报错弹窗?已解决
本帖最后由 爱羊真知己 于 2023-1-30 13:48 编辑
VA的报错弹窗和正常弹窗界面是不一样的。正常弹窗是可以用脚本调出的,但报错弹窗我还没找到方法。那么如何用脚本调出报错弹窗呢?(弹窗中的文字需要能自定义,且游戏不会真的崩掉)如果直接调不行,更改正常弹窗以达到此效果也行。(需要保留正常弹窗及msgbox指令)
另外,再问一个问题:可以用插入的脚本覆盖RMVA自带且不在编辑器中的系统界面、文字、指令(例如上文的弹窗,exit指令)吗?如果做不到,利用dll(放在游戏目录中,不是安装目录)可以做到吗?
作者: 爱羊真知己 时间: 2023-1-26 14:39
不要问我要这个干什么……
作者: 爱羊真知己 时间: 2023-1-26 15:30
(回复@alexncf125 )啊……果然稀奇古怪的东西VA做不到。
作者: KB.Driver 时间: 2023-1-26 22:52
本帖最后由 KB.Driver 于 2023-1-31 20:52 编辑
(1)这两段插入脚本编辑器
class String
CP_ACP = 0
CP_UTF8 = 65001
MultiByteToWideChar = Win32API.new(*%w[kernel32 MultiByteToWideChar ilpipi i])
WideCharToMultiByte = Win32API.new(*%w[kernel32 WideCharToMultiByte ilpipipp i])
def utf8_to_gb2312
n = 0
i = MultiByteToWideChar.call(CP_UTF8, 0, self, -1, nil, 0)
buffer = "\0" * (i * 2)
MultiByteToWideChar.call(CP_UTF8, 0, self, -1, buffer, i)
i = WideCharToMultiByte.call(CP_ACP, 0, buffer, -1, nil, 0, nil, nil)
result = "\0" * i
WideCharToMultiByte.call(CP_ACP, 0, buffer, -1, result, i, nil, nil)
result.chop!
return result
end
def gb2312_to_utf8
n = self.size
i = MultiByteToWideChar.call(CP_ACP, 0, self, n+1, nil, 0)
buffer = "\0" * (i*2)
i = MultiByteToWideChar.call(CP_ACP, 0, self, n+1, buffer, i)
i = WideCharToMultiByte.call(CP_UTF8, 0, buffer, -1, nil, 0, nil, nil)
result = "\0" * i
WideCharToMultiByte.call(CP_UTF8, 0, buffer, -1, result, i, nil, nil)
result.chop!
return result
end
end
class String
CP_ACP = 0
CP_UTF8 = 65001
MultiByteToWideChar = Win32API.new(*%w[kernel32 MultiByteToWideChar ilpipi i])
WideCharToMultiByte = Win32API.new(*%w[kernel32 WideCharToMultiByte ilpipipp i])
def utf8_to_gb2312
n = 0
i = MultiByteToWideChar.call(CP_UTF8, 0, self, -1, nil, 0)
buffer = "\0" * (i * 2)
MultiByteToWideChar.call(CP_UTF8, 0, self, -1, buffer, i)
i = WideCharToMultiByte.call(CP_ACP, 0, buffer, -1, nil, 0, nil, nil)
result = "\0" * i
WideCharToMultiByte.call(CP_ACP, 0, buffer, -1, result, i, nil, nil)
result.chop!
return result
end
def gb2312_to_utf8
n = self.size
i = MultiByteToWideChar.call(CP_ACP, 0, self, n+1, nil, 0)
buffer = "\0" * (i*2)
i = MultiByteToWideChar.call(CP_ACP, 0, self, n+1, buffer, i)
i = WideCharToMultiByte.call(CP_UTF8, 0, buffer, -1, nil, 0, nil, nil)
result = "\0" * i
WideCharToMultiByte.call(CP_UTF8, 0, buffer, -1, result, i, nil, nil)
result.chop!
return result
end
end
GetForegroundWindow = Win32API.new(*%W[user32.dll GetForegroundWindow v l])
MessageBox = Win32API.new(*%W[user32.dll MessageBox lppl l])
Hwnd = GetForegroundWindow.call
GetForegroundWindow = Win32API.new(*%W[user32.dll GetForegroundWindow v l])
MessageBox = Win32API.new(*%W[user32.dll MessageBox lppl l])
Hwnd = GetForegroundWindow.call
(2)事件脚本用这个
text = "测试文本\n\n这是第二行"
title = "测试标题"
MessageBox.call(Hwnd, text.utf8_to_gb2312, title.utf8_to_gb2312, 48)
text = "测试文本\n\n这是第二行"
title = "测试标题"
MessageBox.call(Hwnd, text.utf8_to_gb2312, title.utf8_to_gb2312, 48)
(3)效果参考
RM自身的报错
使用脚本的效果,是不是一模一样?
可以用事件脚本触发,编辑文字显示不同内容
作者: 爱羊真知己 时间: 2023-1-27 13:49
这个脚本第12行崩溃了……(SyntaxError)
所以你测试这个脚本时是用新游戏测试的吗?
作者: 爱羊真知己 时间: 2023-1-27 16:02
本帖最后由 爱羊真知己 于 2023-1-27 16:58 编辑
或者Steam的RM才能用?
作者: KB.Driver 时间: 2023-1-27 20:54
我检查了一下,复制上来的时候不知道为什么少了一个逗号。
现在改好了,你可以再试一下。
作者: 爱羊真知己 时间: 2023-1-28 16:37
谢谢……不对啊,为什么内容和标题都只显示第一个字?
作者: KB.Driver 时间: 2023-1-31 20:54
有点离谱,我从脚本编辑器复制到论坛然后发布,-1就自动动变成1了。
感谢 @gqxastg 帮忙回复。
作者: 爱羊真知己 时间: 2023-2-1 12:55
主要是我也不敢乱改,毕竟我曾经因为乱改这种需要调用PC系统数据的脚本导致游戏崩溃,改回去、删除脚本都没用,最后换了一个Scripts.rvdata2才正常……
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |