Milovana RNG helper

none

Versão de: 29/12/2019. Veja: a última versão.

Você precisará instalar uma extensão como Tampermonkey, Greasemonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Userscripts para instalar este script.

Você precisará instalar uma extensão como o Tampermonkey para instalar este script.

Você precisará instalar um gerenciador de scripts de usuário para instalar este script.

(Eu já tenho um gerenciador de scripts de usuário, me deixe instalá-lo!)

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

(Eu já possuo um gerenciador de estilos de usuário, me deixar fazer a instalação!)

// ==UserScript==
// @name         Milovana RNG helper
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  none
// @author       Original -> BluNote / This -> (Modified) MrNumbel
// @match        https://milovana.com/webteases/showtease.php*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    //Build interface
    //Create & Append div
    var parent = document.getElementById("ci");
  	// Do nothing if the page already contains this script's content
  	if (document.getElementById("customWrapper") !== null) {
      exit;
    }
  	var hr1 = document.createElement("hr");
  	var hr2 = document.createElement("hr");
  	var hr3 = document.createElement("hr");
    var wrapper = document.createElement("div");
  	var containerDiv = document.createElement("div");
  	var openBtn = document.createElement("button");
    wrapper.id = "customWrapper";
		containerDiv.id = "containerDiv";
  	openBtn.id = "openBtn";
  	openBtn.textContent = "Open RNG tools";
    parent.appendChild(wrapper);
  	wrapper.appendChild(containerDiv);
  	wrapper.appendChild(openBtn);
  
  	// Inside containerDiv
  	var rngPageDiv = document.createElement("div");
  	var rngDiv = document.createElement("div");
  	var closeButtonDiv = document.createElement("div");
  	var pointTrackerDiv = document.createElement("div");
  	containerDiv.appendChild(rngPageDiv);
 		containerDiv.appendChild(hr1);
    containerDiv.appendChild(rngDiv);
  	containerDiv.appendChild(hr2);
  	containerDiv.appendChild(pointTrackerDiv);
  	containerDiv.appendChild(hr3);
    containerDiv.appendChild(closeButtonDiv);
  	
  
  	// Inside closeBtnDiv
  	var closeBtn = document.createElement("button");
  	closeBtn.textContent = "Close RNG tools";
   	closeButtonDiv.appendChild(closeBtn);
  
    //Creating Button
    var btn = document.createElement("input");
    btn.type = "button";
    btn.value = "Roll";
    btn.id = "rng_Button";
    btn.onclick = init;
  	// Append to wrapper
  	wrapper.appendChild(btn);
  
    // Creating Lottery Checkbox
    var check = document.createElement('input');
    check.type = "checkbox";
    check.id = "lotteryEnable";
  
    var label = document.createElement("Label");
    label.innerHTML = "Lottery Mode";
    label.setAttribute("for", "lotteryEnable");
  
  	// Creating Lottery Boxes and title
  	var pPage = document.createElement('p');
    var input1 = document.createElement('input');
    var input2 = document.createElement('input');
  	pPage.textContent = "Page RNG Config";
    input1.type = "number";
    input2.type = "number";
    input1.placeholder = "min";
    input2.placeholder = "max";
    input1.id = "minBox";
    input2.id = "maxBox";
  
    // Look for saved data from previous page
    var storedMin = localStorage.getItem('min');
    var storedMax = localStorage.getItem('max');
    var storedCheck = localStorage.getItem('check');
  	var storedPointsA = localStorage.getItem('pointsA');
  	var storedPointsB = localStorage.getItem('pointsB');
  
  	// Appending Lottery elements
  	rngPageDiv.appendChild(pPage);
    rngPageDiv.appendChild(input1);
    rngPageDiv.appendChild(input2);
    rngPageDiv.appendChild(document.createElement('br'));
    rngPageDiv.appendChild(check);
  	rngPageDiv.appendChild(label);
    
  
  	if (storedMin !== null) input1.value = storedMin;
    if (storedMax !== null) input2.value = storedMax;
    if (storedCheck !== null) {
        if (storedCheck == "true") {
            check.checked = true;
        } else {
            check.checked = false;
        }
    }

  
  	// Creating RNG boxes and title
  	var pRNG = document.createElement('p');
    var input3 = document.createElement('input');
    var input4 = document.createElement('input');
    var input5 = document.createElement('input');
  	pRNG.textContent = "Roll a number";
    input3.type = "number";
    input4.type = "number";
  	input5.type = "number";
    input3.placeholder = "min";
    input4.placeholder = "max";
  	input5.placeholder = "result";
    input3.id = "minRng";
    input4.id = "maxRng";
  	input5.id = "resultRng";
  	input5.setAttribute('readonly', true); 
  
    // Create button for rolling numbers 
    var btn2 = document.createElement("button");
    btn2.type = "button";
    btn2.textContent = "Roll";
  
  	// Appending RNG elements
  	rngDiv.appendChild(pRNG);
  	rngDiv.appendChild(input3);
  	rngDiv.appendChild(input4);
  	rngDiv.appendChild(input5);
    rngDiv.appendChild(document.createElement('br'));
  	rngDiv.appendChild(btn2);
  
  	// Create elements for storing points
  	var pPoints = document.createElement('p');
  	var input6 = document.createElement('input');
  	var input7 = document.createElement('input');
  	pPoints.textContent = "Point storage";
   	input6.type = "number";
    input7.type = "number";
    input6.placeholder = "points a";
  	input7.placeholder = "points b";
    input6.id = "pointsA";
    input7.id = "pointsB";
  
    // Create button for storing points 
    var btn3 = document.createElement("button");
    btn3.type = "button";
    btn3.textContent = "Save";
  
  	// Appending points elements
    pointTrackerDiv.appendChild(pPoints);
  	pointTrackerDiv.appendChild(input6);
  	pointTrackerDiv.appendChild(input7);
    pointTrackerDiv.appendChild(document.createElement('br'));
  	pointTrackerDiv.appendChild(btn3);
  
    if (storedPointsA !== null) input6.value = storedPointsA;
    if (storedPointsB !== null) input7.value = storedPointsB;
  	// btn events
  	openBtn.onclick = function() {
    	containerDiv.style.display = containerDiv.style.display === 'none' ? '' : 'none';
    };
  
    closeBtn.onclick = function() {
    	containerDiv.style.display = 'none';
    };
  
  	btn2.onclick = function() {
    	input5.value = random(Number(input3.value), Number(input4.value));
    };  
  
  	btn3.onclick = function() {
    	localStorage.setItem('pointsA', Number(input6.value));
      localStorage.setItem('pointsB', Number(input7.value));
    };
  
  	// Wrapper style
    Object.assign(wrapper.style, {
      textAlign: 'center',
  	});
  
    // Open btn style
    Object.assign(openBtn.style, {
      padding: '0.6em 1em',
      background: "#b85959",
      color: 'white',
      border: 'none',
      borderRadius: '0.3em',
      cursor: 'pointer',
  	});
  
  	// containerDiv style
    Object.assign(containerDiv.style, {
      padding: '0.6em',
      textAlign: 'left',
      position: 'fixed',
      left: '10%',
      top: '50%',
      transform: 'translateY(-50%)',
      background: '#faeeee',
      width: '80%',
      display: 'none',
      borderRadius: '0.3em',
      border: '1px solid #e5c3c3',
      boxShadow: '1px 1px 5px grey',
  	});
  
  	// p Title style
    Object.assign(pPage.style, {
      fontSize: '30px',
  	});
  
  	Object.assign(pRNG.style, {
      fontSize: '30px',
  	});
  
    Object.assign(pPoints.style, {
      fontSize: '30px',
  	});
  
  	// input style
    Object.assign(input1.style, {
      margin: '0.3em',
      padding: '0.6em',
      textAlign: 'center',
      borderRadius: '0.3em',
      border: '1px solid #e5c3c3',
  	});
  
    Object.assign(input2.style, {
      margin: '0.3em',
      padding: '0.6em',
      textAlign: 'center',
      borderRadius: '0.3em',
      border: '1px solid #e5c3c3',
  	});
  
  	Object.assign(input3.style, {
      margin: '0.3em',
      padding: '0.6em',
      textAlign: 'center',
      borderRadius: '0.3em',
      border: '1px solid #e5c3c3',
  	});  
  
  	Object.assign(input4.style, {
      margin: '0.3em',
      padding: '0.6em',
      textAlign: 'center',
      borderRadius: '0.3em',
      border: '1px solid #e5c3c3',
  	}); 
  
  	Object.assign(input5.style, {
      background: 'lightgrey',
      margin: '0.3em',
      padding: '0.6em',
      textAlign: 'center',
      borderRadius: '0.3em',
      border: '1px solid #e5c3c3',
  	});
  
  	Object.assign(input6.style, {
      margin: '0.3em',
      padding: '0.6em',
      textAlign: 'center',
      borderRadius: '0.3em',
      border: '1px solid #e5c3c3',
  	}); 
  
  	Object.assign(input7.style, {
      margin: '0.3em',
      padding: '0.6em',
      textAlign: 'center',
      borderRadius: '0.3em',
      border: '1px solid #e5c3c3',
  	});
  
  	// checkbox Label style
    Object.assign(label.style, {
      margin: '0.3em',
      padding: '0.6em 1em',
      display: 'inline-block',
      background: "#b85959",
      color: 'white',
      border: 'none',
      borderRadius: '0.3em',
      cursor: 'pointer',
  	});
  
    // closeButtonDiv style
    Object.assign(closeButtonDiv.style, {
      textAlign: 'center',
  	});
  
  	// rngPageDiv style
    Object.assign(rngPageDiv.style, {
      textAlign: 'center',
  	});
  
    // rngDiv style
    Object.assign(rngDiv.style, {
      textAlign: 'center',
  	});
  
    // rngDiv style
    Object.assign(pointTrackerDiv.style, {
      textAlign: 'center',
  	});
  
  	// Close btn style
     Object.assign(closeBtn.style, {
      margin: '0.3em',
      padding: '0.6em 1em',
      background: "#b85959",
      color: 'white',
      border: 'none',
      borderRadius: '0.3em',
      cursor: 'pointer',
  	});
  
  	// Roll btn style
     Object.assign(btn.style, {
      margin: '0.3em',
      padding: '0.6em 1em',
      background: "#b85959",
      color: 'white',
      border: 'none',
      borderRadius: '0.3em',
      cursor: 'pointer',
  	});
  
    Object.assign(btn2.style, {
      margin: '0.3em',
      padding: '0.6em 1em',
      background: "#b85959",
      color: 'white',
      border: 'none',
      borderRadius: '0.3em',
      cursor: 'pointer',
  	});
  
    Object.assign(btn3.style, {
      margin: '0.3em',
      padding: '0.6em 1em',
      background: "#b85959",
      color: 'white',
      border: 'none',
      borderRadius: '0.3em',
      cursor: 'pointer',
  	});
  
  	// hr style 
    Object.assign(hr1.style, {
      color: 'rgba(200,200,200,0.3)'
  	});
  
  	Object.assign(hr2.style, {
      color: 'rgba(200,200,200,0.3)'
  	});
  
  	Object.assign(hr3.style, {
      color: 'rgba(200,200,200,0.3)'
  	});
  
      function init(){
        //Get and Store min/max to preserve while playing
        var min = Number(input1.value);
        var max = Number(input2.value);
        console.log("min: " + min + " max: " + max);
        localStorage.setItem('min', min);
        localStorage.setItem('max', max);
        localStorage.setItem('check', check.checked);
        //Input validation and rolling
        if (min <= max)
            var rng = random(min, max);
        else {
            alert("min must be smaller or equal to max");
            return;
        }
        console.log("Rolled: " + rng);
        //Get current URL and parse
        var url = window.location.href;
        var currentPage = parsePage(url);
        console.log("Current Page: " + currentPage);
        //Handle Lottery Mode
        if (check.checked === true) lotteryMode(url, currentPage, rng);
        //URL manipulation
        var nextURL = generateNextPage(url, currentPage, rng);
        console.log("New URL: " + nextURL);
        //go to next Page
        if (check.checked === false)
            location.href = nextURL;
    }

    function lotteryMode(url, currentPage, num){
        if (!url.includes("&p=")) url += "&p=" + num;
        else {
            url = url.replace(("&p=" + currentPage), ("&p=" + num));
        }
        console.log("LOTTERY MODE: URL: " + url);
        location.href = url;
    }

    function generateNextPage(url, currentPage, rng){
        var idx = url.search("&p=");
        var num = currentPage + rng;
        console.log("DEBUG: num: " + num);
        if (idx != -1){
            url = url.replace(("p=" + currentPage), ("p=" + num));
            console.log("DEBUG2: " + url);
        }
        else url += "&p=" + num;
        return url;
    }

    function parsePage(url){
        var idx = url.search("&p=");
        if (idx != -1){
            url = url.replace("#t", "");
            return Number(url.slice(idx+3, url.length));
        }
        //First page doesnt specify so in url
        else return 1;
    }

    function random(min, max){
        return Math.floor(Math.random() * (max - min + 1)) + min;
    }
  
})();