G1h - generals.io 1v1 helper

1v1、custotm辅助脚本,持续更新中

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

 // ==UserScript==
 // @name         G1h - generals.io 1v1 helper
 // @namespace    http://tampermonkey.net/
// @version   2.1.0
 // @description  1v1、custotm辅助脚本,持续更新中
 // @author       itray25
 // @match        *://generals.io/*
 // @icon         https://www.google.com/s2/favicons?sz=64&domain=generals.io
 // @license MIT
 // ==/UserScript==

 (function() {
   'use strict';
 let color;
 let color_dict={"lightblue":"#4363d8","red":"red"}
 let first=1
 let tileObserver = new MutationObserver(function (mutations) {
 mutations.forEach(function (mutation) {
   window.setTimeout(function () {
     var target=mutation.target
     //console.log([target.classList.length,target.classList])
     if(target.classList[1]=="general" && (target.classList[0]==color?false : true)){
       let sheet = document.styleSheets[1];
       if(first==1){
         sheet.deleteRule(0);
        sheet.insertRule("#null {background-color:"+color_dict[target.classList[0]]+" !important;background-image: url(\"\/\/generals.io\/crown.png\") !important;background-repeat: no-repeat !important;background-size: 100% 100% !important;border-color:cyan !important}",0);
         first=0
         target.id="gen"
       }
 else{
   target.id="gen"}

       //console.log(target)
     }
   },1000)


 });
 });
 let gameObserver = new MutationObserver(function (mutations) {
 mutations.forEach(function (mutation) {
   if (
     mutation.addedNodes.length > 0 &&
     mutation.addedNodes[0].id === "game-page"
   ) {
     tileObserver.disconnect();
     setTimeout(function () {}, 400);
     setTimeout(function () {
       console.log("loading map");

       let map = document.getElementById("gameMap");
       let tiles = map.getElementsByTagName("td");
       let col = map.getElementsByTagName("tr").length;
       let row=tiles.length/col
       let d_map = [];
       let sheet = document.styleSheets[1];
     let player_sum=document.getElementById("game-leaderboard").childNodes[0].childNodes.length
     let mode;
     let main_dist;
     if(player_sum==3){
        mode="solo"
        main_dist=15
      }else if(player_sum==9){
        mode = "ffa"
        main_dist=10
      }else {
        mode="teams"
        main_dist=10
      }
       sheet.insertRule(".imp {background-color:#006c66 !important}",0);
       //gen_index=tiles.indexOf(map.getElementsByClassName("general"))
       //console.log("gen_index")
       for (var j = 0; j < col; j++) {
         d_map.push([]);
       }
       var gen_row, gen_col;
       console.log(d_map);
       //1st loop, binarify map[effect not known]
       for (var i = 0; i < tiles.length; i++) {
         let target = tiles[i];
         let classN = target.classList;
         let t_col = Math.trunc((i * col) / tiles.length);
         let t_row = i % (tiles.length / col);
         target.id = t_col + " " + t_row;
         //console.log(classN);
         if (classN[1] == "general") {
           d_map[t_col].push(2);
           gen_row = t_row;
           gen_col = t_col;
           color = classN[0]
         } else if (classN[1] == "obstacle") {
           d_map[t_col].push(1);
         } else {
           d_map[t_col].push(0);
         }

         let config = { attributes: true, childList: false, characterData: true };
         tileObserver.observe(target, config);
       }
       console.log(d_map);
       // 2nd loop, locate possible gen region
       for (i = 0; i < tiles.length; i++) {
         let target = tiles[i];
         let t_col = parseInt(target.id.split(" ")[0]);
         let t_row = parseInt(target.id.split(" ")[1]);
         //designed for 1v1
         if (
          Math.abs(t_col - gen_col) + Math.abs(t_row - gen_row) >= main_dist &&
           target.classList[1] != "obstacle"
            && !((t_col==0 ? true : t_col!=0 ? d_map[t_col-1][t_row]!=0 :true)&&
            (t_col==col-1 ? true : t_col!=col-1 ? d_map[t_col+1][t_row]!=0 :true)&&
            (t_row==0 ? true : t_row!=0 ? d_map[t_col][t_row-1]!=0 :true)&&
            (t_row==row-1 ? true : t_row!=row-1 ? d_map[t_col][t_row+1]!=0 :true))
         ) {
           target.classList.add("imp");
         }
       }
     }, 100);
   }
 });
 });
 let gameConfig = { attributes: true, childList: true, characterData: true };
 let gameTarget = document.getElementById("react-container").children[0];
 gameObserver.observe(gameTarget, gameConfig);
 //with regards to O.O
 })();