MediaWiki:Gadget-whip.js

From UnderMine Wiki
Jump to navigation Jump to search

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
;(function( mw ) {
	"use strict";
	var ele = document.getElementById("whip-status");
	if (mw.config.get("wgPageName") !== "WHIP" || !ele) return;
	function getHashCode(str) { // From MoatShrimp
		var h1 = 5381;
		var h2 = h1;

		for (var i = 0; i < str.length; i += 2) {
			h1 = (((h1 << 5) + h1)|0) ^ str.charCodeAt(i);
			if (i+1 == str.length) {break;}
			h2 = (((h2 << 5) + h2)|0) ^ str.charCodeAt(i+1);
		}

		return (h1 + Math.imul(h2, 1566083941))|0;
	}
	var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
        if (ar || !(i in from)) {
            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
            ar[i] = from[i];
        }
    }
    return to.concat(ar || Array.prototype.slice.call(from));
};
var Random = /** @class */ (function () { //From MoatShrimp
    function Random(initSeed) {
        if (initSeed === void 0) { initSeed = 51113926; }
        var nextSeed = function (seed) { return (Math.imul(1812433253, seed) + 1) >>> 0; };
        var s1 = (initSeed) >>> 0;
        var s2 = nextSeed(s1);
        var s3 = nextSeed(s2);
        var s4 = nextSeed(s3);
        this.seed = [s1, s2, s3, s4];
    }
    Object.defineProperty(Random.prototype, "state", {
        get: function () { return __spreadArray([], this.seed, true); },
        set: function (newState) { this.seed = __spreadArray([], newState, true); },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(Random.prototype, "nextInt", {
        get: function () { return this.nextUInt % 0x7FFFFFFF; },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(Random.prototype, "next", {
        get: function () { return this.nextInt; },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(Random.prototype, "value", {
        get: function () { return 1 - this.rangeFloat(); },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(Random.prototype, "nextUInt", {
        get: function () {
            var x = this.seed.shift();
            var y = this.seed[2];
            x ^= x << 11;
            x ^= x >>> 8;
            y ^= y >>> 19;
            y = (y ^ x) >>> 0;
            this.seed.push(y);
            return y;
        },
        enumerable: false,
        configurable: true
    });
    Random.prototype.range = function (min, max) {
        var _a;
        if (min === void 0) { min = 0; }
        if (max === void 0) { max = 99999999; }
        if (max < min) {
            _a = [max, min], min = _a[0], max = _a[1];
        }
        return this.nextUInt % (max - min) + min;
    };
    Random.prototype.rangeFloat = function (min, max) {
        var _a;
        if (min === void 0) { min = 0; }
        if (max === void 0) { max = 1; }
        if (max < min) {
            _a = [max, min], min = _a[0], max = _a[1];
        }
        return (max - min) * (1 - Math.fround(((this.nextUInt & 0x7FFFFF) >>> 0) / 0x7FFFFF)) + min;
    };
    Random.prototype.rangeInclusive = function (min, max) {
        return this.range(min, max + 1);
    };
    return Random;
}());
function ItemP(packNum){
//var ItemPacks = new Object();
switch(packNum)
{
case 1: return "{{Item|Key|Keys}}x 5";
case 2: return "{{Item|Key|Keys}} x 10";
case 3: return "{{Item|Bomb|Bombs}} x 5";
case 4: return "{{Item|Bomb|Bombs}} x 10";
case 5: return "{{Item|Conductor}}, {{Item|Bottled Pilfer}} x 3";
case 6: return "{{Item|Conductor}}, {{Item|Auglycerin}} x 2";
case 7: return "{{Item|Tsar Bomba}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|U-235}} <span style='color: return#F02121'>(Indestructible)</span>";
case 8: return "{{Item|Spare Ordnance}}, {{Item|Leftovers}}";
case 9: return "{{Item|Obsidian Knife}}";
case 10: return "{{Item|Chakram}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Gust}} x 3";
case 11: return "{{Item|Throwing Star}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Mighty Hurl}} x 4";
case 12: return "{{Item|Bottled Lightning}}, {{Item|Salamander Tail}}, {{Item|Crippling Poison}}";
case 13: return "{{Item|Tent}}";
case 14: return "{{Item|Karmic Scale}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Breastplate}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Pauldron}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Gauntlets}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Greaves}} <span style='color: return#F02121'>(Indestructible)</span>";
case 15: return "{{Item|Karmic Scale}} <span style='color: return#F02121'>(Indestructible)</span>";
case 16: return "{{Item|Rabbit Gloves}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Lucky Lockpick}} <span style='color: return#F02121'>(Indestructible)</span>";
case 17: return "{{Item|Petrified Rock}} <span style='color: return#F02121'>(Indestructible)</span>";
case 18: return "{{Item|Cosmic Egg}}, {{Item|Biscuits}} x 4";
case 19: return "{{Item|Poison Mushroom}} <span style='color: return#F02121'>(Indestructible)</span>";
case 20: return "{{Item|Sequence Breaker}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Sonic Boom}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Mighty Hurl}} x 3";
case 21: return "{{Item|Map}} <span style='color: return#F02121'>(Indestructible)</span>";
case 22: return "{{Item|Miner's Flask}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Slow Metabolism}} x 3, {{Item|Troll Sweat}}";
case 23: return "{{Item|Blood Offering}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Ursa Major}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Butcher's Cleaver}} <span style='color: return#F02121'>(Indestructible)</span>";
case 24: return "{{Item|Suneater}}";
case 25: return "{{Item|Sonic Boom}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Throwing Star}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Mighty Hurl}} x 15";
case 26: return "{{Item|Devotion}}, {{Item|Holy Guacamole}}";
case 27: return "{{Item|Resurrection}}";
case 28: return "{{Item|Dirk's Hammer}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Transmutagen Blast}}, {{Item|Transmutagen}}, {{Item|TRANSMUT3 in a Bottle}}";
case 29: return "{{Item|Glass Cannon}} <span style='color: return#F02121'>(Indestructible)</span>";
case 30: return "{{Item|Pilfer Ring}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Explosive Decompression}} <span style='color: return#F02121'>(Indestructible)</span>";
case 31: return "{{Item|Pilfer's Nightmare}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Explosive Decompression}} <span style='color: return#F02121'>(Indestructible)</span>";
case 32: return "{{Item|Key Blade}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Key Doubler}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Security Theater}} <span style='color: return#F02121'>(Indestructible)</span>";
case 33: return "{{Item|Bomb|Bombs}} x 99, {{Item|Sweaty Palms}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Blood Pact}} <span style='color: return#F02121'>(Indestructible)</span>";
case 34: return "{{Item|Key|Keys}} x 20, {{Item|Key Blade}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Sweaty Fingers}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Haunted Locks}} <span style='color: return#F02121'>(Indestructible)</span>";
case 35: return "{{Item|Witch's Brew}} x 2";
case 36: return "{{Item|All-Potion}}";
case 37: return "{{Item|U-235}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Doubling Saison}} x 2";
case 38: return "{{Item|Kurtz' Stache}}";
case 39: return "{{Item|Coffee}}";
case 40: return "{{Item|Shop in a Bottle}} x 3";
case 41: return "{{Item|Tsar Bomba}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Queen's Bomb}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Resurrection}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Demolition}} x 3";
case 42: return "{{Item|Tsar Bomba}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|U-235}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Bomb Doubler}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Blast Suit}}";
case 43: return "{{Item|Salamander Tail}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Salamander's Wrath}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Wet Blanket}} <span style='color: return#F02121'>(Indestructible)</span>";
case 44: return "{{Item|The Crumbles}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Pocket Grill}}";
case 45: return "{{Item|Miner's Flask}}, {{Item|Slow Metabolism}} x 5";
case 46: return "{{Item|Petrified Rock}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Double Doubler}}, {{Item|Seasoned Popcorn}}";
case 47: return "{{Item|Birthing Pod}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Apprentice's Tincture}} x 3";
case 48: return "{{Item|Lucky Lockpick}}, {{Item|Rabbit Gloves}}, {{Item|Lucky Nugget}}";
case 49: return "{{Item|Unstable Concoction}}, {{Item|Golden Popcorn}}, {{Item|Explosiveness}} x 5";
case 50: return "{{Item|Chakram}}, {{Item|Phantasmal Axe}}";
case 51: return "{{Item|Mushroom}}, {{Item|Frailty}} x 14";
case 52: return "{{Item|Doom Blade}}";
case 53: return "{{Item|Key|Keys}} x 15, {{Item|Bomb|Bombs}} x 15, {{Item|Item Eater}} <span style='color: return#F02121'>(Indestructible)</span>";
case 54: return "{{Item|Item Eater}}, {{Item|Blessing Eater}}, {{Item|Relic Eater}}";
case 55: return "{{Item|Seasoned Kernels}}, {{Item|Popcorn Kernels}}, {{Item|Golden Kernels}}, {{Item|Rainbow Kernels}}";
case 56: return "{{Item|Poverty}} <span style='color: return#F02121'>(Indestructible)</span> x 5, {{Item|Inflation}} <span style='color: return#F02121'>(Indestructible)</span> x 5";
case 57: return "{{Item|Vorpal Blade}}, {{Item|Cleave}} x 5";
case 58: return "{{Item|Bomb|Bombs}} x 99, {{Item|Weakness}} <span style='color: return#F02121'>(Indestructible)</span> x 15, {{Item|Imbalance}} <span style='color: return#F02121'>(Indestructible)</span> x 15, {{Item|Capture Sphere}}";
case 59: return "{{Item|Explosiveness}} x 20";
case 60: return "{{Item|Karmic Scale}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Regeneration}}";
case 61: return "{{Item|Berserker's Pendant}}, {{Item|Axe Thrower's Pendant}}";
case 62: return "{{Item|Knight's Pendant}}, {{Item|Archer's Pendant}}";
case 63: return "{{Item|Secrecy}}, {{Item|Adventurer's Hat}}, {{Item|Circinus}}, {{Item|Potion of True Sight}}";
case 64: return "{{Item|Stoneforge Broth}}";
case 65: return "{{Item|Shield of Quills}}, {{Item|Breastplate}}, {{Item|Pangolin Potion}}";
case 66: return "{{Item|Twin Axe}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Chakram}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Gust}} x 5";
case 67: return "{{Item|Explosive Decompression}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Pilfer's Nightmare}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Golden Popcorn}}";
case 68: return "{{Item|Mune}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Guantes}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Balance}} x 5, {{Item|Weakness}} x 5";
case 69: return "{{Item|Masa}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Demon Ring}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Strength}} x 5, {{Item|Imbalance}} x 5";
case 70: return "{{Item|Birthing Pod}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Butcher's Cleaver}}, {{Item|Seasoned Kernels}} x 2";
case 71: return "{{Item|Key|Keys}} x 3, {{Item|Lockpick}}, {{Item|Key Blade}}";
case 72: return "{{Item|Box of Holding}}, {{Item|Golden Axe}}, {{Item|Market Crash}}";
case 73: return "{{Item|Recycler}}, {{Item|Empty Coffers}}";
case 74: return "{{Item|Key|Keys}} x 99, {{Item|Bomb|Bombs}} x 99, {{Item|Frailty}} x 99, {{Item|Purification Potion}}";
case 75: return "{{Item|Elixir}}";
case 76: return "{{Item|Frailty}} x 12 <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Regeneration}} x 20";
case 77: return "{{Item|Blast Suit}}, {{Item|Bombushka}}, {{Item|Demolition}} x 10, {{Item|Explosiveness}} x 10";
case 78: return "{{Item|Miniaturizer}}, {{Item|Spare Ordnance}}, {{Item|Recycler}}";
case 79: return "{{Item|Bounty Contract}}, {{Item|Golden Popcorn}}, {{Item|Conductor}}, {{Item|Battle Standard}}";
case 80: return "{{Item|Ursa Major}}, {{Item|Blade Mail}}, {{Item|Weakness}} x 5, {{Item|Imbalance}} x 5";
case 81: return "{{Item|Guidance}}, {{Item|Bottled Lightning}}, {{Item|Mjölnir}}";
case 82: return "{{Item|Blessed Blend}}, {{Item|Ambrosia}} x 3";
case 83: return "{{Item|Ursa Major}}, {{Item|Orion's Sword}}, {{Item|Canis Major}}";
case 84: return "{{Item|Brittleness}} x 20 <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Blood Bomb}}, {{Item|Box of Holding}}";
case 85: return "{{Item|Witch's Brew}}, {{Item|Aether}} x 2";
case 86: return "{{Item|Plague}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Rain of Fire}} <span style='color: return#F02121'>(Indestructible)</span>";
case 87: return "{{Item|Suneater}}, {{Item|Devotion}}";
case 88: return "{{Item|Waking Light}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Tortoise Shield}}, {{Item|Grimhilde's Mirror}}";
case 89: return "{{Item|Four Leaf Clover}}, {{Item|Gold Tooth}}, {{Item|Catalyst}}";
case 90: return "{{Item|Freeloader Draught}} x 2";
case 91: return "{{Item|Bomb|Bombs}} x 50, {{Item|Iron Glaze}}, {{Item|Impish Key Bomb}}";
case 92: return "{{Item|Karmic Scale}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Doom Blade}}, {{Item|Resurrection}}, {{Item|Witch's Brew}} x 2";
case 93: return "{{Item|Paladin Shield}}, {{Item|Emperor's Crown}}, {{Item|Elixir}}";
case 94: return "{{Item|Waking Light}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Obsidian Knife}}, {{Item|Nullstone}}";
case 95: return "{{Item|Hay Fever}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Obsidian Knife}}, {{Item|Nullstone}}";
case 96: return "{{Item|Soul Cannon}}, {{Item|Hyperstone}}";
case 97: return "{{Item|Bloodied Locks}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Blood Offering}} <span style='color: return#F02121'>(Indestructible)</span>, {{Item|Meal Ticket}}, {{Item|Leftovers}}";
case 98: return "{{Item|Shadow's Fang}}, {{Item|Dillon's Claw}}, {{Item|Mediocrity}}, {{Item|Metamfiezomaiophobia}}";
case 99: return "{{Item|Inverter}}, {{Item|Ambrosia}}, {{Item|Holy Glaze}}";
case 100: return "{{Item|Vorpal Blade}}, {{Item|Masamune}}";
default: return packNum;
}
}
function familiar(famNum){
	switch(famNum){
	case 1: return "{{Item|Canary}}";
	case 2: return "{{Item|Djinn}}";
	case 3: return "{{Item|Firebird}}";
	case 4: return "{{Item|Nikko}}";
	case 5: return "{{Item|Sol's Phoenix}}";
	case 6: return "{{Item|Sylph}}";
	case 7: return "{{Item|Spirit}}";
	case 8: return "{{Item|Thunderbird}}";
	case 9: return "{{Item|Chaos Spawn}}";
	case 10: return "{{Item|Eidolon}}";
	case 11: return "{{Item|Lesser Demon}}";
	case 12: return "{{Item|Murderous Queen}}";
	case 13: return "{{Item|Pale Likeness}}";
	}
}
function hexes(numHexes,weight1,weight2){
	const Table = {
		hexes: [
			{},
			{name: "hex1",weight : 3},
			{weight : 0},
			{weight : 3},
			{weight : 3},
			{weight : 3},
			{weight : 2},
			{weight : 3},
			{weight : 2},
			{weight : 1},
			{weight : 3},
			{weight : 2},
			{weight : 3},
			{weight : 3},
			{weight : 3}
			]
	};
	var hex1=0,hex2=0;
	while (weight1>0){
		weight1-=Table.hexes[hex1].weight;
		hex1++;
	}
	if(numHexes==2){
	Table.hexes[hex1].weight=0;
	while (weight2>0){
		weight2-=Table.hexes[hex1].weight;
		hex2++;
	}
	}
switch(hex1){
case 1: return "{{Item|Chaotic Offering}}";
case 2: return "{{Item|Rogue's Ultimatum}}";
case 3: return "{{Item|Stasis}}";
case 4: return "{{Item|Dreadful Fog}}";
case 5: return "{{Item|Unending Desolation}}";
case 6: return "{{Item|Frostbite}}";
case 7: return "{{Item|Red-Hot Nuggets}}";
case 8: return "{{Item|Nemesis}}";
case 9: return "{{Item|Adventurer's Peril}}";
case 10: return "{{Item|Starvation}}";
case 11: return "{{Item|Amnesia}}";
case 12: return "{{Item|Siegfried's Torment}}";
case 13: return "{{Item|Accursed}}";
case 14: return "{{Item|Blasphemy}}";
}


}
	var oldPack = -1;
	var packResult = "";
	var timeContent = document.createElement("div");
	var itemPackContent = document.createElement("div");
	function main() {
		var daystart = new Date("1/1/2020");
		var daynow = new Date();
		daynow = new Date(daynow.getUTCFullYear(), daynow.getUTCMonth(), daynow.getUTCDate(), daynow.getUTCHours(), daynow.getUTCMinutes(), daynow.getUTCSeconds(), daynow.getUTCMilliseconds());
		var nextday = new Date(daynow.getUTCFullYear(), daynow.getUTCMonth(), daynow.getUTCDate() + 1, 0, 0, 0);
		var timeleft = new Date(nextday - daynow);
		var tl_h = timeleft.getUTCHours();
		var tl_m = timeleft.getUTCMinutes();
		var tl_s = timeleft.getUTCSeconds();
		tl_h = (tl_h < 10) ? "0" + tl_h : tl_h;
		tl_m = (tl_m < 10) ? "0" + tl_m : tl_m;
		tl_s = (tl_s < 10) ? "0" + tl_s : tl_s;
		var cycle = Math.floor((daynow - daystart) / (1000 * 3600 * 24));
		var seed = (String(Math.abs(getHashCode("whip_" + cycle + "_seed")))).substr(0,8);
		var trial = new Random(seed);
		var itemPack = trial.rangeInclusive(1, 100);
		var FamNum = trial.rangeInclusive(1, 13);
		var numHex = trial.rangeInclusive(1, 2);
		var api = new mw.Api();
		timeContent.innerHTML = ("<b>Cycle:</b> " + cycle + "<br /><b>Seed:</b> " + seed + "<br /><b>Time left:</b> " + tl_h + ":" + tl_m + ":" + tl_s + "<br /><b>Item Pack:</b> ");
		if (oldPack != itemPack) {
			oldPack = itemPack;
			itemPackContent.innerText = "Loading..";
			api.get({
				action: "parse",
				format: "json",
				text: /*familiar(FamNum) +*/ ItemP(itemPack),
				contentformat: "text/x-wiki",
				contentmodel: "wikitext",
				prop: "text",
				disablelimitreport: 1,
				disabletoc: 1,
				formatversion: "2"
			}).done(function(a) {
				packResult = a.parse.text;
				itemPackContent.innerHTML = packResult;
			});
		}
	}
	if (ele) {
		ele.appendChild(timeContent);
		ele.appendChild(itemPackContent);
		timeContent.innerText = "Loading..";
		itemPackContent.innerText = "Loading..";
		setInterval(main, 500);
	}
})( window.mediaWiki );