diff --git a/torn-trans-zhcn.user.js b/torn-trans-zhcn.user.js
index 8b20929..5ee48ad 100644
--- a/torn-trans-zhcn.user.js
+++ b/torn-trans-zhcn.user.js
@@ -1,8 +1,8 @@
// ==UserScript==
-// @lastmodified 202112241544
+// @lastmodified 202112241711
// @name Torn翻译
// @namespace WOOH
-// @version 0.1.1224a
+// @version 0.1.1224b
// @description Torn UI翻译
// @author Woohoo-[2687093] sabrina_devil[2696209]
// @match https://www.torn.com/*
@@ -23,6 +23,11 @@
todo: true,
cont: `baza npc商店 imarket及imarket搜索结果`,
},
+ {
+ ver: '0.1.1224b',
+ date: '20211224',
+ cont: `小镇提示逻辑改写`,
+ },
{
ver: '0.1.1224a',
date: '20211224',
@@ -5485,24 +5490,11 @@ margin: 0 0 3px;
? JSON.parse(localStorage.getItem('wh-loot-setting'))
: {blink: 'y', sound: 'y', chest: 'y'};
let $ct_wrap;
+ let soundLoopFlag = false;
const getDOMOb = new MutationObserver(() => {
$ct_wrap = $root.querySelector('#ct-wrap');
if ($ct_wrap) {
getDOMOb.disconnect();
- ob.observe($ct_wrap, {childList: true, subtree: true});
- }
- });
- const ob = new MutationObserver(() => {
- // if ($ct_wrap) {
- const $ct_title = $ct_wrap.querySelector('.status-title');
- const $pos = $ct_wrap.querySelector('.map-title span[class^="position___"]') || $ct_wrap.querySelector('.status-title span[class^="position___"]');
- if (!$pos) return;
- const $pos_spl = $pos.innerText.trim().split(',');
- const player_position = {};
- player_position.x = parseInt($pos_spl[0]);
- player_position.y = parseInt($pos_spl[1]);
- let $wh_loot_container = $root.querySelector('#wh-loot-container');
- if (!$wh_loot_container) {
const insert_html = `
附近物品
@@ -5554,29 +5546,76 @@ margin: 0 0 3px;
}
`;
$($ct_wrap).before(insert_html);
- $wh_loot_container = $root.querySelector('#wh-loot-container');
+ const $wh_loot_container = $root.querySelector('#wh-loot-container');
+ const $btn = $wh_loot_container.querySelector('#wh-loot-btn button');
+ const $clear_btn = $wh_loot_container.querySelector('#wh-hist-clear button');
+ const $ex = $wh_loot_container.querySelector('#wh-loot-container-ex');
+ const $tbody = $wh_loot_container.querySelector('tbody');
+ const $blink = $wh_loot_container.querySelector('#wh-loot-setting-blink');
+ const $sound = $wh_loot_container.querySelector('#wh-loot-setting-sound');
+ const $chest = $wh_loot_container.querySelector('#wh-loot-setting-chest');
+ const $audio = $wh_loot_container.querySelector('audio');
+ $btn.onclick = e => {
+ e.target.innerText = e.target.innerText === '设置' ? '收起' : '设置';
+ $($ex).toggleClass('wh-hide');
+ e.target.blur();
+ };
+ $clear_btn.onclick = e => {
+ dropHist = {};
+ $tbody.innerHTML = '';
+ e.target.blur();
+ };
+ $blink.onchange = e => {
+ if (e.target.checked) {
+ alertSettings.blink = 'y';
+ if ($wh_loot_container.querySelector('#wh-loot-item-count').innerText !== '(0)') {
+ $wh_loot_container.querySelector('#wh-loot-container-main').style.animation = 'lootFoundAlert 2s infinite';
+ }
+ } else {
+ alertSettings.blink = 'n';
+ $wh_loot_container.querySelector('#wh-loot-container-main').style.animation = '';
+ }
+ localStorage.setItem('wh-loot-setting', JSON.stringify(alertSettings));
+ };
+ $sound.onchange = e => {
+ if (e.target.checked) {
+ alertSettings.sound = 'y';
+ if ($wh_loot_container.querySelector('#wh-loot-item-count').innerText !== '(0)') {
+ soundLoopFlag = true;
+ }
+ } else {
+ alertSettings.sound = 'n';
+ soundLoopFlag = false;
+ }
+ localStorage.setItem('wh-loot-setting', JSON.stringify(alertSettings));
+ };
+ $chest.onchange = e => {
+ alertSettings.chest = e.target.checked ? 'y' : 'n';
+ localStorage.setItem('wh-loot-setting', JSON.stringify(alertSettings));
+ };
+ const soundIntervalID = window.setInterval(() => {
+ if (soundLoopFlag) $audio.play().then();
+ }, 1200);
+ ob.observe($ct_wrap, {childList: true, subtree: true});
+ }
+ });
+ const ob = new MutationObserver(() => {
+ const $ct_title = $ct_wrap.querySelector('.status-title');
+ const $pos = $ct_wrap.querySelector('.map-title span[class^="position___"]') || $ct_wrap.querySelector('.status-title span[class^="position___"]');
+ if (!$pos) return;
+ const $pos_spl = $pos.innerText.trim().split(',');
+ const player_position = {};
+ player_position.x = parseInt($pos_spl[0]);
+ player_position.y = parseInt($pos_spl[1]);
+ const $wh_loot_container = $root.querySelector('#wh-loot-container');
+ if (!$wh_loot_container) {
+ console.error('掉落助手未找到DOM容器');
+ return;
}
- const $audio = $wh_loot_container.querySelector('audio');
const $blink = $wh_loot_container.querySelector('#wh-loot-setting-blink');
- alertSettings.blink = $blink.checked ? 'y' : 'n';
const $sound = $wh_loot_container.querySelector('#wh-loot-setting-sound');
- alertSettings.sound = $sound.checked ? 'y' : 'n';
const $chest = $wh_loot_container.querySelector('#wh-loot-setting-chest');
- alertSettings.chest = $chest.checked ? 'y' : 'n';
- const $ex = $wh_loot_container.querySelector('#wh-loot-container-ex');
- const $btn = $wh_loot_container.querySelector('#wh-loot-btn button');
- const $clear_btn = $wh_loot_container.querySelector('#wh-hist-clear button');
const $tbody = $wh_loot_container.querySelector('tbody');
- if ($btn.onclick === null) $btn.onclick = (e) => {
- e.target.innerText = e.target.innerText === '设置' ? '收起' : '设置';
- $($ex).toggleClass('wh-hide');
- e.target.blur();
- };
- if ($clear_btn.onclick === null) $clear_btn.onclick = (e) => {
- dropHist = {};
- $tbody.innerHTML = '';
- e.target.blur();
- };
const nearby_arr = [];
const items = $root.querySelectorAll('div.grid-layer div.items-layer div.ct-item');
// 附近的所有物品
@@ -5605,11 +5644,9 @@ margin: 0 0 3px;
else if (nearby_item.x > player_position.x && nearby_item.y === player_position.y) path = '→';
else if (nearby_item.x > player_position.x && nearby_item.y < player_position.y) path = '↘';
else if (nearby_item.x === player_position.x && nearby_item.y < player_position.y) path = '↓';
- let isChest = false;
let item_name;
if (nearby_item.name === 'chests') {
chest_count++;
- isChest = true;
item_name = chestTypeDict[nearby_item.type] + lootTypeDict[nearby_item.name];
$wh_loot_container_chests.innerHTML += `
${path}[${nearby_item.x},${nearby_item.y}] ${item_name}
`
} else {
@@ -5626,8 +5663,7 @@ margin: 0 0 3px;
el.isPassed = true;
}
} else {
- // (() => {
- if (!(isChest && $chest.checked)) {
+ if (!(nearby_item.name === 'chests' && $chest.checked)) {
const now = new Date();
dropHist[hist_key] = {
pos: `[${nearby_item.x},${nearby_item.y}]`,
@@ -5637,35 +5673,29 @@ margin: 0 0 3px;
id: Object.keys(dropHist).length,
};
}
- // else {
- // return;
- // }
- // })();
}
}
});
$wh_loot_container.querySelector('#wh-loot-item-count').innerText = `(${item_count})`;
if (item_count === 0) {
- $wh_loot_container_items.innerText = `暂无`;
+ $wh_loot_container_items.innerText = '暂无';
$wh_loot_container.querySelector('#wh-loot-container-main').style.animation = '';
+ soundLoopFlag = false;
} else {
if ($blink.checked) $wh_loot_container.querySelector('#wh-loot-container-main').style.animation = 'lootFoundAlert 2s infinite';
- if ($sound.checked) $audio.play().then();
+ if ($sound.checked) soundLoopFlag = true;
}
$wh_loot_container.querySelector('#wh-loot-chest-count').innerText = `(${chest_count})`;
- if (chest_count === 0) $wh_loot_container_chests.innerText = `暂无`;
-
+ if (chest_count === 0) $wh_loot_container_chests.innerText = '暂无';
const history = Object.keys(dropHist).map(key => dropHist[key]).sort((a, b) => a.id - b.id);
let table_html = '';
history.forEach(e => {
table_html += `
| ${e.pos} | ${e.map} | ${e.name} | ${e.last} | ${e.isPassed ? '已取得' : '不确定'} |
`;
});
$tbody.innerHTML = table_html;
-
localStorage.setItem('wh-loot-store', JSON.stringify(dropHist));
- localStorage.setItem('wh-loot-setting', JSON.stringify(alertSettings));
});
- getDOMOb.observe($root, {childList: true, subtree: true})
+ getDOMOb.observe($root, {childList: true, subtree: true});
return;
}
diff --git a/torn-wh-show-loot-pos.user.js b/torn-wh-show-loot-pos.user.js
index 896c507..220aa49 100644
--- a/torn-wh-show-loot-pos.user.js
+++ b/torn-wh-show-loot-pos.user.js
@@ -23,18 +23,19 @@
const chestTypeColorDict = {'1': 'gold', '2': 'silver', '3': 'sandybrown',};
const lootTypeDict = {'chests': '钥匙箱', 'gifts': '礼物', 'combinationChest': '密码箱', 'keys': '钥匙',};
const keyTypeDict = {'b': '铜', 's': '银', 'g': '金',};
- const intervalID = window.setInterval(() => {
- const $city_wrapper = $root.querySelector('#ct-wrap');
- if ($city_wrapper) {
- const $pos = $city_wrapper.querySelector('.map-title span[class^="position___"]') || $city_wrapper.querySelector('.status-title span[class^="position___"]');
- if (!$pos) return;
- const $pos_spl = $pos.innerText.trim().split(',');
- const player_position = {};
- player_position.x = parseInt($pos_spl[0]);
- player_position.y = parseInt($pos_spl[1]);
- let $wh_loot_container = $root.querySelector('#wh-loot-container');
- if (!$wh_loot_container) {
- const insert_html = `
+ let dropHist = localStorage.getItem('wh-loot-store')
+ ? JSON.parse(localStorage.getItem('wh-loot-store'))
+ : {};
+ const alertSettings = localStorage.getItem('wh-loot-setting')
+ ? JSON.parse(localStorage.getItem('wh-loot-setting'))
+ : {blink: 'y', sound: 'y', chest: 'y'};
+ let $ct_wrap;
+ let soundLoopFlag = false;
+ const getDOMOb = new MutationObserver(() => {
+ $ct_wrap = $root.querySelector('#ct-wrap');
+ if ($ct_wrap) {
+ getDOMOb.disconnect();
+ const insert_html = `
附近物品
+
+
+
+
+
+
+
- 如果长时间不清空数据会有奇怪的bug
+
+
+
+
+
`;
- $($city_wrapper).before(insert_html);
- $wh_loot_container = $root.querySelector('#wh-loot-container');
- }
+ $($ct_wrap).before(insert_html);
+ const $wh_loot_container = $root.querySelector('#wh-loot-container');
+ const $btn = $wh_loot_container.querySelector('#wh-loot-btn button');
+ const $clear_btn = $wh_loot_container.querySelector('#wh-hist-clear button');
+ const $ex = $wh_loot_container.querySelector('#wh-loot-container-ex');
+ const $tbody = $wh_loot_container.querySelector('tbody');
+ const $blink = $wh_loot_container.querySelector('#wh-loot-setting-blink');
+ const $sound = $wh_loot_container.querySelector('#wh-loot-setting-sound');
+ const $chest = $wh_loot_container.querySelector('#wh-loot-setting-chest');
const $audio = $wh_loot_container.querySelector('audio');
- const nearby_arr = [];
- const items = $root.querySelectorAll('div.grid-layer div.items-layer div.ct-item');
- // 附近的所有物品
- items.forEach(el => {
- const item_props = {x: 0, y: 0, name: '', type: '', url: '',};
- item_props.x = parseInt(el.style.left.replaceAll('px', '')) / 30;
- item_props.y = -parseInt(el.style.top.replaceAll('px', '')) / 30;
- item_props.url = el.firstElementChild.src;
- const srcSpl = item_props.url.trim().split('/');
- item_props.name = srcSpl[6];
- item_props.type = srcSpl[8].slice(0, 1);
- nearby_arr.push(item_props);
- });
- const $wh_loot_container_items = $wh_loot_container.querySelector('#wh-loot-container-items');
- const $wh_loot_container_chests = $wh_loot_container.querySelector('#wh-loot-container-chests');
- let item_count = 0, chest_count = 0;
- $wh_loot_container_items.innerHTML = ``;
- $wh_loot_container_chests.innerHTML = ``;
- nearby_arr.forEach(nearby_item => {
- let path = '=';
- if (nearby_item.x < player_position.x && nearby_item.y < player_position.y) path = '↙';
- else if (nearby_item.x < player_position.x && nearby_item.y === player_position.y) path = '←';
- else if (nearby_item.x < player_position.x && nearby_item.y > player_position.y) path = '↖';
- else if (nearby_item.x === player_position.x && nearby_item.y > player_position.y) path = '↑';
- else if (nearby_item.x > player_position.x && nearby_item.y > player_position.y) path = '↗';
- else if (nearby_item.x > player_position.x && nearby_item.y === player_position.y) path = '→';
- else if (nearby_item.x > player_position.x && nearby_item.y < player_position.y) path = '↘';
- else if (nearby_item.x === player_position.x && nearby_item.y < player_position.y) path = '↓';
- if (nearby_item.name === 'chests') {
- chest_count++;
- $wh_loot_container_chests.innerHTML += `
${path}[${nearby_item.x},${nearby_item.y}] ${chestTypeDict[nearby_item.type]}${lootTypeDict[nearby_item.name]}
`
+ $btn.onclick = e => {
+ e.target.innerText = e.target.innerText === '设置' ? '收起' : '设置';
+ $($ex).toggleClass('wh-hide');
+ e.target.blur();
+ };
+ $clear_btn.onclick = e => {
+ dropHist = {};
+ $tbody.innerHTML = '';
+ e.target.blur();
+ };
+ $blink.onchange = e => {
+ if (e.target.checked) {
+ alertSettings.blink = 'y';
+ if ($wh_loot_container.querySelector('#wh-loot-item-count').innerText !== '(0)') {
+ $wh_loot_container.querySelector('#wh-loot-container-main').style.animation = 'lootFoundAlert 2s infinite';
+ }
} else {
- item_count++;
- $wh_loot_container_items.innerHTML += `
${path}[${nearby_item.x},${nearby_item.y}] ${nearby_item.name === 'keys' ? keyTypeDict[nearby_item.type] || '' : ''}${lootTypeDict[nearby_item.name] || nearby_item.name}
`
+ alertSettings.blink = 'n';
+ $wh_loot_container.querySelector('#wh-loot-container-main').style.animation = '';
}
- });
- $wh_loot_container.querySelector('#wh-loot-item-count').innerText = `(${item_count})`;
- if (item_count === 0) {
- $wh_loot_container_items.innerText = `暂无`;
- $wh_loot_container.querySelector('#wh-loot-container-main').style.animation = '';
- } else {
- $wh_loot_container.querySelector('#wh-loot-container-main').style.animation = 'lootFoundAlert 2s infinite';
- $audio.play().then();
- }
- $wh_loot_container.querySelector('#wh-loot-chest-count').innerText = `(${chest_count})`;
- if (chest_count === 0) $wh_loot_container_chests.innerText = `暂无`;
+ localStorage.setItem('wh-loot-setting', JSON.stringify(alertSettings));
+ };
+ $sound.onchange = e => {
+ if (e.target.checked) {
+ alertSettings.sound = 'y';
+ if ($wh_loot_container.querySelector('#wh-loot-item-count').innerText !== '(0)') {
+ soundLoopFlag = true;
+ }
+ } else {
+ alertSettings.sound = 'n';
+ soundLoopFlag = false;
+ }
+ localStorage.setItem('wh-loot-setting', JSON.stringify(alertSettings));
+ };
+ $chest.onchange = e => {
+ alertSettings.chest = e.target.checked ? 'y' : 'n';
+ localStorage.setItem('wh-loot-setting', JSON.stringify(alertSettings));
+ };
+ const soundIntervalID = window.setInterval(() => {
+ if (soundLoopFlag) $audio.play().then();
+ }, 1200);
+ ob.observe($ct_wrap, {childList: true, subtree: true});
}
- }, 1200);
+ });
+ const ob = new MutationObserver(() => {
+ const $ct_title = $ct_wrap.querySelector('.status-title');
+ const $pos = $ct_wrap.querySelector('.map-title span[class^="position___"]') || $ct_wrap.querySelector('.status-title span[class^="position___"]');
+ if (!$pos) return;
+ const $pos_spl = $pos.innerText.trim().split(',');
+ const player_position = {};
+ player_position.x = parseInt($pos_spl[0]);
+ player_position.y = parseInt($pos_spl[1]);
+ const $wh_loot_container = $root.querySelector('#wh-loot-container');
+ if (!$wh_loot_container) {
+ console.error('掉落助手未找到DOM容器');
+ return;
+ }
+ const $blink = $wh_loot_container.querySelector('#wh-loot-setting-blink');
+ const $sound = $wh_loot_container.querySelector('#wh-loot-setting-sound');
+ const $chest = $wh_loot_container.querySelector('#wh-loot-setting-chest');
+ const $tbody = $wh_loot_container.querySelector('tbody');
+ const nearby_arr = [];
+ const items = $root.querySelectorAll('div.grid-layer div.items-layer div.ct-item');
+ // 附近的所有物品
+ items.forEach(el => {
+ const item_props = {x: 0, y: 0, name: '', type: '', url: '',};
+ item_props.x = parseInt(el.style.left.replaceAll('px', '')) / 30;
+ item_props.y = -parseInt(el.style.top.replaceAll('px', '')) / 30;
+ item_props.url = el.firstElementChild.src;
+ const srcSpl = item_props.url.trim().split('/');
+ item_props.name = srcSpl[6];
+ item_props.type = srcSpl[8].slice(0, 1);
+ nearby_arr.push(item_props);
+ });
+ const $wh_loot_container_items = $wh_loot_container.querySelector('#wh-loot-container-items');
+ const $wh_loot_container_chests = $wh_loot_container.querySelector('#wh-loot-container-chests');
+ let item_count = 0, chest_count = 0;
+ $wh_loot_container_items.innerHTML = '';
+ $wh_loot_container_chests.innerHTML = '';
+ nearby_arr.forEach(nearby_item => {
+ let path = '=';
+ if (nearby_item.x < player_position.x && nearby_item.y < player_position.y) path = '↙';
+ else if (nearby_item.x < player_position.x && nearby_item.y === player_position.y) path = '←';
+ else if (nearby_item.x < player_position.x && nearby_item.y > player_position.y) path = '↖';
+ else if (nearby_item.x === player_position.x && nearby_item.y > player_position.y) path = '↑';
+ else if (nearby_item.x > player_position.x && nearby_item.y > player_position.y) path = '↗';
+ else if (nearby_item.x > player_position.x && nearby_item.y === player_position.y) path = '→';
+ else if (nearby_item.x > player_position.x && nearby_item.y < player_position.y) path = '↘';
+ else if (nearby_item.x === player_position.x && nearby_item.y < player_position.y) path = '↓';
+ let item_name;
+ if (nearby_item.name === 'chests') {
+ chest_count++;
+ item_name = chestTypeDict[nearby_item.type] + lootTypeDict[nearby_item.name];
+ $wh_loot_container_chests.innerHTML += `
${path}[${nearby_item.x},${nearby_item.y}] ${item_name}
`
+ } else {
+ item_count++;
+ item_name = (nearby_item.name === 'keys' ? keyTypeDict[nearby_item.type] || '' : '') + lootTypeDict[nearby_item.name] || nearby_item.name;
+ $wh_loot_container_items.innerHTML += `
${path}[${nearby_item.x},${nearby_item.y}] ${item_name}
`
+ }
+ // 确认地图坐标存在
+ if ($ct_title) {
+ const hist_key = `[${nearby_item.x},${nearby_item.y}]"${$ct_title.firstChild.nodeValue.trim()}"${item_name}`;
+ const el = dropHist[hist_key];
+ if (el) {
+ if (path === '=' && (nearby_item.name === 'keys' || nearby_item.name === 'gifts')) {
+ el.isPassed = true;
+ }
+ } else {
+ if (!(nearby_item.name === 'chests' && $chest.checked)) {
+ const now = new Date();
+ dropHist[hist_key] = {
+ pos: `[${nearby_item.x},${nearby_item.y}]`,
+ map: $ct_title.firstChild.nodeValue.trim(),
+ last: `${now.getFullYear()}-${now.getMonth()}-${now.getDay()} ${now.getHours()}:${now.getMinutes()}:${now.getSeconds()}`,
+ name: item_name,
+ id: Object.keys(dropHist).length,
+ };
+ }
+ }
+ }
+ });
+ $wh_loot_container.querySelector('#wh-loot-item-count').innerText = `(${item_count})`;
+ if (item_count === 0) {
+ $wh_loot_container_items.innerText = '暂无';
+ $wh_loot_container.querySelector('#wh-loot-container-main').style.animation = '';
+ soundLoopFlag = false;
+ } else {
+ if ($blink.checked) $wh_loot_container.querySelector('#wh-loot-container-main').style.animation = 'lootFoundAlert 2s infinite';
+ if ($sound.checked) soundLoopFlag = true;
+ }
+ $wh_loot_container.querySelector('#wh-loot-chest-count').innerText = `(${chest_count})`;
+ if (chest_count === 0) $wh_loot_container_chests.innerText = '暂无';
+ const history = Object.keys(dropHist).map(key => dropHist[key]).sort((a, b) => a.id - b.id);
+ let table_html = '';
+ history.forEach(e => {
+ table_html += `
| ${e.pos} | ${e.map} | ${e.name} | ${e.last} | ${e.isPassed ? '已取得' : '不确定'} |
`;
+ });
+ $tbody.innerHTML = table_html;
+ localStorage.setItem('wh-loot-store', JSON.stringify(dropHist));
+ });
+ getDOMOb.observe($root, {childList: true, subtree: true});
}
}());