Skip to content

Commit 862a01b

Browse files
authored
docs: Update Log Guide for 264 AbilityExtra line changes (#585)
Updates `netlog_defs.ts` and the Log Guide to incorporate `AbilityExtra` line changes added in OverlayPlugin/OverlayPlugin#425. Also fixes some minor lint errors in pre-existing Log Guide tables. cc: @xpdota for review.
1 parent 8e2ca8c commit 862a01b

File tree

4 files changed

+98
-93
lines changed

4 files changed

+98
-93
lines changed

docs/LogGuide.md

+82-78
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ for folks who want to write ACT triggers for ff14.
88

99
This guide was last updated for:
1010

11-
- [FF14](https://na.finalfantasyxiv.com/lodestone/special/patchnote_log/) Patch 6.58
12-
- [FFXIV Plugin](https://github.com/ravahn/FFXIV_ACT_Plugin/releases) Patch 2.7.0.1
13-
- [OverlayPlugin](https://github.com/OverlayPlugin/OverlayPlugin/releases) Patch 0.19.28
11+
- [FF14](https://na.finalfantasyxiv.com/lodestone/special/patchnote_log/) Patch 7.16
12+
- [FFXIV Plugin](https://github.com/ravahn/FFXIV_ACT_Plugin/releases) Patch 2.7.2.3
13+
- [OverlayPlugin](https://github.com/OverlayPlugin/OverlayPlugin/releases) Patch 0.19.43
1414

1515
## TOC
1616

@@ -1463,10 +1463,10 @@ When an actor dies, you will get 30-lines for buffs that were removed by it dyin
14631463

14641464
```log
14651465
Network Log Line Structure:
1466-
27|[timestamp]|[targetId]|[target]|[?]|[?]|[id]
1466+
27|[timestamp]|[targetId]|[target]|[?]|[?]|[id]|[data0]
14671467
14681468
Parsed Log Line Structure:
1469-
[timestamp] TargetIcon 1B:[targetId]:[target]:[?]:[?]:[id]
1469+
[timestamp] TargetIcon 1B:[targetId]:[target]:[?]:[?]:[id]:[data0]
14701470
```
14711471

14721472
#### Regexes
@@ -1509,61 +1509,61 @@ It seems likely this was implemented later and nobody wanted to break old conten
15091509

15101510
#### Head Marker IDs
15111511

1512-
ID | Name | Sample Locations | Consistent meaning?
1513-
--- | --- | --- | ---
1514-
000[1-2, 4] | Prey Circle (orange) | o6s, The Burn boss 2 | Yes
1515-
0007 | Green Meteor | t9n/s | N/A
1516-
0008 | Ghost Meteor | t9n/s | N/A
1517-
0009 | Red Meteor | t9n/s | N/A
1518-
000A | Yellow Meteor | t9n/s | N/A
1519-
000D | Devour Flower | t6n/s, Sohm Al boss 1 | Yes
1520-
000E | Prey Circle (blue) | t6n/s, o7s | No
1521-
0010 | Teal Crystal | Ultima Weapon Ultimate |N/A
1522-
0011 | Heavenly Laser (red) | t8n/s, e1n | No
1523-
0017 | Red Pinwheel | Sohm Al boss 2, Susano N/EX, e3n/s | No
1524-
0028 | Earth Shaker | Sephirot N/EX, o4s | Yes
1525-
001C | Gravity Puddle | e1n | N/A
1526-
001E | Prey Sphere (orange) | Dun Scaith boss 3, o7n/s | No
1527-
001F | Prey Sphere (blue) | t10 | N/A
1528-
003[2-5] | Sword Markers 1-4 | Ravana N/EX, Twinning boss 1 | N/A
1529-
0037 | Red Dorito | Weeping City boss 2, Ridorana boss 1 | Yes
1530-
0039 | Purple Spread Circle (large) | Ravana N/EX, Shinryu EX | Yes
1531-
003E | Stack Marker (bordered) | o8n/s, Dun Scaith | Yes
1532-
0046 | Green Pinwheel | Dun Scaith boss 1, o5n/s | Yes
1533-
0048 | Stack Marker | Sephirot | Yes
1534-
004B | Acceleration Bomb | Weeping City boss 3, Susano N/EX, o4s | Yes
1535-
004C | Purple Fire Circle (large) | e2n/s | Yes
1536-
0054 | Thunder Tether (orange) | Titania EX | N/A
1537-
0057 | Flare | o4n/s, e2n/s | Yes
1538-
005C | Prey (dark) | Dun Scaith boss 3/4, Holminster Switch boss 3 | No
1539-
005D | Stack Marker (tank--no border) | Dun Scaith boss 4, e4s | Yes
1540-
0060 | Orange Spread Circle (small) | Hades N | Yes
1541-
0061 | Chain Tether (orange) | The Vault boss 3, Shinryu N/EX | Yes
1542-
0064 | Stack Marker (bordered) | o3s, Ridorana boss 3 | Yes
1543-
0065 | Spread Bubble | o3s, Byakko EX | N/A
1544-
006E | Levinbolt | Susano EX | N/A
1545-
0076 | Prey (dark) | Bahamut Ultimate | N/A
1546-
0078 | Orange Spread Circle (large) | Akadaemia Anyder | Yes
1547-
007B | Scatter (animated Play symbol) | Rabanastre boss 4 | N/A
1548-
007C | Turn Away (animated eye symbol) | Rabanastre boss 4 | N/A
1549-
007E | Green Crystal | Shinryu N/EX | No
1550-
0083 | Sword Meteor (Tsukuyomi) | Tsukuyomi EX | N/A
1551-
0087 | Prey Sphere (blue) | Akadaemia Anyder | N/A
1552-
008A | Orange Spread Circle (large) | Innocence N/EX, Orbonne boss 3 | Yes
1553-
008B | Purple Spread Circle (small) | Ridorana boss 1, Hades N | Yes
1554-
008E | Death From Above | o10s | N/A
1555-
008F | Death From Below | o10s | N/A
1556-
009[1-8] | Fundamental Synergy Square/Circle | o12s | N/A
1557-
00A1 | Stack Marker (bordered) | Titania N/EX | Yes
1558-
00A9 | Orange Spread Circle (small) | o11n/s, e3n/s | Yes
1559-
00AB | Green Poison Circle | Qitana Ravel | N/A
1560-
00AC | Reprobation Tether | Innocence EX | N/A
1561-
00AE | Blue Pinwheel | Sohm Al boss 2 | N/A
1562-
00B9 | Yellow Triangle (spread) | e4s | N/A
1563-
00BA | Orange Square (stack) | e4s |N/A
1564-
00BB | Blue Square (big spread) | e4s |N/A
1565-
00BD | Purple Spread Circle (giant) | TItania N/EX | Yes
1566-
00BF | Granite Gaol | e4s | N/A
1512+
| ID | Name | Sample Locations | Consistent meaning? |
1513+
| --- | --- | --- | --- |
1514+
| 000[1-2, 4] | Prey Circle (orange) | o6s, The Burn boss 2 | Yes |
1515+
| 0007 | Green Meteor | t9n/s | N/A |
1516+
| 0008 | Ghost Meteor | t9n/s | N/A |
1517+
| 0009 | Red Meteor | t9n/s | N/A |
1518+
| 000A | Yellow Meteor | t9n/s | N/A |
1519+
| 000D | Devour Flower | t6n/s, Sohm Al boss 1 | Yes |
1520+
| 000E | Prey Circle (blue) | t6n/s, o7s | No |
1521+
| 0010 | Teal Crystal | Ultima Weapon Ultimate |N/A |
1522+
| 0011 | Heavenly Laser (red) | t8n/s, e1n | No |
1523+
| 0017 | Red Pinwheel | Sohm Al boss 2, Susano N/EX, e3n/s | No |
1524+
| 0028 | Earth Shaker | Sephirot N/EX, o4s | Yes |
1525+
| 001C | Gravity Puddle | e1n | N/A |
1526+
| 001E | Prey Sphere (orange) | Dun Scaith boss 3, o7n/s | No |
1527+
| 001F | Prey Sphere (blue) | t10 | N/A |
1528+
| 003[2-5] | Sword Markers 1-4 | Ravana N/EX, Twinning boss 1 | N/A |
1529+
| 0037 | Red Dorito | Weeping City boss 2, Ridorana boss 1 | Yes |
1530+
| 0039 | Purple Spread Circle (large) | Ravana N/EX, Shinryu EX | Yes |
1531+
| 003E | Stack Marker (bordered) | o8n/s, Dun Scaith | Yes |
1532+
| 0046 | Green Pinwheel | Dun Scaith boss 1, o5n/s | Yes |
1533+
| 0048 | Stack Marker | Sephirot | Yes |
1534+
| 004B | Acceleration Bomb | Weeping City boss 3, Susano N/EX, o4s | Yes |
1535+
| 004C | Purple Fire Circle (large) | e2n/s | Yes |
1536+
| 0054 | Thunder Tether (orange) | Titania EX | N/A |
1537+
| 0057 | Flare | o4n/s, e2n/s | Yes |
1538+
| 005C | Prey (dark) | Dun Scaith boss 3/4, Holminster Switch boss 3 | No |
1539+
| 005D | Stack Marker (tank--no border) | Dun Scaith boss 4, e4s | Yes |
1540+
| 0060 | Orange Spread Circle (small) | Hades N | Yes |
1541+
| 0061 | Chain Tether (orange) | The Vault boss 3, Shinryu N/EX | Yes |
1542+
| 0064 | Stack Marker (bordered) | o3s, Ridorana boss 3 | Yes |
1543+
| 0065 | Spread Bubble | o3s, Byakko EX | N/A |
1544+
| 006E | Levinbolt | Susano EX | N/A |
1545+
| 0076 | Prey (dark) | Bahamut Ultimate | N/A |
1546+
| 0078 | Orange Spread Circle (large) | Akadaemia Anyder | Yes |
1547+
| 007B | Scatter (animated Play symbol) | Rabanastre boss 4 | N/A |
1548+
| 007C | Turn Away (animated eye symbol) | Rabanastre boss 4 | N/A |
1549+
| 007E | Green Crystal | Shinryu N/EX | No |
1550+
| 0083 | Sword Meteor (Tsukuyomi) | Tsukuyomi EX | N/A |
1551+
| 0087 | Prey Sphere (blue) | Akadaemia Anyder | N/A |
1552+
| 008A | Orange Spread Circle (large) | Innocence N/EX, Orbonne boss 3 | Yes |
1553+
| 008B | Purple Spread Circle (small) | Ridorana boss 1, Hades N | Yes |
1554+
| 008E | Death From Above | o10s | N/A |
1555+
| 008F | Death From Below | o10s | N/A |
1556+
| 009[1-8] | Fundamental Synergy Square/Circle | o12s | N/A |
1557+
| 00A1 | Stack Marker (bordered) | Titania N/EX | Yes |
1558+
| 00A9 | Orange Spread Circle (small) | o11n/s, e3n/s | Yes |
1559+
| 00AB | Green Poison Circle | Qitana Ravel | N/A |
1560+
| 00AC | Reprobation Tether | Innocence EX | N/A |
1561+
| 00AE | Blue Pinwheel | Sohm Al boss 2 | N/A |
1562+
| 00B9 | Yellow Triangle (spread) | e4s | N/A |
1563+
| 00BA | Orange Square (stack) | e4s |N/A |
1564+
| 00BB | Blue Square (big spread) | e4s |N/A |
1565+
| 00BD | Purple Spread Circle (giant) | TItania N/EX | Yes |
1566+
| 00BF | Granite Gaol | e4s | N/A |
15671567

15681568
#### Offset Headmarkers
15691569

@@ -2428,12 +2428,12 @@ Parsed Log Line Examples:
24282428

24292429
The `id` parameter is an id into the [LogMessage table](https://github.com/xivapi/ffxiv-datamining/blob/master/csv/LogMessage.csv).
24302430

2431-
id (hex) | Link | Shortened Message
2432-
--- | --- | ---
2433-
0x2EE | [link](https://xivapi.com/LogMessage/750?pretty=true) | You obtain (an item)
2434-
0x7DC | [link](https://xivapi.com/LogMessage/2012?pretty=true) | will be sealed off in X seconds
2435-
0x7DD | [link](https://xivapi.com/LogMessage/2013?pretty=true) | is sealed off
2436-
0x7DE | [link](https://xivapi.com/LogMessage/2014?pretty=true) | is no longer sealed
2431+
| id (hex) | Link | Shortened Message |
2432+
| --- | --- | --- |
2433+
| 0x2EE | [link](https://xivapi.com/LogMessage/750?pretty=true) | You obtain (an item) |
2434+
| 0x7DC | [link](https://xivapi.com/LogMessage/2012?pretty=true) | will be sealed off in X seconds |
2435+
| 0x7DD | [link](https://xivapi.com/LogMessage/2013?pretty=true) | is sealed off |
2436+
| 0x7DE | [link](https://xivapi.com/LogMessage/2014?pretty=true) | is no longer sealed |
24372437

24382438
The log message itself determines the other parameters.
24392439
It seems that `IntegerParameter(1)` in the log message corresponds to `param1`
@@ -3040,7 +3040,7 @@ This line is always output for a given Ability hit, regardless of if that Abilit
30403040
a corresponding StartsUsing line.
30413041

30423042
If the ability has no target, or is single-target, the `dataFlag` value will be `0`,
3043-
and the `x`/`y`/`z`/`heading` fields will be blank.
3043+
and the `x`/`y`/`z` fields will be blank.
30443044

30453045
If the ability targets the ground, for example `Asylum`/`Sacred Soil`/caster LB3, the
30463046
`dataFlag` value will be `1` and the `x`/`y`/`z`/`heading` fields will correspond to the
@@ -3051,12 +3051,16 @@ source actor's position, while `heading` is the direction that the ability is ca
30513051
towards.
30523052

30533053
If there is some sort of error related to parsing this data from the network packet,
3054-
`dataFlag` will be `256`, and the `x`/`y`/`z`/`heading` fields will be blank.
3054+
`dataFlag` will be `256`, and the `x`/`y`/`z`/`heading`/`animationTargetId` fields will be blank.
30553055

30563056
`globalEffectCounter` is equivalent to `sequence` field in
30573057
[NetworkAbility](#line-21-0x15-networkability) and
30583058
[NetworkAOEAbility](#line-22-0x16-networkaoeability).
30593059

3060+
`animationTargetId` is the ID of the entity serving as location basis for the ability.
3061+
For example, Sage's Dyskrasia will have the Sage as the `animationTargetId`, as the AoE is centered on the Sage;
3062+
but Sage's Phlegma will have the primary target as the `animationTargetId`, as the AoE is centered on the selected target.
3063+
30603064
Note that unlike [StartsUsingExtra](#line-263-0x107-startsusingextra), you do not need
30613065
to worry about whether or not there is an actor target, as this represents the final
30623066
snapshotted location of the Ability.
@@ -3067,34 +3071,34 @@ snapshotted location of the Ability.
30673071

30683072
```log
30693073
Network Log Line Structure:
3070-
264|[timestamp]|[sourceId]|[id]|[globalEffectCounter]|[dataFlag]|[x]|[y]|[z]|[heading]
3074+
264|[timestamp]|[sourceId]|[id]|[globalEffectCounter]|[dataFlag]|[x]|[y]|[z]|[heading]|[animationTargetId]
30713075
30723076
Parsed Log Line Structure:
3073-
[timestamp] 264 108:[sourceId]:[id]:[globalEffectCounter]:[dataFlag]:[x]:[y]:[z]:[heading]
3077+
[timestamp] 264 108:[sourceId]:[id]:[globalEffectCounter]:[dataFlag]:[x]:[y]:[z]:[heading]:[animationTargetId]
30743078
```
30753079

30763080
#### Regexes
30773081

30783082
```log
30793083
Network Log Line Regex:
3080-
^(?<type>264)\|(?<timestamp>[^|]*)\|(?<sourceId>[^|]*)\|(?<id>[^|]*)\|(?<globalEffectCounter>[^|]*)\|(?<dataFlag>[^|]*)\|(?<x>[^|]*)\|(?<y>[^|]*)\|(?<z>[^|]*)\|(?<heading>[^|]*)\|
3084+
^(?<type>264)\|(?<timestamp>[^|]*)\|(?<sourceId>[^|]*)\|(?<id>[^|]*)\|(?<globalEffectCounter>[^|]*)\|(?<dataFlag>[^|]*)\|(?<x>[^|]*)\|(?<y>[^|]*)\|(?<z>[^|]*)\|(?<heading>[^|]*)\|(?<animationTargetId>[^|]*)\|
30813085
30823086
Parsed Log Line Regex:
3083-
(?<timestamp>^.{14}) 264 (?<type>108):(?<sourceId>[^:]*):(?<id>[^:]*):(?<globalEffectCounter>[^:]*):(?<dataFlag>[^:]*):(?<x>[^:]*):(?<y>[^:]*):(?<z>[^:]*):(?<heading>[^:]*)(?:$|:)
3087+
(?<timestamp>^.{14}) 264 (?<type>108):(?<sourceId>[^:]*):(?<id>[^:]*):(?<globalEffectCounter>[^:]*):(?<dataFlag>[^:]*):(?<x>[^:]*):(?<y>[^:]*):(?<z>[^:]*):(?<heading>[^:]*):(?<animationTargetId>[^:]*)(?:$|:)
30843088
```
30853089

30863090
#### Examples
30873091

30883092
```log
30893093
Network Log Line Examples:
3090-
264|2023-11-02T20:53:56.6450000-04:00|10001234|0005|000003EF|0|||||9f7371fa0e3a42c8
3091-
264|2023-11-02T21:39:20.0910000-04:00|10001234|0085|0000533E|1|0.000|0.000|0.000|2.920|2e9ae29c1b65f930
3092-
264|2023-11-02T21:39:15.6790000-04:00|40000D6E|8C45|000052DD|1|-14.344|748.558|130.009|2.483|f6b3ffa6c97f0540
3094+
264|2023-11-04T17:53:45.2940000+01:00|4000619F|8BC0|00000664|0||||3.141|1234ABCD|fc680d77fb5897f1
3095+
264|2023-11-04T17:53:45.2940000+01:00|4000619E|8BC0|00000663|1|0.000|0.000|0.000|-1.589|1234ABCD|711909381311a052
3096+
264|2023-11-04T17:53:45.2940000+01:00|4000619D|8BC0|00000662|1|1.000|2.000|3.000|1.570|1234ABCD|7e82907c710ee781
30933097
30943098
Parsed Log Line Examples:
3095-
[20:53:56.645] 264 108:10001234:0005:000003EF:0::::
3096-
[21:39:20.091] 264 108:10001234:0085:0000533E:1:0.000:0.000:0.000:2.920
3097-
[21:39:15.679] 264 108:40000D6E:8C45:000052DD:1:-14.344:748.558:130.009:2.483
3099+
[17:53:45.294] 264 108:4000619F:8BC0:00000664:0::::3.141:1234ABCD
3100+
[17:53:45.294] 264 108:4000619E:8BC0:00000663:1:0.000:0.000:0.000:-1.589:1234ABCD
3101+
[17:53:45.294] 264 108:4000619D:8BC0:00000662:1:1.000:2.000:3.000:1.570:1234ABCD
30983102
```
30993103

31003104
<!-- AUTO-GENERATED-CONTENT:END (logLines:type=AbilityExtra&lang=en-US) -->

resources/netlog_defs.ts

+4-5
Original file line numberDiff line numberDiff line change
@@ -492,8 +492,7 @@ const latestLogDefinitions = {
492492
},
493493
blankFields: [6, 47, 48],
494494
canAnonymize: true,
495-
// @TODO: Set this back to `undefined` after KR/CN have access to the new fields
496-
firstOptionalField: 47,
495+
firstOptionalField: undefined,
497496
analysisOptions: {
498497
include: 'filter',
499498
filters: { sourceId: '4.{7}' }, // NPC abilities only
@@ -555,8 +554,7 @@ const latestLogDefinitions = {
555554
},
556555
blankFields: [6, 47, 48],
557556
canAnonymize: true,
558-
// @TODO: Set this back to `undefined` after KR/CN have access to the new fields
559-
firstOptionalField: 47,
557+
firstOptionalField: undefined,
560558
analysisOptions: {
561559
include: 'filter',
562560
filters: { sourceId: '4.{7}' }, // NPC abilities only
@@ -1410,8 +1408,9 @@ const latestLogDefinitions = {
14101408
y: 7,
14111409
z: 8,
14121410
heading: 9,
1411+
animationTargetId: 10,
14131412
},
1414-
blankFields: [6],
1413+
blankFields: [6, 7, 8],
14151414
playerIds: {
14161415
2: null,
14171416
},

test/helper/example_log_lines_test_data.ts

+8-6
Original file line numberDiff line numberDiff line change
@@ -673,13 +673,15 @@ const lineTests: LineTests = {
673673
lineToTest: exampleLogLines['AbilityExtra'].examples.en[2],
674674
expectedValues: {
675675
type: '264',
676-
sourceId: '40000D6E',
677-
id: '8C45',
678-
globalEffectCounter: '000052DD',
676+
sourceId: '4000619D',
677+
id: '8BC0',
678+
globalEffectCounter: '00000662',
679679
dataFlag: '1',
680-
x: '-14.344',
681-
y: '748.558',
682-
z: '130.009',
680+
x: '1.000',
681+
y: '2.000',
682+
z: '3.000',
683+
heading: '1.570',
684+
animationTargetId: '1234ABCD',
683685
},
684686
},
685687
ContentFinderSettings: {

util/example_log_lines.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -472,13 +472,13 @@ const exampleLogLines = {
472472
AbilityExtra: {
473473
examples: {
474474
en: [
475-
// Case 1, because there was no ground target info and no heading,
475+
// Case 1, because there was no ground target info,
476476
// the ability target info is blank
477-
'264|2023-11-02T20:53:56.6450000-04:00|10001234|0005|000003EF|0|||||9f7371fa0e3a42c8',
477+
'264|2023-11-04T17:53:45.2940000+01:00|4000619F|8BC0|00000664|0||||3.141|1234ABCD|fc680d77fb5897f1',
478478
// Case 2, because the ability has a heading, `0` gets sent for x/y/z with a proper heading
479-
'264|2023-11-02T21:39:20.0910000-04:00|10001234|0085|0000533E|1|0.000|0.000|0.000|2.920|2e9ae29c1b65f930',
479+
'264|2023-11-04T17:53:45.2940000+01:00|4000619E|8BC0|00000663|1|0.000|0.000|0.000|-1.589|1234ABCD|711909381311a052',
480480
// Case 3, valid position and heading
481-
'264|2023-11-02T21:39:15.6790000-04:00|40000D6E|8C45|000052DD|1|-14.344|748.558|130.009|2.483|f6b3ffa6c97f0540',
481+
'264|2023-11-04T17:53:45.2940000+01:00|4000619D|8BC0|00000662|1|1.000|2.000|3.000|1.570|1234ABCD|7e82907c710ee781',
482482
],
483483
},
484484
},

0 commit comments

Comments
 (0)