MediaWiki:Gadget-whip.js
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 );