您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
6/11/2024, 1:26:23 AM
// ==UserScript== // @name DayZ Map Improvement // @namespace https://azzurite.tv // @match https://dayz.xam.nu/* // @run-at document-start // @grant none // @version 1.3.4 // @author Azzurite // @license GPLv3 // @description 6/11/2024, 1:26:23 AM // ==/UserScript== (() => { function makeHuntingMoreVisible() { if (this.options.iconUrl === `https://dayz.xam.nu/js/../images/b8fe30b7.webp`) { this.options.iconUrl = `https://images.azzurite.tv/uploads/original/d3/0f/6a50614db7df56f32d5aa2840268.webp`; } else if (this.options?.iconUrl === `https://dayz.xam.nu/js/../images/a92e2f53.webp`) { this.options.iconUrl = `https://images.azzurite.tv/uploads/original/92/8b/e706a502ab0931c2338883333633.webp`; } } Object.defineProperty(window, `L`, { set(obj) { this.storedL = obj; obj.Map.addInitHook(function() { // addInitHook binds `this` window.map = this; }); obj.Icon.addInitHook(makeHuntingMoreVisible); }, get() { return this.storedL; } }) function anyMarkerActive() { return document.querySelector(`.filters > button`).dataset[`active`] === `1`; } function toggle(type, subtype) { const btn = document.querySelector(`[data-type="${type}"][data-weight="${subtype}"]`); btn?.click(); } function toggleTrees() { [`pear`, `apple`, `plum`].map(tree => toggle(`food`, tree)); } function toggleSecondaryPlayerSpawns() { [`playerspawnhop`, `playerspawnsafe`, `playerspawntravel`].map(spawn => toggle(`misc`, spawn)); } function toggleCarSpawns() { [`vehicleoffroadhatchback`, `vehiclehatchback02`, `vehicleoffroad02`, `vehicletruck01`, `vehicleciviliansedan`, `vehiclesedan02`].map(car => toggle(`vehicle`, car)); } function toggleAll() { document.querySelector(`.filters > button`).click(); } function getButtonList() { return document.querySelector(`.filters`).parentNode; } function nicerToggleAll() { toggleAll(); if (anyMarkerActive()) { toggleTrees(); toggle(`animal`, `all`); toggle(`area`, `dynamiccontamination`); toggle(`misc`, `infected`); toggleSecondaryPlayerSpawns(); toggleCarSpawns(); } } function replaceFilterAllButton() { const li = document.createElement(`li`); li.classList.add(`azzu-all`); const btn = document.querySelector(`[data-type="all"][data-weight="all"]`).cloneNode(true); li.append(btn); btn.addEventListener(`click`, () => { stopHighlighters(); nicerToggleAll(); if (anyMarkerActive()) { document.querySelector(`.azzu-all > button`).dataset.active = `1`; } else { document.querySelector(`.azzu-all > button`).dataset.active = `0`; } }); getButtonList().prepend(li); document.querySelector(`.filters`).style.display = `none`; } function createTextButton(text) { const li = document.createElement(`li`); li.classList.add(`azzu-highlight`); const btn = document.createElement(`button`); btn.style.padding = `0 10px`; btn.style.width = `inherit`; btn.innerHTML = text; li.append(btn); getButtonList().prepend(li); return btn; } const highlighters = {}; function stopHighlighters() { for (const [key, {timeout, onStopHighlight}] of Object.entries(highlighters)) { if (timeout) { onStopHighlight(); clearTimeout(timeout); highlighters[key].timeout = false; } } } function isHightlighterRunning(id) { return !!highlighters[id].timeout; } function addBlinkingBehavior(btn, id, highlight, onStopHighlight = () => {}, onStartHighlight = () => {}) { highlighters[id] = { timeout: false, onStopHighlight }; let curBlink = false; btn.addEventListener(`contextmenu`, (ev) => { ev.preventDefault(); const running = isHightlighterRunning(id); stopHighlighters(); if (running) { return; } onStartHighlight(); const doHighlight = () => { if (curBlink) { console.log(`highlight off`); highlight(); highlighters[id].timeout = setTimeout(doHighlight, 100); } else { console.log(`highlight on`); highlight(); highlighters[id].timeout = setTimeout(doHighlight, 600); } curBlink = !curBlink; } highlighters[id].timeout = setTimeout(doHighlight, 0); }); btn.addEventListener(`click`, (ev) => { if (!ev.isTrusted) { return; } const running = isHightlighterRunning(id); stopHighlighters(); }) } function createHighlightButton(text, highlight) { const btn = createTextButton(text); btn.classList.add(`highlighter`); btn.classList.add(text); btn.dataset.active = `0`; btn.addEventListener(`click`, (ev) => { if (btn.dataset.active === `1`) { toggleAll(); nicerToggleAll(); btn.dataset.active = `0`; } else { if (anyMarkerActive()) { toggleAll(); } highlight(); btn.dataset.active = `1`; } }); addBlinkingBehavior(btn, text, highlight); } function addWeaponAmmoHighlight() { createHighlightButton(`HighValue`, () => { toggle(`medic`, `all`); toggle(`hunting`, `high`); toggle(`hunting`, `medium`); toggle(`hunting`, `low`); toggle(`hunting`, `store`); toggle(`police`, `all`); toggle(`military`, `all`); }); } function addShowCarSpawns() { createHighlightButton(`Vehicles`, toggleCarSpawns); } function addBlinkingToAllButtons() { for (const btn of [...document.querySelectorAll(`[data-weight][data-type]:not([data-type="all"])`)]) { const {type, weight} = btn.dataset; const id = `${type}-${weight}`; btn.classList.add(`highlighter`); btn.classList.add(id); addBlinkingBehavior(btn, id, () => btn.click(), () => btn.click()); } } function init() { if (!document.querySelector(`.filters`)) { setTimeout(init, 100); return; } replaceFilterAllButton(); addBlinkingToAllButtons(); addWeaponAmmoHighlight(); addShowCarSpawns(); } setTimeout(init, 100); })();