-
Contributor
Updated the download in the first post (Movable plugins system) with the following file changes:
TurboHUD\plugins\Razor\ImmunityIndicator.cs - adds check for general damage reduction based immunity (no timer), and invigoration + crimson (timer), changes countdown to show one decimal place only when duration drops below 1s for less visual clutter
TurboHUD\plugins\Razor\Proc\PartyProcTracker.cs - checks for live sims with Simulacrum based cheat death to prevent potential false positive announcements (happens sometimes with Carnival set)
Last edited by Razorfish; 07-30-2020 at 02:22 PM.
-
Active Member
Hey Razorfish,
Would it be possible to add Pauldrons of the Skeleton King to PartyProcTracker.cs or no because it's not a class specific item?
Code:
new ProcRule(334883) { IconIndex = 1, TTSMe = "Pauldrons", TTSOther = "<name> procked Pauldrons" }, // Pauldrons of the Skeleton King [Shoulders] UseLegendaryItemTexture = Hud.Sno.SnoItems.Unique_Shoulder_103_x1
-
Contributor
Originally Posted by
Jembo
Hey Razorfish,
Would it be possible to add Pauldrons of the Skeleton King to PartyProcTracker.cs or no because it's not a class specific item?
Code:
new ProcRule(334883) { IconIndex = 1, TTSMe = "Pauldrons", TTSOther = "<name> procked Pauldrons" }, // Pauldrons of the Skeleton King [Shoulders] UseLegendaryItemTexture = Hud.Sno.SnoItems.Unique_Shoulder_103_x1
It should be fine as long as you add the new ProcRule into all of the class-specific lists (be careful about not leaving a trailing comma for the last entry, arrays are more sensitive about that than lists). I did something similar for Ancestor's Grace, which a non-class-specific item, but I had to write custom proc checking for it because it is destroyed when its power is triggered.
I would recommend including the field IsExtraLife = false to that rule definition so that it doesn't show up as a heart (if you have the extra lives gauge enabled). Do the pauldrons have a (de)buff icon that shows up properly when it triggers? If not, you can specify UseItemTexture = Hud.Sno.SnoItems.Unique_Shoulder_103_x1 in the rule definition.
-
Legendary
Something that I really like is the possibility that it gives with Control + Z to return even to the initial configuration (position and sizes indicated in OnRegister). Maybe some keyboard shortcut (or by clicking somewhere in the area) would be nice to go directly to those values
Last edited by RNN; 08-01-2020 at 06:17 AM.
-
Contributor
I just updated the download in the first post (Movable plugins system) with the following changes + a new sample plugin:
plugins\Razor\Movable\MovableController.cs - fixed the ResizeMode.FixedRatio resizing calculations (dragging the bottom left corner didn't work properly before), added a placement grid for Edit Mode (can be toggled off and on with Ctrl+G), added Undo All (hotkey Ctrl+0 <-- "zero")
plugins\Razor\Movable\MovableArea.cs - added the ability to Undo all movements and resizings at once
plugins\Razor\Proc\PartyProcTracker.cs - attempt to correct the issue (couldn't reproduce it on demand, but saw it happen a couple of times) where player names weren't displayed next to their proc bars
plugins\Razor\Override\MovableBuffList.cs - (NEW!) This overrides the Default player buff list plugins included with TurboHUD to make them movable and resizable: PlayerBottomBuffListPlugin, PlayerTopBuffListPlugin, PlayerLeftBuffListPlugin, PlayerRightBuffListPlugin, MiniMapLeftBuffListPlugin, MiniMapRightBuffListPlugin... All your customizations (via Customize()) for these plugins should still work. Note that I didn't choose where these plugins go, I am only mimicking the positions of the default plugins.
plugins\Razor\Override\BuffPainterExtensions.cs - (NEW!) This is a utility file that is used by MovableBuffList
Originally Posted by
RNN
Something that I really like is the possibility that it gives with Control + Z to return even to the initial configuration (position and sizes indicated in OnRegister). Maybe some keyboard shortcut (or by clicking somewhere in the area) would be nice to go directly to those values
Just added a hotkey (HotkeyUndoAll) to the latest update tonight, per your suggestion
-
Post Thanks / Like - 2 Thanks
RNN,
BeeAntOS (2 members gave Thanks to Razorfish for this useful post)
-
Legendary
Originally Posted by
Razorfish
Just added a hotkey (HotkeyUndoAll) to the latest update tonight, per your suggestion
Thank you!
-
Active Member
Razorfish, There is a problem with Crusader Akarat rune (Prophet) when it procs, tts keep saying it repeatedly
I checked PartyProcTracker.cs and found this:
Line 142
Code:
{ HeroClass.Crusader, new ProcRule[] {
new ProcRule(Hud.Sno.SnoPowers.Crusader_Passive_Indestructible.Sno) { IconIndex = 1, SoundFileMe = FileProcYou, TTSOther = TTS_SayHasProcced },
new ProcRule(Hud.Sno.SnoPowers.Crusader_AkaratsChampion.Sno) { IconIndex = 11, IsAvailable = CheckAkaratProphet, IsProcced = CheckAkaratProphetProc, UseCooldownTime = Hud.Sno.SnoPowers.Crusader_AkaratsChampion.Sno, TTSMe = "Prophet", TTSOther = "<name> propheted" }, //Prophet
new ProcRule(Hud.Sno.SnoPowers.AncestorsGrace.Sno) { IconIndex = 0, IsAvailable = CheckAncestorsGrace, IsProcced = CheckAncestorsGraceProc, TTSMe = "Ancestors grace destroyed", TTSOther = "<name> lost Ancestor's Grace" }
} },
I deleted the strings in yellow, and it kinda solved the problem, just saying to check on next update.
Last edited by Saico; 08-02-2020 at 01:20 PM.
-
Contributor
Originally Posted by
Saico
Razorfish, There is a problem with Crusader Akarat rune (Prophet) when it procs, tts keep saying it repeatedly
I think I patched it by getting rid of part highlighted in red. There's a situation with this particular skill's behavior wherein my code isn't detecting that the skill itself is on cooldown, so you'll have to settle for the default Prophet proc duration rather than when it can be reset with a new Akarat's Champion activation, for now.
Code:
new ProcRule(Hud.Sno.SnoPowers.Crusader_AkaratsChampion.Sno) { IconIndex = 11, IsAvailable = CheckAkaratProphet, IsProcced = CheckAkaratProphetProc, UseCooldownTime = Hud.Sno.SnoPowers.Crusader_AkaratsChampion.Sno, TTSMe = "Prophet", TTSOther = "<name> propheted" }, //Prophet
The updated file is here:
TurboHUD\plugins\Razor\Proc\PartyProcTracker.cs
And the first post's download link is also updated with the interim fix.
Last edited by Razorfish; 08-03-2020 at 03:06 AM.
Reason: corrected something in the file, updated download link
-
Contributor
My bad, corrected a little error in the updated downloads. If you already got to them before the time of this post, please redownload
-
-
Active Member
Originally Posted by
Razorfish
My bad, corrected a little error in the updated downloads. If you already got to them before the time of this post, please redownload
Oh I did not, gonna check it and feedback later. Thx man =)
-
Member
Last edited by Gilavar; 08-05-2020 at 05:26 AM.
-
Active Member
Originally Posted by
Razorfish
It should be fine as long as you add the new ProcRule into all of the class-specific lists (be careful about not leaving a trailing comma for the last entry, arrays are more sensitive about that than lists). I did something similar for Ancestor's Grace, which a non-class-specific item, but I had to write custom proc checking for it because it is destroyed when its power is triggered.
I would recommend including the field IsExtraLife = false to that rule definition so that it doesn't show up as a heart (if you have the extra lives gauge enabled). Do the pauldrons have a (de)buff icon that shows up properly when it triggers? If not, you can specify UseItemTexture = Hud.Sno.SnoItems.Unique_Shoulder_103_x1 in the rule definition.
Sorry for the late reply, thanks for the detailed message!
I added the following to all classes and seems to be working well \plugins\Razor\Proc\PartyProcTracker.cs:
Code:
new ProcRule(334883) { IconIndex = 1, IsExtraLife = false, TTSMe = "Pauldrons Procked", TTSOther = "<name> Pauldrons", UseItemTexture = Hud.Sno.SnoItems.Unique_Shoulder_103_x1 }
I have a question about ImmunityIndicator.cs. Specifically with DemonHunter_SmokeScreen. The Buff Index is 0 for all runes except Healing Vapors 2. Therefore it's showing ImmunityIndicator Bar countdown with all runes but Healing Vapors. How would you go about adding Icon Index 2 so it shows Healing Vapors & all other runes? I know Healing Vapors is not an optimal rune but it got me curious on how to go about this. Cheers
EDIT: I managed to get it to work: Both were set to else if which was throwing errors. Would there be a more efficient way to do this for example
Code:
double remaining = buff.TimeLeftSeconds[0] || [1];
or something along those lines, Instead of having them split into separate segments ?
Code:
if (me.HeroClassDefinition.HeroClass == HeroClass.DemonHunter)
{
//smoke screen
if (duration < 1.5 && me.Powers.BuffIsActive(Hud.Sno.SnoPowers.DemonHunter_SmokeScreen.Sno, 0))
{
IBuff buff = me.Powers.GetBuff(Hud.Sno.SnoPowers.DemonHunter_SmokeScreen.Sno);
double remaining = buff.TimeLeftSeconds[0];
if (duration < remaining)
{
duration = remaining;
totaltime = buff.TimeElapsedSeconds[0] + remaining;
}
}
}
if (me.HeroClassDefinition.HeroClass == HeroClass.DemonHunter)
{
//smoke screen healing vapors
if (Hud.Game.Me.Powers.UsedSkills.Any(s => s.SnoPower.Sno == Hud.Sno.SnoPowers.DemonHunter_SmokeScreen.Sno && s.Rune == 2))
{
IBuff buff = me.Powers.GetBuff(Hud.Sno.SnoPowers.DemonHunter_SmokeScreen.Sno);
double remaining = buff.TimeLeftSeconds[2];
if (duration < remaining)
{
duration = remaining;
totaltime = buff.TimeElapsedSeconds[2] + remaining;
}
}
}
Last edited by Jembo; 09-02-2020 at 03:28 AM.
Reason: Had them both as else if
-
Contributor
Originally Posted by
Jembo
Sorry for the late reply, thanks for the detailed message!
I added the following to all classes and seems to be working well \plugins\Razor\Proc\PartyProcTracker.cs:
Code:
new ProcRule(334883) { IconIndex = 1, IsExtraLife = false, TTSMe = "Pauldrons Procked", TTSOther = "<name> Pauldrons", UseItemTexture = Hud.Sno.SnoItems.Unique_Shoulder_103_x1 }
Cool, glad it's working for you I can also add it to the next update, I just have limited ability to test procs myself due to my account roster being full of nothing but hardcore characters - it always puts me on edge even when I set up controlled proc situations.
Originally Posted by
Jembo
I have a question about ImmunityIndicator.cs. Specifically with DemonHunter_SmokeScreen. The Buff Index is 0 for all runes except Healing Vapors 2. Therefore it's showing ImmunityIndicator Bar countdown with all runes but Healing Vapors. How would you go about adding Icon Index 2 so it shows Healing Vapors & all other runes? I know Healing Vapors is not an optimal rune but it got me curious on how to go about this. Cheers
EDIT: I managed to get it to work: Both were set to else if which was throwing errors. Would there be a more efficient way to do this for example
Code:
double remaining = buff.TimeLeftSeconds[0] || [1];
or something along those lines, Instead of having them split into separate segments ?
Code:
if (me.HeroClassDefinition.HeroClass == HeroClass.DemonHunter)
{
//smoke screen
if (duration < 1.5 && me.Powers.BuffIsActive(Hud.Sno.SnoPowers.DemonHunter_SmokeScreen.Sno, 0))
{
IBuff buff = me.Powers.GetBuff(Hud.Sno.SnoPowers.DemonHunter_SmokeScreen.Sno);
double remaining = buff.TimeLeftSeconds[0];
if (duration < remaining)
{
duration = remaining;
totaltime = buff.TimeElapsedSeconds[0] + remaining;
}
}
}
if (me.HeroClassDefinition.HeroClass == HeroClass.DemonHunter)
{
//smoke screen healing vapors
if (Hud.Game.Me.Powers.UsedSkills.Any(s => s.SnoPower.Sno == Hud.Sno.SnoPowers.DemonHunter_SmokeScreen.Sno && s.Rune == 2))
{
IBuff buff = me.Powers.GetBuff(Hud.Sno.SnoPowers.DemonHunter_SmokeScreen.Sno);
double remaining = buff.TimeLeftSeconds[2];
if (duration < remaining)
{
duration = remaining;
totaltime = buff.TimeElapsedSeconds[2] + remaining;
}
}
}
Thanks for the heads up about Healing Vapors, I'll update the download in a little bit to fix that. Your instincts are right about there being a more compact way to express that indexing decision. I'd create an 'index' variable (because literally, we're saying that the buff index can vary) and set it with a ternary operator (changes highlighted in red):
Code:
else if (me.HeroClassDefinition.HeroClass == HeroClass.DemonHunter)
{
//smoke screen
if (duration < 1.5 && me.Powers.BuffIsActive(Hud.Sno.SnoPowers.DemonHunter_SmokeScreen.Sno))
{
IBuff buff = me.Powers.GetBuff(Hud.Sno.SnoPowers.DemonHunter_SmokeScreen.Sno);
int index = buff.TimeLeftSeconds[2] > 0 ? 2 : 0;
double remaining = buff.TimeLeftSeconds[index];
if (duration < remaining)
{
duration = remaining;
totaltime = buff.TimeElapsedSeconds[index] + remaining;
}
}
}
-
Post Thanks / Like - 1 Thanks
Jembo (1 members gave Thanks to Razorfish for this useful post)
-
Active Member
Awesome, thanks Razor! I have been playing hardcore a fair bit over the passed few weeks, it's been fun.
If I am understanding this correctly, alternatively could this be used as well - effectively doing the same thing?
Code:
int index = buff.TimeLeftSeconds[0] > 0 ? 0 : 2;
Out of curiosity what would you need to do if instead of 2 indexes, hypothetically there were 3 ?