109 lines
5.1 KiB
JavaScript
109 lines
5.1 KiB
JavaScript
import GetCPSBuffMult from '../CPS/GetCPSBuffMult.js';
|
|
import FillCMDCache from '../FillCMDCache.js';
|
|
import {
|
|
CacheChainFrenzyMaxReward,
|
|
CacheChainFrenzyRequired,
|
|
CacheChainFrenzyRequiredNext,
|
|
CacheChainFrenzyWrathMaxReward,
|
|
CacheChainFrenzyWrathRequired,
|
|
CacheChainFrenzyWrathRequiredNext,
|
|
CacheChainMaxReward,
|
|
CacheChainRequired,
|
|
CacheChainRequiredNext,
|
|
CacheChainWrathMaxReward,
|
|
CacheChainWrathRequired,
|
|
CacheChainWrathRequiredNext,
|
|
CacheDragonsFortuneMultAdjustment,
|
|
CacheGoldenCookiesMult,
|
|
CacheNoGoldSwitchCookiesPS,
|
|
CacheWrathCookiesMult,
|
|
} from '../VariablesAndData.js';
|
|
|
|
/**
|
|
* This functions calculates the max possible payout given a set of variables
|
|
* It is called by CM.Disp.CreateStatsChainSection() and CM.Cache.CacheChain()
|
|
* @param {number} digit Number of Golden Cookies in chain
|
|
* @param {number} maxPayout Maximum payout
|
|
* @param {number} mult Multiplier
|
|
* @returns [{number, number, number}] Total cookies earned, cookie needed for this and next level
|
|
*/
|
|
export function MaxChainCookieReward(digit, maxPayout, mult) {
|
|
let totalFromChain = 0;
|
|
let moni = 0;
|
|
let nextMoni = 0;
|
|
let nextRequired = 0;
|
|
let chain = 1 + Math.max(0, Math.ceil(Math.log(Game.cookies) / Math.LN10) - 10);
|
|
while (nextMoni < maxPayout * mult) {
|
|
moni = Math.max(
|
|
digit,
|
|
Math.min(Math.floor((1 / 9) * 10 ** chain * digit * mult), maxPayout * mult),
|
|
);
|
|
nextMoni = Math.max(
|
|
digit,
|
|
Math.min(Math.floor((1 / 9) * 10 ** (chain + 1) * digit * mult), maxPayout * mult),
|
|
);
|
|
nextRequired = Math.floor((1 / 9) * 10 ** (chain + 1) * digit * mult);
|
|
totalFromChain += moni;
|
|
chain += 1;
|
|
}
|
|
return [totalFromChain, moni, nextRequired];
|
|
}
|
|
|
|
/**
|
|
* This functions caches data related to Chain Cookies reward from Golden Cookioes
|
|
* It is called by CM.Main.Loop() upon changes to cps and CM.Cache.InitCache()
|
|
* @global [{number, number}] CM.Cache.ChainMaxReward Total cookies earned, and cookies needed for next level for normal chain
|
|
* @global {number} CM.Cache.ChainRequired Cookies needed for maximum reward for normal chain
|
|
* @global {number} CM.Cache.ChainRequiredNext Total cookies needed for next level for normal chain
|
|
* @global [{number, number}] CM.Cache.ChainMaxWrathReward Total cookies earned, and cookies needed for next level for wrath chain
|
|
* @global {number} CM.Cache.ChainWrathRequired Cookies needed for maximum reward for wrath chain
|
|
* @global {number} CM.Cache.ChainWrathRequiredNext Total cookies needed for next level for wrath chain
|
|
* @global [{number, number}] CM.Cache.ChainFrenzyMaxReward Total cookies earned, and cookies needed for next level for normal frenzy chain
|
|
* @global {number} CM.Cache.ChainFrenzyRequired Cookies needed for maximum reward for normal frenzy chain
|
|
* @global {number} CM.Cache.ChainFrenzyRequiredNext Total cookies needed for next level for normal frenzy chain
|
|
* @global [{number, number}] CM.Cache.ChainFrenzyWrathMaxReward Total cookies earned, and cookies needed for next level for wrath frenzy chain
|
|
* @global {number} CM.Cache.ChainFrenzyWrathRequired Cookies needed for maximum reward for wrath frenzy chain
|
|
* @global {number} CM.Cache.ChainFrenzyWrathRequiredNext Total cookies needed for next level for wrath frenzy chain
|
|
*/
|
|
export function CacheChain() {
|
|
let maxPayout = CacheNoGoldSwitchCookiesPS * 60 * 60 * 6 * CacheDragonsFortuneMultAdjustment;
|
|
// Removes effect of Frenzy etc.
|
|
const cpsBuffMult = GetCPSBuffMult();
|
|
if (cpsBuffMult > 0) maxPayout /= cpsBuffMult;
|
|
else maxPayout = 0;
|
|
|
|
CacheChainMaxReward = MaxChainCookieReward(7, maxPayout, CacheGoldenCookiesMult);
|
|
CacheChainRequired = (CacheChainMaxReward[1] * 2) / CacheGoldenCookiesMult;
|
|
CacheChainRequiredNext = CacheChainMaxReward[2] / 60 / 60 / 6 / CacheDragonsFortuneMultAdjustment;
|
|
|
|
CacheChainWrathMaxReward = MaxChainCookieReward(6, maxPayout, CacheWrathCookiesMult);
|
|
CacheChainWrathRequired = (CacheChainWrathMaxReward[1] * 2) / CacheWrathCookiesMult;
|
|
CacheChainWrathRequiredNext =
|
|
CacheChainWrathMaxReward[2] / 60 / 60 / 6 / CacheDragonsFortuneMultAdjustment;
|
|
|
|
CacheChainFrenzyMaxReward = MaxChainCookieReward(7, maxPayout * 7, CacheGoldenCookiesMult);
|
|
CacheChainFrenzyRequired = (CacheChainFrenzyMaxReward[1] * 2) / CacheGoldenCookiesMult;
|
|
CacheChainFrenzyRequiredNext =
|
|
CacheChainFrenzyMaxReward[2] / 60 / 60 / 6 / CacheDragonsFortuneMultAdjustment;
|
|
|
|
CacheChainFrenzyWrathMaxReward = MaxChainCookieReward(6, maxPayout * 7, CacheWrathCookiesMult);
|
|
CacheChainFrenzyWrathRequired = (CacheChainFrenzyWrathMaxReward[1] * 2) / CacheWrathCookiesMult;
|
|
CacheChainFrenzyWrathRequiredNext =
|
|
CacheChainFrenzyWrathMaxReward[2] / 60 / 60 / 6 / CacheDragonsFortuneMultAdjustment;
|
|
|
|
FillCMDCache({
|
|
CacheChainMaxReward,
|
|
CacheChainRequired,
|
|
CacheChainRequiredNext,
|
|
CacheChainWrathMaxReward,
|
|
CacheChainWrathRequired,
|
|
CacheChainWrathRequiredNext,
|
|
CacheChainFrenzyMaxReward,
|
|
CacheChainFrenzyRequired,
|
|
CacheChainFrenzyRequiredNext,
|
|
CacheChainFrenzyWrathMaxReward,
|
|
CacheChainFrenzyWrathRequired,
|
|
CacheChainFrenzyWrathRequiredNext,
|
|
});
|
|
}
|