What's new
  • Visit Rebornbuddy
  • Visit Panda Profiles
  • Visit LLamamMagic
  • Visit Resources
  • Visit Downloads
  • Visit Portal
RebornBuddy Forums

Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

Summoning 2 Different Golems

yeahnope

New Member
Joined
Jun 13, 2016
Messages
6
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.

var sig = LokiPoe.InGameState.SkillBarHud.Skills.FirstOrDefault(s => s.Name == "Summon Ice Golem");
if (IsCastableHelper(sig))
{
_summonIceGolemSlot = sig.Slot;
_sgSlot = _summonIceGolemSlot;
}

and we edit the sgslot to 'sg2Slot' like so. easy. so that's setting it as a separate golem for us to summon.

var sig = LokiPoe.InGameState.SkillBarHud.Skills.FirstOrDefault(s => s.Name == "Summon Ice Golem");
if (IsCastableHelper(sig))
{
_summonIceGolemSlot = sig.Slot;
_sg2Slot = _summonIceGolemSlot;
}

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
// If we have a Summon Golem skill, we can cast it if we havn't cast it recently.
if (_sgSlot != -1 &&
_summonGolemStopwatch.ElapsedMilliseconds >
10000)
{
// See if we can use the skill.
var skill = LokiPoe.InGameState.SkillBarHud.Slot(_sgSlot);
if (skill.CanUse())
{
var max = skill.GetStat(StatTypeGGG.NumberOfGolemsAllowed);
if (skill.NumberDeployed < max)
{
await DisableAlwaysHiglight();

await Coroutines.FinishCurrentAction();

var err1 = LokiPoe.InGameState.SkillBarHud.UseAt(_sgSlot, true, myPos);
if (err1 == LokiPoe.InGameState.UseResult.None)
{
_summonGolemStopwatch.Restart();

await Coroutines.FinishCurrentAction(false);

return true;
}

Log.ErrorFormat("[Logic] UseAt returned {0} for {1}.", err1, skill.Name);
}
}
}

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

// If we have a Summon Golem skill, we can cast it if we havn't cast it recently.
if (_sg2Slot != -1 &&
_summon2GolemStopwatch.ElapsedMilliseconds >
10000)
{
// See if we can use the skill.
var skill = LokiPoe.InGameState.SkillBarHud.Slot(_sg2Slot);
if (skill.CanUse())
{
var max = skill.GetStat(StatTypeGGG.NumberOfGolemsAllowed);
if (skill.NumberDeployed < 2)
{
await DisableAlwaysHiglight();

await Coroutines.FinishCurrentAction();

var err1 = LokiPoe.InGameState.SkillBarHud.UseAt(_sg2Slot, true, myPos);
if (err1 == LokiPoe.InGameState.UseResult.None)
{
_summon2GolemStopwatch.Restart();

await Coroutines.FinishCurrentAction(false);

return true;
}

Log.ErrorFormat("[Logic] UseAt returned {0} for {1}.", err1, skill.Name);
}
}
}




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;'
private int _sgSlot;
private int _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
private readonly Stopwatch _summonGolemStopwatch = Stopwatch.StartNew();

private readonly Stopwatch _summon2GolemStopwatch = Stopwatch.StartNew();
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 :P

done.
 
thanks for solution,though it seems a little confusing but hope i can figure out:D ,ty again
 
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
 
Last edited:
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!

I have noticed now that once the timer goes down it will just resummon a new one and this on a repetitive cycle,
Check _summon2GolemStopwatch.ElapsedMilliseconds in second section.
and skill.NumberDeployed < 1 in first
 
Last edited:
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.
 
Last edited:
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.
 
Back
Top