Melvor offline cap remover

Removes 12hr offline cap

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Melvor offline cap remover
// @version      0.3.0
// @description  Removes 12hr offline cap
// @author       8992
// @match        https://*.melvoridle.com/*
// @exclude      https://wiki.melvoridle.com/*
// @grant        none
// @namespace    http://tampermonkey.net/
// @noframes
// ==/UserScript==

let times = null;
let cloudLoaded = false;

let loadCheckInterval = setInterval(() => {
  if (isLoaded && !currentlyCatchingUp && !modalIsOpen) {
    clearInterval(loadCheckInterval);
    extraOffline();
  }
}, 200);

function extraOffline() {
  let offlineData = JSON.parse(window.localStorage.getItem("12hr"));
  if (offlineData != null) {
    //remove limit from updateOffline function then overwrite
    patchCode(updateOffline, /> *43200000/, "== 43200000");
    //"fix" issue with sample_from_binomial
    patchCode(
      sample_from_binomial,
      /(let binomial[^;]+;)/,
      "$1if (binomial.length > numberTrials) return Math.floor(numberTrials * chance);"
    );
    offlineData.timestamp = Math.min(new Date().getTime(), offlineData.timestamp + 43200000);
    console.log(
      `Calculating additional ${Math.floor(
        (new Date().getTime() - offlineData.timestamp) / 1000 / 60 / 60
      )}hrs of offline time`
    );
    window.offline = offlineData;
    offlinePause = true;
    pauseOfflineAction(offline.skill);
    offlineCatchup();
    offlinePause = false;
    window.localStorage.removeItem("12hr");
  }
}

function patchCode(code, match, replacement) {
  const codeString = code
    .toString()
    .replace(match, replacement)
    .replace(/^function (\w+)/, "window.$1 = function");
  eval(codeString);
}

setTimeout(() => {
  //fetch offline save data
  times = {
    0: ["", "-1-", "-2-", "-3-", "-4-"].map((a) => getItem("MI-A04" + a + "offline")),
    1: [],
  };

  const _toggleCharacterSelectionView = toggleCharacterSelectionView;
  window.toggleCharacterSelectionView = () => {
    if (!cloudLoaded) {
      for (let i = 0; i < 5; i++) {
        if (playFabSaves[i] !== null) {
          times[1][i] = getItemFromSave(playFabSaves[i], "offline");
        } else if (storedCloudSaves[i] !== null) {
          times[1][i] = getItemFromSave(storedCloudSaves[i], "offline");
        } else times[1][i] = null;
      }
      cloudLoaded = true;
    }
    _toggleCharacterSelectionView();
  };

  const _selectCharacter = selectCharacter;
  window.selectCharacter = (char, confirmed = false) => {
    if (confirmed || !connectedToCloud) {
      let offline = times[currentView][char];
      if (
        offline != null &&
        typeof offline == "object" &&
        typeof offline.timestamp == "number" &&
        new Date().getTime() - offline.timestamp > 43200000
      ) {
        window.localStorage.setItem("12hr", JSON.stringify(offline));
      } else {
        window.localStorage.removeItem("12hr");
      }
    }
    _selectCharacter(char, confirmed);
  };
}, 100);