Neopets: Neocola machine selector

Selects the Neotoken machine values that you want

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Neopets: Neocola machine selector
// @author       Tombaugh Regio
// @version      1.1
// @description  Selects the Neotoken machine values that you want
// @namespace    https://greasyfork.org/users/780470
// @include      *://www.neopets.com/moon/neocola2.phtml
// @license      MIT
// @grant        none
// ==/UserScript==

//==============================

const VALUE = {

    //Which Token do you use?
    token: "rEd",

    //Which NeoCola flavor would you like?
    flavor: "dehydrated H20",

    //How many times do you press the red button?
    press: 3
}

//==============================

function getToken(){ 
  const YOUR_TOKEN = [...document.querySelector(".content").querySelectorAll("img")]
  .slice(1)
  .reduce((a, b) => [...a, b.src.toUpperCase().match(/(?<=TOKEN_)(\w+)/)[0].trim()], [])
  .reduce((a, b, i, arr) => {
    const matchingToken = arr.filter(token => token === VALUE.token.toUpperCase().trim())
    if (matchingToken.length === 0) matchingToken.push(arr[0])
    return matchingToken
  })[0]
  
  const tokenValue = [
    {name: "BLUE", number: 24538},
    {name: "GREEN", number: 24539},
    {name: "RED", number: 24540}
  ].filter(a => a.name === YOUR_TOKEN)[0].number
  
  return {name: "token_id", value: tokenValue}
}

function getFlavor(){
  function getFlavorName() {
    const selected = VALUE.flavor.toUpperCase()
    
    switch(true) {
      //Dr. Slother
      case /SL/.test(selected) : return 0

      //Diet Doom
      case /ET/.test(selected) : return 1

      //Na'cho Cola
      case /CH/.test(selected) : return 2

      //Smite
      case /SM/.test(selected) : return 3

      //Alt-Tab
      case /LT/.test(selected) : return 4

      //Minion Maid
      case /MA/.test(selected) : return 5

      //Mountain Poo
      case /NT/.test(selected) : return 6

      //Dehydrated H20
      case /H2/.test(selected) : return 7
        
      default : return 0
    }
  }
  
  return {name: "neocola_flavor", value: getFlavorName()}
}

function getPress() {
  const selected = parseInt(VALUE.press)
  const times = [...document.querySelectorAll('select[name="red_button"] option')]
              .filter(a => a.value.length > 0)
              .reduce((a, b, i) => isNaN(selected) ? [0] : i > 0 && parseInt(b.value) >= selected ? [...a, b.value] : a, [])[0]

  return {name: "red_button", value: times}
}

function selectOption({ name, value }) {
  document.querySelector(`.content form select[name="${name}"]`).value = value
}

if (!/You don't have any NeoCola Tokens/.test(document.querySelector(".content").textContent)) {
  const [ TOKEN, FLAVOR, PRESS ] = [ getToken(), getFlavor(), getPress() ]

  selectOption(TOKEN)
  selectOption(FLAVOR)
  selectOption(PRESS)
}