您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Automatically rotate through bonk icon colours/teams
- // ==UserScript==
- // @name Bonk.io Auto Colour Switching
- // @author Figurative Lag
- // @description Automatically rotate through bonk icon colours/teams
- // @match https://bonk.io/*
- // @version 1.9.8
- // @run-at document-idle
- // @grant none
- // @license Apache 2.0
- // @namespace https://greasyfork.org/en/scripts/455254-bonk-io-auto-colour-switching
- // ==/UserScript==
- // Index 0 is actually supposed to be Spectate, which we're not going to use
- // So, we have to add 1 to our index when submitting data to the web socket
- const coloursList = [
- "FFA",
- "Red",
- "Blue",
- "Green",
- "Yellow"
- ]
- const enabled = [
- true,
- true,
- true,
- true,
- true
- ]
- let currentColour = 0
- const RNG = (min, max) => Math.round(Math.random() * (max - min)) + min
- const getFrame = () => document.getElementById("maingameframe").contentWindow
- const getDoc = () => getFrame().document
- const getId = id => getDoc().getElementById(id)
- let websocket = null
- const originalSend = getFrame().WebSocket.prototype.send
- getFrame().WebSocket.prototype.send = function(args) {
- const invalidSocket = websocket == null || websocket.readState != websocket.OPEN
- const validURL = this.url.includes(".bonk.io/socket.io/?EIO=3&transport=websocket&sid=")
- if (validURL && invalidSocket)
- websocket = this
- originalSend.call(this, args)
- }
- const setColour = colour => {
- currentColour = colour
- const inCustomGame = getDoc().getElementsByClassName("newbonklobby_playerentry").length > 0
- // We have to add +1 because we removed "spectate" from index 0
- if (websocket && inCustomGame)
- websocket.send('42[6,{"targetTeam":' + (colour+1) + '}]')
- }
- let menu = document.getElementById("descriptioninner")
- menu.style.cssText = "background-color: black !important;"
- // Clear old screen
- Array.from(menu.children).forEach(el => el.remove())
- const createCheckbox = (colour, i) => {
- let id = `${colour}Checkbox`
- let label = document.createElement("label")
- label.innerHTML = colour
- label.htmlFor = id
- menu.appendChild(label)
- let checkbox = document.createElement("input")
- checkbox.type = "checkbox"
- checkbox.id = id
- checkbox.checked = true
- checkbox.onchange = function() {
- enabled[i] = this.checked
- }
- menu.appendChild(checkbox)
- menu.appendChild(document.createElement("br"))
- }
- const setCheckbox = (colour, value) => {
- let checkbox = document.getElementById(`${colour}Checkbox`)
- checkbox.checked = !value
- checkbox.click()
- }
- let h3 = document.createElement("h3")
- h3.innerHTML = "Automatic Colour (Team) Switching"
- h3.style.margin = 0
- menu.appendChild(h3)
- let p = document.createElement("p")
- p.innerHTML = "Made by Figurative Lag"
- p.style.margin = 0
- menu.appendChild(p)
- menu.appendChild(document.createElement("hr"))
- coloursList.forEach((colour, i) => {
- createCheckbox(colour, i)
- })
- let disable = document.createElement("input")
- disable.type = "button"
- disable.value = "Quick Disable"
- disable.style.marginTop = "0.5em"
- disable.onclick = () => {
- coloursList.forEach(colour => {
- setCheckbox(colour, false)
- })
- setCheckbox("FFA", true)
- }
- menu.appendChild(disable)
- let enable = document.createElement("input")
- enable.type = "button"
- enable.value = "Quick Enable"
- enable.onclick = () => {
- coloursList.forEach(colour => {
- setCheckbox(colour, true)
- })
- }
- menu.appendChild(enable)
- menu.appendChild(document.createElement("hr"))
- p = document.createElement("p")
- p.innerHTML = "<strong>Switch Interval Modification</strong><br>Warning: bonk.io will quickly rate limit you, making it switch even slower than before you reduced the delay. So, I recommend leaving it at 1000 ms for consistency."
- menu.appendChild(p)
- let intervalInput = document.createElement("input")
- intervalInput.type = "number"
- intervalInput.value = 1000
- intervalInput.placeholder = "Interval (ms)"
- menu.appendChild(intervalInput)
- let intervalSubmit = document.createElement("input")
- intervalSubmit.type = "button"
- intervalSubmit.value = "Submit"
- intervalSubmit.onclick = () => {
- clearInterval(interval)
- interval = setInterval(timeout, parseInt(intervalInput.value))
- }
- menu.appendChild(intervalSubmit)
- function timeout() {
- const listChecked = []
- for (let i = 0; i < enabled.length; i++) {
- if (enabled[i])
- listChecked.push(i)
- }
- if (listChecked.length == 0)
- return
- if (listChecked.length == 1 && currentColour == listChecked[0])
- return
- // Don't set the colour that is already set
- let colour = currentColour
- while (colour == currentColour) {
- colour = listChecked[RNG(0, listChecked.length-1)]
- }
- setColour(colour)
- }
- let interval = setInterval(timeout, 1000)