forked from quisquous/cactbot
-
Notifications
You must be signed in to change notification settings - Fork 36
/
p4n.ts
175 lines (171 loc) · 4.91 KB
/
p4n.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
import NetRegexes from '../../../../../resources/netregexes';
import ZoneId from '../../../../../resources/zone_id';
import { OopsyData } from '../../../../../types/data';
import { OopsyTriggerSet } from '../../../../../types/oopsy';
// TODO: three stacks of Thrice-come Ruin (9E2) from orbs
// should this give Doom? it appears maybe it's just instant death?
// TODO: not having your orb popped?
export type Data = OopsyData;
const triggerSet: OopsyTriggerSet<Data> = {
zoneId: ZoneId.AsphodelosTheFourthCircle,
damageWarn: {
'P4N Hell Skewer': '6A4F', // targeted line aoe with short telegraph
'P4N Shifting Strike': '6A4E', // dash to wall and ~170 cleave
},
shareWarn: {
'P4N Acid Mekhane': '6A38', // green Acid Pinax spread
},
shareFail: {
'P4N Elegant Evisceration': '6A50', // circular tankbuster cleave
},
soloFail: {
'P4N Lava Mekhane': '6A39', // red Lava stack
},
triggers: [
{
id: 'P4N Tower Burst No Tank',
type: 'Ability',
netRegex: NetRegexes.ability({ id: '6A44' }),
condition: (data, matches) => data.party.isTank(matches.target),
mistake: (_data, matches) => {
return {
type: 'fail',
blame: matches.target,
reportId: matches.targetId,
text: {
en: 'Tank Tower',
de: 'Tank-Turm',
fr: 'Tour Tank',
cn: '坦克塔',
ko: '탱커 장판',
},
};
},
},
{
id: 'P4N Tower Burst No Healer',
type: 'Ability',
netRegex: NetRegexes.ability({ id: '6A45' }),
condition: (data, matches) => data.party.isHealer(matches.target),
mistake: (_data, matches) => {
return {
type: 'fail',
blame: matches.target,
reportId: matches.targetId,
text: {
en: 'Healer Tower',
de: 'Heiler-Turm',
fr: 'Tour Healer',
cn: '治疗塔',
ko: '힐러 장판',
},
};
},
},
{
id: 'P4N Tower Burst No DPS',
type: 'Ability',
netRegex: NetRegexes.ability({ id: '6A46' }),
condition: (data, matches) => data.party.isDPS(matches.target),
mistake: (_data, matches) => {
return {
type: 'fail',
blame: matches.target,
reportId: matches.targetId,
text: {
en: 'DPS Tower',
de: 'DD-Turm',
fr: 'Tour DPS',
cn: 'DPS塔',
ko: '딜러 장판',
},
};
},
},
{
id: 'P4N Explosive Aether Burst No Tank',
type: 'Ability',
netRegex: NetRegexes.ability({ id: '6A41' }),
condition: (data, matches) => data.party.isTank(matches.target),
mistake: (_data, matches) => {
return {
type: 'fail',
blame: matches.target,
reportId: matches.targetId,
text: {
en: 'Tank Orb',
de: 'Tank-Orb',
fr: 'Orbe Tank',
cn: '坦克球',
ko: '탱커 구슬',
},
};
},
},
{
id: 'P4N Explosive Aether Burst No Healer',
type: 'Ability',
netRegex: NetRegexes.ability({ id: '6A42' }),
condition: (data, matches) => data.party.isHealer(matches.target),
mistake: (_data, matches) => {
return {
type: 'fail',
blame: matches.target,
reportId: matches.targetId,
text: {
en: 'Healer Orb',
de: 'Heiler-Orb',
fr: 'Orbe Healer',
cn: '治疗球',
ko: '힐러 구슬',
},
};
},
},
{
id: 'P4N Explosive Aether Burst No DPS',
type: 'Ability',
netRegex: NetRegexes.ability({ id: '6A43' }),
condition: (data, matches) => data.party.isDPS(matches.target),
mistake: (_data, matches) => {
return {
type: 'fail',
blame: matches.target,
reportId: matches.targetId,
text: {
en: 'DPS Orb',
de: 'DD-Orb',
fr: 'Orbe DPS',
cn: 'DPS球',
ko: '딜러 구슬',
},
};
},
},
{
id: 'P4N Knockback',
type: 'Ability',
// 6A3A = Well Mekhane
// 6DAE = Northerly Shift (knockback)
// 6DAF = Southerly Shift (knockback)
// 6DB0 = Easterly Shift (knockback)
// 6DB1 = Westerly Shift (knockback)
netRegex: NetRegexes.ability({ id: ['6A3A', '6DAE', '6DAF', '6DB0', '6DB1'] }),
deathReason: (_data, matches) => {
return {
id: matches.targetId,
name: matches.target,
text: {
en: 'Pushed into wall',
de: 'Rückstoß in die Wand',
fr: 'Poussé(e) dans le mur',
ja: '壁へノックバック',
cn: '击退至墙',
ko: '벽으로 넉백',
},
};
},
},
],
};
export default triggerSet;