User Tools

Site Tools



tensorreactions

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
tensorreactions [2020/01/20 04:15] rikudoutensorreactions [2021/04/18 17:24] (current) anyone
Line 1: Line 1:
 <html> <html>
-<span style="color:red;font-size:300%;">ONLY WORKS ON PATCH 5.1 OR HIGHER</span>+<span style="color:red;font-size:300%;">ONLY WORKS ON PATCH 5.1 AND HIGHER</span>
 </html> </html>
  
Line 11: Line 11:
 </WRAP> </WRAP>
 <WRAP center round tip 60%> <WRAP center round tip 60%>
-Join https://discord.gg/bVABzBA for support and reactions.+Join https://discord.gg/bVABzBA for support and reactions. Check the #files channel for profiles that have been shared publicly.
  
-We also have file sharing drive: https://drive.google.com/drive/u/0/folders/1555e-dLqVPViuq1bAcn6D7DwdmQuQvSm+**If you are new user, please watch this video first:** https://www.youtube.com/watch?v=iyo0hs5_-dA
 </WRAP> </WRAP>
  
Line 31: Line 31:
   * Much more but this list would be too long   * Much more but this list would be too long
  
 +
 +This addon is huge in scope, and covering everything in this wiki is impossible. I have provided basic usage information and examples, however you should go and experiment with the various options
 ====== Timeline UI ====== ====== Timeline UI ======
 **General theme with the UI is to right click when in doubt** **General theme with the UI is to right click when in doubt**
Line 73: Line 75:
 would add a 500ms delay to this reaction. would add a 500ms delay to this reaction.
  
-**You cannot invoke the action override from here! You must use lua action if you wish to do that manually.** +You can also invoke the ACR override by returning the following from your lua code: 
 + 
 +**''//table// action, //number// targetID, //bool// __ignoreWeaveRules__, //bool// __allowInterrupt__''** 
 + 
 +Argument //action// must be valid action from the ActionList. **If you choose to return an action from lua, make sure the "Lua Returns Action" box is checked!**
  
 ===== Condition UI ===== ===== Condition UI =====
