您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
try to take over the world!
// ==UserScript== // @name ATCAddon for GEOFS // @namespace http://tampermonkey.net/ // @version 2024-02-13 // @description try to take over the world! // @author You // @match https://www.geo-fs.com/* // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== // @grant none // @license MIT // ==/UserScript== const sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay)) if(window.location.pathname === "/pages/map.php") { window.ATCADDON = {}; window.ATCADDON.chat = []; function toElement(string) { var div = document.createElement('div'); div.innerHTML = string.trim(); return div.firstChild; } async function updateATC() { var b = Date.now(); multiplayer.lastRequestTime = b; var g = { acid: geofs.userRecord.id, sid: geofs.userRecord.sessionId, id: multiplayer.myId, ac: 1, co: [33.936952715460784,-118.38498159830658,45.20037842951751,141.2313037411972,-15,0], ve: [0,-1.4210854715202004e-17,9.835858350015769e-11,0,0,0], st: {gr: true, as: 0}, ti: multiplayer.getServerTime(), m: multiplayer.chatMessage, ci: multiplayer.chatMessageId }; multiplayer.chatMessage && (multiplayer.chatMessage = ""); multiplayer.lastRequest = await geofs.ajax.post(geofs.multiplayerHost + "/update", g, multiplayer.updateCallback, multiplayer.errorCallback) window.ATCADDON.chat = [...ATCADDON.chat, ...multiplayer.lastRequest.chatMessages]; multiplayer.lastRequest.chatMessages.forEach(e => { const box = document.getElementById("atc-box"); var checkmsg = decodeURIComponent(e.msg).match(/(?<=\[)(?:1[1-3]\d\.\d{1,3})(?=\])/); if(e.acid == geofs.userRecord.id){ box.insertAdjacentElement("afterbegin", toElement('<div class="chat-msg-self" style="color: #06F;">'+`<b>${ decodeURIComponent(e.cs) }:</b> ${ decodeURIComponent(e.msg).replace(/(?:\[1[1-3]\d\.\d{1,3}\])/g, "") }`+'<br></div>')); } else if(checkmsg && checkmsg[0]==window.ATCADDON.frequency) { box.insertAdjacentElement("afterbegin", toElement('<div class="chat-msg-self" style="color: #F70;">'+`<b>${ decodeURIComponent(e.cs) }:</b> ${ decodeURIComponent(e.msg).replace(/(?:\[1[1-3]\d\.\d{1,3}\])/g, "") }`+'<br></div>')); } else if(e.acid !=898455 && (document.querySelector("#atc-only").checked)==false) { box.insertAdjacentElement("afterbegin", toElement('<div class="chat-msg-other">'+`<b>${ decodeURIComponent(e.cs) }:</b> ${ decodeURIComponent(e.msg).replace(/(?:\[1[1-3]\d\.\d{1,3}\])/g, "") }`+'<br></div>')); } }); } async function runUpdates() { while(true) { await updateATC(); await sleep(1000); } } function initATCADDON() { geofs.map.toggleATCMode(); const ATCBox = document.createElement("div"); const ATCForm = document.createElement("form"); const ATCInput = document.createElement("input"); const ATCFreq = document.createElement("input"); const ATCOnly = document.createElement("div"); ATCBox.setAttribute("id","atc-box"); ATCBox.setAttribute("style", ` position: absolute; top: 170px; left: 10px; z-index: 1000; font-weight: normal; overflow: hidden; text-align: left; color: #DDD; font-family: Arial, sans-serif; font-size: 12px; padding: 0px 0px; padding-left: 5px; line-height: 29px; background-color: #0000007F; border: 1px solid rgb(169, 187, 223); width: 40%; height: 75%; box-shadow: 0px 5px 30px #666; `); ATCForm.setAttribute("id","atc-form"); ATCInput.setAttribute("id","atc-input"); ATCInput.setAttribute("style", ` position: absolute; top: 130px; left: 10px; z-index: 1000; font-weight: bold; overflow: hidden; text-align: left; color: #DDD; font-family: Arial, sans-serif; font-size: 12px; padding: 0px 0px; padding-left: 5px; line-height: 29px; background-color: #0000007F; border: 1px solid rgb(169, 187, 223); width: 40%; height: 30px; box-shadow: 0px 5px 30px #666; `); ATCInput.setAttribute("placeholder", "Send Message..."); ATCFreq.setAttribute("id","atc-frequency"); ATCFreq.setAttribute("style", ` position: absolute; top: 90px; left: 50px; z-index: 1000; font-weight: bold; overflow: hidden; text-align: left; color: #DDD; font-family: Arial, sans-serif; font-size: 12px; padding: 0px 0px; padding-left: 5px; line-height: 29px; background-color: #0000007F; border: 1px solid rgb(169, 187, 223); width: 15%; height: 30px; box-shadow: 0px 5px 30px #666; `); ATCFreq.setAttribute("placeholder", "Frequency"); ATCFreq.setAttribute("type", "number"); ATCFreq.setAttribute("min", "118"); ATCFreq.setAttribute("max", "137"); ATCFreq.setAttribute("step", "0.001"); ATCOnly.setAttribute("style", ` position: absolute; top: 90px; left: 10px; z-index: 1000; font-weight: bold; overflow: hidden; text-align: left; color: #DDD; font-family: Arial, sans-serif; font-size: 12px; padding: 0px 0px; line-height: 29px; background-color: #0000007F; border: 1px solid rgb(169, 187, 223); width: 30px; height: 30px; box-shadow: 0px 5px 30px #666; `); ATCOnly.innerHTML = `<input id="atc-only" type="checkbox" style="width:75%;height:75%;position:relative;">`; ATCForm.appendChild(ATCInput); document.body.appendChild(ATCBox); document.body.appendChild(ATCForm); document.body.appendChild(ATCFreq); document.body.appendChild(ATCOnly); ATCForm.addEventListener("submit", (e)=>{ e.preventDefault(); const input = document.getElementById("atc-input"); const frequency = document.getElementById("atc-frequency"); window.ATCADDON.frequency = frequency.value; if(window.ATCADDON.frequency && /(?:1[1-3]\d\.\d{1,3})/.test(window.ATCADDON.frequency)) { multiplayer.setChatMessage(input.value + ` [${window.ATCADDON.frequency}]`); } else { multiplayer.setChatMessage(input.value); } input.value = ""; }); runUpdates(); } initATCADDON(); } else if(window.location.pathname === "/geofs.php") { const topbar = document.querySelector(".geofs-ui-top"); const frequency = document.createElement("div"); frequency.setAttribute("class", "atcaddon-frequency"); frequency.setAttribute("style", ` opacity: 0.5; margin-top: 5px; white-space: nowrap; display: flex; `); frequency.innerHTML = ` <input id="Frequency" type="number" min="118" max="137" step="0.001" style="left: 10px; top: 0px; border: 1px solid #888;background-color: #000;box-shadow: 0px 0px 5px #000;cursor: pointer !important;width: 90px;height: 25px;border-radius: 15px;outline: none;line-height: 27px;white-space: nowrap; color: white; padding: 5px, 0px;" placeholder="Input Frequency"> `; topbar.appendChild(frequency); const stylesheet = document.createElement("style"); stylesheet.innerHTML = ` .geofs-chat-message .label.atc { color: rgb(255,128,0); cursor: auto; } `; document.head.appendChild(stylesheet); (async()=>{ await sleep(5000); ui.chat.publish = function(a) { var b = decodeURIComponent(a.msg); var checkmsg = b.match(/(?<=\[)(?:1[1-3]\d\.\d{1,3})(?=\])/); var check = (checkmsg && checkmsg[0]==`${document.querySelector("#Frequency").value}`); if (geofs.preferences.chat && (check || !document.querySelector("#Frequency").value)) { ui.chat.$container = ui.chat.$container || $(".geofs-chat-messages"); var c = ""; check && (c = "atc") b=b.replace(/(?:\[1[1-3]\d\.\d{1,3}\])/g, "") a.acid == geofs.userRecord.id && (c = "myself"); ui.chat.$container.prepend('<div class="geofs-chat-message ' + a.cls + '"><b class="label ' + c + '" data-player="' + a.uid + '" acid="' + a.acid + '" callsign="' + a.cs + '">' + a.cs + ":</b> " + b + "</div>"); ui.chat.$container.find(".geofs-chat-message").each(function(d, e) { $(e).css("opacity", (ui.chat.maxNumberMessages - d) / ui.chat.maxNumberMessages) }).eq(ui.chat.maxNumberMessages).remove() } } multiplayer.setChatMessage = function(a) { const freq = document.querySelector("#Frequency").value; if(freq && /(?:1[1-3]\d\.\d{1,3})/.test(freq)) { multiplayer.chatMessage = a + ` [${freq}]`; } else { multiplayer.chatMessage = a; } } })(); }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址