您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Gets the markers_all json file and change user defined markers to be markable. By default, the only markers changed to markable are Ember Mora Chests.
当前为
// ==UserScript== // @name GI AppSample Map - More Markable Markers // @namespace http://tampermonkey.net/ // @version 1.1 // @description Gets the markers_all json file and change user defined markers to be markable. By default, the only markers changed to markable are Ember Mora Chests. // @author 2KRN4U // @match https://genshin-impact-map.appsample.com/ // @icon https://genshin-impact-map.appsample.com/favicon.ico // @grant none // @license MIT // ==/UserScript== (function () { 'use strict'; // List of markers to change const list = "o596"; // EDIT THIS LINE ONLY, seperate by comma. Example "o596, o317"; const targetFilenameStart = "markers_all"; // Replace with the start of the filename to match const keys = list.split(",").map(key => key.trim()); // Convert list to an array of trimmed keys const matchA = 2; // Value to match (1st number) const replaceA = 2; // Replacement value (1st number) const replaceB = 5; // Replacement value (2nd number) // Save references to the original XHR methods const originalOpen = XMLHttpRequest.prototype.open; const originalSend = XMLHttpRequest.prototype.send; // Override the open method XMLHttpRequest.prototype.open = function (method, url, async, user, password) { this._filename = url.split('/').pop(); // Extract the filename from the URL this._url = url; // Store the URL for later use originalOpen.apply(this, arguments); // Call the original open method }; // Override the send method XMLHttpRequest.prototype.send = function (body) { this.addEventListener('readystatechange', function () { // Only process requests if the filename matches the target prefix if ( this.readyState === 4 && this.status === 200 && this._filename.startsWith(targetFilenameStart) // Check if filename starts with the target string ) { try { let modifiedResponseText = this.responseText; // Apply replacements for each key in the list keys.forEach(key => { const searchPattern = new RegExp(`"${key}",${matchA},\\d,`, 'g'); // Match any digit for matchB const replacePattern = `"${key}",${replaceA},${replaceB},`; modifiedResponseText = modifiedResponseText.replace(searchPattern, replacePattern); }); // Overwrite the responseText property with the modified content Object.defineProperty(this, 'responseText', { value: modifiedResponseText, configurable: true, }); // Optional: Overwrite response (useful if response is accessed differently) Object.defineProperty(this, 'response', { value: modifiedResponseText, configurable: true, }); } catch (e) { console.error('Error modifying JSON response:', e); } } }); // Call the original send method originalSend.apply(this, arguments); }; })();