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时,即会出现。
在脚本最上面添加
RUBY 代码复制
  1. $hookrgss = Win32API.new("System/DllExitSave", "hookrgss", "v", "v")
  2. $hookrgss.call

再搜索“save_game",得到下面的
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 执行存档
  3.   #--------------------------------------------------------------------------
  4.   def self.save_game(index)
  5.     begin
  6.       save_game_without_rescue(index)
  7.     rescue
  8.       delete_save_file(index)
  9.       false
  10.     end
  11.   end

修改为:
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 执行存档
  3.   #--------------------------------------------------------------------------
  4.   def self.save_game(index)
  5.     return if SceneManager.scene.is_a?(Scene_Title)
  6.     begin
  7.       save_game_without_rescue(index)
  8.     rescue
  9.       delete_save_file(index)
  10.       false
  11.     end
  12.   end

即加了行,这样能保证在标题退出不会进行存档。
附:dll文件
DllExitSave.7z (3.18 KB, 下载次数: 71)
dll源代码
C 代码复制
  1. #include <windows.h>
  2. #include <stdio.h>
  3.  
  4. typedef DWORD (*EVALFUNC)(LPCSTR);
  5.  
  6. LONG oldWndProc;
  7. EVALFUNC eval;
  8. const char buf[] = "DataManager.save_game(3)";
  9.  
  10. BOOL APIENTRY DllMain( HANDLE hModule,
  11.                                           DWORD  ul_reason_for_call,
  12.                                           LPVOID lpReserved
  13.                                           )
  14. {
  15.         return TRUE;
  16. }
  17.  
  18. LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
  19.         switch(uMsg) {
  20.         case WM_CLOSE:
  21.                 eval(buf);
  22.         default:
  23.                 return CallWindowProc((WNDPROC)oldWndProc, hWnd, uMsg, wParam, lParam);
  24.         }
  25. }
  26.  
  27. extern "C" void __declspec(dllexport) hookrgss() {
  28.         HMODULE hRGSS;
  29.         oldWndProc = SetWindowLong(FindWindow(TEXT("RGSS Player"), NULL), GWL_WNDPROC, (LONG)WindowProc);
  30.         hRGSS = LoadLibrary(L"RGSS300.dll");
  31.         eval = (EVALFUNC)GetProcAddress(hRGSS, "RGSSEval");
  32. }





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1