mirror of
https://github.com/HIllya51/LunaHook.git
synced 2024-12-25 12:44:13 +08:00
171 lines
6.2 KiB
JavaScript
171 lines
6.2 KiB
JavaScript
var fontface = '';
|
||
var magicsend = '\x01LUNAFROMJS\x01'
|
||
var magicrecv = '\x01LUNAFROMHOST\x01'
|
||
var is_packed = IS_PACKED
|
||
var is_useclipboard = IS_USECLIPBOARD
|
||
var internal_http_port = INTERNAL_HTTP_PORT
|
||
function splitfonttext(transwithfont) {
|
||
if (transwithfont.substr(0, magicsend.length) == magicsend) //not trans
|
||
{
|
||
split = transwithfont.search('\x02')
|
||
return transwithfont.substr(split + 1);
|
||
}
|
||
else if (transwithfont.substr(0, magicrecv.length) == magicrecv) {
|
||
transwithfont = transwithfont.substr(magicrecv.length)
|
||
split = transwithfont.search('\x02')
|
||
fontface = transwithfont.substr(0, split)
|
||
text = transwithfont.substr(split + 1)
|
||
return text;
|
||
}
|
||
else {
|
||
return transwithfont;
|
||
}
|
||
}
|
||
function cppjsio(name, s_raw, lpsplit, embedable) {
|
||
if (!s_raw)
|
||
return s_raw
|
||
transwithfont = ''
|
||
s = magicsend + name + '\x03' + lpsplit.toString() + '\x04' + (embedable ? '1' : '0') + '\x02' + s_raw;
|
||
if (internal_http_port) {
|
||
var xhr = new XMLHttpRequest();
|
||
var url = 'http://127.0.0.1:' + internal_http_port + '/fuck'
|
||
xhr.open('POST', url, false);
|
||
xhr.send(s);
|
||
if (xhr.status === 200) {
|
||
transwithfont = xhr.responseText;
|
||
}
|
||
}
|
||
else if (is_useclipboard) {
|
||
try {
|
||
const _clipboard = require('nw.gui').Clipboard.get();
|
||
_clipboard.set(s, 'text');
|
||
transwithfont = _clipboard.get('text');
|
||
}
|
||
catch (err) {
|
||
try {
|
||
const clipboard = require('electron').clipboard;
|
||
clipboard.writeText(s);
|
||
transwithfont = clipboard.readText();
|
||
}
|
||
catch (err2) {
|
||
}
|
||
}
|
||
}
|
||
if (!transwithfont) return s_raw;
|
||
return splitfonttext(transwithfont)
|
||
}
|
||
|
||
function rpgmakerhook() {
|
||
|
||
if (Window_Message.prototype.originstartMessage) { }
|
||
else {
|
||
Window_Base.prototype.drawTextEx_origin = Window_Base.prototype.drawTextEx;
|
||
Window_Base.prototype.drawText_origin = Window_Base.prototype.drawText;
|
||
Window_Message.prototype.originstartMessage = Window_Message.prototype.startMessage;
|
||
Window_Message.prototype.updateMessage_ori = Window_Message.prototype.updateMessage;
|
||
|
||
Bitmap.prototype.drawText_ori = Bitmap.prototype.drawText;
|
||
Bitmap.prototype.last_y = 0;
|
||
|
||
Bitmap.prototype.origin_makeFontNameText = Bitmap.prototype._makeFontNameText;
|
||
}
|
||
Bitmap.prototype._makeFontNameText = function () {
|
||
if (!fontface) return this.origin_makeFontNameText();
|
||
return (this.fontItalic ? 'Italic ' : '') +
|
||
this.fontSize + 'px ' + fontface;
|
||
}
|
||
Bitmap.prototype.collectstring = { 2: '', 5: '', 6: '' };
|
||
setInterval(function () {
|
||
for (lpsplit in Bitmap.prototype.collectstring) {
|
||
if (Bitmap.prototype.collectstring[lpsplit].length) {
|
||
cppjsio('rpgmakermv', Bitmap.prototype.collectstring[lpsplit], lpsplit, false)
|
||
Bitmap.prototype.collectstring[lpsplit] = ''
|
||
}
|
||
}
|
||
}, 100);
|
||
if (!is_packed) {
|
||
|
||
Bitmap.prototype.drawText = function (text, x, y, maxWidth, lineHeight, align) {
|
||
//y>100的有重复;慢速是单字符,快速是多字符
|
||
if (text && (y < 100)) {
|
||
extra = 5 + ((text.length == 1) ? 0 : 1);
|
||
if (y != Bitmap.prototype.last_y) {
|
||
Bitmap.prototype.collectstring[extra] += '\n'
|
||
}
|
||
Bitmap.prototype.collectstring[extra] += text;
|
||
Bitmap.prototype.last_y = y;
|
||
}
|
||
return this.drawText_ori(text, x, y, maxWidth, lineHeight, align);
|
||
}
|
||
}
|
||
Window_Message.prototype.startMessage = function () {
|
||
gametext = $gameMessage.allText();
|
||
resp = cppjsio('rpgmakermv', gametext, 0, true);
|
||
$gameMessage._texts = [resp]
|
||
this.originstartMessage();
|
||
};
|
||
Window_Message.prototype.lastalltext = ''
|
||
Window_Message.prototype.updateMessage = function () {
|
||
if (this._textState) {
|
||
if (Window_Message.prototype.lastalltext != $gameMessage.allText()) {
|
||
cppjsio('rpgmakermv', $gameMessage.allText(), 18, false);
|
||
Window_Message.prototype.lastalltext = $gameMessage.allText()
|
||
}
|
||
}
|
||
return this.updateMessage_ori();
|
||
};
|
||
Window_Base.prototype.drawText = function (text, x, y, maxWidth, align) {
|
||
text = cppjsio('rpgmakermv', text, 1, true)
|
||
return this.drawText_origin(text, x, y, maxWidth, align)
|
||
}
|
||
Window_Base.prototype.lastcalltime = 0
|
||
Window_Base.prototype.drawTextEx = function (text, x, y) {
|
||
__last = Window_Base.prototype.lastcalltime
|
||
__now = new Date().getTime()
|
||
Window_Base.prototype.lastcalltime = __now
|
||
if (__now - __last > 100)
|
||
text = cppjsio('rpgmakermv', text, 2, true)
|
||
else {
|
||
Bitmap.prototype.collectstring[2] += text;
|
||
}
|
||
return this.drawTextEx_origin(text, x, y)
|
||
}
|
||
}
|
||
|
||
function tyranohook() {
|
||
|
||
if (tyrano.plugin.kag.tag.text.originstart) return;
|
||
tyrano.plugin.kag.tag.text.originstart = tyrano.plugin.kag.tag.text.start;
|
||
tyrano.plugin.kag.tag.chara_ptext.startorigin = tyrano.plugin.kag.tag.chara_ptext.start;
|
||
tyrano.plugin.kag.tag.text.start = function (pm) {
|
||
if (1 != this.kag.stat.is_script && 1 != this.kag.stat.is_html) {
|
||
pm.val = cppjsio('tyranoscript', pm.val, 0, true);
|
||
if (fontface) {
|
||
this.kag.stat.font.face = fontface
|
||
}
|
||
}
|
||
return this.originstart(pm)
|
||
}
|
||
tyrano.plugin.kag.tag.chara_ptext.start = function (pm) {
|
||
pm.name = cppjsio('tyranoscript', pm.name, 1, true)
|
||
return this.startorigin(pm)
|
||
}
|
||
}
|
||
function retryinject(times) {
|
||
if (times == 0) return;
|
||
try {
|
||
if (window.tyrano && tyrano.plugin) {
|
||
tyranohook();
|
||
}
|
||
else if (window.Utils && Utils.RPGMAKER_NAME) {
|
||
rpgmakerhook();
|
||
}
|
||
else {
|
||
setTimeout(retryinject, 3000, times - 1);
|
||
}
|
||
}
|
||
catch (err) {
|
||
//非主线程,甚至没有window对象,会弹窗报错
|
||
}
|
||
}
|
||
retryinject(3) |