// ==UserScript== // @name Kitten Food Tracker // @namespace http://tampermonkey.net/nkc/kitten-food-tracker // @version 0.1 // @description make sure yr kittens don't starve // @author nkc // @match http://bloodrizer.ru/games/kittens/* // @grant none // @downloadURL https://update.greasyfork.icu/scripts/21514/Kitten%20Food%20Tracker.user.js // @updateURL https://update.greasyfork.icu/scripts/21514/Kitten%20Food%20Tracker.meta.js // ==/UserScript== function catnipPerTick (seasonStr) { var season = null; switch (seasonStr) { case 'spring': season = game.calendar.seasons[0]; break; case 'summer': season = game.calendar.seasons[1]; break; case 'fall': season = game.calendar.seasons[2]; break; case 'winter': season = game.calendar.seasons[3]; break; default: console.log('season should be one of spring/summer/fall/winter'); } var catnip = game.calcResourcePerTick('catnip', season); return catnip; } function catnipPerDayMap () { var ticksPerDay = 1 / game.calendar.dayPerTick; var oldPause = game.isPaused; var oldWeather = game.calendar.weather; game.calendar.weather = 'warm'; var warmMap = { 'spring': catnipPerTick('spring') * ticksPerDay, 'summer': catnipPerTick('summer') * ticksPerDay, 'fall': catnipPerTick('fall') * ticksPerDay, 'winter': catnipPerTick('winter') * ticksPerDay }; game.calendar.weather = null; var avgMap = { 'spring': catnipPerTick('spring') * ticksPerDay, 'summer': catnipPerTick('summer') * ticksPerDay, 'fall': catnipPerTick('fall') * ticksPerDay, 'winter': catnipPerTick('winter') * ticksPerDay }; game.calendar.weather = 'cold'; var coldMap = { 'spring': catnipPerTick('spring') * ticksPerDay, 'summer': catnipPerTick('summer') * ticksPerDay, 'fall': catnipPerTick('fall') * ticksPerDay, 'winter': catnipPerTick('winter') * ticksPerDay }; game.calendar.weather = oldWeather; game.isPaused = oldPause; return {'warm': warmMap, 'avg': avgMap, 'cold': coldMap}; } function getTempRow (map, temp) { var row = '' + temp + '' + '' + game.getDisplayValueExt(map[temp].spring * game.calendar.daysPerSeason, true) + '' + '' + game.getDisplayValueExt(map[temp].summer * game.calendar.daysPerSeason, true) + '' + '' + game.getDisplayValueExt(map[temp].fall * game.calendar.daysPerSeason, true) + '' + '' + game.getDisplayValueExt(map[temp].winter * game.calendar.daysPerSeason, true) + '' + ''; return row; } function createSeasonTable (map) { var table = '' + '' + '' + getTempRow(map, 'warm') + getTempRow(map, 'avg') + getTempRow(map, 'cold') + '
SpringSummerFallWinter
'; return table; } function createInfoList (map) { var ticksPerDay = 1 / game.calendar.dayPerTick; var demandPerDay = game.getResourcePerTickStack('catnip')[12].value * ticksPerDay; var production = (map.avg.spring + map.avg.summer + map.avg.fall + map.avg.winter - 4 * demandPerDay) * game.calendar.daysPerSeason; var demand = demandPerDay * game.calendar.daysPerSeason * 4; var daysLeft = game.calendar.daysPerSeason - game.calendar.day; var winterDaysLeft = (game.calendar.season == 3) ? daysLeft : game.calendar.daysPerSeason; var coldWinter = (((map.cold.winter * winterDaysLeft) + game.resPool.get('catnip').value) > 0) ? 'yes' : 'no'; var productionLeft = 0; switch (game.calendar.season) { case 0: //spring productionLeft += map.cold.spring * daysLeft; productionLeft += map.cold.summer * game.calendar.daysPerSeason; productionLeft += map.cold.fall * game.calendar.daysPerSeason; productionLeft += map.cold.winter * game.calendar.daysPerSeason; break; case 1: //summer productionLeft += map.cold.summer * daysLeft; productionLeft += map.cold.fall * game.calendar.daysPerSeason; productionLeft += map.cold.winter * game.calendar.daysPerSeason; break; case 2: //fall productionLeft += map.cold.fall * daysLeft; productionLeft += map.cold.winter * game.calendar.daysPerSeason; break; case 3: //winter productionLeft += map.cold.winter * daysLeft; break; } var coldYear = ((productionLeft + game.resPool.get('catnip').value) > 0) ? 'yes' : 'no'; var list = '

' + 'Yearly Production (Avg):' + game.getDisplayValueExt(production, true) + '
' + 'Yearly Demand (Avg):' + game.getDisplayValueExt(demand, true) + '
' + 'Yearly Delta (Avg):' + game.getDisplayValueExt(production + demand, true) + '
' + 'Survive cold winter?:' + coldWinter + '
' + 'Survive cold year?:' + coldYear + '' + '

'; return list; } var updateKittenFood = function () { var catnipMap = catnipPerDayMap(); var table = createSeasonTable(catnipMap); var list = createInfoList(catnipMap); var advDiv = dojo.byId("advisorsContainer"); dojo.empty(advDiv); advDiv.innerHTML = '
' + table + list + '
'; }; game.updateAdvisors = function () {}; game.timer.addEvent(updateKittenFood, 10);