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.0
// @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 matchB = 0; // Value to match (2nd 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 = `"${key}",${matchA},${matchB},`;
const replacePattern = `"${key}",${replaceA},${replaceB},`;
// Replace all occurrences for the current key
modifiedResponseText = modifiedResponseText.replace(
new RegExp(searchPattern, 'g'), // Global search for the pattern
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);
};
})();