Project1
标题: 求VA退出游戏时自动存档脚本 [打印本页]
作者: pyypokemon 时间: 2013-7-9 01:00
标题: 求VA退出游戏时自动存档脚本
没找到VA的……
试过VX的不行……
作者: 嫉妒の榛子 时间: 2013-7-9 08:30
老实说我没见过哪款游戏有这个强制功能……
就算有,LZ是想防作弊吧?可是,VA这种东西,能防老金么。。。
作者: pyypokemon 时间: 2013-7-10 15:59
嫉妒の榛子 发表于 2013-7-9 08:30
老实说我没见过哪款游戏有这个强制功能……
就算有,LZ是想防作弊吧?可是,VA这种东西,能防老金么。。。 ...
不是想防作弊……= =,如果用自动存档防作弊的话只要提前把存档备份出来就破了……
只是单纯的想要自动存档而已……
记得以前见用VX的时候有用过……可是现在找不到VA的……
作者: 沙漠点灰 时间: 2013-7-10 19:30
拦截系统发送给RGSS Player的WM_CLOSE消息,调用RGSSX.dll中的RGSSEval函数使游戏存档。lz没说明白,所以没法弄
作者: gu123321gu 时间: 2013-7-10 21:52
嫉妒の榛子 发表于 2013-7-9 08:30
老实说我没见过哪款游戏有这个强制功能……
就算有,LZ是想防作弊吧?可是,VA这种东西,能防老金么。。。 ...
刀剑封魔录退出并保存。。。ARPG游戏
作者: pyypokemon 时间: 2013-7-11 00:19
沙漠点灰 发表于 2013-7-10 19:30
拦截系统发送给RGSS Player的WM_CLOSE消息,调用RGSSX.dll中的RGSSEval函数使游戏存档。lz没说明白,所以没 ...
看不懂……
我哪里没说明白- -?……
作者: pyypokemon 时间: 2013-7-11 15:14
沙漠点灰 发表于 2013-7-10 19:30
拦截系统发送给RGSS Player的WM_CLOSE消息,调用RGSSX.dll中的RGSSEval函数使游戏存档。lz没说明白,所以没 ...
“存到哪,文件名是什么= =”
= =……就这样吗……?
默认就行了……
存在4号存档
路径应该是
\Save04.rvdata2
作者: 沙漠点灰 时间: 2013-7-11 17:16
本帖最后由 沙漠点灰 于 2013-7-11 17:56 编辑
把附件的dll文件加到“工程/System”目录下,因为能力有限,所以有bug,打开多个RGSS Player时,即会出现。
在脚本最上面添加
$hookrgss = Win32API.new("System/DllExitSave", "hookrgss", "v", "v")
$hookrgss.call
$hookrgss = Win32API.new("System/DllExitSave", "hookrgss", "v", "v")
$hookrgss.call
再搜索“save_game",得到下面的
#--------------------------------------------------------------------------
# ● 执行存档
#--------------------------------------------------------------------------
def self.save_game(index)
begin
save_game_without_rescue(index)
rescue
delete_save_file(index)
false
end
end
#--------------------------------------------------------------------------
# ● 执行存档
#--------------------------------------------------------------------------
def self.save_game(index)
begin
save_game_without_rescue(index)
rescue
delete_save_file(index)
false
end
end
修改为:
#--------------------------------------------------------------------------
# ● 执行存档
#--------------------------------------------------------------------------
def self.save_game(index)
return if SceneManager.scene.is_a?(Scene_Title)
begin
save_game_without_rescue(index)
rescue
delete_save_file(index)
false
end
end
#--------------------------------------------------------------------------
# ● 执行存档
#--------------------------------------------------------------------------
def self.save_game(index)
return if SceneManager.scene.is_a?(Scene_Title)
begin
save_game_without_rescue(index)
rescue
delete_save_file(index)
false
end
end
即加了行,这样能保证在标题退出不会进行存档。
附:dll文件
DllExitSave.7z
(3.18 KB, 下载次数: 71)
dll源代码
#include <windows.h>
#include <stdio.h>
typedef DWORD (*EVALFUNC)(LPCSTR);
LONG oldWndProc;
EVALFUNC eval;
const char buf[] = "DataManager.save_game(3)";
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch(uMsg) {
case WM_CLOSE:
eval(buf);
default:
return CallWindowProc((WNDPROC)oldWndProc, hWnd, uMsg, wParam, lParam);
}
}
extern "C" void __declspec(dllexport) hookrgss() {
HMODULE hRGSS;
oldWndProc = SetWindowLong(FindWindow(TEXT("RGSS Player"), NULL), GWL_WNDPROC, (LONG)WindowProc);
hRGSS = LoadLibrary(L"RGSS300.dll");
eval = (EVALFUNC)GetProcAddress(hRGSS, "RGSSEval");
}
#include <windows.h>
#include <stdio.h>
typedef DWORD (*EVALFUNC)(LPCSTR);
LONG oldWndProc;
EVALFUNC eval;
const char buf[] = "DataManager.save_game(3)";
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch(uMsg) {
case WM_CLOSE:
eval(buf);
default:
return CallWindowProc((WNDPROC)oldWndProc, hWnd, uMsg, wParam, lParam);
}
}
extern "C" void __declspec(dllexport) hookrgss() {
HMODULE hRGSS;
oldWndProc = SetWindowLong(FindWindow(TEXT("RGSS Player"), NULL), GWL_WNDPROC, (LONG)WindowProc);
hRGSS = LoadLibrary(L"RGSS300.dll");
eval = (EVALFUNC)GetProcAddress(hRGSS, "RGSSEval");
}
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |