// ==UserScript==
// @name florr.io | Server Switcher Updated
// @namespace https://davidx.top/
// @version 2.5
// @description Shows current server you are in & Easily switch server, now supports Factory and Pyramid
// @author Furaken, updated maps by DavidX
// @license MIT
// @match https://florr.io/*
// @grant unsafeWindow
// @downloadURL https://update.greasyfork.icu/scripts/540538/florrio%20%7C%20Server%20Switcher%20Updated.user.js
// @updateURL https://update.greasyfork.icu/scripts/540538/florrio%20%7C%20Server%20Switcher%20Updated.meta.js
// ==/UserScript==
var totalServers = 9,
position = "-200px"
let url;
const nativeWebSocket = unsafeWindow.WebSocket;
unsafeWindow.WebSocket = function(...args) {
const socket = new nativeWebSocket(...args);
url = socket.url
return socket;
};
let cp6 = unsafeWindow.cp6
function updateServers() {
for (let i = 0; i < totalServers; i++) {
fetch(`https://api.n.m28.io/endpoint/florrio-map-${i}-green/findEach/`).then((response) => response.json()).then((data) => {
if (servers[matrixs[i]] == null) {
servers[matrixs[i]] = {
NA: {},
EU: {},
AS: {}
}
}
servers[matrixs[i]].NA[data.servers["vultr-miami"].id] = Math.floor(Date.now() / 1000)
servers[matrixs[i]].EU[data.servers["vultr-frankfurt"].id] = Math.floor(Date.now() / 1000)
servers[matrixs[i]].AS[data.servers["vultr-tokyo"].id] = Math.floor(Date.now() / 1000)
});
}
for (const [keyMatrix, valueMatrix] of Object.entries(servers)) {
for (const [keyServer, valueServer] of Object.entries(valueMatrix)) {
for (const [keyId, valueId] of Object.entries(valueServer)) {
if (Math.floor(Date.now() / 1000) - valueId > 5 * 60) delete servers[keyMatrix][keyServer][keyId]
}
}
}
}
var servers = {},
matrixs = ["Garden", "Desert", "Ocean", "Jungle", "Ant Hell", "Hel", "Sewers", "Factory", "Pyramid"]
updateServers()
setInterval(() => {
updateServers()
getServerId()
}, 5 * 1000)
var message = `Click on cp6 a server code to connect to that server.
Press
『 ${server} 』 | ${Object.keys(obj).map(x => `