您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Load and Save maps from haxmaps just using an ID.
- // ==UserScript==
- // @name HaxBall Map Picker
- // @namespace https://gf.qytechs.cn/en/users/165127-hydrosaur
- // @version 3.0
- // @icon https://www.haxball.com/favicon.ico
- // @description Load and Save maps from haxmaps just using an ID.
- // @author -Electron-
- // @include https://www.haxball.com/FFuuq69i/__cache_static__/g/game.html
- // @supportURL https://www.reddit.com/message/compose/?to=-Electron-
- // @website https://redd.it/no-post-yet
- // @require https://code.jquery.com/jquery-latest.min.js
- // @grant none
- // ==/UserScript==
- (function() {
- 'use strict';
- let pickerPopupIsShown = false;
- let gamePageIsShown = false;
- let haxMap = 0;
- let favoritesListShown = false;
- if(!localStorage.getItem("saved_maps")){
- localStorage.setItem("saved_maps", "{}");
- }
- setInterval(function(){
- if($(".dialog.pick-stadium-view").length){
- if(!pickerPopupIsShown) showPicker();
- pickerPopupIsShown = true;
- } else {
- if(pickerPopupIsShown) hidePicker();
- pickerPopupIsShown = false;
- }
- if($("button[data-hook='leave-btn']").length){
- if(!gamePageIsShown) gamePageShown();
- gamePageIsShown = true;
- } else {
- if(gamePageIsShown) gamePageHidden();
- gamePageIsShown = false;
- }
- }, 250);
- function showPicker(){
- $(".dialog.pick-stadium-view h1").eq(0).append("<img class='loader' style='display: none' src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjEuMWMqnEsAAAIqSURBVDhPdVM9rCFRFB4FeaJQ0ChVEiT7si0iopBotbQUgqh0FKIVPxlvRSEhEXpR7q4NkQiVzXuLRCK6jUTjvWXunTt7zuyY4L39ki8zc+45537nZ7gP8Nnn8/HZbPalVCq9FYvFUygUegH7FzyTPf4DPbAeDocJY0y6RzweF3ieF91u95PiewM0/ABKcKugxMiAZGy5XNJarSbbD4cDA0VfwfcBAy+oA6VAIEC73S6Fm874zGQy1Gq1inhms9nYfr+XpWESl8uFSmRgXSyRSFCAqr1QKAhgl67p9/vFi0+v1zuD7ZHzer18Op0W7uuu1+v0PgEyGo2Sfr9Pm80mge8nDrtdrVb/KHEqOp3OOwUajUaaTCZ0t9tRSIQXLDkc1UcJyuUyNZvNcv0XRiIRqhxL6/UaEwhyglgsRsbjMcUyRFFE+WQ2m4mEEDYcDin2x26300sTEdgLvV5/5uDwp06nY3iDw+GgyWRS2G63ouKnApNiQuVTOp1OzGAwPHNarZa/lgmdVmVeYzQa0cVioSZuNBqv4F8CwihgjBiMNBqNTBCE25EAVqsVTaVSZD6f0+l0SoLB4G/w/wSUgXuuqoAxESVOxmazEWGR1IZaLJY3WKQavKvAVf7udDpJLpejMEJSqVSEdrtNW60WMZlMqkKF34A3q4x4wPUcDAb4M8klHI9HEZp6vVC4PKj23c90jUePx8ODkmcccT6ff4UF+gV2lKzW/A8c9xdfxQlApF7TUgAAAABJRU5ErkJggg==' />");
- rotateForEver($(".dialog.pick-stadium-view h1 .loader"));
- $(`<button data-hook="favorites">Favorites</button>`).insertAfter(".dialog.pick-stadium-view .buttons .file-btn");
- $(`<button data-hook="haxmapid">HaxMapID</button>`).insertAfter(".dialog.pick-stadium-view .buttons .file-btn");
- $(`<button data-hook="searchmaps">Search</button>`).insertAfter(".dialog.pick-stadium-view .buttons .file-btn");
- $("button[data-hook='haxmapid']").click(function(){
- let mapID = prompt("Map ID:");
- if(!isNaN(Number(mapID)) && mapID){
- changeStadium(mapID);
- } else {
- alert("Invalid Map ID")
- }
- });
- $("button[data-hook='searchmaps']").click(function(){
- let mapSearch = prompt("Map Search:");
- if(mapSearch){
- $(".dialog.pick-stadium-view .loader").css("display", "inline");
- fetch("https://streamlyne.stream:88/haxmaps/" + encodeURIComponent(mapSearch)).then(a => a.json()).then(json => {
- favoritesListShown = true;
- $(".dialog.pick-stadium-view .list.ps").empty();
- let savedMaps = json.maps;
- savedMaps.forEach((item, idx) => {
- $(".dialog.pick-stadium-view .list.ps").append(`<div class="elem" data-id="${item.id}">DLS:<b>${item.downloads}</b>|${item.name}</div>`);
- });
- $(".dialog.pick-stadium-view .list.ps .elem").click(function(){
- $(".selected").removeClass("selected");
- $(this).addClass("selected");
- $("button[data-hook='pick']").prop("disabled", false);
- });
- $("button[data-hook='pick']").click(function(){
- console.log("cliq");
- if($(".dialog.pick-stadium-view .list.ps .selected").length){
- if(!isNaN(Number($(".dialog.pick-stadium-view .list.ps .selected").attr("data-id")))){
- changeStadium($(".dialog.pick-stadium-view .list.ps .selected").attr("data-id"));
- }
- }
- });
- $(".dialog.pick-stadium-view .loader").hide();
- }).catch(function(){
- $(".dialog.pick-stadium-view .loader").hide();
- });
- }
- });
- $("button[data-hook='favorites']").click(function(){
- favoritesListShown = true;
- $(".dialog.pick-stadium-view .list.ps").empty();
- let savedMaps = JSON.parse(localStorage.getItem("saved_maps"));
- Object.keys(savedMaps).forEach((item, idx) => {
- $(".dialog.pick-stadium-view .list.ps").append(`<div class="elem" data-id="${savedMaps[item]}">${item}</div>`);
- });
- $(".dialog.pick-stadium-view .list.ps .elem").click(function(){
- $(".selected").removeClass("selected");
- $(this).addClass("selected");
- $("button[data-hook='pick']").prop("disabled", false);
- });
- $("button[data-hook='pick']").click(function(){
- console.log("cliq");
- if($(".dialog.pick-stadium-view .list.ps .selected").length){
- if(!isNaN(Number($(".dialog.pick-stadium-view .list.ps .selected").attr("data-id")))){
- changeStadium($(".dialog.pick-stadium-view .list.ps .selected").attr("data-id"));
- }
- }
- });
- });
- }
- function hidePicker(){
- favoritesListShown = false;
- }
- function gamePageShown(){
- if(!$("button[data-hook='addfavorites']").length){
- $(".settings").append("<button class='admin-only' data-hook='addfavorites' style='width: 100%'>Add Map To Favorites</button>");
- $("button[data-hook='addfavorites']").click(function(){
- if(haxMap){
- let saved_maps = JSON.parse(localStorage.getItem("saved_maps"));
- let savedMapIDs = Object.values(saved_maps);
- if(savedMapIDs.includes(Number(haxMap))){
- alert("You have already saved this map.");
- } else {
- saved_maps[$("label[data-hook='stadium-name']").text()] = Number(haxMap);
- localStorage.setItem("saved_maps", JSON.stringify(saved_maps));
- alert("Saved " + $("label[data-hook='stadium-name']").text());
- }
- } else {
- alert("You can only favorite maps that are uploaded to haxmaps.com");
- }
- });
- }
- }
- function gamePageHidden(){
- }
- $("button[data-hook='pick']").click(function(){
- haxMap = 0;
- })
- function searchForMaps(query){
- fetch("https://streamlyne.stream:88/proxy?link=http://haxmaps.com/hb/rpc").then(a => a.text()).then(text => {
- let listElems = $(text);
- console.log(Array.from(listElems))
- });
- }
- function linkToBlob(link){
- return new Promise(function(resolve, reject) {
- let xhr = new XMLHttpRequest();
- xhr.open("GET", link);
- xhr.responseType = "blob";//force the HTTP response, response-type header to be blob
- xhr.onload = function(){
- resolve(xhr.response);
- }
- xhr.send();
- });
- }
- function getHaxBallMapText(id){
- return new Promise(function(resolve, reject) {
- fetch("https://streamlyne.stream:88/proxy?link=http://haxmaps.com/dl/" + id).then(a => a.text()).then(function(text){
- resolve(text);
- });
- });
- }
- function changeStadium(id){
- getHaxBallMapText(id).then(text => {
- if(text.length > 2){
- changeStadiumFromText(text);
- haxMap = Number(id);
- } else {
- alert("Map ID out of range");
- }
- });
- }
- function rotateForEver($elem, rotator) {
- if (rotator === void(0)) {
- rotator = $({deg: 0});
- } else {
- rotator.get(0).deg = 0;
- }
- return rotator.animate(
- {deg: 360},
- {
- duration: 5000,
- easing: 'linear',
- step: function(now){
- $elem.css({transform: 'rotate(' + now + 'deg)'});
- },
- complete: function(){
- rotateForEver($elem, rotator);
- },
- }
- );
- }
- function changeStadiumFromText(text){
- const dT = new ClipboardEvent('').clipboardData || // Firefox < 62 workaround exploiting https://bugzilla.mozilla.org/show_bug.cgi?id=1422655
- new DataTransfer(); // specs compliant (as of March 2018 only Chrome)
- dT.items.add(new File([text], 'programmatically_created.hbs'));
- console.log(text);
- document.getElementById("stadfile").files = dT.files;
- }
- // Your code here...
- })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址