|
| 1 | +import NetRegexes from '../../../../../resources/netregexes'; |
| 2 | +import ZoneId from '../../../../../resources/zone_id'; |
| 3 | +import { OopsyData } from '../../../../../types/data'; |
| 4 | +import { OopsyTriggerSet } from '../../../../../types/oopsy'; |
| 5 | +import { GetShareMistakeText, playerDamageFields } from '../../../oopsy_common'; |
| 6 | + |
| 7 | +export interface Data extends OopsyData { |
| 8 | + hasWateryGrave: { [name: string]: boolean }; |
| 9 | +} |
| 10 | + |
| 11 | +const triggerSet: OopsyTriggerSet<Data> = { |
| 12 | + zoneId: ZoneId.AacHeavyweightM2Savage, |
| 13 | + damageWarn: { |
| 14 | + 'R10S Alley-oop Double-dip Follow-up': 'B5DF', |
| 15 | + 'R10S Reverse Alley-oop Follow-up': 'B5E2', |
| 16 | + 'R10S Sickest Take-off': 'B5CE', |
| 17 | + 'R10S Deep Varial': 'B5D3', |
| 18 | + 'R10S Steam Burst': 'B5FB', // Orb explosion |
| 19 | + 'R10S Flame Floater Split': 'B5BF', |
| 20 | + }, |
| 21 | + gainsEffectWarn: { |
| 22 | + 'R10S Burns': 'BFA', // standing in the fire, 15s |
| 23 | + }, |
| 24 | + shareWarn: { |
| 25 | + 'R10S Flame Floater 1': 'B5BB', |
| 26 | + 'R10S Flame Floater 2': 'B5BC', |
| 27 | + 'R10S Flame Floater 3': 'B5BD', |
| 28 | + 'R10S Flame Floater 4': 'B5BE', |
| 29 | + 'R10S Alley-oop Inferno': 'B5C1', // Red Hot spread |
| 30 | + 'R10S Awesome Splash 1': 'B5CF', // Deep Blue spread |
| 31 | + 'R10S Awesome Splash 2': 'B5D7', // Deep Blue spread after Fire/Watersnaking |
| 32 | + 'R10S Alley-oop Double-dip First Hit': 'B5DE', |
| 33 | + 'R10S Reverse Alley-oop First Hit': 'B5E1', |
| 34 | + 'R10S Blasting Snap': 'B5F1', // Red Hot spread during Insane Air |
| 35 | + 'R10S Plunging Snap': 'B5F2', // Deep Blue spread during Insane Air |
| 36 | + 'R10S Hot Aerial 1': 'B91E', |
| 37 | + 'R10S Hot Aerial 2': 'B91F', |
| 38 | + 'R10S Hot Aerial 3': 'B920', |
| 39 | + 'R10S Hot Aerial 4': 'B921', |
| 40 | + 'R10S Xtreme Wave Deep Blue': 'B5D2', // Deep Blue's Xtreme Wave |
| 41 | + }, |
| 42 | + shareFail: { |
| 43 | + 'R10S Deep Impact': 'ADC6', // Deep Blue tankbuster |
| 44 | + 'R10S Vertical Blast': 'B5F9', // Red Hot tankbuster during Insane Air |
| 45 | + 'R10S Vertical Plunge': 'B5FA', // Deep Blue tankbuster during Insane Air |
| 46 | + }, |
| 47 | + initData: () => { |
| 48 | + return { |
| 49 | + hasWateryGrave: {}, |
| 50 | + }; |
| 51 | + }, |
| 52 | + triggers: [ |
| 53 | + { |
| 54 | + id: 'R10S Watery Grave Gain', |
| 55 | + type: 'GainsEffect', |
| 56 | + netRegex: NetRegexes.gainsEffect({ effectId: '12DD' }), |
| 57 | + run: (data, matches) => { |
| 58 | + data.hasWateryGrave[matches.target] = true; |
| 59 | + }, |
| 60 | + }, |
| 61 | + { |
| 62 | + id: 'R10S Watery Grave Lose', |
| 63 | + type: 'LosesEffect', |
| 64 | + netRegex: NetRegexes.losesEffect({ effectId: '12DD' }), |
| 65 | + run: (data, matches) => { |
| 66 | + data.hasWateryGrave[matches.target] = false; |
| 67 | + }, |
| 68 | + }, |
| 69 | + { |
| 70 | + // Share warn for Red Hot's Xtreme Wave, except players affected by Watery Grave. |
| 71 | + id: 'R10S Xtreme Wave Red Hot', |
| 72 | + type: 'Ability', |
| 73 | + netRegex: NetRegexes.ability({ id: 'B5D1', ...playerDamageFields }), |
| 74 | + condition: (data, matches) => !data.hasWateryGrave[matches.target], |
| 75 | + mistake: (data, matches) => { |
| 76 | + const numTargets = parseInt(matches.targetCount); |
| 77 | + const numWateryGrave = Object.values(data.hasWateryGrave).filter(Boolean).length; |
| 78 | + if (isNaN(numTargets) || numTargets <= numWateryGrave + 1) |
| 79 | + return; |
| 80 | + return { |
| 81 | + type: 'warn', |
| 82 | + blame: matches.target, |
| 83 | + reportId: matches.targetId, |
| 84 | + text: GetShareMistakeText(matches.ability, numTargets - numWateryGrave), |
| 85 | + }; |
| 86 | + }, |
| 87 | + }, |
| 88 | + { |
| 89 | + id: 'R10S Watery Grave Gains Vulnerability Down', |
| 90 | + type: 'GainsEffect', |
| 91 | + netRegex: NetRegexes.gainsEffect({ effectId: '3A1', target: 'Watery Grave' }), |
| 92 | + mistake: (_data, matches) => { |
| 93 | + return { |
| 94 | + type: 'warn', |
| 95 | + blame: matches.target, |
| 96 | + reportId: matches.targetId, |
| 97 | + text: matches.effect, |
| 98 | + }; |
| 99 | + }, |
| 100 | + }, |
| 101 | + ], |
| 102 | + timelineReplace: [ |
| 103 | + { |
| 104 | + locale: 'de', |
| 105 | + replaceSync: { |
| 106 | + 'Watery Grave': 'Wasserkerker', |
| 107 | + }, |
| 108 | + }, |
| 109 | + { |
| 110 | + locale: 'fr', |
| 111 | + replaceSync: { |
| 112 | + 'Watery Grave': 'prison aquatique', |
| 113 | + }, |
| 114 | + }, |
| 115 | + { |
| 116 | + locale: 'ja', |
| 117 | + replaceSync: { |
| 118 | + 'Watery Grave': '水牢', |
| 119 | + }, |
| 120 | + }, |
| 121 | + { |
| 122 | + locale: 'cn', |
| 123 | + replaceSync: { |
| 124 | + 'Watery Grave': '水牢', |
| 125 | + }, |
| 126 | + }, |
| 127 | + { |
| 128 | + locale: 'ko', |
| 129 | + replaceSync: { |
| 130 | + 'Watery Grave': '수중 감옥', |
| 131 | + }, |
| 132 | + }, |
| 133 | + ], |
| 134 | +}; |
| 135 | + |
| 136 | +export default triggerSet; |
0 commit comments