User Tools

Site Tools

en


argus

This is an old revision of the document!


ONLY WORKS ON PATCH 5.1 AND HIGHER

About

Argus is an advanced mechanic detection library that can be incorporated into other addons. Offers useful API that can detect various mechanics across fights.

Please join my discord if you require support, you can also view other addons created that use Argus here: https://discord.gg/bVABzBA

Because the API Argus offers is so powerful, for safety reasons, Argus will not be updated immediately for new raid tiers. Here is how long each type of content will take to update:

  • New dungeons and primals: Instant
  • New Normal Raids: 2-3 days
  • New Savage Raids: 1 week
  • New Ultimate Raids: 2 weeks minimum, and after world 1st

Coming Soon

Persistent ground effect detection (like toxic vomit from brayflox dungeon)

What It Does Not Detect

Cones - cone arc angle outside of telegraphed ones. The hit detection for untelegraphed cones is done server side and thus the angle of the cones is never sent to client nor is it stored in the client.

Torus/Donuts - inner circle radius outside of telegraphed aoes (but also some telegraphed aoes). The hit detection for untelegraphed tori/donuts is done server side and thus the radius of the safe inner circle is never sent to client nor is it stored in the client.

Documentation

italics = type, underline = optional

Detection Functions

  • Argus.getCurrentGroundAOEs()
    • Returns table GroundAOE of current AOEs that are cast on the ground where each key is the entityID source, and value is the GroundAOE structure (listed below). These are not attached to an entity (they do not originate from an entity centerpoint). Also returns AOEs before the telegraphs are drawn, and returns AOEs with no telegraphs.
  • Argus.getCurrentDirectionalAOEs()
    • Returns table DirectionalAOE of current AOEs that are on the ground where each key is the entityID source, and value is the DirectionalAOE structure (listed below) and are attached to an entity (they originate from the source entity's center point). Most commonly used for line AOEs, conals, and donuts, but also includes circles. Also returns AOEs before the telegraphs are drawn, also returns AOEs with no telegraphs.
  • Argus.getCurrentTethers()
    • Returns table where each key is number entityID and each value is table tether. The list is all active tethers/chains/links between 2 entities. Each tether table has the following values: number type, number targetID. This type is similar to overhead marker types, each type will have exactly the same animation for every instance that shares that type (ex type 2 tethers will always look the same). However, how or when the tether resolves, is not known to the client.
  • Argus.registerOnMarkerAdd(function func)
    • Registers func into marker func list, and func will get called any time there is an overhead marker added to an entity. Function func should be defined with the following arguments: func(number entityID, number markerType). Argument entityID is the id of the entity to which the marker is being added to, and argument markerType is the marker type that is added to entity. Marker type is consistent across mechanics. A marker of type 2 will always have the same animation.
  • Argus.registerOnEntityCast(function func)
    • Registers func into entity cast func list. This func will get called any time the server sends a successful entity cast packet to the client. This means that this function is almost 100% reliable to use. Function func should be defined with the following arguments func(number entityID, number actionID).
  • Argus.registerOnEntityChannel(function func)
    • Registers func into entity channel func list. This func will get called any time the server sends a packet to the client, that entity has begun channeling. This means that the function is almost 100% reliable to use. Function func should be defined with the following arguments func(number entityID, number channelID, number targetID, number channelTimeMax).

Draw Functions

  • Argus.rotatePosAroundPos(table originPos, table posToRotate, number angle)
    • returns table with keys x, y, z of rotated pos. Argument originPos is the position the rotation should be around in a table with the keys x, y, z defined, and argument posToRotate is the world Pos to rotate. This function is most commonly used for getting the correct positions for line aoes. example usage for line aoe:
                  local length, width = aoe.aoeLength, (aoe.aoeWidth / 2)
       
                  local rectWorld = {
                      topleft = RenderManager:WorldToScreen(Argus.rotatePosAroundPos({z = aoe.z, y = aoe.y, x = aoe.x}, {z = aoe.z, y = aoe.y, x = aoe.x + width}, aoe.heading)),
                      bottomleft = RenderManager:WorldToScreen(Argus.rotatePosAroundPos({z = aoe.z, y = aoe.y, x = aoe.x}, {z = aoe.z, y = aoe.y, x = aoe.x - width}, aoe.heading)),
                      topright = RenderManager:WorldToScreen(Argus.rotatePosAroundPos({z = aoe.z, y = aoe.y, x = aoe.x}, {z = aoe.z + length, y = aoe.y, x = aoe.x + width}, aoe.heading)),
                      bottomright = RenderManager:WorldToScreen(Argus.rotatePosAroundPos({z = aoe.z, y = aoe.y, x = aoe.x}, {z = aoe.z + length, y = aoe.y, x = aoe.x - width}, aoe.heading)),
                  }
  • Argus.addCircleFilled(number x, number y, number z, number radius, number segments, U32 Color colorFill, U32 Color colorOutline, number outlineThickness = 1.0)
    • Draws a filled circle at world coordinates with the specified radius in radians. U32 Color can be retrieved from the function GUI:ColorConvertFloat4ToU32(). if colorOutline is not specified, then an outline will not be draw. Tip: You can set the alpha on colorFill to be 0 and specify an outline color with alpha > 0 to have only the outline drawn. Generally only 50 segments is needed to draw a circle that looks round. For performance reasons I would recommend not going above 50 segments.
  • Argus.addConeFilled(number x, number y, number z, number radius, number angle, number heading, number segments, U32 Color colorFill, U32 Color colorOutline, number outlineThickness = 1.0)
    • Draws a filled cone at world coordinates an arc angle of angle radians and a radius of radius radians. U32 Color can be retrieved from the function GUI:ColorConvertFloat4ToU32(). if colorOutline is not specified, then an outline will not be draw. Tip: You can set the alpha on colorFill to be 0 and specify an outline color with alpha > 0 to have only the outline drawn. Generally only 30 segments is needed to draw a circle that looks round. For performance reasons I would recommend not going above 30 segments.
  • Argus.addRectFilled(number x, number y, number z, number length, number width, number heading, U32 Color colorFill, U32 Color colorOutline, number outlineThickness = 1.0)
    • Draws a filled rectangle at world coordinates with length and width rotated around the center point x, y, z in the direction of heading. U32 Color can be retrieved from the function GUI:ColorConvertFloat4ToU32(). if colorOutline is not specified, then an outline will not be drawn. Tip: You can set the alpha on colorFill to be 0 and specify an outline color with alpha > 0 to have only the outline drawn. This function is commonly used for drawing frontal line aoes.
  • Argus.addDonutFilled(number x, number y, number z, number radiusInner, number radiusOuter, number segments, U32 Color colorFill, U32 Color colorOutline, number outlineThickness = 1.0)
    • Draws a filled torus aka donut at world coordinates with an inner radius or radiusInner and an outer radius of radiusOuter. U32 Color can be retrieved from the function GUI:ColorConvertFloat4ToU32(). if colorOutline is not specified, then an outline will not be drawn. Tip: You can set the alpha on colorFill to be 0 and specify an outline color with alpha > 0 to have only the outline drawn. For performance reasons I would recommend not going above 50 segments, 50 segments is usually enough even for extremely large tori/donuts.
  • Argus.addCrossFilled(number x, number y, number z, number length, number width, number heading, U32 Color colorFill, U32 Color colorOutline, number outlineThickness = 1.0)
    • Draws a filled rectangle at world coordinates with length and width rotated around the center point x, y, z in the direction of heading. U32 Color can be retrieved from the function GUI:ColorConvertFloat4ToU32(). if colorOutline is not specified, then an outline will not be drawn. Tip: You can set the alpha on colorFill to be 0 and specify an outline color with alpha > 0 to have only the outline drawn. This function is commonly used for drawing cross aoes (type 11).
  • Argus.addTimedCircleFilled(number timeout, number x, number y, number z, number radius, number segments, table rgbFill, number alphaMin, number alphaMax, number delay, number entityAttachID, U32 Color colorOutline, number outlineThickness = 1.0)
    • Adds a filled circle for specified time timeout in ms. Argument rgbfill is a table that consists of {r = 0, g = 0, b = 0}, replacing the values with your specified color from a range of 0 - 1. If entityAttachID is specified, the circle will be attached to the position of the specified entity id. Also will return a string uuid.
  • Argus.addTimedRectFilled(number timeout, number x, number y, number z, number length, number width, number heading, table rgbFill, number alphaMin, numberalphaMax, number delay, number entityAttachID, number targetAttachID, bool keepLength, U32 Color colorOutline, number outlineThickness = 1.0)
    • Adds a rectangle at position for timeout ms. Argument rgbfill is a table that consists of {r = 0, g = 0, b = 0}, replacing the values with your specified color from a range of 0 - 1. If entityAttachID is specified, the circle will be attached to the position of the specified entity id. If targetAttach is specified, the rectangle will be drawn from it's source position (either specified or attached to entity) and stopping at the position of targetAttach entity. If ``keepLength`` is ``true``, then the length won't be adjusted to the target, the length will stay constant. Also will return a string uuid.
  • Argus.addTimedConeFilled(number timeout, number x, number y, number z, number radius, number angle, number heading, number segments, table rgbFill, number alphaMin, number alphaMax, number delay, number entityAttachID, number targetAttachID, U32 Color colorOutline, number outlineThickness = 1.0)
    • Adds a cone at position for timeout ms. Argument rgbfill is a table that consists of {r = 0, g = 0, b = 0}, replacing the values with your specified color from a range of 0 - 1. If entityAttachID is specified, the circle will be attached to the position of the specified entity id. If targetAttachID is specified, the cone will be drawn from it's source position (either specified or attached to entity) and stopping at the position of targetAttach entity. Also will return a string uuid.
  • Argus.addTimedDonutFilled(number timeout, number x, number y, number z, number radiusInner, number radiusOuter, number segments, table rgbFill, number alphaMin, number alphaMax, number delay, number entityAttachID, U32 Color colorOutline, number outlineThickness = 1.0)
    • Adds a filled donut (torus) for specified time timeout in ms. Argument rgbfill is a table that consists of {r = 0, g = 0, b = 0}, replacing the values with your specified color from a range of 0 - 1. If entityAttachID is specified, the circle will be attached to the position of the specified entity id. Also will return a string uuid.
  • Argus.addTimedCrossFilled(number timeout, number x, number y, number z, number length, number width, number heading, table rgbFill, number alphaMin, number alphaMax, number delay, number entityAttachID, number targetAttachID, U32 Color colorOutline, number outlineThickness = 1.0)
    • Adds a cross at position for timeout ms. Argument rgbfill is a table that consists of {r = 0, g = 0, b = 0}, replacing the values with your specified color from a range of 0 - 1. If entityAttachID is specified, the circle will be attached to the position of the specified entity id. If targetAttachID is specified, the cross will be drawn from it's source position (either specified or attached to entity) and stopping at the position of targetAttach entity. Also will return a string uuid.
  • Argus.deleteTimedShape(string uuid)
    • Deletes timed draw with specified uuid.

Structures

  • castType Note: These are not guaranteed for every AOE. But generally, these are how AOEs are categorized in the game.
    • 2, 5
      • Circle AOE.
    • 3, 13
      • Directional Cone/arc AOE
    • 4, 12
      • Directional Line AOE
    • 6
      • Meteor mechanic (more damage the closer you are to the center), usually unavoidable
    • 8
      • Line AOE that's targeted to either a position, or specific entity. Argus will adjust the length and heading automatically.
    • 10
      • Donut AOE
    • 11
      • Cross AOE (new type to shadowbringers, example: eden 4 landslide)
  • table GroundAOE
    • number x
      • x position of AOE
    • number y
      • y position of AOE
    • number z
      • z position of AOE
    • number aoeType
      • Animation/omen type of AOE
    • number aoeLength
      • Length/radius in yalms of aoe
    • number aoeWidth
      • Width in yalms of aoe (0 for circles and cones etc)
    • string aoeName
      • Name of AOE
    • number aoeID
      • Unique identifier of AOE
    • number aoeCastType
      • AOE cast type/shape. See Cast Types (above) for more info.
    • number targetAttach
      • ID of entity that current aoe is attached to, if found. Value is nil otherwise.
  • table DirectionalAOE
    • number x
      • x position of AOE
    • number y
      • y position of AOE
    • number z
      • z position of AOE
    • number aoeType
      • Animation/omen type of AOE
    • number heading
      • Direction the AOE is facing.
    • number aoeLength
      • Length of AOE
    • number aoeWidth
      • Width of AOE, mostly used for Line AOES. 0 for cones and circles
    • string aoeName
      • Name of AOE
    • number aoeID
      • Unique identifier of AOE
    • number aoeCastType
      • AOE cast type/shape. See Cast Types (above) for more info.
    • number targetAttach
      • ID of entity that current aoe is attached to, if found. Value is nil otherwise.

Known Overhead Marker Types

Marker Type Name Sample Locations
1, 2, 3, 4 Prey Circle (orange) o6s, The Burn boss 2
7 Green Meteor t9n, t9s
8 Ghost Meteor t9n, t9s
9 Red Meteor t9n, t9s
10 Yellow Meteor t9n, t9s
13 Devour Flower t6n, t6s, Sohm Al boss 1
14 Prey Circle (blue) t6n, t6s, o7s
16 Teal Crystal Ultima Weapon Ultimate
17 Heavenly Laser (red) t8n, t8s, e1n
23 Red Pinwheel Sohm Al boss 2, Susano N/EX, e3n/s
28 Gravity Puddle e1n
30 Prey Sphere (orange) Dun Scaith boss 3, o7n/s
31 Prey Sphere (blue) t10
40 Earth Shaker Sephiron N/EX, o4s
50, 51, 52, 53 Sword Markers 1-4 Ravana N/EX, Twinning boss 1
55 Red Dorito Weeping City boss 2, Ridorana boss 1
57 Purple Spread Circle (large) Ravana N/EX, Shinryu EX
62 Stack Marker (bordered) o8n/s, Dun Scaith
70 Green Pinwheel Dun Scaith boss 1, o5n/s
75 Acceleration Bomb Weeping City boss 3, Susano N/EX, o4s
76 Purple Fire Circle (large) e2n/s
84 Thunder Tether (orange) Titania EX
87 Flare o4n/s, e2n/s
92 Prey (dark) Dun Scaith boss 3/4, Holminster Switch boss 3
93 Stack Marker (tank–no border) Dun Scaith boss 4, e4s
96 Orange Spread Circle (small) Hades N
97 Chain Tether (orange) The Vault boss 3, Shinryu N/EX
100 Stack Marker (bordered) o3s, Ridorana boss 3
101 Spread Bubble o3s, Byakko EX
110 Levinbolt Susano EX
118 Prey (dark) Bahamut Ultimate
120 Orange Spread Circle (large) Akadaemia Anyder
123 Scatter (animated Play symbol) Rabanastre boss 4
124 Turn Away (animated eye symbol) Rabanastre boss 4
126 Green Crystal Shinryu N/EX
131 Sword Meteor (Tsukuyomi) Tsukuyomi EX
135 Prey Sphere (blue) Akadaemia Anyder
138 Orange Spread Circle (large) Innocence N/EX, Orbonne boss 3
139 Purple Spread Circle (small) Ridorana boss 1, Hades N
142 Death From Above o10s
143 Death From Below o10s
145-152 Fundamental Synergy Square/Circle o12s
161 Stack Marker (bordered) Titania N/EX
169 Orange Spread Circle (small) o11n/s, e3n/s
171 Green Poison Circle Qitana Ravel
172 Reprobation Tether Innocence EX
174 Blue Pinwheel Sohm Al boss 2
185 Yellow Triangle (spread) e4s
186 Orange Square (stack) e4s
187 Blue Square (big spread) e4s
189 Purple Spread Circle (giant) TItania N/EX
191 Granite Gaol e4s
argus.1585994368.txt.gz · Last modified: 2020/04/04 11:59 by rikudou