-{{https://i.imgur.com/potm5yy.png }} The way this list works is, you create your conditions here, and then link them to specific actions below. That way you can have multiple actions using the same condition without having to make a new condition every time. Every action will also have it's own independent list of linked conditions.+{{https://i.imgur.com/wuLbvge.png }} The way this list works is, you create your conditions here, and then link them to specific actions below. That way you can have multiple actions using the same condition without having to make a new condition every time. Every action will also have it's own independent list of linked conditions.
  
 **Category**: General category that exposes more options. **Self contains most of the important ones, such as Gauge, Map ID, Skill Cooldown checks, etc**, however I encourage you to explore the options and ask in the discord if you don't understand any of them. **Category**: General category that exposes more options. **Self contains most of the important ones, such as Gauge, Map ID, Skill Cooldown checks, etc**, however I encourage you to explore the options and ask in the discord if you don't understand any of them.
Line 83: Line 89:
  
 **Emnity**: This value is target.aggropercentage on your current target. **Emnity**: This value is target.aggropercentage on your current target.
 +
 +**Filter**: Filter condition will loop over your target list and set detection target, then run your conditions. In the linked conditions to filter, you must set detection target to be the target you are checking on (party > target: detection target), and then once it's done it will look at the list of all targets that match, pick a subtype, and then set that as detection target. Then you link your skill action and use detection target as your target, with the filter condition linked. **Tip**: You can set "min number of entities" to 0, and enable "match all", and effectively this will become an "OR" condition. Setting min entities to 0 just means reactions will ignore your target list and simply evaluate the conditions as is.
  
 **Lua**: If you make a lua reaction, **you must return a boolean, else your condition will be ignored**. Important variables that you can use: **Lua**: If you make a lua reaction, **you must return a boolean, else your condition will be ignored**. Important variables that you can use:
Line 101: Line 109:
 **Set Target**: Targets an enemy. **Will not show if Untarget is checked.** **Set Target**: Targets an enemy. **Will not show if Untarget is checked.**
  
-**Condition List**: List of conditions that the action will check. **Each condition must be satisfied for the action to execute.**+**Condition List**: List of conditions that the action will check. **Each condition must be satisfied for the action to execute.** This list can be dragged and dropped, you can also right click on the condition to view options.
  
 **Lua:** There are 3 useful variables that you can (and one that you must) use here. **Lua:** There are 3 useful variables that you can (and one that you must) use here.
Line 107: Line 115:
 __self__: the action object. **You must set self.used = true if the action successfully went off and can be dequeued!** __self__: the action object. **You must set self.used = true if the action successfully went off and can be dequeued!**
  
-__data__: **Global table passed to every lua reaction, condition, and action, gets reset on wipe!** This table is useful for checking variables set by other lua reactions as well as setting them. For example: a reaction that would disable your qt toggles when a certain entity appears might have a lua action that executes the following:+__data__: **Global table passed to every lua reaction, condition, and action, gets reset on wipe!** This table is useful for checking variables set by other lua reactions as well as setting them. For example: a lua action that executes the following code:
  
 <code lua> <code lua>
-data.orbsToggled = true +local target = TensorCore.getEntityByGroup("Main Tank"
-self.used = true+local minne = ActionList:Get(1, 7408) 
 +if minne.cdmax - minne.cd < 1.0 and target~= nil then 
 +    ACR_TensorRequiem_Hotbar_NaturesMinne_Custom = true 
 +    ACR_TensorRequiem_Hotbar_NaturesMinne_Custom_TargetID = target.id 
 +    self.used = true 
 +end
 </code> </code>
-This would set variable called "orbsToggled" to true, and allow for a different reaction to re-enable those toggles when the entities dieOtherwise this reaction would constantly enable toggles and you would never be able to toggle them off.+would invoke the hotbar method inside of TensorRequiem to use natures minne on your main tank. 
 + 
 +You can also invoke the ACR override by returning the following from your lua code: 
 + 
 +**''//table// action, //number// targetID, //bool// __ignoreWeaveRules__, //bool// __allowInterrupt__''** 
 + 
 +Argument //action// must be valid action from the ActionList. **If you choose to return an action from lua, make sure the "Lua Returns Actionbox is checked!** 
 + 
 +====== General UI ====== 
 +{{https://i.imgur.com/h1dsdJP.png }} **Profile**: This is the profile that will be loaded. General reactions are loaded regardless of timeline and map, hence the name "general"
 + 
 +Each reaction in this list will be executed in the order of the listing and depending on event. The UI is the same as Timeline Reactions but with a few minor tweaks. 
 + 
 +**Event**: List of events to trigger your event with. OnUpdate should be used as a last resortas it's a bit resource heavy depending on the reaction. 
 + 
 +**Lua:** every lua reaction and action inside general reactions will have the same variables as the timeline ones, however they will also have an additional variable, eventArgs: 
 + 
 +__self__: the same as timelines, which means **for lua reactions and lua actions, self.used must be set if the (re)action goes off successfully** 
 + 
 +__data__: same as timelines, for you to use as you wish. This data variable may prove very useful in general reactions as you can set it based on certain events happening. For example: on limit cut in TEA, you get marker number 5. You can use the OnEntityMarkerAdd event and see which marker is added on you, and store that in data.myLimitCutNumber variable. You can use that variable to use certain skills in the timeline for tea (remember that data object is **shared between everything, general timeline reactions included** 
 + 
 +__eventArgs__: this is the new arg for general lua reactions/actions/conditions.  It is a table, and each key is different for each event (listed below). Example usage: d(eventArgs.entityID) 
 + 
 +You can also invoke the ACR override by returning the following from your lua code: 
 + 
 +**''//table// action, //number// targetID, //bool// __ignoreWeaveRules__, //bool// __allowInterrupt__''** 
 + 
 +Argument //action// must be a valid action from the ActionList. **If you choose to return an action from lua, make sure the "Lua Returns Action" box is checked!** 
 + 
 +====== Additional Documentation ====== 
 +===== Globals ===== 
 +  * **''TensorReactions_CurrentTimer''** 
 +    * Contains a **copy** of the current internal timer that reactions uses 
 +===== Event Information ===== 
 +  * **''OnUpdate''**: no args, simply an event that runs every frame 
 + 
 +  * **''OnEntityCast''**: Triggered the moment an entity casts an instant cast action, or successfully finishes a channel action 
 +    * entityID 
 +      * id of entity that is casting action 
 +    * spellID 
 +      * id of spell that entity is casting 
 + 
 +  * **''OnEntityChannel''**: Triggered the moment an entity starts channeling an action 
 +    * entityID 
 +      * id of entity that's channeling the spell 
 +    * spellID 
 +      * id of the action being channeled 
 +    * targetID 
 +      * id of target the action is being casted on 
 +    * channelTimeMax 
 +      * how long the entity needs to channel for before the cast is finished 
 + 
 +  * **''OnEntityMarkerAdd''**: Triggered whenever a marker is added above an entity (stack marker etc)I recommend making a debug trigger on this one so you can find out the marker types, or ask in the discord. 
 +    * entityID 
 +      * id of entity the marker is added to 
 +    * markerID 
 +      * marker type that is being added (this value is consistent; it will always be the same for the same mechanic) 
 + 
 +  * **''OnEntityAdd''**: Triggered whenever a new entity is added/loaded in. Useful for detecting when add spawns happen. These will also trigger on reset so you should have a combat check on any entity add/remove reactions. 
 +    * entityID 
 +      * id of entity that was added 
 +    * entityName 
 +      * name of entity that was added 
 + 
 +  * **''OnEntityRemove''**: Triggered whenever an entity is removed/unloaded. **This is not the same as when an entity dies, often an entity will die but still exist for a 5-10 seconds after** These will also trigger on reset so you should have a combat check on any entity add/remove reactions. 
 +    * entityID 
 +      * id of entity that was removed 
 +    * entityName 
 +      * name of entity that was removed 
 + 
 +  * **''OnNewChatLine''**: Triggered whenever a new chat message is sent, including combat log. Useful for detecting certain phase transitions and various misc reactions 
 +    * line 
 +      * line **object** that was sent. Use line.line to get the actual text. 
 + 
 +  * **''OnNewBuffEntry''**: Triggered whenever a buff is added to an entity 
 +    * entityID 
 +      * id of entity that buff was added to 
 +    * buffID 
 +      * id of buff that was added 
 +    * buffDuration 
 +      * duration of buff that was added 
 +    * ownerID 
 +      * owner of the buff that was added to entity 
 + 
 +  * **''OnWipe''**: no args, simply gets triggered when you go out of combat, and **only gets triggered if a valid timeline is loaded** to prevent situations like dungeons constantly triggering onwipe() 
 + 
 +===== Additional Functions ===== 
 +//italics// = type, __underline__ = optional
  
 +  * **''TensorCore.isAnyEntityCasting(//number// castid, //string// __elistFilters__)''**
 +    * Returns //bool// if any entity is **channeling** action ''castid'', and //table// entity that is channeling ''castid''. Optionally, elistFilters can be specified to check a more narrow list of entities.
 +  * **''TensorCore.isEntityAlive(//number// contentid, //string// __elistFilters__)''**
 +    * Returns //bool// if entity with ''contentid'' is alive, and //table// entity that is matches ''contentid'' and is alive. Optionally, elistFilters can be specified to check a more narrow list of entities.
 +  * **''TensorCore.getEntityByGroup(//string// strGroup, //string or table// subGroup, //bool// __inParty__, //number// __range__, //number// __szCluster__)''**
 +    * Returns //table// entity of specified group and subgroup. If strGroup is "Named Target" or "ContentID" then subgroup **must be a table** that contains keys "name", "subgroup", and "contentid". Example: ''{name = "Striking Dummy", subgroup = "Nearest", contentid = 541}''. Important note: you don't need contentid if strGroup is "Named Target", and you don't need name if strGroup is "ContentID". Subgroup will default to nearest in all cases.
 +    * Full list of strGroups: ''{"All", "Self", "Named Target", "ContentID", "Current Target", "Enemy", "Target of Current Target", "Target Spell of Current Target", "Most Clustered Ally", "Most Clustered Enemy", "Party", "Main Tank", "Off Tank", "Tank", "Melee DPS", "Ranged DPS", "Ranged Physical DPS", "Ranged Caster DPS", "Healer"}''
 +    * Full list of subGroups: ''{"Nearest", "Lowest HP", "Highest HP", "Number"}'' Important Note: Number will simply return the list of strGroup targets back to you.
 +    * Full list of strGroups that require a subgroup: ''{"Named Target", "Enemy", "Party", "Tank", "ContentID", "Melee DPS", "Ranged DPS", "Ranged Physical DPS", "Ranged Caster DPS", "Healer", "Target Spell of Current Target"}''
 +  * **''TensorCore.resetTTKTargets(//number// ...)''**
 +    * This function accepts a variable number of arguments. Given an id, it will reset all time to kill data on that entity. Useful for Living Liquid / Living hand split in TEA p1 that throws off TTK. Example Usage: ''TensorCore.resetTTKTargets(123, 456)''. This will reset ttk info on entities with id 123 and 456.
  
  
tensorreactions.1579493749.txt.gz · Last modified: 2020/01/20 04:15 by rikudou