Cookie clicker tools

Cookie clicker tools (visual)

当前为 2017-03-03 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Cookie clicker tools
  3. // @namespace orteil.dashnet.org
  4. // @version 2.064
  5. // @description Cookie clicker tools (visual)
  6. // @author Anton
  7. // @match http://orteil.dashnet.org/cookieclicker/*
  8. // @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
  9. // ==/UserScript==
  10.  
  11. (function() {
  12. 'use strict';
  13. var log = [], logTitle = '<div class="section">Cookie clicker tools 2.063 is here!</div>', newLogs = 0;
  14.  
  15. var started = false, t2, t3, tClick, tClickFrenzy, oldTitle = '', tLog, tPriority;
  16.  
  17. var options = {
  18. bankStoragePercent: 100
  19. };
  20.  
  21. var _getBuffMult = function () {
  22. var buffMult = 1;
  23. for (var buff in Game.buffs) {
  24. if (Game.buffs[buff] !== 0 && typeof Game.buffs[buff].multCpS !== 'undefined') {
  25. buffMult = buffMult * Game.buffs[buff].multCpS;
  26. }
  27. }
  28. return buffMult === 0 ? 1 : buffMult;
  29. };
  30.  
  31. var _getNormalCookiesPs = function () {
  32. return Game.cookiesPs / _getBuffMult();
  33. };
  34.  
  35. var _getMinimalMoney = function () {
  36. return Math.floor(_getNormalCookiesPs() * 42100 * options.bankStoragePercent / 100);
  37. };
  38.  
  39. var _getMoneyCanSpend = function () {
  40. var moneyCanSpend = Game.cookies - _getMinimalMoney();
  41. return moneyCanSpend;
  42. };
  43.  
  44. var priorityListObj = {}, priorityList = [], timeCompensateObj = {}, timeCompensateList = [];
  45. var _createPriorityList = function() {
  46. var moneyCanSpend = _getMoneyCanSpend();
  47. var money = Game.cookies;
  48. priorityList = [];
  49. priorityListObj = {};
  50. for (var g in Game.UpgradesById) {
  51. if (Game.UpgradesById[g].bought === 0 && Game.UpgradesById[g].unlocked == 1) {
  52. var isMultiplier = Game.UpgradesById[g].desc.indexOf('production multiplier') >= 0;
  53. var isDouble = Game.UpgradesById[g].desc.indexOf('<b>twice</b>') >= 0;
  54. var increasedMoney = 0;
  55. if (isMultiplier) {
  56. increasedMoney = _getNormalCookiesPs() * Game.UpgradesById[g].power / 100;
  57. } else if (isDouble) {
  58. increasedMoney = Game.UpgradesById[g].buildingTie.storedTotalCps;
  59. }
  60. var interest = increasedMoney > 0 ? Game.UpgradesById[g].basePrice / increasedMoney : '-';
  61. if (interest != '-') {
  62. priorityListObj[Math.floor(interest)] = {
  63. name: Game.UpgradesById[g].name,
  64. title: Game.UpgradesById[g].name + ' - ' + Beautify(Game.UpgradesById[g].basePrice),
  65. price: Game.UpgradesById[g].basePrice,
  66. cps: 1,
  67. type: 'upgrade',
  68. id: g
  69. };
  70. }
  71. //priorityList.push(Game.UpgradesById[g].name + ' - ' + Beautify(Game.UpgradesById[g].basePrice) + ' (INTEREST: ' + Beautify(interest) + ')');
  72. }
  73. }
  74. for (var i in Game.ObjectsById) {
  75. if (typeof i !== 'undefined' && i != 'undefined' && Game.ObjectsById.hasOwnProperty(i)) {
  76. if (Game.ObjectsById[i].locked === 0) {
  77. interest = Game.ObjectsById[i].price / Game.ObjectsById[i].storedCps;
  78. priorityListObj[Math.floor(interest)] = {
  79. name: Game.ObjectsById[i].name,
  80. title: Game.ObjectsById[i].name + ' - ' + Beautify(Game.ObjectsById[i].price),
  81. price: Game.ObjectsById[i].price,
  82. cps: Game.ObjectsById[i].storedCps,
  83. type: 'buy',
  84. id: i
  85. };
  86. //priorityList.push(Game.ObjectsById[i].name + ' - ' + Beautify(Game.ObjectsById[i].price) + ' (INTEREST: ' + Beautify(interest) + ')');
  87. }
  88. }
  89. }
  90. for (i in priorityListObj) {
  91. var prefix = priorityListObj[i].price < moneyCanSpend ? '!!! ' : (priorityListObj[i].price < money ? '! ' : '');
  92. priorityList.push(prefix + priorityListObj[i].title + ' : ' + i);
  93. }
  94.  
  95. timeCompensateObj = {};
  96. timeCompensateList = [];
  97. for (i in priorityListObj) {
  98. var o = priorityListObj[i];
  99. if (o.type == 'buy') {
  100. var cpsWithPercent = (o.cps / _getNormalCookiesPs() + 1) * o.cps;
  101. var interestNew = o.price / cpsWithPercent;
  102. timeCompensateObj[Math.floor(interestNew)] = {
  103. name: o.name,
  104. title: o.title,
  105. price: o.price,
  106. cps: cpsWithPercent,
  107. type: 'buy',
  108. id: o.id
  109. };
  110. } else {
  111. timeCompensateObj[i] = o;
  112. }
  113. }
  114. for (i in timeCompensateObj) {
  115. prefix = timeCompensateObj[i].price < moneyCanSpend ? '!!! ' : (timeCompensateObj[i].price < money ? '! ' : '');
  116. timeCompensateList.push(prefix + timeCompensateObj[i].title + ' : ' + i);
  117. }
  118. };
  119.  
  120. var _caption = function(txt) {
  121. var $v = jQuery('#versionNumber');
  122. if ($v.text() != txt) $v.text(txt);
  123. };
  124.  
  125. var _title = function(txt) {
  126. var newTitle = (newLogs > 0 ? '(' + newLogs + ') ' : '') + txt;
  127. if (document.title != newTitle) {
  128. oldTitle = txt;
  129. document.title = newTitle;
  130. }
  131. };
  132.  
  133. var _titlePercent = function(have, need, txt) {
  134. var percent = Math.ceil(have / (need !== 0 ? need : 1) * 100);
  135. _title((percent < 10 ? '00' : (percent < 100 ? '0' : '')) + String(percent) + "% - " + txt);
  136. };
  137.  
  138. var _logSectionTitle = function (text) {
  139. return '<div class="title">' + text + '</div>';
  140. };
  141.  
  142. var _logSection = function (title, items) {
  143. return '<div class="subsection">' + _logSectionTitle(title) +
  144. '<div class="listing">' + items.join('</div><div class="listing">') + '</div>' +
  145. '</div>';
  146. };
  147.  
  148. document.getElementById('logButton').onsliderchange = function(el) {
  149. var val = $(el).val();
  150. options.bankStoragePercent = val;
  151. jQuery('#bankStoragePercentLabel').text('Storage percent: ' + val + '%');
  152. };
  153.  
  154. var _optionsSection = function() {
  155. var content = [];
  156. content.push('<label for="bankStoragePercent" id="bankStoragePercentLabel">Storage percent: 100%</label> <input name="bankStoragePercent" id="bankStoragePercent" type="range" min="0" max="100" value="' + options.bankStoragePercent + '" onchange="document.getElementById(\'logButton\').onsliderchange(this)" />');
  157. return content;
  158. };
  159.  
  160. var _updateLog = function () {
  161. Game.updateLog = logTitle +
  162. _logSection('Priority', priorityList) +
  163. _logSection('Priority (time compensate)', timeCompensateList) +
  164. _logSection('Log', log) +
  165. _logSection('Options', _optionsSection());
  166. var newButtonText = newLogs > 0 ? 'Log (' + newLogs + ')' : 'Log';
  167. if (jQuery('#logButton').text() != newButtonText) jQuery('#logButton').text(newButtonText);
  168. _title(oldTitle);
  169. };
  170.  
  171. tPriority = setInterval(function () {
  172. _createPriorityList();
  173. _updateLog();
  174. }, 1000);
  175.  
  176. var _addLog = function(text) {
  177. var t = new Date();
  178. log.push(t.toUTCString() + ': ' + text);
  179. newLogs++;
  180. _updateLog();
  181. };
  182.  
  183. tLog = setInterval(function () {
  184. _updateLog();
  185. }, 600);
  186.  
  187. jQuery('#logButton').text('Log').on("click", function() {
  188. newLogs = 0;
  189. jQuery('#logButton').text('Log');
  190. });
  191.  
  192. var _getLongTimeUpgrade = function () {
  193. var moneyCanSpend = _getMoneyCanSpend();
  194. var longTime = (Game.cookiesPs < 100) ? 1 : (
  195. (Game.cookiesPs < 1000) ? 2 : (
  196. (Game.cookiesPs < 10000) ? 3 : (
  197. (Game.cookiesPs < 1E5) ? 4 : (
  198. (Game.cookiesPs < 1E6) ? 5 : (
  199. (Game.cookiesPs < 1E9) ? 10 : 15
  200. )
  201. )
  202. )
  203. )
  204. );
  205. return longTime;
  206. };
  207.  
  208. var _getWrinklerCount = function () {
  209. var wrinklersCount = 0;
  210. for (var i in Game.wrinklers) {
  211. if (Game.wrinklers[i].sucked > 0) {
  212. wrinklersCount++;
  213. }
  214. }
  215. return wrinklersCount;
  216. };
  217.  
  218. var _killAllWrinklers = function () {
  219. var wrinklersCount = _getWrinklerCount();
  220. if (wrinklersCount >= 10 || Game.hasBuff('Elder frenzy')) {
  221. var wrinklesIncome = 0;
  222. for (var i in Game.wrinklers) {
  223. wrinklesIncome += Game.wrinklers[i].sucked;
  224. Game.wrinklers[i].hp = 0; // kill ALL
  225. }
  226. if (wrinklesIncome > 0) {
  227. _addLog('Killed all Wrinkles for ' + Beautify(wrinklesIncome) + ' because of ' + (Game.hasBuff('Elder frenzy') ? '"Elder frenzy"' : 'count 10.'));
  228. }
  229. }
  230. };
  231.  
  232. var _getMinimalPriceForNewObject = function () {
  233. var minNewObjectPrice = null;
  234. for (var i in Game.ObjectsById) {
  235. if (typeof i !== 'undefined' && i != 'undefined' && Game.ObjectsById.hasOwnProperty(i)) {
  236. if (Game.ObjectsById[i].locked === 0 && Game.ObjectsById[i].amount === 0) {
  237. var p = Game.ObjectsById[i].price;
  238. if (minNewObjectPrice === null || p < minNewObjectPrice) minNewObjectPrice = p;
  239. }
  240. }
  241. }
  242. return minNewObjectPrice;
  243. };
  244.  
  245. var startT = function() {
  246. t2 = setInterval(function() {
  247.  
  248. _killAllWrinklers();
  249.  
  250. var moneyCanSpend = _getMoneyCanSpend();
  251.  
  252. if (moneyCanSpend < 0) {
  253. var minimalMoney = _getMinimalMoney();
  254. _caption('Collecting minimum ' + Beautify(minimalMoney));
  255. _titlePercent(Game.cookies, minimalMoney, 'minimum');
  256. return;
  257. }
  258. if (priorityList.length > 0) {
  259. var needToBuy = priorityList[0];
  260. if (needToBuy.type == 'upgrade') {
  261. _caption('Upgrading ' + needToBuy.name + ' for ' + Beautify(needToBuy.price));
  262. } else {
  263. _caption('Collecting ' + Beautify(needToBuy.price) + ' for ' + needToBuy.name);
  264. }
  265. return;
  266. }
  267.  
  268. var minNewObjectPrice = _getMinimalPriceForNewObject();
  269.  
  270. var u = null; // upgrade can buy
  271. var minUpgradePrice = null;
  272. for (var g in Game.UpgradesById) {
  273. if (Game.UpgradesById[g].bought === 0 && Game.UpgradesById[g].unlocked == 1) {
  274. //u.push(Game.UpgradesById[g]);
  275. if (minUpgradePrice === null) {
  276. minUpgradePrice = Game.UpgradesById[g].basePrice;
  277. u = g;
  278. } else if (Game.UpgradesById[g].basePrice < minUpgradePrice) {
  279. minUpgradePrice = Game.UpgradesById[g].basePrice;
  280. u = g;
  281. }
  282. }
  283. }
  284.  
  285. var longTime = _getLongTimeUpgrade();
  286. var needUpgrade = (minNewObjectPrice > minUpgradePrice || minUpgradePrice === null) &&
  287. u !== null && typeof Game.UpgradesById[u] !== 'undefined' &&
  288. (moneyCanSpend >= minUpgradePrice || ((minUpgradePrice - moneyCanSpend) / _getNormalCookiesPs()) <= (longTime*60));
  289.  
  290. if (needUpgrade)
  291. {
  292. if (Game.UpgradesById[u].canBuy()) {
  293. Game.UpgradesById[u].buy();
  294. _addLog('Buy upgrade ' + Game.UpgradesById[u].name + ' for ' + Beautify(minUpgradePrice));
  295. } else {
  296. _caption('Upgrading ' + Game.UpgradesById[u].name + ' for ' + Beautify(minUpgradePrice));
  297. _titlePercent(moneyCanSpend, minUpgradePrice, Game.UpgradesById[u].name);
  298. }
  299. } else {
  300. var minInvert = null, minObj = null;
  301. for (var i in Game.ObjectsById) {
  302. if (typeof i !== 'undefined' && i != 'undefined' && Game.ObjectsById.hasOwnProperty(i)) {
  303. if (Game.ObjectsById[i].locked === 0) {
  304. var interest = Game.ObjectsById[i].price / Game.ObjectsById[i].storedCps;
  305. if (minInvert === null) {
  306. minInvert = interest;
  307. minObj = i;
  308. } else if (interest < minInvert) {
  309. minInvert = interest;
  310. minObj = i;
  311. }
  312. }
  313. }
  314. }
  315. if (minObj !== null) {
  316. if (Game.ObjectsById[minObj].price < moneyCanSpend) {
  317. Game.ObjectsById[minObj].buy(1);
  318. _addLog('Buy object ' + Game.ObjectsById[minObj].name + ' for ' + Beautify(Game.ObjectsById[minObj].price));
  319. } else {
  320. _caption('Collecting ' + Beautify(Game.ObjectsById[minObj].price) + ' for ' + Game.ObjectsById[minObj].name);
  321. _titlePercent(moneyCanSpend, Game.ObjectsById[minObj].price, Game.ObjectsById[minObj].name);
  322. }
  323. }
  324.  
  325. }
  326.  
  327. }, 1000);
  328.  
  329. started = true;
  330. _caption('Started');
  331. _addLog('Autobuy start!');
  332. };
  333.  
  334. var stopT = function() {
  335. clearInterval(t2);
  336. started = false;
  337. _caption('Collecting gold...');
  338. _addLog('Autobuy stop.');
  339. };
  340.  
  341. jQuery('#versionNumber').on("click", function() {
  342. if (!started)
  343. startT();
  344. else
  345. stopT();
  346. });
  347.  
  348. setTimeout(function() {
  349. t3 = setInterval(function() {
  350. var golden = Game.shimmers;
  351. if (golden.length > 0) {
  352. for (var i in golden) {
  353. golden[i].pop();
  354. }
  355. }
  356. }, 500);
  357.  
  358. tClickFrenzy = setInterval(function() {
  359. if (Game.hasBuff('Click frenzy') || Game.hasBuff('Cursed finger')) {
  360. Game.ClickCookie();
  361. }
  362. }, 75);
  363.  
  364. if (Game.cookiesPs < 1E6) {
  365. tClick = setInterval(function() {
  366. Game.mouseX = jQuery('#bigCookie').width() / 2 + jQuery('#bigCookie').offset().left;
  367. Game.mouseY = jQuery('#bigCookie').height() / 2 + jQuery('#bigCookie').offset().top;
  368. Game.ClickCookie();
  369. if (Game.cookiesPs > 1E8) clearInterval(tClick);
  370. }, 300);
  371. }
  372.  
  373. _caption('Collecting gold...');
  374. }, 5000);
  375. })();