No, it really sucks balls. You need to cast it and essence drain to make it work. While you are casting those two, I'll kill the mobs with one.
Thanks for the opinion. There are a number of examples out there that can show how these two skills can bring back the burn prolif of old, with extremely strong single target damage. So while YMMV with these skills, others might want to utilize them.
Back to the topic, OP did you end up trying this out to see if you could get something working? I can see setting contag to aoe ranged and ED to ST ranged, but that'll end up pretty sub optimal for ED spread as it would spam contag till it switched to ST.
I'm hopeful it wouldn't take much tweaking to get the mechanic working. Essentially we just need the bot to ensure contagion is on the target and then cast ED. If it could do a debuff check on the target to see if it has contagion debuff, then prioritize casting ED on target/s till a target is found without the contagion debuff. Is there a dev / routine guru out there that can comment if this would be doable?
It is absolutely doable. You can read more on debuffs / making sure they are applied here: https://www.thebuddyforum.com/exilebuddy-forum/combat-routines/228701-curse-hit.html
You could basically set up contagion to act like a curse (debuff), then cast X skill if the debuff is applied.
//Contagion and Essence Drain Spread
var ED_Spread = myPos.Distance(cachedPosition) < OldRoutineSettings.Instance.MaxRangeRange && Has_Contagion && !ED_Debuff [COLOR="#FF0000"]I'm not sure how to write the variable, but we are checking if the ED debuff is not present as we don't need to recast it on a mob that already has it[/COLOR] ;
if (ED_Spread)
{
var skill = LokiPoe.InGameState.SkillBarPanel.Slot([COLOR="#FF0000"]1[/COLOR]);
if (skill.CanUse() &&
!bestTarget.HasAura("[COLOR="#FF0000"]Essence Drain[/COLOR]") &&
bestTarget.HasAura("[COLOR="#FF0000"]Contagion[/COLOR]"))
{
//await DisableAlwaysHiglight();
var err1 = LokiPoe.InGameState.SkillBarPanel.UseAt([COLOR="#FF0000"]1[/COLOR], false, cachedPosition);
if (err1 == LokiPoe.InGameState.UseError.None)
return true;
Log.ErrorFormat("[Logic] Use returned {0} for {1}.", err1, skill.Name);
}
}
//Contagion and Essence Drain Boss
var ED_Boss = myPos.Distance(cachedPosition) < OldRoutineSettings.Instance.MaxRangeRange && Has_Contagion && cachedRarity >= Rarity.Rare [COLOR="#FF0000"]I'm not sure how to write the variable, but we are checking if the Boss/Rare has Contagion and is Rare and above [/COLOR] ;
if (ED_Boss)
{
var skill = LokiPoe.InGameState.SkillBarPanel.Slot([COLOR="#FF0000"]1[/COLOR]);
if (skill.CanUse() &&
bestTarget.HasAura("[COLOR="#FF0000"]Contagion[/COLOR]"))
{
//await DisableAlwaysHiglight();
var err1 = LokiPoe.InGameState.SkillBarPanel.UseAt([COLOR="#FF0000"]1[/COLOR], false, cachedPosition);
if (err1 == LokiPoe.InGameState.UseError.None)
return true;
Log.ErrorFormat("[Logic] Use returned {0} for {1}.", err1, skill.Name);
}
}
Awesome work! I see where you are going with it. I am not familiar enough how to set these things up as far as making the contagion debuff an aura that we'd replace vulnerability with in your example. And yours is setup for rares+ whereas this would need to be setup for anything unless you build contag to do enough damage, which is sub optimal dps wise.
I'm thinking something like:
Code://Contagion and Essence Drain Spread var ED_Spread = myPos.Distance(cachedPosition) < OldRoutineSettings.Instance.MaxRangeRange && Has_Contagion && !ED_Debuff [COLOR="#FF0000"]I'm not sure how to write the variable, but we are checking if the ED debuff is not present as we don't need to recast it on a mob that already has it[/COLOR] ; if (ED_Spread) { var skill = LokiPoe.InGameState.SkillBarPanel.Slot([COLOR="#FF0000"]1[/COLOR]); if (skill.CanUse() && !bestTarget.HasAura("[COLOR="#FF0000"]Essence Drain[/COLOR]") && bestTarget.HasAura("[COLOR="#FF0000"]Contagion[/COLOR]")) { //await DisableAlwaysHiglight(); var err1 = LokiPoe.InGameState.SkillBarPanel.UseAt([COLOR="#FF0000"]1[/COLOR], false, cachedPosition); if (err1 == LokiPoe.InGameState.UseError.None) return true; Log.ErrorFormat("[Logic] Use returned {0} for {1}.", err1, skill.Name); } }
I removed the rarity check and condense check as we want this to cast on anything with the debuff.
So once this is working (IE Variables are setup properly) this would cast ED on anything that has the contagion debuff. Theorectically, if we set contagion to Ranged.Aoe and set this as a higher priority, it will contagion then spam ED until it cannot find a bestTarget with contagion debuff that doesn't have the ED debuff. At that point if there are still mobs around it will go back to casting contagion.
We're still not completely there as far as optimizing this spec, as this would avoid casting ED on any target that has ED debuff. So for bosses which do not go down within half a second under ED, it would spam contagion until no ED was detected.
In that case I'd set another one just like this, with the rarity check for rares and above, that would spam cast ED instead.
So I think it would look something like:
Code://Contagion and Essence Drain Boss var ED_Boss = myPos.Distance(cachedPosition) < OldRoutineSettings.Instance.MaxRangeRange && Has_Contagion && cachedRarity >= Rarity.Rare [COLOR="#FF0000"]I'm not sure how to write the variable, but we are checking if the Boss/Rare has Contagion and is Rare and above [/COLOR] ; if (ED_Boss) { var skill = LokiPoe.InGameState.SkillBarPanel.Slot([COLOR="#FF0000"]1[/COLOR]); if (skill.CanUse() && bestTarget.HasAura("[COLOR="#FF0000"]Contagion[/COLOR]")) { //await DisableAlwaysHiglight(); var err1 = LokiPoe.InGameState.SkillBarPanel.UseAt([COLOR="#FF0000"]1[/COLOR], false, cachedPosition); if (err1 == LokiPoe.InGameState.UseError.None) return true; Log.ErrorFormat("[Logic] Use returned {0} for {1}.", err1, skill.Name); } }
Does this look right? As mentioned earlier in the thread, I am not a coder and am not familiar with the basics, all I'm applying is logic based on Unknown Buddy's linked post about debuff checking. If anyone can do some corrections and let me know how I'd set up the skills/variables I'd happily test it as I have a character ready.
Also, while talking about bosses, we'd want to drop a wither totem. So I'm thinking just setting up a rarity check on the OldRoutine totem drop logic. I'm not sure how I'd set it at a higher priority than ED_Boss but lower than ED_Spread, so if anyone can help with that I'd appreciate it.
Cheers for the help Unknown Buddy, hopefully we can get this working. And for those who are wondering how this is comparable to a cycloner, in my set up I hardly ever cast contagion, as it is set to a low level CWDT/IAOE. Most of the time I'm just casting essence drain, survivability comes from quad curse. I want to try out a bino's (it got nerfed yes, but it went from stupidly OP to very usable, not complete horse shit like some will tell you). The bug was rolling the essence drain dot directly into the poison dot, instead of 10% like it was suppose to. So no more 30k healing per second, but more around the 3k healing per second, which is still sufficient for map survival outside of 1-shots (temp chains, fortify and enfeeble help with that).
if (contagionslot != -1 && combat range is fine)
{
if (rarity == boss (unique))
{
specific behavior like idk, cast every X or shit
return true; // This is important, to avoid processing the default contagion behavior.
}
process default contagion behavior
return true; // same story, better process the good shtuff.
}
basically a debuff is shown as an Aura (often, not always, some debuffs are "hidden" like life flasks debuff) you'll have to be fast to actuall dump the stuff you need hahaI would isolate a mob to process, basically start the bot, let your bot pop the contagion on it, dump, go into monsters tab and get the infos.
You should find in those infos the correct naming of the "aura". that's pretty much like this for all auras.
[Aura]
BaseAddress: 0x9FBDE078
SubInfo: 0x659E6468
Name: Contagion
InternalName: contagion
Description: You are taking Chaos Damage Over Time
CasterId: 1100
OwnerId: 0
BuffType: 30
TimeLeft: 00:00:08.4670000
MaxTimeLeft: 00:00:08.5000000
Charges: 0
IsInvisible: False
IsRemovable: False
[Aura]
BaseAddress: 0x82D78E98
SubInfo: 0x659E6828
Name: Essence Drain
InternalName: siphon_damage
Description: You are taking Chaos Damage Over Time
CasterId: 559
OwnerId: 0
BuffType: 30
TimeLeft: 00:00:05.7670000
MaxTimeLeft: 00:00:06.4600000
Charges: 0
IsInvisible: False
IsRemovable: False
you should consider caching the important values, to avoid the routine throwing.
var cachedContagion = bestTarget.HasContagion;
var cachedWither = bestTarget.HasWither;
to give it a priority is should execute first, that's why I've set up a boss/unique check before usual behavior, if it's a boss it'll behave differently.
Code:if (contagionslot != -1 && combat range is fine) { if (rarity == boss (unique)) { specific behavior like idk, cast every X or shit return true; // This is important, to avoid processing the default contagion behavior. } process default contagion behavior return true; // same story, better process the good shtuff. }
Yeah so checking through OR I found that HasWither is already present:For the totem stuff I'm not sure that you need logic for it, any totem is handled by default as "support skill"
// Handle Wither logic.
if (_witherSlot != -1)
{
var skill = LokiPoe.InGameState.SkillBarPanel.Slot(_witherSlot);
if (skill.CanUse(false, false, false) && !cachedWither)
{
await DisableAlwaysHiglight();
var err1 = LokiPoe.InGameState.SkillBarPanel.UseAt(_witherSlot, true, cachedPosition);
if (err1 == LokiPoe.InGameState.UseError.None)
{
await Coroutine.Sleep(Utility.LatencySafeValue(250));
await Coroutines.FinishCurrentAction(false);
return true;
}
Log.ErrorFormat("[Logic] UseAt returned {0} for {1}.", err1, skill.Name);
}
}
Any progress on ED?