Alrighty, came up against this yesterday since i'm currently testing an elementalist build with 'liege of the primordial' that actually benefits really well from having 2 golems deployed to boost 2 different damage types. After stuffing around making it far more complicated than it actually is, i cheated and just copy pasted shit. Here's a quick and dirty way of editing oldroutine so that it deploys 2 golems of different types instead of just summoning 2 of the same type as it does now. anyway since quite frankly i can't be bothered making all the combinations here's a run through of what to do. For starters we find the second golem type that we want summoned in oldroutine, in my case the ice golem for yours whatever. and we edit the sgslot to 'sg2Slot' like so. easy. so that's setting it as a separate golem for us to summon. next up. find the summon golem routine in there. copy and paste it below it. this is what summons the golem. the second copy underneath summons the second. here's the first edit 'max' in there to '1'. that's it. don't touch that first one again. next up we have the second one. edit each instance of 'sgSlot' to 'sg2Slot'. there are 3. edit 'max' to '2'. edit '_summonGolemStopwatch.Restart();' to '_summon2GolemStopwatch.Restart();' there are 2. it will look like this now we're done with those. next up search for the int for sgslot ie 'private int _sgSlot;' copy and paste the copy below it. edit the copy to '_sg2Slot;' that bits done. next we find the stopwatch for summoning the golem 'Stopwatch _summonGolemStopwatch = Stopwatch.StartNew();' copy and paste it below. edit the copy 'summonGolemStopwatch' to 'summon2GolemStopwatch' like we did above. like this done. save. hopefully you've made a copy of the installed oldroutine. bit late now if you've screwed it but eh. copy the edited version into the oldroutine folder in 3rdparty and replace the original. then delete the oldroutine folder in _CONFIGS_. please don't delete the oldroutine folder in 3rdparty. no guarantees it doesn't screw anything up it probably works fine even though there's almost certainly a better way to do it that actually checks to see if there's already a golem of the first type so it doesn't cast a second but eh. no guarantees if you screw it up done.
Attempted this and it broke the entire routine, just runs around trying to loot boxes/chests and doesn't attack, cast auras, etc. Edit: I was able to get it a second time around. I have attached it below for ease of use for others, just make sure you put it in your 3rd party > old routine folder.. (BACKUP YOUR OLD FILE FIRST) I have noticed now that once the timer goes down it will just resummon a new one and this on a repetitive cycle, is there any way that we can program this to recognize "if golem missing resummon" I do not know code or I would try to resolve myself. View attachment OldRoutine.cs
works fine here, even used a fresh oldroutine and followed the instructions to see if i missed anything. post your oldroutine and i'll have a look.
Edited the original post, good job. See my second question, not sure if you are able to solve that part of it
yeahnope, thank you! Check _summon2GolemStopwatch.ElapsedMilliseconds in second section. and skill.NumberDeployed < 1 in first
Seems its ignored skill.NumberDeployed < 2 or skill.NumberDeployed < 1, so i increased ElapsedMilliseconds >180000
skill.NumberDeployed is just a dirty way of making it so that it doesn't just summon 2 of the same golem. ie summons flame golem if amount of golems is less than one, summons an ice golem if golems is less than two. in ideal conditions. summons flame golem because less than one, moves onto next line, summons ice because less than two. easy, dirty, but it works. the timer is a separate issue as to how the basic oldroutine handles the summoning of golems, it's far from perfect but works well enough, free to change that but i wouldn't have it over 50000, i've found it develops issues over around that. old routine is pretty basic. it gets the job done but that's about it. you can use an aura check to see if a golem is summoned so it doesn't recast but tbh i couldn't be bothered testing the code i wrote for it because this was just a stop gap while i was figuring out how to get something else working optimally for my build.
This is actually a genius piece of code in its elegance and simplicity. The only downside is that it doesn't work - the golems keep getting re-summoned every 10 seconds which can be heavy on the mana and inconvenient when fighting. Quick Note worth mentioning - the OldRoutine will summon 2 Golems without any editing - this code is specifically if you want 2 DIFFERENT Golems i.e. Fire and Lightning. The Long Story My theory is that skill.NumberDeployed counts based upon _sgSlot; - so each time the delay of 10 seconds is up - it re-summons another thinking there is only 1 on _sgSlot; (which there actaully is). Hence the solution of setting max on _sgSlot; to 1 and max on _sg2Slot; to 1 it works because it only summons 1 golem for each - and re-summons them perfectly. Code edits are: if (skill.NumberDeployed < 1) should be if (skill.NumberDeployed == 1) and if (skill.NumberDeployed < 2) should also be if (skill.NumberDeployed == 1) The Short Version Set the max to 1 for both golems, instead of 1 and a 2 - counter intuitive i know - but try it - it works. Anywho - great work Hacky and awesome - 2 Golems adds a pure 25% to the top line of my build damage - gotta love Liege of the Primordial.
WiN thanks for the tip! Why == though? If it's counting based on each slot, shouldn't it stay < ... that's what seems to work for me anyway.
I'm running this with 3-5 fire golems. Any way to stop the bot from casting the Clay Shaper (1h mace) stone golem? I already unchecked the ''use auras gained through items'' box and it's still casting stone golem... Anyone has a proper routine for running multiple flame golems? thanks!
I wanted the routine to check for golem aura on my lightning and fire instead of recast so frequently: Code: // If we have a Summon Golem skill, we can cast it if we havn't cast it recently. if (_sgSlot != -1 && (LokiPoe.Me.HasAura(LokiPoe.InGameState.SkillBarHud.Skills.FirstOrDefault(s => s.Name == "Summon Flame Golem").Name) == false)) { // See if we can use the skill. var skill = LokiPoe.InGameState.SkillBarHud.Skills.FirstOrDefault(s => s.Name == "Summon Flame Golem"); if (skill.CanUse()) { var max = skill.GetStat(StatTypeGGG.NumberOfGolemsAllowed); if (skill.NumberDeployed < 1) { await DisableAlwaysHiglight(); var err1 = LokiPoe.InGameState.SkillBarHud.UseAt(_sgSlot, true, myPos); if (err1 == LokiPoe.InGameState.UseResult.None) { return true; } Log.ErrorFormat("[Logic] UseAt returned {0} for {1}.", err1, skill.Name); } } } if (_sg2Slot != -1 && (LokiPoe.Me.HasAura(LokiPoe.InGameState.SkillBarHud.Skills.FirstOrDefault(s => s.Name == "Summon Lightning Golem").Name) == false)) { // See if we can use the skill. var skill = LokiPoe.InGameState.SkillBarHud.Skills.FirstOrDefault(s => s.Name == "Summon Lightning Golem"); if (skill.CanUse()) { var max = skill.GetStat(StatTypeGGG.NumberOfGolemsAllowed); if (skill.NumberDeployed < 1) { await DisableAlwaysHiglight(); await Coroutines.FinishCurrentAction(); var err1 = LokiPoe.InGameState.SkillBarHud.UseAt(_sg2Slot, true, myPos); if (err1 == LokiPoe.InGameState.UseResult.None) { await Coroutines.FinishCurrentAction(false); return true; } Log.ErrorFormat("[Logic] UseAt returned {0} for {1}.", err1, skill.Name); } } } I basically made the if statement check for golem aura before recast, and then make each actual skill for Golem, Fire etc. Shoulde be easy to add one of each golem like the other posts. But I prefered aura checking!
I did a similar thing but with a little more clarity. Since the golemskill is already declared. Code: var skill = LokiPoe.InGameState.SkillBarHud.Slot(_summonIceGolemSlot); if (skill.CanUse()) { var max = skill.GetStat(StatTypeGGG.NumberOfGolemsAllowed); if (skill.NumberDeployed < 1 && !LokiPoe.Me.HasAura(skill.Name)) var skillName = skill.Name; You can see that you just need to declare "&& !LokiePoe.Me.HasAura(skill.Name) in the if statement. The default oldroutine already has the _summonIceGolemSlot variable declared.