Man the capabilities of this plugin are just getting better and better. Nice video, Thur!
Man the capabilities of this plugin are just getting better and better. Nice video, Thur!
Thanks guys, I'm glad you like it.
For anyone who got error messages when upgrading to version 3, please update to 3.01, which is now on lotrointerface.
Had a problem trying to update from 3.00 to 3.01 with Plugin Compendium - had to remove the Thurallor folder before reinstalling with PC or I'd get the following...
Problem while installing plugin SequenceBars
Access to the path 'C:\Users\fade2gray\Documents\ The Lord of the Rings Online\Plugins\Thurallor\Commo n\Utils\LibCompress\luabit-0.4\hex.lua' is denied.
Interesting. Apparently I have accidentally set the read-only bits on some of the files in the .zip file. If you originally installed the plugin with Plugin Compendium, that wasn't a problem; apparently Plugin Compendium ignores the bits and makes all files writeable. But if you originally installed it manually, and then tried to update with Plugin Compendium, the read-only bits are a problem. I just posted a new version that fixes the permission bits. Thanks for letting me know.
Very nice plugin.
Is their a way to lock sequence bars so we don't accidentally move them in the heat of clicky-combat?
Many Thanks!
Found some more bugs
You've used a period instead of a colon which generates - "Watcher.lua:318: Invaild member function call".
Attempting to insert a conditional event into the last slot (12) of a new bar, with 7-11 being empty, gives - "SequenceEditor.lua:1556: attempt to index local 'info' (a nil value)".
"when the target changes" does not appear as an option in group behaviours menu.Originally Posted by Version 3.00 release notes
Thanks, fade2gray. Version 3.03 fixes the above bugs and this. Now posted at lotrointerface.
Last edited by Thurallor; Mar 12 2016 at 09:44 PM.
{ Thurallor } That's a very broad question, equivalent to asking
>> "What kind of program is it possible to write?"
I would like to *SEE* what ANYONE has done with their coding in regards to this LUA feature of SequenceBars.
I cannot get the IF/THEN/ELSE to work the way *I* would expect, no matter what I try.
Some EXAMPLES would be appreciated. *meek smile*
From the ''manual'' provided for this plugin:
I do not see any such "script equivalent" which I am supposed to be able to "easily modify."~Lua Script~
The condition is the return value of the specified Lua script. Use this if you want to test a condition that is not listed above (and you know Lua programming). When you select this condition, a Lua script equivalent to the previously-selected condition will be shown, so you can easily modify it. You may use this to build more complex expressions that include "and" and "or" operations.
I believe it would be nice if that little edit field for the LUA SCRIPT actually pointed to a sub-directory that contains *.LUA file(s) for that feature to LOAD/ USE.
As an example: before Thurallor included the class conditions "Hunter Focus < X" and "Hunter Focus > X" for me, I could have...
- Clicked on "Beorning Wrath > X%".
- Then scrolled up the list and clicked on "~Lua Script~".
- Copied the code in the small script window that appears.
- Paste the script in a text editor and modify it to my satisfaction.
- Copy and paste the script over the original in the script window.
Change:To:Code:local _, player = ...; local attribs = player:GetClassAttributes(); return attribs.GetWrath and (attribs:GetWrath() < 0);Hope that helps.Code:local _, player = ...; local attribs = player:GetClassAttributes(); return attribs.GetFocus and (attribs:GetFocus() < 0);
@Thurallor
Thanks for sorting out the directory tree.
Non trivial no doubt, but is there any chance of making that little script window a larger flyout window?
Thanks for the quick response!
I have been trying to pm you but am receiving an error msg:
"Your submission could not be processed because a security token was missing."
I have a current copy of my SequenceBars.plugindata I would like you to look over and see if you can give me specific assistance with what I am actually trying to do (not specifically LUA scripting, actually).
Please let me know when/if I can pm you the contents of the *.plugindata .
______________________________
Desired scenario:
(=Burlar=)
**IF**
SKILL Sneak = READY
**THEN**
+HIDE+
SKILL: Distract
SKILL: Burgle
+SHOW+
SKILL: Sneak
SKILL: Share the Fun
**ELSE**
+HIDE+
SKILL: Sneak
SKILL: Share the Fun
+SHOW+
SKILL: Distract
SKILL: Burgle
Last edited by PENwaru; Mar 20 2016 at 03:08 PM.
Thanks for helping with PENwaru's questions. I'll see what I can do about this.
That seems to be a problem that occasionally manifests with the LOTRO forum. You might try a different web browser, or you could send me a PM at the lotrointerface forum. Or, you can export your bar(s) as text and post them here. (Just right-click on a bar or group, choose "Export", copy the text to the clipboard with Ctrl+C, and paste it here or PM it to me.)
In regard to the particular scenario you mentioned, I think I'd probably need to make a video to explain it fully. But I'll try to do it briefly here:
The simple approach would be a sequence with a single conditional:Desired scenario:
(=Burlar=)
**IF**
SKILL Sneak = READY
**THEN**
+HIDE+
SKILL: Distract
SKILL: Burgle
+SHOW+
SKILL: Sneak
SKILL: Share the Fun
**ELSE**
+HIDE+
SKILL: Sneak
SKILL: Share the Fun
+SHOW+
SKILL: Distract
SKILL: Burgle
Since the "Hide inactive branches" option is enabled, you will only see slots 2 and 3, or slots 4 and 5, depending on the value of the condition:
- When "Sneak" is ready, slots 2 and 3 are displayed in the bar.
- Otherwise, slots 5 and 6 are displayed.
However, the condition is not evaluated continuously. It is only evaluated when the bar resets (e.g. by clicking on the caption "New bar", or by clicking the last icon in the sequence). At that point it makes a choice of which icons to display, based on whether the "Sneak" skill is ready.
If you want the plugin to continuously check whether the "Sneak" skill is ready, and update the displayed icons continuously, then you will have to reset the bar continuously. This can be done by assigning an event behavior to the bar that makes it reset when a user event occurs. Then make another continuously running bar that is constantly emitting that event. This is similar to what I did in my last demo video.
THANK YOU! THANK YOU!! THANK YOU!!! for the response!
I have followed all the advice, much of it I actually DID understand just by looking at Sequence Bars within LotRO... but I was unsuccessful in accomplishing what I feel is a most basic configuration:
Code:{ ["Neriumoleander.88"] = { ["barIDs"] = { "Neriumoleander.90"; "Neriumoleander.97"; }; ["barsMoveTogether"] = false; ["caption"] = { ["font"] = 1107296263; ["height"] = 32; ["text"] = "TESTIFTHENELSE00"; ["width"] = 227; }; ["color"] = "FFF5EE"; ["eventHandlers"] = {}; ["eventsEnabled"] = true; ["groupIDs"] = {}; ["hidden"] = false; ["type"] = "group"; }; ["Neriumoleander.90"] = { ["anchor"] = "TopLeft"; ["animation"] = { ["duration"] = -1; }; ["caption"] = { ["font"] = 1107296263; ["height"] = 35; ["hidden"] = false; ["position"] = "beginning"; ["text"] = "BurglarIFTHENELSE01"; ["width"] = 80; }; ["color"] = "DC143C"; ["continuous"] = true; ["cursorHomePosition"] = 1; ["cursorStyle"] = "MetalFrame1"; ["eventHandlers"] = { { ["action"] = "self = ...; self:Reset(); "; ["description"] = "Reset bar when user event occurs: IFTHENELSE event"; ["object"] = "self.manager:GetEventCallbacks()"; ["trigger"] = "IFTHENELSE event"; }; }; ["eventsEnabled"] = true; ["hidden"] = false; ["hideAutomatics"] = true; ["hideInactiveBranches"] = true; ["locked"] = false; ["orientation"] = "Right"; ["position"] = { ["left"] = 86; ["top"] = 374; }; ["sequenceEditor"] = { ["defaultIcon"] = 1091399834; ["position"] = { 698; 145; }; ["size"] = { 470; 432; }; }; ["sequenceItemInfo"] = { { ["automatic"] = true; ["background"] = "Thurallor/SequenceBars/Images/if.tga"; ["class"] = "Turbine.UI.Control"; ["condArgs"] = { ["skillName"] = "\"Sneak\""; }; ["condExpr"] = "return (Thurallor.Utils.Watcher.SkillReady(<skillName>));"; ["condName"] = "SkillReady"; ["toolTip"] = "IF"; ["type"] = "If"; }; { ["class"] = "Turbine.UI.Lotro.Quickslot"; ["Data"] = "0x7000D448"; ["type"] = 6; }; { ["class"] = "Turbine.UI.Lotro.Quickslot"; ["Data"] = "0x70003212"; ["type"] = 6; }; { ["automatic"] = true; ["background"] = "Thurallor/SequenceBars/Images/else.tga"; ["class"] = "Turbine.UI.Control"; ["toolTip"] = "ELSE"; ["type"] = "Else"; }; { ["class"] = "Turbine.UI.Lotro.Quickslot"; ["Data"] = "0x700031F5"; ["type"] = 6; }; { ["class"] = "Turbine.UI.Lotro.Quickslot"; ["Data"] = "0x70003F16"; ["type"] = 6; }; { ["automatic"] = true; ["background"] = "Thurallor/SequenceBars/Images/end-if.tga"; ["class"] = "Turbine.UI.Control"; ["toolTip"] = "END-IF"; ["type"] = "EndIf"; }; { ["action"] = "local item = ...; item.bar.animationStopped = true; "; ["background"] = "Thurallor/SequenceBars/Images/stopsign.tga"; ["class"] = "Turbine.UI.Control"; ["toolTip"] = "Stop animating"; ["type"] = "StopAnimating"; }; }; ["slotSize"] = 35; ["slotSpacing"] = 0; ["type"] = "bar"; ["visibleSlots"] = 10; }; ["Neriumoleander.97"] = { ["anchor"] = "TopLeft"; ["animation"] = { ["duration"] = -1; }; ["caption"] = { ["font"] = 1107296263; ["height"] = 35; ["hidden"] = false; ["position"] = "beginning"; ["text"] = "seqbar 4reset"; ["width"] = 80; }; ["color"] = "00FF89"; ["continuous"] = true; ["cursorHomePosition"] = 1; ["cursorStyle"] = "SmallSquareGlow"; ["eventHandlers"] = {}; ["eventsEnabled"] = false; ["hidden"] = false; ["hideAutomatics"] = true; ["hideInactiveBranches"] = true; ["locked"] = false; ["orientation"] = "Right"; ["position"] = { ["left"] = 86; ["top"] = 409; }; ["sequenceEditor"] = { ["defaultIcon"] = 1090519043; ["position"] = { 338; 241; }; ["size"] = { 470; 344; }; }; ["sequenceItemInfo"] = { { ["action"] = "local item = ...; item.bar.manager:PropagateEvent(item.info.eventName);"; ["automatic"] = true; ["background"] = "Thurallor/SequenceBars/Images/event_icon.tga"; ["class"] = "Turbine.UI.Control"; ["eventName"] = "IFTHENELSE event"; ["toolTip"] = "Generate user event"; ["type"] = "GenerateEvent"; }; { ["class"] = "Turbine.UI.Lotro.Quickslot"; ["Data"] = "0x700256BA"; ["type"] = 6; }; { ["class"] = "Turbine.UI.Lotro.Quickslot"; ["Data"] = "0x70025792"; ["type"] = 6; }; { ["class"] = "Turbine.UI.Lotro.Quickslot"; ["Data"] = "0x70025793"; ["type"] = 6; }; { ["class"] = "Turbine.UI.Lotro.Quickslot"; ["Data"] = "0x70025794"; ["type"] = 6; }; { ["class"] = "Turbine.UI.Lotro.Quickslot"; ["Data"] = "0x70025795"; ["type"] = 6; }; { ["class"] = "Turbine.UI.Lotro.Quickslot"; ["Data"] = "0x70025796"; ["type"] = 6; }; { ["class"] = "Turbine.UI.Lotro.Quickslot"; ["Data"] = "0x7002FF62"; ["type"] = 6; }; { ["class"] = "Turbine.UI.Lotro.Quickslot"; ["Data"] = "0x7002FF61"; ["type"] = 6; }; { ["class"] = "Turbine.UI.Lotro.Quickslot"; ["Data"] = "0x7002FF63"; ["type"] = 6; }; { ["class"] = "Turbine.UI.Lotro.Quickslot"; ["Data"] = "0x7002FF60"; ["type"] = 6; }; { ["action"] = "local item = ...; item.bar.animationStopped = true; "; ["background"] = "Thurallor/SequenceBars/Images/stopsign.tga"; ["class"] = "Turbine.UI.Control"; ["toolTip"] = "Stop animating"; ["type"] = "StopAnimating"; }; { ["class"] = "Turbine.UI.Lotro.Quickslot"; ["Data"] = "0x700062C8"; ["type"] = 6; }; { ["class"] = "Turbine.UI.Lotro.Quickslot"; ["Data"] = "0x7001BF90"; ["type"] = 6; }; { ["class"] = "Turbine.UI.Lotro.Quickslot"; ["Data"] = "0x70020441"; ["type"] = 6; }; { ["class"] = "Turbine.UI.Lotro.Quickslot"; ["Data"] = "0x7003DC81"; ["type"] = 6; }; { ["class"] = "Turbine.UI.Lotro.Quickslot"; ["Data"] = "0x7004128F"; ["type"] = 6; }; }; ["slotSize"] = 35; ["slotSpacing"] = 0; ["type"] = "bar"; ["visibleSlots"] = 17; }; }
If you delete all but the first slot in your "SEQBAR 4RESET" sequence, it should work. Standard quickslots cannot be run automatically; you have to click them. So even though you have it set to "Run continuously", the sequence stops when it gets to slot 2 (your milestone skill).
I also suggest you add a Delay slot to slow down the event generation a bit. Here is your "SEQBAR 4RESET" with only the event generation and delay:
To import this, you can use the "Import" feature in the right-click menu of any group in the directory.Code:.b6//>.N26\RBH88Bh7@ZcAK2OEH?HCM7/P4XVh?H/RXk._BWW5B;C@^ACAC;`CX58QX5.T[2cChWbA\>?bB3@_2??fXVFTVVV[8ZO4ChP:XG@>XJC72:b2C<c3?>c37@bC3=HE0C/4\PXXj?K_3lN\XK3OS:BRL8aCGS:]2GPYh18U?67c4LHb2Z`UK3TRej3Z_57AQX;7`P\KBA?L\>d`5g1\X:3gBg9`@DPjXLBlXlh@ZR`HNP1SY_iOX=S^WcRR=I<PFB[a2^<.?Gm?71i1bNNbV_AWWOWN9;X.BghQBUU>M9;P.BX`A<NK28CFXlJZJ3M;aa.meW3/OH4PBFQN<A^WSD@HN31]=LUS@d5NDI2.WYRY>1..4b5e@R7`P3;J9YlV:?4e2@m?7LI.ZV8BF=SkibQcdA0R\UjlK<ea3=\RL2.^NNmO@5.H?7kd6jD<fA0WJ_i;N.bX_jRReF]^F?h`[S<6hbY=D^F\J2DgdL=?7/@BN\/a6Y/OMPUE[@>BS6=^8U:W8CVXKGibj8G?STF/@i1aYgBTO97:JR7QbNTcMPZ:NjX?>SRR@e.h42RiT^6H89jCO25S@<e[/ZS9Z=<]S@JJ^.E5//WAPgZa>b<PA^ZHaF.;8ZBgX_?TS49ih@D;NWCP[E[HLc.Z]6T198T:_WOAYW7Rf1i4?e.;8ZG8]`<LNC<@YfGfB;Wf34c08KAPcj[BJ3IBUkLLOE:LaF.;8ZM77=JZSWCOE9m:MAXeD[0Mc^VZ6d76:@G=.<HCFcbS]/_[>PT[UUfD^R/@06HiY9R3F@<XXaYQWNB<9`J]C1<a>3i700FNj90?c4E0<8`N/^MS@`IeB7abR7YcN\_@5>L?7CIJEb4F>R7EP7X06<D]581P23_4^OK:GYg/:1`cL>C.0.Shd/iP/]QiW[\Kk8Df0:@V4_:dEK/J5O/UI7_DBN</jXGAP7YRU\8^fYl/_Y0002O/kbWP_0>FY_LBT>:`3>/.]/P6V.K2UQAC:@U4g0?/a6@\BN8Qd<\U[F.;8JLeZZ_.DRQi2>a12KKbS0.[7EKDG]6ff2^fiZAOQZl2/j]P5j3cSiXBlhDDV.c[D8.3?PZ[Ai8bE7fCG0LTA5O8AEY/KPZ:NjX@Xd^[V:^Q6@U2AB:@J[D:B5:890;Q0hF_E@8H53Xl^iL^3;k1E7ked]0m3A@/4_F0flG9\fV.^Fm\RTKOISd8lXea@T927/P]3g@UdcUe@D:<R37LUd3[ELcciEE[KLcciEE[KLcciEE[KLceAU[AI0>M97HBFQZ<ALQ]ON;cT.3d8lBjHHgPBfXY<k2S?a1<C3FLKj8CF\H_W
Last edited by Thurallor; Mar 22 2016 at 09:02 AM.
Version 3.04 is now posted at lotrointerface.
Version 3.04 release notes
Bug fixes:
- Fixed a problem that might cause "Effect is/not present" conditionals to fail and generate an error message.
New features:
- In the sequence editor:
- You can now resize the slot properties pane to make it wider.
- When editing a Lua script conditional, you can now resize the Lua script window to make it larger.
- While you're editing a conditional, the current value of the condition will now be shown.
Last edited by Thurallor; Mar 22 2016 at 09:41 AM.
Might be an opportune time to request an additional function, especially useful for PENwaru's situation and others I can think of - https://youtu.be/_5TOW_LqX48.
Would that have been anything to do with the "stack overflow" errors I was about to report?
Thanks for that.
I also find the Lua syntax error highlighting helpful - shame that np++ doesn't have a syntax checker.
Ref post #88
I came up with the following Lua script which will only trigger on animate targets depending on the difference between the level of the player and that of the target, i.e. if difference = 8, only monsters with a green threat level or higher will trigger a behaviour (will also trigger on friendlies with a difference of 8 or lower). Toggling between alignment = 1 and nil will not-trigger/trigger when targeting yourself (don't know if this may have adverse effects elsewhere). Odd discovery, the mustering horn in the South Barrow Downs has a level of one.
Code:local _, player = ...; difference = 8; alignment = 1; target = player:GetTarget(); if (target and target.GetLevel) and ((player:GetLevel() - target:GetLevel()) <= difference) and not (target.GetAlignment and (target:GetAlignment() == alignment)) then return true; else return false; end
I'll add this.
Doubtful. Please let me know the error message and the scenario if it happens again.
Looks to me like GetAlignment is only defined when the target is the player. Not very useful, although it can tell you whether you're a freep (1) or a creep (2).I came up with the following Lua script which will only trigger on animate targets depending on the difference between the level of the player and that of the target, i.e. if difference = 8, only monsters with a green threat level or higher will trigger a behaviour (will also trigger on friendlies with a difference of 8 or lower). Toggling between alignment = 1 and nil will not-trigger/trigger when targeting yourself (don't know if this may have adverse effects elsewhere). Odd discovery, the mustering horn in the South Barrow Downs has a level of one.
Working on how to explain the circumstances.
3.05 - that was quick, but discovered a debilitating bug though:
Adding a conditional if-then or if-then-else, then immediately try to delete it causes a looping string of errors needing SB to reloaded (creates a >60KB log file).
SequenceEditor.lua:975: attempt to call field 'condFunc' (a nil value)
SequenceEditor.lua:973: attempt to index local 'slot' (a nil value)
Edit-1: Must've been inherited from 3.04 which generates: SequenceEditor.lua:969: attempt to index local 'slot' (a nil value)
Edit-2: Revision History (22-Mar-2016) Version 3.05: Added "Skill is/not ready" condition. - shouldn't that be "Skill is/not usable"?
Last edited by fade2gray; Mar 23 2016 at 09:12 AM.
Thanks for the report, 3.06 should fix it (awaiting approval).
I had been experimenting with Skill Ready/NotReady and different skills with various cooldowns, and at one stage I had developed a rather long and convoluted sequence of conditionals, with some being nested.
The sequence appeared to work as expected, but when I started clicking through it very rapidly it suddenly stopped working and froze with the green circular arrow showing.
Reloading SB didn't make any difference, so I added a User Generated Event at the end of the sequence and added an event behaviour to try triggering a reset, and this is when I started noticing the following stack overflow errors.
Watcher.lua:563: stack overflow
Bar.lua:1244: stack overflow
[string "return (Thurallor.Utils.Watcher.Skill Ready(..."]:1: stack overflow
After further investigation I discovered the root cause; during the frantic clicking, somehow all instances of 'if Skill Ready: Penetrating Shot' had been replaced with 'if Skill Ready: Improved Penetrating Shot' which is still untrained.
Since deleting the original sequence (created with SB 3.00) I've been unable to reproduce the exact event where the Skill Ready parameters got replaced, but the errors can be forced using the following sequences to simulate it.
Sequence 1:
Slot 1: if Skill Ready: Any Untrained Skill
Slot 2: Any Skill
Slot 3; endif
Slot 4: User Generated Event: Force Reset
Add: Event Behaviour: Reset Bar When User Generated Event Occurs: Force Reset
Sequence 2:
Slot 1: if Skill Ready: Any Untrained Skill
Slot 2: Any Skill
Slot 3; else
Slot 4: User Generated Event: Force Reset
Slot 5: endif
Add: Event Behaviour: Reset Bar When User Generated Event Occurs: Force Reset
Last edited by fade2gray; Mar 24 2016 at 04:08 PM.
Thanks for the test case. Reproduced the error.
Should be fixed now, in version 3.07.
Last edited by Thurallor; Mar 25 2016 at 01:09 AM.
Yup, sorted.
I've asked a lot of you since discovering SB, but any chance you could implement this: https://youtu.be/vjis5DAJ3yE
I've thought about just adding a generic "Lua script" special slot, so you could put variable assignments or whatever you want in it. Of course, you can already do this by creating an if-then slot pair and just not putting any slots between the braces. But that's slightly less elegant.
I don't want to go down the path of making a special variable assignment slot, because then there's a whole plethora of slots that logically follow, such as incrementing a variable, comparing a variable to a value, etc. that just amount to trivial repackaging of simple Lua statements. I think anyone savvy to use such features would have no problem writing the equivalent line of Lua code. And there's a point of diminishing returns where adding more seldom-used features makes the main features harder for novices to understand and use.