mirror of
https://github.com/HIllya51/LunaTranslator.git
synced 2025-01-15 00:43:59 +08:00
.
This commit is contained in:
parent
8c9e12f989
commit
8807005d45
@ -99,4 +99,4 @@
|
|||||||
#define PROC_DISCONN L"處理程序已中斷連接 %d"
|
#define PROC_DISCONN L"處理程序已中斷連接 %d"
|
||||||
#define COPYSELECTION L"自動將文字框中選取的文字複製到剪貼簿"
|
#define COPYSELECTION L"自動將文字框中選取的文字複製到剪貼簿"
|
||||||
#define FONTSELECT L"選擇字體"
|
#define FONTSELECT L"選擇字體"
|
||||||
#define UNMATCHABLEVERSION L"LunaHook 和 LunaHost 版本不匹配,可能無法正常運作!"
|
#define UNMATCHABLEVERSION L"文件版本不匹配,可能無法正常運作,請重新下載!"
|
@ -99,4 +99,4 @@
|
|||||||
#define PROC_DISCONN L"process disconnected %d"
|
#define PROC_DISCONN L"process disconnected %d"
|
||||||
#define COPYSELECTION L"auto send selected text in textbox to clipboard"
|
#define COPYSELECTION L"auto send selected text in textbox to clipboard"
|
||||||
#define FONTSELECT L"Select Font"
|
#define FONTSELECT L"Select Font"
|
||||||
#define UNMATCHABLEVERSION L"LunaHook and LunaHost versions do not match, may not work properly!"
|
#define UNMATCHABLEVERSION L"The file version cannot be matched, may not work properly, please re-download again!"
|
@ -99,4 +99,4 @@
|
|||||||
#define PROC_DISCONN L"Процесс отключен %d"
|
#define PROC_DISCONN L"Процесс отключен %d"
|
||||||
#define COPYSELECTION L"Автоматически копировать выделенный текст в буфер обмена"
|
#define COPYSELECTION L"Автоматически копировать выделенный текст в буфер обмена"
|
||||||
#define FONTSELECT L"Выбрать шрифт"
|
#define FONTSELECT L"Выбрать шрифт"
|
||||||
#define UNMATCHABLEVERSION L"Версии LunaHook и LunaHost не совпадают и могут не работать должным образом!"
|
#define UNMATCHABLEVERSION L"Версии файлов не совпадают и могут не работать должным образом, пожалуйста, загрузите их снова!"
|
@ -99,4 +99,4 @@
|
|||||||
#define PROC_DISCONN L"进程已断开连接 %d"
|
#define PROC_DISCONN L"进程已断开连接 %d"
|
||||||
#define COPYSELECTION L"自动将文本框中选取的文本复制到剪贴板"
|
#define COPYSELECTION L"自动将文本框中选取的文本复制到剪贴板"
|
||||||
#define FONTSELECT L"选择字体"
|
#define FONTSELECT L"选择字体"
|
||||||
#define UNMATCHABLEVERSION L"LunaHook和LunaHost版本无法匹配,可能无法正常工作!"
|
#define UNMATCHABLEVERSION L"文件版本无法匹配,可能无法正常工作,请重新下载!"
|
@ -4,7 +4,7 @@ if(${CMAKE_SIZEOF_VOID_P} EQUAL 8)
|
|||||||
set(enginepath "engine64")
|
set(enginepath "engine64")
|
||||||
set(collector "enginecollection64.cpp")
|
set(collector "enginecollection64.cpp")
|
||||||
else()
|
else()
|
||||||
set(enginessrc Winters Cage AGE_System AksysGames RPGMaker Stronger TACTICS Onscripter Sceplay DISCOVERY Erogos godot A98SYS GuruGuruSMF4 TeethingRing Fizz CoffeeMaker VALKYRIA mirage CisLugI tamasoft FrontWing solfasys Diskdream splushwave ransel akatombo GASTRO GSX Aksys ScrPlayer SYSD KISS IGScript Jellyfish BKEngine Overflow SRPGStudio Suika2 FVP LCScript Ohgetsu RPGMakerRGSS3 ONScripterru OVERDRIVE HXP Palette Purple Ruf RUNE Tarte Tomato Sakuradog Troy VitaminSoft UnknownEngine TSSystem Xbangbang Anisetta Nijyuei Interheart LovaGame Giga Jisatu101 EntisGLS Ciel ACTGS TerraLunar PPSSPP jukujojidai PCSX2 VanillawareGC cef V8 mono PONScripter Bishop sakanagl Lightvn KiriKiri SideB BGI Bootup morning shyakunage Regista NNNConfig Eushully Majiro littlecheese Elf Silkys CMVS Wolf Circus1 Circus2 Cotopha Artemis CatSystem Atelier Tenco QLIE Pal AIL2 NeXAS LunaSoft Unicorn Rejet Interlude AdobeAir Retouch Malie Live Nexton Lucifen Waffle TinkerBell SystemAoi Yuris Nitroplus2 Bruns EME RRE Candy Speed ApricoT Triangle AB2Try MBLMED GameMaker DxLib CodeX Minori Sprite RpgmXP Eagls Debonosu C4 WillPlus Tanuki GXP AOS Mink YukaSystem2 sakusesu Exp Syuntada Pensil Anim hibiki Nitroplus Reallive Siglus Taskforce2 RUGP IronGameSystem Anex86 ShinyDaysGame MarineHeart ShinaRio CaramelBox UnisonShift Escude Ryokucha Alice Footy2 utawarerumono System4x Abalone Abel 5pb HorkEye XUSE Leaf Nekopack AXL AGS AdobeFlash10 FocasLens Tamamo Ages3ResT)
|
set(enginessrc Aromarie Winters Cage AGE_System AksysGames RPGMaker Stronger TACTICS Onscripter Sceplay DISCOVERY Erogos godot A98SYS GuruGuruSMF4 TeethingRing Fizz CoffeeMaker VALKYRIA mirage CisLugI tamasoft FrontWing solfasys Diskdream splushwave ransel akatombo GASTRO GSX Aksys ScrPlayer SYSD KISS IGScript Jellyfish BKEngine Overflow SRPGStudio Suika2 FVP LCScript Ohgetsu RPGMakerRGSS3 ONScripterru OVERDRIVE HXP Palette Purple Ruf RUNE Tarte Tomato Sakuradog Troy VitaminSoft UnknownEngine TSSystem Xbangbang Anisetta Nijyuei Interheart LovaGame Giga Jisatu101 EntisGLS Ciel ACTGS TerraLunar PPSSPP jukujojidai PCSX2 VanillawareGC cef V8 mono PONScripter Bishop sakanagl Lightvn KiriKiri SideB BGI Bootup morning shyakunage Regista NNNConfig Eushully Majiro littlecheese Elf Silkys CMVS Wolf Circus1 Circus2 Cotopha Artemis CatSystem Atelier Tenco QLIE Pal AIL2 NeXAS LunaSoft Unicorn Rejet Interlude AdobeAir Retouch Malie Live Nexton Lucifen Waffle TinkerBell SystemAoi Yuris Nitroplus2 Bruns EME RRE Candy Speed ApricoT Triangle AB2Try MBLMED GameMaker DxLib CodeX Minori Sprite RpgmXP Eagls Debonosu C4 WillPlus Tanuki GXP AOS Mink YukaSystem2 sakusesu Exp Syuntada Pensil Anim hibiki Nitroplus Reallive Siglus Taskforce2 RUGP IronGameSystem Anex86 ShinyDaysGame MarineHeart ShinaRio CaramelBox UnisonShift Escude Ryokucha Alice Footy2 utawarerumono System4x Abalone Abel 5pb HorkEye XUSE Leaf Nekopack AXL AGS AdobeFlash10 FocasLens Tamamo Ages3ResT)
|
||||||
set(enginepath "engine32")
|
set(enginepath "engine32")
|
||||||
set(collector "enginecollection32.cpp")
|
set(collector "enginecollection32.cpp")
|
||||||
endif()
|
endif()
|
||||||
@ -14,8 +14,17 @@ set(enginessrc "${enginepath}/${enginessrc}.cpp")
|
|||||||
message("${enginessrc}")
|
message("${enginessrc}")
|
||||||
set_source_files_properties(${enginessrc} PROPERTIES SOURCE_ENCODING "UTF-8")
|
set_source_files_properties(${enginessrc} PROPERTIES SOURCE_ENCODING "UTF-8")
|
||||||
|
|
||||||
|
|
||||||
|
add_library(pchhook pchhook.cpp)
|
||||||
|
target_precompile_headers(pchhook PUBLIC pchhook.h)
|
||||||
|
|
||||||
|
|
||||||
|
add_library(hostmain main.cc)
|
||||||
|
target_link_libraries(hostmain VERSION_DEF minhook)
|
||||||
|
target_precompile_headers(hostmain REUSE_FROM pchhook)
|
||||||
|
|
||||||
|
|
||||||
set(texthook_src
|
set(texthook_src
|
||||||
main.cc
|
|
||||||
texthook.cc
|
texthook.cc
|
||||||
hookfinder.cc
|
hookfinder.cc
|
||||||
${enginessrc}
|
${enginessrc}
|
||||||
@ -26,11 +35,6 @@ set(texthook_src
|
|||||||
veh_hook.cpp
|
veh_hook.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
add_library(pchhook pchhook.cpp)
|
|
||||||
target_precompile_headers(pchhook PUBLIC pchhook.h)
|
|
||||||
|
|
||||||
|
|
||||||
add_subdirectory(util)
|
add_subdirectory(util)
|
||||||
add_subdirectory(engines)
|
add_subdirectory(engines)
|
||||||
|
|
||||||
@ -51,4 +55,4 @@ target_precompile_headers(LunaHook REUSE_FROM pchhook)
|
|||||||
|
|
||||||
set_target_properties(LunaHook PROPERTIES OUTPUT_NAME "LunaHook${bitappendix}")
|
set_target_properties(LunaHook PROPERTIES OUTPUT_NAME "LunaHook${bitappendix}")
|
||||||
|
|
||||||
target_link_libraries(LunaHook Version httpapi ws2_32 Shlwapi pch minhook commonengine utils ${YY_Thunks_for_WinXP})
|
target_link_libraries(LunaHook hostmain Version httpapi ws2_32 Shlwapi pch minhook commonengine utils ${YY_Thunks_for_WinXP})
|
@ -116,13 +116,13 @@ void detachall()
|
|||||||
}
|
}
|
||||||
void solvefont(HookParam hp)
|
void solvefont(HookParam hp)
|
||||||
{
|
{
|
||||||
if (hp.hook_font)
|
if (hp.embed_hook_font)
|
||||||
{
|
{
|
||||||
attachFunction(hp.hook_font);
|
attachFunction(hp.embed_hook_font);
|
||||||
}
|
}
|
||||||
if (hp.hook_font & F_MultiByteToWideChar)
|
if (hp.embed_hook_font & F_MultiByteToWideChar)
|
||||||
disable_mbwc = true;
|
disable_mbwc = true;
|
||||||
if (hp.hook_font & F_WideCharToMultiByte)
|
if (hp.embed_hook_font & F_WideCharToMultiByte)
|
||||||
disable_wcmb = true;
|
disable_wcmb = true;
|
||||||
|
|
||||||
if (auto current_patch_fun = patch_fun.exchange(nullptr))
|
if (auto current_patch_fun = patch_fun.exchange(nullptr))
|
||||||
@ -208,12 +208,12 @@ bool waitforevent(UINT32 timems, const ThreadParam &tp, const std::wstring &orig
|
|||||||
|
|
||||||
void TextHook::parsenewlineseperator(TextBuffer *buff)
|
void TextHook::parsenewlineseperator(TextBuffer *buff)
|
||||||
{
|
{
|
||||||
if (!(hp.newlineseperator))
|
if (!(hp.lineSeparator))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (hp.type & CODEC_UTF16)
|
if (hp.type & CODEC_UTF16)
|
||||||
{
|
{
|
||||||
StringCharReplacer(buff, hp.newlineseperator, wcslen(hp.newlineseperator), L'\n');
|
StringCharReplacer(buff, hp.lineSeparator, wcslen(hp.lineSeparator), L'\n');
|
||||||
}
|
}
|
||||||
else if (hp.type & CODEC_UTF32)
|
else if (hp.type & CODEC_UTF32)
|
||||||
return;
|
return;
|
||||||
@ -221,8 +221,8 @@ void TextHook::parsenewlineseperator(TextBuffer *buff)
|
|||||||
{
|
{
|
||||||
// ansi/utf8,newlineseperator都是简单字符
|
// ansi/utf8,newlineseperator都是简单字符
|
||||||
std::string newlineseperatorA;
|
std::string newlineseperatorA;
|
||||||
for (int i = 0; i < wcslen(hp.newlineseperator); i++)
|
for (int i = 0; i < wcslen(hp.lineSeparator); i++)
|
||||||
newlineseperatorA += (char)hp.newlineseperator[i];
|
newlineseperatorA += (char)hp.lineSeparator[i];
|
||||||
StringCharReplacer(buff, newlineseperatorA.c_str(), newlineseperatorA.size(), '\n');
|
StringCharReplacer(buff, newlineseperatorA.c_str(), newlineseperatorA.size(), '\n');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -267,8 +267,8 @@ bool TextHook::waitfornotify(TextBuffer *buff, ThreadParam tp)
|
|||||||
return false;
|
return false;
|
||||||
translatecache.insert(std::make_pair(hash, translate));
|
translatecache.insert(std::make_pair(hash, translate));
|
||||||
}
|
}
|
||||||
if (hp.newlineseperator)
|
if (hp.lineSeparator)
|
||||||
strReplace(translate, L"\n", hp.newlineseperator);
|
strReplace(translate, L"\n", hp.lineSeparator);
|
||||||
translate = adjustSpacesSTD(translate, hp);
|
translate = adjustSpacesSTD(translate, hp);
|
||||||
if (commonsharedmem->keeprawtext)
|
if (commonsharedmem->keeprawtext)
|
||||||
translate = origin + L" " + translate;
|
translate = origin + L" " + translate;
|
||||||
|
@ -605,7 +605,7 @@ namespace
|
|||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.offset = get_stack(1);
|
hp.offset = get_stack(1);
|
||||||
hp.type = USING_STRING | CODEC_UTF8 | EMBED_ABLE | EMBED_AFTER_NEW;
|
hp.type = USING_STRING | CODEC_UTF8 | EMBED_ABLE | EMBED_AFTER_NEW;
|
||||||
hp.newlineseperator = L"\\n";
|
hp.lineSeparator = L"\\n";
|
||||||
return NewHook(hp, "5bp");
|
return NewHook(hp, "5bp");
|
||||||
}
|
}
|
||||||
bool __()
|
bool __()
|
||||||
@ -699,7 +699,7 @@ namespace
|
|||||||
xx = std::regex_replace(xx, std::wregex(L"\\\\x%l(.*?);(.*?);(.*?);#;"), L"$1");
|
xx = std::regex_replace(xx, std::wregex(L"\\\\x%l(.*?);(.*?);(.*?);#;"), L"$1");
|
||||||
buffer->from(xx);
|
buffer->from(xx);
|
||||||
};
|
};
|
||||||
hp.newlineseperator = L"\\n";
|
hp.lineSeparator = L"\\n";
|
||||||
return NewHook(hp, "5bp");
|
return NewHook(hp, "5bp");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ bool A98SYS::attach_function()
|
|||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.offset = get_stack(1);
|
hp.offset = get_stack(1);
|
||||||
hp.type = USING_STRING | EMBED_ABLE | EMBED_AFTER_NEW | EMBED_DYNA_SJIS;
|
hp.type = USING_STRING | EMBED_ABLE | EMBED_AFTER_NEW | EMBED_DYNA_SJIS;
|
||||||
hp.hook_font = F_ExtTextOutA;
|
hp.embed_hook_font = F_ExtTextOutA;
|
||||||
|
|
||||||
return NewHook(hp, "A98SYS");
|
return NewHook(hp, "A98SYS");
|
||||||
}
|
}
|
@ -52,6 +52,6 @@ bool AGE_System::attach_function()
|
|||||||
hp.address = addr21;
|
hp.address = addr21;
|
||||||
hp.offset = get_stack(3);
|
hp.offset = get_stack(3);
|
||||||
hp.type = USING_STRING | EMBED_ABLE | EMBED_DYNA_SJIS | EMBED_AFTER_NEW;
|
hp.type = USING_STRING | EMBED_ABLE | EMBED_DYNA_SJIS | EMBED_AFTER_NEW;
|
||||||
hp.hook_font = F_GetGlyphOutlineA;
|
hp.embed_hook_font = F_GetGlyphOutlineA;
|
||||||
return NewHook(hp, "AGE_System");
|
return NewHook(hp, "AGE_System");
|
||||||
}
|
}
|
@ -14,7 +14,7 @@ bool InsertAnimHook()
|
|||||||
myhp.address = addr + 10;
|
myhp.address = addr + 10;
|
||||||
|
|
||||||
myhp.type = USING_STRING | NO_CONTEXT | EMBED_ABLE | EMBED_AFTER_OVERWRITE | EMBED_DYNA_SJIS; // /HQ 不使用上下文区分 把所有线程的文本都提取
|
myhp.type = USING_STRING | NO_CONTEXT | EMBED_ABLE | EMBED_AFTER_OVERWRITE | EMBED_DYNA_SJIS; // /HQ 不使用上下文区分 把所有线程的文本都提取
|
||||||
myhp.hook_font = F_GetGlyphOutlineA;
|
myhp.embed_hook_font = F_GetGlyphOutlineA;
|
||||||
// data_offset
|
// data_offset
|
||||||
myhp.offset = get_reg(regs::ecx);
|
myhp.offset = get_reg(regs::ecx);
|
||||||
char nameForUser[HOOK_NAME_SIZE] = "Anim";
|
char nameForUser[HOOK_NAME_SIZE] = "Anim";
|
||||||
@ -34,7 +34,7 @@ bool InsertAnim2Hook()
|
|||||||
}
|
}
|
||||||
HookParam myhp;
|
HookParam myhp;
|
||||||
myhp.address = addr + 10;
|
myhp.address = addr + 10;
|
||||||
myhp.hook_font = F_GetGlyphOutlineA;
|
myhp.embed_hook_font = F_GetGlyphOutlineA;
|
||||||
// メスつまみ3
|
// メスつまみ3
|
||||||
// そんな俺に声をかけてきたのは、近所のスーパーで働いている主婦の、@n『@[赤羽:あかばね]@[千晶:ちあき]』さんだ。
|
// そんな俺に声をかけてきたのは、近所のスーパーで働いている主婦の、@n『@[赤羽:あかばね]@[千晶:ちあき]』さんだ。
|
||||||
myhp.filter_fun = [](TextBuffer *buffer, HookParam *hp)
|
myhp.filter_fun = [](TextBuffer *buffer, HookParam *hp)
|
||||||
@ -43,7 +43,7 @@ bool InsertAnim2Hook()
|
|||||||
result = std::regex_replace(result, std::regex("@\\[(.*?):(.*?)\\]", std::regex_constants::icase), "$1");
|
result = std::regex_replace(result, std::regex("@\\[(.*?):(.*?)\\]", std::regex_constants::icase), "$1");
|
||||||
buffer->from(result);
|
buffer->from(result);
|
||||||
};
|
};
|
||||||
myhp.newlineseperator = L"@n";
|
myhp.lineSeparator = L"@n";
|
||||||
myhp.type = USING_STRING | NO_CONTEXT | EMBED_ABLE | EMBED_AFTER_OVERWRITE | EMBED_DYNA_SJIS;
|
myhp.type = USING_STRING | NO_CONTEXT | EMBED_ABLE | EMBED_AFTER_OVERWRITE | EMBED_DYNA_SJIS;
|
||||||
// 僕がいない間に変貌えられた妻の秘肉 ~ラブラブ新婚妻は他の男に抱かれ淫らに喘ぐ夢を見るか~ 体験版
|
// 僕がいない間に変貌えられた妻の秘肉 ~ラブラブ新婚妻は他の男に抱かれ淫らに喘ぐ夢を見るか~ 体験版
|
||||||
|
|
||||||
|
80
cpp/LunaHook/LunaHook/engine32/Aromarie.cpp
Normal file
80
cpp/LunaHook/LunaHook/engine32/Aromarie.cpp
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
#include "Aromarie.h"
|
||||||
|
|
||||||
|
// https://vndb.org/v2330
|
||||||
|
// 月ノ光太陽ノ影
|
||||||
|
|
||||||
|
bool Aromarie::attach_function()
|
||||||
|
{
|
||||||
|
auto name = []()
|
||||||
|
{
|
||||||
|
char aSelectNameVoic[] = "select name,voiceBase,soundMode from envCharacter where name=?;";
|
||||||
|
auto paSelectNameVoic = MemDbg::findBytes(aSelectNameVoic, sizeof(aSelectNameVoic), processStartAddress, processStopAddress);
|
||||||
|
if (!paSelectNameVoic)
|
||||||
|
return false;
|
||||||
|
auto push = MemDbg::findPushAddress(paSelectNameVoic, processStartAddress, processStopAddress);
|
||||||
|
if (!push)
|
||||||
|
return false;
|
||||||
|
auto addr = MemDbg::findEnclosingAlignedFunction(push);
|
||||||
|
if (!addr)
|
||||||
|
return false;
|
||||||
|
auto checks = findxref_reverse_checkcallop(addr, processStartAddress, processStopAddress, 0xe8);
|
||||||
|
if (!checks.size())
|
||||||
|
return false;
|
||||||
|
auto last = checks[checks.size() - 1];
|
||||||
|
addr = MemDbg::findEnclosingAlignedFunction(last);
|
||||||
|
if (!addr)
|
||||||
|
return false;
|
||||||
|
HookParam hp;
|
||||||
|
hp.address = addr;
|
||||||
|
hp.type = USING_STRING | EMBED_ABLE | EMBED_AFTER_OVERWRITE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
||||||
|
hp.offset = get_stack(1);
|
||||||
|
return NewHook(hp, "AromarieName");
|
||||||
|
}();
|
||||||
|
auto text = []()
|
||||||
|
{
|
||||||
|
BYTE sig[] = {
|
||||||
|
// if ( (unsigned __int8)((v6 ^ 0x20) + 95) < 0x3Cu )
|
||||||
|
/*
|
||||||
|
.text:0040799E mov cl, al
|
||||||
|
.text:004079A0 xor ecx, 20h
|
||||||
|
.text:004079A3 add ecx, 5Fh ; '_'
|
||||||
|
.text:004079A6 and ecx, 0FFh
|
||||||
|
.text:004079AC cmp ecx, 3Ch ; '<'
|
||||||
|
.text:004079AF jl loc_407C13
|
||||||
|
.text:004079B5 cmp al, 5Ch ; '\'
|
||||||
|
*/
|
||||||
|
0x8A, 0xC8,
|
||||||
|
0x83, 0xF1, 0x20,
|
||||||
|
0x83, 0xC1, 0x5F,
|
||||||
|
0x81, 0xE1, 0xFF, 0x00, 0x00, 0x00,
|
||||||
|
0x83, 0xF9, 0x3C,
|
||||||
|
0x0F, XX, XX4,
|
||||||
|
0x3C, 0x5C};
|
||||||
|
auto check = MemDbg::findBytes(sig, sizeof(sig), processStartAddress, processStopAddress);
|
||||||
|
if (!check)
|
||||||
|
return false;
|
||||||
|
auto addr = MemDbg::findEnclosingAlignedFunction(check);
|
||||||
|
if (!addr)
|
||||||
|
return false;
|
||||||
|
auto checks = findxref_reverse_checkcallop(addr, processStartAddress, processStopAddress, 0xe8);
|
||||||
|
if (!checks.size())
|
||||||
|
return false;
|
||||||
|
auto last = checks[checks.size() - 1];
|
||||||
|
addr = MemDbg::findEnclosingAlignedFunction(last);
|
||||||
|
if (!addr)
|
||||||
|
return false;
|
||||||
|
HookParam hp;
|
||||||
|
hp.address = addr;
|
||||||
|
hp.type = USING_STRING | EMBED_ABLE | EMBED_AFTER_NEW | EMBED_DYNA_SJIS | NO_CONTEXT;
|
||||||
|
hp.offset = get_stack(1);
|
||||||
|
hp.filter_fun = [](TextBuffer *buffer, HookParam *hp)
|
||||||
|
{
|
||||||
|
auto s = buffer->strA();
|
||||||
|
s = std::regex_replace(s, std::regex(R"(\\\w)"), "");
|
||||||
|
s = std::regex_replace(s, std::regex(R"(%.*?%)"), "");
|
||||||
|
buffer->from(s);
|
||||||
|
};
|
||||||
|
return NewHook(hp, "AromarieText");
|
||||||
|
}();
|
||||||
|
return name && text;
|
||||||
|
}
|
15
cpp/LunaHook/LunaHook/engine32/Aromarie.h
Normal file
15
cpp/LunaHook/LunaHook/engine32/Aromarie.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
|
||||||
|
// https://vndb.org/v2330
|
||||||
|
// 月ノ光太陽ノ影
|
||||||
|
|
||||||
|
class Aromarie : public ENGINE
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Aromarie()
|
||||||
|
{
|
||||||
|
check_by = CHECK_BY::FILE_ALL;
|
||||||
|
check_by_target = check_by_list{L"scene.db", L"script.axr", L"se.axr", L"system.db", L"user.db", L"koe.axr", L"cg.axr", L"bgm.axr"};
|
||||||
|
is_engine_certain = false;
|
||||||
|
};
|
||||||
|
bool attach_function();
|
||||||
|
};
|
@ -75,7 +75,7 @@ bool InsertAtelierKaguya2Hook()
|
|||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.offset = get_reg(regs::eax);
|
hp.offset = get_reg(regs::eax);
|
||||||
hp.type = USING_STRING | EMBED_AFTER_OVERWRITE | EMBED_ABLE | EMBED_DYNA_SJIS;
|
hp.type = USING_STRING | EMBED_AFTER_OVERWRITE | EMBED_ABLE | EMBED_DYNA_SJIS;
|
||||||
hp.hook_font = F_TextOutA;
|
hp.embed_hook_font = F_TextOutA;
|
||||||
hp.filter_fun = NewLineCharToSpaceFilterA;
|
hp.filter_fun = NewLineCharToSpaceFilterA;
|
||||||
ConsoleOutput("INSERT Atelier KAGUYA2");
|
ConsoleOutput("INSERT Atelier KAGUYA2");
|
||||||
|
|
||||||
|
@ -1190,14 +1190,14 @@ bool InsertBGIDynamicHook(LPVOID addr, DWORD frame, DWORD stack)
|
|||||||
*/
|
*/
|
||||||
ULONG addr, funaddr;
|
ULONG addr, funaddr;
|
||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.hook_font = F_TextOutA | F_TextOutW;
|
hp.embed_hook_font = F_TextOutA | F_TextOutW;
|
||||||
if (addr = search_bgi3(processStartAddress, processStopAddress))
|
if (addr = search_bgi3(processStartAddress, processStopAddress))
|
||||||
{
|
{
|
||||||
// 有乱码,无法处理。
|
// 有乱码,无法处理。
|
||||||
Private::textIndex_ = 3;
|
Private::textIndex_ = 3;
|
||||||
hp.offset = get_stack(Private::textIndex_);
|
hp.offset = get_stack(Private::textIndex_);
|
||||||
Private::type_ = Private::Type_BGI3;
|
Private::type_ = Private::Type_BGI3;
|
||||||
hp.hook_font |= F_GetTextExtentPoint32W;
|
hp.embed_hook_font |= F_GetTextExtentPoint32W;
|
||||||
if (addr - processStartAddress == 0x3B860) //[220729][1171051][きゃべつそふと] ジュエリー・ハーツ・アカデミア -We will wing wonder world-,无法处理的乱码,不知道怎么回事。
|
if (addr - processStartAddress == 0x3B860) //[220729][1171051][きゃべつそふと] ジュエリー・ハーツ・アカデミア -We will wing wonder world-,无法处理的乱码,不知道怎么回事。
|
||||||
addr = 0;
|
addr = 0;
|
||||||
}
|
}
|
||||||
@ -1594,7 +1594,7 @@ bool InsertBGI4Hook()
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
hp.type = CODEC_UTF16 | USING_STRING | NO_CONTEXT | EMBED_ABLE | EMBED_AFTER_OVERWRITE;
|
hp.type = CODEC_UTF16 | USING_STRING | NO_CONTEXT | EMBED_ABLE | EMBED_AFTER_OVERWRITE;
|
||||||
hp.hook_font = F_TextOutW | F_GetTextExtentPoint32W;
|
hp.embed_hook_font = F_TextOutW | F_GetTextExtentPoint32W;
|
||||||
hp.filter_fun = BGI7Filter;
|
hp.filter_fun = BGI7Filter;
|
||||||
hp.offset = get_stack(2);
|
hp.offset = get_stack(2);
|
||||||
ConsoleOutput("BGI4");
|
ConsoleOutput("BGI4");
|
||||||
|
@ -1194,7 +1194,7 @@ namespace
|
|||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.offset = get_stack(1);
|
hp.offset = get_stack(1);
|
||||||
hp.type = EMBED_ABLE | USING_STRING | EMBED_AFTER_NEW | EMBED_DYNA_SJIS;
|
hp.type = EMBED_ABLE | USING_STRING | EMBED_AFTER_NEW | EMBED_DYNA_SJIS;
|
||||||
hp.hook_font = F_GetGlyphOutlineA;
|
hp.embed_hook_font = F_GetGlyphOutlineA;
|
||||||
hp.filter_fun = [](TextBuffer *buffer, HookParam *hp)
|
hp.filter_fun = [](TextBuffer *buffer, HookParam *hp)
|
||||||
{
|
{
|
||||||
std::string str = buffer->strA();
|
std::string str = buffer->strA();
|
||||||
|
@ -241,7 +241,7 @@ bool InsertCatSystem2Hook()
|
|||||||
auto _ = std::regex_replace(buffer->strA(), std::regex(R"(\[(.+?)/.+\])"), "$1");
|
auto _ = std::regex_replace(buffer->strA(), std::regex(R"(\[(.+?)/.+\])"), "$1");
|
||||||
buffer->from(_);
|
buffer->from(_);
|
||||||
};
|
};
|
||||||
hp.newlineseperator = L"\\n";
|
hp.lineSeparator = L"\\n";
|
||||||
return NewHook(hp, "CatSystem2new");
|
return NewHook(hp, "CatSystem2new");
|
||||||
}
|
}
|
||||||
namespace
|
namespace
|
||||||
@ -831,8 +831,8 @@ namespace
|
|||||||
else
|
else
|
||||||
hp.type |= EMBED_DYNA_SJIS;
|
hp.type |= EMBED_DYNA_SJIS;
|
||||||
hp.text_fun = Private::hookBefore;
|
hp.text_fun = Private::hookBefore;
|
||||||
hp.hook_after = Private::hookafter;
|
hp.embed_fun = Private::hookafter;
|
||||||
hp.hook_font = F_GetGlyphOutlineA;
|
hp.embed_hook_font = F_GetGlyphOutlineA;
|
||||||
hp.filter_fun = [](TextBuffer *buffer, HookParam *hp)
|
hp.filter_fun = [](TextBuffer *buffer, HookParam *hp)
|
||||||
{
|
{
|
||||||
buffer->from(std::regex_replace(buffer->strA(), std::regex(R"(\[(.+?)/.+\])"), "$1"));
|
buffer->from(std::regex_replace(buffer->strA(), std::regex(R"(\[(.+?)/.+\])"), "$1"));
|
||||||
@ -843,7 +843,7 @@ namespace
|
|||||||
if (p)
|
if (p)
|
||||||
{
|
{
|
||||||
hp.type |= EMBED_DYNA_SJIS;
|
hp.type |= EMBED_DYNA_SJIS;
|
||||||
hp.hook_font = F_GetGlyphOutlineA;
|
hp.embed_hook_font = F_GetGlyphOutlineA;
|
||||||
patch_fun = []()
|
patch_fun = []()
|
||||||
{
|
{
|
||||||
if (*(WORD *)p == 0xc985)
|
if (*(WORD *)p == 0xc985)
|
||||||
|
@ -72,7 +72,7 @@ namespace{
|
|||||||
hp.address =addr;
|
hp.address =addr;
|
||||||
hp.offset=get_stack(2);
|
hp.offset=get_stack(2);
|
||||||
hp.type = USING_STRING|EMBED_ABLE|EMBED_AFTER_NEW|EMBED_DYNA_SJIS;
|
hp.type = USING_STRING|EMBED_ABLE|EMBED_AFTER_NEW|EMBED_DYNA_SJIS;
|
||||||
hp.hook_font=F_GetGlyphOutlineA;
|
hp.embed_hook_font=F_GetGlyphOutlineA;
|
||||||
return NewHook(hp, "Circus1");
|
return NewHook(hp, "Circus1");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -85,7 +85,7 @@ namespace
|
|||||||
hp.address = funcaddr;
|
hp.address = funcaddr;
|
||||||
hp.offset = get_stack(2);
|
hp.offset = get_stack(2);
|
||||||
hp.type = USING_STRING; //|EMBED_ABLE|EMBED_AFTER_NEW|EMBED_DYNA_SJIS;
|
hp.type = USING_STRING; //|EMBED_ABLE|EMBED_AFTER_NEW|EMBED_DYNA_SJIS;
|
||||||
// hp.hook_font=F_GetGlyphOutlineA;
|
// hp.embed_hook_font=F_GetGlyphOutlineA;
|
||||||
// it will split a long to many lines
|
// it will split a long to many lines
|
||||||
hp.filter_fun = filter;
|
hp.filter_fun = filter;
|
||||||
|
|
||||||
@ -321,8 +321,8 @@ namespace
|
|||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.filter_fun = filter;
|
hp.filter_fun = filter;
|
||||||
hp.text_fun = Private::hookBefore;
|
hp.text_fun = Private::hookBefore;
|
||||||
hp.hook_after = Private::hookafter;
|
hp.embed_fun = Private::hookafter;
|
||||||
hp.hook_font = F_GetGlyphOutlineA;
|
hp.embed_hook_font = F_GetGlyphOutlineA;
|
||||||
hp.type = USING_STRING | EMBED_ABLE | NO_CONTEXT | EMBED_DYNA_SJIS;
|
hp.type = USING_STRING | EMBED_ABLE | NO_CONTEXT | EMBED_DYNA_SJIS;
|
||||||
|
|
||||||
return NewHook(hp, "EmbedCircus");
|
return NewHook(hp, "EmbedCircus");
|
||||||
|
@ -44,7 +44,7 @@ bool InsertCodeXHook()
|
|||||||
hp.offset = get_reg(regs::eax);
|
hp.offset = get_reg(regs::eax);
|
||||||
hp.index = 0;
|
hp.index = 0;
|
||||||
hp.type = USING_STRING | EMBED_ABLE | EMBED_AFTER_OVERWRITE | NO_CONTEXT; // 无法解决中文乱码
|
hp.type = USING_STRING | EMBED_ABLE | EMBED_AFTER_OVERWRITE | NO_CONTEXT; // 无法解决中文乱码
|
||||||
hp.hook_font = F_GetGlyphOutlineA;
|
hp.embed_hook_font = F_GetGlyphOutlineA;
|
||||||
hp.filter_fun = CodeXFilter;
|
hp.filter_fun = CodeXFilter;
|
||||||
ConsoleOutput("INSERT CodeX");
|
ConsoleOutput("INSERT CodeX");
|
||||||
|
|
||||||
@ -136,7 +136,7 @@ namespace
|
|||||||
hp.offset = get_stack(1);
|
hp.offset = get_stack(1);
|
||||||
hp.split = get_stack(2);
|
hp.split = get_stack(2);
|
||||||
hp.type = USING_STRING | FULL_STRING | NO_CONTEXT | USING_SPLIT | EMBED_ABLE | EMBED_AFTER_OVERWRITE;
|
hp.type = USING_STRING | FULL_STRING | NO_CONTEXT | USING_SPLIT | EMBED_ABLE | EMBED_AFTER_OVERWRITE;
|
||||||
hp.hook_font = F_GetGlyphOutlineA;
|
hp.embed_hook_font = F_GetGlyphOutlineA;
|
||||||
hp.filter_fun = CodeXFilter;
|
hp.filter_fun = CodeXFilter;
|
||||||
return NewHook(hp, "CodeX2");
|
return NewHook(hp, "CodeX2");
|
||||||
}
|
}
|
||||||
|
@ -777,7 +777,7 @@ namespace
|
|||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.offset = get_stack(3);
|
hp.offset = get_stack(3);
|
||||||
hp.type = CODEC_UTF16 | USING_STRING | EMBED_ABLE | EMBED_AFTER_NEW;
|
hp.type = CODEC_UTF16 | USING_STRING | EMBED_ABLE | EMBED_AFTER_NEW;
|
||||||
hp.hook_font = F_GetGlyphOutlineW;
|
hp.embed_hook_font = F_GetGlyphOutlineW;
|
||||||
return NewHook(hp, "Cotopha5");
|
return NewHook(hp, "Cotopha5");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ namespace
|
|||||||
*split = FIXED_SPLIT_VALUE;
|
*split = FIXED_SPLIT_VALUE;
|
||||||
buffer->from_cs((char *)*(DWORD *)(stack->base + hp->offset));
|
buffer->from_cs((char *)*(DWORD *)(stack->base + hp->offset));
|
||||||
}
|
}
|
||||||
void hook_after(hook_stack *s, TextBuffer buffer)
|
void embed_fun(hook_stack *s, TextBuffer buffer)
|
||||||
{
|
{
|
||||||
static std::string ts;
|
static std::string ts;
|
||||||
ts = buffer.viewA();
|
ts = buffer.viewA();
|
||||||
@ -60,8 +60,8 @@ namespace
|
|||||||
hp.address = hook_addr;
|
hp.address = hook_addr;
|
||||||
hp.text_fun = SpecialHookDebonosuScenario;
|
hp.text_fun = SpecialHookDebonosuScenario;
|
||||||
// hp.type = USING_STRING;
|
// hp.type = USING_STRING;
|
||||||
hp.hook_after = hook_after;
|
hp.embed_fun = embed_fun;
|
||||||
hp.hook_font = F_MultiByteToWideChar | F_GetTextExtentPoint32A;
|
hp.embed_hook_font = F_MultiByteToWideChar | F_GetTextExtentPoint32A;
|
||||||
hp.type = USING_STRING | NO_CONTEXT | USING_SPLIT | FIXING_SPLIT | EMBED_ABLE | EMBED_DYNA_SJIS; // there is only one thread
|
hp.type = USING_STRING | NO_CONTEXT | USING_SPLIT | FIXING_SPLIT | EMBED_ABLE | EMBED_DYNA_SJIS; // there is only one thread
|
||||||
hp.filter_fun = [](TextBuffer *buffer, HookParam *hp)
|
hp.filter_fun = [](TextBuffer *buffer, HookParam *hp)
|
||||||
{
|
{
|
||||||
|
@ -333,9 +333,9 @@ namespace
|
|||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.text_fun = Private::hookBefore;
|
hp.text_fun = Private::hookBefore;
|
||||||
hp.hook_after = Private::hookafter1;
|
hp.embed_fun = Private::hookafter1;
|
||||||
hp.type = USING_STRING | EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
hp.type = USING_STRING | EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
||||||
hp.hook_font = F_TextOutA;
|
hp.embed_hook_font = F_TextOutA;
|
||||||
succ |= NewHook(hp, "EmbedElf");
|
succ |= NewHook(hp, "EmbedElf");
|
||||||
hp.address = addr + 5;
|
hp.address = addr + 5;
|
||||||
hp.text_fun = Private::hookAfter;
|
hp.text_fun = Private::hookAfter;
|
||||||
|
@ -24,7 +24,7 @@ bool EntisGLS::attach_function() {
|
|||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr ;
|
hp.address = addr ;
|
||||||
hp.offset=get_stack(1);
|
hp.offset=get_stack(1);
|
||||||
hp.hook_font=F_GetGlyphOutlineW;
|
hp.embed_hook_font=F_GetGlyphOutlineW;
|
||||||
hp.type = USING_STRING|CODEC_UTF16|EMBED_ABLE|EMBED_AFTER_NEW;
|
hp.type = USING_STRING|CODEC_UTF16|EMBED_ABLE|EMBED_AFTER_NEW;
|
||||||
|
|
||||||
return NewHook(hp, "EntisGLS");
|
return NewHook(hp, "EntisGLS");
|
||||||
|
@ -216,7 +216,7 @@ namespace
|
|||||||
*role = arg->role();
|
*role = arg->role();
|
||||||
buffer->from_cs(trimmedText);
|
buffer->from_cs(trimmedText);
|
||||||
}
|
}
|
||||||
void hook_after(hook_stack *s, TextBuffer buffer)
|
void embed_fun(hook_stack *s, TextBuffer buffer)
|
||||||
{
|
{
|
||||||
static std::string data_;
|
static std::string data_;
|
||||||
data_ = buffer.strA();
|
data_ = buffer.strA();
|
||||||
@ -249,12 +249,12 @@ bool InsertEscudeHook()
|
|||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.text_fun = hook_before;
|
hp.text_fun = hook_before;
|
||||||
hp.hook_after = hook_after;
|
hp.embed_fun = embed_fun;
|
||||||
hp.hook_font = F_TextOutA | F_GetTextExtentPoint32A;
|
hp.embed_hook_font = F_TextOutA | F_GetTextExtentPoint32A;
|
||||||
hp.text_fun = SpecialHookEscude;
|
hp.text_fun = SpecialHookEscude;
|
||||||
hp.filter_fun = EscudeFilter;
|
hp.filter_fun = EscudeFilter;
|
||||||
hp.type = USING_STRING | USING_SPLIT | NO_CONTEXT | EMBED_ABLE | EMBED_DYNA_SJIS; // NO_CONTEXT as this function is only called by one caller anyway
|
hp.type = USING_STRING | USING_SPLIT | NO_CONTEXT | EMBED_ABLE | EMBED_DYNA_SJIS; // NO_CONTEXT as this function is only called by one caller anyway
|
||||||
hp.newlineseperator = L"<r>";
|
hp.lineSeparator = L"<r>";
|
||||||
ConsoleOutput("INSERT Escude");
|
ConsoleOutput("INSERT Escude");
|
||||||
|
|
||||||
return NewHook(hp, "Escude");
|
return NewHook(hp, "Escude");
|
||||||
|
@ -519,7 +519,7 @@ bool InsertEushullyHook()
|
|||||||
hp.address = lastCaller;
|
hp.address = lastCaller;
|
||||||
hp.type = USING_STRING | FIXING_SPLIT | EMBED_ABLE | EMBED_AFTER_NEW | EMBED_DYNA_SJIS; // merging all threads
|
hp.type = USING_STRING | FIXING_SPLIT | EMBED_ABLE | EMBED_AFTER_NEW | EMBED_DYNA_SJIS; // merging all threads
|
||||||
hp.offset = arg2_lpString; // arg2 = 0x4 * 2
|
hp.offset = arg2_lpString; // arg2 = 0x4 * 2
|
||||||
hp.hook_font = F_MultiByteToWideChar | F_GetTextExtentPoint32A | F_GetGlyphOutlineA | F_CreateFontA;
|
hp.embed_hook_font = F_MultiByteToWideChar | F_GetTextExtentPoint32A | F_GetGlyphOutlineA | F_CreateFontA;
|
||||||
ConsoleOutput("INSERT Eushully");
|
ConsoleOutput("INSERT Eushully");
|
||||||
bool succ = NewHook(hp, "ARCGameEngine");
|
bool succ = NewHook(hp, "ARCGameEngine");
|
||||||
if (thisCaller)
|
if (thisCaller)
|
||||||
|
@ -476,7 +476,7 @@ namespace
|
|||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.offset = get_stack(1);
|
hp.offset = get_stack(1);
|
||||||
hp.type = USING_STRING | EMBED_ABLE | EMBED_AFTER_NEW | EMBED_DYNA_SJIS;
|
hp.type = USING_STRING | EMBED_ABLE | EMBED_AFTER_NEW | EMBED_DYNA_SJIS;
|
||||||
hp.hook_font = F_DrawTextA | F_GetGlyphOutlineA;
|
hp.embed_hook_font = F_DrawTextA | F_GetGlyphOutlineA;
|
||||||
hp.filter_fun = [](TextBuffer *buffer, HookParam *hp)
|
hp.filter_fun = [](TextBuffer *buffer, HookParam *hp)
|
||||||
{
|
{
|
||||||
buffer->from(std::regex_replace(buffer->strA(), std::regex("\\[.+\\|(.+?)\\]"), "$1"));
|
buffer->from(std::regex_replace(buffer->strA(), std::regex("\\[.+\\|(.+?)\\]"), "$1"));
|
||||||
|
@ -412,10 +412,10 @@ namespace
|
|||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.text_fun = Private::hookBefore;
|
hp.text_fun = Private::hookBefore;
|
||||||
hp.hook_after = Private::hook2a;
|
hp.embed_fun = Private::hook2a;
|
||||||
hp.type = EMBED_ABLE | CODEC_UTF16 | USING_STRING | NO_CONTEXT;
|
hp.type = EMBED_ABLE | CODEC_UTF16 | USING_STRING | NO_CONTEXT;
|
||||||
hp.newlineseperator = L"%r";
|
hp.lineSeparator = L"%r";
|
||||||
hp.hook_font = F_GetGlyphOutlineW;
|
hp.embed_hook_font = F_GetGlyphOutlineW;
|
||||||
bool succ = NewHook(hp, "EmbedGXP");
|
bool succ = NewHook(hp, "EmbedGXP");
|
||||||
hp.address = addr + 5;
|
hp.address = addr + 5;
|
||||||
hp.text_fun = Private::hookAfter;
|
hp.text_fun = Private::hookAfter;
|
||||||
@ -493,10 +493,10 @@ namespace
|
|||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.text_fun = Private::hookBefore;
|
hp.text_fun = Private::hookBefore;
|
||||||
hp.hook_after = Private::hook2a;
|
hp.embed_fun = Private::hook2a;
|
||||||
hp.type = EMBED_ABLE | CODEC_UTF16 | USING_STRING | NO_CONTEXT;
|
hp.type = EMBED_ABLE | CODEC_UTF16 | USING_STRING | NO_CONTEXT;
|
||||||
hp.newlineseperator = L"%r";
|
hp.lineSeparator = L"%r";
|
||||||
hp.hook_font = F_GetGlyphOutlineW;
|
hp.embed_hook_font = F_GetGlyphOutlineW;
|
||||||
bool succ = NewHook(hp, "EmbedGXP2");
|
bool succ = NewHook(hp, "EmbedGXP2");
|
||||||
hp.address = addr + 5;
|
hp.address = addr + 5;
|
||||||
hp.text_fun = Private::hookAfter;
|
hp.text_fun = Private::hookAfter;
|
||||||
|
@ -256,9 +256,9 @@ bool InsertHorkEyeHook()
|
|||||||
hp.offset = get_reg(regs::ebx);
|
hp.offset = get_reg(regs::ebx);
|
||||||
hp.type = USING_STRING | NO_CONTEXT | FIXING_SPLIT | EMBED_ABLE | EMBED_DYNA_SJIS;
|
hp.type = USING_STRING | NO_CONTEXT | FIXING_SPLIT | EMBED_ABLE | EMBED_DYNA_SJIS;
|
||||||
hp.text_fun = hookBefore<-4 - 1>;
|
hp.text_fun = hookBefore<-4 - 1>;
|
||||||
hp.hook_after = hookafter<-4 - 1>;
|
hp.embed_fun = hookafter<-4 - 1>;
|
||||||
hp.filter_fun = HorkEyeFilter;
|
hp.filter_fun = HorkEyeFilter;
|
||||||
hp.newlineseperator = L"[n]";
|
hp.lineSeparator = L"[n]";
|
||||||
ConsoleOutput("INSERT HorkEye");
|
ConsoleOutput("INSERT HorkEye");
|
||||||
|
|
||||||
return NewHook(hp, "HorkEye");
|
return NewHook(hp, "HorkEye");
|
||||||
@ -282,7 +282,7 @@ bool InsertHorkEyeHook()
|
|||||||
hp.offset = get_stack(1);
|
hp.offset = get_stack(1);
|
||||||
hp.type = USING_STRING | EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
hp.type = USING_STRING | EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
||||||
hp.text_fun = hookBefore<1>;
|
hp.text_fun = hookBefore<1>;
|
||||||
hp.hook_after = hookafter<1>;
|
hp.embed_fun = hookafter<1>;
|
||||||
|
|
||||||
return NewHook(hp, "HorkEye2");
|
return NewHook(hp, "HorkEye2");
|
||||||
}
|
}
|
||||||
@ -325,7 +325,7 @@ bool InsertHorkEye3Hook()
|
|||||||
hp.offset = get_stack(1);
|
hp.offset = get_stack(1);
|
||||||
hp.type = USING_STRING | EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
hp.type = USING_STRING | EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
||||||
hp.text_fun = hookBefore<1>;
|
hp.text_fun = hookBefore<1>;
|
||||||
hp.hook_after = hookafter<1>;
|
hp.embed_fun = hookafter<1>;
|
||||||
|
|
||||||
return NewHook(hp, "HorkEye3");
|
return NewHook(hp, "HorkEye3");
|
||||||
}
|
}
|
||||||
@ -359,7 +359,7 @@ bool InsertHorkEye4Hook()
|
|||||||
hp.offset = get_reg(regs::eax);
|
hp.offset = get_reg(regs::eax);
|
||||||
hp.type = USING_STRING | NO_CONTEXT | EMBED_ABLE | EMBED_DYNA_SJIS;
|
hp.type = USING_STRING | NO_CONTEXT | EMBED_ABLE | EMBED_DYNA_SJIS;
|
||||||
hp.text_fun = hookBefore<-1 - 1>;
|
hp.text_fun = hookBefore<-1 - 1>;
|
||||||
hp.hook_after = hookafter<-1 - 1>;
|
hp.embed_fun = hookafter<-1 - 1>;
|
||||||
|
|
||||||
return NewHook(hp, "HorkEye4");
|
return NewHook(hp, "HorkEye4");
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ bool InsertKissHook() {
|
|||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.offset=get_reg(regs::esi);
|
hp.offset=get_reg(regs::esi);
|
||||||
hp.type = USING_STRING | NO_CONTEXT|EMBED_DYNA_SJIS|EMBED_ABLE|EMBED_AFTER_NEW;
|
hp.type = USING_STRING | NO_CONTEXT|EMBED_DYNA_SJIS|EMBED_ABLE|EMBED_AFTER_NEW;
|
||||||
hp.hook_font=F_GetTextExtentPoint32A|F_ExtTextOutA;
|
hp.embed_hook_font=F_GetTextExtentPoint32A|F_ExtTextOutA;
|
||||||
ConsoleOutput("INSERT Kiss");
|
ConsoleOutput("INSERT Kiss");
|
||||||
return NewHook(hp, "Kiss");
|
return NewHook(hp, "Kiss");
|
||||||
}
|
}
|
||||||
|
@ -1417,7 +1417,7 @@ namespace
|
|||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.type = EMBED_ABLE | CODEC_UTF16 | NO_CONTEXT;
|
hp.type = EMBED_ABLE | CODEC_UTF16 | NO_CONTEXT;
|
||||||
hp.text_fun = hookBefore;
|
hp.text_fun = hookBefore;
|
||||||
hp.hook_after = hookafter;
|
hp.embed_fun = hookafter;
|
||||||
return NewHook(hp, "EmbedKrkr2");
|
return NewHook(hp, "EmbedKrkr2");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1609,9 +1609,9 @@ dl 16
|
|||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.type = EMBED_ABLE | CODEC_UTF8 | NO_CONTEXT | USING_STRING;
|
hp.type = EMBED_ABLE | CODEC_UTF8 | NO_CONTEXT | USING_STRING;
|
||||||
hp.text_fun = hookBeforez;
|
hp.text_fun = hookBeforez;
|
||||||
hp.hook_after = after;
|
hp.embed_fun = after;
|
||||||
hp.newlineseperator = L"\\n";
|
hp.lineSeparator = L"\\n";
|
||||||
hp.hook_font = F_GetTextExtentPoint32W | F_GetGlyphOutlineW;
|
hp.embed_hook_font = F_GetTextExtentPoint32W | F_GetGlyphOutlineW;
|
||||||
succ |= NewHook(hp, "EmbedKrkrZ");
|
succ |= NewHook(hp, "EmbedKrkrZ");
|
||||||
// return true;
|
// return true;
|
||||||
}
|
}
|
||||||
@ -1682,7 +1682,7 @@ namespace
|
|||||||
return buffer->clear();
|
return buffer->clear();
|
||||||
buffer->from(t);
|
buffer->from(t);
|
||||||
};
|
};
|
||||||
hp.hook_after = [](hook_stack *s, TextBuffer buffer)
|
hp.embed_fun = [](hook_stack *s, TextBuffer buffer)
|
||||||
{
|
{
|
||||||
auto t = std::wstring((wchar_t *)s->stack[off / 4]);
|
auto t = std::wstring((wchar_t *)s->stack[off / 4]);
|
||||||
auto newText = buffer.strW();
|
auto newText = buffer.strW();
|
||||||
@ -1692,7 +1692,7 @@ namespace
|
|||||||
newText = newText + L"[r]"; // 揺り籠より天使まで
|
newText = newText + L"[r]"; // 揺り籠より天使まで
|
||||||
wcscpy((wchar_t *)s->stack[off / 4], newText.c_str());
|
wcscpy((wchar_t *)s->stack[off / 4], newText.c_str());
|
||||||
};
|
};
|
||||||
hp.hook_font = F_GetTextExtentPoint32W | F_GetGlyphOutlineW;
|
hp.embed_hook_font = F_GetTextExtentPoint32W | F_GetGlyphOutlineW;
|
||||||
return NewHook(hp, "Krkr2wcs");
|
return NewHook(hp, "Krkr2wcs");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -676,16 +676,16 @@ namespace
|
|||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr1;
|
hp.address = addr1;
|
||||||
hp.text_fun = Private::hook1;
|
hp.text_fun = Private::hook1;
|
||||||
hp.hook_after = Private::hookafter;
|
hp.embed_fun = Private::hookafter;
|
||||||
hp.type = EMBED_ABLE | NO_CONTEXT;
|
hp.type = EMBED_ABLE | NO_CONTEXT;
|
||||||
hp.newlineseperator = L"\x01";
|
hp.lineSeparator = L"\x01";
|
||||||
hp.hook_font = F_GetGlyphOutlineA;
|
hp.embed_hook_font = F_GetGlyphOutlineA;
|
||||||
if (dyna)
|
if (dyna)
|
||||||
{
|
{
|
||||||
static ULONG dynas;
|
static ULONG dynas;
|
||||||
dynas = dyna;
|
dynas = dyna;
|
||||||
hp.type |= EMBED_DYNA_SJIS;
|
hp.type |= EMBED_DYNA_SJIS;
|
||||||
hp.hook_font = F_GetGlyphOutlineA;
|
hp.embed_hook_font = F_GetGlyphOutlineA;
|
||||||
patch_fun = []()
|
patch_fun = []()
|
||||||
{
|
{
|
||||||
ReplaceFunction((PVOID)dynas, (PVOID)(ULONG)isLeadByteChar);
|
ReplaceFunction((PVOID)dynas, (PVOID)(ULONG)isLeadByteChar);
|
||||||
|
@ -455,14 +455,14 @@ bool InsertLeafHook()
|
|||||||
// 这个会卡死,无解
|
// 这个会卡死,无解
|
||||||
// hp.address=addr1+7;
|
// hp.address=addr1+7;
|
||||||
// hp.hook_before=Private::hook1;
|
// hp.hook_before=Private::hook1;
|
||||||
// hp.hook_after=Private::hookafterbf;
|
// hp.embed_fun=Private::hookafterbf;
|
||||||
// hp.type=EMBED_ABLE;
|
// hp.type=EMBED_ABLE;
|
||||||
// NewHook(hp,"EmbedLeaf");
|
// NewHook(hp,"EmbedLeaf");
|
||||||
hp1.address = addr2 + 7;
|
hp1.address = addr2 + 7;
|
||||||
hp1.text_fun = hook2;
|
hp1.text_fun = hook2;
|
||||||
hp1.hook_after = hook2a;
|
hp1.embed_fun = hook2a;
|
||||||
hp1.type = EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
hp1.type = EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
||||||
hp1.newlineseperator = L"\\n";
|
hp1.lineSeparator = L"\\n";
|
||||||
succ |= NewHook(hp1, "EmbedLeaf");
|
succ |= NewHook(hp1, "EmbedLeaf");
|
||||||
return succ;
|
return succ;
|
||||||
}
|
}
|
||||||
@ -770,7 +770,7 @@ namespace
|
|||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.offset = get_stack(1);
|
hp.offset = get_stack(1);
|
||||||
hp.type = USING_STRING | NO_CONTEXT | EMBED_ABLE | EMBED_DYNA_SJIS | EMBED_AFTER_NEW;
|
hp.type = USING_STRING | NO_CONTEXT | EMBED_ABLE | EMBED_DYNA_SJIS | EMBED_AFTER_NEW;
|
||||||
hp.newlineseperator = L"\\n";
|
hp.lineSeparator = L"\\n";
|
||||||
hp.filter_fun = AquaplusFilter;
|
hp.filter_fun = AquaplusFilter;
|
||||||
return NewHook(hp, "wa2special");
|
return NewHook(hp, "wa2special");
|
||||||
}
|
}
|
||||||
|
@ -506,7 +506,7 @@ namespace
|
|||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr1;
|
hp.address = addr1;
|
||||||
hp.text_fun = Private::hookBefore;
|
hp.text_fun = Private::hookBefore;
|
||||||
hp.hook_after = Private::hookafter1;
|
hp.embed_fun = Private::hookafter1;
|
||||||
hp.type = EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
hp.type = EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
||||||
auto succ = NewHook(hp, "EMBEDLUNA");
|
auto succ = NewHook(hp, "EMBEDLUNA");
|
||||||
hp.address = addr2;
|
hp.address = addr2;
|
||||||
|
@ -233,7 +233,7 @@ bool InsertMajiroHook3x() {
|
|||||||
hp.offset=get_reg(regs::ecx);
|
hp.offset=get_reg(regs::ecx);
|
||||||
hp.type = USING_STRING | NO_CONTEXT;//|EMBED_ABLE|EMBED_AFTER_OVERWRITE|EMBED_DYNA_SJIS;
|
hp.type = USING_STRING | NO_CONTEXT;//|EMBED_ABLE|EMBED_AFTER_OVERWRITE|EMBED_DYNA_SJIS;
|
||||||
//可以内嵌,但是必须保持「」,且DynamicEncoding编码的文字会被自动替换成引擎内的某的字符,导致可读性低。
|
//可以内嵌,但是必须保持「」,且DynamicEncoding编码的文字会被自动替换成引擎内的某的字符,导致可读性低。
|
||||||
//hp.hook_font=F_TextOutA|F_GetTextExtentPoint32A;
|
//hp.embed_hook_font=F_TextOutA|F_GetTextExtentPoint32A;
|
||||||
//https://vndb.org/v17376
|
//https://vndb.org/v17376
|
||||||
//私が好きなら「好き」って言って!
|
//私が好きなら「好き」って言って!
|
||||||
hp.text_fun= [](hook_stack *stack, HookParam *hp, TextBuffer *buffer, uintptr_t *split){
|
hp.text_fun= [](hook_stack *stack, HookParam *hp, TextBuffer *buffer, uintptr_t *split){
|
||||||
|
@ -1473,7 +1473,7 @@ namespace
|
|||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.text_fun = Private::hookBefore;
|
hp.text_fun = Private::hookBefore;
|
||||||
hp.hook_after = Private::hookafter;
|
hp.embed_fun = Private::hookafter;
|
||||||
hp.type = CODEC_UTF16 | EMBED_ABLE | NO_CONTEXT;
|
hp.type = CODEC_UTF16 | EMBED_ABLE | NO_CONTEXT;
|
||||||
return NewHook(hp, "EmbedMalie");
|
return NewHook(hp, "EmbedMalie");
|
||||||
}
|
}
|
||||||
|
@ -665,9 +665,9 @@ namespace
|
|||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.text_fun = Private::hookBeforehookBefore;
|
hp.text_fun = Private::hookBeforehookBefore;
|
||||||
hp.hook_after = Private::hookafter;
|
hp.embed_fun = Private::hookafter;
|
||||||
hp.type = EMBED_ABLE | USING_STRING | EMBED_DYNA_SJIS | NO_CONTEXT;
|
hp.type = EMBED_ABLE | USING_STRING | EMBED_DYNA_SJIS | NO_CONTEXT;
|
||||||
hp.hook_font = F_GetGlyphOutlineA;
|
hp.embed_hook_font = F_GetGlyphOutlineA;
|
||||||
hp.filter_fun = [](TextBuffer *buffer, HookParam *hp)
|
hp.filter_fun = [](TextBuffer *buffer, HookParam *hp)
|
||||||
{
|
{
|
||||||
buffer->from(std::regex_replace(buffer->strA(), std::regex("\\{.*?\\}"), ""));
|
buffer->from(std::regex_replace(buffer->strA(), std::regex("\\{.*?\\}"), ""));
|
||||||
@ -678,7 +678,7 @@ namespace
|
|||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr + 5;
|
hp.address = addr + 5;
|
||||||
hp.text_fun = Private::hookAfter;
|
hp.text_fun = Private::hookAfter;
|
||||||
hp.hook_after = Private::hookafter;
|
hp.embed_fun = Private::hookafter;
|
||||||
count |= NewHook(hp, "EmbedMinori");
|
count |= NewHook(hp, "EmbedMinori");
|
||||||
}
|
}
|
||||||
return true; // replace all functions
|
return true; // replace all functions
|
||||||
|
@ -310,7 +310,7 @@ bool InsertNeXASHookA()
|
|||||||
hp.address = addrx + sizeof(sig2) - 5;
|
hp.address = addrx + sizeof(sig2) - 5;
|
||||||
hp.offset = get_reg(regs::eax);
|
hp.offset = get_reg(regs::eax);
|
||||||
hp.type = USING_STRING;
|
hp.type = USING_STRING;
|
||||||
hp.newlineseperator = L"@n";
|
hp.lineSeparator = L"@n";
|
||||||
hp.filter_fun = [](TextBuffer *buffer, HookParam *)
|
hp.filter_fun = [](TextBuffer *buffer, HookParam *)
|
||||||
{
|
{
|
||||||
auto s = buffer->strA();
|
auto s = buffer->strA();
|
||||||
@ -483,7 +483,7 @@ namespace
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
hp.newlineseperator = L"@n";
|
hp.lineSeparator = L"@n";
|
||||||
return NewHook(hp, "NeXAS3");
|
return NewHook(hp, "NeXAS3");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -757,7 +757,7 @@ bool attach(ULONG startAddress, ULONG stopAddress) // attach scenario
|
|||||||
hp.type=USING_STRING|EMBED_ABLE|EMBED_AFTER_NEW| EMBED_DYNA_SJIS|NO_CONTEXT;
|
hp.type=USING_STRING|EMBED_ABLE|EMBED_AFTER_NEW| EMBED_DYNA_SJIS|NO_CONTEXT;
|
||||||
hp.offset=get_stack(1);
|
hp.offset=get_stack(1);
|
||||||
hp.text_fun=Private::hookBefore;
|
hp.text_fun=Private::hookBefore;
|
||||||
hp.hook_font=F_GetGlyphOutlineA;
|
hp.embed_hook_font=F_GetGlyphOutlineA;
|
||||||
return NewHook(hp,"EmbedNexton");
|
return NewHook(hp,"EmbedNexton");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ namespace
|
|||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.offset = get_stack(2);
|
hp.offset = get_stack(2);
|
||||||
hp.type = USING_STRING | EMBED_ABLE | EMBED_AFTER_NEW | EMBED_DYNA_SJIS;
|
hp.type = USING_STRING | EMBED_ABLE | EMBED_AFTER_NEW | EMBED_DYNA_SJIS;
|
||||||
hp.hook_font = F_GetGlyphOutlineA;
|
hp.embed_hook_font = F_GetGlyphOutlineA;
|
||||||
return NewHook(hp, "Basil2");
|
return NewHook(hp, "Basil2");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -177,12 +177,12 @@ static bool InsertNewPal1Hook()
|
|||||||
hp.offset = get_stack(2); // arg2
|
hp.offset = get_stack(2); // arg2
|
||||||
hp.type = USING_STRING | EMBED_ABLE | NO_CONTEXT;
|
hp.type = USING_STRING | EMBED_ABLE | NO_CONTEXT;
|
||||||
hp.text_fun = before;
|
hp.text_fun = before;
|
||||||
hp.hook_after = after;
|
hp.embed_fun = after;
|
||||||
hp.filter_fun = [](TextBuffer *buffer, HookParam *hp)
|
hp.filter_fun = [](TextBuffer *buffer, HookParam *hp)
|
||||||
{
|
{
|
||||||
buffer->from(rubyRemove(buffer->strA()));
|
buffer->from(rubyRemove(buffer->strA()));
|
||||||
};
|
};
|
||||||
hp.hook_font = F_CreateFontIndirectA | F_CreateFontA;
|
hp.embed_hook_font = F_CreateFontIndirectA | F_CreateFontA;
|
||||||
ConsoleOutput("INSERT Pal1");
|
ConsoleOutput("INSERT Pal1");
|
||||||
return NewHook(hp, "Pal");
|
return NewHook(hp, "Pal");
|
||||||
}
|
}
|
||||||
@ -239,7 +239,7 @@ namespace
|
|||||||
hp.type = USING_STRING | EMBED_ABLE | EMBED_AFTER_NEW;
|
hp.type = USING_STRING | EMBED_ABLE | EMBED_AFTER_NEW;
|
||||||
// 无法编码的字符无法显示,若开启dyna则会直接略过这个字,还不如不开。
|
// 无法编码的字符无法显示,若开启dyna则会直接略过这个字,还不如不开。
|
||||||
//[230929] [ユニゾンシフト] 恋とHしかしていない!
|
//[230929] [ユニゾンシフト] 恋とHしかしていない!
|
||||||
hp.newlineseperator = L"<br>";
|
hp.lineSeparator = L"<br>";
|
||||||
hp.filter_fun = [](TextBuffer *buffer, HookParam *hp)
|
hp.filter_fun = [](TextBuffer *buffer, HookParam *hp)
|
||||||
{
|
{
|
||||||
buffer->from(rubyRemove(buffer->strA()));
|
buffer->from(rubyRemove(buffer->strA()));
|
||||||
|
@ -665,7 +665,7 @@ namespace
|
|||||||
hp.type = USING_STRING | EMBED_ABLE | EMBED_AFTER_NEW | EMBED_DYNA_SJIS;
|
hp.type = USING_STRING | EMBED_ABLE | EMBED_AFTER_NEW | EMBED_DYNA_SJIS;
|
||||||
hp.offset = get_stack(2);
|
hp.offset = get_stack(2);
|
||||||
hp.filter_fun = pensilfilter;
|
hp.filter_fun = pensilfilter;
|
||||||
hp.hook_font = F_GetGlyphOutlineA;
|
hp.embed_hook_font = F_GetGlyphOutlineA;
|
||||||
return NewHook(hp, "EmbedPensil");
|
return NewHook(hp, "EmbedPensil");
|
||||||
};
|
};
|
||||||
if (addr && _do(addr))
|
if (addr && _do(addr))
|
||||||
@ -702,7 +702,7 @@ namespace
|
|||||||
hp.type = USING_STRING | EMBED_ABLE | EMBED_AFTER_NEW | EMBED_DYNA_SJIS;
|
hp.type = USING_STRING | EMBED_ABLE | EMBED_AFTER_NEW | EMBED_DYNA_SJIS;
|
||||||
hp.offset = get_stack(1);
|
hp.offset = get_stack(1);
|
||||||
hp.filter_fun = pensilfilter;
|
hp.filter_fun = pensilfilter;
|
||||||
hp.hook_font = F_GetGlyphOutlineA;
|
hp.embed_hook_font = F_GetGlyphOutlineA;
|
||||||
return NewHook(hp, "EmbedPensilChoice");
|
return NewHook(hp, "EmbedPensilChoice");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1014,10 +1014,10 @@ namespace
|
|||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.text_fun = Private::hookBefore;
|
hp.text_fun = Private::hookBefore;
|
||||||
hp.hook_after = Private::hookafter;
|
hp.embed_fun = Private::hookafter;
|
||||||
hp.newlineseperator = L"[n]";
|
hp.lineSeparator = L"[n]";
|
||||||
hp.type = EMBED_ABLE | EMBED_DYNA_SJIS | USING_STRING | NO_CONTEXT;
|
hp.type = EMBED_ABLE | EMBED_DYNA_SJIS | USING_STRING | NO_CONTEXT;
|
||||||
hp.hook_font = F_ExtTextOutA | F_GetTextExtentPoint32A;
|
hp.embed_hook_font = F_ExtTextOutA | F_GetTextExtentPoint32A;
|
||||||
hp.filter_fun = [](TextBuffer *buffer, HookParam *hp)
|
hp.filter_fun = [](TextBuffer *buffer, HookParam *hp)
|
||||||
{
|
{
|
||||||
buffer->from(std::regex_replace(buffer->strA(), std::regex("\\[rb,(.*?),.+\\]"), "$1"));
|
buffer->from(std::regex_replace(buffer->strA(), std::regex("\\[rb,(.*?),.+\\]"), "$1"));
|
||||||
|
@ -725,9 +725,9 @@ namespace
|
|||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.text_fun = Private::hookBefore;
|
hp.text_fun = Private::hookBefore;
|
||||||
hp.hook_after = Private::hookafter2;
|
hp.embed_fun = Private::hookafter2;
|
||||||
hp.type = USING_STRING | CODEC_UTF16 | EMBED_ABLE | NO_CONTEXT;
|
hp.type = USING_STRING | CODEC_UTF16 | EMBED_ABLE | NO_CONTEXT;
|
||||||
hp.hook_font = F_GetGlyphOutlineW;
|
hp.embed_hook_font = F_GetGlyphOutlineW;
|
||||||
auto succ = NewHook(hp, "EmbedRGSS3");
|
auto succ = NewHook(hp, "EmbedRGSS3");
|
||||||
hp.address = addr + 5;
|
hp.address = addr + 5;
|
||||||
hp.text_fun = Private::hookAfter;
|
hp.text_fun = Private::hookAfter;
|
||||||
@ -890,9 +890,9 @@ namespace
|
|||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.text_fun = Private::hookBefore;
|
hp.text_fun = Private::hookBefore;
|
||||||
hp.hook_after = Private::hookafter2;
|
hp.embed_fun = Private::hookafter2;
|
||||||
hp.type = USING_STRING | CODEC_UTF16 | EMBED_ABLE | NO_CONTEXT;
|
hp.type = USING_STRING | CODEC_UTF16 | EMBED_ABLE | NO_CONTEXT;
|
||||||
hp.hook_font = F_GetGlyphOutlineW;
|
hp.embed_hook_font = F_GetGlyphOutlineW;
|
||||||
|
|
||||||
functionAddress = addr;
|
functionAddress = addr;
|
||||||
return NewHook(hp, "EmbedRGSS3Choice");
|
return NewHook(hp, "EmbedRGSS3Choice");
|
||||||
@ -1348,9 +1348,9 @@ namespace
|
|||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.text_fun = Private::hookBefore;
|
hp.text_fun = Private::hookBefore;
|
||||||
hp.hook_after = Private::hookafter2;
|
hp.embed_fun = Private::hookafter2;
|
||||||
hp.type = USING_STRING | CODEC_UTF16 | EMBED_ABLE | NO_CONTEXT;
|
hp.type = USING_STRING | CODEC_UTF16 | EMBED_ABLE | NO_CONTEXT;
|
||||||
hp.hook_font = F_GetGlyphOutlineW;
|
hp.embed_hook_font = F_GetGlyphOutlineW;
|
||||||
|
|
||||||
return NewHook(hp, "EmbedRGSS3Other");
|
return NewHook(hp, "EmbedRGSS3Other");
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ bool InsertRetouch1Hook()
|
|||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.offset=get_stack(1);
|
hp.offset=get_stack(1);
|
||||||
hp.type = USING_STRING|NO_CONTEXT|EMBED_ABLE|EMBED_AFTER_NEW|EMBED_DYNA_SJIS;
|
hp.type = USING_STRING|NO_CONTEXT|EMBED_ABLE|EMBED_AFTER_NEW|EMBED_DYNA_SJIS;
|
||||||
hp.hook_font=F_GetGlyphOutlineA;
|
hp.embed_hook_font=F_GetGlyphOutlineA;
|
||||||
hp.text_fun = SpecialHookRetouch1;
|
hp.text_fun = SpecialHookRetouch1;
|
||||||
ConsoleOutput("INSERT Retouch");
|
ConsoleOutput("INSERT Retouch");
|
||||||
return NewHook(hp, "Retouch");
|
return NewHook(hp, "Retouch");
|
||||||
@ -56,7 +56,7 @@ bool InsertRetouch2Hook()
|
|||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.offset=get_stack(1);
|
hp.offset=get_stack(1);
|
||||||
hp.type = USING_STRING|NO_CONTEXT|EMBED_ABLE|EMBED_AFTER_NEW|EMBED_DYNA_SJIS;
|
hp.type = USING_STRING|NO_CONTEXT|EMBED_ABLE|EMBED_AFTER_NEW|EMBED_DYNA_SJIS;
|
||||||
hp.hook_font=F_GetGlyphOutlineA;
|
hp.embed_hook_font=F_GetGlyphOutlineA;
|
||||||
ConsoleOutput("INSERT Retouch");
|
ConsoleOutput("INSERT Retouch");
|
||||||
return NewHook(hp, "Retouch");
|
return NewHook(hp, "Retouch");
|
||||||
}
|
}
|
||||||
@ -87,7 +87,7 @@ bool attach() // attach scenario
|
|||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.offset=get_stack(1);
|
hp.offset=get_stack(1);
|
||||||
hp.type = USING_STRING|NO_CONTEXT|EMBED_ABLE|EMBED_AFTER_NEW|EMBED_DYNA_SJIS;
|
hp.type = USING_STRING|NO_CONTEXT|EMBED_ABLE|EMBED_AFTER_NEW|EMBED_DYNA_SJIS;
|
||||||
hp.hook_font=F_GetGlyphOutlineA;
|
hp.embed_hook_font=F_GetGlyphOutlineA;
|
||||||
return NewHook(hp, "RetouchHistory");
|
return NewHook(hp, "RetouchHistory");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ bool ScrPlayer_attach_function1()
|
|||||||
hp.offset = get_stack(5);
|
hp.offset = get_stack(5);
|
||||||
// 会把多行分开导致翻译不对。
|
// 会把多行分开导致翻译不对。
|
||||||
hp.type = USING_STRING; //|EMBED_ABLE|EMBED_AFTER_NEW|EMBED_DYNA_SJIS;
|
hp.type = USING_STRING; //|EMBED_ABLE|EMBED_AFTER_NEW|EMBED_DYNA_SJIS;
|
||||||
// hp.hook_font=F_GetGlyphOutlineA;
|
// hp.embed_hook_font=F_GetGlyphOutlineA;
|
||||||
hp.filter_fun = [](TextBuffer *buffer, HookParam *)
|
hp.filter_fun = [](TextBuffer *buffer, HookParam *)
|
||||||
{
|
{
|
||||||
static int idx = 0;
|
static int idx = 0;
|
||||||
|
@ -974,10 +974,10 @@ namespace
|
|||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = (ULONG)::GetTextExtentPoint32A;
|
hp.address = (ULONG)::GetTextExtentPoint32A;
|
||||||
hp.text_fun = Private::hookBefore;
|
hp.text_fun = Private::hookBefore;
|
||||||
hp.hook_after = Private::hookafter;
|
hp.embed_fun = Private::hookafter;
|
||||||
hp.type = EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
hp.type = EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
||||||
hp.newlineseperator = L"_r";
|
hp.lineSeparator = L"_r";
|
||||||
hp.hook_font = F_GetGlyphOutlineA;
|
hp.embed_hook_font = F_GetGlyphOutlineA;
|
||||||
hp.filter_fun = [](TextBuffer *buffer, HookParam *hp)
|
hp.filter_fun = [](TextBuffer *buffer, HookParam *hp)
|
||||||
{
|
{
|
||||||
buffer->from(std::regex_replace(buffer->strA(), std::regex("_t!.*?[/>]"), ""));
|
buffer->from(std::regex_replace(buffer->strA(), std::regex("_t!.*?[/>]"), ""));
|
||||||
|
@ -1783,8 +1783,8 @@ namespace
|
|||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.type = EMBED_ABLE | CODEC_UTF16 | EMBED_INSERT_SPACE_AFTER_UNENCODABLE | NO_CONTEXT; // 0x41
|
hp.type = EMBED_ABLE | CODEC_UTF16 | EMBED_INSERT_SPACE_AFTER_UNENCODABLE | NO_CONTEXT; // 0x41
|
||||||
hp.text_fun = Private::text_fun;
|
hp.text_fun = Private::text_fun;
|
||||||
hp.hook_after = Private::hookafter;
|
hp.embed_fun = Private::hookafter;
|
||||||
hp.hook_font = F_GetGlyphOutlineW;
|
hp.embed_hook_font = F_GetGlyphOutlineW;
|
||||||
return NewHook(hp, "EmbedSiglus");
|
return NewHook(hp, "EmbedSiglus");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1872,8 +1872,8 @@ namespace OtherHook
|
|||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.type = EMBED_ABLE | CODEC_UTF16 | EMBED_INSERT_SPACE_AFTER_UNENCODABLE | NO_CONTEXT; // 0x41
|
hp.type = EMBED_ABLE | CODEC_UTF16 | EMBED_INSERT_SPACE_AFTER_UNENCODABLE | NO_CONTEXT; // 0x41
|
||||||
hp.text_fun = Private::hookBefore;
|
hp.text_fun = Private::hookBefore;
|
||||||
hp.hook_after = Private::hookafter2;
|
hp.embed_fun = Private::hookafter2;
|
||||||
hp.hook_font = F_GetGlyphOutlineW;
|
hp.embed_hook_font = F_GetGlyphOutlineW;
|
||||||
return NewHook(hp, "EmbedSiglus");
|
return NewHook(hp, "EmbedSiglus");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -313,8 +313,8 @@ bool InsertSilkysHook()
|
|||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.type = USING_STRING | NO_CONTEXT | EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
hp.type = USING_STRING | NO_CONTEXT | EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
||||||
hp.text_fun = hookBefore;
|
hp.text_fun = hookBefore;
|
||||||
hp.hook_after = hookafter1;
|
hp.embed_fun = hookafter1;
|
||||||
hp.hook_font = F_GetGlyphOutlineA;
|
hp.embed_hook_font = F_GetGlyphOutlineA;
|
||||||
succ_ |= NewHook(hp, "EmbedSilkys");
|
succ_ |= NewHook(hp, "EmbedSilkys");
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@ -373,7 +373,7 @@ namespace
|
|||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.offset = get_stack(1);
|
hp.offset = get_stack(1);
|
||||||
hp.newlineseperator = L"\\n";
|
hp.lineSeparator = L"\\n";
|
||||||
hp.type = USING_STRING | CODEC_UTF16 | EMBED_ABLE | EMBED_AFTER_NEW;
|
hp.type = USING_STRING | CODEC_UTF16 | EMBED_ABLE | EMBED_AFTER_NEW;
|
||||||
return NewHook(hp, "EmbedSilkysX");
|
return NewHook(hp, "EmbedSilkysX");
|
||||||
}
|
}
|
||||||
@ -650,7 +650,7 @@ bool Silkyssakura::attach_function()
|
|||||||
hp_embed.address = addr;
|
hp_embed.address = addr;
|
||||||
hp_embed.offset = get_stack(2);
|
hp_embed.offset = get_stack(2);
|
||||||
hp_embed.type = USING_STRING | EMBED_ABLE | EMBED_AFTER_NEW | CODEC_UTF16;
|
hp_embed.type = USING_STRING | EMBED_ABLE | EMBED_AFTER_NEW | CODEC_UTF16;
|
||||||
hp_embed.hook_font = F_GetGlyphOutlineW;
|
hp_embed.embed_hook_font = F_GetGlyphOutlineW;
|
||||||
return NewHook(hp_embed, "embedSilkyssakura"); // 这个是分两层分别绘制文字和阴影,需要两个都内嵌。
|
return NewHook(hp_embed, "embedSilkyssakura"); // 这个是分两层分别绘制文字和阴影,需要两个都内嵌。
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -688,7 +688,7 @@ namespace
|
|||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.offset = get_reg(regs::ecx);
|
hp.offset = get_reg(regs::ecx);
|
||||||
hp.newlineseperator = L"\\n";
|
hp.lineSeparator = L"\\n";
|
||||||
hp.type = USING_STRING | EMBED_ABLE | EMBED_AFTER_NEW | EMBED_DYNA_SJIS;
|
hp.type = USING_STRING | EMBED_ABLE | EMBED_AFTER_NEW | EMBED_DYNA_SJIS;
|
||||||
return NewHook(hp, "SilkysX");
|
return NewHook(hp, "SilkysX");
|
||||||
}
|
}
|
||||||
@ -719,7 +719,7 @@ bool Silkysveryveryold_attach_function()
|
|||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.offset = get_stack(1);
|
hp.offset = get_stack(1);
|
||||||
hp.newlineseperator = L"\\n";
|
hp.lineSeparator = L"\\n";
|
||||||
hp.type = USING_STRING;
|
hp.type = USING_STRING;
|
||||||
return NewHook(hp, "SilkysX");
|
return NewHook(hp, "SilkysX");
|
||||||
}
|
}
|
||||||
|
@ -1423,7 +1423,7 @@ namespace
|
|||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.type = EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
hp.type = EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
||||||
hp.text_fun = Private::hookBefore;
|
hp.text_fun = Private::hookBefore;
|
||||||
hp.hook_after = Private::hookafter2;
|
hp.embed_fun = Private::hookafter2;
|
||||||
auto succ = NewHook(hp, "EmbedSysmtem44");
|
auto succ = NewHook(hp, "EmbedSysmtem44");
|
||||||
hp.address = addr + 5;
|
hp.address = addr + 5;
|
||||||
hp.text_fun = Private::hookAfter;
|
hp.text_fun = Private::hookAfter;
|
||||||
|
@ -762,7 +762,7 @@ namespace
|
|||||||
{
|
{
|
||||||
hp.type |= CODEC_UTF16;
|
hp.type |= CODEC_UTF16;
|
||||||
hp.text_fun = beforeAgsSpriteCreateTextW;
|
hp.text_fun = beforeAgsSpriteCreateTextW;
|
||||||
hp.hook_after = afterAgsSpriteCreateTextW;
|
hp.embed_fun = afterAgsSpriteCreateTextW;
|
||||||
succ |= NewHook(hp, "SystemAoiW");
|
succ |= NewHook(hp, "SystemAoiW");
|
||||||
|
|
||||||
ULONG addr = findAoiProc(hModule, "AgsSpriteCreateTextEx", 1);
|
ULONG addr = findAoiProc(hModule, "AgsSpriteCreateTextEx", 1);
|
||||||
@ -773,7 +773,7 @@ namespace
|
|||||||
hp.offset = get_stack(2);
|
hp.offset = get_stack(2);
|
||||||
hp.type = CODEC_UTF16 | EMBED_ABLE; //|EMBED_AFTER_OVERWRITE;
|
hp.type = CODEC_UTF16 | EMBED_ABLE; //|EMBED_AFTER_OVERWRITE;
|
||||||
hp.text_fun = beforeAgsSpriteCreateTextExW;
|
hp.text_fun = beforeAgsSpriteCreateTextExW;
|
||||||
hp.hook_after = afterAgsSpriteCreateTextExW;
|
hp.embed_fun = afterAgsSpriteCreateTextExW;
|
||||||
succ |= NewHook(hp, "SystemAoiExW");
|
succ |= NewHook(hp, "SystemAoiExW");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -782,8 +782,8 @@ namespace
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
hp.text_fun = beforeAgsSpriteCreateTextA;
|
hp.text_fun = beforeAgsSpriteCreateTextA;
|
||||||
hp.hook_after = afterAgsSpriteCreateTextA;
|
hp.embed_fun = afterAgsSpriteCreateTextA;
|
||||||
hp.hook_font = F_DrawTextExA;
|
hp.embed_hook_font = F_DrawTextExA;
|
||||||
if (AgsPatchA::attach(processStartAddress, processStopAddress) == false)
|
if (AgsPatchA::attach(processStartAddress, processStopAddress) == false)
|
||||||
hp.type |= EMBED_DYNA_SJIS;
|
hp.type |= EMBED_DYNA_SJIS;
|
||||||
succ |= NewHook(hp, "SystemAoiA");
|
succ |= NewHook(hp, "SystemAoiA");
|
||||||
|
@ -29,7 +29,7 @@ bool InsertTanukiHook()
|
|||||||
hp.address = j;
|
hp.address = j;
|
||||||
hp.offset=get_stack(1);
|
hp.offset=get_stack(1);
|
||||||
hp.type = USING_STRING | NO_CONTEXT|EMBED_ABLE|EMBED_AFTER_NEW|EMBED_DYNA_SJIS;
|
hp.type = USING_STRING | NO_CONTEXT|EMBED_ABLE|EMBED_AFTER_NEW|EMBED_DYNA_SJIS;
|
||||||
hp.hook_font=F_GetGlyphOutlineA;
|
hp.embed_hook_font=F_GetGlyphOutlineA;
|
||||||
ConsoleOutput("INSERT TanukiSoft");
|
ConsoleOutput("INSERT TanukiSoft");
|
||||||
return NewHook(hp, "TanukiSoft");
|
return NewHook(hp, "TanukiSoft");
|
||||||
}
|
}
|
||||||
|
@ -392,8 +392,8 @@ namespace
|
|||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr + addr_offset;
|
hp.address = addr + addr_offset;
|
||||||
hp.text_fun = Private::hookBefore;
|
hp.text_fun = Private::hookBefore;
|
||||||
hp.hook_after = Private::hookafter;
|
hp.embed_fun = Private::hookafter;
|
||||||
hp.hook_font = F_GetGlyphOutlineA;
|
hp.embed_hook_font = F_GetGlyphOutlineA;
|
||||||
hp.type = USING_STRING | EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
hp.type = USING_STRING | EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
||||||
return NewHook(hp, "EmbedTaskforce");
|
return NewHook(hp, "EmbedTaskforce");
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ bool Triangle::attach_function()
|
|||||||
hp.offset = get_stack(4);
|
hp.offset = get_stack(4);
|
||||||
hp.split = get_stack(1);
|
hp.split = get_stack(1);
|
||||||
hp.type = USING_STRING | USING_SPLIT;
|
hp.type = USING_STRING | USING_SPLIT;
|
||||||
hp.hook_font = F_TextOutA;
|
hp.embed_hook_font = F_TextOutA;
|
||||||
hp.filter_fun = [](TextBuffer *buffer, HookParam *hp)
|
hp.filter_fun = [](TextBuffer *buffer, HookParam *hp)
|
||||||
{
|
{
|
||||||
// ▼
|
// ▼
|
||||||
|
@ -481,11 +481,11 @@ namespace
|
|||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = beforeAddress;
|
hp.address = beforeAddress;
|
||||||
hp.text_fun = Private::hookBefore;
|
hp.text_fun = Private::hookBefore;
|
||||||
hp.hook_after = Private::hookafter2;
|
hp.embed_fun = Private::hookafter2;
|
||||||
hp.offset = get_stack(1);
|
hp.offset = get_stack(1);
|
||||||
hp.newlineseperator = L"\\n";
|
hp.lineSeparator = L"\\n";
|
||||||
hp.type = EMBED_ABLE | EMBED_DYNA_SJIS;
|
hp.type = EMBED_ABLE | EMBED_DYNA_SJIS;
|
||||||
hp.hook_font = F_GetGlyphOutlineA;
|
hp.embed_hook_font = F_GetGlyphOutlineA;
|
||||||
auto suc = NewHook(hp, "EMbedUnicorn");
|
auto suc = NewHook(hp, "EMbedUnicorn");
|
||||||
hp.address = afterAddress;
|
hp.address = afterAddress;
|
||||||
hp.text_fun = Private::hookAfter;
|
hp.text_fun = Private::hookAfter;
|
||||||
@ -784,10 +784,10 @@ namespace
|
|||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.text_fun = Private::hookBefore;
|
hp.text_fun = Private::hookBefore;
|
||||||
hp.hook_after = Private::hookafter;
|
hp.embed_fun = Private::hookafter;
|
||||||
hp.type = EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
hp.type = EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
||||||
hp.newlineseperator = L"\\n";
|
hp.lineSeparator = L"\\n";
|
||||||
hp.hook_font = F_GetGlyphOutlineA;
|
hp.embed_hook_font = F_GetGlyphOutlineA;
|
||||||
return NewHook(hp, "EMbedUnicornOther");
|
return NewHook(hp, "EMbedUnicornOther");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -484,9 +484,9 @@ namespace
|
|||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.text_fun = Private::hookBefore;
|
hp.text_fun = Private::hookBefore;
|
||||||
hp.hook_after = Private::hookafter;
|
hp.embed_fun = Private::hookafter;
|
||||||
hp.index = 4;
|
hp.index = 4;
|
||||||
hp.hook_font = F_TextOutA | F_GetTextExtentPoint32A;
|
hp.embed_hook_font = F_TextOutA | F_GetTextExtentPoint32A;
|
||||||
hp.type = DATA_INDIRECT | USING_STRING | EMBED_ABLE | NO_CONTEXT | EMBED_DYNA_SJIS;
|
hp.type = DATA_INDIRECT | USING_STRING | EMBED_ABLE | NO_CONTEXT | EMBED_DYNA_SJIS;
|
||||||
if (role == Engine::NameRole)
|
if (role == Engine::NameRole)
|
||||||
count += NewHook(hp, "EmbedWaffle_name");
|
count += NewHook(hp, "EmbedWaffle_name");
|
||||||
|
@ -601,8 +601,8 @@ bool InsertWillPlus4Hook()
|
|||||||
// hp.filter_fun = WillPlus_extra_filter;
|
// hp.filter_fun = WillPlus_extra_filter;
|
||||||
hp.type = USING_STRING | CODEC_UTF16 | EMBED_ABLE;
|
hp.type = USING_STRING | CODEC_UTF16 | EMBED_ABLE;
|
||||||
hp.text_fun = will3::hookBefore;
|
hp.text_fun = will3::hookBefore;
|
||||||
hp.newlineseperator = L"\\n";
|
hp.lineSeparator = L"\\n";
|
||||||
hp.hook_after = will3::hookafter;
|
hp.embed_fun = will3::hookafter;
|
||||||
return NewHook(hp, "EmbedWillplus3");
|
return NewHook(hp, "EmbedWillplus3");
|
||||||
}
|
}
|
||||||
bool InsertWillPlus5Hook()
|
bool InsertWillPlus5Hook()
|
||||||
@ -860,9 +860,9 @@ namespace
|
|||||||
savetyperef[_type] = _tinfo;
|
savetyperef[_type] = _tinfo;
|
||||||
hp.text_fun = hookBefore<_type>;
|
hp.text_fun = hookBefore<_type>;
|
||||||
hp.type = EMBED_ABLE | CODEC_UTF16 | NO_CONTEXT;
|
hp.type = EMBED_ABLE | CODEC_UTF16 | NO_CONTEXT;
|
||||||
hp.newlineseperator = L"\\n";
|
hp.lineSeparator = L"\\n";
|
||||||
hp.hook_after = hookafter<_type>;
|
hp.embed_fun = hookafter<_type>;
|
||||||
hp.hook_font = F_MultiByteToWideChar | F_GetGlyphOutlineW;
|
hp.embed_hook_font = F_MultiByteToWideChar | F_GetGlyphOutlineW;
|
||||||
char _[] = "EmbedWillplusW0";
|
char _[] = "EmbedWillplusW0";
|
||||||
_[sizeof(_) - 2] += _type;
|
_[sizeof(_) - 2] += _type;
|
||||||
return NewHook(hp, _);
|
return NewHook(hp, _);
|
||||||
@ -1571,15 +1571,15 @@ namespace
|
|||||||
|
|
||||||
hp.text_fun = Private::hookBefore;
|
hp.text_fun = Private::hookBefore;
|
||||||
hp.type = EMBED_ABLE | NO_CONTEXT;
|
hp.type = EMBED_ABLE | NO_CONTEXT;
|
||||||
hp.newlineseperator = L"\\n";
|
hp.lineSeparator = L"\\n";
|
||||||
hp.hook_after = Private::hookafter;
|
hp.embed_fun = Private::hookafter;
|
||||||
hp.hook_font = F_GetGlyphOutlineA | F_TextOutA;
|
hp.embed_hook_font = F_GetGlyphOutlineA | F_TextOutA;
|
||||||
static ULONG paddr = (PatchA::patchEncoding(startAddress, stopAddress));
|
static ULONG paddr = (PatchA::patchEncoding(startAddress, stopAddress));
|
||||||
ConsoleOutput("%p", paddr);
|
ConsoleOutput("%p", paddr);
|
||||||
if (paddr)
|
if (paddr)
|
||||||
{
|
{
|
||||||
hp.type |= EMBED_DYNA_SJIS;
|
hp.type |= EMBED_DYNA_SJIS;
|
||||||
hp.hook_font = F_GetGlyphOutlineA | F_TextOutA;
|
hp.embed_hook_font = F_GetGlyphOutlineA | F_TextOutA;
|
||||||
patch_fun = []()
|
patch_fun = []()
|
||||||
{
|
{
|
||||||
PatchA::replace_near_call(paddr + 5, (ULONG)PatchA::Private::isLeadByteChar);
|
PatchA::replace_near_call(paddr + 5, (ULONG)PatchA::Private::isLeadByteChar);
|
||||||
|
@ -871,9 +871,9 @@ namespace
|
|||||||
hp.offset = get_reg(regs::ecx);
|
hp.offset = get_reg(regs::ecx);
|
||||||
hp.index = 4;
|
hp.index = 4;
|
||||||
hp.text_fun = Private::hookBefore;
|
hp.text_fun = Private::hookBefore;
|
||||||
hp.hook_after = Private::hookafter2;
|
hp.embed_fun = Private::hookafter2;
|
||||||
hp.type = USING_STRING | DATA_INDIRECT | EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
hp.type = USING_STRING | DATA_INDIRECT | EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
||||||
hp.hook_font = F_GetGlyphOutlineA;
|
hp.embed_hook_font = F_GetGlyphOutlineA;
|
||||||
return NewHook(hp, "EmbedWolf");
|
return NewHook(hp, "EmbedWolf");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,7 +194,7 @@ bool libcefhook(HMODULE module)
|
|||||||
hp.address = addr + 4;
|
hp.address = addr + 4;
|
||||||
hp.offset = get_stack(1);
|
hp.offset = get_stack(1);
|
||||||
hp.filter_fun = ceffileter;
|
hp.filter_fun = ceffileter;
|
||||||
hp.newlineseperator = L"<br>";
|
hp.lineSeparator = L"<br>";
|
||||||
hp.length_offset = 2;
|
hp.length_offset = 2;
|
||||||
hp.type = USING_STRING | CODEC_UTF16 | NO_CONTEXT;
|
hp.type = USING_STRING | CODEC_UTF16 | NO_CONTEXT;
|
||||||
hp.user_value = (DWORD) new std::wstring;
|
hp.user_value = (DWORD) new std::wstring;
|
||||||
|
@ -147,8 +147,8 @@ bool attach_navel(ULONG startAddress, ULONG stopAddress) // attach scenario
|
|||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.type = EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
hp.type = EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
||||||
hp.text_fun = hookBefore_navel;
|
hp.text_fun = hookBefore_navel;
|
||||||
hp.hook_after = hookafter_navel;
|
hp.embed_fun = hookafter_navel;
|
||||||
hp.hook_font = F_GetGlyphOutlineA | F_GetTextExtentPoint32A;
|
hp.embed_hook_font = F_GetGlyphOutlineA | F_GetTextExtentPoint32A;
|
||||||
return NewHook(hp, "LucifenEmbed");
|
return NewHook(hp, "LucifenEmbed");
|
||||||
}
|
}
|
||||||
namespace
|
namespace
|
||||||
@ -751,8 +751,8 @@ namespace
|
|||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.type = EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
hp.type = EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
||||||
hp.text_fun = Private::hookBefore;
|
hp.text_fun = Private::hookBefore;
|
||||||
hp.hook_after = Private::hookafter;
|
hp.embed_fun = Private::hookafter;
|
||||||
hp.hook_font = F_GetGlyphOutlineA | F_GetTextExtentPoint32A;
|
hp.embed_hook_font = F_GetGlyphOutlineA | F_GetTextExtentPoint32A;
|
||||||
return NewHook(hp, "EmbedLucifen");
|
return NewHook(hp, "EmbedLucifen");
|
||||||
}
|
}
|
||||||
} // namespace ScenarioHook
|
} // namespace ScenarioHook
|
||||||
@ -950,8 +950,8 @@ namespace
|
|||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.type = EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
hp.type = EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
||||||
hp.text_fun = Private::hookBefore;
|
hp.text_fun = Private::hookBefore;
|
||||||
hp.hook_after = Private::hookafter;
|
hp.embed_fun = Private::hookafter;
|
||||||
hp.hook_font = F_GetGlyphOutlineA | F_GetTextExtentPoint32A;
|
hp.embed_hook_font = F_GetGlyphOutlineA | F_GetTextExtentPoint32A;
|
||||||
return NewHook(hp, "lucifen_choice");
|
return NewHook(hp, "lucifen_choice");
|
||||||
}
|
}
|
||||||
} // namespace ChoiceHook
|
} // namespace ChoiceHook
|
||||||
@ -1016,9 +1016,9 @@ namespace
|
|||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.offset = get_stack(1);
|
hp.offset = get_stack(1);
|
||||||
hp.type = EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
hp.type = EMBED_ABLE | EMBED_DYNA_SJIS | NO_CONTEXT;
|
||||||
hp.hook_after = hookafter;
|
hp.embed_fun = hookafter;
|
||||||
hp.text_fun = hookBefore;
|
hp.text_fun = hookBefore;
|
||||||
hp.hook_font = F_GetGlyphOutlineA | F_GetTextExtentPoint32A;
|
hp.embed_hook_font = F_GetGlyphOutlineA | F_GetTextExtentPoint32A;
|
||||||
return NewHook(hp, "Embedlucifen2");
|
return NewHook(hp, "Embedlucifen2");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ bool utawarerumonoh()
|
|||||||
return false;
|
return false;
|
||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.newlineseperator = L"\\n";
|
hp.lineSeparator = L"\\n";
|
||||||
hp.offset = get_stack(1);
|
hp.offset = get_stack(1);
|
||||||
hp.type = CODEC_UTF8 | USING_STRING | NO_CONTEXT;
|
hp.type = CODEC_UTF8 | USING_STRING | NO_CONTEXT;
|
||||||
ConsoleOutput("utawarerumono");
|
ConsoleOutput("utawarerumono");
|
||||||
@ -46,7 +46,7 @@ bool utawarerumonoh2()
|
|||||||
hp.address = addr + 2;
|
hp.address = addr + 2;
|
||||||
hp.offset = get_reg(regs::esi);
|
hp.offset = get_reg(regs::esi);
|
||||||
hp.type = CODEC_UTF8 | USING_STRING | NO_CONTEXT;
|
hp.type = CODEC_UTF8 | USING_STRING | NO_CONTEXT;
|
||||||
hp.newlineseperator = L"\\n";
|
hp.lineSeparator = L"\\n";
|
||||||
ConsoleOutput("utawarerumono %p", addr);
|
ConsoleOutput("utawarerumono %p", addr);
|
||||||
succ |= NewHook(hp, "utawarerumono");
|
succ |= NewHook(hp, "utawarerumono");
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,7 @@ namespace
|
|||||||
hp.offset = get_reg(regs::rdx);
|
hp.offset = get_reg(regs::rdx);
|
||||||
|
|
||||||
hp.type = EMBED_ABLE | USING_STRING | EMBED_AFTER_NEW | EMBED_DYNA_SJIS;
|
hp.type = EMBED_ABLE | USING_STRING | EMBED_AFTER_NEW | EMBED_DYNA_SJIS;
|
||||||
hp.hook_font = F_GetGlyphOutlineA;
|
hp.embed_hook_font = F_GetGlyphOutlineA;
|
||||||
res |= NewHook(hp, "EmbedCMVS");
|
res |= NewHook(hp, "EmbedCMVS");
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
|
@ -136,7 +136,7 @@ namespace
|
|||||||
buffer->from(str);
|
buffer->from(str);
|
||||||
};
|
};
|
||||||
hp.filter_fun = commonfilter;
|
hp.filter_fun = commonfilter;
|
||||||
hp.newlineseperator = L"\\n";
|
hp.lineSeparator = L"\\n";
|
||||||
return NewHook(hp, "Light.VN.16");
|
return NewHook(hp, "Light.VN.16");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ bool InsertENTERGRAM()
|
|||||||
hp.type = USING_STRING | CODEC_UTF16 | NO_CONTEXT;
|
hp.type = USING_STRING | CODEC_UTF16 | NO_CONTEXT;
|
||||||
hp.filter_fun = ENTERGRAMfilter;
|
hp.filter_fun = ENTERGRAMfilter;
|
||||||
hp.offset = get_reg(regs::rsi);
|
hp.offset = get_reg(regs::rsi);
|
||||||
hp.newlineseperator = L"\\n";
|
hp.lineSeparator = L"\\n";
|
||||||
return NewHook(hp, "UnrealEngine");
|
return NewHook(hp, "UnrealEngine");
|
||||||
}
|
}
|
||||||
bool UnrealEngine::attach_function()
|
bool UnrealEngine::attach_function()
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include "engine32/PONScripter.h"
|
#include "engine32/PONScripter.h"
|
||||||
#include "engine32/Stronger.h"
|
#include "engine32/Stronger.h"
|
||||||
#include "engine32/Fizz.h"
|
#include "engine32/Fizz.h"
|
||||||
|
#include "engine32/Aromarie.h"
|
||||||
#include "engine32/Ruf.h"
|
#include "engine32/Ruf.h"
|
||||||
#include "engine32/SYSD.h"
|
#include "engine32/SYSD.h"
|
||||||
#include "engine32/Diskdream.h"
|
#include "engine32/Diskdream.h"
|
||||||
@ -412,5 +413,6 @@ std::vector<ENGINE *> check_engines()
|
|||||||
new AGE_System,
|
new AGE_System,
|
||||||
new Cage,
|
new Cage,
|
||||||
new Winters,
|
new Winters,
|
||||||
|
new Aromarie,
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -38,7 +38,7 @@ void commonsolvemonostring(uintptr_t offset, TextBuffer *buffer)
|
|||||||
buffer->from(sw.value());
|
buffer->from(sw.value());
|
||||||
}
|
}
|
||||||
|
|
||||||
void unity_ui_string_hook_after(uintptr_t *offset, TextBuffer buff)
|
void unity_ui_string_embed_fun(uintptr_t *offset, TextBuffer buff)
|
||||||
{
|
{
|
||||||
auto view = buff.viewW();
|
auto view = buff.viewW();
|
||||||
auto newstring = il2cppfunctions::create_string(view);
|
auto newstring = il2cppfunctions::create_string(view);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#define RESOLVE_IMPORT(name) name = (decltype(name))(GetProcAddress(game_module, #name))
|
#define RESOLVE_IMPORT(name) name = (decltype(name))(GetProcAddress(game_module, #name))
|
||||||
#pragma once
|
#pragma once
|
||||||
void commonsolvemonostring(uintptr_t offset, TextBuffer *buffer);
|
void commonsolvemonostring(uintptr_t offset, TextBuffer *buffer);
|
||||||
void unity_ui_string_hook_after(uintptr_t *offset, TextBuffer buff);
|
void unity_ui_string_embed_fun(uintptr_t *offset, TextBuffer buff);
|
||||||
|
|
||||||
uintptr_t tryfindmonoil2cpp(const char *_dll, const char *_namespace, const char *_class, const char *_method, int paramCoun, bool strict = false);
|
uintptr_t tryfindmonoil2cpp(const char *_dll, const char *_namespace, const char *_class, const char *_method, int paramCoun, bool strict = false);
|
@ -1,6 +1,6 @@
|
|||||||
#include "python.h"
|
#include "python.h"
|
||||||
#include <dwrite.h>
|
#include <dwrite.h>
|
||||||
extern "C" __declspec(dllexport) const wchar_t *internal_renpy_call_host(const wchar_t *text, int split)
|
extern "C" __declspec(dllexport) const wchar_t *luna_internal_renpy_call_host(const wchar_t *text, int split)
|
||||||
{
|
{
|
||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
@ -21,9 +21,9 @@ bool Luna_checkisusingembed(uint64_t address, uint64_t ctx2, bool usingsplit)
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
extern "C" __declspec(dllexport) bool internal_renpy_call_is_embed_using(int split, bool usingsplit)
|
extern "C" __declspec(dllexport) bool luna_internal_renpy_call_is_embed_using(int split, bool usingsplit)
|
||||||
{
|
{
|
||||||
return Luna_checkisusingembed((uint64_t)internal_renpy_call_host, split, usingsplit);
|
return Luna_checkisusingembed((uint64_t)luna_internal_renpy_call_host, split, usingsplit);
|
||||||
}
|
}
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
@ -62,11 +62,11 @@ namespace
|
|||||||
void hook_internal_renpy_call_host()
|
void hook_internal_renpy_call_host()
|
||||||
{
|
{
|
||||||
HookParam hp_internal;
|
HookParam hp_internal;
|
||||||
hp_internal.address = (uintptr_t)internal_renpy_call_host;
|
hp_internal.address = (uintptr_t)luna_internal_renpy_call_host;
|
||||||
hp_internal.offset = GETARG1;
|
hp_internal.offset = GETARG1;
|
||||||
hp_internal.split = GETARG2;
|
hp_internal.split = GETARG2;
|
||||||
hp_internal.type = USING_SPLIT | USING_STRING | CODEC_UTF16 | EMBED_ABLE | EMBED_AFTER_NEW | NO_CONTEXT;
|
hp_internal.type = USING_SPLIT | USING_STRING | CODEC_UTF16 | EMBED_ABLE | EMBED_AFTER_NEW | NO_CONTEXT;
|
||||||
NewHook(hp_internal, "internal_renpy_call_host");
|
NewHook(hp_internal, "luna_internal_renpy_call_host");
|
||||||
PyRunScript(LoadResData(L"renpy_hook_text", L"PYSOURCE").c_str());
|
PyRunScript(LoadResData(L"renpy_hook_text", L"PYSOURCE").c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -268,7 +268,7 @@ namespace
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
extern "C" __declspec(dllexport) const wchar_t *internal_renpy_get_font()
|
extern "C" __declspec(dllexport) const wchar_t *luna_internal_renpy_get_font()
|
||||||
{
|
{
|
||||||
if (wcslen(commonsharedmem->fontFamily) == 0)
|
if (wcslen(commonsharedmem->fontFamily) == 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -95,7 +95,7 @@ bool InsertRenpyHook()
|
|||||||
if (PyUnicode_FromUnicode)
|
if (PyUnicode_FromUnicode)
|
||||||
{
|
{
|
||||||
hp.type |= EMBED_ABLE;
|
hp.type |= EMBED_ABLE;
|
||||||
hp.hook_after = [](hook_stack *stack, TextBuffer buffer)
|
hp.embed_fun = [](hook_stack *stack, TextBuffer buffer)
|
||||||
{
|
{
|
||||||
auto format = (PyObject *)stack->ARG1;
|
auto format = (PyObject *)stack->ARG1;
|
||||||
if (!format)
|
if (!format)
|
||||||
|
@ -179,7 +179,7 @@ bool InsertRenpy3Hook()
|
|||||||
if (PyUnicode_FromKindAndData)
|
if (PyUnicode_FromKindAndData)
|
||||||
{
|
{
|
||||||
hp.type |= EMBED_ABLE | EMBED_CODEC_UTF16;
|
hp.type |= EMBED_ABLE | EMBED_CODEC_UTF16;
|
||||||
hp.hook_after = [](hook_stack *stack, TextBuffer buffer)
|
hp.embed_fun = [](hook_stack *stack, TextBuffer buffer)
|
||||||
{
|
{
|
||||||
auto format = (PyObject *)stack->rcx;
|
auto format = (PyObject *)stack->rcx;
|
||||||
if (!format)
|
if (!format)
|
||||||
|
@ -128,7 +128,7 @@ auto makeserveronce(int port)
|
|||||||
HTTP_BINDING_INFO BindingProperty;
|
HTTP_BINDING_INFO BindingProperty;
|
||||||
HTTP_TIMEOUT_LIMIT_INFO CGTimeout;
|
HTTP_TIMEOUT_LIMIT_INFO CGTimeout;
|
||||||
|
|
||||||
auto url = std::wstring(L"http://127.0.0.1:") + std::to_wstring(port) + L"/fuck";
|
auto url = std::wstring(L"http://127.0.0.1:") + std::to_wstring(port) + L"/sakurakouji";
|
||||||
//
|
//
|
||||||
// Initialize HTTP APIs.
|
// Initialize HTTP APIs.
|
||||||
//
|
//
|
||||||
|
@ -59,7 +59,7 @@ namespace
|
|||||||
parsebefore((wchar_t *)GlobalLock(hClipboardData), hp, split, buffer);
|
parsebefore((wchar_t *)GlobalLock(hClipboardData), hp, split, buffer);
|
||||||
GlobalUnlock(hClipboardData);
|
GlobalUnlock(hClipboardData);
|
||||||
};
|
};
|
||||||
hp.hook_after = [](hook_stack *s, TextBuffer buffer)
|
hp.embed_fun = [](hook_stack *s, TextBuffer buffer)
|
||||||
{
|
{
|
||||||
std::wstring transwithfont = parseafter(buffer.viewW());
|
std::wstring transwithfont = parseafter(buffer.viewW());
|
||||||
HGLOBAL hClipboardData = GlobalAlloc(GMEM_MOVEABLE, transwithfont.size() * 2 + 2);
|
HGLOBAL hClipboardData = GlobalAlloc(GMEM_MOVEABLE, transwithfont.size() * 2 + 2);
|
||||||
@ -82,7 +82,7 @@ namespace
|
|||||||
{
|
{
|
||||||
parsebefore((wchar_t *)stack->ARG1, hp, split, buffer);
|
parsebefore((wchar_t *)stack->ARG1, hp, split, buffer);
|
||||||
};
|
};
|
||||||
hp.hook_after = [](hook_stack *s, TextBuffer buffer)
|
hp.embed_fun = [](hook_stack *s, TextBuffer buffer)
|
||||||
{
|
{
|
||||||
std::wstring transwithfont = parseafter(buffer.viewW());
|
std::wstring transwithfont = parseafter(buffer.viewW());
|
||||||
s->ARG1 = (uintptr_t)allocateString(transwithfont);
|
s->ARG1 = (uintptr_t)allocateString(transwithfont);
|
||||||
|
@ -28,7 +28,7 @@ function cppjsio(name, s_raw, lpsplit, embedable) {
|
|||||||
s = magicsend + name + '\x03' + lpsplit.toString() + '\x04' + (embedable ? '1' : '0') + '\x02' + s_raw;
|
s = magicsend + name + '\x03' + lpsplit.toString() + '\x04' + (embedable ? '1' : '0') + '\x02' + s_raw;
|
||||||
if (internal_http_port) {
|
if (internal_http_port) {
|
||||||
var xhr = new XMLHttpRequest();
|
var xhr = new XMLHttpRequest();
|
||||||
var url = 'http://127.0.0.1:' + internal_http_port + '/fuck'
|
var url = 'http://127.0.0.1:' + internal_http_port + '/sakurakouji'
|
||||||
xhr.open('POST', url, false);
|
xhr.open('POST', url, false);
|
||||||
xhr.send(s);
|
xhr.send(s);
|
||||||
if (xhr.status === 200) {
|
if (xhr.status === 200) {
|
||||||
|
@ -3,11 +3,15 @@ def callLunaHostFont():
|
|||||||
import ctypes
|
import ctypes
|
||||||
|
|
||||||
try:
|
try:
|
||||||
internal_renpy_get_font = ctypes.CDLL("LunaHook64").internal_renpy_get_font
|
luna_internal_renpy_get_font = ctypes.CDLL(
|
||||||
|
"LunaHook64"
|
||||||
|
).luna_internal_renpy_get_font
|
||||||
except:
|
except:
|
||||||
internal_renpy_get_font = ctypes.CDLL("LunaHook32").internal_renpy_get_font
|
luna_internal_renpy_get_font = ctypes.CDLL(
|
||||||
internal_renpy_get_font.restype = ctypes.c_wchar_p
|
"LunaHook32"
|
||||||
return internal_renpy_get_font()
|
).luna_internal_renpy_get_font
|
||||||
|
luna_internal_renpy_get_font.restype = ctypes.c_wchar_p
|
||||||
|
return luna_internal_renpy_get_font()
|
||||||
except:
|
except:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -17,17 +21,17 @@ def callLunaIsUsingEmbed_nosplit():
|
|||||||
import ctypes
|
import ctypes
|
||||||
|
|
||||||
try:
|
try:
|
||||||
internal_renpy_call_is_embed_using = ctypes.CDLL(
|
luna_internal_renpy_call_is_embed_using = ctypes.CDLL(
|
||||||
"LunaHook64"
|
"LunaHook64"
|
||||||
).internal_renpy_call_is_embed_using
|
).luna_internal_renpy_call_is_embed_using
|
||||||
except:
|
except:
|
||||||
internal_renpy_call_is_embed_using = ctypes.CDLL(
|
luna_internal_renpy_call_is_embed_using = ctypes.CDLL(
|
||||||
"LunaHook32"
|
"LunaHook32"
|
||||||
).internal_renpy_call_is_embed_using
|
).luna_internal_renpy_call_is_embed_using
|
||||||
internal_renpy_call_is_embed_using.argstype = ctypes.c_int, ctypes.c_bool
|
luna_internal_renpy_call_is_embed_using.argstype = ctypes.c_int, ctypes.c_bool
|
||||||
internal_renpy_call_is_embed_using.restype = ctypes.c_bool
|
luna_internal_renpy_call_is_embed_using.restype = ctypes.c_bool
|
||||||
|
|
||||||
return internal_renpy_call_is_embed_using(0, False)
|
return luna_internal_renpy_call_is_embed_using(0, False)
|
||||||
except:
|
except:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@ -3,21 +3,21 @@ def callLunaHost(text, split):
|
|||||||
import ctypes
|
import ctypes
|
||||||
|
|
||||||
try:
|
try:
|
||||||
internal_renpy_call_host = ctypes.CDLL(
|
luna_internal_renpy_call_host = ctypes.CDLL(
|
||||||
"LunaHook64"
|
"LunaHook64"
|
||||||
).internal_renpy_call_host
|
).luna_internal_renpy_call_host
|
||||||
except:
|
except:
|
||||||
internal_renpy_call_host = ctypes.CDLL(
|
luna_internal_renpy_call_host = ctypes.CDLL(
|
||||||
"LunaHook32"
|
"LunaHook32"
|
||||||
).internal_renpy_call_host
|
).luna_internal_renpy_call_host
|
||||||
internal_renpy_call_host.argstype = ctypes.c_wchar_p, ctypes.c_int
|
luna_internal_renpy_call_host.argstype = ctypes.c_wchar_p, ctypes.c_int
|
||||||
internal_renpy_call_host.restype = ctypes.c_wchar_p
|
luna_internal_renpy_call_host.restype = ctypes.c_wchar_p
|
||||||
|
|
||||||
try:
|
try:
|
||||||
_text = text.decode("utf8")
|
_text = text.decode("utf8")
|
||||||
except:
|
except:
|
||||||
_text = text
|
_text = text
|
||||||
text = internal_renpy_call_host(_text, split)
|
text = luna_internal_renpy_call_host(_text, split)
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
return text
|
return text
|
||||||
@ -28,17 +28,17 @@ def callLunaIsUsingEmbed(split):
|
|||||||
import ctypes
|
import ctypes
|
||||||
|
|
||||||
try:
|
try:
|
||||||
internal_renpy_call_is_embed_using = ctypes.CDLL(
|
luna_internal_renpy_call_is_embed_using = ctypes.CDLL(
|
||||||
"LunaHook64"
|
"LunaHook64"
|
||||||
).internal_renpy_call_is_embed_using
|
).luna_internal_renpy_call_is_embed_using
|
||||||
except:
|
except:
|
||||||
internal_renpy_call_is_embed_using = ctypes.CDLL(
|
luna_internal_renpy_call_is_embed_using = ctypes.CDLL(
|
||||||
"LunaHook32"
|
"LunaHook32"
|
||||||
).internal_renpy_call_is_embed_using
|
).luna_internal_renpy_call_is_embed_using
|
||||||
internal_renpy_call_is_embed_using.argstype = ctypes.c_int, ctypes.c_bool
|
luna_internal_renpy_call_is_embed_using.argstype = ctypes.c_int, ctypes.c_bool
|
||||||
internal_renpy_call_is_embed_using.restype = ctypes.c_bool
|
luna_internal_renpy_call_is_embed_using.restype = ctypes.c_bool
|
||||||
|
|
||||||
return internal_renpy_call_is_embed_using(split, True)
|
return luna_internal_renpy_call_is_embed_using(split, True)
|
||||||
except:
|
except:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@ -396,24 +396,28 @@ void TextHook::Send(uintptr_t lpDataBase)
|
|||||||
{
|
{
|
||||||
if (hp.type & EMBED_AFTER_NEW)
|
if (hp.type & EMBED_AFTER_NEW)
|
||||||
{
|
{
|
||||||
auto _ = new char[max(lpCountsave, buff.size) + 10];
|
auto size = max(lpCountsave, buff.size + 1);
|
||||||
|
auto _ = new char[size];
|
||||||
memcpy(_, buff.buff, buff.size);
|
memcpy(_, buff.buff, buff.size);
|
||||||
for (int i = buff.size; i < max(lpCountsave, buff.size) + 10; i++)
|
memset(_ + buff.size, 0, size - buff.size);
|
||||||
_[i] = 0;
|
|
||||||
*(uintptr_t *)plpdatain = (uintptr_t)_;
|
*(uintptr_t *)plpdatain = (uintptr_t)_;
|
||||||
}
|
}
|
||||||
else if (hp.type & EMBED_AFTER_OVERWRITE)
|
else if (hp.type & EMBED_AFTER_OVERWRITE)
|
||||||
{
|
{
|
||||||
memcpy((void *)lpDataIn, buff.buff, buff.size);
|
memcpy((void *)lpDataIn, buff.buff, buff.size);
|
||||||
for (int i = buff.size; i < lpCountsave; i++)
|
auto zeros = 1;
|
||||||
((BYTE *)(lpDataIn))[i] = 0;
|
if (hp.type & CODEC_UTF16)
|
||||||
|
zeros = 2;
|
||||||
|
else if (hp.type & CODEC_UTF32)
|
||||||
|
zeros = 4;
|
||||||
|
memset((char *)lpDataIn + buff.size, 0, max(lpCountsave, zeros));
|
||||||
}
|
}
|
||||||
else if (hp.hook_after)
|
else if (hp.embed_fun)
|
||||||
hp.hook_after(stack, buff);
|
hp.embed_fun(stack, buff);
|
||||||
else if (hp.type & SPECIAL_JIT_STRING)
|
else if (hp.type & SPECIAL_JIT_STRING)
|
||||||
{
|
{
|
||||||
if (hp.jittype == JITTYPE::UNITY)
|
if (hp.jittype == JITTYPE::UNITY)
|
||||||
unity_ui_string_hook_after(argidx(stack, hp.argidx), buff);
|
unity_ui_string_embed_fun(argidx(stack, hp.argidx), buff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ add_library(host
|
|||||||
)
|
)
|
||||||
target_precompile_headers(host REUSE_FROM pch)
|
target_precompile_headers(host REUSE_FROM pch)
|
||||||
target_include_directories(host PUBLIC .)
|
target_include_directories(host PUBLIC .)
|
||||||
|
target_link_libraries(host VERSION_DEF)
|
||||||
|
|
||||||
add_library(LunaHostDll MODULE LunaHostDll.cpp ${versioninfohost})
|
add_library(LunaHostDll MODULE LunaHostDll.cpp ${versioninfohost})
|
||||||
target_precompile_headers(LunaHostDll REUSE_FROM pch)
|
target_precompile_headers(LunaHostDll REUSE_FROM pch)
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define LUNA_VERSION {VERSION_MAJOR,VERSION_MINOR,VERSION_PATCH,VERSION_REVISION}
|
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
STRING = 12,
|
STRING = 12,
|
||||||
|
@ -299,7 +299,7 @@ namespace
|
|||||||
{
|
{
|
||||||
HCode += L"E";
|
HCode += L"E";
|
||||||
|
|
||||||
if (hp.hook_after)
|
if (hp.embed_fun)
|
||||||
HCode += L'X';
|
HCode += L'X';
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -113,9 +113,9 @@ struct HookParam
|
|||||||
ALIGNPTR(uint64_t __12, uintptr_t user_value);
|
ALIGNPTR(uint64_t __12, uintptr_t user_value);
|
||||||
ALIGNPTR(uint64_t __2, void (*text_fun)(hook_stack *stack, HookParam *hp, TextBuffer *buffer, uintptr_t *split))
|
ALIGNPTR(uint64_t __2, void (*text_fun)(hook_stack *stack, HookParam *hp, TextBuffer *buffer, uintptr_t *split))
|
||||||
ALIGNPTR(uint64_t __3, void (*filter_fun)(TextBuffer *buffer, HookParam *hp)); // jichi 10/24/2014: Add filter function. Return false to skip the text
|
ALIGNPTR(uint64_t __3, void (*filter_fun)(TextBuffer *buffer, HookParam *hp)); // jichi 10/24/2014: Add filter function. Return false to skip the text
|
||||||
ALIGNPTR(uint64_t __7, void (*hook_after)(hook_stack *stack, TextBuffer buffer));
|
ALIGNPTR(uint64_t __7, void (*embed_fun)(hook_stack *stack, TextBuffer buffer));
|
||||||
uint64_t hook_font;
|
uint64_t embed_hook_font;
|
||||||
ALIGNPTR(uint64_t __9, const wchar_t *newlineseperator);
|
ALIGNPTR(uint64_t __9, const wchar_t *lineSeparator);
|
||||||
char name[HOOK_NAME_SIZE];
|
char name[HOOK_NAME_SIZE];
|
||||||
wchar_t hookcode[HOOKCODE_LEN];
|
wchar_t hookcode[HOOKCODE_LEN];
|
||||||
HookParam()
|
HookParam()
|
||||||
|
@ -1,10 +1,14 @@
|
|||||||
|
|
||||||
set(VERSION_MAJOR 6)
|
set(VERSION_MAJOR 6)
|
||||||
set(VERSION_MINOR 3)
|
set(VERSION_MINOR 5)
|
||||||
set(VERSION_PATCH 4)
|
set(VERSION_PATCH 0)
|
||||||
set(VERSION_REVISION 0)
|
set(VERSION_REVISION 0)
|
||||||
add_definitions(-DVERSION_MAJOR=${VERSION_MAJOR})
|
set(LUNA_VERSION "{${VERSION_MAJOR},${VERSION_MINOR},${VERSION_PATCH},${VERSION_REVISION}}")
|
||||||
add_definitions(-DVERSION_MINOR=${VERSION_MINOR})
|
add_library(VERSION_DEF INTERFACE)
|
||||||
add_definitions(-DVERSION_PATCH=${VERSION_PATCH})
|
target_compile_definitions(VERSION_DEF INTERFACE
|
||||||
add_definitions(-DVERSION_REVISION=${VERSION_REVISION})
|
VERSION_MAJOR=${VERSION_MAJOR}
|
||||||
|
VERSION_MINOR=${VERSION_MINOR}
|
||||||
|
VERSION_PATCH=${VERSION_PATCH}
|
||||||
|
VERSION_REVISION=${VERSION_REVISION}
|
||||||
|
LUNA_VERSION=${LUNA_VERSION})
|
||||||
include(${CMAKE_CURRENT_LIST_DIR}/version/generate_product_version.cmake)
|
include(${CMAKE_CURRENT_LIST_DIR}/version/generate_product_version.cmake)
|
@ -21,10 +21,15 @@ def overridepathexists():
|
|||||||
|
|
||||||
def prepareqtenv():
|
def prepareqtenv():
|
||||||
import windows
|
import windows
|
||||||
|
from myutils.config import get_platform
|
||||||
|
|
||||||
# win7 no vcredist2015
|
# win7 no vcredist2015
|
||||||
windows.addenvpath("./files/runtime/")
|
windows.addenvpath("./files/runtime/")
|
||||||
windows.LoadLibraryW("./files/runtime/PyQt5/Qt5/bin/Qt5Core.dll")
|
if get_platform() != "xp":
|
||||||
|
windows.LoadLibraryW("./files/runtime/PyQt5/Qt5/bin/Qt5Core.dll")
|
||||||
|
else:
|
||||||
|
windows.addenvpath("./files/runtime/Lib/site-packages/PyQt5")
|
||||||
|
windows.LoadLibraryW("./files/runtime/Lib/site-packages/PyQt5/Qt5Core.dll")
|
||||||
|
|
||||||
from qtsymbols import QApplication, isqt5, Qt, QFont, QLocale
|
from qtsymbols import QApplication, isqt5, Qt, QFont, QLocale
|
||||||
|
|
||||||
@ -32,10 +37,15 @@ def prepareqtenv():
|
|||||||
|
|
||||||
if isqt5:
|
if isqt5:
|
||||||
# 中文字符下不能自动加载
|
# 中文字符下不能自动加载
|
||||||
plgs = "./files/runtime/PyQt5/Qt5/plugins"
|
if get_platform() != "xp":
|
||||||
|
plgs = "./files/runtime/PyQt5/Qt5/plugins"
|
||||||
|
else:
|
||||||
|
plgs = "./files/runtime/Lib/site-packages/PyQt5/plugins"
|
||||||
|
|
||||||
if os.path.exists(plgs):
|
if os.path.exists(plgs):
|
||||||
QApplication.addLibraryPath(plgs)
|
QApplication.addLibraryPath(plgs)
|
||||||
QApplication.setAttribute(Qt.ApplicationAttribute.AA_EnableHighDpiScaling)
|
if get_platform() != "xp":
|
||||||
|
QApplication.setAttribute(Qt.ApplicationAttribute.AA_EnableHighDpiScaling)
|
||||||
QApplication.setAttribute(Qt.ApplicationAttribute.AA_UseHighDpiPixmaps)
|
QApplication.setAttribute(Qt.ApplicationAttribute.AA_UseHighDpiPixmaps)
|
||||||
if os.path.exists("./files/runtime/PyQt5/Qt5/bin/Qt5WebEngineCore.dll"):
|
if os.path.exists("./files/runtime/PyQt5/Qt5/bin/Qt5WebEngineCore.dll"):
|
||||||
# maybe use qwebengine
|
# maybe use qwebengine
|
||||||
@ -46,10 +56,10 @@ def prepareqtenv():
|
|||||||
QApplication.setAttribute(
|
QApplication.setAttribute(
|
||||||
Qt.ApplicationAttribute.AA_DontCreateNativeWidgetSiblings
|
Qt.ApplicationAttribute.AA_DontCreateNativeWidgetSiblings
|
||||||
)
|
)
|
||||||
|
if get_platform() != "xp":
|
||||||
QApplication.setHighDpiScaleFactorRoundingPolicy(
|
QApplication.setHighDpiScaleFactorRoundingPolicy(
|
||||||
Qt.HighDpiScaleFactorRoundingPolicy.PassThrough
|
Qt.HighDpiScaleFactorRoundingPolicy.PassThrough
|
||||||
)
|
)
|
||||||
font = QFont()
|
font = QFont()
|
||||||
font.setStyleStrategy(QFont.StyleStrategy.PreferAntialias)
|
font.setStyleStrategy(QFont.StyleStrategy.PreferAntialias)
|
||||||
font.setHintingPreference(QFont.HintingPreference.PreferFullHinting)
|
font.setHintingPreference(QFont.HintingPreference.PreferFullHinting)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import functools, os
|
import functools, os
|
||||||
import gobject
|
import gobject
|
||||||
from myutils.utils import splitocrtypes
|
from myutils.utils import splitocrtypes
|
||||||
from myutils.config import globalconfig, _TR
|
from myutils.config import globalconfig, _TR, get_platform
|
||||||
from gui.inputdialog import multicolorset, autoinitdialog
|
from gui.inputdialog import multicolorset, autoinitdialog
|
||||||
from gui.inputdialog import autoinitdialog, autoinitdialog_items
|
from gui.inputdialog import autoinitdialog, autoinitdialog_items
|
||||||
from gui.usefulwidget import (
|
from gui.usefulwidget import (
|
||||||
@ -96,6 +96,9 @@ def _checkmaybefailed(self, idx):
|
|||||||
def _createseletengeinecombo_1(self):
|
def _createseletengeinecombo_1(self):
|
||||||
|
|
||||||
webviews = ["MSHTML", "WebView2", "QWebEngine"]
|
webviews = ["MSHTML", "WebView2", "QWebEngine"]
|
||||||
|
|
||||||
|
if get_platform() == "xp":
|
||||||
|
webviews = ["MSHTML"]
|
||||||
self.seletengeinecombo_1 = getsimplecombobox(
|
self.seletengeinecombo_1 = getsimplecombobox(
|
||||||
webviews,
|
webviews,
|
||||||
globalconfig,
|
globalconfig,
|
||||||
|
@ -5,18 +5,23 @@ from gui.setting_display_text import xianshigrid_style
|
|||||||
from gui.setting_display_ui import uisetting
|
from gui.setting_display_ui import uisetting
|
||||||
from gui.setting_display_scale import makescalew
|
from gui.setting_display_scale import makescalew
|
||||||
from gui.usefulwidget import makesubtab_lazy, makescrollgrid
|
from gui.usefulwidget import makesubtab_lazy, makescrollgrid
|
||||||
|
from myutils.config import get_platform
|
||||||
|
|
||||||
|
|
||||||
def setTabThree_lazy(self, basel):
|
def setTabThree_lazy(self, basel):
|
||||||
|
titles = ["文本设置", "界面设置", "工具按钮", "窗口缩放"]
|
||||||
|
funcs = [
|
||||||
|
lambda l: makescrollgrid(xianshigrid_style(self), l),
|
||||||
|
functools.partial(uisetting, self),
|
||||||
|
functools.partial(createbuttonwidget, self),
|
||||||
|
functools.partial(makescalew, self),
|
||||||
|
]
|
||||||
|
if get_platform() == "xp":
|
||||||
|
titles.pop(3)
|
||||||
|
funcs.pop(3)
|
||||||
tab, do = makesubtab_lazy(
|
tab, do = makesubtab_lazy(
|
||||||
["文本设置", "界面设置", "工具按钮", "窗口缩放"],
|
titles,
|
||||||
[
|
funcs,
|
||||||
lambda l: makescrollgrid(xianshigrid_style(self), l),
|
|
||||||
functools.partial(uisetting, self),
|
|
||||||
functools.partial(createbuttonwidget, self),
|
|
||||||
functools.partial(makescalew, self),
|
|
||||||
],
|
|
||||||
delay=True,
|
delay=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from qtsymbols import *
|
from qtsymbols import *
|
||||||
import functools, platform
|
import functools, platform
|
||||||
import gobject, os, zipfile
|
import gobject, os, zipfile
|
||||||
from myutils.config import globalconfig, static_data, _TR
|
from myutils.config import globalconfig, static_data, _TR, get_platform
|
||||||
from gui.inputdialog import autoinitdialog
|
from gui.inputdialog import autoinitdialog
|
||||||
from myutils.wrapper import tryprint
|
from myutils.wrapper import tryprint
|
||||||
from myutils.utils import dynamiclink, translate_exits, copytree, getannotatedapiname
|
from myutils.utils import dynamiclink, translate_exits, copytree, getannotatedapiname
|
||||||
@ -296,6 +296,9 @@ def _createseletengeinecombo(self):
|
|||||||
|
|
||||||
visengine = ["Qt", "Webview2"]
|
visengine = ["Qt", "Webview2"]
|
||||||
visengine_internal = ["textbrowser", "webview"]
|
visengine_internal = ["textbrowser", "webview"]
|
||||||
|
if get_platform() == "xp":
|
||||||
|
visengine.pop(1)
|
||||||
|
visengine_internal.pop(1)
|
||||||
self.seletengeinecombo = getsimplecombobox(
|
self.seletengeinecombo = getsimplecombobox(
|
||||||
visengine,
|
visengine,
|
||||||
globalconfig,
|
globalconfig,
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
from qtsymbols import *
|
from qtsymbols import *
|
||||||
import os, functools, re
|
import os, functools, re
|
||||||
from myutils.config import globalconfig
|
from myutils.config import globalconfig, get_platform
|
||||||
from myutils.utils import splittranslatortypes, translate_exits
|
from myutils.utils import splittranslatortypes, translate_exits
|
||||||
from gui.usefulwidget import (
|
from gui.usefulwidget import (
|
||||||
D_getsimpleswitch,
|
D_getsimpleswitch,
|
||||||
makegrid,
|
makegrid,
|
||||||
makesubtab_lazy,
|
makesubtab_lazy,
|
||||||
LGroupBox,
|
|
||||||
makescrollgrid,
|
makescrollgrid,
|
||||||
D_getsimplecombobox,
|
D_getsimplecombobox,
|
||||||
)
|
)
|
||||||
@ -128,28 +127,32 @@ def makeproxytab():
|
|||||||
l=globalconfig["update"],
|
l=globalconfig["update"],
|
||||||
item="update",
|
item="update",
|
||||||
)
|
)
|
||||||
|
titles = [
|
||||||
|
"在线翻译",
|
||||||
|
"注册在线翻译",
|
||||||
|
"OCR",
|
||||||
|
"语音合成",
|
||||||
|
"辞书",
|
||||||
|
"元数据",
|
||||||
|
"离线翻译",
|
||||||
|
"自动更新",
|
||||||
|
]
|
||||||
|
funcs = [
|
||||||
|
functools.partial(makegridW, mianfei),
|
||||||
|
functools.partial(makegridW, shoufei),
|
||||||
|
functools.partial(makegridW, ocrs),
|
||||||
|
functools.partial(makegridW, readers),
|
||||||
|
functools.partial(makegridW, cishus),
|
||||||
|
functools.partial(makegridW, meta),
|
||||||
|
functools.partial(makegridW, lixians),
|
||||||
|
functools.partial(makegridW, github),
|
||||||
|
]
|
||||||
|
if get_platform() == "xp":
|
||||||
|
titles.pop(2)
|
||||||
|
funcs.pop(2)
|
||||||
tab, dotab = makesubtab_lazy(
|
tab, dotab = makesubtab_lazy(
|
||||||
[
|
titles,
|
||||||
"在线翻译",
|
funcs,
|
||||||
"注册在线翻译",
|
|
||||||
"OCR",
|
|
||||||
"语音合成",
|
|
||||||
"辞书",
|
|
||||||
"元数据",
|
|
||||||
"离线翻译",
|
|
||||||
"自动更新",
|
|
||||||
],
|
|
||||||
[
|
|
||||||
functools.partial(makegridW, mianfei),
|
|
||||||
functools.partial(makegridW, shoufei),
|
|
||||||
functools.partial(makegridW, ocrs),
|
|
||||||
functools.partial(makegridW, readers),
|
|
||||||
functools.partial(makegridW, cishus),
|
|
||||||
functools.partial(makegridW, meta),
|
|
||||||
functools.partial(makegridW, lixians),
|
|
||||||
functools.partial(makegridW, github),
|
|
||||||
],
|
|
||||||
delay=True,
|
delay=True,
|
||||||
)
|
)
|
||||||
dotab()
|
dotab()
|
||||||
@ -157,42 +160,42 @@ def makeproxytab():
|
|||||||
|
|
||||||
|
|
||||||
def setTab_proxy(self, l):
|
def setTab_proxy(self, l):
|
||||||
grids = [
|
grids1 = [
|
||||||
[
|
(
|
||||||
(
|
dict(
|
||||||
dict(
|
title="网络请求",
|
||||||
title="网络请求",
|
type="grid",
|
||||||
type="grid",
|
grid=[
|
||||||
grid=[
|
[
|
||||||
[
|
"HTTP",
|
||||||
"HTTP",
|
(
|
||||||
(
|
D_getsimplecombobox(
|
||||||
D_getsimplecombobox(
|
["winhttp", "libcurl"],
|
||||||
["winhttp", "libcurl"],
|
globalconfig,
|
||||||
globalconfig,
|
"network",
|
||||||
"network",
|
static=True,
|
||||||
static=True,
|
|
||||||
),
|
|
||||||
5,
|
|
||||||
),
|
),
|
||||||
"",
|
5,
|
||||||
"WebSocket",
|
),
|
||||||
(
|
"",
|
||||||
D_getsimplecombobox(
|
"WebSocket",
|
||||||
["winhttp", "libcurl"],
|
(
|
||||||
globalconfig,
|
D_getsimplecombobox(
|
||||||
"network_websocket",
|
["winhttp", "libcurl"],
|
||||||
static=True,
|
globalconfig,
|
||||||
),
|
"network_websocket",
|
||||||
5,
|
static=True,
|
||||||
),
|
),
|
||||||
],
|
5,
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
],
|
||||||
0,
|
),
|
||||||
"group",
|
0,
|
||||||
)
|
"group",
|
||||||
],
|
)
|
||||||
|
]
|
||||||
|
grids = [
|
||||||
[
|
[
|
||||||
(
|
(
|
||||||
dict(
|
dict(
|
||||||
@ -239,4 +242,6 @@ def setTab_proxy(self, l):
|
|||||||
)
|
)
|
||||||
],
|
],
|
||||||
]
|
]
|
||||||
|
if get_platform() != "xp":
|
||||||
|
grids.insert(0, grids1)
|
||||||
makescrollgrid(grids, l)
|
makescrollgrid(grids, l)
|
||||||
|
@ -9,6 +9,7 @@ from myutils.config import (
|
|||||||
get_launchpath,
|
get_launchpath,
|
||||||
savehook_new_list,
|
savehook_new_list,
|
||||||
static_data,
|
static_data,
|
||||||
|
get_platform,
|
||||||
)
|
)
|
||||||
|
|
||||||
from traceback import print_exc
|
from traceback import print_exc
|
||||||
@ -280,6 +281,8 @@ def selectgameuid(self):
|
|||||||
button.button(QDialogButtonBox.StandardButton.Ok).setText(_TR("确定"))
|
button.button(QDialogButtonBox.StandardButton.Ok).setText(_TR("确定"))
|
||||||
button.button(QDialogButtonBox.StandardButton.Cancel).setText(_TR("取消"))
|
button.button(QDialogButtonBox.StandardButton.Cancel).setText(_TR("取消"))
|
||||||
if dialog.exec():
|
if dialog.exec():
|
||||||
|
if not _internal:
|
||||||
|
return None
|
||||||
return _internal[combo.currentIndex()]
|
return _internal[combo.currentIndex()]
|
||||||
|
|
||||||
|
|
||||||
@ -642,6 +645,8 @@ def setTabOne_lazy(self, basel: QVBoxLayout):
|
|||||||
("ocr", "OCR"),
|
("ocr", "OCR"),
|
||||||
("copy", "剪贴板"),
|
("copy", "剪贴板"),
|
||||||
]
|
]
|
||||||
|
if get_platform() == "xp":
|
||||||
|
_rank.pop(1)
|
||||||
__ = []
|
__ = []
|
||||||
for key, name in _rank:
|
for key, name in _rank:
|
||||||
__.append(getsmalllabel(name))
|
__.append(getsmalllabel(name))
|
||||||
@ -681,15 +686,21 @@ def setTabOne_lazy(self, basel: QVBoxLayout):
|
|||||||
]
|
]
|
||||||
gridlayoutwidget, do = makegrid(tab1grids, delay=True)
|
gridlayoutwidget, do = makegrid(tab1grids, delay=True)
|
||||||
basel.addWidget(gridlayoutwidget)
|
basel.addWidget(gridlayoutwidget)
|
||||||
|
titles = ["HOOK设置", "OCR设置", "剪贴板", "文本输出", "其他"]
|
||||||
|
funcs = [
|
||||||
|
lambda l: setTabOne_lazy_h(self, l),
|
||||||
|
lambda l: getocrgrid_table(self, l),
|
||||||
|
lambda l: makescrollgrid(getTabclip(self), l),
|
||||||
|
lambda l: makescrollgrid(outputgrid(self), l),
|
||||||
|
lambda l: makescrollgrid(filetranslate(self), l),
|
||||||
|
]
|
||||||
|
|
||||||
|
if get_platform() == "xp":
|
||||||
|
titles.pop(1)
|
||||||
|
funcs.pop(1)
|
||||||
tab, dotab = makesubtab_lazy(
|
tab, dotab = makesubtab_lazy(
|
||||||
["HOOK设置", "OCR设置", "剪贴板", "文本输出", "其他"],
|
titles,
|
||||||
[
|
funcs,
|
||||||
lambda l: setTabOne_lazy_h(self, l),
|
|
||||||
lambda l: getocrgrid_table(self, l),
|
|
||||||
lambda l: makescrollgrid(getTabclip(self), l),
|
|
||||||
lambda l: makescrollgrid(outputgrid(self), l),
|
|
||||||
lambda l: makescrollgrid(filetranslate(self), l),
|
|
||||||
],
|
|
||||||
delay=True,
|
delay=True,
|
||||||
)
|
)
|
||||||
basel.addWidget(tab)
|
basel.addWidget(tab)
|
||||||
|
@ -109,10 +109,13 @@ class mecab(basehira):
|
|||||||
# print(node.feature)
|
# print(node.feature)
|
||||||
if "-" in origorig:
|
if "-" in origorig:
|
||||||
try:
|
try:
|
||||||
hira_ = origorig.split("-")[1]
|
maybe_english = origorig.split("-")[1]
|
||||||
if isascii(hira): # 腰を引いて-->引く-他動詞
|
if isascii(maybe_english):
|
||||||
hira = hira_
|
# コンビニを --> コンビニ-convenience
|
||||||
origorig = origorig.split("-")[0]
|
hira = origorig = maybe_english
|
||||||
|
else:
|
||||||
|
# 腰を引いて --> 引く-他動詞
|
||||||
|
origorig = origorig.split("-")[0]
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -3,24 +3,7 @@ import os, re
|
|||||||
|
|
||||||
def parsecode(code: str):
|
def parsecode(code: str):
|
||||||
# PyQt
|
# PyQt
|
||||||
code = code.replace(
|
|
||||||
"QApplication.setAttribute(Qt.ApplicationAttribute.AA_EnableHighDpiScaling)", ""
|
|
||||||
)
|
|
||||||
code = code.replace("QApplication.setHighDpiScaleFactorRoundingPolicy", "print")
|
|
||||||
code = code.replace("Qt.HighDpiScaleFactorRoundingPolicy.PassThrough", "")
|
|
||||||
code = code.replace("self.screen().geometry().height()", "99999")
|
code = code.replace("self.screen().geometry().height()", "99999")
|
||||||
code = code.replace(
|
|
||||||
'"./files/runtime/PyQt5/Qt5/plugins"',
|
|
||||||
'"./files/runtime/Lib/site-packages/PyQt5/plugins"',
|
|
||||||
)
|
|
||||||
code = code.replace(
|
|
||||||
"./files/runtime/PyQt5/Qt5/bin/Qt5Core.dll",
|
|
||||||
"./files/runtime/Lib/site-packages/PyQt5/Qt5Core.dll",
|
|
||||||
)
|
|
||||||
code = code.replace(
|
|
||||||
' windows.addenvpath("./files/runtime/")',
|
|
||||||
' windows.addenvpath("./files/runtime/")\n windows.addenvpath("./files/runtime/Lib/site-packages/PyQt5")',
|
|
||||||
)
|
|
||||||
code = code.replace("self.parent().devicePixelRatioF()", "1")
|
code = code.replace("self.parent().devicePixelRatioF()", "1")
|
||||||
code = code.replace("self.devicePixelRatioF()", "1")
|
code = code.replace("self.devicePixelRatioF()", "1")
|
||||||
code = re.sub(
|
code = re.sub(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user