| 赞 | 1 |
| VIP | |
| 好人卡 | |
| 积分 | 1 |
| 经验 | |
| 最后登录 | 2015-1-15 |
| 在线时间 | 323 小时 |
- 梦石
- 0
- 星屑
- 55
- 在线时间
- 323 小时
- 注册时间
- 2010-8-21
- 回帖
- 638
|
发表于 2013-7-11 17:16:33
|
显示全部楼层
本帖最后由 沙漠点灰 于 2013-7-11 17:56 编辑
把附件的dll文件加到“工程/System”目录下,因为能力有限,所以有bug,打开多个RGSS Player时,即会出现。
在脚本最上面添加
[pre lang="ruby" line="1"]$hookrgss = Win32API.new("System/DllExitSave", "hookrgss", "v", "v")
$hookrgss.call[/pre]
再搜索“save_game",得到下面的
[pre lang="ruby" line="1"] #--------------------------------------------------------------------------
# ● 执行存档
#--------------------------------------------------------------------------
def self.save_game(index)
begin
save_game_without_rescue(index)
rescue
delete_save_file(index)
false
end
end[/pre]
修改为:
[pre lang="ruby" line="1"] #--------------------------------------------------------------------------
# ● 执行存档
#--------------------------------------------------------------------------
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[/pre]
即加了行,这样能保证在标题退出不会进行存档。
附:dll文件
DllExitSave.7z
(3.18 KB, 下载次数: 72)
dll源代码
[pre lang="C" line="1"]#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");
}[/pre] |
评分
-
查看全部评分
|