diff --git a/torn-trans-zhcn.user.js b/torn-trans-zhcn.user.js index 55774cb..c4938e2 100644 --- a/torn-trans-zhcn.user.js +++ b/torn-trans-zhcn.user.js @@ -1,9 +1,9 @@ // ==UserScript== -// @lastmodified 202201281534 -// @name Torn翻译 +// @lastmodified 202201292356 +// @name 芜湖助手 // @namespace WOOH -// @version 0.3.4 -// @description Torn UI翻译 +// @version 0.3.5 +// @description 托恩,起飞! // @author Woohoo[2687093] Sabrina_Devil[2696209] // @match https://www.torn.com/* // @grant GM_xmlhttpRequest @@ -23,13 +23,18 @@ if (window.WHTRANS) return; window.WHTRANS = true; // 版本 - const version = '0.3.4'; + const version = '0.3.5'; // 修改历史 const changelist = [ { todo: true, cont: `翻译:baza npc商店、imarket、imarket搜索结果`, }, + { + ver: '0.3.5', + date: '20220129', + cont: `调整界面样式,添加常用链接,添加啤酒提醒`, + }, { ver: '0.3.4', date: '20220128', @@ -3048,6 +3053,8 @@ {key: 'energyAlert', val: true}, // 飞行闹钟 {key: 'trvAlarm', val: true}, + // 啤酒提醒 + {key: '_15Alarm', val: true}, // 光速拔刀 6-关闭 {key: 'quickAttIndex', val: 2}, // 光速跑路 0-leave 1-mug 2-hos 3-关闭 @@ -3082,6 +3089,8 @@ energyAlert: undefined, // 飞行闹钟 trvAlarm: undefined, + // 啤酒提醒 + _15Alarm: true, // 光速拔刀 6-关闭 quickAttIndex: undefined, // 光速跑路 0-leave 1-mug 2-hos 3-关闭 @@ -3157,6 +3166,13 @@ domText: ' 飞行闹钟(仅PC)', dictName: 'trvAlarm', }) + // 啤酒提醒 + settingsArr.push({ + domType: 'checkbox', + domId: 'wh-15-alarm-check', + domText: ' 啤酒提醒(45s前)', + dictName: '_15Alarm', + }); // 攻击链接转跳 settingsArr.push({ domType: 'checkbox', @@ -3295,32 +3311,99 @@ domText: 'NPC LOOT (真·世界BOSS)', clickFunc: function (e) { e.target.blur(); - const insert = `stock.png -

点击开打:

-

Duke -Leslie -Jimmy(面包刀) -Fernando(毒伞) -Tiny(大锤)

-`; + const insert = `

点击开打:

