Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ShowTooltips=true;
- document.getElementById("resourceColumn").innerHTML += '<input id="chkBuyStorage" title="Autobuy storage" style="left: 50%; top: 50%; position: absolute;" type="checkbox" checked="checked">';
- AutoBuyStorage=function ()
- {
- if (!document.getElementById("chkBuyStorage"))
- {
- document.getElementById("resourceColumn").innerHTML += '<input id="chkBuyStorage" title="Autobuy storage" style="left: 50%; top: 50%; position: absolute;" type="checkbox" checked="checked">';
- }
- return document.getElementById("chkBuyStorage").checked;
- }
- document.getElementById("buildingsTitleSpan").outerHTML += '<input id="chkBuyWarps" title="Autobuy Warpstations" style=right:100; position: absolute;" type="checkbox">';
- AutoBuyWarp=function ()
- {
- if (!document.getElementById("chkBuyWarps"))
- {
- document.getElementById("buildingsTitleSpan").outerHTML += '<input id="chkBuyWarps" title="Autobuy Warpstations" style=right:100; position: absolute;" type="checkbox">';
- }
- return document.getElementById("chkBuyWarps").checked;
- }
- document.getElementById("buildingsTitleSpan").outerHTML += '<input id="chkBuyNursery" title="Autobuy Nurseries" style=right:50; position: absolute;" type="checkbox">';
- AutoBuyNursery=function ()
- {
- if (!document.getElementById("chkBuyNursery"))
- {
- document.getElementById("buildingsTitleSpan").outerHTML += '<input id="chkBuyNursery" title="autobuy Nurseries" style=right:50; position: absolute;" type="checkbox">';
- }
- return document.getElementById("chkBuyNursery").checked;
- }
- document.getElementById("buildingsTitleSpan").outerHTML += '<input id="chkBuyBuilding" title="Autobuy buildings other than Nurseries and Warpstations. Housing types will stop being bought automatically once they become obsolete." type="checkbox">';
- AutoBuyBuilding=function ()
- {
- if (!document.getElementById("chkBuyBuilding"))
- {
- document.getElementById("buildingsTitleSpan").outerHTML += '<input id="chkBuyBuilding" title="Autobuy buildings other than Nurseries and Warpstations. Housing types will stop being bought automatically once they become obsolete." type="checkbox">';
- }
- return document.getElementById("chkBuyBuilding").checked;
- }
- document.getElementById("upgradesTitleSpan").innerHTML = '<input id="chkBuyUpgrades" title="Autobuy non-equipment upgrades" type="checkbox" align="right">Upgrades';
- AutoBuyUpgrades=function ()
- {
- if (!document.getElementById("chkBuyUpgrades"))
- {
- document.getElementById("upgradesTitleSpan").innerHTML = '<input id="chkBuyUpgrades" title="Autobuy non-equipment upgrades" type="checkbox" align="right">Upgrades"';
- }
- return document.getElementById("chkBuyUpgrades").checked;
- }
- document.getElementById("equipmentTitleSpan").innerHTML += '<table><tr><td><input id="chkBuyEquipH" title="Autobuy armor" type="checkbox"><input id="chkBuyEquipA" title="Autobuy weapons" type="checkbox"></td></tr><tr><td><input id="chkBuyPrestigeH" title="Autobuy armor upgrades" type="checkbox"><input id="chkBuyPrestigeA" title="Autobuy weapon upgrades" type="checkbox"></td></tr></table>';
- AutoBuyEquipH=function ()
- {
- if (!document.getElementById("chkBuyEquipH"))
- {
- document.getElementById("equipmentTitleSpan").innerHTML += '<table><tr><td><input id="chkBuyEquipH" title="Autobuy armor" type="checkbox"><input id="chkBuyEquipA" title="Autobuy weapons" type="checkbox"></td></tr><tr><td><input id="chkBuyPrestigeH" title="Autobuy armor upgrades" type="checkbox"><input id="chkBuyPrestigeA" title="Autobuy weapon upgrades" type="checkbox"></td></tr></table>';
- }
- return document.getElementById("chkBuyEquipH").checked;
- }
- AutoBuyPrestigeH=function ()
- {
- if (!document.getElementById("chkBuyPrestigeH"))
- {
- document.getElementById("equipmentTitleSpan").innerHTML += '<table><tr><td><input id="chkBuyEquipH" title="Autobuy armor" type="checkbox"><input id="chkBuyEquipA" title="Autobuy weapons" type="checkbox"></td></tr><tr><td><input id="chkBuyPrestigeH" title="Autobuy armor upgrades" type="checkbox"><input id="chkBuyPrestigeA" title="Autobuy weapon upgrades" type="checkbox"></td></tr></table>';
- }
- return document.getElementById("chkBuyPrestigeH").checked;
- }
- AutoBuyEquipA=function ()
- {
- if (!document.getElementById("chkBuyEquipA"))
- {
- document.getElementById("equipmentTitleSpan").innerHTML += '<table><tr><td><input id="chkBuyEquipH" title="Autobuy armor" type="checkbox"><input id="chkBuyEquipA" title="Autobuy weapons" type="checkbox"></td></tr><tr><td><input id="chkBuyPrestigeH" title="Autobuy armor upgrades" type="checkbox"><input id="chkBuyPrestigeA" title="Autobuy weapon upgrades" type="checkbox"></td></tr></table>';
- }
- return document.getElementById("chkBuyEquipA").checked;
- }
- AutoBuyPrestigeA=function ()
- {
- if (!document.getElementById("chkBuyPrestigeA"))
- {
- document.getElementById("equipmentTitleSpan").innerHTML += '<table><tr><td><input id="chkBuyEquipH" title="Autobuy armor" type="checkbox"><input id="chkBuyEquipA" title="Autobuy weapons" type="checkbox"></td></tr><tr><td><input id="chkBuyPrestigeH" title="Autobuy armor upgrades" type="checkbox"><input id="chkBuyPrestigeA" title="Autobuy weapon upgrades" type="checkbox"></td></tr></table>';
- }
- return document.getElementById("chkBuyPrestigeA").checked;
- }
- document.getElementById("badGuyName").outerHTML = '<input id="chkAutoChangeFormation" title="Change formations automatically" type="checkbox" checked="checked">' + document.getElementById("badGuyName").outerHTML;
- AutoChangeFormation=function ()
- {
- if (!document.getElementById("chkAutoChangeFormation"))
- {
- document.getElementById("badGuyName").outerHTML = '<input id="chkAutoChangeFormation" title="Change formations automatically" type="checkbox" checked="checked">' + document.getElementById("badGuyName").outerHTML;
- }
- return document.getElementById("chkAutoChangeFormation").checked;
- }
- OldTooltip=tooltip;
- tooltip=function(a,b,c,d,e,f,g,h,i,j,k,l,m)
- {
- if (ShowTooltips || a=='hide')
- {
- OldTooltip(a,b,c,d,e,f,g,h,i,j,k,l,m);
- }
- }
- BuyDaBuilding=function(what)
- {
- ShowTooltips=false;
- buyBuilding(what);
- ShowTooltips=true;
- }
- BuyDaEquip=function(what)
- {
- ShowTooltips=false;
- buyEquipment(what);
- ShowTooltips=true;
- }
- BuyDaUpgrade=function(what)
- {
- ShowTooltips=false;
- buyUpgrade(what);
- ShowTooltips=true;
- }
- TheThings={
- 'Dagger':{
- Upgrade: 'Dagadder',
- Stat:'attack',
- Resource:'metal',
- Equip:true
- },
- 'Mace':{
- Upgrade: 'Megamace',
- Stat:'attack',
- Resource:'metal',
- Equip:true
- },
- 'Polearm':{
- Upgrade: 'Polierarm',
- Stat:'attack',
- Resource:'metal',
- Equip:true
- },
- 'Battleaxe':{
- Upgrade: 'Axeidic',
- Stat:'attack',
- Resource:'metal',
- Equip:true
- },
- 'Greatsword':{
- Upgrade: 'Greatersword',
- Stat:'attack',
- Resource:'metal',
- Equip:true
- },
- 'Boots':{
- Upgrade: 'Bootboost',
- Stat:'health',
- Resource:'metal',
- Equip:true
- },
- 'Helmet':{
- Upgrade: 'Hellishmet',
- Stat:'health',
- Resource:'metal',
- Equip:true
- },
- 'Pants':{
- Upgrade: 'Pantastic',
- Stat:'health',
- Resource:'metal',
- Equip:true
- },
- 'Shoulderguards':{
- Upgrade: 'Smoldershoulder',
- Stat:'health',
- Resource:'metal',
- Equip:true
- },
- 'Breastplate':{
- Upgrade: 'Bestplate',
- Stat:'health',
- Resource:'metal',
- Equip:true
- },
- 'Arbalest':{
- Upgrade: 'Harmbalest',
- Stat:'attack',
- Resource:'metal',
- Equip:true
- },
- 'Gambeson':{
- Upgrade: 'GambesOP',
- Stat:'health',
- Resource:'metal',
- Equip:true
- },
- 'Shield':{
- Upgrade: 'Supershield',
- Stat:'health',
- Resource:'wood',
- Equip:true
- },
- 'Gym':{
- Upgrade: 'Gymystic',
- Stat:'block',
- Resource:'wood',
- Equip:false
- }
- }
- function GetObject(what)
- {
- var Thing=TheThings[what];
- return Thing.Equip?game.equipment[what]:game.buildings[what];
- }
- function Factor(what)
- {
- var Thing=TheThings[what];
- var Object=GetObject(what);
- if (what=='Shield')
- {
- if (Object.blockNow)
- {
- Thing.Stat='block';
- }
- else
- {
- Thing.Stat='health';
- }
- }
- var Eff=Effect(Object,Thing);
- var Cos=Cost(Object,Thing);
- var Res=Eff/Cos;
- var Status='white';
- var Wall=false;
- //white - Upgrade is not available
- //yellow - Upgrade is not affordable
- //orange - Upgrade is affordable, but will lower stats
- //red - Yes, do it now!
- if (!game.upgrades[Thing.Upgrade].locked)
- {
- //Evaluating upgrade!
- var CanAfford=canAffordTwoLevel(game.upgrades[Thing.Upgrade]);
- if (Thing.Equip)
- {
- var NextEff=PrestigeValue(Thing.Upgrade);
- var NextCost=getNextPrestigeCost(Thing.Upgrade) * Math.pow(1 - game.portal.Artisanistry.modifier, game.portal.Artisanistry.level);
- Wall=NextEff/NextCost>Res;
- }
- if (!CanAfford)
- {
- Status='yellow';
- }
- else
- {
- if (!Thing.Equip)
- {
- //Gymystic is always cool, fuck shield
- Status='red';
- }
- else
- {
- var CurrEff=Object.level*Eff;
- var NeedLevel=Math.ceil(CurrEff/NextEff);
- var Ratio=Object.cost[Thing.Resource][1];
- var NeedResource=NextCost*(Math.pow(Ratio,NeedLevel)-1)/(Ratio-1);
- if (game.resources[Thing.Resource].owned>NeedResource)
- {
- Status='red';
- }
- else
- {
- Status='orange';
- }
- }
- }
- }
- return {
- Stat:Thing.Stat,
- Factor:Res,
- Status:Status,
- Wall:Wall
- };
- }
- function Effect(Object,Thing)
- {
- if (Thing.Equip)
- {
- return Object[Thing.Stat+'Calculated'];
- }
- else
- {
- //That be Gym
- var oldBlock = Object.increase.by*Object.owned;
- var Mod=game.upgrades.Gymystic.done?(game.upgrades.Gymystic.modifier + (0.01 * (game.upgrades.Gymystic.done - 1))):1;
- var newBlock=Object.increase.by*(Object.owned+1)*Mod;
- return newBlock-oldBlock;
- }
- }
- function Cost(Object,Thing)
- {
- var price = parseFloat(getBuildingItemPrice(Object, Thing.Resource, Thing.Equip));
- if (Thing.Equip) price = Math.ceil(price * (Math.pow(1 - game.portal.Artisanistry.modifier, game.portal.Artisanistry.level)));
- return price;
- }
- function PrestigeValue(what)
- {
- var name = game.upgrades[what].prestiges;
- var equipment = game.equipment[name];
- var stat;
- if (equipment.blockNow) stat = "block";
- else stat = (typeof equipment.health !== 'undefined') ? "health" : "attack";
- var toReturn = Math.round(equipment[stat] * Math.pow(1.19, ((equipment.prestige) * game.global.prestige[stat]) + 1));
- return toReturn;
- }
- function EvalAll()
- {
- var Best={
- 'healthwood':{Factor:0,Name:'',Wall:false,Status:'white'},
- 'healthmetal':{Factor:0,Name:'',Wall:false,Status:'white'},
- 'attackmetal':{Factor:0,Name:'',Wall:false,Status:'white'},
- 'blockwood':{Factor:0,Name:'',Wall:false,Status:'white'},
- };
- for (var what in TheThings)
- {
- var Object=GetObject(what);
- if (!Object.locked)
- {
- document.getElementById(what).style.color='white';
- var Evaluation=Factor(what);
- var BKey=TheThings[what].Stat+TheThings[what].Resource;
- //console.log(BKey);
- if (Best[BKey].Factor==0 || Best[BKey].Factor<Evaluation.Factor)
- {
- Best[BKey].Factor=Evaluation.Factor;
- Best[BKey].Name=what;
- Best[BKey].Wall=Evaluation.Wall;
- Best[BKey].Status=Evaluation.Status;
- }
- document.getElementById(what).style.borderColor=Evaluation.Status;
- if (Evaluation.Status!='white' && Evaluation.Status!='yellow')
- {
- document.getElementById(TheThings[what].Upgrade).style.color=Evaluation.Status;
- }
- if (Evaluation.Status=='yellow')
- {
- document.getElementById(TheThings[what].Upgrade).style.color='white';
- }
- if (Evaluation.Wall)
- {
- document.getElementById(what).style.color='yellow';
- }
- if(
- Evaluation.Status=='red'
- &&
- (
- (
- AutoBuyPrestigeA()
- &&
- TheThings[what].Stat=='attack'
- )
- ||
- (
- AutoBuyPrestigeH()
- &&
- (
- TheThings[what].Stat=='health'
- ||
- TheThings[what].Stat=='block'
- )
- )
- )
- )
- {
- var upgrade = TheThings[what].Upgrade;
- console.log('Wanna do upgrade '+upgrade);
- BuyDaUpgrade(upgrade);
- }
- }
- }
- for (var stat in Best)
- {
- if (Best[stat].Name!='')
- {
- var DaThing=TheThings[Best[stat].Name];
- document.getElementById(Best[stat].Name).style.color=Best[stat].Wall?'orange':'red';
- if (
- (
- AutoBuyEquipA()
- &&
- DaThing.Stat=='attack'
- )
- ||
- (
- AutoBuyEquipH()
- &&
- (
- DaThing.Stat=='health'
- ||
- DaThing.Stat=='block'
- )
- )
- )
- {
- if (DaThing.Equip && !Best[stat].Wall && canAffordBuilding(Best[stat].Name, null, null, true))
- {
- console.log('Wanna level equip '+Best[stat].Name);
- BuyDaEquip(Best[stat].Name);
- }
- }
- }
- }
- }
- setInterval('EvalAll()',250);
- Builder={
- Buys: {},
- Start: function(what, counter)
- {
- this.Buys[what]=setInterval(function()
- {
- if (what=='Warpstation') //Special cases!
- {
- if (AutoBuyBuilding() && AutoBuyWarp() && !game.buildings[what].locked && canAffordBuilding(what))
- {
- console.log('Wanna buy '+what);
- BuyDaBuilding(what);
- }
- else if (
- (
- counter!=null
- &&
- game.buildings[what].owned>=counter+game.upgrades.Gigastation.done*counter/10.0
- )
- &&
- AutoBuyUpgrades()
- &&
- !game.upgrades.Gigastation.locked
- )
- {
- if (canAffordTwoLevel(game.upgrades.Gigastation))
- {
- var upgrade = 'Gigastation';
- console.log('Wanna do upgrade '+upgrade);
- BuyDaUpgrade(upgrade);
- }
- }
- }
- else if (AutoBuyBuilding() && !game.buildings[what].locked && canAffordBuilding(what))
- {
- if (counter==null || game.buildings[what].purchased<counter)
- {
- if (what=='Collector') // Special cases FTW
- {
- var Coll=game.buildings.Collector;
- var Warp=game.buildings.Warpstation;
- if (!Warp.locked)
- {
- CollGemCost=Coll.cost.gems[0]*Math.pow(Coll.cost.gems[1],Coll.purchased);
- CollEffect=Coll.increase.by/CollGemCost;
- WarpGemCost=Warp.cost.gems[0]*Math.pow(Warp.cost.gems[1],Warp.purchased);
- WarpEffect=Warp.increase.by/WarpGemCost;
- }
- if (Warp.locked || CollEffect>WarpEffect || game.resources.gems.owned>CollGemCost+WarpGemCost)
- {
- console.log('Wanna buy '+what);
- BuyDaBuilding(what);
- }
- }
- else if (what=='Nursery')
- {
- if(AutoBuyNursery())
- {
- var Wanna=true;
- if (game.jobs.Geneticist.locked && (GetBreedTime()<GeneticistTimeLimit()+1 || game.buildings.Nursery.purchased!=game.buildings.Nursery.owned))
- {
- Wanna=false;
- }
- if (!game.buildings.Collector.locked && !game.global.brokenPlanet && game.buildings.Collector.purchased<game.buildings.Nursery.purchased/10)
- {
- Wanna=false;
- }
- if (Wanna)
- {
- console.log('Wanna buy '+what);
- BuyDaBuilding(what);
- }
- }
- }
- else
- {
- console.log('Wanna buy '+what);
- BuyDaBuilding(what);
- }
- }
- }
- },250);
- },
- Stop: function(what)
- {
- if (this.Buys[what])
- {
- clearInterval(this.Buys[what]);
- delete this.Buys[what];
- }
- }
- }
- setInterval(function(){
- var packMod = 1 + game.portal.Packrat.level * game.portal.Packrat.modifier;
- var motMod = 1 + game.portal.Motivation.level * game.portal.Motivation.modifier;
- var Bs={'Barn':'food','Shed':'wood','Forge':'metal'};
- var Js={'Barn':'Farmer','Shed':'Lumberjack','Forge':'Miner'};
- for (var B in Bs)
- {
- var Res=game.resources[Bs[B]];
- var Job=game.jobs[Js[B]];
- if (Res.owned>Res.max*packMod*0.9 || Job.owned*Job.modifier*motMod*600>Res.max*packMod)
- {
- //console.log(B+': '+Bs[B]+' - '+game.resources[Bs[B]].owned+'/'+(game.resources[Bs[B]].max*packMod*0.99));
- if (AutoBuyStorage() && canAffordBuilding(B))
- {
- console.log('Wanna buy '+B);
- BuyDaBuilding(B);
- }
- }
- }
- },
- 250);
- Us=[
- 'Coordination',
- 'Speedminer',
- 'Speedlumber',
- 'Speedfarming',
- 'Speedscience',
- 'Megaminer',
- 'Megalumber',
- 'Megafarming',
- 'Megascience',
- 'Efficiency',
- 'Potency',
- 'TrainTacular',
- 'Miners',
- 'Scientists',
- 'Trainers',
- 'Explorers',
- 'Blockmaster',
- 'Battle',
- 'Bloodlust',
- 'Bounty',
- 'Egg',
- 'Anger',
- 'Formations',
- 'Dominance',
- 'Barrier',
- 'UberHut',
- 'UberHouse',
- 'UberMansion',
- 'UberHotel',
- 'UberResort'
- ];
- setInterval(function(){
- for (var U in Us)
- {
- var name=Us[U];
- var up=game.upgrades[Us[U]];
- if (AutoBuyUpgrades() && up.allowed>up.done && canAffordTwoLevel(up))
- {
- if (name=='Potency')
- {
- if ((game.jobs.Geneticist.locked && GetBreedTime()>GeneticistTimeLimit()+1) || !game.jobs.Geneticist.locked)
- {
- console.log('Wanna read '+name);
- BuyDaUpgrade(name);
- }
- }
- else
- {
- if (name!='Coordination')
- {
- console.log('Wanna read '+name);
- }
- BuyDaUpgrade(name);
- }
- }
- }
- },
- 250);
- Builder.Start('Hut',75)
- Builder.Start('House',75)
- Builder.Start('Gym')
- Builder.Start('Mansion',75)
- Builder.Start('Hotel',75)
- Builder.Start('Resort',75)
- Builder.Start('Gateway',20)
- Builder.Start('Wormhole',0)
- Builder.Start('Collector', 250)
- Builder.Start('Warpstation',27)
- Builder.Start('Tribute')
- Builder.Start('Nursery')
- function InitializeJobsTextboxes()
- {
- //Initialize the autobuy jobs checkbox along with the five textboxes, to make sure they're ordered correctly.
- //document.getElementById("jobsTitleSpan").innerHTML += '<input id="chkBuyJobs" title="autobuy Jobs" type="checkbox"><input id="txtGeneticistTimeLimit" title="balance Geneticists for this breeding time" style="width: 50px; height: 25px; color: black;" type="text" value="30"></input>';
- //document.getElementById("jobsTitleSpan").innerHTML += '<input id="txtWantFarmers" title="desired ratio of Farmers" style="width: 50px; height: 25px; color: black;" type="text" value=".325"></input>';
- //document.getElementById("jobsTitleSpan").innerHTML += '<input id="txtWantLumbers" title="desired ratio of Lumbers" style="width: 50px; height: 25px; color: black;" type="text" value=".275"></input>';
- //document.getElementById("jobsTitleSpan").innerHTML += '<input id="txtWantMiners" title="desired ratio of Miners" style="width: 50px; height: 25px; color: black;" type="text" value=".5"></input>';
- //document.getElementById("jobsTitleSpan").innerHTML += '<input id="txtWantScientists" title="desired ratio of Scientists" style="width: 50px; height: 25px; color: black;" type="text" value="0"></input>';
- }
- document.getElementById("jobsTitleSpan").innerHTML += '<input id="chkBuyJobs" title="Autobuy Farmer/Lumberjack/Miner/Scientist/Geneticist jobs using the inputted ratios and breed time" type="checkbox"></input>';
- document.getElementById("jobsTitleSpan").innerHTML += '<input id="txtWantFarmers" title="Desired ratio of Farmers" style="width: 50px; height: 25px; color: black;" type="text" value="0"></input>';
- document.getElementById("jobsTitleSpan").innerHTML += '<input id="txtWantLumbers" title="Desired ratio of Lumberjacks" style="width: 50px; height: 25px; color: black;" type="text" value="0"></input>';
- document.getElementById("jobsTitleSpan").innerHTML += '<input id="txtWantMiners" title="Desired ratio of Miners" style="width: 50px; height: 25px; color: black;" type="text" value="1"></input>';
- document.getElementById("jobsTitleSpan").innerHTML += '<br><input id="txtGeneticistTimeLimit" title="Balance Geneticists for this breeding time" style="width: 50px; height: 25px; color: black;" type="text" value="30"></input>';
- document.getElementById("jobsTitleSpan").innerHTML += '<input id="txtWantScientists" title="Desired ratio of Scientists" style="width: 50px; height: 25px; color: black;" type="text" value="0"></input>';
- document.getElementById("jobsTitleSpan").innerHTML += '<input id="chkPurchaseTrainers" title="Autobuy Trainers" type="checkbox"></input>';
- document.getElementById("jobsTitleSpan").innerHTML += '<input id="chkPurchaseExplorers" title="Autobuy Explorers" type="checkbox"></input>';
- document.getElementById("jobsTitleSpan").innerHTML += '<input id="chkTrainersExplorersExtraResources" title="only buy the next Trainer or Explorer if you have the resources for 15 more (the Purchase Trainers or Purchase Explorers checkbox must be enabled as well)" type="checkbox" checked="checked"></input>';
- AutoBuyJobs=function ()
- {
- if (!document.getElementById("chkBuyJobs"))
- {
- InitializeJobsTextboxes();
- }
- return document.getElementById("chkBuyJobs").checked;
- }
- PurchaseTrainersCheckbox=function ()
- {
- if (!document.getElementById("chkPurchaseTrainers"))
- {
- InitializeJobsTextboxes();
- }
- return document.getElementById("chkPurchaseTrainers").checked;
- }
- PurchaseExplorersCheckbox=function ()
- {
- if (!document.getElementById("chkPurchaseExplorers"))
- {
- InitializeJobsTextboxes();
- }
- return document.getElementById("chkPurchaseExplorers").checked;
- }
- TrainersExplorersExtraResourcesCheckbox=function ()
- {
- if (!document.getElementById("chkTrainersExplorersExtraResources"))
- {
- InitializeJobsTextboxes();
- }
- return document.getElementById("chkTrainersExplorersExtraResources").checked;
- }
- GeneticistTimeLimit=function ()
- {
- if (!document.getElementById("txtGeneticistTimeLimit"))
- {
- InitializeJobsTextboxes();
- }
- var BT=parseFloat(document.getElementById("txtGeneticistTimeLimit").value) || 3;
- BT=(BT>3 && game.global.challengeActive=="Electricity")?3:BT;
- return BT;
- }
- WantFarmers=function ()
- {
- if (!document.getElementById("txtWantFarmers"))
- {
- InitializeJobsTextboxes();
- }
- var WF=parseFloat(document.getElementById("txtWantFarmers").value) || 0;
- return WF;
- }
- WantLumbers=function ()
- {
- if (!document.getElementById("txtWantLumbers"))
- {
- InitializeJobsTextboxes();
- }
- var WL=parseFloat(document.getElementById("txtWantLumbers").value) || 0;
- return WL;
- }
- WantMiners=function ()
- {
- if (!document.getElementById("txtWantMiners"))
- {
- InitializeJobsTextboxes();
- }
- var WM=parseFloat(document.getElementById("txtWantMiners").value) || 0;
- return WM;
- }
- WantScientists=function ()
- {
- if (!document.getElementById("txtWantScientists"))
- {
- InitializeJobsTextboxes();
- }
- var WS=parseFloat(document.getElementById("txtWantScientists").value) || 0;
- return WS;
- }
- function MaxWorkers()
- {
- return Math.ceil(game.resources.trimps.realMax() / 2);
- }
- function FreeWorkers()
- {
- return MaxWorkers()-game.resources.trimps.employed;
- }
- function canAffordJobLight(what, take, HowMany) {
- var trimps = game.resources.trimps;
- var toBuy = HowMany;
- var job = game.jobs[what];
- for (var costItem in job.cost) {
- if (!checkJobItem(what, take, costItem, null, toBuy)) return false;
- }
- if (take) return toBuy;
- return true;
- }
- function TryAddGuys(what, HowMany)
- {
- var workspaces = FreeWorkers();
- if (workspaces < HowMany) return;
- if (!canAffordJobLight(what, false, HowMany)) return 0;
- var added = canAffordJobLight(what, true, HowMany);
- game.jobs[what].owned += added;
- game.resources.trimps.employed += added;
- return added;
- }
- function TryRemoveGuys(what, HowMany)
- {
- if (game.jobs[what].owned < 1) return 0;
- var toR=(game.jobs[what].owned < HowMany) ? game.jobs[what].owned : HowMany;
- game.resources.trimps.employed -= toR;
- game.jobs[what].owned -= toR;
- if (game.jobs[what].owned < 0) game.jobs[what].owned = 0;
- if (game.resources.trimps.employed < 0) game.resources.trimps.employed = 0;
- return toR;
- }
- function canAffordJobLight(what, take, HowMany) {
- var trimps = game.resources.trimps;
- var toBuy = HowMany;
- var job = game.jobs[what];
- for (var costItem in job.cost) {
- if (!checkJobItem(what, take, costItem, null, toBuy)) return false;
- }
- if (take) return toBuy;
- return true;
- }
- function GetBreedTime()
- {
- /*var trimps = game.resources.trimps;
- var trimpsMax = trimps.realMax();
- var Soldiers= game.portal.Coordinated.level ? game.portal.Coordinated.currentSend: game.resources.trimps.maxSoldiers;
- var potencyMod = trimps.potencyMod;
- potencyMod += (potencyMod * game.portal.Pheromones.level * game.portal.Pheromones.modifier);
- if (game.jobs.Geneticist.owned > 0) potencyMod *= Math.pow(.98, game.jobs.Geneticist.owned);
- if (game.unlocks.quickTrimps) potencyMod *= 2;
- if (!game.global.brokenPlanet) potencyMod *= 10;
- if (game.global.challengeActive == "Toxicity" && game.challenges.Toxicity.stacks > 0){
- potencyMod *= Math.pow(game.challenges.Toxicity.stackMult, game.challenges.Toxicity.stacks);
- }
- var max = Math.ceil((trimpsMax - trimps.employed) * 0.05);
- var timeRemaining = log10((trimpsMax - max - trimps.employed) / (trimpsMax - max - Soldiers - trimps.employed)) / log10(1 + (potencyMod / 10));
- /*console.error("trimps: " + game.resources.trimps);
- console.error("trimpsMax: " + trimps.realMax());
- console.error("game.jobs.Geneticist.owned: " + game.jobs.Geneticist.owned);
- console.error("game.global.brokenPlanet: " + game.global.brokenPlanet);
- console.error("trimps.employed: " + trimps.employed);
- console.error("Soldiers: " + Soldiers);
- console.error("game.portal.Pheromones.level: " + game.portal.Pheromones.level);
- console.error("trimps.potency: " + trimps.potency);
- console.error("game.portal.Pheromones.modifier: " + game.portal.Pheromones.modifier);
- console.error("time remaining: " + timeRemaining);
- return timeRemaining;
- */
- var trimps = game.resources.trimps;
- var trimpsMax = trimps.realMax();
- var Soldiers= game.portal.Coordinated.level ? game.portal.Coordinated.currentSend: game.resources.trimps.maxSoldiers;
- //var breeding = trimps.owned - trimps.employed;
- var potencyMod = trimps.potency;
- //Add potency (book)
- if (game.upgrades.Potency.done > 0) potencyMod *= Math.pow(1.1, game.upgrades.Potency.done);
- //Add Nurseries
- if (game.buildings.Nursery.owned > 0) potencyMod *= Math.pow(1.01, game.buildings.Nursery.owned);
- //Add Venimp
- if (game.unlocks.impCount.Venimp > 0) potencyMod *= Math.pow(1.003, game.unlocks.impCount.Venimp);
- //Broken Planet
- if (game.global.brokenPlanet) potencyMod /= 10;
- //Pheromones
- potencyMod *= 1+ (game.portal.Pheromones.level * game.portal.Pheromones.modifier);
- //Geneticist
- if (game.jobs.Geneticist.owned > 0) potencyMod *= Math.pow(.98, game.jobs.Geneticist.owned);
- //Quick Trimps
- if (game.unlocks.quickTrimps) potencyMod *= 2;
- if (game.global.challengeActive == "Daily"){
- if (typeof game.global.dailyChallenge.dysfunctional !== 'undefined'){
- potencyMod *= dailyModifiers.dysfunctional.getMult(game.global.dailyChallenge.dysfunctional.strength);
- }
- if (typeof game.global.dailyChallenge.toxic !== 'undefined'){
- potencyMod *= dailyModifiers.toxic.getMult(game.global.dailyChallenge.toxic.strength, game.global.dailyChallenge.toxic.stacks);
- }
- }
- if (game.global.challengeActive == "Toxicity" && game.challenges.Toxicity.stacks > 0){
- potencyMod *= Math.pow(game.challenges.Toxicity.stackMult, game.challenges.Toxicity.stacks);
- }
- if (game.global.voidBuff == "slowBreed"){
- potencyMod *= 0.2;
- }
- potencyMod = calcHeirloomBonus("Shield", "breedSpeed", potencyMod);
- //breeding = breeding * potencyMod;
- potencyMod = (1 + (potencyMod / 10));
- var timeRemaining = log10((trimpsMax - trimps.employed) / (trimps.owned - trimps.employed)) / log10(potencyMod);
- timeRemaining /= 10;
- //Calculate full breed time
- var fullBreed = 0;
- var adjustedMax = (game.portal.Coordinated.level) ? game.portal.Coordinated.currentSend : trimps.maxSoldiers;
- var totalTime = log10((trimpsMax - trimps.employed) / (trimpsMax - adjustedMax - trimps.employed)) / log10(potencyMod);
- totalTime /= 10;
- //game.global.breedTime = adjustedMax / breeding;
- /*if (game.jobs.Geneticist.locked == false && game.global.Geneticistassist && game.global.GeneticistassistSetting > 0){
- var target = game.global.GeneticistassistSetting;
- //tired of typing Geneticistassist
- var GAElem = document.getElementById('Geneticistassist');
- var GAIndicator = document.getElementById('GAIndicator');
- var canRun = false;
- if (lastGAToggle == -1) canRun = true;
- else if (new Date().getTime() > lastGAToggle + 2000){
- lastGAToggle = -1;
- canRun = true;
- }
- if (GAElem && canRun){
- var thresh = totalTime * 0.02;
- var compareTime = (timeRemaining > 5 && (timeRemaining > target + 1)) ? (timeRemaining - 1) : totalTime;
- if (!isFinite(thresh)) thresh = 0;
- if (!isFinite(compareTime)) compareTime = 999;
- if (compareTime < target) {
- swapClass("state", "stateHiring", GAElem);
- if (game.resources.food.owned * 0.01 < getNextGeneticistCost()){
- GAIndicator.innerHTML = " (<span style='font-size: 0.8em' class='glyphicon glyphicon-apple'></span>)";
- }
- else if (timeRemaining < 5) {
- addGeneticist();
- GAIndicator.innerHTML = " (+)";
- }
- else GAIndicator.innerHTML = " (<span style='font-size: 0.8em' class='icmoon icon-clock3'></span>)";
- }
- else if (compareTime - thresh > target) {
- swapClass("state", "stateFiring", GAElem);
- GAIndicator.innerHTML = " (-)";
- removeGeneticist();
- }
- else {
- swapClass("state", "stateHappy", GAElem);
- GAIndicator.innerHTML = "";
- }
- }
- }*/
- //timeRemaining = (game.options.menu.showFullBreed.enabled > 0) ? timeRemaining.toFixed(1) : Math.ceil(timeRemaining);
- //console.error("totalTime.toFixed(1): " + totalTime.toFixed(1));
- //console.error("totalTime: " + totalTime);
- //console.error("game.global.breedTime: " + game.global.breedTime);
- return totalTime;
- }
- var geneA = 1;
- var geneB = 0;
- var geneC = 0;
- var geneD = 0;
- var geneMod = 0.05;
- var bufferPlus = 0;
- if (game.global.challengeActive == "Toxicity")
- {
- bufferPlus = 400
- }
- else
- {
- bufferPlus = 0
- }
- TheJobs=[
- {
- Name:'Explorer',
- Want:1,
- Buffer:0,
- Increase:function(want){return game.jobs.Explorer.owned<100?10:0;}
- },
- {
- Name:'Trainer',
- Want:1,
- Buffer:0,
- Increase:function(want){return Math.ceil((game.jobs.Trainer.owned+1)/100);}
- },
- {
- Name:'Farmer',
- Want: (WantMiners() + WantFarmers() + WantLumbers() + WantScientists()<=0)?0:(WantFarmers()/(WantMiners() + WantFarmers() + WantLumbers() + WantScientists())),
- Buffer:102+bufferPlus,
- Increase:function(want){return Math.ceil(want/10);}
- },
- {
- Name:'Lumberjack',
- Want: (WantMiners() + WantFarmers() + WantLumbers() + WantScientists()<=0)?0:(WantLumbers()/(WantMiners() + WantFarmers() + WantLumbers() + WantScientists())),
- Buffer:101+bufferPlus,
- Increase:function(want){return Math.ceil(want/10);}
- },
- {
- Name:'Miner',
- Want: (WantMiners() + WantFarmers() + WantLumbers() + WantScientists()<=0)?0:(WantMiners()/(WantMiners() + WantFarmers() + WantLumbers() + WantScientists())),
- Buffer:100+bufferPlus,
- Increase:function(want){return Math.ceil(want/10);}
- },
- {
- Name:'Scientist',
- Want: (WantMiners() + WantFarmers() + WantLumbers() + WantScientists()<=0)?0:(WantScientists()/(WantMiners() + WantFarmers() + WantLumbers() + WantScientists())),
- Buffer:103+bufferPlus,
- Increase:function(want){return Math.ceil(want/10);}
- },
- {
- Name:'Geneticist',
- Want:1,
- Buffer:0,
- Increase:function(want){
- var GBT=GeneticistTimeLimit();
- var RBT=GetBreedTime();
- GBT=(GBT<1)?1:((GBT>30?30:GBT)); //Bounds the player input between 1s and 30s.
- if(RBT < GBT - 0.05) //+ 0.3)
- {
- geneD = geneC;
- geneC = geneB;
- geneB = geneA;
- geneA = 1;
- if (geneA + geneB + geneC + geneD != 0)
- geneMod = 0.05;
- else geneMod += 0.1;
- return 1;
- }
- else
- {
- if(RBT > GBT + geneMod) //+ 0.9 variable)
- {
- geneD = geneC;
- geneC = geneB;
- geneB = geneA;
- geneA = -1;
- if (geneA + geneB + geneC + geneD == 0)
- geneMod += 0.1;
- else geneMod = 0.05;
- return -1;
- }
- else return 0;
- }
- //return (RBT<GBT+0.3)?1:((RBT>GBT+0.9)?-1:0);
- }
- }
- ];
- function JobsTime()
- {
- var MaxW=MaxWorkers();
- var FreeW=FreeWorkers();
- for (var TJ in TheJobs)
- {
- var TheJob=TheJobs[TJ];
- if (!game.jobs[TheJob.Name].locked && document.getElementById(TheJob.Name))
- {
- if(TheJob.Name=='Trainer' && game.resources.trimps.owned>MaxWorkers())
- {
- if(PurchaseTrainersCheckbox())
- {
- var amount_to_afford = 0;
- if(TrainersExplorersExtraResourcesCheckbox())
- amount_to_afford = 15;
- if(canAffordJobLight(TheJob.Name, false, amount_to_afford))
- {
- var added=TryAddGuys(TheJob.Name,1);
- if (added>0)
- {
- //console.log('Want '+Want+' of '+TheJob.Name);
- FreeW-=added;
- }
- }
- }
- }
- else if(TheJob.Name=='Explorer' && game.resources.trimps.owned>MaxWorkers())
- {
- if(PurchaseExplorersCheckbox())
- {
- var amount_to_afford = 0;
- if(TrainersExplorersExtraResourcesCheckbox())
- amount_to_afford = 15;
- if(canAffordJobLight(TheJob.Name, false, amount_to_afford))
- {
- var added=TryAddGuys(TheJob.Name,1);
- if (added>0)
- {
- //console.log('Want '+Want+' of '+TheJob.Name);
- FreeW-=added;
- }
- }
- }
- }
- else if (AutoBuyJobs())
- {
- //Update the want values to match the input boxes.
- if(TheJob.Name=='Farmer')
- TheJob.Want = (WantMiners() + WantFarmers() + WantLumbers() + WantScientists()<=0)?0:(WantFarmers()/(WantMiners() + WantFarmers() + WantLumbers() + WantScientists()));
- else if(TheJob.Name=='Lumberjack')
- TheJob.Want = (WantMiners() + WantFarmers() + WantLumbers() + WantScientists()<=0)?0:(WantLumbers()/(WantMiners() + WantFarmers() + WantLumbers() + WantScientists()));
- else if(TheJob.Name=='Miner')
- TheJob.Want = (WantMiners() + WantFarmers() + WantLumbers() + WantScientists()<=0)?0:(WantMiners()/(WantMiners() + WantFarmers() + WantLumbers() + WantScientists()));
- else if(TheJob.Name=='Scientist')
- TheJob.Want = (WantMiners() + WantFarmers() + WantLumbers() + WantScientists()<=0)?0:(WantScientists()/(WantMiners() + WantFarmers() + WantLumbers() + WantScientists()));
- var Target=Math.floor((MaxW-TheJob.Buffer)*TheJob.Want);
- var Want=Math.min(FreeW-TheJob.Buffer,TheJob.Increase(Math.min(FreeW-TheJob.Buffer, Target-game.jobs[TheJob.Name].owned)));
- if (Want>0 && game.resources.trimps.owned>MaxWorkers())
- {
- var added=TryAddGuys(TheJob.Name,Want);
- if (added>0)
- {
- //console.log('Want '+Want+' of '+TheJob.Name);
- FreeW-=added;
- }
- }
- else if (Want<0 && TheJob.Name=='Geneticist')
- {
- //console.log('Want '+Want+' of '+TheJob.Name);
- var removed=TryRemoveGuys(TheJob.Name, -Want);
- if (removed>0)
- {
- //console.log('Want '+Want+' of '+TheJob.Name);
- FreeW+=removed;
- }
- }
- }
- }
- }
- }
- setInterval('JobsTime()',250);
- //Handles auto-changing formations (to Heap or Barrier against Fast enemies and Dominance against non-Fast)
- function CheckChangeFormation()
- {
- if(AutoChangeFormation() && game.upgrades.Formations.done && getCurrentEnemy() != null) //If the checkbox is checked
- {
- //get back to a baseline of no stance (X)
- calcBaseDamageinX();
- //no need to continue
- //if (game.global.gridArray.length === 0) return;
- //start analyzing autostance
- var missingHealth = game.global.soldierHealthMax - game.global.soldierHealth;
- var newSquadRdy = game.resources.trimps.realMax() <= game.resources.trimps.owned + 1;
- var dHealth = baseHealth/2;
- var xHealth = baseHealth;
- var bHealth = baseHealth/2;
- var hHealth = baseHealth * 4;
- if (!game.global.mapsActive && !game.global.preMapsActive) { //In maps
- enemy = getCurrentEnemy();
- var enemyFast = game.global.challengeActive == "Slow" || ((((game.badGuys[enemy.name].fast || enemy.corrupted) && game.global.challengeActive != "Nom") && game.global.challengeActive != "Coordinate"));
- var enemyHealth = enemy.health;
- var enemyDamage = enemy.attack * 1.2; //changed by genBTC from 1.19 (there is no fluctuation)
- //check for world Corruption
- if (enemy.corrupted && enemy.corrupted != "none"){ //enemy.corrupted is set to "none" for holiday enemies (pumpkimps/presimpts)
- enemyHealth *= getCorruptScale("health");
- enemyDamage *= getCorruptScale("attack");
- }
- if (enemy && enemy.corrupted == 'corruptStrong') {
- enemyDamage *= 2;
- }
- if (enemy && enemy.corrupted == 'corruptTough') {
- enemyHealth *= 5;
- }
- if (game.global.challengeActive == 'Lead') {
- enemyDamage *= (1 + (game.challenges.Lead.stacks * 0.04));
- }
- if (game.global.challengeActive == 'Watch') {
- enemyDamage *= 1.25;
- }
- if (game.global.challengeActive == "Daily"){
- if (typeof game.global.dailyChallenge.badStrength !== 'undefined'){
- enemyDamage *= dailyModifiers.badStrength.getMult(game.global.dailyChallenge.badStrength.strength);
- }
- if (typeof game.global.dailyChallenge.bloodthirst !== 'undefined'){
- enemyDamage *= dailyModifiers.bloodthirst.getMult(game.global.dailyChallenge.bloodthirst.strength, game.global.dailyChallenge.bloodthirst.stacks)
- }
- }
- var pierceMod = 0;
- if (game.global.challengeActive == "Lead") pierceMod += (game.challenges.Lead.stacks * 0.001);
- var dDamage = enemyDamage - baseBlock / 2 > enemyDamage * (0.2 + pierceMod) ? enemyDamage - baseBlock / 2 : enemyDamage * (0.2 + pierceMod);
- var xDamage = enemyDamage - baseBlock > enemyDamage * (0.2 + pierceMod) ? enemyDamage - baseBlock : enemyDamage * (0.2 + pierceMod);
- var bDamage = enemyDamage - baseBlock * 4 > enemyDamage * (0.1 + pierceMod) ? enemyDamage - baseBlock * 4 : enemyDamage * (0.1 + pierceMod);
- var hDamage = enemyDamage - baseBlock / 2 > enemyDamage * (0.2 + pierceMod) ? enemyDamage - baseBlock / 2 : enemyDamage * (0.2 + pierceMod);
- } else if (game.global.mapsActive && !game.global.preMapsActive) { //In zones (not maps)
- enemy = getCurrentEnemy();
- var enemyFast = game.global.challengeActive == "Slow" || ((((game.badGuys[enemy.name].fast || enemy.corrupted) && game.global.challengeActive != "Nom") || game.global.voidBuff == "doubleAttack") && game.global.challengeActive != "Coordinate");
- var enemyHealth = enemy.health;
- var enemyDamage = enemy.attack * 1.2; //changed by genBTC from 1.19 (there is no fluctuation)
- //check for voidmap Corruption
- if (getCurrentMapObject().location == "Void" && enemy.corrupted){
- enemyHealth *= (getCorruptScale("health") / 2).toFixed(1);
- enemyDamage *= (getCorruptScale("attack") / 2).toFixed(1);
- }
- if (enemy && enemy.corrupted == 'corruptStrong') {
- enemyDamage *= 2;
- }
- if (enemy && enemy.corrupted == 'corruptTough') {
- enemyHealth *= 5;
- }
- if (game.global.challengeActive == 'Lead') {
- enemyDamage *= (1 + (game.challenges.Lead.stacks * 0.04));
- }
- if (game.global.challengeActive == 'Watch') {
- enemyDamage *= 1.25;
- }
- if (game.global.challengeActive == "Daily"){
- if (typeof game.global.dailyChallenge.badStrength !== 'undefined'){
- enemyDamage *= dailyModifiers.badStrength.getMult(game.global.dailyChallenge.badStrength.strength);
- }
- if (typeof game.global.dailyChallenge.badMapStrength !== 'undefined' && game.global.mapsActive){
- enemyDamage *= dailyModifiers.badMapStrength.getMult(game.global.dailyChallenge.badMapStrength.strength);
- }
- if (typeof game.global.dailyChallenge.bloodthirst !== 'undefined'){
- enemyDamage *= dailyModifiers.bloodthirst.getMult(game.global.dailyChallenge.bloodthirst.strength, game.global.dailyChallenge.bloodthirst.stacks)
- }
- }
- var dDamage = enemyDamage - baseBlock / 2 > 0 ? enemyDamage - baseBlock / 2 : 0;
- var dVoidCritDamage = enemyDamage*5 - baseBlock / 2 > 0 ? enemyDamage*5 - baseBlock / 2 : 0;
- var xDamage = enemyDamage - baseBlock > 0 ? enemyDamage - baseBlock : 0;
- var xVoidCritDamage = enemyDamage*5 - baseBlock > 0 ? enemyDamage*5 - baseBlock : 0;
- var bDamage = enemyDamage - baseBlock * 4 > 0 ? enemyDamage - baseBlock * 4 : 0;
- var hDamage = enemyDamage - baseBlock / 2 > 0 ? enemyDamage - baseBlock / 2 : 0;
- }
- var drainChallenge = game.global.challengeActive == 'Nom' || game.global.challengeActive == "Toxicity";
- if (game.global.challengeActive == "Electricity" || game.global.challengeActive == "Mapocalypse") {
- dDamage+= dHealth * game.global.radioStacks * 0.1;
- xDamage+= xHealth * game.global.radioStacks * 0.1;
- bDamage+= bHealth * game.global.radioStacks * 0.1;
- hDamage+= hHealth * game.global.radioStacks * 0.1;
- } else if (drainChallenge) {
- dDamage += dHealth/20;
- xDamage += xHealth/20;
- bDamage += bHealth/20;
- hDamage += hHealth/20;
- } else if (game.global.challengeActive == "Crushed") {
- if(dHealth > baseBlock /2)
- dDamage = enemyDamage*5 - baseBlock / 2 > 0 ? enemyDamage*5 - baseBlock / 2 : 0;
- if(xHealth > baseBlock)
- xDamage = enemyDamage*5 - baseBlock > 0 ? enemyDamage*5 - baseBlock : 0;
- if(hHealth > baseBlock / 2)
- hDamage = enemyDamage*5 - baseBlock / 2 > 0 ? enemyDamage*5 - baseBlock / 2: 0;
- }
- if (game.global.voidBuff == "bleed" || (enemy && enemy.corrupted == 'corruptBleed')) {
- dDamage += game.global.soldierHealth * 0.2;
- xDamage += game.global.soldierHealth * 0.2;
- bDamage += game.global.soldierHealth * 0.2;
- hDamage += game.global.soldierHealth * 0.2;
- }
- baseDamage *= (game.global.titimpLeft > 0 ? 2 : 1); //consider titimp
- //double attack is OK if the buff isn't double attack, or we will survive a double attack, or we are going to one-shot them (so they won't be able to double attack)
- var doubleAttackOK = (game.global.voidBuff != 'doubleAttack' || (enemy && enemy.corrupted != 'corruptDbl')) || ((newSquadRdy && dHealth > dDamage * 2) || dHealth - missingHealth > dDamage * 2) || enemyHealth < baseDamage;
- //lead attack ok if challenge isn't lead, or we are going to one shot them, or we can survive the lead damage
- var leadDamage = game.challenges.Lead.stacks * 0.0005;
- var leadAttackOK = game.global.challengeActive != 'Lead' || enemyHealth < baseDamage || ((newSquadRdy && dHealth > dDamage + (dHealth * leadDamage)) || (dHealth - missingHealth > dDamage + (dHealth * leadDamage)));
- //added voidcrit.
- //voidcrit is OK if the buff isn't crit-buff, or we will survive a crit, or we are going to one-shot them (so they won't be able to crit)
- var isCritVoidMap = game.global.voidBuff == 'getCrit' || (enemy && enemy.corrupted == 'corruptCrit');
- var voidCritinDok = !isCritVoidMap || (!enemyFast ? enemyHealth < baseDamage : false) || (newSquadRdy && dHealth > dVoidCritDamage) || (dHealth - missingHealth > dVoidCritDamage);
- var voidCritinXok = !isCritVoidMap || (!enemyFast ? enemyHealth < baseDamage : false) || (newSquadRdy && xHealth > xVoidCritDamage) || (xHealth - missingHealth > xVoidCritDamage);
- //If the Dominance formation is not used, the formation with the lowest damage recieved to health ratio will be used.
- xRatio = (xDamage / xHealth) / 2;
- hRatio = hDamage / hHealth;
- bRatio = bDamage / bHealth;
- if (!game.global.preMapsActive) //&& game.global.soldierHealth > 0)
- {
- //Overkill calculations.
- var avgDamage = (baseDamage * (1-getPlayerCritChance()) + (baseDamage * getPlayerCritChance() * getPlayerCritDamageMult()));
- var avgScryerDamage = avgDamage * .5;
- var avgDominanceDamage = avgDamage * 4;
- var num_hits_in_scryer_to_kill_average_enemy = Math.ceil(getCurrentEnemy(1).maxHealth / avgScryerDamage);
- //var num_hits_in_dominance_to_kill_average_enemy = Math.ceil(getCurrentEnemy(1).maxHealth / avgDominanceDamage);
- var overkill_damage_scryer = avgScryerDamage * (game.portal.Overkill.level * 0.005);
- var overkill_damage_dominance = avgDominanceDamage * (game.portal.Overkill.level * 0.005);
- var next_enemy_health_after_overkill_scryer = getCurrentEnemy(1).maxHealth - overkill_damage_scryer;
- var next_enemy_health_after_overkill_dominance = getCurrentEnemy(1).maxHealth - overkill_damage_dominance;
- //Scryer stance. Use in the world if you're above zone 180 and not on a corruption cell or improbability (unless your next attack will kill the enemy, so you can get a Scryer bonus on the next enemy),
- //and in maps if you can overkill a cell or one-shot it with Scryer active but Dominance won't overkill.
- if(game.global.highestLevelCleared >= 180 && (next_enemy_health_after_overkill_scryer < 0 || (game.global.mapsActive && num_hits_in_scryer_to_kill_average_enemy == 1 && next_enemy_health_after_overkill_dominance > 0))
- || (!game.global.mapsActive && game.global.world >= mutations.Corruption.start() && ((enemy.corrupted == null || enemy.corrupted == "none" || enemy.corrupted == "") && game.global.lastClearedCell != 98) || avgScryerDamage * 1.1 > enemy.health && (!enemyFast || (enemyFast && dHealth > dDamage)))) //The 1.2 is not required
- {
- /*console.log("enemy.corrupted: " + enemy.corrupted);
- console.log("avgDamage: " + avgDamage);
- console.log("overkill_damage_scryer: " + overkill_damage_scryer);
- console.log("num_hits_in_scryer_to_kill_average_enemy: " + num_hits_in_scryer_to_kill_average_enemy);
- console.log("next_enemy_health_after_overkill_scryer: " + next_enemy_health_after_overkill_scryer);*/
- setFormation(4);
- }
- //If you can get away with using the Dominance formation, do so, especially if a new group of trimps is ready and waiting.
- else if(game.upgrades.Dominance.done && (!enemyFast || (enemyFast && dHealth > dDamage)))
- {
- setFormation(2);
- }
- else if(game.upgrades.Barrier.done && enemyFast && bRatio < hRatio && bRatio < xRatio)
- {
- setFormation(3);
- }
- else if(game.upgrades.Formations.done && enemyFast && hRatio < xRatio && (!game.upgrades.Barrier.done || game.upgrades.Barrier.done && hRatio < bRatio))
- {
- setFormation(1);
- }
- else //No formation should also be used for non-fast enemies before Dominance is unlocked.
- {
- setFormation("0");
- }
- /*if (!enemyFast && game.upgrades.Dominance.done && enemyHealth < baseDamage && (newSquadRdy || (dHealth - missingHealth > 0 && !drainChallenge) || (drainChallenge && dHealth - missingHealth > dHealth/20))) {
- setFormation(2);
- //use D stance if: new army is ready&waiting / can survive void-double-attack or we can one-shot / can survive lead damage / can survive void-crit-dmg
- } else if (game.upgrades.Dominance.done && ((newSquadRdy && dHealth > dDamage) || dHealth - missingHealth > dDamage) && doubleAttackOK && leadAttackOK && voidCritinDok ) {
- setFormation(2);
- //if CritVoidMap, switch out of D stance if we cant survive. Do various things.
- } else if (isCritVoidMap && !voidCritinDok) {
- //if we are already in X and the NEXT potential crit would take us past the point of being able to return to D/B, switch to B.
- if (game.global.formation == "0" && game.global.soldierHealth - xVoidCritDamage < game.global.soldierHealthMax/2){
- if (game.upgrades.Barrier.done && (newSquadRdy || (missingHealth < game.global.soldierHealthMax/2)) )
- setFormation(3);
- }
- //else if we can totally block all crit damage in X mode, OR we can't survive-crit in D, but we can in X, switch to X.
- // NOTE: during next loop, the If-block above may immediately decide it wants to switch to B.
- else if (xVoidCritDamage == 0 || (game.global.formation == 2 && voidCritinXok)){
- setFormation("0");
- }
- //otherwise, stuff:
- else {
- if (game.global.formation == "0"){
- if (game.upgrades.Barrier.done && (newSquadRdy || (missingHealth < game.global.soldierHealthMax/2)) )
- setFormation(3);
- else
- setFormation(1);
- }
- else if (game.upgrades.Barrier.done && game.global.formation == 2)
- setFormation(3);
- }
- } else if (game.upgrades.Formations.done && ((newSquadRdy && xHealth > xDamage) || xHealth - missingHealth > xDamage)) {
- //in lead challenge, switch to H if about to die, so doesn't just die in X mode without trying
- if ((game.global.challengeActive == 'Lead') && (xHealth - missingHealth < xDamage + (xHealth * leadDamage)))
- setFormation(1);
- else
- setFormation("0");
- } else if (game.upgrades.Barrier.done && ((newSquadRdy && bHealth > bDamage) || bHealth - missingHealth > bDamage)) {
- setFormation(3); //does this ever run?
- } else if (game.upgrades.Formations.done) {
- setFormation(1);
- } else
- setFormation("0");
- */
- }
- baseDamage /= (game.global.titimpLeft > 0 ? 2 : 1); //unconsider titimp :P
- }
- }
- function getCorruptScale(type) {
- switch (type) {
- case "attack":
- return mutations.Corruption.statScale(3);
- case "health":
- return mutations.Corruption.statScale(10);
- }
- }
- function calcBaseDamageinX() {
- //baseDamage
- baseDamage = game.global.soldierCurrentAttack * 2 * (1 + (game.global.achievementBonus / 100)) * ((game.global.antiStacks * game.portal.Anticipation.level * game.portal.Anticipation.modifier) + 1) * (1 + (game.global.roboTrimpLevel * 0.2));
- //D stance
- if (game.global.formation == 2) {
- baseDamage /= 4;
- } else if (game.global.formation != "0") {
- baseDamage *= 2;
- }
- //baseBlock
- baseBlock = game.global.soldierCurrentBlock;
- //B stance
- if (game.global.formation == 3) {
- baseBlock /= 4;
- } else if (game.global.formation != "0") {
- baseBlock *= 2;
- }
- //baseHealth
- baseHealth = game.global.soldierHealthMax;
- //H stance
- if (game.global.formation == 1) {
- baseHealth /= 4;
- } else if (game.global.formation != "0") {
- baseHealth *= 2;
- }
- //S stance is accounted for (combination of all the above's else clauses)
- }
- function getCurrentEnemy(current) {
- if (!current)
- current = 1;
- var enemy;
- if (!game.global.mapsActive && !game.global.preMapsActive) {
- if (typeof game.global.gridArray[game.global.lastClearedCell + current] === 'undefined') {
- enemy = game.global.gridArray[game.global.gridArray.length - 1];
- } else {
- enemy = game.global.gridArray[game.global.lastClearedCell + current];
- }
- } else if (game.global.mapsActive && !game.global.preMapsActive) {
- if (typeof game.global.mapGridArray[game.global.lastClearedMapCell + current] === 'undefined') {
- enemy = game.global.mapGridArray[game.global.gridArray.length - 1];
- } else {
- enemy = game.global.mapGridArray[game.global.lastClearedMapCell + current];
- }
- }
- return enemy;
- }
- setInterval('CheckChangeFormation()',250);
- var toxicity_gave_up_on_running_maps_for_this_zone = false;
- var time_entered_maps_to_farm = 0;
- var zone_last_farmed_at = 7;
- var chkAutoProgress_was_checked_last_frame = false;
- var chkToxicityRun_was_checked_last_frame = false;
- var map_level = 1;
- document.getElementById("battleBtnsColumn").innerHTML += '<input id="chkAutoProgress" title="Auto-progress. Maps will be farmed for the inputted number of minutes, every inputted number of zones. Stops before ending certain challenges, so you can run void maps." type="checkbox" align="right"></input>';
- document.getElementById("battleBtnsColumn").innerHTML += '<input id="txtMinutesToFarmMaps" title="Farm maps for X minutes near the end of selected zones. A value of 0 means maps will never be farmed." style="width: 50px; height: 25px; color: black;" type="text" value="10"></input>';
- document.getElementById("battleBtnsColumn").innerHTML += '<input id="txtZoneFrequencyToFarmMaps" title="Farm maps every X zones. A value of 0 means maps will never be farmed." style="width: 50px; height: 25px; color: black;" type="text" value="1"></input>';
- document.getElementById("battleBtnsColumn").innerHTML += '<input id="chkSiphonology1" title="Farm maps one level lower than your current zone. Applies to both Auto-Progress and Toxicity Run checkboxes." type="checkbox" align="right"></input>';
- document.getElementById("battleBtnsColumn").innerHTML += '<br><input id="chkToxicityRun" title="During Toxicity runs, max Toxicity stacks will be reached before advancing. Farms maps indefinitely at zone 165, so you have a chance to run void maps before completing the challenge. Overrides the Auto-Progress checkbox." type="checkbox" align="right"></input>';
- document.getElementById("battleBtnsColumn").innerHTML += '<input id="txtToxicityRunMinimumZone" title="The minimum zone at which to start going for maximum Toxicity stacks." style="width: 50px; height: 25px; color: black;" type="text" value="60"></input>';
- //Called regularly, regardless of whether you're on a Toxicity run.
- function CheckAutoProgressStuff()
- {
- if(document.getElementById("chkAutoProgress").checked && !chkAutoProgress_was_checked_last_frame)
- {
- //zone_last_farmed_at = game.global.world; //Pretend you farmed at your current zone when the checkbox is first checked
- if(game.global.mapsActive)
- {
- if (!game.global.repeatMap) //Set "Repeat" on.
- repeatClicked();
- if(game.options.menu.repeatUntil.enabled == 1)
- toggleSetting('repeatUntil');
- if(game.options.menu.repeatUntil.enabled == 2)
- toggleSetting('repeatUntil');
- if(game.options.menu.exitTo.enabled != 1)
- toggleSetting('exitTo');
- time_entered_maps_to_farm = Date.now();
- }
- chkAutoProgress_was_checked_last_frame = true;
- }
- if(!document.getElementById("chkAutoProgress").checked && chkAutoProgress_was_checked_last_frame)
- chkAutoProgress_was_checked_last_frame = false;
- if(!game.global.preMapsActive && document.getElementById("chkAutoProgress").checked)
- {
- var minutes_to_farm_maps = parseFloat(document.getElementById("txtMinutesToFarmMaps").value);
- var zone_frequency_to_farm_maps = parseInt(document.getElementById("txtZoneFrequencyToFarmMaps").value);
- if(minutes_to_farm_maps > 0 && zone_frequency_to_farm_maps > 0)
- {
- if(!game.global.mapsActive && game.global.lastClearedCell > 93 && ((zone_last_farmed_at < game.global.world && zone_last_farmed_at + zone_frequency_to_farm_maps <= game.global.world) || (game.global.challengeActive == "Lead" && game.global.world == 180))) //If you haven't farmed this zone but are supposed to now
- {
- mapsClicked();
- //Abandon your army
- if(!game.global.mapsActive)
- mapsClicked();
- //Farm a map.
- SetFarmingMapSettings();
- CreateAndEnterMapWithChosenSettingsIfPossible();
- zone_last_farmed_at = game.global.world;
- time_entered_maps_to_farm = Date.now();
- }
- else if(game.global.mapsActive && zone_last_farmed_at < game.global.world) //If the player brought you into maps while the box was checked
- {
- zone_last_farmed_at = game.global.world;
- time_entered_maps_to_farm = Date.now();
- }
- else if(game.global.mapsActive && Date.now() - time_entered_maps_to_farm > minutes_to_farm_maps * 60000 && (game.global.challengeActive != "Lead" || (game.global.challengeActive == "Lead" && game.global.world != 180)))
- ExitMaps();
- }
- else if(game.global.mapsActive && (game.global.challengeActive != "Lead" || (game.global.challengeActive == "Lead" && game.global.world != 180)))
- ExitMaps();
- }
- }
- function CheckToxicityRunStuff()
- {
- if(game.global.challengeActive == 'Toxicity')
- {
- if(document.getElementById("chkToxicityRun").checked && !chkToxicityRun_was_checked_last_frame)
- {
- //zone_last_farmed_at = game.global.world; //Pretend you farmed at your current zone when the checkbox is first checked
- if(game.global.mapsActive && game.global.world > parseInt(document.getElementById("txtToxicityRunMinimumZone").value))
- {
- if (!game.global.repeatMap) //Set "Repeat" on.
- repeatClicked();
- if(game.options.menu.repeatUntil.enabled == 1)
- toggleSetting('repeatUntil');
- if(game.options.menu.repeatUntil.enabled == 2)
- toggleSetting('repeatUntil');
- if(game.options.menu.exitTo.enabled != 1)
- toggleSetting('exitTo');
- }
- chkToxicityRun_was_checked_last_frame = true;
- }
- if(!document.getElementById("chkToxicityRun").checked && chkToxicityRun_was_checked_last_frame)
- chkToxicityRun_was_checked_last_frame = false;
- if(toxicity_gave_up_on_running_maps_for_this_zone == true && game.global.lastClearedCell <= 93) //Presumably the previous zone, where you couldn't map, has been finished
- toxicity_gave_up_on_running_maps_for_this_zone = false;
- if(!game.global.preMapsActive && document.getElementById("chkToxicityRun").checked)
- {
- if(game.global.world < 166)
- {
- if(toxicity_gave_up_on_running_maps_for_this_zone == false && !game.global.mapsActive && game.global.lastClearedCell > 93 && game.challenges.Toxicity.stacks < 1500 && game.global.world > parseInt(document.getElementById("txtToxicityRunMinimumZone").value)) //If you're near the end of a zone past zone 59 and don't have max stacks...
- {
- mapsClicked();
- //Abandon your army
- if(!game.global.mapsActive)
- mapsClicked();
- //Farm a map.
- SetFarmingMapSettings();
- CreateAndEnterMapWithChosenSettingsIfPossible();
- }
- if(game.global.mapsActive)
- {
- if(game.challenges.Toxicity.stacks >= 1500 && game.global.world != 165) //Once you've finished accumulating stacks, exit back to the world. Never leave the maps when at zone 165, so you can do void maps.
- ExitMaps();
- }
- }
- }
- }
- }
- function SetFarmingMapSettings()
- {
- var useGardens = game.global.decayDone;
- map_level = game.global.world;
- //if(game.portal.Siphonology.level > 0)
- // map_level = map_level - 1;
- if(document.getElementById("chkSiphonology1").checked)
- map_level = map_level - 1;
- document.getElementById("mapLevelInput").value = map_level;
- sizeAdvMapsRange.value = 0;
- adjustMap('size', 0);
- difficultyAdvMapsRange.value = 9;
- adjustMap('difficulty', 9);
- lootAdvMapsRange.value = 9;
- adjustMap('loot', 9);
- biomeAdvMapsSelect.value = useGardens ? "Plentiful" : "Mountain";
- if (updateMapCost(true) > game.resources.fragments.owned) //If you don't have enough fragments
- {
- adjustMap('size', 0);
- adjustMap('difficulty', 9);
- adjustMap('loot', 0);
- biomeAdvMapsSelect.value = "Random";
- }
- if (updateMapCost(true) > game.resources.fragments.owned) //If you still don't have enough fragments
- {
- adjustMap('size', 0);
- adjustMap('difficulty', 0);
- adjustMap('loot', 0);
- biomeAdvMapsSelect.value = "Random";
- }
- }
- function CreateAndEnterMapWithChosenSettingsIfPossible()
- {
- //If you STILL don't have enough fragments, go back to the world and just finish the zone.
- if (updateMapCost(true) > game.resources.fragments.owned)
- {
- toxicity_gave_up_on_running_maps_for_this_zone = true;
- mapsClicked();
- }
- else //If you have enough fragments to make the map.
- {
- recycleBelow(true); //Recycle all maps, for space purposes and to abandon any half-finished maps from before.
- var result = buyMap();
- var map_just_created;
- for (var map in game.global.mapsOwnedArray)
- {
- if(map.level == map_level)
- map_just_created = map;
- }
- if(map_just_created != null)
- selectedMap = map_just_created.id;
- runMap();
- if (!game.global.repeatMap) //Set "Repeat" on.
- repeatClicked();
- if(game.options.menu.repeatUntil.enabled == 1)
- toggleSetting('repeatUntil');
- if(game.options.menu.repeatUntil.enabled == 2)
- toggleSetting('repeatUntil');
- if(game.options.menu.exitTo.enabled != 1) toggleSetting('exitTo');
- }
- }
- function ExitMaps()
- {
- //Should ensure it's "exit to world"
- //if(game.options.menu.exitTo.enabled != 0)
- // toggleSetting('exitTo');
- //mapsClicked();
- //Abandon your army if necessary
- //if(game.global.mapsActive)
- // mapsClicked();
- //Since abandoning your trimps brings you to the map chamber, change Repeat to Off.
- if (game.global.repeatMap) //Set Repeat off.
- repeatClicked();
- }
- function CheckAutoProgressCheckboxes()
- {
- if(document.getElementById("chkToxicityRun").checked && game.global.challengeActive != 'Toxicity') //Disallow checking the Tox checkbox while not on Tox runs
- document.getElementById("chkToxicityRun").checked = false;
- /*if(document.getElementById("chkAutoProgress").checked && document.getElementById("chkToxicityRun").checked) //If both the AutoProgress and ToxicityRun checkboxes are still checked, uncheck one.
- {
- //Keep the checkbox that was just checked, checked, and remove the check on the other one.
- if(!chkAutoProgress_was_checked_last_frame)
- document.getElementById("chkToxicityRun").checked = false;
- else
- document.getElementById("chkAutoProgress").checked = false;
- }*/
- //The Toxicity checkbox takes precedence if they're both checked.
- if(document.getElementById("chkToxicityRun").checked && game.global.challengeActive == 'Toxicity' && game.global.world >= parseInt(document.getElementById("txtToxicityRunMinimumZone").value))
- CheckToxicityRunStuff();
- else if(document.getElementById("chkAutoProgress").checked)
- CheckAutoProgressStuff();
- chkAutoProgress_was_checked_last_frame = document.getElementById("chkAutoProgress").checked;
- chkToxicityRun_was_checked_last_frame = document.getElementById("chkToxicityRun").checked;
- }
- setInterval('CheckAutoProgressCheckboxes()',250);
- document.getElementById("upgradesTitleSpan").outerHTML += '<input id="chkBuyOutWarpstationsBeforeUpgrading" title="Spend your available metal on warpstations before autobuying the next gigastation." type="checkbox" checked="checked">';
- document.getElementById("upgradesTitleSpan").outerHTML += '<input id="txtGigastationDelta" title="Delta. Increase the number of Warpstations between automatic Gigastation purchases by this amount for every Gigastation you have already purchased." style="width: 50px; height: 25px; color: black;" type="text" value="0"></input>';
- document.getElementById("upgradesTitleSpan").outerHTML += '<input id="txtAutobuyGigastations" title="Autobuy Gigastations when the inputted amount of warpstations is reached. A value of 0 means Gigastations will not be purchased. Ignores values below 10, to help fight accidental purchases." style="width: 50px; height: 25px; color: black;" type="text" value="0"></input>';
- document.getElementById("upgradesTitleSpan").outerHTML += '<br><input id="chkAutobuyGigastations" title="Autobuy Gigastations when the inputted amount of warpstations is reached." type="checkbox">';
- function AutobuyGigastations()
- {
- if(document.getElementById("chkAutobuyGigastations").checked)
- {
- var warpstations_per_giga = parseInt(document.getElementById("txtAutobuyGigastations").value);
- var gigastation_delta = parseInt(document.getElementById("txtGigastationDelta").value);
- if(warpstations_per_giga > 0 && warpstations_per_giga > 9 && game.buildings.Warpstation.owned >= warpstations_per_giga + game.upgrades.Gigastation.done * gigastation_delta)
- {
- if(document.getElementById("chkBuyOutWarpstationsBeforeUpgrading").checked)
- {
- while(canAffordBuilding('Warpstation'))
- {
- console.log('Buying warps in AutobuyGigastations');
- BuyDaBuilding('Warpstation');
- }
- }
- buyUpgrade('Gigastation', true, true);
- }
- }
- }
- setInterval('AutobuyGigastations()',250);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement