您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Filter things out of the war base
当前为
// ==UserScript== // @name Warbase Filters (compatibility version) // @namespace somenamespace // @version 0.5.1 // @description Filter things out of the war base // @author tos // @include *.torn.com/factions.php?step=your* // @grant GM_addStyle // ==/UserScript== 'use strict'; (function () { var animation_enabled = true; var animation_duration = 5; //minutes var extended_desc_hide = true; var difficulty_colors = { 0: '#e0f2f2', //blue 1: '#e0f2e9', 2: '#e0f2e0', //green 3: '#e6f2e0', 4: '#ebf2e0', 5: '#f2f2e0', //yellow 6: '#f2ebe0', 7: '#f2e6e0', 8: '#f2e0e0', //red 9: '#f2d0d0', 10: '#f2c0c0', 11: 'rgb(255,0,0)' }; GM_addStyle('\n .wb_extended.f-war-list .descriptions {\n display: none;\n }\n\n .wb_extended.f-war-list .act {\n padding-bottom: 0 !important;\n border-radius: 5px !important;\n }\n \n #wb_filter_wrap .arrow-wrap {display: block;}\n #wb_filter_wrap i {margin: 8px 12px 0px 0px;}\n #wb_filter_wrap .active i {margin: 11px 12px 0px 0px;}\n \n #warbase_filters {\n display: flex;}\n \n #warbase_filters .wb_content_left {\n display: inline-flex;\n flex-direction: column;\n padding: 5px;\n width: 40%;\n vertical-align: top;}\n \n #warbase_filters .wb_content_middle {\n display: inline-flex;\n flex-direction: column;\n justify-content: center;\n padding: 5px;\n width: 30%;}\n \n #warbase_filters .wb_content_right {\n display: inline-flex;\n flex-direction: column;\n padding: 5px;\n width: 30%;}\n #warbase_filters .wb_content_right span{\n justify-content: flex-end;}\n #warbase_filters .wb_content_right input{\n margin-right: 0px !important;\n margin-left: 3px;}\n \n #warbase_filters .wbTotals_col_left{\n display: inline-flex;\n flex-direction: column;\n font-size: 110%;\n font-weight: bold;\n width: auto;}\n #warbase_filters .wbTotals_col_right{\n display: inline-flex;\n flex-direction: column;\n font-size: 110%;\n text-align: right;\n font-weight: normal;\n width: auto;}\n \n #warbase_filters .wbTotals_title{\n padding: 1px 0px 1px 10px;}\n \n #warbase_filters .wbTotals {\n padding: 1px 0px;}\n \n #warbase_filters .filter-title {\n display: inline-flex;\n background-color: #BABABA;\n border-radius: 5px 0px 0px 5px;\n align-items: center;\n font-size: 150%;\n padding: 5px;}\n \n #warbase_filters .filter-content {\n display: inline-flex;\n flex-direction: column;\n background-color: #DBDBDB;\n border-radius: 0px 5px 5px 0px;\n padding: 3px 0px;}\n \n #warbase_filters .filter-row {\n display: flex;\n flex-wrap: wrap;}\n \n #warbase_filters span{\n display: flex;\n flex-wrap: wrap;\n min-height: 3px;\n padding: 1px 10px;}\n \n #warbase_filters input[type="checkbox"] {\n margin-right: 3px;}\n \n #warbase_filters input[type="number"] {\n background: transparent;\n border-bottom: 1px solid black;\n text-align: center;\n width: 50px;}\n \n .f-chain {border-radius: 14px}\n \n @keyframes linkFade {\n 0% {color: #969;}\n 95% {color: #769;}\n 100% {color: #069;}}\n \n .animation_colorfade {\n animation-name: linkFade;\n animation-duration: ' + animation_duration * 60 + 's;}\n \n @keyframes chainIconFade {\n from {background-color: #b2b2b2;}\n to {background-color: #f2f2f2;}}\n \n .animation_colorblind {\n animation-name: chainIconFade;\n animation-duration: ' + animation_duration * 60 + 's;}\n \n #warbase_results {\n display: none;}\n \n #warbase_results .wbResults_placeholder {\n font-weight: bold;\n padding: 10px;}\n \n #wars_extended {\n margin-bottom:10px;}\n \n #wars_extended .descriptions-new {\n display: block;\n margin: 0;\n float: left;\n background-color: transparent;\n border-radius: 0;\n box-shadow: none;\n height: auto;\n width: 100%;}\n \n .wb_difficulty_DIV {\n float: right;\n vertical-align: middle;\n }\n \n .wb_difficulty_INPUT {\n background: white;\n border-radius: 3px;\n box-shadow: 0px 0px 2px #f2f2f2;\n text-align: center;\n float: right;\n height: 100%;\n width: 70%;\n margin: 12% 5%;\n padding: 3px 0px;\n }\n \n .wb_hide {\n overflow: hidden;\n height: 0;}\n'); var default_options = { fed: false, traveling: false, online: true, idle: true, offline: true, hosp: true, hosp_time: 0, level: false, level_min: 0, level_max: 100, extended: false, territories_inverted: false, colorblind: false, filters_collapse: false }; var filters = Object.assign(default_options, JSON.parse(localStorage.getItem('torn_wb_filters'))); //torn_warbase_filters var storeFilters = function storeFilters() { return localStorage.setItem('torn_wb_filters', JSON.stringify(filters)); }; var enemy_difficulty = JSON.parse(localStorage.getItem('torn_enemy_difficulty')) || {}; //torn_enemy_difficulties var difficulty_max = Object.keys(difficulty_colors).length - 1; var faction_nodes = {}; var faction_totals = {}; var _to_array = function _to_array(list) { return Array.prototype.slice.call(list); }; //_to_array().forEach() var count_enemies = function count_enemies(obj) { var enemy_totals = { total: 0, ok: 0, hidden: 0 }; var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = Object.keys(obj)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var factionID = _step.value; enemy_totals.total += faction_totals[factionID].total; enemy_totals.ok += faction_totals[factionID].ok; enemy_totals.hidden += faction_totals[factionID].hidden; } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } return enemy_totals; }; var run_filters = function run_filters(node) { var factionID = node.querySelector('.t-blue').href.split('&')[1].replace('=', ''); var target_TOTALS = { total: 0, ok: 0, hidden: 0 }; faction_totals[factionID] = {}; _to_array(node.querySelector('.member-list').children).forEach(function (enemy_LI) { target_TOTALS.total += 1; var status = enemy_LI.querySelector('.status').firstElementChild.textContent; var online_status_icon = enemy_LI.querySelector('#icon1') || enemy_LI.querySelector('#icon2') || enemy_LI.querySelector('#icon62'); var online_status = online_status_icon.title.replace('<b>', '').replace('</b>', ''); //const bountied = enemy_LI.querySelector('#icon13') || false //if(bountied) enemy_LI.style.backgroundColor ='#F0D9D2'; var hosp_time = 0; if (enemy_LI.querySelector('#icon15')) { var time_string = enemy_LI.querySelector('#icon15').title.split('\'>')[1].split('</')[0]; hosp_time = parseInt(time_string.split(':')[0]) * 3600 + parseInt(time_string.split(':')[1]) * 60 + parseInt(time_string.split(':')[2]); } var jail_time = 0; if (enemy_LI.querySelector('#icon16')) { var _time_string = enemy_LI.querySelector('#icon16').title.split('\'>')[1].split('</')[0]; jail_time = parseInt(_time_string.split(':')[0]) * 3600 + parseInt(_time_string.split(':')[1]) * 60 + parseInt(_time_string.split(':')[2]); } var level = parseInt(enemy_LI.querySelector('.lvl .t-hide').nextSibling.textContent); var userID = enemy_LI.querySelector('.name').href.split('XID=')[1]; var li_icon_wrap = enemy_LI.querySelector('.member-icons'); if (!enemy_LI.querySelector('.wb_difficulty_DIV')) { var difficulty_DIV = document.createElement('DIV'); difficulty_DIV.className = 'wb_difficulty_DIV'; difficulty_DIV.innerHTML = '<input class="wb_difficulty_INPUT" type="number" min=0 max=' + difficulty_max + ' data-userID="' + userID + '"></input>'; li_icon_wrap.append(difficulty_DIV); var difficulty_INPUT = enemy_LI.querySelector('.wb_difficulty_INPUT'); difficulty_INPUT.addEventListener('change', function (event) { if (difficulty_INPUT.value < 0) difficulty_INPUT.value = 0; if (difficulty_INPUT.value > difficulty_max) difficulty_INPUT.value = difficulty_max; var difficulty = difficulty_INPUT.value; if (difficulty === '') { if (enemy_difficulty['ID_' + userID]) delete enemy_difficulty['ID_' + userID]; _to_array(document.querySelectorAll('.wb_difficulty_INPUT[data-userID="' + userID + '"')).forEach(function (this_user) { this_user.parentElement.parentElement.parentElement.style.backgroundColor = 'initial'; this_user.value = difficulty; }); } else { enemy_difficulty['ID_' + userID] = difficulty; _to_array(document.querySelectorAll('.wb_difficulty_INPUT[data-userID="' + userID + '"')).forEach(function (this_user) { this_user.parentElement.parentElement.parentElement.style.backgroundColor = difficulty_colors[enemy_difficulty['ID_' + userID]]; this_user.value = difficulty; }); } localStorage.setItem('torn_enemy_difficulty', JSON.stringify(enemy_difficulty)); }); } if (enemy_difficulty['ID_' + userID]) { enemy_LI.querySelector('.wb_difficulty_INPUT').value = enemy_difficulty['ID_' + userID]; enemy_LI.style.backgroundColor = difficulty_colors[enemy_difficulty['ID_' + userID]]; } if (status === 'Okay') target_TOTALS.ok += 1; var hide = !filters.fed && status === 'Federal' || !filters.traveling && status === 'Traveling' || !filters.online && online_status === 'Online' || !filters.idle && online_status === 'Idle' || !filters.offline && online_status === 'Offline' || filters.hosp && (filters.hosp_time * 60 < hosp_time || filters.hosp_time * 60 < jail_time) || filters.level && (filters.level_min > level || filters.level_max < level); enemy_LI.style.display = hide ? 'none' : 'list-item'; if (enemy_LI.style.display === 'none') target_TOTALS.hidden += 1; }); faction_totals[factionID].total = target_TOTALS.total; faction_totals[factionID].ok = target_TOTALS.ok; faction_totals[factionID].hidden = target_TOTALS.total - target_TOTALS.hidden; var warbase_totals = count_enemies(faction_totals); console.log(warbase_totals); _to_array(document.querySelectorAll('.wbTotals')).forEach(function (totals_span) { var totals_controls = totals_span.className.split('wb_')[1]; if (totals_controls === 'counted') totals_span.textContent = Object.keys(faction_totals).length + ' / ' + totals_span.textContent.split('/')[1];else totals_span.textContent = warbase_totals[totals_controls] + ' / ' + warbase_totals.total; }); }; var observer = new MutationObserver(function (mutations) { var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { for (var _iterator2 = mutations[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var mutation = _step2.value; var _iteratorNormalCompletion3 = true; var _didIteratorError3 = false; var _iteratorError3 = undefined; try { for (var _iterator3 = mutation.addedNodes[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { var node = _step3.value; if (node.className && node.className === 'faction-respect-wars-wp' && !document.querySelector('#wb_filter_wrap')) { (function () { faction_nodes = {}; faction_totals = {}; var faction_main_wrap = document.querySelector('#faction-main'); var respect_wars_wrap = document.querySelector('#faction-main .faction-respect-wars-wp'); var wars_UL = respect_wars_wrap.querySelector('.f-war-list'); var territory_wrap = document.querySelector('#faction-wars-wp'); var fac_count_total = 0; _to_array(respect_wars_wrap.querySelector('.f-war-list').children).forEach(function (faction_tab) { if (faction_tab.className !== 'inactive' && faction_tab.className !== 'clear') fac_count_total += 1; }); //Filter DIV------------------------------------------------------------------------------------------------------------------------------------- var filter_DIV = document.createElement('DIV'); filter_DIV.id = 'wb_filter_wrap'; filter_DIV.innerHTML = '<div class="title-black m-top10 ' + (filters.filters_collapse ? 'border-round' : 'top-round active') + '">\n <div class="arrow-wrap">\n <i class="accordion-header-arrow right"></i>\n </div>\n War Base Filters\n </div>\n <div class="cont-gray map-wrap bottom-round " id="warbase_filters">\n <div class="wb_content_left">\n <div class="filter-row">\n <div class="filter-title">Show</div>\n <div class="filter-content">\n <div class="filter-row">\n <span><input type="checkbox" class="wbFilter wb_fed">Federal</span>\n <span><input type="checkbox" class="wbFilter wb_traveling">Traveling</span>\n </div>\n <div class="filter-row">\n <span><input type="checkbox" class="wbFilter wb_online">Online</span>\n <span><input type="checkbox" class="wbFilter wb_idle">Idle</span>\n <span><input type="checkbox" class="wbFilter wb_offline">Offline</span>\n </div>\n <span></span>\n <span class="filter-row"><input type="checkbox" class="wbFilter wb_hosp">Hosp/Jail time < <input type="number" class="wbFilter wb_hosp_time" min="0"> minutes</span>\n <span class="filter-row"><input type="checkbox" class="wbFilter wb_level">Level<input type="number" min="0" max="100" class="wbFilter wb_level_min">to<input type="number" min="0" max="100" class="wbFilter wb_level_max"></span>\n </div>\n </div>\n </div>\n <div class="wb_content_middle">\n <div class="filter_row">\n <div class="wbTotals_col_left">\n <span class="filter-row wbTotals_title">Factions Loaded: </span>\n <span class="filter-row wbTotals_title">Enemies Filtered: </span>\n <span class="filter-row wbTotals_title">Enemies Okay: </span>\n </div>\n <div class="wbTotals_col_right">\n <span class="filter-row wbTotals wb_counted">0 / ' + fac_count_total + '</span>\n <span class="filter-row wbTotals wb_hidden">...</span>\n <span class="filter-row wbTotals wb_ok">...</span>\n </div>\n </div>\n </div>\n <div class="wb_content_right">\n <span class="filter-row">Extended Warbase<input type="checkbox" class="wbFilter wb_extended"></span>\n <span class="filter-row">Territories on Top<input type="checkbox" class="wbFilter wb_territories_inverted"></span>\n <span class="filter-row">Color Blind Mode<input type="checkbox" class="wbFilter wb_colorblind"></span>\n </div>\n </div>'; faction_main_wrap.insertBefore(filter_DIV, respect_wars_wrap); //Show/Hide button for respect wars------------------------------------------------------------------------------------------------------------------ var banner = respect_wars_wrap.querySelector('.f-msg'); wars_UL.style.display = 'block'; banner.onclick = function () { return wars_UL.classList.toggle('wb_hide'); }; //War Base Extended DIV------------------------------------------------------------------------------------------------------------------------------ var warlist_DIV = document.createElement('DIV'); warlist_DIV.id = 'warbase_results'; warlist_DIV.innerHTML = '<div class="title-black m-top10 top-round">War Base Extended</div>\n <div class="cont-gray map-wrap bottom-round">\n <div class="wbResults_placeholder">Updates on faction tab clicks...</div>\n <ul id="wars_extended" class="f-war-list war-old">\n <li class="clear"></li>\n </ul>\n </div>'; faction_main_wrap.insertBefore(warlist_DIV, territory_wrap); //Event Listeners for Filter DIV---------------------------------------------------------------------------------------------------------------------- var wb_filter_title = document.querySelector('#wb_filter_wrap .title-black'); var wb_filter_content = document.querySelector('#warbase_filters'); filters.filters_collapse ? wb_filter_content.style.display = 'none' : wb_filter_content.style.display = 'flex'; wb_filter_title.addEventListener('click', function (event) { if (filters.filters_collapse) { wb_filter_title.classList.add('top-round'); wb_filter_title.classList.add('active'); wb_filter_title.classList.remove('border-round'); wb_filter_content.style.display = 'flex'; filters.filters_collapse = false; } else { wb_filter_title.classList.remove('top-round'); wb_filter_title.classList.remove('active'); wb_filter_title.classList.add('border-round'); wb_filter_content.style.display = 'none'; filters.filters_collapse = true; } storeFilters(); }); var filter_inputs = document.querySelectorAll('.wbFilter'); _to_array(filter_inputs).forEach(function (wbFilter) { var filter_controls = wbFilter.className.split('wb_')[1]; switch (wbFilter.type) { case 'checkbox': wbFilter.checked = filters[filter_controls]; wbFilter.addEventListener('change', function (event) { filters[filter_controls] = event.target.checked; storeFilters(); switch (filter_controls) { case 'extended': if (event.target.checked) { document.querySelector('#warbase_results').style.display = 'block'; wars_UL.classList.add('wb_extended'); } else { document.querySelector('#warbase_results').style.display = 'none'; wars_UL.classList.remove('wb_extended'); } break; case 'territories_inverted': if (event.target.checked) faction_main_wrap.insertBefore(territory_wrap, respect_wars_wrap);else { faction_main_wrap.insertBefore(respect_wars_wrap, territory_wrap); faction_main_wrap.insertBefore(document.querySelector('#warbase_results'), territory_wrap); } break; case 'colorblind': break; default: if (document.querySelector('#faction-main .faction-respect-wars-wp .descriptions')) { run_filters(document.querySelector('#faction-main .faction-respect-wars-wp .descriptions')); } if (Object.keys(faction_nodes).length > 0) { var _iteratorNormalCompletion4 = true; var _didIteratorError4 = false; var _iteratorError4 = undefined; try { for (var _iterator4 = Object.keys(faction_nodes)[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { var facID = _step4.value; run_filters(faction_nodes[facID]); } } catch (err) { _didIteratorError4 = true; _iteratorError4 = err; } finally { try { if (!_iteratorNormalCompletion4 && _iterator4.return) { _iterator4.return(); } } finally { if (_didIteratorError4) { throw _iteratorError4; } } } } break; } }); break; case 'number': wbFilter.value = filters[filter_controls]; wbFilter.addEventListener('change', function (event) { filters[filter_controls] = event.target.value; storeFilters(); switch (filter_controls) { default: if (document.querySelector('#faction-main .faction-respect-wars-wp .descriptions')) { run_filters(document.querySelector('#faction-main .faction-respect-wars-wp .descriptions')); } if (Object.keys(faction_nodes).length > 0) { var _iteratorNormalCompletion5 = true; var _didIteratorError5 = false; var _iteratorError5 = undefined; try { for (var _iterator5 = Object.keys(faction_nodes)[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { var facID = _step5.value; run_filters(faction_nodes[facID]); } } catch (err) { _didIteratorError5 = true; _iteratorError5 = err; } finally { try { if (!_iteratorNormalCompletion5 && _iterator5.return) { _iterator5.return(); } } finally { if (_didIteratorError5) { throw _iteratorError5; } } } } break; } }); break; default: break; } }); //Set Extended and Territories inverted-------------------------------------------------------------------------------------------------------------------- if (filters.extended) { warlist_DIV.style.display = 'block'; wars_UL.classList.add('wb_extended'); } if (filters.territories_inverted) faction_main_wrap.insertBefore(territory_wrap, respect_wars_wrap); })(); } //Observing for tabs opening-------------------------------------------------------------------------------------------------------------------------------- if (node.className && node.className === 'descriptions') { if (node.querySelector('.member-list')) { var factionID = node.querySelector('.t-blue').href.split('&')[1].replace('=', ''); if (animation_enabled) { var faction_link = node.parentElement.querySelector('.act .name .t-blue'); if (faction_link.className.includes('animation_colorfade')) { faction_link.classList.remove('animation_colorfade'); void faction_link.offsetWidth; } faction_link.classList.add('animation_colorfade'); faction_link.addEventListener("animationend", function (anim) { return anim.target.classList.remove('animation_colorfade'); }); if (filters['colorblind']) { var chain_icon = node.parentElement.querySelector('.act .f-chain'); if (chain_icon.className.includes('animation_colorblind')) { chain_icon.classList.remove('animation_colorblind'); void chain_icon.offsetWidth; } chain_icon.classList.add('animation_colorblind'); chain_icon.addEventListener("animationend", function (anim) { return anim.target.classList.remove('animation_colorblind'); }); } } //clone node for extended war base var wars_extended = document.querySelector('#wars_extended'); faction_nodes[factionID] = node.cloneNode(true); faction_nodes[factionID].id = factionID; faction_nodes[factionID].className = 'descriptions-new'; run_filters(faction_nodes[factionID]); if (!document.querySelector('#' + factionID)) { wars_extended.parentElement.querySelector('.wbResults_placeholder').style.display = 'none'; wars_extended.insertBefore(faction_nodes[factionID], wars_extended.lastElementChild); } else { wars_extended.replaceChild(faction_nodes[factionID], document.querySelector('#' + factionID)); } run_filters(node); } } } } catch (err) { _didIteratorError3 = true; _iteratorError3 = err; } finally { try { if (!_iteratorNormalCompletion3 && _iterator3.return) { _iterator3.return(); } } finally { if (_didIteratorError3) { throw _iteratorError3; } } } } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } }); var wrapper = document.querySelector('#faction-main'); observer.observe(wrapper, { subtree: true, childList: true }); })()
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址