Enochian isn't hard to code - if (Enochian <5) Enochian. Raging Strikes and Leyline would ideally be casted just after an Enochian is cast. Sharpcast after a Fire III. Unsure how to code those, though. How can i fetch the Aura IDs for you? albeit, Firestarter aura is already in UltimaCR does simply: Core.Player.HasAura("Firestarter"))
It's all relatively easy once you know what RB and C# is capable of. You need to start with suedo-code and lay out the conditions for everything, in similar fasion to what you've already done. Here is what you have so far: if (LastSpellCast == Enochian) cast(Raging Strikes); //Raging Strikes will only cast right after an Enochian if (LastSpellCast == FireIII) cast(Sharpcast); //Sharpcast will only cast right after a FireIII if (EnochianCooldown>=10) && (AstralFireIIIAura>=4) && mana>2000) cast(Fire IV) //Fire4 will only cast when remaining Enochian Cooldown is atleast 10 seconds, and Astral Fire 3 aura has atleast 4 seconds, and mana is over 2000 if (EnochianCooldown>=10) && (AstralFireIIIAura<4) && HasAura(Firestarter)) cast(Fire III) //Fire3 will only cast when remaining Enochian Cooldown is atleast 10 seconds, and Astral Fire 3 aura has less then 4 seconds, and Firestarter aura is procced if (EnochianCooldown>=10) && (AstralFireIIIAura<4) && mana>2000) cast(Fire I) //Fire1 will only cast when remaining Enochian Cooldown is atleast 10 seconds, and Astral Fire 3 aura has less then 4 seconds, and mana is over 2000 if ((EnochianCooldown<10 || Mana<=2000) && !Umbral Ice ) cast(Blizzard III) //Blizzard3 will only cast when remaining Enochian Cooldown is under 10 seconds or mana is no more then 2000, and Umbral Ice aura is not active if ((EnochianCooldown<10 || Mana<=2000) && Umbral Ice) cast(Blizzard IV) //Blizzard4 will only cast when remaining Enochian Cooldown is under 10 seconds or mana is no more then 2000, and Umbral Ice aura is active
Uh, actually i'm a C#\Java programmer by day job. I just need to set up intellisense and some the rest of the API. Okay, i found mostly everything i needed; As far i understand the structure of UltimaCR; the 'master' list is in Rotations.BlackMage, where the wall of if Code: (await) Spell()) return true; casts the first spell which itself returns a Task and not a false. So, the entire rotation has to be formulated as a stateless priority list?
If you guys would get this to work it would mean the world to me. I'd appreciate it with a small donation if I can go at least into dungeons at level 60. (it must not be raids)
Here is the first experimental build based on input from Valpsjuk and you. It will try to run each rotation for 50 seconds, then timeout and restart the appropriate rotation. Core rotation also exits if Enochian and Sharpcast are off cooldown Ultima\Ultima.cs View attachment Ultima.cs Ultima\Spells\Spell.cs: View attachment Spell.cs Ultima\Rotations\Behaviors\Combat\BlackMage.cs View attachment BlackMage.cs Ultima\Rotations\Methods\BlackMage.cs View attachment BlackMage.cs You need to select Single Target mode in Ultima in order to use the routine. Also, be sure to select Quelling Strikes and Raging Strikes as cross-class skills for this rotation. Keep in mind that my black mage is level 40, and I know very little about the class and mechanics, so my testing is extremely limited.
It doesn't have to be, but that is how Ultima is organized. That particular setup seems to allow it to be the most compatible and universal to all levels and situations, without being specialized for any specific one. This is how I would experiment with your rotation (it can be cleaned up and incorporated into the rest of the Ultima style if it proves effective): Ultima\Spells\Spell.cs: View attachment Spell.cs Ultima\Rotations\Behaviors\Combat\BlackMage.cs View attachment BlackMage.cs Ultima\Rotations\Methods\BlackMage.cs View attachment BlackMage.cs
<waitforupdate> Here's a semi-working version. The main issue is that i can't stop the bot from firing a spell twice, even with specific checks on LastSpell. Do we have a transient, or a "Last spell QUEUED", rather than spell successfully casted?
no, but it is easy to add. Just declare it the same way that LastSpell is declared and set it at the beginning of Cast() instead of the end. BTW, your code tries to run your routine, then the normal Single/Smart routine right afterwards. You should change the normal Smart and Single routines to 'else if' to prevent that.
puu.sh/jpXoT/df17b727e3.rar Okay, single targets (No Leyline \ Sharpcast \ Thunder yet) is working. Getting blizzard IV not to double cast was an incredible hassle, and the thing that worked ended up being a hard timer, of all things. Still lag sensitive, even if i tried to put as many checks as possible - lag means LastSpell doesn't work, and my workaround, LastSpellQueued, doesn't either.
I tried, but it didn't work. I was using: await Couroutine.Wait(5000, ()=> TimeLeftOnEnochian > 15) (TimeLeftOnEnochian returns Core.Player.GetAuraByName("Enochian").TimeLeft; with a 0 if aura doesn't exist.) The current checks are: if (LastSpellWas(MySpells.BlizzardIV)) return false; plus a timer of 2.5s that starts when BlizzardIV is casted, and doesn't allow any BlizzardIV cast to commence while it's on. Code chunk: Code: private async Task<bool> BlizzardIV() { if (!blizzardTimer.IsFinished) return false; if (LastSpellWas(MySpells.BlizzardIV)) return false; if (Ultima.lastQueuedSpell.Name == MySpells.BlizzardIV.Name) return false; if (UmbralAura && Core.Player.HasAura("Enochian", true, 4000) && !Core.Player.HasAura("Enochian", true, 14000) ) { if (await MySpells.BlizzardIV.Cast()) { blizzardTimer.Reset(); } return true; } return false; } I've tried most things i could think of - I'm going to need some input from someone more knowledgeable than me, i fear.
Have you tried: Code: if (await MySpells.BlizzardIV.Cast()) { await CoRoutine.Wait(6000, () => LastSpell == BlizzardIV); }
ya this is the exact same thing I was thinking, I tried using your most recent update cloud and my game keep crashing the second I engage something and im' in single target mode any idea ? I"ve replaced all 4 files.
i'll try within the night. Still, i'm in europe, and the double-B4 thing isn't very common. It's one refresh in ten or so - it's much better than old rotations. Also, for some reason, in dungeons it never double-B4'd, while on the dummy it's a common occurence.
Could you post the log? I can't test it myself until I get my BLM up to 60 I've updated that post with a version that adds a 100ms delay in between spell cast attempts, in case that is what is causing the crash: Ultima\Rotations\Methods\BlackMage.cs **Later version now in original and latest post** Also, be sure to select Quelling Strikes and Raging Strikes as cross-class skills for this rotation.
Did anyone do more testing with this routine? Was on the run for a few days and didn't check it myself yet