// ==UserScript==
// @name Trimps tools
// @namespace trimps.github.io
// @version 1.066
// @description Trimps tools (visual)
// @author Anton
// @match https://trimps.github.io
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// ==/UserScript==
(function() {
'use strict';
var tAutoBuy, tStyleFix, tPassiveWatcher, $ = jQuery, isStarted = false,
version = typeof GM_info == 'function' ? GM_info().script.version :
(typeof GM_info == 'object' ? GM_info.script.version : '?');
var _isPortal = function() {
return ($('#portalWrapper:visible').length > 0);
}
var _getBarWidthPercent = function(barSelector) {
return jQuery(barSelector).width() / jQuery(barSelector).parent().width() * 100;
}
var _log = function(mes, type) {
if (typeof type === 'undefined') type = "Story";
message("BOT: " + mes, type);
}
var _getBreedingBaseSpeed = function() {
var trimps = game.resources.trimps;
var base = 0.0085;
var breeding = trimps.owned - trimps.employed;
var currentCalc = breeding * base;
return currentCalc;
}
var _start = function() {
clearInterval(tPassiveWatcher);
tAutoBuy = setInterval(function() {
if (_isPortal()) return;
_autoUpgrade();
_autoBuy();
_autoJobs();
}, 1000);
$('#botStart').text('Bot stop');
}
var _buyStorage = function() {
var barnThreshold = 0.9; /*percentage at which minimum*/
var shedThreshold = 0.9; /*to buy storage*/
var forgeThreshold = 0.9; /*from 0 (min) to 1 (max)*/
if(game.resources.food.owned / (game.resources.food.max * (1 + game.portal.Packrat.level * (game.portal.Packrat.modifier * 100) / 100)) >= barnThreshold)
buyBuilding("Barn", true, true);
if(game.resources.wood.owned / (game.resources.wood.max * (1 + game.portal.Packrat.level * (game.portal.Packrat.modifier * 100) / 100)) >= shedThreshold)
buyBuilding("Shed", true, true);
if(game.resources.metal.owned / (game.resources.metal.max * (1 + game.portal.Packrat.level * (game.portal.Packrat.modifier * 100) / 100)) >= forgeThreshold)
buyBuilding("Forge", true, true);
}
var _passiveWatcher = function() {
if (_isPortal()) return;
_buyStorage();
if (game.global.buildingsQueue.length > 0 && game.global.autoCraftModifier < 1) {
setGather('buildings');
return;
}
if (getPsString('food', true) < 3 && game.resources.food.owned < 30) {
setGather('food');
return;
}
if (getPsString('wood', true) < 3 && game.resources.wood.owned < 30) {
setGather('wood');
return;
}
if (getPsString('science', true) < 3 && game.resources.science.owned < 10) {
setGather('science');
return;
}
if (game.buildings.Trap.owned < 1 && game.resources.food.owned >= 10 && game.resources.wood.owned >= 10) {
buyBuilding('Trap', true, true);
return;
}
if (game.resources.trimps.owned < game.resources.trimps.realMax() && _getBreedingBaseSpeed() < 1) {
setGather('trimps');
return;
}
if (getPsString('science', true) < 3 && game.resources.science.owned < 100) {
setGather('science');
return;
}
if (getPsString('metal', true) < 3 && game.resources.metal.owned < 100) {
setGather('metal');
return;
}
_autoUpgrade();
_autoJobs();
}
var _stop = function() {
clearInterval(tAutoBuy);
$('#botStart').text('Bot start');
tPassiveWatcher = setInterval(_passiveWatcher, 1000);
_log('Passive watcher started version ' + version);
}
var _onStartButton = function() {
if (isStarted) {
_stop();
_log('Stop.');
isStarted = false;
} else {
_start();
_log('Started!');
isStarted = true;
}
}
var _styleUpdate = function() {
// remove counts
$('head').append('<style type="text/css">.queueItem,.btn{padding:0}.thingColorCanNotAfford.upgradeThing{background-color:#530053;}</style>');
// remove tabs
$('#buyTabs').hide();
filterTabs('all');
// remove captions
$('#buildingsTitleDiv,#upgradesTitleDiv,#equipmentTitleDiv').hide();
// fix height
$('#topRow,#queueContainer').css('margin-bottom', '0');
$('#jobsTitleDiv').css('padding', '0').css('font-size', 'smaller');
$('#buyHere').css('margin', '0').css('padding', '0').css('overflow-x', 'hidden');
$('#queueContainer').css('height', '70px');
$('#numTabs').css('margin', '0');
$('#buyContainer').css('height', 'calc(99vh - 20vw - 96px)');
// add button
$('#settingsTable tr').append('<td class="btn btn-info" id="botStart">Bot start</td>');
$('#botStart').click(_onStartButton);
}
var _autoUpgrade = function() {
var $item = $('#upgradesHere').find('.thingColorCanAfford').first();
if ($item.length > 0) {
buyUpgrade($item.attr('id'), true, true);
_log('Upgrading ' + $item.attr('id'));
return 1;
} else {
return 0;
}
}
var _autoBuy = function() {
_buyStorage();
var nursery = '';
if (game.buildings.Nursery.owned >= game.buildings.Tribute.owned) {
nursery = ':not([id=Nursery])';
}
var notStorage = ':not([id=Barn]):not([id=Shed]):not([id=Forge])';
var $item = $('#buildingsHere').find('.thingColorCanAfford:not([id=Wormhole])' + nursery + notStorage).last();
if ($item.length > 0 && $item.attr('id') != 'Trap') {
buyBuilding($item.attr('id'), true, true);
_log('Building ' + $item.attr('id'));
return 1;
} else {
return 0;
}
}
var needFarmer = 20, needLumber = 20, needMiner = 20, needScientist = 1;
var needAllMax = needFarmer + needLumber + needMiner + needScientist;
var _buyJobs = function($obj, unemployed, objName, jobId) {
if ($obj.length > 0) {
var cnt = 1;
if (unemployed > needAllMax * 10) {numTab(4);cnt=100;}
else if (unemployed > needAllMax * 2.5) {numTab(3);cnt=25;}
else if (unemployed > needAllMax) {numTab(2);cnt=10;}
buyJob(jobId, true, true); // confirmed, noTip
numTab(1); // +1
_log('New ' + objName + (cnt > 1 ? " x" + cnt : ''), 'Combat');
return cnt;
} else {
return 0;
}
}
var _autoJobs = function() {
var cnt = 0;
var $trainer = $('#jobsHere').find('.thingColorCanAfford[id=Trainer]');
if ($trainer.length > 0) {
buyJob('Trainer', true, true);
_log('New trainer');
return ++cnt;
}
var $explorer = $('#jobsHere').find('.thingColorCanAfford[id=Explorer]');
if ($explorer.length > 0) {
buyJob('Explorer', true, true);
_log('New explorer');
return ++cnt;
}
var farmer = parseInt($('#jobsHere').find('#FarmerOwned').text());
var lumber = parseInt($('#jobsHere').find('#LumberjackOwned').text());
var miner = parseInt($('#jobsHere').find('#MinerOwned').text());
var science = parseInt($('#jobsHere').find('#ScientistOwned').text());
var jobsTotal = farmer + lumber + miner + science;
var unemployed = parseInt($('#jobsTitleUnemployed').text());
var hasFarmer = $('#jobsHere').find('#FarmerOwned:visible').length > 0;
var hasLumber = $('#jobsHere').find('#LumberjackOwned:visible').length > 0;
var hasMiner = $('#jobsHere').find('#MinerOwned:visible').length > 0;
var hasScientist = $('#jobsHere').find('#ScientistOwned:visible').length > 0;
var needAll =
(hasFarmer ? needFarmer : 0) +
(hasLumber ? needLumber : 0) +
(hasMiner ? needMiner : 0) +
(hasScientist ? needScientist : 0);
if (needAll < 1) needAll = 1;
if (hasFarmer && farmer < (jobsTotal * needFarmer / needAll)) {
var $farmer = $('#jobsHere').find('.thingColorCanAfford[id=Farmer]');
cnt += _buyJobs($farmer, unemployed, 'farmer', 'Farmer');
} else if (hasLumber && lumber < (jobsTotal * needLumber / needAll)) {
var $lumber = $('#jobsHere').find('.thingColorCanAfford[id=Lumberjack]');
cnt += _buyJobs($lumber, unemployed, 'lumberjack', 'Lumberjack');
} else if (hasMiner && miner < (jobsTotal * needMiner / needAll)) {
var $miner = $('#jobsHere').find('.thingColorCanAfford[id=Miner]');
cnt += _buyJobs($miner, unemployed, 'miner', 'Miner');
} else if (hasScientist && science < (jobsTotal * needScientist / needAll)) {
var $science = $('#jobsHere').find('.thingColorCanAfford[id=Scientist]');
cnt += _buyJobs($science, unemployed, 'scientist', 'Scientist');
}
if (unemployed > 0 && cnt === 0) {
$farmer = $('#jobsHere').find('.thingColorCanAfford[id=Farmer]');
cnt += _buyJobs($farmer, unemployed, 'farmer', 'Farmer');
}
return cnt;
}
var _styleFix = function() {
$('.buyBox').find('.thing').find('br').remove();
$('.buyBox').find('.thing').find('.thingOwned').css('margin-left','4px');
$('#upgradesHere').find('.alert.badge').text('');
}
setTimeout(function() {
tStyleFix = setInterval(_styleFix, 2000);
_styleUpdate();
_styleFix();
_stop(); // start passive watcher
}, 1000);
})();