wuhu-torn-helper/torn-wh-show-loot-pos.user.js

93 lines
5.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// ==UserScript==
// @name Torn圣诞小镇掉落物品坐标显示
// @namespace WH
// @version 0.2.1
// @description 在地图界面上方显示附近的宝箱、物品、钥匙坐标兼容手机APP Torn PDA及Alook
// @author Woohoo[2687093]
// @match https://www.torn.com/*
// @grant none
// ==/UserScript==
(function () {
'use strict';
const ___window___ = window || window.unsafeWindow;
if (___window___.WHLOOTPOS||___window___.WHTRANS) return;
___window___.WHLOOTPOS = true;
const $ = ___window___.jQuery;
if (/christmas_town\.php/.test(window.location.href)) {
const $root = document.querySelector('#christmastownroot');
const chestTypeDict = {'1': '金', '2': '银', '3': '铜',};
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]);
const $wh_loot_container = $root.querySelector('#wh-loot-container');
if (!$wh_loot_container) {
const insert_html = `<div id="wh-loot-container" class="m-bottom10">
<div class="title-black"><span>附近物品</span></div>
<div id="wh-loot-container-main" class="cont-gray" style="padding: 0.5em">
<b>物品</b><span id="wh-loot-item-count"></span>
<div id="wh-loot-container-items" style="overflow-x: auto;overflow-y: hidden;white-space: nowrap;min-height: 4em;"></div>
<b>箱子</b><span id="wh-loot-chest-count"></span>
<div id="wh-loot-container-chests" style="overflow-x: auto;overflow-y: hidden;white-space: nowrap;min-height: 4em;"></div>
</div>
</div>`;
$($city_wrapper).before(insert_html);
}
let item_list = [];
const items = $root.querySelectorAll('div.grid-layer div.items-layer div.ct-item');
// 附近的所有物品
items.forEach(e => {
const item_props = {x: 0, y: 0, name: '', type: '', url: '',};
item_props.x = parseInt(e.style.left.replaceAll('px', '')) / 30;
item_props.y = -parseInt(e.style.top.replaceAll('px', '')) / 30;
const srcSpl = e.firstElementChild.src.trim().split('/');
item_props.name = srcSpl[6];
item_props.type = srcSpl[8].slice(0, 1);
item_props.url = e.firstElementChild.src;
item_list[item_list.length] = item_props;
});
const $wh_loot_container_items = $root.querySelector('#wh-loot-container-items');
const $wh_loot_container_chests = $root.querySelector('#wh-loot-container-chests');
let item_count = 0, chest_count = 0;
if ($wh_loot_container_items) $wh_loot_container_items.innerHTML = ``;
if ($wh_loot_container_chests) $wh_loot_container_chests.innerHTML = ``;
item_list.forEach(e => {
let path = '·';
if (e.x < player_position.x && e.y < player_position.y) path = '↙';
else if (e.x < player_position.x && e.y === player_position.y) path = '←';
else if (e.x < player_position.x && e.y > player_position.y) path = '↖';
else if (e.x === player_position.x && e.y > player_position.y) path = '↑';
else if (e.x > player_position.x && e.y > player_position.y) path = '↗';
else if (e.x > player_position.x && e.y === player_position.y) path = '→';
else if (e.x > player_position.x && e.y < player_position.y) path = '↘';
else if (e.x === player_position.x && e.y < player_position.y) path = '↓';
if (e.name === 'chests') {
chest_count++;
$wh_loot_container_chests.innerHTML += `<span style="display: inline-block;background-color: ${chestTypeColorDict[e.type] || 'silver'};color: white;margin: 0 1em 0 0;border-radius: 4px;padding: 0.5em;">${path}[${e.x},${e.y}] - ${chestTypeDict[e.type]}${lootTypeDict[e.name]}<img src="${e.url}" style="height: 1em; width: 1em;"/></span>`
} else {
item_count++;
$wh_loot_container_items.innerHTML += `<span style="display: inline-block;background-color: #2e8b57;color: white;margin: 0 1em 0 0;border-radius: 4px;padding: 0.5em;">${path}[${e.x},${e.y}] - ${e.name === 'keys' ? keyTypeDict[e.type] || '' : ''}${lootTypeDict[e.name] || e.name}<img src="${e.url}" style="height: 1em; width: 1em;"/></span>`
}
});
$root.querySelector('#wh-loot-item-count').innerText = `(${item_count})`;
if (item_count === 0) $wh_loot_container_items.innerText = `暂无`;
$root.querySelector('#wh-loot-chest-count').innerText = `(${chest_count})`;
if (chest_count === 0) $wh_loot_container_chests.innerText = `暂无`;
}
}, 1200);
}
}());