From 448922dbda8b4571215d3703bf22ffd9e2a5f6a4 Mon Sep 17 00:00:00 2001 From: Aktanusa Date: Sat, 21 Jun 2014 13:51:44 -0400 Subject: [PATCH] Added 1 extra stat in chain/added expand/collape config to stats/reorganize menu code --- CookieMonster.js | 436 +++++++++++++++++++++++++++++------------------ src/Cache.js | 17 +- src/Config.js | 32 +++- src/Disp.js | 366 ++++++++++++++++++++++----------------- src/Main.js | 2 +- 5 files changed, 517 insertions(+), 336 deletions(-) diff --git a/CookieMonster.js b/CookieMonster.js index 9b8e542..88a9616 100644 --- a/CookieMonster.js +++ b/CookieMonster.js @@ -113,18 +113,37 @@ CM.Cache.RemakeChain = function() { base = CM.Cache.ChainWrathReward; } var count = 1; - while (base == base + count) { - count++; + if (maxPayout < base) { + CM.Cache.Chain = 0; + } + else { + count = base > Math.pow(2, 53) ? Math.pow(2, Math.floor(Math.log(base) / Math.log(2)) - 53) : 1; + while (base == base + count) { + count++; + } + CM.Cache.Chain = (base + count) / 0.25; } - CM.Cache.Chain = (base + count) / 0.25; CM.Cache.ChainFrenzyReward = CM.Cache.MaxChainMoni(7, maxPayout * 7); - count = 1; - while(CM.Cache.ChainFrenzyReward == CM.Cache.ChainFrenzyReward + count) { - count++; + CM.Cache.ChainFrenzyWrathReward = CM.Cache.MaxChainMoni(6, maxPayout * 7); + + if (CM.Cache.ChainFrenzyReward > CM.Cache.ChainFrenzyWrathReward) { + base = CM.Cache.ChainFrenzyReward; + } + else { + base = CM.Cache.ChainFrenzyWrathReward; + } + if ((maxPayout * 7) < base) { + CM.Cache.ChainFrenzy = 0; + } + else { + count = base > Math.pow(2, 53) ? Math.pow(2, Math.floor(Math.log(base) / Math.log(2)) - 53) : 1; + while(base == base + count) { + count++; + } + CM.Cache.ChainFrenzy = (base + count) / 0.25; } - CM.Cache.ChainFrenzy = (CM.Cache.ChainFrenzyReward + count) / 0.25; } CM.Cache.RemakeSeaSpec = function() { @@ -144,6 +163,7 @@ CM.Cache.ChainReward = 0; CM.Cache.ChainWrathReward = 0; CM.Cache.ChainFrenzy = 0; CM.Cache.ChainFrenzyReward = 0; +CM.Cache.ChainFrenzyWrathReward = 0; /********** * Config * **********/ @@ -159,9 +179,25 @@ CM.LoadConfig = function() { // Check values var mod = false; for (var i in CM.ConfigDefault) { - if (CM.Config[i] == undefined || !(CM.Config[i] > -1 && CM.Config[i] < CM.ConfigData[i].label.length)) { - mod = true; - CM.Config[i] = CM.ConfigDefault[i]; + if (i != 'StatsPref') { + if (CM.Config[i] == undefined || !(CM.Config[i] > -1 && CM.Config[i] < CM.ConfigData[i].label.length)) { + mod = true; + CM.Config[i] = CM.ConfigDefault[i]; + } + } + else { // Statistics Preferences + if (CM.Config[i] == undefined) { + mod = true; + CM.Config[i] = CM.ConfigDefault[i]; + } + else { + for (var j in CM.ConfigDefault.StatsPref) { + if (CM.Config[i][j] == undefined || !(CM.Config[i][j] > -1 && CM.Config[i][j] < 2)) { + mod = true; + CM.Config[i][j] = CM.ConfigDefault[i][j]; + } + } + } } } if (mod) CM.SaveConfig(CM.Config); @@ -208,6 +244,16 @@ CM.ToggleConfigDown = function(config) { CM.SaveConfig(CM.Config); } +CM.ToggleStatsConfig = function(config) { + if (CM.Config.StatsPref[config] == 0) { + CM.Config.StatsPref[config]++; + } + else { + CM.Config.StatsPref[config]--; + } + CM.SaveConfig(CM.Config); +} + CM.ConfigData.BotBar = {label: ['Bottom Bar OFF', 'Bottom Bar ON'], desc: 'Building Information', func: function() {CM.Disp.ToggleBotBar();}}; CM.ConfigData.TimerBar = {label: ['Timer Bar OFF', 'Timer Bar ON'], desc: 'Timers of Golden Cookie, Season Popup, Frenzy (Normal, Clot, Elder), Click Frenzy', func: function() {CM.Disp.ToggleTimerBar();}}; CM.ConfigData.BuildColor = {label: ['Building Colors OFF', 'Building Colors ON'], desc: 'Color code buildings', func: function() {CM.Disp.UpdateBuildings();}}; @@ -883,14 +929,7 @@ CM.Disp.UpdateTitle = function() { } } -CM.Disp.AddMenu = function() { - var title = function() { - var div = document.createElement('div'); - div.className = 'title'; - div.style.color = CM.Disp.colorBlue; - div.textContent = 'Cookie Monster Goodies'; - return div; - } +CM.Disp.AddMenuPref = function(title) { var header = function(text) { var div = document.createElement('div'); div.className = 'listing'; @@ -901,154 +940,135 @@ CM.Disp.AddMenu = function() { div.textContent = text; return div; } - - if (Game.onMenu == 'prefs') { - var frag = document.createDocumentFragment(); + + var frag = document.createDocumentFragment(); - frag.appendChild(title()); + frag.appendChild(title()); - var listing = function(config) { - var div = document.createElement('div'); - div.className = 'listing'; - var a = document.createElement('a'); - a.className = 'option'; - a.id = CM.ConfigPrefix + config; - a.onclick = function() {CM.ToggleConfigUp(config);}; - a.textContent = CM.Disp.GetConfigDisplay(config); - div.appendChild(a); - var label = document.createElement('label'); - label.textContent = CM.ConfigData[config].desc; - div.appendChild(label); - return div; - } - - frag.appendChild(header('Bars/Colors')); - frag.appendChild(listing('BotBar')); - frag.appendChild(listing('TimerBar')); - frag.appendChild(listing('BuildColor')); - frag.appendChild(listing('UpBarColor')); - frag.appendChild(header('Golden Cookie/Season Popup Emphasis')); - frag.appendChild(listing('Flash')); - frag.appendChild(listing('Sound')); - - var volConfig = 'Volume'; - var volume = document.createElement('div'); - volume.className = 'listing'; - var minus = document.createElement('a'); - minus.className = 'option'; - minus.onclick = function() {CM.ToggleConfigDown(volConfig);}; - minus.textContent = '-'; - volume.appendChild(minus); - var volText = document.createElement('span'); - volText.id = CM.ConfigPrefix + volConfig; - volText.textContent = CM.Disp.GetConfigDisplay(volConfig); - volume.appendChild(volText); - var plus = document.createElement('a'); - plus.className = 'option'; - plus.onclick = function() {CM.ToggleConfigUp(volConfig);}; - plus.textContent = '+'; - volume.appendChild(plus); - var volLabel = document.createElement('label'); - volLabel.textContent = CM.ConfigData[volConfig].desc; - volume.appendChild(volLabel); - frag.appendChild(volume); - - frag.appendChild(listing('GCTimer')); - frag.appendChild(listing('Title')); - frag.appendChild(header('Tooltip')); - frag.appendChild(listing('Tooltip')); - frag.appendChild(listing('ToolWarnCaut')); - frag.appendChild(listing('ToolWarnCautPos')); - frag.appendChild(header('Statistics')); - frag.appendChild(listing('Stats')); - frag.appendChild(listing('UpStats')); - frag.appendChild(listing('SayTime')); - frag.appendChild(header('Other')); - frag.appendChild(listing('Scale')); - - var resDef = document.createElement('div'); - resDef.className = 'listing'; - var resDefBut = document.createElement('a'); - resDefBut.className = 'option'; - resDefBut.onclick = function() {CM.RestoreDefault();}; - resDefBut.textContent = 'Restore Default'; - resDef.appendChild(resDefBut); - frag.appendChild(resDef); - - l('menu').childNodes[2].insertBefore(frag, l('menu').childNodes[2].childNodes[l('menu').childNodes[2].childNodes.length - 1]); - - CM.Disp.FormatButtonOnClickBak = l('formatButton').onclick; - l('formatButton').onclick = function() {Game.Toggle('format', 'formatButton', 'Short numbers OFF', 'Short numbers ON'); CM.Disp.RefreshScale();}; + var listing = function(config) { + var div = document.createElement('div'); + div.className = 'listing'; + var a = document.createElement('a'); + a.className = 'option'; + a.id = CM.ConfigPrefix + config; + a.onclick = function() {CM.ToggleConfigUp(config);}; + a.textContent = CM.Disp.GetConfigDisplay(config); + div.appendChild(a); + var label = document.createElement('label'); + label.textContent = CM.ConfigData[config].desc; + div.appendChild(label); + return div; } - else if (CM.Config.Stats == 1 && Game.onMenu == 'stats') { - var stats = document.createElement('div'); - stats.className = 'subsection'; + frag.appendChild(header('Bars/Colors')); + frag.appendChild(listing('BotBar')); + frag.appendChild(listing('TimerBar')); + frag.appendChild(listing('BuildColor')); + frag.appendChild(listing('UpBarColor')); + + frag.appendChild(header('Golden Cookie/Season Popup Emphasis')); + frag.appendChild(listing('Flash')); + frag.appendChild(listing('Sound')); + var volConfig = 'Volume'; + var volume = document.createElement('div'); + volume.className = 'listing'; + var minus = document.createElement('a'); + minus.className = 'option'; + minus.onclick = function() {CM.ToggleConfigDown(volConfig);}; + minus.textContent = '-'; + volume.appendChild(minus); + var volText = document.createElement('span'); + volText.id = CM.ConfigPrefix + volConfig; + volText.textContent = CM.Disp.GetConfigDisplay(volConfig); + volume.appendChild(volText); + var plus = document.createElement('a'); + plus.className = 'option'; + plus.onclick = function() {CM.ToggleConfigUp(volConfig);}; + plus.textContent = '+'; + volume.appendChild(plus); + var volLabel = document.createElement('label'); + volLabel.textContent = CM.ConfigData[volConfig].desc; + volume.appendChild(volLabel); + frag.appendChild(volume); + frag.appendChild(listing('GCTimer')); + frag.appendChild(listing('Title')); + + frag.appendChild(header('Tooltip')); + frag.appendChild(listing('Tooltip')); + frag.appendChild(listing('ToolWarnCaut')); + frag.appendChild(listing('ToolWarnCautPos')); + + frag.appendChild(header('Statistics')); + frag.appendChild(listing('Stats')); + frag.appendChild(listing('UpStats')); + frag.appendChild(listing('SayTime')); + + frag.appendChild(header('Other')); + frag.appendChild(listing('Scale')); + var resDef = document.createElement('div'); + resDef.className = 'listing'; + var resDefBut = document.createElement('a'); + resDefBut.className = 'option'; + resDefBut.onclick = function() {CM.RestoreDefault();}; + resDefBut.textContent = 'Restore Default'; + resDef.appendChild(resDefBut); + frag.appendChild(resDef); + + l('menu').childNodes[2].insertBefore(frag, l('menu').childNodes[2].childNodes[l('menu').childNodes[2].childNodes.length - 1]); + + CM.Disp.FormatButtonOnClickBak = l('formatButton').onclick; + l('formatButton').onclick = function() {Game.Toggle('format', 'formatButton', 'Short numbers OFF', 'Short numbers ON'); CM.Disp.RefreshScale();}; +} + +CM.Disp.AddMenuStats = function(title) { + var header = function(text, config) { + var div = document.createElement('div'); + div.className = 'listing'; + div.style.padding = '5px 16px'; + div.style.opacity = '0.7'; + div.style.fontSize = '17px'; + div.style.fontFamily = '\"Kavoon\", Georgia, serif'; + div.appendChild(document.createTextNode(text + ' ')); + span = document.createElement('span'); + span.style.cursor = 'pointer'; + span.style.display = 'inline-block'; + span.style.height = '14px'; + span.style.width = '14px'; + span.style.borderRadius = '7px'; + span.style.textAlign = 'center'; + span.style.backgroundColor = '#C0C0C0'; + span.style.color = 'black'; + span.style.fontSize = '13px'; + span.style.verticalAlign = 'middle'; + span.textContent = CM.Config.StatsPref[config] ? '+' : '-'; + span.onclick = function() {CM.ToggleStatsConfig(config); Game.UpdateMenu();}; + div.appendChild(span); + return div; + } + + var stats = document.createElement('div'); + stats.className = 'subsection'; + + stats.appendChild(title()); + + var listing = function(name, text) { + var div = document.createElement('div'); + div.className = 'listing'; + var b = document.createElement('b'); + b.textContent = name + ' : '; + div.appendChild(b); + div.appendChild(text); + return div; + } + + stats.appendChild(header('Lucky Cookies', 'Lucky')); + if (CM.Config.StatsPref.Lucky) { var luckyColor = (Game.cookies < CM.Cache.Lucky) ? CM.Disp.colorRed : CM.Disp.colorGreen; var luckyTime = (Game.cookies < CM.Cache.Lucky) ? CM.Disp.FormatTime((CM.Cache.Lucky - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : ''; var luckyColorFrenzy = (Game.cookies < CM.Cache.LuckyFrenzy) ? CM.Disp.colorRed : CM.Disp.colorGreen; var luckyTimeFrenzy = (Game.cookies < CM.Cache.LuckyFrenzy) ? CM.Disp.FormatTime((CM.Cache.LuckyFrenzy - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : ''; var luckyCur = Math.min(Game.cookies * 0.1, Game.cookiesPs * 60 * 20) + 13; - - var chainColor = (Game.cookies < CM.Cache.Chain) ? CM.Disp.colorRed : CM.Disp.colorGreen; - var chainTime = (Game.cookies < CM.Cache.Chain) ? CM.Disp.FormatTime((CM.Cache.Chain - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : ''; - var chainColorFrenzy = (Game.cookies < CM.Cache.ChainFrenzy) ? CM.Disp.colorRed : CM.Disp.colorGreen; - var chainTimeFrenzy = (Game.cookies < CM.Cache.ChainFrenzy) ? CM.Disp.FormatTime((CM.Cache.ChainFrenzy - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : ''; - var chainCurMax = Math.min(Game.cookiesPs * 60 * 60 * 3, Game.cookies * 0.25); - var chainCur = CM.Cache.MaxChainMoni(7, chainCurMax); - var chainCurWrath = CM.Cache.MaxChainMoni(6, chainCurMax); - - var possibleHC = Game.HowMuchPrestige(Game.cookiesEarned + Game.cookiesReset); - var neededCook = CM.Sim.CookNeedPrest(possibleHC + 1) - (Game.cookiesEarned + Game.cookiesReset); - - var specDisp = false; - var halloCook = []; - for (var i in CM.Data.HalloCookies) { - if (!Game.Has(CM.Data.HalloCookies[i])) { - halloCook.push(CM.Data.HalloCookies[i]); - specDisp = true; - } - } - var christCook = []; - for (var i in CM.Data.ChristCookies) { - if (!Game.Has(CM.Data.ChristCookies[i])) { - christCook.push(CM.Data.ChristCookies[i]); - specDisp = true; - } - } - var valCook = []; - for (var i in CM.Data.ValCookies) { - if (!Game.Has(CM.Data.ValCookies[i])) { - valCook.push(CM.Data.ValCookies[i]); - specDisp = true; - } - } - var normEggs = []; - for (var i in Game.eggDrops) { - if (!Game.HasUnlocked(Game.eggDrops[i])) { - normEggs.push(Game.eggDrops[i]); - specDisp = true; - } - } - var rareEggs = []; - for (var i in Game.rareEggDrops) { - if (!Game.HasUnlocked(Game.rareEggDrops[i])) { - rareEggs.push(Game.rareEggDrops[i]); - specDisp = true; - } - } - - var listing = function(name, text) { - var div = document.createElement('div'); - div.className = 'listing'; - var b = document.createElement('b'); - b.textContent = name + ' : '; - div.appendChild(b); - div.appendChild(text); - return div; - } - stats.appendChild(title()); - stats.appendChild(header('Lucky Cookies')); + var luckyReqFrag = document.createDocumentFragment(); var luckyReqSpan = document.createElement('span'); luckyReqSpan.style.fontWeight = 'bold'; @@ -1076,7 +1096,18 @@ CM.Disp.AddMenu = function() { stats.appendChild(listing('\"Lucky!\" Reward (MAX)', document.createTextNode(Beautify(CM.Cache.LuckyReward)))); stats.appendChild(listing('\"Lucky!\" Reward (MAX) (Frenzy)', document.createTextNode(Beautify(CM.Cache.LuckyRewardFrenzy)))); stats.appendChild(listing('\"Lucky!\" Reward (CUR)', document.createTextNode(Beautify(luckyCur)))); - stats.appendChild(header('Chain Cookies')); + } + + stats.appendChild(header('Chain Cookies', 'Chain')); + if (CM.Config.StatsPref.Chain) { + var chainColor = (Game.cookies < CM.Cache.Chain) ? CM.Disp.colorRed : CM.Disp.colorGreen; + var chainTime = (Game.cookies < CM.Cache.Chain) ? CM.Disp.FormatTime((CM.Cache.Chain - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : ''; + var chainColorFrenzy = (Game.cookies < CM.Cache.ChainFrenzy) ? CM.Disp.colorRed : CM.Disp.colorGreen; + var chainTimeFrenzy = (Game.cookies < CM.Cache.ChainFrenzy) ? CM.Disp.FormatTime((CM.Cache.ChainFrenzy - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : ''; + var chainCurMax = Math.min(Game.cookiesPs * 60 * 60 * 3, Game.cookies * 0.25); + var chainCur = CM.Cache.MaxChainMoni(7, chainCurMax); + var chainCurWrath = CM.Cache.MaxChainMoni(6, chainCurMax); + var chainReqFrag = document.createDocumentFragment(); var chainReqSpan = document.createElement('span'); chainReqSpan.style.fontWeight = 'bold'; @@ -1104,9 +1135,16 @@ CM.Disp.AddMenu = function() { stats.appendChild(listing('\"Chain\" Reward (MAX)', document.createTextNode(Beautify(CM.Cache.ChainReward)))); stats.appendChild(listing('\"Chain\" Reward (MAX) (Wrath)', document.createTextNode(Beautify(CM.Cache.ChainWrathReward)))); stats.appendChild(listing('\"Chain\" Reward (MAX) (Frenzy)', document.createTextNode(Beautify(CM.Cache.ChainFrenzyReward)))); + stats.appendChild(listing('\"Chain\" Reward (MAX) (Frenzy) (Wrath)', document.createTextNode(Beautify(CM.Cache.ChainFrenzyWrathReward)))); stats.appendChild(listing('\"Chain\" Reward (CUR)', document.createTextNode(Beautify(chainCur)))); - stats.appendChild(listing('\"Chain\" Reward (CUR) (Wrath)', document.createTextNode(Beautify(chainCurWrath)))); - stats.appendChild(header('Heavenly Chips')); + stats.appendChild(listing('\"Chain\" Reward (CUR) (Wrath)', document.createTextNode(Beautify(chainCurWrath)))); + } + + stats.appendChild(header('Heavenly Chips', 'HC')); + if (CM.Config.StatsPref.HC) { + var possibleHC = Game.HowMuchPrestige(Game.cookiesEarned + Game.cookiesReset); + var neededCook = CM.Sim.CookNeedPrest(possibleHC + 1) - (Game.cookiesEarned + Game.cookiesReset); + var hcMaxFrag = document.createDocumentFragment(); hcMaxFrag.appendChild(document.createTextNode(Beautify(possibleHC))); var hcMaxSmall = document.createElement('small'); @@ -1122,8 +1160,11 @@ CM.Disp.AddMenu = function() { stats.appendChild(listing('Cookies To Next Chip', document.createTextNode(Beautify(neededCook)))); stats.appendChild(listing('Time To Next Chip', document.createTextNode(CM.Disp.FormatTime(neededCook / (Game.cookiesPs * (1 - Game.cpsSucked)), 1)))); stats.appendChild(listing('Reset Bonus Income', document.createTextNode(Beautify(CM.Sim.ResetBonus())))); - if (Game.cpsSucked > 0) { - stats.appendChild(header('Wrinklers')); + } + + if (Game.cpsSucked > 0) { + stats.appendChild(header('Wrinklers', 'Wrink')); + if (CM.Config.StatsPref.Wrink) { var sucked = 0; for (var i in Game.wrinklers) { sucked += Game.wrinklers[i].sucked; @@ -1132,9 +1173,47 @@ CM.Disp.AddMenu = function() { if (Game.Has('Wrinklerspawn')) sucked *= 1.05; stats.appendChild(listing('Rewards of Popping', document.createTextNode(Beautify(sucked)))); } - if (Game.season == 'christmas' || specDisp) { - stats.appendChild(header('Season Specials')); - + } + + var specDisp = false; + var halloCook = []; + for (var i in CM.Data.HalloCookies) { + if (!Game.Has(CM.Data.HalloCookies[i])) { + halloCook.push(CM.Data.HalloCookies[i]); + specDisp = true; + } + } + var christCook = []; + for (var i in CM.Data.ChristCookies) { + if (!Game.Has(CM.Data.ChristCookies[i])) { + christCook.push(CM.Data.ChristCookies[i]); + specDisp = true; + } + } + var valCook = []; + for (var i in CM.Data.ValCookies) { + if (!Game.Has(CM.Data.ValCookies[i])) { + valCook.push(CM.Data.ValCookies[i]); + specDisp = true; + } + } + var normEggs = []; + for (var i in Game.eggDrops) { + if (!Game.HasUnlocked(Game.eggDrops[i])) { + normEggs.push(Game.eggDrops[i]); + specDisp = true; + } + } + var rareEggs = []; + for (var i in Game.rareEggDrops) { + if (!Game.HasUnlocked(Game.rareEggDrops[i])) { + rareEggs.push(Game.rareEggDrops[i]); + specDisp = true; + } + } + if (Game.season == 'christmas' || specDisp) { + stats.appendChild(header('Season Specials', 'Sea')); + if (CM.Config.StatsPref.Sea) { if (specDisp) { var createSpecDisp = function(theSpecDisp) { var frag = document.createDocumentFragment(); @@ -1179,11 +1258,28 @@ CM.Disp.AddMenu = function() { if (normEggs.length != 0) stats.appendChild(listing('Normal Easter Eggs Left to Unlock', createSpecDisp(normEggs))); if (rareEggs.length != 0) stats.appendChild(listing('Rare Easter Eggs Left to Unlock', createSpecDisp(rareEggs))); } - + if (Game.season == 'christmas') stats.appendChild(listing('Reindeer Reward', document.createTextNode(Beautify(CM.Cache.SeaSpec)))); } - - l('menu').insertBefore(stats, l('menu').childNodes[2]); + } + + l('menu').insertBefore(stats, l('menu').childNodes[2]); +} + +CM.Disp.AddMenu = function() { + var title = function() { + var div = document.createElement('div'); + div.className = 'title'; + div.style.color = CM.Disp.colorBlue; + div.textContent = 'Cookie Monster Goodies'; + return div; + } + + if (Game.onMenu == 'prefs') { + CM.Disp.AddMenuPref(title); + } + else if (CM.Config.Stats == 1 && Game.onMenu == 'stats') { + CM.Disp.AddMenuStats(title); } } @@ -1574,11 +1670,11 @@ CM.Init = function() { } } -CM.ConfigDefault = {BotBar: 1, TimerBar: 1, BuildColor: 1, UpBarColor: 1, Flash: 1, Sound: 1, Volume: 100, GCTimer: 1, Title: 1, Tooltip: 1, ToolWarnCaut: 1, ToolWarnCautPos: 0, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2}; +CM.ConfigDefault = {BotBar: 1, TimerBar: 1, BuildColor: 1, UpBarColor: 1, Flash: 1, Sound: 1, Volume: 100, GCTimer: 1, Title: 1, Tooltip: 1, ToolWarnCaut: 1, ToolWarnCautPos: 0, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2, StatsPref: {Lucky: 1, Chain: 1, HC: 1, Wrink: 1, Sea: 1}}; CM.ConfigPrefix = 'CMConfig'; CM.VersionMajor = '1.0465'; -CM.VersionMinor = '6'; +CM.VersionMinor = '7'; /******* * Sim * diff --git a/src/Cache.js b/src/Cache.js index 3dd061b..42b777d 100644 --- a/src/Cache.js +++ b/src/Cache.js @@ -106,15 +106,23 @@ CM.Cache.RemakeChain = function() { CM.Cache.ChainFrenzyReward = CM.Cache.MaxChainMoni(7, maxPayout * 7); - if ((maxPayout * 7) < CM.Cache.ChainFrenzyReward) { + CM.Cache.ChainFrenzyWrathReward = CM.Cache.MaxChainMoni(6, maxPayout * 7); + + if (CM.Cache.ChainFrenzyReward > CM.Cache.ChainFrenzyWrathReward) { + base = CM.Cache.ChainFrenzyReward; + } + else { + base = CM.Cache.ChainFrenzyWrathReward; + } + if ((maxPayout * 7) < base) { CM.Cache.ChainFrenzy = 0; } else { - count = CM.Cache.ChainFrenzyReward > Math.pow(2, 53) ? Math.pow(2, Math.floor(Math.log(CM.Cache.ChainFrenzyReward) / Math.log(2)) - 53) : 1; - while(CM.Cache.ChainFrenzyReward == CM.Cache.ChainFrenzyReward + count) { + count = base > Math.pow(2, 53) ? Math.pow(2, Math.floor(Math.log(base) / Math.log(2)) - 53) : 1; + while(base == base + count) { count++; } - CM.Cache.ChainFrenzy = (CM.Cache.ChainFrenzyReward + count) / 0.25; + CM.Cache.ChainFrenzy = (base + count) / 0.25; } } @@ -135,3 +143,4 @@ CM.Cache.ChainReward = 0; CM.Cache.ChainWrathReward = 0; CM.Cache.ChainFrenzy = 0; CM.Cache.ChainFrenzyReward = 0; +CM.Cache.ChainFrenzyWrathReward = 0; diff --git a/src/Config.js b/src/Config.js index 4ba1867..bd5bd66 100644 --- a/src/Config.js +++ b/src/Config.js @@ -13,9 +13,25 @@ CM.LoadConfig = function() { // Check values var mod = false; for (var i in CM.ConfigDefault) { - if (CM.Config[i] == undefined || !(CM.Config[i] > -1 && CM.Config[i] < CM.ConfigData[i].label.length)) { - mod = true; - CM.Config[i] = CM.ConfigDefault[i]; + if (i != 'StatsPref') { + if (CM.Config[i] == undefined || !(CM.Config[i] > -1 && CM.Config[i] < CM.ConfigData[i].label.length)) { + mod = true; + CM.Config[i] = CM.ConfigDefault[i]; + } + } + else { // Statistics Preferences + if (CM.Config[i] == undefined) { + mod = true; + CM.Config[i] = CM.ConfigDefault[i]; + } + else { + for (var j in CM.ConfigDefault.StatsPref) { + if (CM.Config[i][j] == undefined || !(CM.Config[i][j] > -1 && CM.Config[i][j] < 2)) { + mod = true; + CM.Config[i][j] = CM.ConfigDefault[i][j]; + } + } + } } } if (mod) CM.SaveConfig(CM.Config); @@ -62,6 +78,16 @@ CM.ToggleConfigDown = function(config) { CM.SaveConfig(CM.Config); } +CM.ToggleStatsConfig = function(config) { + if (CM.Config.StatsPref[config] == 0) { + CM.Config.StatsPref[config]++; + } + else { + CM.Config.StatsPref[config]--; + } + CM.SaveConfig(CM.Config); +} + CM.ConfigData.BotBar = {label: ['Bottom Bar OFF', 'Bottom Bar ON'], desc: 'Building Information', func: function() {CM.Disp.ToggleBotBar();}}; CM.ConfigData.TimerBar = {label: ['Timer Bar OFF', 'Timer Bar ON'], desc: 'Timers of Golden Cookie, Season Popup, Frenzy (Normal, Clot, Elder), Click Frenzy', func: function() {CM.Disp.ToggleTimerBar();}}; CM.ConfigData.BuildColor = {label: ['Building Colors OFF', 'Building Colors ON'], desc: 'Color code buildings', func: function() {CM.Disp.UpdateBuildings();}}; diff --git a/src/Disp.js b/src/Disp.js index 9a3e8d1..8e85f9f 100644 --- a/src/Disp.js +++ b/src/Disp.js @@ -645,14 +645,7 @@ CM.Disp.UpdateTitle = function() { } } -CM.Disp.AddMenu = function() { - var title = function() { - var div = document.createElement('div'); - div.className = 'title'; - div.style.color = CM.Disp.colorBlue; - div.textContent = 'Cookie Monster Goodies'; - return div; - } +CM.Disp.AddMenuPref = function(title) { var header = function(text) { var div = document.createElement('div'); div.className = 'listing'; @@ -663,154 +656,135 @@ CM.Disp.AddMenu = function() { div.textContent = text; return div; } - - if (Game.onMenu == 'prefs') { - var frag = document.createDocumentFragment(); + + var frag = document.createDocumentFragment(); - frag.appendChild(title()); + frag.appendChild(title()); - var listing = function(config) { - var div = document.createElement('div'); - div.className = 'listing'; - var a = document.createElement('a'); - a.className = 'option'; - a.id = CM.ConfigPrefix + config; - a.onclick = function() {CM.ToggleConfigUp(config);}; - a.textContent = CM.Disp.GetConfigDisplay(config); - div.appendChild(a); - var label = document.createElement('label'); - label.textContent = CM.ConfigData[config].desc; - div.appendChild(label); - return div; - } - - frag.appendChild(header('Bars/Colors')); - frag.appendChild(listing('BotBar')); - frag.appendChild(listing('TimerBar')); - frag.appendChild(listing('BuildColor')); - frag.appendChild(listing('UpBarColor')); - frag.appendChild(header('Golden Cookie/Season Popup Emphasis')); - frag.appendChild(listing('Flash')); - frag.appendChild(listing('Sound')); - - var volConfig = 'Volume'; - var volume = document.createElement('div'); - volume.className = 'listing'; - var minus = document.createElement('a'); - minus.className = 'option'; - minus.onclick = function() {CM.ToggleConfigDown(volConfig);}; - minus.textContent = '-'; - volume.appendChild(minus); - var volText = document.createElement('span'); - volText.id = CM.ConfigPrefix + volConfig; - volText.textContent = CM.Disp.GetConfigDisplay(volConfig); - volume.appendChild(volText); - var plus = document.createElement('a'); - plus.className = 'option'; - plus.onclick = function() {CM.ToggleConfigUp(volConfig);}; - plus.textContent = '+'; - volume.appendChild(plus); - var volLabel = document.createElement('label'); - volLabel.textContent = CM.ConfigData[volConfig].desc; - volume.appendChild(volLabel); - frag.appendChild(volume); - - frag.appendChild(listing('GCTimer')); - frag.appendChild(listing('Title')); - frag.appendChild(header('Tooltip')); - frag.appendChild(listing('Tooltip')); - frag.appendChild(listing('ToolWarnCaut')); - frag.appendChild(listing('ToolWarnCautPos')); - frag.appendChild(header('Statistics')); - frag.appendChild(listing('Stats')); - frag.appendChild(listing('UpStats')); - frag.appendChild(listing('SayTime')); - frag.appendChild(header('Other')); - frag.appendChild(listing('Scale')); - - var resDef = document.createElement('div'); - resDef.className = 'listing'; - var resDefBut = document.createElement('a'); - resDefBut.className = 'option'; - resDefBut.onclick = function() {CM.RestoreDefault();}; - resDefBut.textContent = 'Restore Default'; - resDef.appendChild(resDefBut); - frag.appendChild(resDef); - - l('menu').childNodes[2].insertBefore(frag, l('menu').childNodes[2].childNodes[l('menu').childNodes[2].childNodes.length - 1]); - - CM.Disp.FormatButtonOnClickBak = l('formatButton').onclick; - l('formatButton').onclick = function() {Game.Toggle('format', 'formatButton', 'Short numbers OFF', 'Short numbers ON'); CM.Disp.RefreshScale();}; + var listing = function(config) { + var div = document.createElement('div'); + div.className = 'listing'; + var a = document.createElement('a'); + a.className = 'option'; + a.id = CM.ConfigPrefix + config; + a.onclick = function() {CM.ToggleConfigUp(config);}; + a.textContent = CM.Disp.GetConfigDisplay(config); + div.appendChild(a); + var label = document.createElement('label'); + label.textContent = CM.ConfigData[config].desc; + div.appendChild(label); + return div; } - else if (CM.Config.Stats == 1 && Game.onMenu == 'stats') { - var stats = document.createElement('div'); - stats.className = 'subsection'; + frag.appendChild(header('Bars/Colors')); + frag.appendChild(listing('BotBar')); + frag.appendChild(listing('TimerBar')); + frag.appendChild(listing('BuildColor')); + frag.appendChild(listing('UpBarColor')); + + frag.appendChild(header('Golden Cookie/Season Popup Emphasis')); + frag.appendChild(listing('Flash')); + frag.appendChild(listing('Sound')); + var volConfig = 'Volume'; + var volume = document.createElement('div'); + volume.className = 'listing'; + var minus = document.createElement('a'); + minus.className = 'option'; + minus.onclick = function() {CM.ToggleConfigDown(volConfig);}; + minus.textContent = '-'; + volume.appendChild(minus); + var volText = document.createElement('span'); + volText.id = CM.ConfigPrefix + volConfig; + volText.textContent = CM.Disp.GetConfigDisplay(volConfig); + volume.appendChild(volText); + var plus = document.createElement('a'); + plus.className = 'option'; + plus.onclick = function() {CM.ToggleConfigUp(volConfig);}; + plus.textContent = '+'; + volume.appendChild(plus); + var volLabel = document.createElement('label'); + volLabel.textContent = CM.ConfigData[volConfig].desc; + volume.appendChild(volLabel); + frag.appendChild(volume); + frag.appendChild(listing('GCTimer')); + frag.appendChild(listing('Title')); + + frag.appendChild(header('Tooltip')); + frag.appendChild(listing('Tooltip')); + frag.appendChild(listing('ToolWarnCaut')); + frag.appendChild(listing('ToolWarnCautPos')); + + frag.appendChild(header('Statistics')); + frag.appendChild(listing('Stats')); + frag.appendChild(listing('UpStats')); + frag.appendChild(listing('SayTime')); + + frag.appendChild(header('Other')); + frag.appendChild(listing('Scale')); + var resDef = document.createElement('div'); + resDef.className = 'listing'; + var resDefBut = document.createElement('a'); + resDefBut.className = 'option'; + resDefBut.onclick = function() {CM.RestoreDefault();}; + resDefBut.textContent = 'Restore Default'; + resDef.appendChild(resDefBut); + frag.appendChild(resDef); + + l('menu').childNodes[2].insertBefore(frag, l('menu').childNodes[2].childNodes[l('menu').childNodes[2].childNodes.length - 1]); + + CM.Disp.FormatButtonOnClickBak = l('formatButton').onclick; + l('formatButton').onclick = function() {Game.Toggle('format', 'formatButton', 'Short numbers OFF', 'Short numbers ON'); CM.Disp.RefreshScale();}; +} + +CM.Disp.AddMenuStats = function(title) { + var header = function(text, config) { + var div = document.createElement('div'); + div.className = 'listing'; + div.style.padding = '5px 16px'; + div.style.opacity = '0.7'; + div.style.fontSize = '17px'; + div.style.fontFamily = '\"Kavoon\", Georgia, serif'; + div.appendChild(document.createTextNode(text + ' ')); + span = document.createElement('span'); + span.style.cursor = 'pointer'; + span.style.display = 'inline-block'; + span.style.height = '14px'; + span.style.width = '14px'; + span.style.borderRadius = '7px'; + span.style.textAlign = 'center'; + span.style.backgroundColor = '#C0C0C0'; + span.style.color = 'black'; + span.style.fontSize = '13px'; + span.style.verticalAlign = 'middle'; + span.textContent = CM.Config.StatsPref[config] ? '+' : '-'; + span.onclick = function() {CM.ToggleStatsConfig(config); Game.UpdateMenu();}; + div.appendChild(span); + return div; + } + + var stats = document.createElement('div'); + stats.className = 'subsection'; + + stats.appendChild(title()); + + var listing = function(name, text) { + var div = document.createElement('div'); + div.className = 'listing'; + var b = document.createElement('b'); + b.textContent = name + ' : '; + div.appendChild(b); + div.appendChild(text); + return div; + } + + stats.appendChild(header('Lucky Cookies', 'Lucky')); + if (CM.Config.StatsPref.Lucky) { var luckyColor = (Game.cookies < CM.Cache.Lucky) ? CM.Disp.colorRed : CM.Disp.colorGreen; var luckyTime = (Game.cookies < CM.Cache.Lucky) ? CM.Disp.FormatTime((CM.Cache.Lucky - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : ''; var luckyColorFrenzy = (Game.cookies < CM.Cache.LuckyFrenzy) ? CM.Disp.colorRed : CM.Disp.colorGreen; var luckyTimeFrenzy = (Game.cookies < CM.Cache.LuckyFrenzy) ? CM.Disp.FormatTime((CM.Cache.LuckyFrenzy - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : ''; var luckyCur = Math.min(Game.cookies * 0.1, Game.cookiesPs * 60 * 20) + 13; - - var chainColor = (Game.cookies < CM.Cache.Chain) ? CM.Disp.colorRed : CM.Disp.colorGreen; - var chainTime = (Game.cookies < CM.Cache.Chain) ? CM.Disp.FormatTime((CM.Cache.Chain - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : ''; - var chainColorFrenzy = (Game.cookies < CM.Cache.ChainFrenzy) ? CM.Disp.colorRed : CM.Disp.colorGreen; - var chainTimeFrenzy = (Game.cookies < CM.Cache.ChainFrenzy) ? CM.Disp.FormatTime((CM.Cache.ChainFrenzy - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : ''; - var chainCurMax = Math.min(Game.cookiesPs * 60 * 60 * 3, Game.cookies * 0.25); - var chainCur = CM.Cache.MaxChainMoni(7, chainCurMax); - var chainCurWrath = CM.Cache.MaxChainMoni(6, chainCurMax); - - var possibleHC = Game.HowMuchPrestige(Game.cookiesEarned + Game.cookiesReset); - var neededCook = CM.Sim.CookNeedPrest(possibleHC + 1) - (Game.cookiesEarned + Game.cookiesReset); - - var specDisp = false; - var halloCook = []; - for (var i in CM.Data.HalloCookies) { - if (!Game.Has(CM.Data.HalloCookies[i])) { - halloCook.push(CM.Data.HalloCookies[i]); - specDisp = true; - } - } - var christCook = []; - for (var i in CM.Data.ChristCookies) { - if (!Game.Has(CM.Data.ChristCookies[i])) { - christCook.push(CM.Data.ChristCookies[i]); - specDisp = true; - } - } - var valCook = []; - for (var i in CM.Data.ValCookies) { - if (!Game.Has(CM.Data.ValCookies[i])) { - valCook.push(CM.Data.ValCookies[i]); - specDisp = true; - } - } - var normEggs = []; - for (var i in Game.eggDrops) { - if (!Game.HasUnlocked(Game.eggDrops[i])) { - normEggs.push(Game.eggDrops[i]); - specDisp = true; - } - } - var rareEggs = []; - for (var i in Game.rareEggDrops) { - if (!Game.HasUnlocked(Game.rareEggDrops[i])) { - rareEggs.push(Game.rareEggDrops[i]); - specDisp = true; - } - } - - var listing = function(name, text) { - var div = document.createElement('div'); - div.className = 'listing'; - var b = document.createElement('b'); - b.textContent = name + ' : '; - div.appendChild(b); - div.appendChild(text); - return div; - } - stats.appendChild(title()); - stats.appendChild(header('Lucky Cookies')); + var luckyReqFrag = document.createDocumentFragment(); var luckyReqSpan = document.createElement('span'); luckyReqSpan.style.fontWeight = 'bold'; @@ -838,7 +812,18 @@ CM.Disp.AddMenu = function() { stats.appendChild(listing('\"Lucky!\" Reward (MAX)', document.createTextNode(Beautify(CM.Cache.LuckyReward)))); stats.appendChild(listing('\"Lucky!\" Reward (MAX) (Frenzy)', document.createTextNode(Beautify(CM.Cache.LuckyRewardFrenzy)))); stats.appendChild(listing('\"Lucky!\" Reward (CUR)', document.createTextNode(Beautify(luckyCur)))); - stats.appendChild(header('Chain Cookies')); + } + + stats.appendChild(header('Chain Cookies', 'Chain')); + if (CM.Config.StatsPref.Chain) { + var chainColor = (Game.cookies < CM.Cache.Chain) ? CM.Disp.colorRed : CM.Disp.colorGreen; + var chainTime = (Game.cookies < CM.Cache.Chain) ? CM.Disp.FormatTime((CM.Cache.Chain - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : ''; + var chainColorFrenzy = (Game.cookies < CM.Cache.ChainFrenzy) ? CM.Disp.colorRed : CM.Disp.colorGreen; + var chainTimeFrenzy = (Game.cookies < CM.Cache.ChainFrenzy) ? CM.Disp.FormatTime((CM.Cache.ChainFrenzy - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : ''; + var chainCurMax = Math.min(Game.cookiesPs * 60 * 60 * 3, Game.cookies * 0.25); + var chainCur = CM.Cache.MaxChainMoni(7, chainCurMax); + var chainCurWrath = CM.Cache.MaxChainMoni(6, chainCurMax); + var chainReqFrag = document.createDocumentFragment(); var chainReqSpan = document.createElement('span'); chainReqSpan.style.fontWeight = 'bold'; @@ -866,9 +851,16 @@ CM.Disp.AddMenu = function() { stats.appendChild(listing('\"Chain\" Reward (MAX)', document.createTextNode(Beautify(CM.Cache.ChainReward)))); stats.appendChild(listing('\"Chain\" Reward (MAX) (Wrath)', document.createTextNode(Beautify(CM.Cache.ChainWrathReward)))); stats.appendChild(listing('\"Chain\" Reward (MAX) (Frenzy)', document.createTextNode(Beautify(CM.Cache.ChainFrenzyReward)))); + stats.appendChild(listing('\"Chain\" Reward (MAX) (Frenzy) (Wrath)', document.createTextNode(Beautify(CM.Cache.ChainFrenzyWrathReward)))); stats.appendChild(listing('\"Chain\" Reward (CUR)', document.createTextNode(Beautify(chainCur)))); - stats.appendChild(listing('\"Chain\" Reward (CUR) (Wrath)', document.createTextNode(Beautify(chainCurWrath)))); - stats.appendChild(header('Heavenly Chips')); + stats.appendChild(listing('\"Chain\" Reward (CUR) (Wrath)', document.createTextNode(Beautify(chainCurWrath)))); + } + + stats.appendChild(header('Heavenly Chips', 'HC')); + if (CM.Config.StatsPref.HC) { + var possibleHC = Game.HowMuchPrestige(Game.cookiesEarned + Game.cookiesReset); + var neededCook = CM.Sim.CookNeedPrest(possibleHC + 1) - (Game.cookiesEarned + Game.cookiesReset); + var hcMaxFrag = document.createDocumentFragment(); hcMaxFrag.appendChild(document.createTextNode(Beautify(possibleHC))); var hcMaxSmall = document.createElement('small'); @@ -884,8 +876,11 @@ CM.Disp.AddMenu = function() { stats.appendChild(listing('Cookies To Next Chip', document.createTextNode(Beautify(neededCook)))); stats.appendChild(listing('Time To Next Chip', document.createTextNode(CM.Disp.FormatTime(neededCook / (Game.cookiesPs * (1 - Game.cpsSucked)), 1)))); stats.appendChild(listing('Reset Bonus Income', document.createTextNode(Beautify(CM.Sim.ResetBonus())))); - if (Game.cpsSucked > 0) { - stats.appendChild(header('Wrinklers')); + } + + if (Game.cpsSucked > 0) { + stats.appendChild(header('Wrinklers', 'Wrink')); + if (CM.Config.StatsPref.Wrink) { var sucked = 0; for (var i in Game.wrinklers) { sucked += Game.wrinklers[i].sucked; @@ -894,9 +889,47 @@ CM.Disp.AddMenu = function() { if (Game.Has('Wrinklerspawn')) sucked *= 1.05; stats.appendChild(listing('Rewards of Popping', document.createTextNode(Beautify(sucked)))); } - if (Game.season == 'christmas' || specDisp) { - stats.appendChild(header('Season Specials')); - + } + + var specDisp = false; + var halloCook = []; + for (var i in CM.Data.HalloCookies) { + if (!Game.Has(CM.Data.HalloCookies[i])) { + halloCook.push(CM.Data.HalloCookies[i]); + specDisp = true; + } + } + var christCook = []; + for (var i in CM.Data.ChristCookies) { + if (!Game.Has(CM.Data.ChristCookies[i])) { + christCook.push(CM.Data.ChristCookies[i]); + specDisp = true; + } + } + var valCook = []; + for (var i in CM.Data.ValCookies) { + if (!Game.Has(CM.Data.ValCookies[i])) { + valCook.push(CM.Data.ValCookies[i]); + specDisp = true; + } + } + var normEggs = []; + for (var i in Game.eggDrops) { + if (!Game.HasUnlocked(Game.eggDrops[i])) { + normEggs.push(Game.eggDrops[i]); + specDisp = true; + } + } + var rareEggs = []; + for (var i in Game.rareEggDrops) { + if (!Game.HasUnlocked(Game.rareEggDrops[i])) { + rareEggs.push(Game.rareEggDrops[i]); + specDisp = true; + } + } + if (Game.season == 'christmas' || specDisp) { + stats.appendChild(header('Season Specials', 'Sea')); + if (CM.Config.StatsPref.Sea) { if (specDisp) { var createSpecDisp = function(theSpecDisp) { var frag = document.createDocumentFragment(); @@ -941,11 +974,28 @@ CM.Disp.AddMenu = function() { if (normEggs.length != 0) stats.appendChild(listing('Normal Easter Eggs Left to Unlock', createSpecDisp(normEggs))); if (rareEggs.length != 0) stats.appendChild(listing('Rare Easter Eggs Left to Unlock', createSpecDisp(rareEggs))); } - + if (Game.season == 'christmas') stats.appendChild(listing('Reindeer Reward', document.createTextNode(Beautify(CM.Cache.SeaSpec)))); } - - l('menu').insertBefore(stats, l('menu').childNodes[2]); + } + + l('menu').insertBefore(stats, l('menu').childNodes[2]); +} + +CM.Disp.AddMenu = function() { + var title = function() { + var div = document.createElement('div'); + div.className = 'title'; + div.style.color = CM.Disp.colorBlue; + div.textContent = 'Cookie Monster Goodies'; + return div; + } + + if (Game.onMenu == 'prefs') { + CM.Disp.AddMenuPref(title); + } + else if (CM.Config.Stats == 1 && Game.onMenu == 'stats') { + CM.Disp.AddMenuStats(title); } } diff --git a/src/Main.js b/src/Main.js index d7182ab..f498a27 100644 --- a/src/Main.js +++ b/src/Main.js @@ -117,7 +117,7 @@ CM.Init = function() { } } -CM.ConfigDefault = {BotBar: 1, TimerBar: 1, BuildColor: 1, UpBarColor: 1, Flash: 1, Sound: 1, Volume: 100, GCTimer: 1, Title: 1, Tooltip: 1, ToolWarnCaut: 1, ToolWarnCautPos: 0, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2}; +CM.ConfigDefault = {BotBar: 1, TimerBar: 1, BuildColor: 1, UpBarColor: 1, Flash: 1, Sound: 1, Volume: 100, GCTimer: 1, Title: 1, Tooltip: 1, ToolWarnCaut: 1, ToolWarnCautPos: 0, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2, StatsPref: {Lucky: 1, Chain: 1, HC: 1, Wrink: 1, Sea: 1}}; CM.ConfigPrefix = 'CMConfig'; CM.VersionMajor = '1.0465';