+ +
stock.png
`; popupMsg(insert, 'NPC LOOT'); }, }) - // 生存手册 + // 常用链接 settingsArr.push({ domType: 'button', - domId: 'wh-link-shengcunshouce', - domText: '生存手册', + domId: 'wh-link-collection', + domText: '常用链接', clickFunc: function (e) { + if (!this.styleAdded) { + addStyle(` +.wh-link-collection-cont a{ + display: inline-block; + border: solid 1px #b3b3b3; + border-radius: 4px; + margin: 0 5px 2px 0; + padding: 4px 8px; + text-align:center; + background: #efefef; + background: linear-gradient(#f1f1f1,#e3e3e3); + color:black !important; +} +.wh-link-collection-cont span{ +display: block; +/*padding: 0 4px 8px;*/ +} +.wh-link-collection-cont .wh-link-collection-img{ +display: block; +width:60px; +height:30px; +} +`); + this.styleAdded = true; + } e.target.blur(); - window.open('https://docs.qq.com/doc/DTVpmV2ZaRnB0RG56'); + const quick_link_dict = []; + // 生存手册 + quick_link_dict.push({ + name: '生存手册', + url: 'https://docs.qq.com/doc/DTVpmV2ZaRnB0RG56', + new_tab: true, + img: 'https://www.torn.com/images/items/293/medium.png', + }); + // 买啤酒 + quick_link_dict.push({ + name: '抢啤酒', + url: 'https://www.torn.com/shops.php?step=bitsnbobs', + new_tab: true, + img: 'https://www.torn.com/images/items/180/medium.png', + }); + // 买XAN + quick_link_dict.push({ + name: '买XAN', + url: 'https://www.torn.com/imarket.php#/p=shop&step=shop&type=&searchname=Xanax', + new_tab: true, + img: 'https://www.torn.com/images/items/206/medium.png', + }); + // 起飞 + quick_link_dict.push({ + name: '起飞', + url: 'https://www.torn.com/travelagency.php', + new_tab: true, + img: 'https://www.torn.com/images/items/396/medium.png', + }); + // 买PT + quick_link_dict.push({ + name: '买PT', + url: 'https://www.torn.com/pmarket.php', + new_tab: true, + img: 'https://www.torn.com/images/items/722/medium.png', + }); + let insert = '

'; + quick_link_dict.forEach(el => { + insert += `${el.name}`; + }); + insert += '

' + popupMsg(insert, '常用链接').classList.add('wh-link-collection-cont'); }, }) - // 飞贼模块 + // 飞贼 settingsArr.push({ domType: 'button', domId: 'wh-gs-btn', - domText: '飞贼', + domText: '飞贼小助手(by 伞佬)', clickFunc: function (e) { e.target.blur(); loadGS(getScriptEngine()); @@ -3370,13 +3453,14 @@ }, }) // 测试按钮 - // if (isDev()) settingsArr.push({ - // domType: 'button', - // domId: 'wh-test-btn', - // domText: '测试按钮', - // clickFunc: function () { - // }, - // }) + if (isDev()) settingsArr.push({ + domType: 'button', + domId: 'wh-test-btn', + domText: '测试按钮', + clickFunc: function () { + audioPlay(); + }, + }) // // 测试按钮 // if (isDev()) settingsArr.push({ // domType: 'button', @@ -3568,18 +3652,14 @@ border-radius:4px; max-width: 200px; box-shadow: 0 0 3px 1px #8484848f; } -#wh-trans-icon:not(.wh-icon-expanded):hover { -background: #f8f8f8; -} +#wh-trans-icon:not(.wh-icon-expanded):hover {background: #f8f8f8;} #wh-trans-icon button{ margin:0; padding:0; border:0; cursor:pointer; } -#wh-gSettings div{ -margin: 4px 0 0; -} +#wh-gSettings div{margin: 4px 0 0;} #wh-trans-icon .wh-container{ margin:0; padding:0 16px 16px; @@ -3599,6 +3679,7 @@ background-image:url("https://jjins.github.io/t2i/version.png?${performance.now( height:16px; width: 66px; } +/** 弹出窗口 **/ #wh-popup{ position: fixed; z-index: 9900034; @@ -3607,9 +3688,10 @@ width: 66px; width: 100%; height: 100%; background: #000000cc; + color:#333; } #wh-popup-container{ - max-width: 600px; + max-width: 568px; margin: 5em auto 0; background: #d7d7d7; min-height: 120px; @@ -3622,28 +3704,17 @@ width: 66px; font-weight: bold; text-align: center; } -#wh-popup-close{ - float: right; - margin: 8px; - padding: 5px 8px; - border: solid 2px white; - color: white; - border-radius: 3px; -} +/** 弹出窗口的内容 **/ #wh-popup-cont{ padding: 0 1em 1em; max-height: 30em; overflow-y: auto; + font-size:13px; } -#wh-popup-cont p{ -padding:0.25em 0; -} -#wh-popup-cont a{color:red;} -#wh-popup-cont h4{ -margin:0; -padding: 0.5em 0; -} - +#wh-popup-cont p{padding:0.25em 0;} +#wh-popup-cont a{color:red;text-decoration:none;} +#wh-popup-cont li{margin:4px 0;} +#wh-popup-cont h4{margin:0;padding: 0.5em 0;} #wh-popup-cont button{ margin: 0px; padding: 5px 8px; @@ -3653,6 +3724,26 @@ padding: 0.5em 0; } `); + // 啤酒提醒 + const _15alert = () => { + let dt = new Date(); + let timeOutFunc = () => { + WHNotify(`【啤酒小助手】
+提醒您:还有不到 50 秒 NPC 的商品就要刷新了,啤酒血包要抢的可以准备咯。`, 30); + let counter = 0; + const intervalID = window.setInterval(() => { + audioPlay(); + counter++; + if (counter === 3) clearInterval(intervalID); + }, 800); + window.setTimeout(timeOutFunc, 15 * 60 * 1000); + }; + // 距离下一个15分的时间,0位分,1位秒 + let next15 = [14 - (dt.getMinutes() % 15), 60 - dt.getSeconds()]; + window.setTimeout(timeOutFunc, (next15[0] * 60 + next15[1] - 45) * 1000) + }; + if (wh_trans_settings._15Alarm) _15alert(); + /** * 时分秒转换 */ @@ -4143,6 +4234,7 @@ display:none; const set_node = wh_trv_alarm_node.querySelectorAll('#wh-trv-alarm-cont button')[0]; // 落地前响铃时长 const cd_time = wh_trv_alarm_node.querySelector('input[type="number"]'); + let count_down_notify = {}; set_node.onclick = () => { try { wh_trv_alarm.alert_time = parseInt(cd_time.value); @@ -4151,6 +4243,8 @@ display:none; } save_trv_settings(); set_node.value = wh_trv_alarm.alert_time; + if (count_down_notify.del) count_down_notify.del(); + count_down_notify = WHNotify('设置已更新'); }; // 停止响铃按钮 const stop_node = wh_trv_alarm_node.querySelectorAll('#wh-trv-alarm-cont button')[1]; @@ -4161,9 +4255,12 @@ display:none; } // 开启闹钟勾选 const enable_node = wh_trv_alarm_node.querySelector('#wh-trv-alarm-cont input[type="checkbox"]'); + let on_off_notify = {}; enable_node.onchange = ev => { wh_trv_alarm.enable = ev.target.checked; save_trv_settings(); + if (on_off_notify.del) on_off_notify.del(); + on_off_notify = WHNotify(wh_trv_alarm.enable ? '闹钟已开启' : '闹钟已关闭'); }; // 剩余时间 秒 const remaining_sec = parseInt(remaining_arr[0]) * 3600 + parseInt(remaining_arr[1]) * 60 + parseInt(remaining_arr[2]); @@ -8033,17 +8130,19 @@ margin: 0 0 3px; } } - /* - 添加全局style + /** + * 添加全局style + * @param CSS + * @returns undefined */ - function addStyle(v) { + function addStyle(CSS) { let wh_gStyle = document.querySelector('style#wh-trans-gStyle'); if (wh_gStyle) { - wh_gStyle.innerHTML += v; + wh_gStyle.innerHTML += CSS; } else { wh_gStyle = document.createElement("style"); wh_gStyle.id = 'wh-trans-gStyle'; - wh_gStyle.innerHTML = v; + wh_gStyle.innerHTML = CSS; document.head.append(wh_gStyle); } log('新的CSS规则已注入', wh_gStyle); @@ -8060,7 +8159,7 @@ margin: 0 0 3px; zhongNode.innerHTML = `
-
芜湖的翻译助手
+
芜湖助手

当前版本: ${version}

最新版本:

@@ -8163,19 +8262,16 @@ margin: 0 0 3px; } // 弹出窗口 - function popupMsg(innerHTML, title = '芜湖的翻译助手') { + function popupMsg(innerHTML, title = '芜湖助手') { if (hasPopup()) return null; const popup = document.createElement('div'); popup.id = 'wh-popup'; popup.innerHTML = `
-

