var fontface = ''; var magicsend = '\x01LUNAFROMJS\x01' var magicrecv = '\x01LUNAFROMHOST\x01' 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) //magic font \x02 text split = transwithfont.search('\x02') fontface = transwithfont.substr(0, split) text = transwithfont.substr(split + 1) return text; } else { return transwithfont; } } function clipboardsender(s, lpsplit) { lpsplit = typeof lpsplit !== 'undefined' ? lpsplit : 0 //magic split \x02 text s = magicsend + lpsplit.toString() + '\x02' + s; 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) { return s; } } if (transwithfont.length == 0) return s; return splitfonttext(transwithfont) } function rpgmakerhook() { if (Window_Message.prototype.originstartMessage) return; 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; 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; } Window_Message.prototype.startMessage = function () { gametext = $gameMessage.allText(); resp = clipboardsender(gametext); $gameMessage._texts = [resp] this.originstartMessage(); }; Window_Base.prototype.drawText = function (text, x, y, maxWidth, align) { text = clipboardsender(text, 1) return this.drawText_origin(text, x, y, maxWidth, align) } Window_Base.prototype.drawTextEx = function (text, x, y) { text = clipboardsender(text, 1) 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 = clipboardsender(pm.val); if (fontface != '') { this.kag.stat.font.face = fontface } } return this.originstart(pm) } tyrano.plugin.kag.tag.chara_ptext.start = function (pm) { pm.name = clipboardsender(pm.name, 1) 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)