Skip to content

Commit

Permalink
raidboss/oopsy: update actor control wipe in code/docs (quisquous#4691)
Browse files Browse the repository at this point in the history
In 6.2, the "fade in" actor control changed from
`40000010` to `4000000F`.  This commit changes code and
docs, and will follow up with a timeline change after.
  • Loading branch information
quisquous authored Aug 24, 2022
1 parent 6d5356d commit 0063b0d
Show file tree
Hide file tree
Showing 12 changed files with 28 additions and 22 deletions.
12 changes: 7 additions & 5 deletions docs/LogGuide.md
Original file line number Diff line number Diff line change
Expand Up @@ -1507,12 +1507,12 @@ ACT Log Line Regex:

```log
Network Log Line Examples:
33|2021-04-26T17:23:28.6780000-04:00|80034E6C|40000010|B5D|00|00|00|f777621829447c53c82c9a24aa25348f
33|2021-04-26T17:23:28.6780000-04:00|80034E6C|4000000F|B5D|00|00|00|f777621829447c53c82c9a24aa25348f
33|2021-04-26T14:17:31.6980000-04:00|80034E5B|8000000C|16|FFFFFFFF|00|00|b543f3c5c715e93d9de2aa65b8fe83ad
33|2021-04-26T14:18:39.0120000-04:00|80034E5B|40000007|00|01|00|00|7a2b827bbc7a58ecc0c5edbdf14a2c14
ACT Log Line Examples:
[17:23:28.678] Director 21:80034E6C:40000010:B5D:00:00:00
[17:23:28.678] Director 21:80034E6C:4000000F:B5D:00:00:00
[14:17:31.698] Director 21:80034E5B:8000000C:16:FFFFFFFF:00:00
[14:18:39.012] Director 21:80034E5B:40000007:00:01:00:00
```
Expand All @@ -1527,7 +1527,9 @@ For example, if `instance` is `80034E6C` then `0x4E6C` is the `InstanceContentTy
`0x4E6C` is 20076 in decimal, and corresponds to Diamond Weapon (Savage):
<https://xivapi.com/InstanceContent/20076?pretty=true>.

Wipes on most raids and primals these days can be detected via this regex:
Wipes on most raids and primals these days can be detected via this regex in 6.2:
`21:........:4000000F:`.
Prior to 6.2, you can use this regex:
`21:........:40000010:`.
However, this does not occur on some older fights,
such as coil turns where there is a zone seal.
Expand All @@ -1540,8 +1542,8 @@ Known types:
- Charge boss limit break: `21:content:8000000C:value1:value2:00:00`
- Music change: `21:content:80000001:value:00:00:00`
- Fade out: `21:content:40000005:00:00:00:00` (wipe)
- Fade in: `21:content:40000010:00:00:00:00` (always paired with barrier up)
- Barrier up: `21:content:40000012:00:00:00:00` (always comes after fade in)
- Fade in: `21:content:4000000F:00:00:00:00` (always paired with barrier up)
- Barrier up: `21:content:40000011:00:00:00:00` (always comes after fade in)
- Victory: `21:zone:40000003:00:00:00:00`

Note: cactbot uses "fade in" as the wipe trigger,
Expand Down
6 changes: 3 additions & 3 deletions docs/TimelineGuide.md
Original file line number Diff line number Diff line change
Expand Up @@ -875,7 +875,7 @@ In general, most timelines should include some boilerplate at the top like this:
hideall "--Reset--"
hideall "--sync--"

0.0 "--Reset--" sync / 21:........:40000010:/ window 10000 jump 0
0.0 "--Reset--" sync / 21:........:4000000F:/ window 10000 jump 0

0 "Start"
0.0 "--sync--" sync /:Engage!/ window 0,1
Expand All @@ -891,7 +891,7 @@ There can be anything in the text, it is just called `--sync--` for convenience.

It's good practice to have a Reset line to stop the timeline when there's a wipe.
On fights where the entire zone resets (e.g. all of omegascape, a4s, a8s, a12s, t9, t13),
`sync / 21:........:40000010:/` is a good sync to use.
`sync / 21:........:4000000F:/` is a good sync to use.
On fights with zones that seal and unseal, (e.g. a1s, t1-8)
you should use the zone sealing message itself to reset.

Expand Down Expand Up @@ -982,7 +982,7 @@ loops are on less frequent abilities just to be more careful.
hideall "--Reset--"
hideall "--sync--"

0.0 "--Reset--" sync / 21:........:40000010:/ window 10000 jump 0
0.0 "--Reset--" sync / 21:........:4000000F:/ window 10000 jump 0

### Phase 1: skewers and stuns
0 "Start"
Expand Down
6 changes: 3 additions & 3 deletions docs/zh-CN/TimelineGuide.md
Original file line number Diff line number Diff line change
Expand Up @@ -730,7 +730,7 @@ python util/timeline_adjust.py --file=ui/raidboss/data/timelines/cape_westwind.t
hideall "--Reset--"
hideall "--sync--"

0.0 "--Reset--" sync / 21:........:40000010:/ window 10000 jump 0
0.0 "--Reset--" sync / 21:........:4000000F:/ window 10000 jump 0

0 "Start"
0.0 "--sync--" sync /:Engage!/ window 0,1
Expand All @@ -741,7 +741,7 @@ hideall "--sync--"

`hideall` 命令可以隐藏某一命令的执行信息,因此玩家不会看到 `--sync--` 的执行信息,但这不意味着时间轴本身没有执行这些同步命令。`hideall` 后面的文本内容可以是任意命令名,这里只是以 `--sync--` 作为例子进行说明。

当战斗过程存在转阶段时,最好使用重置时间轴来停止之前的时间轴。在战斗过程中存在场地转换的副本中 (例如欧米茄系列, a4s, a8s, a12s, t9, t13),`sync / 21:........:40000010:/` 是一个相当好用的同步命令。在进入战斗后会封锁战斗区域的副本 (例如a1s, t1-8),则应使用区域封锁这条消息来进行时间轴重置。
当战斗过程存在转阶段时,最好使用重置时间轴来停止之前的时间轴。在战斗过程中存在场地转换的副本中 (例如欧米茄系列, a4s, a8s, a12s, t9, t13),`sync / 21:........:4000000F:/` 是一个相当好用的同步命令。在进入战斗后会封锁战斗区域的副本 (例如a1s, t1-8),则应使用区域封锁这条消息来进行时间轴重置。
您的时间轴文件抬头应该设置一句与“开始战斗!”同步的命令以开启战斗同步,同时保持与战斗倒计时同步。如果boss的第一个技能在战斗开始后很长一段时候后才会使用,那么您应该把它也加入时间轴文件以保证时间轴正常启动。

Expand Down Expand Up @@ -814,7 +814,7 @@ hideall "--sync--"
hideall "--Reset--"
hideall "--sync--"

0.0 "--Reset--" sync / 21:........:40000010:/ window 10000 jump 0
0.0 "--Reset--" sync / 21:........:400000)F:/ window 10000 jump 0

### Phase 1: skewers and stuns
0 "Start"
Expand Down
4 changes: 2 additions & 2 deletions test/unittests/netregex_test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -348,7 +348,7 @@ describe('netregex tests', () => {
});
it('network6D', () => {
const lines = [
'33|2020-05-13T19:57:07.1320000-07:00|80034E37|40000010|A91|01|02|03|2f54812b15aac21ba1c2f22b477023a9',
'33|2020-05-13T19:57:07.1320000-07:00|80034E37|4000000F|A91|01|02|03|2f54812b15aac21ba1c2f22b477023a9',
'33|2020-03-10T18:19:59.4560000-07:00|80030049|80000001|2EC|00|00|00|1d4cd6ed286bc0a563c2508d4488dc75',
'33|2020-03-10T23:57:06.1520000-04:00|8003758C|40000001|1518|00|00|00|b0a350a0c04f38c03cb040655e901705',
] as const;
Expand All @@ -357,7 +357,7 @@ describe('netregex tests', () => {
const matches = lines[0].match(NetRegexes.network6d())?.groups;
assert.equal(matches?.type, '33');
assert.equal(matches?.instance, '80034E37');
assert.equal(matches?.command, '40000010');
assert.equal(matches?.command, '4000000F');
assert.equal(matches?.data0, 'A91');
assert.equal(matches?.data1, '01');
assert.equal(matches?.data2, '02');
Expand Down
2 changes: 1 addition & 1 deletion ui/jobs/event_emitter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ export class JobsEventEmitter extends EventEmitter<EventMap> {
}
case logDefinitions.ActorControl.type: {
const matches = normalizeLogLine(ev.line, logDefinitions.ActorControl.fields);
if (matches.command === '40000010')
if (matches.command === '40000010' || matches.command === '4000000F')
this.emit('battle/wipe');
break;
}
Expand Down
8 changes: 6 additions & 2 deletions ui/oopsyraidsy/damage_tracker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@ import {
import { OopsyOptions } from './oopsy_options';
import { PlayerStateTracker } from './player_state_tracker';

const actorControlFadeInCommand = '40000010';
const actorControlFadeInCommandPre62 = '40000010';
const actorControlFadeInCommand = '4000000F';

const partyWipeText = {
en: 'Party Wipe',
Expand Down Expand Up @@ -275,7 +276,10 @@ export class DamageTracker {
this.playerStateTracker.OnHoTDoT(line, splitLine);
break;
case logDefinitions.ActorControl.type:
if (splitLine[logDefinitions.ActorControl.fields.command] === actorControlFadeInCommand) {
if (
splitLine[logDefinitions.ActorControl.fields.command] === actorControlFadeInCommand ||
splitLine[logDefinitions.ActorControl.fields.command] === actorControlFadeInCommandPre62
) {
this.Wipe(this.lastTimestamp);
this.playerStateTracker.OnWipe(line, splitLine);
}
Expand Down
2 changes: 1 addition & 1 deletion ui/pullcounter/pullcounter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ class PullCounter {
private bosses: Boss[] = [];
private resetRegex = NetRegexes.echo({ line: '.*pullcounter reset.*?' });
private wipeEndRegex = NetRegexes.echo({ line: 'end' });
private wipeFadeInRegex = NetRegexes.network6d({ command: '40000010' });
private wipeFadeInRegex = NetRegexes.network6d({ command: ['40000010', '4000000F'] });
private countdownEngageRegex: RegExp;
private pullCounts: { [bossId: string]: number } = {};

Expand Down
2 changes: 1 addition & 1 deletion ui/raidboss/emulator/EmulatorCommon.ts
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ export default class EmulatorCommon {
static engageRegexes = LocaleNetRegex.countdownEngage;
static countdownRegexes = LocaleNetRegex.countdownStart;
static unsealRegexes = LocaleNetRegex.areaUnseal;
static wipeRegex = NetRegexes.network6d({ command: '40000010' });
static wipeRegex = NetRegexes.network6d({ command: ['40000010', '4000000F'] });
static winRegex = NetRegexes.network6d({ command: '40000003' });
static cactbotWipeRegex = NetRegexes.echo({ line: 'cactbot wipe.*?' });
}
2 changes: 1 addition & 1 deletion ui/raidboss/popup-text.ts
Original file line number Diff line number Diff line change
Expand Up @@ -427,7 +427,7 @@ export interface TriggerHelper {

const wipeCactbotEcho = NetRegexes.echo({ line: 'cactbot wipe.*?' });
const wipeEndEcho = NetRegexes.echo({ line: 'end' });
const wipeFadeIn = NetRegexes.network6d({ command: '40000010' });
const wipeFadeIn = NetRegexes.network6d({ command: ['40000010', '4000000F'] });

const isWipe = (line: string): boolean => {
if (
Expand Down
2 changes: 1 addition & 1 deletion ui/raidboss/timeline.ts
Original file line number Diff line number Diff line change
Expand Up @@ -732,7 +732,7 @@ export class TimelineController {

// Used to suppress any Engage! if there's a wipe between /countdown and Engage!.
this.suppressNextEngage = false;
this.wipeRegex = NetRegexes.network6d({ command: '40000010' });
this.wipeRegex = NetRegexes.network6d({ command: ['40000010', '4000000F'] });
}

public SetPopupTextInterface(popupText: PopupTextGenerator): void {
Expand Down
2 changes: 1 addition & 1 deletion util/gen_log_guide.ts
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,7 @@ const lineDocs: LineDocs = {
},
examples: {
'en-US': [
'33|2021-04-26T17:23:28.6780000-04:00|80034E6C|40000010|B5D|00|00|00|f777621829447c53c82c9a24aa25348f',
'33|2021-04-26T17:23:28.6780000-04:00|80034E6C|4000000F|B5D|00|00|00|f777621829447c53c82c9a24aa25348f',
'33|2021-04-26T14:17:31.6980000-04:00|80034E5B|8000000C|16|FFFFFFFF|00|00|b543f3c5c715e93d9de2aa65b8fe83ad',
'33|2021-04-26T14:18:39.0120000-04:00|80034E5B|40000007|00|01|00|00|7a2b827bbc7a58ecc0c5edbdf14a2c14',
],
Expand Down
2 changes: 1 addition & 1 deletion util/logtools/encounter_tools.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ export class EncounterFinder {
changeZone: NetRegexes.changeZone(),
cactbotWipe: NetRegexes.echo({ line: 'cactbot wipe.*?' }),
win: NetRegexes.network6d({ command: '40000003' }),
wipe: NetRegexes.network6d({ command: '40000010' }),
wipe: NetRegexes.network6d({ command: ['40000010', '4000000F'] }),
commence: NetRegexes.network6d({ command: '4000000[16]' }),
playerAttackingMob: NetRegexes.ability({ sourceId: '1.{7}', targetId: '4.{7}' }),
mobAttackingPlayer: NetRegexes.ability({ sourceId: '4.{7}', targetId: '1.{7}' }),
Expand Down

0 comments on commit 0063b0d

Please sign in to comment.