${title}

+

${title}

${innerHTML}
`; document.body.append(popup); - // const close_btn = popup.querySelector('#wh-popup-close'); - // close_btn.onclick = () => popup.remove(); - const clickFunc = e => { e.stopImmediatePropagation(); if (e.target === popup) { @@ -8184,7 +8280,6 @@ margin: 0 0 3px; } }; popup.addEventListener('click', clickFunc); - return popup.querySelector('#wh-popup-cont'); } @@ -8367,6 +8462,7 @@ margin: 0 0 3px; left: calc(50% - 180px); width: 360px; z-index: 200000; + color:#333; } #${node_id} .wh-notify-item { /*height: 50px;*/ @@ -8460,14 +8556,13 @@ z-index:100001; _window.GM_setValue("gsp_x", 10); _window.GM_setValue("gsp_y", 10); notify.del(); - notify = WHNotify('飞贼小助手已加载'); + notify = WHNotify('飞贼小助手已加载', 1); const gsp = _docu.querySelector('#gsp'); - gsp.style.top = '10px'; - gsp.style.left = '10px'; - // log(gsp) const init = () => { ifr.style.height = `${gsp.offsetHeight + 10}px`; ifr.style.width = `${gsp.offsetWidth + 20}px`; + gsp.style.top = '10px'; + gsp.style.left = '10px'; }; new MutationObserver(init).observe(gsp, {childList: true, subtree: true}); init(); @@ -8512,4 +8607,17 @@ z-index:100001; } WHNotify('暂不支持'); } + + /** + * 播放音频 + * + * @param url:String 播放的音频URL + * @returns void + */ + function audioPlay(url = 'https://www.torn.com/js/chat/sounds/Warble_1.mp3') { + const audio = new Audio(url); + audio.addEventListener("canplaythrough", () => { + audio.play().then(); + }); + } }());