Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Options
- // Automatic trading when true (not yet implemented)
- var stockerAutoTrading = false
- // Minimum number of brokers required for automatic trading
- var stockerMinBrokers = 58 // Default of 58 results in 1% commission
- // Announce transactions in game notifications
- var stockerTransactionNotifications = true
- // Make regular profit reports
- var stockerActivityReport = true
- // How often to make regular reports in ms (one hour by default)
- var stockerActivityReportFrequency = 1000 * 60 * 60
- // Make game notifications fade away on their own
- var stockerFastNotifications = false
- // Use console.log for more detailed info on prices and trends
- var stockerConsoleAnnouncements = false
- // Display more detailed trading info near the top of the stock market display
- var stockerAdditionalTradingStats = true
- // Logic loop frequency; do not touch it unless you are cheating
- var stockerLoopFrequency = 1000 * 30
- // The cheat itself. Rolls the cycle every time logic loop triggers
- var stockerForceLoopUpdates = false
- var hideBogdanoff = true
- var stockerGreeting = 'click clack you are now in debt'
- // ===================================================================================
- if(typeof CCSE == undefined)
- Game.LoadMod('https://klattmose.github.io/CookieClicker/SteamMods/CCSE/main.js')
- if(CookiStocker === undefined) var CookiStocker = {};
- CookiStocker.name = 'CookiStocker';
- CookiStocker.version = '2.3';
- CookiStocker.GameVersion = '2.053';
- if (stockList === undefined) {
- var stockList = {
- Check: 'dump eet',
- Goods: [],
- Start: Date.now() + 500,
- lastTime: Date.now() + 500,
- startingProfits: 0,
- Profits: 0,
- netProfits: 0,
- grossProfits: 0,
- grossLosses: 0,
- totalStocks: 0,
- totalShares: 0,
- totalValue: 0,
- unrealizedProfits: 0,
- profitableStocks: 0,
- unprofitableStocks: 0,
- profitableTrades: 0,
- unprofitableTrades: 0,
- Purchases: 0,
- Sales: 0,
- Uptime: 0,
- hourlyProfits: 0,
- dailyProfits: 0,
- }
- }
- if (!hideBogdanoff) console.log('\n\n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⡀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠀⠀\n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀\n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⢀⣀⣀⡀\n⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⣿⣿⣿⣿⠿⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠈⠛⢿⣷\n⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⡟⠁⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⣸⣿\n⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀⠀⠀⠀⢠⣾⣿⣿\n⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠈⢿⣿⣿⣿\n⠃⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀⠀⠀⠀⠈⣿⣿⣿\n⠀⢀⠀⢠⠀⠀⠀⠀⠀⢿⣿⣿⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡈⠻⠟⠛⠛⢿⣿⣿⡿⠇⠀⠀⠀⠀⠀⠀⣿⣿⣿\n⣶⣿⡀⠀⠀⠀⠀⠀⠀⠀⢻⣿⠋⠀⠀⣠⣤⣄⣀⣠⣀⡀⠀⠀⢀⣤⣴⣶⣿⣿⣿⣿⣿⡆⠀⠀⠀⢻⣿⡆⠀⠀⠀⠀⠀⠀⠀⠘⠋⠀\n⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠈⠁⠀⠀⠎⢀⣩⡽⣿⣿⣿⡏⠀⠀⠘⣿⣿⠟⠙⠿⠿⠟⠋⠀⠀⠀⠀⢀⣄⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\n⣿⣿⠉⠀⣠⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠀⠈⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠁⢀⣤⠄⠀⠀⠀⠀⠀⠸⡷⠀\n⣿⣿⣷⡾⠟⠋⠁⠀⠀⠀⢼⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠀\n⣿⠟⠁⠀⠀⠀⠀⠀⠀⢀⣴⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠾⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠀\n⣿⠀⠀⠀⠀⠀⠀⣰⠀⢸⣿⠛⠉⠂⠀⠀⠀⠀⠀⠀⠀⠶⠤⣴⣶⠾⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\n⠏⠀⠀⠐⡫⢀⣾⡇⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\n⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣶⠀⠀⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣠⣀⣀⣠⣤⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\n⠀⠀⠀⠀⠀⣠⣴⠀⠹⡇⢿⣿⠃⠀⠀⠐⡀⠀⢠⣴⠶⠿⠿⠿⠿⠿⠟⢛⡿⠿⣿⣿⣿⣄⠀⡆⠀⠸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\n⠀⠀⠀⠠⢾⣿⣟⣠⢉⣥⣼⡏⠀⠀⠀⠀⠘⣶⠁⠀⠀⢤⣤⣠⣤⣤⣶⡿⠃⠀⠹⣿⣿⣷⣾⠁⠀⠀⠀⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀\n⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⡟⠀⠀⠀⠀⠀⠀⠘⣆⠀⠀⠀⠉⠛⠛⠛⠉⠀⠀⠀⢀⣿⣿⡟⠁⠀⠀⠀⠀⣰⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀\n⠀⠀⠀⠐⢿⠟⠋⠙⠻⣿⣃⣀⣀⣤⣤⣶⣾⣿⠁⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠟⠉⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⣦⡀⠀⠀⠀⠀⠀\n⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⡆⠸⣦⣤⣄⣀⣀⣠⣤⣤⣴⠎⠀⠀⠀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⣿⣿⣶⣤⣤⣄⣀\n⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠹⣏⠛⠛⠛⠛⠛⠉⠁⠀⠀⠀⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\n⠀⠀⠀⢀⠀⢀⣤⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠙⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿\n\n wot iz he doing in ze console?\n\n\n');
- var modeDecoder = ['stable','slowly rising','slowly falling','rapidly rising','rapidly falling','chaotic'] // meanings of each market trend (good.mode)
- var goodIcons = [[2,33],[3,33],[4,33],[15,33],[16,33],[17,33],[5,33],[6,33],[7,33],[8,33],[13,33],[14,33],[19,33],[20,33],[32,33],[33,33],[34,33],[35,33]];
- CookiStocker.launch = function() {
- this.isLoaded = 1;
- }
- if (!CookiStocker.isLoaded){
- if (CCSE && CCSE.isLoaded) {
- CookiStocker.launch();
- }
- else {
- if(!CCSE) var CCSE = {};
- if(!CCSE.postLoadHooks) CCSE.postLoadHooks = [];
- CCSE.postLoadHooks.push(CookiStocker.launch);
- }
- }
- function stockerTimeBeautifier(duration) {
- var milliseconds = Math.floor(duration % 1000),
- seconds = Math.floor((duration / 1000) % 60),
- minutes = Math.floor((duration / (1000 * 60)) % 60),
- hours = Math.floor((duration / (1000 * 60 * 60)) % 24),
- days = Math.floor(duration / (1000 * 60 * 60 * 24));
- if (seconds && (minutes || hours || days) && !stockerForceLoopUpdates)
- seconds = 0; // Don't display
- var strSeconds = seconds + ' second' + (seconds != 1 ? 's' : '');
- var strMinutes = minutes ? minutes + ' minute' + (minutes != 1 ? 's' : '') + (seconds ? (hours || days ? ', and ' : ' and ') : '') : '';
- var strHours = hours ? hours + ' hour' + (hours != 1 ? 's' : '') + (minutes && seconds ? ', ' : ((minutes ? !seconds : seconds) ? ' and ' : '')) : '';
- var strDays = days ? days + ' day' + (days != 1 ? 's' : '') + (hours && minutes || hours && seconds || minutes && seconds ? ', ' : (((hours ? !minutes : minutes) ? !seconds : seconds) ? ' and ' : '')) : '';
- var strTime = strDays + strHours + strMinutes;
- if (stockerForceLoopUpdates && seconds)
- strTime += strSeconds;
- if (minutes || hours || days) {
- return (strTime);
- } else
- return (strSeconds);
- }
- //Game.registerHook('reset', CookiStocker.reset);
- //Game.registerHook('save', CookiStocker.save);
- //Game.registerHook('load', CookiStocker.load);
- Game.registerMod('CookiStocker',{
- init:function(){
- this.startStocking();
- },
- startStocking:function(){
- if (!Game.Objects['Bank'].minigame) {
- console.log('=====$$$=== Stock Market minigame has not initialised yet! Will try again in 500 ms.');
- setTimeout(() => {
- this.startStocking();
- },500);
- return
- }
- else {
- console.log('=====$$$=== CookiStocker logic loop initialised at ' + new Date());
- console.log('=====$$$=== With main options as follows:')
- console.log('=====$$$=== Logic loop frequency: ' + stockerTimeBeautifier(stockerLoopFrequency))
- console.log('=====$$$=== Report frequency: ' + stockerTimeBeautifier(stockerActivityReportFrequency))
- console.log('=====$$$=== Cheating: ' + stockerForceLoopUpdates)
- Game.Notify('CookiStocker is ready',stockerGreeting,[1,33],false);
- console.log(stockList.Check);
- }
- let datStr
- = '<div>'
- + '<div style="display: inline-block; padding: 1px 8px;position:relative;margin:-10px;left:20px;">'
- + '<div style="font-size:10px;color:rgba(255,255,255,0.8);">' + 'Net profits: <span id="Profits">$0</span>.'
- + '<div style="display: inline-block; padding: 1px 8px;">'
- + '<div style="font-size:10px;color:rgba(255,255,255,0.8);">' + 'Profits per hour: <span id="profitsHour">$0</span>.'
- + '<div style="display: inline-block; padding: 1px 8px;">'
- + '<div style="font-size:10px;color:rgba(255,255,255,0.8);">' + 'Profits per day: <span id="profitsDay">$0</span>.'
- + '<div style="display: inline-block; padding: 1px 8px;">'
- + '<div style="font-size:10px;color:rgba(255,255,255,0.8);">' + 'Gross profits: <span id="grossProfits">$0</span>.'
- + '<div style="display: inline-block; padding: 1px 8px;">'
- + '<div style="font-size:10px;color:rgba(255,255,255,0.8);">' + 'Gross losses: <span id="grossLosses">$0</span>.'
- + '<div style="display: inline-block; padding: 1px 8px;">'
- + '<div style="font-size:10px;color:rgba(255,255,255,0.8);">' + (stockerForceLoopUpdates ? 'Runtime: <span id="runTime">0:00:00</span>' : 'Runtime: <span id="runTime">0:00</span>')
- + '</div>'
- + '</div>';
- let datStr2 = (stockerAdditionalTradingStats ? '<div>'
- + '<div style="display: inline-block; padding: 1px 8px;position:relative;margin:-10px;left:20px;">'
- + '<div style="font-size:10px;color:rgba(255,255,255,0.8);">' + 'Net cookies: <span id="netCookies">0</span>.'
- + '<div style="display: inline-block; padding: 1px 8px;">'
- + '<div style="font-size:10px;color:rgba(255,255,255,0.8);">' + 'Cookies per hour: <span id="cookiesHour">0</span>.'
- + '<div style="display: inline-block; padding: 1px 8px;">'
- + '<div style="font-size:10px;color:rgba(255,255,255,0.8);">' + 'Cookies per day: <span id="cookiesDay">0</span>.'
- + '<div style="display: inline-block; padding: 1px 8px;">'
- + '<div style="font-size:10px;color:rgba(255,255,255,0.8);">' + 'Purchases: <span id="Purchases">0</span>.'
- + '<div style="display: inline-block; padding: 1px 8px;">'
- + '<div style="font-size:10px;color:rgba(255,255,255,0.8);">' + 'Sales: <span id="Sales">0</span>.'
- + '</div>'
- + '</div>' : '');
- let datStr3 = (stockerAdditionalTradingStats ? '<div>'
- + '<div style="display: inline-block; padding: 1px 8px;position:relative;margin:-10px;left:20px;">'
- + '<div style="font-size:10px;color:rgba(255,255,255,0.8);">' + 'CPS multiple: <span id="cpsMultiple">0</span>.'
- + '<div style="display: inline-block; padding: 1px 8px;">'
- + '<div style="font-size:10px;color:rgba(255,255,255,0.8);">' + 'Stocks held: <span id="stocksHeld">' + stockList.totalStocks + '</span>.'
- + '<div style="display: inline-block; padding: 1px 8px;">'
- + '<div style="font-size:10px;color:rgba(255,255,255,0.8);">' + 'Total shares: <span id="totalShares">' + Beautify(stockList.totalShares, 0) + '</span>.'
- + '<div style="display: inline-block; padding: 1px 8px;">'
- + '<div style="font-size:10px;color:rgba(255,255,255,0.8);">' + 'Total value: <span id="totalValue">' + Beautify(stockList.totalValue, 2) + '</span>.'
- + '<div style="display: inline-block; padding: 1px 8px;">'
- + '<div style="font-size:10px;color:rgba(255,255,255,0.8);">' + 'Unrealized profits: <span id="unrealizedProfits">' + Beautify(stockList.unrealizedProfits, 0) + '</span>.'
- + '</div>'
- + '</div>' : '');
- let datStr4 = (stockerAdditionalTradingStats ? '<div>'
- + '<div style="display: inline-block; padding: 1px 8px;position:relative;margin:-10px;left:20px;">'
- + '<div style="font-size:10px;color:rgba(255,255,255,0.8);">' + 'Profitable stocks: <span id="profitableStocks">0</span>.'
- + '<div style="display: inline-block; padding: 1px 8px;">'
- + '<div style="font-size:10px;color:rgba(255,255,255,0.8);">' + 'Unprofitable stocks: <span id="unprofitableStocks">0</span>.'
- + '<div style="display: inline-block; padding: 1px 8px;">'
- + '<div style="font-size:10px;color:rgba(255,255,255,0.8);">' + 'Profitable trades: <span id="profitableTrades">0</span>.'
- + '<div style="display: inline-block; padding: 1px 8px;">'
- + '<div style="font-size:10px;color:rgba(255,255,255,0.8);">' + 'Unprofitable trades: <span id="unprofitableTrades">0</span>.'
- + '<div style="display: inline-block; padding: 1px 8px;">'
- + '<div style="font-size:10px;color:rgba(255,255,255,0.8);">' + 'Average profit per trade: <span id="averageProfit">$0</span>.'
- + '<div style="display: inline-block; padding: 1px 8px;">'
- + '<div style="font-size:10px;color:rgba(255,255,255,0.8);">' + 'Average loss per trade: <span id="averageLoss">$0</span>.'
- + '</div>'
- + '</div>' : '');
- l('bankHeader').firstChild.insertAdjacentHTML('beforeend', datStr);
- if (stockerAdditionalTradingStats) {
- l('bankHeader').firstChild.insertAdjacentHTML('beforeend', datStr2);
- l('bankHeader').firstChild.insertAdjacentHTML('beforeend', datStr3);
- l('bankHeader').firstChild.insertAdjacentHTML('beforeend', datStr4);
- }
- CookiStocker.ReplaceGameMenu();
- /* let M = {}
- M.parent=Game.Objects['Bank'];
- M.parent.minigame=M;
- M = Game.Objects['Bank'].minigame;
- */ let market = Game.Objects['Bank'].minigame.goodsById; // read market
- console.log('Reading the market:');
- stockList.startingProfits = Game.Objects['Bank'].minigame.profit;
- for (let i = 0; i < market.length; i++){
- stockList.Goods.push({
- name: market[i].name,
- stock: market[i].stock,
- currentPrice: market[i].val,
- mode: market[i].mode,
- lastMode: market[i].mode,
- lastDur: market[i].dur,
- unchangedDur: 0,
- dropCount: 0,
- riseCount: 0,
- profit: 0,
- someSold: false,
- someBought: false,
- });
- console.log('Stock: ' + market[i].name.replace('%1', Game.bakeryName) + ' Status: ' + modeDecoder[market[i].mode] + ' at $' + market[i].val + (market[i].stock ? ' (own)' : ''));
- }
- CookiStocker.TradingStats();
- if (stockerForceLoopUpdates)
- Game.Objects['Bank'].minigame.secondsPerTick = stockerLoopFrequency / 1000;
- var stockerLoop = setInterval(function() {
- let doUpdate = false;
- // setting stockerForceLoopUpdates to true will make the logic loop force the market to tick every time it triggers,
- // making this an obvious cheat, and i will personally resent you.
- //
- // but
- // if you backup your save and set stockerLoopFrequency to like 10 milliseconds it looks very fun and effective.
- // yes, this is how i made the gif on the steam guide page. [Comment by Gingerguy.]
- if (!stockerForceLoopUpdates)
- stockerLoopFrequency = Game.Objects['Bank'].minigame.secondsPerTick * 500; // Keep up to date
- const smallDelta = 3;
- const largeDelta = 4;
- const alwaysBuyBelow = 2;
- const neverSellBelow = 11;
- setTimeout(function waitForGame() {
- if (typeof Game !== 'object' || !Game.ready) {
- setTimeout(waitForGame, 500);
- }
- })
- let M = CookiStocker;
- M.Achievements = [];
- // M.Achievements.push(CCSE.NewAchievement('Plasmic assets', 'Have your stock market profits surpass <b>$100 million</b>.<p>This will get you charged up!</q><q>Your warehouse companies double their space.</q>',[12,33]));
- // M.Achievements.push(CCSE.NewAchievement('Bose-Einstein Condensed Assets', 'Have your stock market profits surpass <b>$500 million</b>.<q>You have so many assets, we need to condense them!</q><q>Your warehouse companies double their space.</q>', [18,33]));
- Game.last.pool = 'shadow';
- // Game.Achievements['Plasmic Assets'].won = 0;
- // Game.Achievements['Bose-Einstein Condensed Assets'].won = 0;
- for(var i = 0; i < M.Achievements.length; i++) M.Achievements[i].order = 1002000 + i / 100;
- market = Game.Objects['Bank'].minigame.goodsById; // update market
- for (let i = 0; i < market.length; i++) {
- let lastPrice = stockList.Goods[i].currentPrice;
- let currentPrice = market[i].val;
- // update stockList
- stockList.Goods[i].stock = market[i].stock;
- stockList.Goods[i].currentPrice = market[i].val;
- stockList.Goods[i].mode = market[i].mode;
- let md = stockList.Goods[i].mode;
- let lmd = stockList.Goods[i].lastMode;
- let lastStock = market[i].stock;
- let deltaPrice = largeDelta;
- let stockName = stockList.Goods[i].name.replace('%1', Game.bakeryName);
- // Our ceilingPrice is the maximum of the bank ceiling and the (deprecated but still useful) stock ceiling
- let ceilingPrice = Math.max(10*(i+1) + Game.Objects['Bank'].level + 49, 97 + Game.Objects['Bank'].level * 3);
- if (Game.ObjectsById[i+2].amount == 0) { // stock must be active
- console.log(`${stockName} stock is inactive`);
- continue;
- }
- if (lmd == md && (stockList.Goods[i].stock && (md == 2 || md == 4) || // Make selling into a downturn easier
- !stockList.Goods[i].stock && (md == 1 || md == 3))) // Make buying into an upturn easier
- deltaPrice = smallDelta;
- if (md != lmd && (md == 3 && lmd != 1 || md == 4 && lmd != 2 || md == 1 && lmd != 3 || md == 2 && lmd != 4)) {
- stockList.Goods[i].dropCount = 0;
- stockList.Goods[i].riseCount = 0;
- } else if (currentPrice > lastPrice) {
- stockList.Goods[i].dropCount = 0;
- stockList.Goods[i].riseCount++;
- } else if (currentPrice < lastPrice) {
- stockList.Goods[i].riseCount = 0;
- stockList.Goods[i].dropCount++;
- }
- if (stockList.Goods[i].lastDur != market[i].dur || ++stockList.Goods[i].unchangedDur > 1) {
- stockList.Goods[i].unchangedDur = 0;
- doUpdate = true;
- }
- if (stockerConsoleAnnouncements && doUpdate) { // Tick tick
- if (md == lmd)
- console.log(`${stockName} mode is unchanged at ${lmd} [${modeDecoder[lmd]}] at $${Beautify(currentPrice, 2)}`);
- else
- console.log(`MODE CHANGE ${stockName} old mode was ${lmd} [${modeDecoder[lmd]}] and new mode is ${md} [${modeDecoder[md]}] at $${Beautify(currentPrice, 2)}`);
- }
- stockList.Goods[i].lastDur = market[i].dur;
- if ( // buy conditions
- (
- currentPrice < alwaysBuyBelow || md != 4 && ((currentPrice > lastPrice &&
- stockList.Goods[i].riseCount >= deltaPrice || (md == 1 || md == 3) && md != lmd ||
- md == 0 && !stockList.Goods[i].someSold && stockList.Goods[i].dropCount < deltaPrice &&
- currentPrice >= 10) && (currentPrice < ceilingPrice || md == 1 || md == 3))
- )
- && (((Game.Objects['Bank'].minigame.getGoodMaxStock(market[i]) * Game.cookiesPsRawHighest) < (Game.cookies * 0.05)) && Game.Objects['Bank'].minigame.brokers >= stockerMinBrokers)
- && Game.Objects['Bank'].minigame.buyGood(i,10000) // actual buy attempt
- )
- {
- // buying
- console.log(`Buy: ${Game.Objects['Bank'].minigame.getGoodMaxStock(market[i]) * Game.cookiesPsRawHighest}, Max: ${Game.cookies * .03}`);
- let mode = (lmd != md) ? 'is no longer in ' + modeDecoder[lmd] + ' mode' : 'is ';
- let units = market[i].stock - lastStock;
- stockList.Goods[i].someBought = true;
- stockList.Goods[i].stock = market[i].stock;
- if (market[i].prevBuyMode1 != undefined)
- {
- market[i].prevBuyMode1 = lmd;
- market[i].prevBuyMode2 = md;
- }
- market[i].buyTime = Date.now();
- if (typeof StockAssistant != 'undefined')
- {
- StockAssistant.stockData.goods[i].boughtVal = market[i].prev;
- StockAssistant.buyGood(i);
- }
- stockList.Purchases++;
- if (stockerTransactionNotifications)
- if (currentPrice >= 2) Game.Notify(`Buying ${stockName} ${new Date().toLocaleTimeString([], {hourCycle: 'h23', hour: '2-digit', minute: '2-digit'})}`,`Buying ${units} unit${(units > 1 ? 's' : '')}. The stock ${mode} at $${Beautify(market[i].prev, 2)} per unit (your buying price) and is in ${modeDecoder[md]} mode now.`,goodIcons[i],stockerFastNotifications);
- else Game.Notify(`Buying ${stockName} ${new Date().toLocaleTimeString([], {hourCycle: 'h23', hour: '2-digit', minute: '2-digit'})}`, `Buying ${units} unit${(units > 1 ? 's' : '')}. The price has dropped below $2 per unit, and your buying price is $${Beautify(market[i].prev, 2)}.`,goodIcons[i],stockerFastNotifications);
- if (stockerConsoleAnnouncements) console.log('=====$$$=== Buying '+ stockName + ' at $' + Beautify(market[i].prev, 2));
- } else if ( // sell conditions
- stockList.Goods[i].stock > 0 && (currentPrice < lastPrice &&
- stockList.Goods[i].dropCount >= deltaPrice ||
- (md == 2 || md == 4) && md != lmd) && currentPrice >= neverSellBelow // not near the bottom
- )
- {
- let profit = 0;
- let strProfit = 'profit '
- let mode = (lmd != md) ? 'is no longer in ' + modeDecoder[lmd] + ' mode and ' : '';
- if (!Game.Objects['Bank'].minigame.sellGood(i,stockList.Goods[i].stock)) {
- stockList.Goods[i].lastMode = stockList.Goods[i].mode;
- continue;
- }
- stockList.Goods[i].someSold = true;
- market[i].prevSale = market[i].val;
- market[i].prevSellMode1 = lmd;
- market[i].prevSellMode2 = md;
- market[i].sellTime = Date.now();
- if (typeof StockAssistant != 'undefined')
- StockAssistant.sellGood(i);
- stockList.Sales++;
- profit = (market[i].val - market[i].prev) * stockList.Goods[i].stock;
- stockList.Goods[i].profit += profit;
- if (profit > 0) {
- stockList.grossProfits += profit;
- stockList.profitableTrades++;
- /* if (Game.Objects['Bank'].minigame.profit >= 100000000 && !Game.Achievements['Plasmic assets'].won) {
- Game.Win('Plasmic assets');
- Game.Achievements['Plasmic Assets'].won = 1 // Shouldn't be necessary
- for (let j = 0; j < market.length; j++) {
- market[j].building.highest = Game.Objects['Bank'].minigame.getGoodMaxStock(market[j]) * 2;
- }
- } else if (Game.Objects['Bank'].minigame.profit >= 500000000 && !Game.Achievements['Bose-Einstein Condensed Assets'].won) {
- Game.Win('Bose-Einstein Condensed Assets');
- Game.Achievements['Bose-Einstein Condensed Assets'].won = 1 // Shouldn't be necessary
- for (let j = 0; j < market.length; j++) {
- market[j].building.highest = Game.Objects['Bank'].minigame.getGoodMaxStock(market[j]) * 2;
- }
- }
- */ } else {
- stockList.grossLosses += -profit;
- stockList.unprofitableTrades++;
- }
- stockList.netProfits += profit;
- stockerModeProfits[lmd][md][0] += profit;
- stockerModeProfits[lmd][md][1] += profit;
- stockerModeProfits[lmd][md][2]++;
- if (profit < 0)
- {
- strProfit = 'loss ';
- profit = -profit;
- }
- if (stockerTransactionNotifications) Game.Notify(`Selling ${stockName} ${new Date().toLocaleTimeString([], {hourCycle: 'h23', hour: '2-digit', minute: '2-digit'})}`,`Selling ${stockList.Goods[i].stock} unit${(stockList.Goods[i].stock > 1 ? 's' : '')} at a price of $${Beautify(market[i].val, 2)} per unit for a ${strProfit} of $${Beautify(profit, 2)} and total revenue of $${Beautify(market[i].val*stockList.Goods[i].stock, 2)}, which is added to the total market profits. The stock ${mode} is in ${modeDecoder[md]} mode now. Bought at a price of $${Beautify(market[i].prev, 2)} per unit.`,goodIcons[i],stockerFastNotifications);
- if (stockerConsoleAnnouncements) console.log(`=====$$$=== Selling ${stockName} at $${Beautify(market[i].val, 2)} for a ${strProfit}of $${Beautify(profit, 2)} and total revenue of $${Beautify(market[i].val*stockList.Goods[i].stock, 2)}. Last bought at $${Beautify(market[i].prev, 2)}.`);
- }
- stockList.Profits = Game.Objects['Bank'].minigame.profit - stockList.startingProfits;
- stockList.Goods[i].lastMode = stockList.Goods[i].mode;
- }
- stockList.profitableStocks = stockList.unprofitableStocks = 0;
- for (let i = 0; i < market.length; i++) { // Must recalculate the whole list on every pass
- if (stockList.Goods[i].profit > 0)
- stockList.profitableStocks++;
- else if (stockList.Goods[i].profit < 0)
- stockList.unprofitableStocks++;
- }
- CookiStocker.TradingStats();
- },stockerLoopFrequency);
- let stockerModeProfits = [
- [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]],
- [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]],
- [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]],
- [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]],
- [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]],
- [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
- ];
- if (stockerActivityReport || stockerConsoleAnnouncements) {
- var stockerReportInterval = setInterval(function() {
- let j, k;
- if (stockerActivityReport)
- if ((stockList.Purchases + stockList.Sales) == 0) {
- Game.Notify(
- `CookiStocker report ${new Date().toLocaleTimeString([], {hourCycle: 'h23', hour: '2-digit', minute: '2-digit'})}`,
- `This session has been running for ${stockerTimeBeautifier(stockList.Uptime)}, but no good investment opportunities were detected! Luck is not on our side, yet.`
- ,[1, 33],stockerFastNotifications
- );
- } else {
- Game.Notify(
- `CookiStocker report ${new Date().toLocaleTimeString([], {hourCycle: 'h23', hour: '2-digit', minute: '2-digit'})}`,
- `This session has been running for ${stockerTimeBeautifier(stockList.Uptime)} and has made $${Beautify(stockList.netProfits, 0)} in net profits and $${Beautify(stockList.Profits, 0)} in revenue (displayed profits) in ${Beautify(stockList.Purchases, 0)} purchases and ${Beautify(stockList.Sales, 0)} sales.`,[1, 33],stockerFastNotifications
- );
- }
- if (stockerConsoleAnnouncements) {
- let totalProfits = 0;
- let subtotalProfits = 0;
- let deltaTotalProfits = 0;
- let deltaSubtotalProfits = 0;
- let totalTrades = 0;
- let subtotalTrades = 0;
- let profit = 0;
- let lastProfit = 0;
- let trades = 0;
- let strProfit = '';
- let strDeltaModeProfits = '';
- let strTrades = '';
- console.log(`Running for ${stockerTimeBeautifier(stockList.Uptime)} and made $${Beautify(stockList.netProfits, 0)}\n in net profits and $${Beautify(stockList.Profits, 0)} in revenue (displayed profits)\n in ${Beautify(stockList.Purchases, 0)} purchases and ${Beautify(stockList.Sales, 0)} sales.\nTotal number of stocks held: ${stockList.totalStocks}. Total shares: ${Beautify(stockList.totalShares, 0)}.\nTotal value: $${Beautify(stockList.totalValue)}. Unrealized profits: $${Beautify(stockList.unrealizedProfits, 2)}.\nTotal gross profits: $${Beautify(stockList.grossProfits, 0)}. Profitable stocks: ${stockList.profitableStocks}.\nProfitable trades: ${stockList.profitableTrades}. Average profit per trade: $${stockList.grossProfits ? Beautify(stockList.grossProfits / stockList.profitableTrades, 2) : 0}.\nTotal gross losses: $${Beautify(stockList.grossLosses, 0)}. Unprofitable stocks: ${stockList.unprofitableStocks}.\nUnprofitable trades: ${stockList.unprofitableTrades}. Average loss per trade: $${stockList.grossLosses ? Beautify(stockList.grossLosses / stockList.unprofitableTrades, 2) : 0}.`);
- // Stats for individual modes
- for (j = 0; j < 6; j++)
- for (k = 0; k < 6; k++)
- totalProfits += stockerModeProfits[j][k][0];
- for (j = 0; j < 6; j++)
- for (k = 0; k < 6; k++) {
- profit = stockerModeProfits[j][k][0];
- lastProfit = stockerModeProfits[j][k][1];
- trades = stockerModeProfits[j][k][2];
- strProfit = profit ? ((100 * profit/totalProfits).toFixed(2) + '%').padStart(8) : '';
- strDeltaModeProfits = (lastProfit ? '$' + Beautify(lastProfit, 2) : '').padStart(14);
- strTrades = trades ? (' ' + trades + ' trade' + (trades > 1 ? 's' : ' ')).padStart(13) : '';
- console.log(`Profits[${j}][${k}] = $${Beautify(profit, 2).padEnd(14)} ${strProfit}${strDeltaModeProfits}${strTrades}`);
- subtotalProfits += profit;
- deltaSubtotalProfits += lastProfit;
- deltaTotalProfits += lastProfit;
- subtotalTrades += trades;
- totalTrades += trades;
- }
- // Stats for subtotals
- for (j = 0; j < 6; j++) {
- subtotalProfits = 0;
- deltaSubtotalProfits = 0;
- subtotalTrades = 0;
- for (k = 0; k < 6; k++) {
- subtotalProfits += stockerModeProfits[j][k][0];
- deltaSubtotalProfits += stockerModeProfits[j][k][1];
- subtotalTrades += stockerModeProfits[j][k][2];
- stockerModeProfits[j][k][1] = 0;
- }
- strProfit = subtotalProfits ? ((100 * subtotalProfits/totalProfits).toFixed(2) + '%').padStart(8) : '';
- strDeltaModeProfits = (deltaSubtotalProfits ? '$' + Beautify(deltaSubtotalProfits, 2) : '').padStart(14);
- strTrades = subtotalTrades ? (' ' + subtotalTrades + ' trade' + (subtotalTrades > 1 ? 's' : ' ')).padStart(13) : '';
- console.log(`Subtotal[${j}]`.padEnd(14) + `= $${Beautify(subtotalProfits, 2).padEnd(14)} ${strProfit}${strDeltaModeProfits}${strTrades}`);
- subtotalProfits = 0;
- deltaSubtotalProfits = 0;
- subtotalTrades = 0;
- }
- // Stats for totals
- stockList.hourlyProfits = totalProfits * (stockerLoopFrequency / 60_000) * 3600_000 / stockList.Uptime;
- stockList.dailyProfits = totalProfits * (stockerLoopFrequency / 60_000) * 86_400_000 / stockList.Uptime;
- if (!stockerForceLoopUpdates) {
- stockList.hourlyProfits *= 2;
- stockList.dailyProfits *= 2;
- }
- console.log(`Total profits = $${Beautify(totalProfits, 2).padEnd(22)}${(deltaTotalProfits ? '$' + Beautify(deltaTotalProfits, 2) : '').padStart(15)}${totalTrades ? (' ' + totalTrades + ' trade' + (totalTrades > 1 ? 's' : ' ')).padStart(13) : ''}`);
- console.log(`Profit per hour = $${Beautify(stockList.hourlyProfits, 2)}; profit per day = $${Beautify(stockList.dailyProfits, 2)}`);
- console.log(`That's ${Beautify(stockList.hourlyProfits * Game.cookiesPsRawHighest, 2)} cookies and ${Beautify(stockList.dailyProfits * Game.cookiesPsRawHighest, 2)} cookies, respectively. It's also ${Beautify((stockList.hourlyProfits / 3600), 0)} times your highest raw cookie production rate.`);
- if (stockerForceLoopUpdates) {
- console.log('In unadjusted, true numbers:');
- stockList.hourlyProfits *= 60_000 / stockerLoopFrequency;
- stockList.dailyProfits *= 60_000 / stockerLoopFrequency;
- console.log(`Profit per hour = $${Beautify(stockList.hourlyProfits, 2)}; profit per diem = $${Beautify(stockList.dailyProfits, 2)}`);
- console.log(`That's ${Beautify(stockList.hourlyProfits * Game.cookiesPsRawHighest, 2)} cookies and ${Beautify(stockList.dailyProfits * Game.cookiesPsRawHighest, 2)} cookies, respectively. It's also ${Beautify((stockList.hourlyProfits / 3600), 0)} times your highest raw cookie production rate.`);
- }
- console.log('------------------------------------------------------------------');
- }
- CookiStocker.TradingStats();
- },stockerActivityReportFrequency);
- }
- },
- })
- CookiStocker.DataStats = function(id, value) {
- let it = l(id);
- it.innerHTML = (value < 0 ? "-" : "") + (id.includes('ookies') ? '' : '$') + Beautify(Math.abs(value), 0);
- if (value > 0) {
- it.classList.add("green");
- it.classList.remove("red");
- } else if (value < 0) {
- it.classList.add("red");
- it.classList.remove("green");
- }
- }
- CookiStocker.TradingStats = function()
- {
- let j;
- let now = Date.now();
- let market = Game.Objects['Bank'].minigame.goodsById;
- if (now > stockList.lastTime + stockerActivityReportFrequency + 500) { // Were we sleeping?
- stockList.Start += now - stockList.lastTime - stockerActivityReportFrequency;
- }
- stockList.totalStocks = 0;
- stockList.totalShares = 0;
- stockList.totalValue = 0;
- stockList.unrealizedProfits = 0;
- for (j = 0; j < market.length; j++) {
- if (stockList.Goods[j].stock) {
- stockList.totalStocks++;
- stockList.totalShares += stockList.Goods[j].stock;
- stockList.totalValue += stockList.Goods[j].stock * stockList.Goods[j].currentPrice;
- stockList.unrealizedProfits += (market[j].val - market[j].prev) * stockList.Goods[j].stock;
- }
- }
- CookiStocker.DataStats("Profits", stockList.netProfits);
- CookiStocker.DataStats("profitsHour", stockList.hourlyProfits);
- CookiStocker.DataStats("profitsDay", stockList.dailyProfits);
- CookiStocker.DataStats("grossProfits", stockList.grossProfits);
- CookiStocker.DataStats("grossLosses", -stockList.grossLosses);
- stockList.lastTime = now;
- stockList.Uptime = Math.floor((now - stockList.Start) / 1000) * 1000;
- stockList.Uptime -= stockList.Uptime % stockerLoopFrequency;
- let uptimeHours = Math.floor(stockList.Uptime / 3600000) + ':';
- let it = l("runTime");
- if (stockerForceLoopUpdates) {
- it.innerHTML = uptimeHours + new Date(stockList.Uptime).toLocaleTimeString([], {minute: '2-digit', second: '2-digit'});
- } else {
- let uptimeMinutes = (Math.floor(stockList.Uptime / 60000)) % 60;
- it.innerHTML = uptimeHours + (uptimeMinutes < 10 ? '0' : '') + uptimeMinutes;
- }
- if (stockerAdditionalTradingStats) {
- CookiStocker.DataStats("netCookies", stockList.netProfits * Game.cookiesPsRawHighest);
- CookiStocker.DataStats("cookiesHour", stockList.hourlyProfits * Game.cookiesPsRawHighest);
- CookiStocker.DataStats("cookiesDay", stockList.dailyProfits * Game.cookiesPsRawHighest);
- l("Purchases").innerHTML = stockList.Purchases;
- l("Sales").innerHTML = stockList.Sales;
- l("cpsMultiple").innerHTML = Beautify(stockList.hourlyProfits / 3600, 3);
- l("stocksHeld").innerHTML = stockList.totalStocks;
- l("totalShares").innerHTML = Beautify(stockList.totalShares);
- CookiStocker.DataStats("totalValue", stockList.totalValue);
- CookiStocker.DataStats("unrealizedProfits", stockList.unrealizedProfits);
- l("profitableStocks").innerHTML = stockList.profitableStocks;
- l("unprofitableStocks").innerHTML = stockList.unprofitableStocks
- l("profitableTrades").innerHTML = stockList.profitableTrades;
- l("unprofitableTrades").innerHTML = stockList.unprofitableTrades;
- CookiStocker.DataStats("averageProfit", stockList.profitableTrades ? stockList.grossProfits / stockList.profitableTrades : 0);
- CookiStocker.DataStats("averageLoss", stockList.unprofitableTrades ? -stockList.grossLosses / stockList.unprofitableTrades : 0);
- }
- if (it.innerHTML == '')
- it.innerHTML = "0:00";
- }
- CookiStocker.ReplaceGameMenu = function()
- {
- Game.customOptionsMenu.push(function()
- {
- // CCSE.AppendCollapsibleOptionsMenu(CookiStocker.name, CookiStocker.getMenuString());
- });
- Game.customStatsMenu.push(function()
- {
- CCSE.AppendStatsVersionNumber(CookiStocker.name, CookiStocker.version);
- if (CookiStocker.isLoaded && typeof Game === 'object' && Game.ready) {
- console.log("Profit: $" + Game.Objects['Bank'].minigame.profit);
- let profit = Game.Objects['Bank'].minigame.profit;
- console.log('profit: ' + profit);
- if (profit)
- CCSE.AppendStatsGeneral('<div class="listing"><b>Stock Market has earned you :</b> <div class="stock price"> $' + Beautify(profit) + ' (' + Game.tinyCookie() + Beautify(profit * Game.cookiesPsRawHighest, 3) + '</div></div>');
- }
- });
- }
- CookiStocker.getMenuString = function() {
- let str = '';
- }
- CookiStocker.save = function() {
- var str = '';
- let market = Game.Objects['Bank'].minigame.goodsById;
- str += parseInt(stockList.Check);
- for (let i = 0; i < market.length; i++) {
- str += '_' + parseInt(stockList.Goods[i].name);
- str += '_' + parseInt(stockList.Goods[i].stock);
- str += '_' + parseInt(stockList.Goods[i].val);
- str += '_' + parseInt(stockList.Goods[i].currentPrice);
- str += '_' + parseInt(stockList.Goods[i].mode);
- str += '_' + parseInt(stockList.Goods[i].lastMode);
- str += '_' + parseInt(stockList.Goods[i].lastDur);
- str += '_' + parseInt(stockList.Goods[i].unchangedDur);
- str += '_' + parseInt(stockList.Goods[i].dropCount);
- str += '_' + parseInt(stockList.Goods[i].riseCount);
- str += '_' + parseInt(stockList.Goods[i].profit);
- str += '_' + parseInt(stockList.Goods[i].someSold);
- str += '_' + parseInt(stockList.Goods[i].someBought);
- }
- str += '_' + parseInt(stockList.Start);
- str += '_' + parseInt(stockList.lastTime);
- str += '_' + parseInt(stockList.startingProfits);
- str += '_' + parseInt(stockList.Profits);
- str += '_' + parseInt(stockList.netProfits);
- str += '_' + parseInt(stockList.grossProfits);
- str += '_' + parseInt(stockList.grossLosses);
- str += '_' + parseInt(stockList.totalStocks);
- str += '_' + parseInt(stockList.totalShares);
- str += '_' + parseInt(stockList.totalValue);
- str += '_' + parseInt(stockList.unrealizedProfits);
- str += '_' + parseInt(stockList.profitableStocks);
- str += '_' + parseInt(stockList.unprofitableStocks);
- str += '_' + parseInt(stockList.profitableTrades);
- str += '_' + parseInt(stockList.unprofitableTrades);
- str += '_' + parseInt(stockList.Purchases);
- str += '_' + parseInt(stockList.Sales);
- str += '_' + parseInt(stockList.Uptime);
- str += '_' + parseInt(stockList.hourlyProfits);
- str += '_' + parseInt(stockList.dailyProfits);
- return str;
- }
- CookiStocker.load = function(str) {
- let i = 0;
- let spl = str.split('_');
- if(!str) return false;
- let market = Game.Objects['Bank'].minigame.goodsById;
- stockList.Check = parseInt(spl[i++] || 0);
- for (let j = 0; j < market.length; j++) {
- stockList.Goods[j].name = parseInt(spl[i++] || 0);
- stockList.Goods[j].stock = parseInt(spl[i++] || 0);
- stockList.Goods[j].val = parseInt(spl[i++] || 0);
- stockList.Goods[j].currentPrice = parseInt(spl[i++] || 0);
- stockList.Goods[j].mode = parseInt(spl[i++] || 0);
- stockList.Goods[j].lastMode = parseInt(spl[i++] || 0);
- stockList.Goods[j].lastDur = parseInt(spl[i++] || 0);
- stockList.Goods[j].unchangedDur = parseInt(spl[i++] || 0);
- stockList.Goods[j].dropCount = parseInt(spl[i++] || 0);
- stockList.Goods[j].riseCount = parseInt(spl[i++] || 0);
- stockList.Goods[j].profit = parseInt(spl[i++] || 0);
- stockList.Goods[j].someSold = parseInt(spl[i++] || 0);
- stockList.Goods[j].someBought = parseInt(spl[i++] || 0);
- }
- stockList.Start = parseInt(spl[i++] || 0);
- stockList.lastTime = parseInt(spl[i++] || 0);
- stockList.startingProfits = parseInt(spl[i++] || 0);
- stockList.Profits = parseInt(spl[i++] || 0);
- stockList.netProfits = parseInt(spl[i++] || 0);
- stockList.grossProfits = parseInt(spl[i++] || 0);
- stockList.grossLosses = parseInt(spl[i++] || 0);
- stockList.totalStocks = parseInt(spl[i++] || 0);
- stockList.totalShares = parseInt(spl[i++] || 0);
- stockList.totalValue = parseInt(spl[i++] || 0);
- stockList.unrealizedProfits = parseInt(spl[i++] || 0);
- stockList.profitableStocks = parseInt(spl[i++] || 0);
- stockList.unprofitableStocks = parseInt(spl[i++] || 0);
- stockList.profitableTrades = parseInt(spl[i++] || 0);
- stockList.unprofitableTrades = parseInt(spl[i++] || 0);
- stockList.Purchases = parseInt(spl[i++] || 0);
- stockList.Sales = parseInt(spl[i++] || 0);
- stockList.Uptime = parseInt(spl[i++] || 0);
- stockList.hourlyProfits = parseInt(spl[i++] || 0);
- stockList.dailyProfits = parseInt(spl[i++] || 0);
- }
- CookiStocker.reset = function(hard) {
- let M = CookiStocker;
- stockList.Goods = [];
- for (let i = 0; i < market.length; i++) {
- stockList.Goods.push({
- name: market[i].name,
- stock: market[i].stock,
- currentPrice: market[i].val,
- mode: market[i].mode,
- lastMode: market[i].mode,
- lastDur: market[i].dur,
- unchangedDur: 0,
- dropCount: 0,
- riseCount: 0,
- profit: 0,
- someSold: false,
- someBought: false,
- });
- }
- stockList.Start = Date.now() + 500;
- stockList.lastTime = Date.now() + 500;
- stockList.startingProfits = 0;
- stockList.Profits = 0;
- stockList.netProfits = 0;
- stockList.grossProfits = 0;
- stockList.grossLosses = 0;
- stockList.totalStocks = 0;
- stockList.totalShares = 0;
- stockList.totalValue = 0;
- stockList.unrealizedProfits = 0;
- stockList.profitableStocks = 0;
- stockList.unprofitableStocks = 0;
- stockList.profitableTrades = 0;
- stockList.unprofitableTrades = 0;
- stockList.Purchases = 0;
- stockList.Sales = 0;
- stockList.Uptime = 0;
- stockList.hourlyProfits = 0;
- stockList.dailyProfits = 0;
- if (hard) {
- for (var i = 0; i < M.Achievements.length; i++) M.Achievements[i].won = 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment