forked from PathOfBuildingCommunity/PathOfBuilding
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ModParser.lua
5817 lines (5780 loc) · 539 KB
/
ModParser.lua
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
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
-- Path of Building
--
-- Module: Mod Parser for 3.0
-- Parser function for modifier names
--
local pairs = pairs
local ipairs = ipairs
local t_insert = table.insert
local band = bit.band
local bor = bit.bor
local bnot = bit.bnot
local m_huge = math.huge
local function firstToUpper(str)
return (str:gsub("^%l", string.upper))
end
-- Radius jewels that modify other nodes
local function getSimpleConv(srcList, dst, type, remove, factor)
return function(node, out, data)
local attributes = {["Dex"] = true, ["Int"] = true, ["Str"] = true}
if node then
for _, src in pairs(srcList) do
for _, mod in ipairs(node.modList) do
-- do not convert stats from tattoos
if mod.name == src and mod.type == type and not (node.isTattoo and attributes[src]) then
if remove then
out:MergeNewMod(src, type, -mod.value, mod.source, mod.flags, mod.keywordFlags, unpack(mod))
end
if factor then
out:MergeNewMod(dst, type, math.floor(mod.value * factor), mod.source, mod.flags, mod.keywordFlags, unpack(mod))
else
out:MergeNewMod(dst, type, mod.value, mod.source, mod.flags, mod.keywordFlags, unpack(mod))
end
end
end
end
end
end
end
local conquerorList = {
["xibaqua"] = { id = 1, type = "vaal" },
["zerphi"] = { id = 2, type = "vaal" },
["doryani"] = { id = 3, type = "vaal" },
["ahuana"] = { id = "2_v2", type = "vaal" },
["deshret"] = { id = 1, type = "maraketh" },
["asenath"] = { id = 2, type = "maraketh" },
["nasima"] = { id = 3, type = "maraketh" },
["balbala"] = { id = "1_v2", type = "maraketh" },
["cadiro"] = { id = 1, type = "eternal" },
["victario"] = { id = 2, type = "eternal" },
["chitus"] = { id = 3, type = "eternal" },
["caspiro"] = { id = "3_v2", type = "eternal" },
["kaom"] = { id = 1, type = "karui" },
["rakiata"] = { id = 2, type = "karui" },
["kiloava"] = { id = 3, type = "karui" },
["akoya"] = { id = "3_v2", type = "karui" },
["venarius"] = { id = 1, type = "templar" },
["dominus"] = { id = 2, type = "templar" },
["avarius"] = { id = 3, type = "templar" },
["maxarius"] = { id = "1_v2", type = "templar" },
}
-- List of modifier forms
local formList = {
["^(%d+)%% increased"] = "INC",
["^(%d+)%% faster"] = "INC",
["^(%d+)%% reduced"] = "RED",
["^(%d+)%% slower"] = "RED",
["^(%d+)%% more"] = "MORE",
["^(%d+)%% less"] = "LESS",
["^([%+%-][%d%.]+)%%?"] = "BASE",
["^([%+%-][%d%.]+)%%? to"] = "BASE",
["^([%+%-]?[%d%.]+)%%? of"] = "BASE",
["^([%+%-][%d%.]+)%%? base"] = "BASE",
["^([%+%-]?[%d%.]+)%%? additional"] = "BASE",
["(%d+) additional hits?"] = "BASE",
["^you gain ([%d%.]+)"] = "GAIN",
["^gains? ([%d%.]+)%% of"] = "GAIN",
["^gain ([%d%.]+)"] = "GAIN",
["^gain %+(%d+)%% to"] = "GAIN",
["^you lose ([%d%.]+)"] = "LOSE",
["^loses? ([%d%.]+)%% of"] = "LOSE",
["^lose ([%d%.]+)"] = "LOSE",
["^lose %+(%d+)%% to"] = "LOSE",
["^grants ([%d%.]+)"] = "GRANTS", -- local
["^removes? ([%d%.]+) ?o?f? ?y?o?u?r?"] = "REMOVES", -- local
["^(%d+)"] = "BASE",
["^([%+%-]?%d+)%% chance"] = "CHANCE",
["^([%+%-]?%d+)%% chance to gain "] = "FLAG",
["^([%+%-]?%d+)%% additional chance"] = "CHANCE",
["costs? ([%+%-]?%d+)"] = "TOTALCOST",
["skills cost ([%+%-]?%d+)"] = "BASECOST",
["penetrates? (%d+)%%"] = "PEN",
["penetrates (%d+)%% of"] = "PEN",
["penetrates (%d+)%% of enemy"] = "PEN",
["^([%d%.]+) (.+) regenerated per second"] = "REGENFLAT",
["^([%d%.]+)%% (.+) regenerated per second"] = "REGENPERCENT",
["^([%d%.]+)%% of (.+) regenerated per second"] = "REGENPERCENT",
["^regenerate ([%d%.]+) (.-) per second"] = "REGENFLAT",
["^regenerate ([%d%.]+)%% (.-) per second"] = "REGENPERCENT",
["^regenerate ([%d%.]+)%% of (.-) per second"] = "REGENPERCENT",
["^regenerate ([%d%.]+)%% of your (.-) per second"] = "REGENPERCENT",
["^you regenerate ([%d%.]+)%% of (.-) per second"] = "REGENPERCENT",
["^([%d%.]+) (.+) lost per second"] = "DEGENFLAT",
["^([%d%.]+)%% (.+) lost per second"] = "DEGENPERCENT",
["^([%d%.]+)%% of (.+) lost per second"] = "DEGENPERCENT",
["^lose ([%d%.]+) (.-) per second"] = "DEGENFLAT",
["^lose ([%d%.]+)%% (.-) per second"] = "DEGENPERCENT",
["^lose ([%d%.]+)%% of (.-) per second"] = "DEGENPERCENT",
["^lose ([%d%.]+)%% of your (.-) per second"] = "DEGENPERCENT",
["^you lose ([%d%.]+)%% of (.-) per second"] = "DEGENPERCENT",
["^([%d%.]+) (%a+) damage taken per second"] = "DEGEN",
["^([%d%.]+) (%a+) damage per second"] = "DEGEN",
["(%d+) to (%d+) added (%a+) damage"] = "DMG",
["(%d+)%-(%d+) added (%a+) damage"] = "DMG",
["(%d+) to (%d+) additional (%a+) damage"] = "DMG",
["(%d+)%-(%d+) additional (%a+) damage"] = "DMG",
["^(%d+) to (%d+) (%a+) damage"] = "DMG",
["adds (%d+) to (%d+) (%a+) damage"] = "DMG",
["adds (%d+)%-(%d+) (%a+) damage"] = "DMG",
["adds (%d+) to (%d+) (%a+) damage to attacks"] = "DMGATTACKS",
["adds (%d+)%-(%d+) (%a+) damage to attacks"] = "DMGATTACKS",
["adds (%d+) to (%d+) (%a+) attack damage"] = "DMGATTACKS",
["adds (%d+)%-(%d+) (%a+) attack damage"] = "DMGATTACKS",
["(%d+) to (%d+) added attack (%a+) damage"] = "DMGATTACKS",
["adds (%d+) to (%d+) (%a+) damage to spells"] = "DMGSPELLS",
["adds (%d+)%-(%d+) (%a+) damage to spells"] = "DMGSPELLS",
["adds (%d+) to (%d+) (%a+) spell damage"] = "DMGSPELLS",
["adds (%d+)%-(%d+) (%a+) spell damage"] = "DMGSPELLS",
["(%d+) to (%d+) added spell (%a+) damage"] = "DMGSPELLS",
["adds (%d+) to (%d+) (%a+) damage to attacks and spells"] = "DMGBOTH",
["adds (%d+)%-(%d+) (%a+) damage to attacks and spells"] = "DMGBOTH",
["adds (%d+) to (%d+) (%a+) damage to spells and attacks"] = "DMGBOTH", -- o_O
["adds (%d+)%-(%d+) (%a+) damage to spells and attacks"] = "DMGBOTH", -- o_O
["adds (%d+) to (%d+) (%a+) damage to hits"] = "DMGBOTH",
["adds (%d+)%-(%d+) (%a+) damage to hits"] = "DMGBOTH",
["^you have "] = "FLAG",
["^have "] = "FLAG",
["^you are "] = "FLAG",
["^are "] = "FLAG",
["^gain "] = "FLAG",
["^you gain "] = "FLAG",
["is (%-?%d+)%%? "] = "OVERRIDE",
}
-- Map of modifier names
local modNameList = {
-- Attributes
["strength"] = "Str",
["dexterity"] = "Dex",
["intelligence"] = "Int",
["omniscience"] = "Omni",
["strength and dexterity"] = { "Str", "Dex", "StrDex" },
["strength and intelligence"] = { "Str", "Int", "StrInt" },
["dexterity and intelligence"] = { "Dex", "Int", "DexInt" },
["attributes"] = { "Str", "Dex", "Int", "All" },
["all attributes"] = { "Str", "Dex", "Int", "All" },
["devotion"] = "Devotion",
-- Life/mana
["life"] = "Life",
["maximum life"] = "Life",
["life regeneration rate"] = "LifeRegen",
["mana"] = "Mana",
["maximum mana"] = "Mana",
["mana regeneration"] = "ManaRegen",
["mana regeneration rate"] = "ManaRegen",
["mana cost"] = "ManaCost",
["mana cost of"] = "ManaCost",
["mana cost of skills"] = "ManaCost",
["mana cost of attacks"] = { "ManaCost", tag = { type = "SkillType", skillType = SkillType.Attack } },
["total cost"] = "Cost",
["total mana cost"] = "ManaCost",
["total mana cost of skills"] = "ManaCost",
["life cost of skills"] = "LifeCost",
["rage cost of skills"] = "RageCost",
["cost of"] = "Cost",
["cost of skills"] = "Cost",
["mana reserved"] = "ManaReserved",
["mana reservation"] = "ManaReserved",
["mana reservation of skills"] = { "ManaReserved", tag = { type = "SkillType", skillType = SkillType.Aura } },
["mana reservation efficiency of skills"] = "ManaReservationEfficiency",
["life reservation efficiency of skills"] = "LifeReservationEfficiency",
["reservation of skills"] = "Reserved",
["mana reservation if cast as an aura"] = { "ManaReserved", tag = { type = "SkillType", skillType = SkillType.Aura } },
["reservation if cast as an aura"] = { "Reserved", tag = { type = "SkillType", skillType = SkillType.Aura } },
["reservation"] = { "Reserved" },
["reservation efficiency"] = "ReservationEfficiency",
["reservation efficiency of skills"] = "ReservationEfficiency",
["mana reservation efficiency"] = "ManaReservationEfficiency",
["life reservation efficiency"] = "LifeReservationEfficiency",
-- Primary defences
["maximum energy shield"] = "EnergyShield",
["energy shield recharge rate"] = "EnergyShieldRecharge",
["start of energy shield recharge"] = "EnergyShieldRechargeFaster",
["restoration of ward"] = "WardRechargeFaster",
["armour"] = "Armour",
["evasion"] = "Evasion",
["evasion rating"] = "Evasion",
["energy shield"] = "EnergyShield",
["ward"] = "Ward",
["armour and evasion"] = "ArmourAndEvasion",
["armour and evasion rating"] = "ArmourAndEvasion",
["evasion rating and armour"] = "ArmourAndEvasion",
["armour and energy shield"] = "ArmourAndEnergyShield",
["evasion rating and energy shield"] = "EvasionAndEnergyShield",
["evasion and energy shield"] = "EvasionAndEnergyShield",
["armour, evasion and energy shield"] = "Defences",
["defences"] = "Defences",
["to evade"] = "EvadeChance",
["chance to evade"] = "EvadeChance",
["to evade attacks"] = "EvadeChance",
["to evade attack hits"] = "EvadeChance",
["chance to evade attacks"] = "EvadeChance",
["chance to evade attack hits"] = "EvadeChance",
["chance to evade projectile attacks"] = "ProjectileEvadeChance",
["chance to evade melee attacks"] = "MeleeEvadeChance",
["evasion rating against melee attacks"] = "MeleeEvasion",
["evasion rating against projectile attacks"] = "ProjectileEvasion",
-- Resistances
["physical damage reduction"] = "PhysicalDamageReduction",
["physical damage reduction from hits"] = "PhysicalDamageReductionWhenHit",
["fire resistance"] = "FireResist",
["maximum fire resistance"] = "FireResistMax",
["cold resistance"] = "ColdResist",
["maximum cold resistance"] = "ColdResistMax",
["lightning resistance"] = "LightningResist",
["maximum lightning resistance"] = "LightningResistMax",
["chaos resistance"] = "ChaosResist",
["maximum chaos resistance"] = "ChaosResistMax",
["fire and cold resistances"] = { "FireResist", "ColdResist" },
["fire and lightning resistances"] = { "FireResist", "LightningResist" },
["cold and lightning resistances"] = { "ColdResist", "LightningResist" },
["elemental resistance"] = "ElementalResist",
["elemental resistances"] = "ElementalResist",
["all elemental resistances"] = "ElementalResist",
["all resistances"] = { "ElementalResist", "ChaosResist" },
["all maximum elemental resistances"] = "ElementalResistMax",
["all maximum resistances"] = { "ElementalResistMax", "ChaosResistMax" },
["all elemental resistances and maximum elemental resistances"] = { "ElementalResist", "ElementalResistMax" },
["fire and chaos resistances"] = { "FireResist", "ChaosResist" },
["cold and chaos resistances"] = { "ColdResist", "ChaosResist" },
["lightning and chaos resistances"] = { "LightningResist", "ChaosResist" },
-- Damage taken
["damage taken"] = "DamageTaken",
["damage taken when hit"] = "DamageTakenWhenHit",
["damage taken from hits"] = "DamageTakenWhenHit",
["damage over time taken"] = "DamageTakenOverTime",
["damage taken from damage over time"] = "DamageTakenOverTime",
["attack damage taken"] = "AttackDamageTaken",
["spell damage taken"] = "SpellDamageTaken",
["physical damage taken"] = "PhysicalDamageTaken",
["physical damage from hits taken"] = "PhysicalDamageFromHitsTaken",
["physical damage taken when hit"] = "PhysicalDamageTakenWhenHit",
["physical damage taken from hits"] = "PhysicalDamageTakenWhenHit",
["physical damage taken from attacks"] = "PhysicalDamageTakenFromAttacks",
["physical damage taken from attack hits"] = "PhysicalDamageTakenFromAttacks",
["physical damage taken over time"] = "PhysicalDamageTakenOverTime",
["physical damage over time taken"] = "PhysicalDamageTakenOverTime",
["physical damage over time damage taken"] = "PhysicalDamageTakenOverTime",
["reflected physical damage taken"] = "PhysicalReflectedDamageTaken",
["lightning damage taken"] = "LightningDamageTaken",
["lightning damage from hits taken"] = "LightningDamageFromHitsTaken",
["lightning damage taken when hit"] = "LightningDamageTakenWhenHit",
["lightning damage taken from attacks"] = "LightningDamageTakenFromAttacks",
["lightning damage taken from attack hits"] = "LightningDamageTakenFromAttacks",
["lightning damage taken over time"] = "LightningDamageTakenOverTime",
["cold damage taken"] = "ColdDamageTaken",
["cold damage from hits taken"] = "ColdDamageFromHitsTaken",
["cold damage taken when hit"] = "ColdDamageTakenWhenHit",
["cold damage taken from hits"] = "ColdDamageTakenWhenHit",
["cold damage taken from attacks"] = "ColdDamageTakenFromAttacks",
["cold damage taken from attack hits"] = "ColdDamageTakenFromAttacks",
["cold damage taken over time"] = "ColdDamageTakenOverTime",
["fire damage taken"] = "FireDamageTaken",
["fire damage from hits taken"] = "FireDamageFromHitsTaken",
["fire damage taken when hit"] = "FireDamageTakenWhenHit",
["fire damage taken from hits"] = "FireDamageTakenWhenHit",
["fire damage taken from attacks"] = "FireDamageTakenFromAttacks",
["fire damage taken from attack hits"] = "FireDamageTakenFromAttacks",
["fire damage taken over time"] = "FireDamageTakenOverTime",
["chaos damage taken"] = "ChaosDamageTaken",
["chaos damage from hits taken"] = "ChaosDamageFromHitsTaken",
["chaos damage taken when hit"] = "ChaosDamageTakenWhenHit",
["chaos damage taken from hits"] = "ChaosDamageTakenWhenHit",
["chaos damage taken from attacks"] = "ChaosDamageTakenFromAttacks",
["chaos damage taken from attack hits"] = "ChaosDamageTakenFromAttacks",
["chaos damage taken over time"] = "ChaosDamageTakenOverTime",
["chaos damage over time taken"] = "ChaosDamageTakenOverTime",
["elemental damage taken"] = "ElementalDamageTaken",
["elemental damage from hits taken"] = "ElementalDamageFromHitsTaken",
["elemental damage taken when hit"] = "ElementalDamageTakenWhenHit",
["elemental damage taken from hits"] = "ElementalDamageTakenWhenHit",
["elemental damage taken over time"] = "ElementalDamageTakenOverTime",
["cold and lightning damage taken"] = { "ColdDamageTaken", "LightningDamageTaken" },
["fire and lightning damage taken"] = { "FireDamageTaken", "LightningDamageTaken" },
["fire and cold damage taken"] = { "FireDamageTaken", "ColdDamageTaken" },
["physical and chaos damage taken"] = { "PhysicalDamageTaken", "ChaosDamageTaken" },
["reflected elemental damage taken"] = "ElementalReflectedDamageTaken",
-- Other defences
["to dodge attacks"] = "AttackDodgeChance",
["to dodge attack hits"] = "AttackDodgeChance",
["to dodge spells"] = "SpellDodgeChance",
["to dodge spell hits"] = "SpellDodgeChance",
["to dodge spell damage"] = "SpellDodgeChance",
["to dodge attacks and spells"] = { "AttackDodgeChance", "SpellDodgeChance" },
["to dodge attacks and spell damage"] = { "AttackDodgeChance", "SpellDodgeChance" },
["to dodge attack and spell hits"] = { "AttackDodgeChance", "SpellDodgeChance" },
["to dodge attack or spell hits"] = { "AttackDodgeChance", "SpellDodgeChance" },
["to suppress spell damage"] = { "SpellSuppressionChance" },
["amount of suppressed spell damage prevented"] = { "SpellSuppressionEffect" },
["to amount of suppressed spell damage prevented"] = { "SpellSuppressionEffect" },
["to block"] = "BlockChance",
["to block attacks"] = "BlockChance",
["to block attack damage"] = "BlockChance",
["block chance"] = "BlockChance",
["block chance with staves"] = { "BlockChance", tag = { type = "Condition", var = "UsingStaff" } },
["to block with staves"] = { "BlockChance", tag = { type = "Condition", var = "UsingStaff" } },
["block chance against projectiles"] = "ProjectileBlockChance",
["to block projectile attack damage"] = "ProjectileBlockChance",
["to block projectile spell damage"] = "ProjectileSpellBlockChance",
["spell block chance"] = "SpellBlockChance",
["to block spells"] = "SpellBlockChance",
["to block spell damage"] = "SpellBlockChance",
["chance to block attacks and spells"] = { "BlockChance", "SpellBlockChance" },
["chance to block attack and spell damage"] = { "BlockChance", "SpellBlockChance" },
["to block attack and spell damage"] = { "BlockChance", "SpellBlockChance" },
["maximum block chance"] = "BlockChanceMax",
["maximum chance to block attack damage"] = "BlockChanceMax",
["maximum chance to block spell damage"] = "SpellBlockChanceMax",
["life gained when you block"] = "LifeOnBlock",
["mana gained when you block"] = "ManaOnBlock",
["energy shield when you block"] = "EnergyShieldOnBlock",
["maximum chance to dodge spell hits"] = "SpellDodgeChanceMax",
["to avoid physical damage from hits"] = "AvoidPhysicalDamageChance",
["to avoid fire damage when hit"] = "AvoidFireDamageChance",
["to avoid fire damage from hits"] = "AvoidFireDamageChance",
["to avoid cold damage when hit"] = "AvoidColdDamageChance",
["to avoid cold damage from hits"] = "AvoidColdDamageChance",
["to avoid lightning damage when hit"] = "AvoidLightningDamageChance",
["to avoid lightning damage from hits"] = "AvoidLightningDamageChance",
["to avoid elemental damage when hit"] = { "AvoidFireDamageChance", "AvoidColdDamageChance", "AvoidLightningDamageChance" },
["to avoid elemental damage from hits"] = { "AvoidFireDamageChance", "AvoidColdDamageChance", "AvoidLightningDamageChance" },
["to avoid projectiles"] = "AvoidProjectilesChance",
["to avoid being stunned"] = "AvoidStun",
["to avoid interruption from stuns while casting"] = "AvoidInterruptStun",
["to ignore stuns while casting"] = "AvoidInterruptStun",
["to avoid being shocked"] = "AvoidShock",
["to avoid being frozen"] = "AvoidFreeze",
["to avoid being chilled"] = "AvoidChill",
["to avoid being ignited"] = "AvoidIgnite",
["to avoid non-damaging ailments on you"] = { "AvoidShock", "AvoidFreeze", "AvoidChill", "AvoidSap", "AvoidBrittle", "AvoidScorch" },
["to avoid blind"] = "AvoidBlind",
["to avoid elemental ailments"] = "AvoidElementalAilments",
["to avoid elemental status ailments"] = "AvoidElementalAilments",
["to avoid ailments"] = "AvoidAilments" ,
["to avoid status ailments"] = "AvoidAilments",
["to avoid bleeding"] = "AvoidBleed",
["to avoid being poisoned"] = "AvoidPoison",
["damage is taken from mana before life"] = "DamageTakenFromManaBeforeLife",
["lightning damage is taken from mana before life"] = "LightningDamageTakenFromManaBeforeLife",
["damage taken from mana before life"] = "DamageTakenFromManaBeforeLife",
["effect of curses on you"] = "CurseEffectOnSelf",
["effect of curses on them"] = "CurseEffectOnSelf",
["effect of exposure on you"] = "ExposureEffectOnSelf",
["effect of withered on you"] = "WitherEffectOnSelf",
["life recovery rate"] = "LifeRecoveryRate",
["mana recovery rate"] = "ManaRecoveryRate",
["energy shield recovery rate"] = "EnergyShieldRecoveryRate",
["energy shield regeneration rate"] = "EnergyShieldRegen",
["recovery rate of life, mana and energy shield"] = { "LifeRecoveryRate", "ManaRecoveryRate", "EnergyShieldRecoveryRate" },
["recovery rate of life and energy shield"] = { "LifeRecoveryRate", "EnergyShieldRecoveryRate" },
["maximum life, mana and global energy shield"] = { "Life", "Mana", "EnergyShield", tag = { type = "Global" } },
["non-chaos damage taken bypasses energy shield"] = { "PhysicalEnergyShieldBypass", "LightningEnergyShieldBypass", "ColdEnergyShieldBypass", "FireEnergyShieldBypass" },
["damage taken recouped as life"] = "LifeRecoup",
["physical damage taken recouped as life"] = "PhysicalLifeRecoup",
["lightning damage taken recouped as life"] = "LightningLifeRecoup",
["cold damage taken recouped as life"] = "ColdLifeRecoup",
["fire damage taken recouped as life"] = "FireLifeRecoup",
["chaos damage taken recouped as life"] = "ChaosLifeRecoup",
["damage taken recouped as energy shield"] = "EnergyShieldRecoup",
["damage taken recouped as mana"] = "ManaRecoup",
["damage taken recouped as life, mana and energy shield"] = { "LifeRecoup", "EnergyShieldRecoup", "ManaRecoup" },
-- Stun/knockback modifiers
["stun recovery"] = "StunRecovery",
["stun and block recovery"] = "StunRecovery",
["block and stun recovery"] = "StunRecovery",
["stun duration on you"] = "StunDuration",
["stun threshold"] = "StunThreshold",
["block recovery"] = "BlockRecovery",
["enemy stun threshold"] = "EnemyStunThreshold",
["stun duration on enemies"] = "EnemyStunDuration",
["stun duration"] = "EnemyStunDuration",
["to double stun duration"] = "DoubleEnemyStunDurationChance",
["to knock enemies back on hit"] = "EnemyKnockbackChance",
["knockback distance"] = "EnemyKnockbackDistance",
-- Auras/curses/buffs
["aura effect"] = "AuraEffect",
["effect of non-curse auras you cast"] = { "AuraEffect", tagList = { { type = "SkillType", skillType = SkillType.Aura }, { type = "SkillType", skillType = SkillType.AppliesCurse, neg = true } } },
["effect of non-curse auras from your skills"] = { "AuraEffect", tagList = { { type = "SkillType", skillType = SkillType.Aura }, { type = "SkillType", skillType = SkillType.AppliesCurse, neg = true } } },
["effect of non-curse auras from your skills on your minions"] = { "AuraEffectOnSelf", tagList = { { type = "SkillType", skillType = SkillType.Aura }, { type = "SkillType", skillType = SkillType.AppliesCurse, neg = true } }, addToMinion = true },
["effect of non-curse auras"] = { "AuraEffect", tag = { type = "SkillType", skillType = SkillType.AppliesCurse, neg = true } },
["effect of your curses"] = "CurseEffect",
["effect of auras on you"] = "AuraEffectOnSelf",
["effect of auras on your minions"] = { "AuraEffectOnSelf", addToMinion = true },
["effect of auras from mines"] = { "AuraEffect", keywordFlags = KeywordFlag.Mine },
["effect of consecrated ground you create"] = "ConsecratedGroundEffect",
["curse effect"] = "CurseEffect",
["effect of curses applied by bane"] = { "CurseEffect", tag = { type = "Condition", var = "AppliedByBane" } },
["effect of your marks"] = { "CurseEffect", tag = { type = "SkillType", skillType = SkillType.Mark } },
["effect of arcane surge on you"] = "ArcaneSurgeEffect",
["curse duration"] = { "Duration", keywordFlags = KeywordFlag.Curse },
["hex duration"] = { "Duration", tag = { type = "SkillType", skillType = SkillType.Hex } },
["radius of auras"] = { "AreaOfEffect", keywordFlags = KeywordFlag.Aura },
["radius of curses"] = { "AreaOfEffect", keywordFlags = KeywordFlag.Curse },
["buff effect"] = "BuffEffect",
["effect of buffs on you"] = "BuffEffectOnSelf",
["effect of buffs granted by your golems"] = { "BuffEffect", tag = { type = "SkillType", skillType = SkillType.Golem } },
["effect of buffs granted by socketed golem skills"] = { "BuffEffect", addToSkill = { type = "SocketedIn", slotName = "{SlotName}", keyword = "golem" } },
["effect of the buff granted by your stone golems"] = { "BuffEffect", tag = { type = "SkillName", skillName = "Summon Stone Golem", includeTransfigured = true } },
["effect of the buff granted by your lightning golems"] = { "BuffEffect", tag = { type = "SkillName", skillName = "Summon Lightning Golem", includeTransfigured = true } },
["effect of the buff granted by your ice golems"] = { "BuffEffect", tag = { type = "SkillName", skillName = "Summon Ice Golem", includeTransfigured = true } },
["effect of the buff granted by your flame golems"] = { "BuffEffect", tag = { type = "SkillName", skillName = "Summon Flame Golem", includeTransfigured = true } },
["effect of the buff granted by your chaos golems"] = { "BuffEffect", tag = { type = "SkillName", skillName = "Summon Chaos Golem", includeTransfigured = true } },
["effect of the buff granted by your carrion golems"] = { "BuffEffect", tag = { type = "SkillName", skillName = "Summon Carrion Golem", includeTransfigured = true } },
["effect of offering spells"] = { "BuffEffect", tag = { type = "SkillName", skillNameList = { "Bone Offering", "Flesh Offering", "Spirit Offering", "Blood Offering" } } },
["effect of offerings"] = { "BuffEffect", tag = { type = "SkillName", skillNameList = { "Bone Offering", "Flesh Offering", "Spirit Offering", "Blood Offering" } } },
["effect of heralds on you"] = { "BuffEffect", tag = { type = "SkillType", skillType = SkillType.Herald } },
["effect of herald buffs on you"] = { "BuffEffect", tag = { type = "SkillType", skillType = SkillType.Herald } },
["effect of buffs granted by your active ancestor totems"] = { "BuffEffect", tag = { type = "SkillName", skillNameList = { "Ancestral Warchief", "Ancestral Protector", "Earthbreaker" } } },
["effect of buffs your ancestor totems grant "] = { "BuffEffect", tag = { type = "SkillName", skillNameList = { "Ancestral Warchief", "Ancestral Protector", "Earthbreaker" } } },
["effect of shrine buffs on you"] = "ShrineBuffEffect",
["effect of withered"] = "WitherEffect",
["warcry effect"] = { "BuffEffect", keywordFlags = KeywordFlag.Warcry },
["aspect of the avian buff effect"] = { "BuffEffect", tag = { type = "SkillName", skillName = "Aspect of the Avian" } },
["maximum rage"] = "MaximumRage",
["maximum fortification"] = "MaximumFortification",
["fortification"] = "MinimumFortification",
-- Charges
["maximum power charge"] = "PowerChargesMax",
["maximum power charges"] = "PowerChargesMax",
["minimum power charge"] = "PowerChargesMin",
["minimum power charges"] = "PowerChargesMin",
["power charge duration"] = "PowerChargesDuration",
["maximum frenzy charge"] = "FrenzyChargesMax",
["maximum frenzy charges"] = "FrenzyChargesMax",
["minimum frenzy charge"] = "FrenzyChargesMin",
["minimum frenzy charges"] = "FrenzyChargesMin",
["frenzy charge duration"] = "FrenzyChargesDuration",
["maximum endurance charge"] = "EnduranceChargesMax",
["maximum endurance charges"] = "EnduranceChargesMax",
["minimum endurance charge"] = "EnduranceChargesMin",
["minimum endurance charges"] = "EnduranceChargesMin",
["minimum endurance, frenzy and power charges"] = { "PowerChargesMin", "FrenzyChargesMin", "EnduranceChargesMin" },
["endurance charge duration"] = "EnduranceChargesDuration",
["maximum frenzy charges and maximum power charges"] = { "FrenzyChargesMax", "PowerChargesMax" },
["maximum power charges and maximum endurance charges"] = { "PowerChargesMax", "EnduranceChargesMax" },
["maximum endurance, frenzy and power charges"] = { "EnduranceChargesMax", "PowerChargesMax", "FrenzyChargesMax" },
["endurance, frenzy and power charge duration"] = { "PowerChargesDuration", "FrenzyChargesDuration", "EnduranceChargesDuration" },
["maximum siphoning charge"] = "SiphoningChargesMax",
["maximum siphoning charges"] = "SiphoningChargesMax",
["maximum challenger charges"] = "ChallengerChargesMax",
["maximum blitz charges"] = "BlitzChargesMax",
["maximum number of crab barriers"] = "CrabBarriersMax",
["maximum blood charges"] = "BloodChargesMax",
["maximum spirit charges"] = "SpiritChargesMax",
["charge duration"] = "ChargeDuration",
-- On hit/kill/leech effects
["life gained on kill"] = "LifeOnKill",
["life per enemy killed"] = "LifeOnKill",
["life on kill"] = "LifeOnKill",
["life per enemy hit"] = { "LifeOnHit", flags = ModFlag.Hit },
["life gained for each enemy hit"] = { "LifeOnHit", flags = ModFlag.Hit },
["life for each enemy hit"] = { "LifeOnHit", flags = ModFlag.Hit },
["mana gained on kill"] = "ManaOnKill",
["mana per enemy killed"] = "ManaOnKill",
["mana on kill"] = "ManaOnKill",
["mana per enemy hit"] = { "ManaOnHit", flags = ModFlag.Hit },
["mana gained for each enemy hit"] = { "ManaOnHit", flags = ModFlag.Hit },
["mana for each enemy hit"] = { "ManaOnHit", flags = ModFlag.Hit },
["energy shield gained on kill"] = "EnergyShieldOnKill",
["energy shield per enemy killed"] = "EnergyShieldOnKill",
["energy shield on kill"] = "EnergyShieldOnKill",
["energy shield per enemy hit"] = { "EnergyShieldOnHit", flags = ModFlag.Hit },
["energy shield gained for each enemy hit"] = { "EnergyShieldOnHit", flags = ModFlag.Hit },
["energy shield for each enemy hit"] = { "EnergyShieldOnHit", flags = ModFlag.Hit },
["life and mana gained for each enemy hit"] = { "LifeOnHit", "ManaOnHit", flags = ModFlag.Hit },
["life and mana for each enemy hit"] = { "LifeOnHit", "ManaOnHit", flags = ModFlag.Hit },
["damage as life"] = "DamageLifeLeech",
["life leeched per second"] = "LifeLeechRate",
["mana leeched per second"] = "ManaLeechRate",
["total recovery per second from life leech"] = "LifeLeechRate",
["recovery per second from life leech"] = "LifeLeechRate",
["total recovery per second from energy shield leech"] = "EnergyShieldLeechRate",
["recovery per second from energy shield leech"] = "EnergyShieldLeechRate",
["total recovery per second from mana leech"] = "ManaLeechRate",
["recovery per second from mana leech"] = "ManaLeechRate",
["total recovery per second from life, mana, or energy shield leech"] = { "LifeLeechRate", "ManaLeechRate", "EnergyShieldLeechRate" },
["maximum recovery per life leech"] = "MaxLifeLeechInstance",
["maximum recovery per energy shield leech"] = "MaxEnergyShieldLeechInstance",
["maximum recovery per mana leech"] = "MaxManaLeechInstance",
["maximum total recovery per second from life leech"] = "MaxLifeLeechRate",
["maximum total life recovery per second from leech"] = "MaxLifeLeechRate",
["maximum total recovery per second from energy shield leech"] = "MaxEnergyShieldLeechRate",
["maximum total energy shield recovery per second from leech"] = "MaxEnergyShieldLeechRate",
["maximum total recovery per second from mana leech"] = "MaxManaLeechRate",
["maximum total mana recovery per second from leech"] = "MaxManaLeechRate",
["maximum total life, mana and energy shield recovery per second from leech"] = { "MaxLifeLeechRate", "MaxManaLeechRate", "MaxEnergyShieldLeechRate" },
["life and mana leech is instant"] = { "InstantManaLeech", "InstantLifeLeech" },
["life leech is instant"] = { "InstantLifeLeech" },
["mana leech is instant"] = { "InstantManaLeech" },
["energy shield leech is instant"] = { "InstantEnergyShieldLeech" },
["leech is instant"] = { "InstantEnergyShieldLeech", "InstantManaLeech", "InstantLifeLeech" },
["to impale enemies on hit"] = "ImpaleChance",
["to impale on spell hit"] = { "ImpaleChance", flags = ModFlag.Spell },
["impale effect"] = "ImpaleEffect",
["effect of impales you inflict"] = "ImpaleEffect",
["effects of impale inflicted"] = "ImpaleEffect", -- typo / old wording change
["effect of impales inflicted"] = "ImpaleEffect",
-- Projectile modifiers
["projectile"] = "ProjectileCount",
["projectiles"] = "ProjectileCount",
["projectile speed"] = "ProjectileSpeed",
["arrow speed"] = { "ProjectileSpeed", flags = ModFlag.Bow },
-- Totem/trap/mine/brand modifiers
["totem placement speed"] = "TotemPlacementSpeed",
["totem life"] = "TotemLife",
["totem duration"] = "TotemDuration",
["maximum number of summoned totems"] = "ActiveTotemLimit",
["maximum number of summoned totems."] = "ActiveTotemLimit", -- Mark plz
["maximum number of summoned ballista totems"] = { "ActiveBallistaLimit", tag = { type = "SkillType", skillType = SkillType.TotemsAreBallistae } },
["trap throwing speed"] = "TrapThrowingSpeed",
["trap and mine throwing speed"] = { "TrapThrowingSpeed", "MineLayingSpeed" },
["trap trigger area of effect"] = "TrapTriggerAreaOfEffect",
["trap duration"] = "TrapDuration",
["cooldown recovery speed for throwing traps"] = { "CooldownRecovery", keywordFlags = KeywordFlag.Trap },
["cooldown recovery rate for throwing traps"] = { "CooldownRecovery", keywordFlags = KeywordFlag.Trap },
["mine laying speed"] = "MineLayingSpeed",
["mine throwing speed"] = "MineLayingSpeed",
["mine detonation area of effect"] = "MineDetonationAreaOfEffect",
["mine duration"] = "MineDuration",
["activation frequency"] = "BrandActivationFrequency",
["brand activation frequency"] = "BrandActivationFrequency",
["brand attachment range"] = "BrandAttachmentRange",
-- Minion modifiers
["maximum number of skeletons"] = "ActiveSkeletonLimit",
["maximum number of zombies"] = "ActiveZombieLimit",
["maximum number of raised zombies"] = "ActiveZombieLimit",
["number of zombies allowed"] = "ActiveZombieLimit",
["maximum number of spectres"] = "ActiveSpectreLimit",
["maximum number of golems"] = "ActiveGolemLimit",
["maximum number of summoned golems"] = "ActiveGolemLimit",
["maximum number of summoned raging spirits"] = "ActiveRagingSpiritLimit",
["maximum number of raging spirits"] = "ActiveRagingSpiritLimit",
["maximum number of summoned phantasms"] = "ActivePhantasmLimit",
["maximum number of summoned holy relics"] = "ActiveHolyRelicLimit",
["number of summoned arbalists"] = "ActiveArbalistLimit",
["minion duration"] = { "Duration", tag = { type = "SkillType", skillType = SkillType.CreatesMinion } },
["skeleton duration"] = { "Duration", tag = { type = "SkillName", skillName = "Summon Skeletons", includeTransfigured = true } },
["sentinel of dominance duration"] = { "Duration", tag = { type = "SkillName", skillName = "Dominating Blow", includeTransfigured = true } },
-- Other skill modifiers
["radius"] = "AreaOfEffect",
["radius of area skills"] = "AreaOfEffect",
["area of effect radius"] = "AreaOfEffect",
["area of effect"] = "AreaOfEffect",
["area of effect of skills"] = "AreaOfEffect",
["area of effect of area skills"] = "AreaOfEffect",
["aspect of the spider area of effect"] = { "AreaOfEffect", tag = { type = "SkillName", skillName = "Aspect of the Spider" } },
["firestorm explosion area of effect"] = { "AreaOfEffectSecondary", tag = { type = "SkillName", skillName = "Firestorm", includeTransfigured = true } },
["duration"] = "Duration",
["skill effect duration"] = "Duration",
["chaos skill effect duration"] = { "Duration", keywordFlags = KeywordFlag.Chaos },
["soul gain prevention duration"] = "SoulGainPreventionDuration",
["aspect of the spider debuff duration"] = { "Duration", tag = { type = "SkillName", skillName = "Aspect of the Spider" } },
["fire trap burning ground duration"] = { "Duration", tag = { type = "SkillName", skillName = "Fire Trap" } },
["sentinel of absolution duration"] = { "SecondaryDuration", tag = { type = "SkillName", skillName = "Absolution", includeTransfigured = true } },
["cooldown recovery"] = "CooldownRecovery",
["cooldown recovery speed"] = "CooldownRecovery",
["cooldown recovery rate"] = "CooldownRecovery",
["cooldown use"] = "AdditionalCooldownUses",
["cooldown uses"] = "AdditionalCooldownUses",
["weapon range"] = "WeaponRange",
["metres to weapon range"] = "WeaponRangeMetre",
["metre to weapon range"] = "WeaponRangeMetre",
["melee range"] = "MeleeWeaponRange",
["melee weapon range"] = "MeleeWeaponRange",
["melee weapon and unarmed range"] = { "MeleeWeaponRange", "UnarmedRange" },
["melee weapon and unarmed attack range"] = { "MeleeWeaponRange", "UnarmedRange" },
["melee strike range"] = { "MeleeWeaponRange", "UnarmedRange" },
["metres to melee strike range"] = { "MeleeWeaponRangeMetre", "UnarmedRangeMetre" },
["metre to melee strike range"] = { "MeleeWeaponRangeMetre", "UnarmedRangeMetre" },
["to deal double damage"] = "DoubleDamageChance",
["to deal triple damage"] = "TripleDamageChance",
-- Buffs
["onslaught effect"] = "OnslaughtEffect",
["effect of onslaught on you"] = "OnslaughtEffect",
["adrenaline duration"] = "AdrenalineDuration",
["effect of tailwind on you"] = "TailwindEffectOnSelf",
["elusive effect"] = "ElusiveEffect",
["effect of elusive on you"] = "ElusiveEffect",
["effect of infusion"] = "InfusionEffect",
-- Basic damage types
["damage"] = "Damage",
["physical damage"] = "PhysicalDamage",
["lightning damage"] = "LightningDamage",
["cold damage"] = "ColdDamage",
["fire damage"] = "FireDamage",
["chaos damage"] = "ChaosDamage",
["non-chaos damage"] = "NonChaosDamage",
["elemental damage"] = "ElementalDamage",
-- Other damage forms
["attack damage"] = { "Damage", flags = ModFlag.Attack },
["attack physical damage"] = { "PhysicalDamage", flags = ModFlag.Attack },
["physical attack damage"] = { "PhysicalDamage", flags = ModFlag.Attack },
["minimum physical attack damage"] = { "MinPhysicalDamage", tag = { type = "SkillType", skillType = SkillType.Attack } },
["maximum physical attack damage"] = { "MaxPhysicalDamage", tag = { type = "SkillType", skillType = SkillType.Attack } },
["physical weapon damage"] = { "PhysicalDamage", flags = ModFlag.Weapon },
["physical damage with weapons"] = { "PhysicalDamage", flags = ModFlag.Weapon },
["melee damage"] = { "Damage", flags = ModFlag.Melee },
["physical melee damage"] = { "PhysicalDamage", flags = ModFlag.Melee },
["melee physical damage"] = { "PhysicalDamage", flags = ModFlag.Melee },
["projectile damage"] = { "Damage", flags = ModFlag.Projectile },
["projectile attack damage"] = { "Damage", flags = bor(ModFlag.Projectile, ModFlag.Attack) },
["bow damage"] = { "Damage", flags = bor(ModFlag.Bow, ModFlag.Hit) },
["damage with arrow hits"] = { "Damage", flags = bor(ModFlag.Bow, ModFlag.Hit) },
["wand damage"] = { "Damage", flags = bor(ModFlag.Wand, ModFlag.Hit) },
["wand physical damage"] = { "PhysicalDamage", flags = bor(ModFlag.Wand, ModFlag.Hit) },
["claw physical damage"] = { "PhysicalDamage", flags = bor(ModFlag.Claw, ModFlag.Hit) },
["sword physical damage"] = { "PhysicalDamage", flags = bor(ModFlag.Sword, ModFlag.Hit) },
["damage over time"] = { "Damage", flags = ModFlag.Dot },
["physical damage over time"] = { "PhysicalDamage", keywordFlags = KeywordFlag.PhysicalDot },
["cold damage over time"] = { "ColdDamage", keywordFlags = KeywordFlag.ColdDot },
["chaos damage over time"] = { "ChaosDamage", keywordFlags = KeywordFlag.ChaosDot },
["burning damage"] = { "FireDamage", keywordFlags = KeywordFlag.FireDot },
["damage with ignite"] = { "Damage", keywordFlags = KeywordFlag.Ignite },
["damage with ignites"] = { "Damage", keywordFlags = KeywordFlag.Ignite },
["damage with ignites inflicted"] = { "Damage", keywordFlags = KeywordFlag.Ignite },
["incinerate damage for each stage"] = { "Damage", tagList = { { type = "Multiplier", var = "IncinerateStage" }, { type = "SkillName", skillName = "Incinerate" } } },
["physical damage over time multiplier"] = "PhysicalDotMultiplier",
["fire damage over time multiplier"] = "FireDotMultiplier",
["cold damage over time multiplier"] = "ColdDotMultiplier",
["chaos damage over time multiplier"] = "ChaosDotMultiplier",
["damage over time multiplier"] = "DotMultiplier",
-- Crit/accuracy/speed modifiers
["critical strike chance"] = "CritChance",
["attack critical strike chance"] = { "CritChance", flags = ModFlag.Attack },
["critical strike multiplier"] = "CritMultiplier",
["attack critical strike multiplier"] = { "CritMultiplier", flags = ModFlag.Attack },
["accuracy"] = "Accuracy",
["accuracy rating"] = "Accuracy",
["minion accuracy rating"] = { "Accuracy", addToMinion = true },
["attack speed"] = { "Speed", flags = ModFlag.Attack },
["cast speed"] = { "Speed", flags = ModFlag.Cast },
["warcry speed"] = { "WarcrySpeed", keywordFlags = KeywordFlag.Warcry },
["attack and cast speed"] = "Speed",
["dps"] = "DPS",
-- Elemental ailments
["to shock"] = "EnemyShockChance",
["shock chance"] = "EnemyShockChance",
["to freeze"] = "EnemyFreezeChance",
["freeze chance"] = "EnemyFreezeChance",
["to ignite"] = "EnemyIgniteChance",
["ignite chance"] = "EnemyIgniteChance",
["to freeze, shock and ignite"] = { "EnemyFreezeChance", "EnemyShockChance", "EnemyIgniteChance" },
["to scorch enemies"] = "EnemyScorchChance",
["to inflict brittle"] = "EnemyBrittleChance",
["to sap enemies"] = "EnemySapChance",
["effect of scorch"] = "EnemyScorchEffect",
["effect of sap"] = "EnemySapEffect",
["effect of brittle"] = "EnemyBrittleEffect",
["effect of shock"] = "EnemyShockEffect",
["effect of shock on you"] = "SelfShockEffect",
["effect of shock you inflict"] = "EnemyShockEffect",
["effect of shocks you inflict"] = "EnemyShockEffect",
["effect of lightning ailments"] = { "EnemyShockEffect" , "EnemySapEffect" },
["effect of chill"] = "EnemyChillEffect",
["effect of chill and shock on you"] = { "SelfChillEffect", "SelfShockEffect" },
["chill effect"] = "EnemyChillEffect",
["effect of chill you inflict"] = "EnemyChillEffect",
["effect of cold ailments"] = { "EnemyChillEffect" , "EnemyBrittleEffect" },
["effect of chill on you"] = "SelfChillEffect",
["effect of non-damaging ailments"] = { "EnemyShockEffect", "EnemyChillEffect", "EnemyFreezeEffect", "EnemyScorchEffect", "EnemyBrittleEffect", "EnemySapEffect" },
["effect of non-damaging ailments you inflict"] = { "EnemyShockEffect", "EnemyChillEffect", "EnemyFreezeEffect", "EnemyScorchEffect", "EnemyBrittleEffect", "EnemySapEffect" },
["shock duration"] = "EnemyShockDuration",
["duration of shocks you inflict"] = "EnemyShockDuration",
["shock duration on you"] = "SelfShockDuration",
["duration of lightning ailments"] = { "EnemyShockDuration" , "EnemySapDuration" },
["freeze duration"] = "EnemyFreezeDuration",
["duration of freezes you inflict"] = "EnemyFreezeDuration",
["freeze duration on you"] = "SelfFreezeDuration",
["chill duration"] = "EnemyChillDuration",
["duration of chills you inflict"] = "EnemyChillDuration",
["chill duration on you"] = "SelfChillDuration",
["duration of cold ailments"] = { "EnemyFreezeDuration" , "EnemyChillDuration", "EnemyBrittleDuration" },
["ignite duration"] = "EnemyIgniteDuration",
["duration of ignites you inflict"] = "EnemyIgniteDuration",
["ignite duration on you"] = "SelfIgniteDuration",
["duration of ignite on you"] = "SelfIgniteDuration",
["duration of elemental ailments"] = "EnemyElementalAilmentDuration",
["duration of elemental ailments on you"] = "SelfElementalAilmentDuration",
["duration of elemental status ailments"] = "EnemyElementalAilmentDuration",
["duration of ailments"] = "EnemyAilmentDuration",
["duration of ailments on you"] = "SelfAilmentDuration",
["elemental ailment duration on you"] = "SelfElementalAilmentDuration",
["duration of ailments you inflict"] = "EnemyAilmentDuration",
["duration of ailments inflicted"] = "EnemyAilmentDuration",
["duration of ailments inflicted on you"] = "SelfAilmentDuration",
["duration of damaging ailments on you"] = { "SelfIgniteDuration" , "SelfBleedDuration", "SelfPoisonDuration" },
-- Other ailments
["to poison"] = "PoisonChance",
["to cause poison"] = "PoisonChance",
["to poison on hit"] = "PoisonChance",
["poison duration"] = { "EnemyPoisonDuration" },
["poison duration on you"] = "SelfPoisonDuration",
["duration of poisons on you"] = "SelfPoisonDuration",
["duration of poisons you inflict"] = { "EnemyPoisonDuration" },
["to cause bleeding"] = "BleedChance",
["to cause bleeding on hit"] = "BleedChance",
["to inflict bleeding"] = "BleedChance",
["to inflict bleeding on hit"] = "BleedChance",
["bleed duration"] = { "EnemyBleedDuration" },
["bleeding duration"] = { "EnemyBleedDuration" },
["bleed duration on you"] = "SelfBleedDuration",
-- Misc modifiers
["movement speed"] = "MovementSpeed",
["attack, cast and movement speed"] = { "Speed", "MovementSpeed" },
["action speed"] = "ActionSpeed",
["light radius"] = "LightRadius",
["rarity of items found"] = "LootRarity",
["rarity of items dropped"] = "LootRarity",
["quantity of items found"] = "LootQuantity",
["item quantity"] = "LootQuantity",
["strength requirement"] = "StrRequirement",
["dexterity requirement"] = "DexRequirement",
["intelligence requirement"] = "IntRequirement",
["omni requirement"] = "OmniRequirement",
["strength and intelligence requirement"] = { "StrRequirement", "IntRequirement" },
["attribute requirements"] = { "StrRequirement", "DexRequirement", "IntRequirement" },
["effect of socketed jewels"] = "SocketedJewelEffect",
["effect of socketed abyss jewels"] = "SocketedJewelEffect",
["to inflict fire exposure on hit"] = "FireExposureChance",
["to apply fire exposure on hit"] = "FireExposureChance",
["to inflict cold exposure on hit"] = "ColdExposureChance",
["to apply cold exposure on hit"] = "ColdExposureChance",
["to inflict lightning exposure on hit"] = "LightningExposureChance",
["to apply lightning exposure on hit"] = "LightningExposureChance",
-- Flask modifiers
["effect"] = "FlaskEffect",
["effect of flasks"] = "FlaskEffect",
["amount recovered"] = "FlaskRecovery",
["life recovered"] = "FlaskRecovery",
["life recovery from flasks used"] = "FlaskLifeRecovery",
["mana recovered"] = "FlaskRecovery",
["life recovery from flasks"] = "FlaskLifeRecovery",
["mana recovery from flasks"] = "FlaskManaRecovery",
["life and mana recovery from flasks"] = { "FlaskLifeRecovery", "FlaskManaRecovery" },
["flask effect duration"] = "FlaskDuration",
["recovery speed"] = "FlaskRecoveryRate",
["recovery rate"] = "FlaskRecoveryRate",
["flask recovery rate"] = "FlaskRecoveryRate",
["flask recovery speed"] = "FlaskRecoveryRate",
["flask life recovery rate"] = "FlaskLifeRecoveryRate",
["flask mana recovery rate"] = "FlaskManaRecoveryRate",
["extra charges"] = "FlaskCharges",
["maximum charges"] = "FlaskCharges",
["charges used"] = "FlaskChargesUsed",
["charges per use"] = "FlaskChargesUsed",
["flask charges used"] = "FlaskChargesUsed",
["flask charges gained"] = "FlaskChargesGained",
["charge recovery"] = "FlaskChargeRecovery",
["for flasks you use to not consume charges"] = "FlaskChanceNotConsumeCharges",
["impales you inflict last"] = "ImpaleStacksMax",
-- Buffs
["adrenaline"] = "Condition:Adrenaline",
["elusive"] = "Condition:CanBeElusive",
["onslaught"] = "Condition:Onslaught",
["rampage"] = "Condition:Rampage",
["soul eater"] = "Condition:CanHaveSoulEater",
["phasing"] = "Condition:Phasing",
["arcane surge"] = "Condition:ArcaneSurge",
["unholy might"] = { "Condition:UnholyMight", "Condition:CanWither" },
["chaotic might"] = "Condition:ChaoticMight",
["lesser brutal shrine buff"] = "Condition:LesserBrutalShrine",
["lesser massive shrine buff"] = "Condition:LesserMassiveShrine",
["diamond shrine buff"] = "Condition:DiamondShrine",
["massive shrine buff"] = "Condition:MassiveShrine",
}
-- List of modifier flags
local modFlagList = {
-- Weapon types
["with axes"] = { flags = bor(ModFlag.Axe, ModFlag.Hit) },
["to axe attacks"] = { flags = bor(ModFlag.Axe, ModFlag.Hit) },
["with axe attacks"] = { flags = bor(ModFlag.Axe, ModFlag.Hit) },
["with axes or swords"] = { flags = ModFlag.Hit, tag = { type = "ModFlagOr", modFlags = bor(ModFlag.Axe, ModFlag.Sword) } },
["with bows"] = { flags = bor(ModFlag.Bow, ModFlag.Hit) },
["to bow attacks"] = { flags = bor(ModFlag.Bow, ModFlag.Hit) },
["with bow attacks"] = { flags = bor(ModFlag.Bow, ModFlag.Hit) },
["with claws"] = { flags = bor(ModFlag.Claw, ModFlag.Hit) },
["with claws or daggers"] = { flags = ModFlag.Hit, tag = { type = "ModFlagOr", modFlags = bor(ModFlag.Claw, ModFlag.Dagger) } },
["to claw attacks"] = { flags = bor(ModFlag.Claw, ModFlag.Hit) },
["with claw attacks"] = { flags = bor(ModFlag.Claw, ModFlag.Hit) },
["claw attacks"] = { flags = bor(ModFlag.Claw, ModFlag.Hit) },
["dealt with claws"] = { flags = bor(ModFlag.Claw, ModFlag.Hit) },
["with daggers"] = { flags = bor(ModFlag.Dagger, ModFlag.Hit) },
["to dagger attacks"] = { flags = bor(ModFlag.Dagger, ModFlag.Hit) },
["with dagger attacks"] = { flags = bor(ModFlag.Dagger, ModFlag.Hit) },
["with maces"] = { flags = bor(ModFlag.Mace, ModFlag.Hit) },
["to mace attacks"] = { flags = bor(ModFlag.Mace, ModFlag.Hit) },
["with mace attacks"] = { flags = bor(ModFlag.Mace, ModFlag.Hit) },
["with maces and sceptres"] = { flags = bor(ModFlag.Mace, ModFlag.Hit) },
["with maces or sceptres"] = { flags = bor(ModFlag.Mace, ModFlag.Hit) },
["with maces, sceptres or staves"] = { flags = ModFlag.Hit, tag = { type = "ModFlagOr", modFlags = bor(ModFlag.Mace, ModFlag.Staff) } },
["to mace and sceptre attacks"] = { flags = bor(ModFlag.Mace, ModFlag.Hit) },
["to mace or sceptre attacks"] = { flags = bor(ModFlag.Mace, ModFlag.Hit) },
["with mace or sceptre attacks"] = { flags = bor(ModFlag.Mace, ModFlag.Hit) },
["with staves"] = { flags = bor(ModFlag.Staff, ModFlag.Hit) },
["to staff attacks"] = { flags = bor(ModFlag.Staff, ModFlag.Hit) },
["with staff attacks"] = { flags = bor(ModFlag.Staff, ModFlag.Hit) },
["with swords"] = { flags = bor(ModFlag.Sword, ModFlag.Hit) },
["to sword attacks"] = { flags = bor(ModFlag.Sword, ModFlag.Hit) },
["with sword attacks"] = { flags = bor(ModFlag.Sword, ModFlag.Hit) },
["with wands"] = { flags = bor(ModFlag.Wand, ModFlag.Hit) },
["to wand attacks"] = { flags = bor(ModFlag.Wand, ModFlag.Hit) },
["with wand attacks"] = { flags = bor(ModFlag.Wand, ModFlag.Hit) },
["unarmed"] = { flags = bor(ModFlag.Unarmed, ModFlag.Hit) },
["unarmed melee"] = { flags = bor(ModFlag.Unarmed, ModFlag.Melee, ModFlag.Hit) },
["with unarmed attacks"] = { flags = bor(ModFlag.Unarmed, ModFlag.Hit) },
["with unarmed melee attacks"] = { flags = bor(ModFlag.Unarmed, ModFlag.Melee) },
["to unarmed attacks"] = { flags = bor(ModFlag.Unarmed, ModFlag.Hit) },
["to unarmed melee hits"] = { flags = bor(ModFlag.Unarmed, ModFlag.Melee, ModFlag.Hit) },
["with one handed weapons"] = { flags = bor(ModFlag.Weapon1H, ModFlag.Hit) },
["with one handed melee weapons"] = { flags = bor(ModFlag.Weapon1H, ModFlag.WeaponMelee, ModFlag.Hit) },
["with two handed weapons"] = { flags = bor(ModFlag.Weapon2H, ModFlag.Hit) },
["with two handed melee weapons"] = { flags = bor(ModFlag.Weapon2H, ModFlag.WeaponMelee, ModFlag.Hit) },
["with ranged weapons"] = { flags = bor(ModFlag.WeaponRanged, ModFlag.Hit) },
-- Skill types
["spell"] = { flags = ModFlag.Spell },
["for spells"] = { flags = ModFlag.Spell },
["for spell damage"] = { flags = ModFlag.Spell },
["with spell damage"] = { flags = ModFlag.Spell },
["with spells"] = { keywordFlags = KeywordFlag.Spell },
["with triggered spells"] = { keywordFlags = KeywordFlag.Spell, tag = { type = "SkillType", skillType = SkillType.Triggered } },
["by spells"] = { keywordFlags = KeywordFlag.Spell },
["by your spells"] = { keywordFlags = KeywordFlag.Spell },
["with attacks"] = { keywordFlags = KeywordFlag.Attack },
["by attacks"] = { keywordFlags = KeywordFlag.Attack },
["by your attacks"] = { keywordFlags = KeywordFlag.Attack },
["with attack skills"] = { keywordFlags = KeywordFlag.Attack },
["for attacks"] = { flags = ModFlag.Attack },
["for attack damage"] = { flags = ModFlag.Attack },
["weapon"] = { flags = ModFlag.Weapon },
["with weapons"] = { flags = ModFlag.Weapon },
["melee"] = { flags = ModFlag.Melee },
["with melee attacks"] = { flags = ModFlag.Melee },
["with melee critical strikes"] = { flags = ModFlag.Melee, tag = { type = "Condition", var = "CriticalStrike" } },
["with melee skills"] = { flags = ModFlag.Melee },
["with bow skills"] = { keywordFlags = KeywordFlag.Bow },
["on melee hit"] = { flags = bor(ModFlag.Melee, ModFlag.Hit) },
["on hit"] = { flags = ModFlag.Hit },
["with hits"] = { keywordFlags = KeywordFlag.Hit },
["with hits against nearby enemies"] = { keywordFlags = KeywordFlag.Hit },
["with hits and ailments"] = { keywordFlags = bor(KeywordFlag.Hit, KeywordFlag.Ailment) },
["with ailments"] = { flags = ModFlag.Ailment },
["with ailments from attack skills"] = { flags = ModFlag.Ailment, keywordFlags = KeywordFlag.Attack },
["with poison"] = { keywordFlags = KeywordFlag.Poison },
["with bleeding"] = { keywordFlags = KeywordFlag.Bleed },
["for ailments"] = { flags = ModFlag.Ailment },
["for poison"] = { keywordFlags = bor(KeywordFlag.Poison, KeywordFlag.MatchAll) },
["for bleeding"] = { keywordFlags = KeywordFlag.Bleed },
["for ignite"] = { keywordFlags = KeywordFlag.Ignite },
["against damage over time"] = { flags = ModFlag.Dot },
["area"] = { flags = ModFlag.Area },
["mine"] = { keywordFlags = KeywordFlag.Mine },
["with mines"] = { keywordFlags = KeywordFlag.Mine },
["trap"] = { keywordFlags = KeywordFlag.Trap },
["with traps"] = { keywordFlags = KeywordFlag.Trap },
["for traps"] = { keywordFlags = KeywordFlag.Trap },
["that place mines or throw traps"] = { keywordFlags = bor(KeywordFlag.Mine, KeywordFlag.Trap) },
["that throw mines"] = { keywordFlags = KeywordFlag.Mine },
["that throw traps"] = { keywordFlags = KeywordFlag.Trap },
["brand"] = { tag = { type = "SkillType", skillType = SkillType.Brand } },
["totem"] = { keywordFlags = KeywordFlag.Totem },
["with totem skills"] = { keywordFlags = KeywordFlag.Totem },
["for skills used by totems"] = { keywordFlags = KeywordFlag.Totem },
["totem skills that cast an aura"] = { tag = { type = "SkillType", skillType = SkillType.Aura }, keywordFlags = KeywordFlag.Totem },
["aura skills that summon totems"] = { tag = { type = "SkillType", skillType = SkillType.Aura }, keywordFlags = KeywordFlag.Totem },
["of aura skills"] = { tag = { type = "SkillType", skillType = SkillType.Aura } },
["curse skills"] = { keywordFlags = KeywordFlag.Curse },
["of curse skills"] = { keywordFlags = KeywordFlag.Curse },
["with curse skills"] = { keywordFlags = KeywordFlag.Curse },
["of curse aura skills"] = { tag = { type = "SkillType", skillType = SkillType.Aura }, keywordFlags = KeywordFlag.Curse },
["of curse auras"] = { keywordFlags = bor(KeywordFlag.Curse, KeywordFlag.Aura, KeywordFlag.MatchAll) },
["of hex skills"] = { tag = { type = "SkillType", skillType = SkillType.Hex } },
["with hex skills"] = { tag = { type = "SkillType", skillType = SkillType.Hex } },
["of herald skills"] = { tag = { type = "SkillType", skillType = SkillType.Herald } },
["with herald skills"] = { tag = { type = "SkillType", skillType = SkillType.Herald } },
["with hits from herald skills"] = { tag = { type = "SkillType", skillType = SkillType.Herald }, keywordFlags = KeywordFlag.Hit },
["minion skills"] = { tag = { type = "SkillType", skillType = SkillType.Minion } },
["of minion skills"] = { tag = { type = "SkillType", skillType = SkillType.Minion } },
["link skills"] = { tag = { type = "SkillType", skillType = SkillType.Link } },
["of link skills"] = { tag = { type = "SkillType", skillType = SkillType.Link } },
["for curses"] = { keywordFlags = KeywordFlag.Curse },
["for hexes"] = { tag = { type = "SkillType", skillType = SkillType.Hex } },
["warcry"] = { keywordFlags = KeywordFlag.Warcry },
["vaal"] = { keywordFlags = KeywordFlag.Vaal },
["vaal skill"] = { keywordFlags = KeywordFlag.Vaal },
["with vaal skills"] = { keywordFlags = KeywordFlag.Vaal },
["with non-vaal skills"] = { tag = { type = "SkillType", skillType = SkillType.Vaal, neg = true } },
["with movement skills"] = { keywordFlags = KeywordFlag.Movement },
["of movement skills"] = { keywordFlags = KeywordFlag.Movement },
["of movement skills used"] = { keywordFlags = KeywordFlag.Movement },
["of travel skills"] = { tag = { type = "SkillType", skillType = SkillType.Travel } },
["of banner skills"] = { tag = { type = "SkillType", skillType = SkillType.Banner } },
["with lightning skills"] = { keywordFlags = KeywordFlag.Lightning },
["with cold skills"] = { keywordFlags = KeywordFlag.Cold },
["with fire skills"] = { keywordFlags = KeywordFlag.Fire },
["with elemental skills"] = { keywordFlags = bor(KeywordFlag.Lightning, KeywordFlag.Cold, KeywordFlag.Fire) },
["with chaos skills"] = { keywordFlags = KeywordFlag.Chaos },
["with physical skills"] = { keywordFlags = KeywordFlag.Physical },
["with channelling skills"] = { tag = { type = "SkillType", skillType = SkillType.Channel } },
["channelling"] = { tag = { type = "SkillType", skillType = SkillType.Channel } },
["channelling skills"] = { tag = { type = "SkillType", skillType = SkillType.Channel } },
["non-channelling"] = { tag = { type = "SkillType", skillType = SkillType.Channel, neg = true } },
["non-channelling skills"] = { tag = { type = "SkillType", skillType = SkillType.Channel, neg = true } },
["with brand skills"] = { tag = { type = "SkillType", skillType = SkillType.Brand } },
["for stance skills"] = { tag = { type = "SkillType", skillType = SkillType.Stance } },
["of stance skills"] = { tag = { type = "SkillType", skillType = SkillType.Stance } },
["mark skills"] = { tag = { type = "SkillType", skillType = SkillType.Mark } },
["of mark skills"] = { tag = { type = "SkillType", skillType = SkillType.Mark } },
["with skills that cost life"] = { tag = { type = "StatThreshold", stat = "LifeCost", threshold = 1 } },
["minion"] = { addToMinion = true },
["zombie"] = { addToMinion = true, addToMinionTag = { type = "SkillName", skillName = "Raise Zombie", includeTransfigured = true } },
["raised zombie"] = { addToMinion = true, addToMinionTag = { type = "SkillName", skillName = "Raise Zombie", includeTransfigured = true } },
["skeleton"] = { addToMinion = true, addToMinionTag = { type = "SkillName", skillName = "Summon Skeletons", includeTransfigured = true } },
["spectre"] = { addToMinion = true, addToMinionTag = { type = "SkillName", skillName = "Raise Spectre", includeTransfigured = true } },
["raised spectre"] = { addToMinion = true, addToMinionTag = { type = "SkillName", skillName = "Raise Spectre", includeTransfigured = true } },
["golem"] = { addToMinion = true, addToMinionTag = { type = "SkillType", skillType = SkillType.Golem } },
["chaos golem"] = { addToMinion = true, addToMinionTag = { type = "SkillName", skillName = "Summon Chaos Golem", includeTransfigured = true } },
["flame golem"] = { addToMinion = true, addToMinionTag = { type = "SkillName", skillName = "Summon Flame Golem", includeTransfigured = true } },
["increased flame golem"] = { addToMinion = true, addToMinionTag = { type = "SkillName", skillName = "Summon Flame Golem", includeTransfigured = true } },
["ice golem"] = { addToMinion = true, addToMinionTag = { type = "SkillName", skillName = "Summon Ice Golem", includeTransfigured = true } },
["lightning golem"] = { addToMinion = true, addToMinionTag = { type = "SkillName", skillName = "Summon Lightning Golem", includeTransfigured = true } },
["stone golem"] = { addToMinion = true, addToMinionTag = { type = "SkillName", skillName = "Summon Stone Golem", includeTransfigured = true } },
["animated guardian"] = { addToMinion = true, addToMinionTag = { type = "SkillName", skillName = "Animate Guardian", includeTransfigured = true } },
-- Damage types
["with physical damage"] = { tag = { type = "Condition", var = "PhysicalHasDamage" } },
["with lightning damage"] = { tag = { type = "Condition", var = "LightningHasDamage" } },
["with cold damage"] = { tag = { type = "Condition", var = "ColdHasDamage" } },
["with fire damage"] = { tag = { type = "Condition", var = "FireHasDamage" } },
["with chaos damage"] = { tag = { type = "Condition", var = "ChaosHasDamage" } },
-- Other
["global"] = { tag = { type = "Global" } },
["from equipped shield"] = { tag = { type = "SlotName", slotName = "Weapon 2" } },
["from equipped helmet"] = { tag = { type = "SlotName", slotName = "Helmet" } },
["from equipped gloves and boots"] = { tag = { type = "SlotName", slotNameList = { "Gloves", "Boots" } } },
["from equipped boots and gloves"] = { tag = { type = "SlotName", slotNameList = { "Gloves", "Boots" } } },
["from equipped helmet and gloves"] = { tag = { type = "SlotName", slotNameList = { "Helmet", "Gloves" } } },
["from equipped helmet and boots"] = { tag = { type = "SlotName", slotNameList = { "Helmet", "Boots" } } },
["from your equipped body armour"] = { tag = { type = "SlotName", slotName = "Body Armour" } },
["from equipped body armour"] = { tag = { type = "SlotName", slotName = "Body Armour" } },
["from body armour"] = { tag = { type = "SlotName", slotName = "Body Armour" } },
["from your body armour"] = { tag = { type = "SlotName", slotName = "Body Armour" } },
}
-- List of modifier flags/tags that appear at the start of a line
local preFlagList = {
-- Weapon types
["^axe attacks [hd][ae][va][el] "] = { flags = ModFlag.Axe },
["^axe or sword attacks [hd][ae][va][el] "] = { tag = { type = "ModFlagOr", modFlags = bor(ModFlag.Axe, ModFlag.Sword) } },
["^bow attacks [hd][ae][va][el] "] = { flags = ModFlag.Bow },
["^claw attacks [hd][ae][va][el] "] = { flags = ModFlag.Claw },
["^claw or dagger attacks [hd][ae][va][el] "] = { tag = { type = "ModFlagOr", modFlags = bor(ModFlag.Claw, ModFlag.Dagger) } },
["^dagger attacks [hd][ae][va][el] "] = { flags = ModFlag.Dagger },
["^mace or sceptre attacks [hd][ae][va][el] "] = { flags = ModFlag.Mace },
["^mace, sceptre or staff attacks [hd][ae][va][el] "] = { tag = { type = "ModFlagOr", modFlags = bor(ModFlag.Mace, ModFlag.Staff) } },
["^staff attacks [hd][ae][va][el] "] = { flags = ModFlag.Staff },
["^sword attacks [hd][ae][va][el] "] = { flags = ModFlag.Sword },
["^wand attacks [hd][ae][va][el] "] = { flags = ModFlag.Wand },
["^unarmed attacks [hd][ae][va][el] "] = { flags = ModFlag.Unarmed },
["^attacks with one handed weapons [hd][ae][va][el] "] = { flags = ModFlag.Weapon1H },
["^attacks with two handed weapons [hd][ae][va][el] "] = { flags = ModFlag.Weapon2H },
["^attacks with melee weapons [hd][ae][va][el] "] = { flags = ModFlag.WeaponMelee },
["^attacks with one handed melee weapons [hd][ae][va][el] "] = { flags = bor(ModFlag.Weapon1H, ModFlag.WeaponMelee) },
["^attacks with two handed melee weapons [hd][ae][va][el] "] = { flags = bor(ModFlag.Weapon2H, ModFlag.WeaponMelee) },
["^attacks with ranged weapons [hd][ae][va][el] "] = { flags = ModFlag.WeaponRanged },
-- Damage types
["^attack damage "] = { flags = ModFlag.Attack },
["^hits deal "] = { keywordFlags = KeywordFlag.Hit },
["^deal "] = { },
["^arrows deal "] = { flags = ModFlag.Bow },
["^critical strikes deal "] = { tag = { type = "Condition", var = "CriticalStrike" } },
["^poisons you inflict with critical strikes have "] = { keywordFlags = bor(KeywordFlag.Poison, KeywordFlag.MatchAll), tag = { type = "Condition", var = "CriticalStrike" } },
-- Add to minion
["^minions "] = { addToMinion = true },
["^minions [hd][ae][va][el] "] = { addToMinion = true },
["^while a unique enemy is in your presence, minions [hd][ae][va][el] "] = { addToMinion = true, playerTag = { type = "ActorCondition", actor = "enemy", var = "RareOrUnique" } },
["^while a pinnacle atlas boss is in your presence, minions [hd][ae][va][el] "] = { addToMinion = true, playerTag = { type = "ActorCondition", actor = "enemy", var = "PinnacleBoss" } },
["^minions leech "] = { addToMinion = true },
["^minions' attacks deal "] = { addToMinion = true, flags = ModFlag.Attack },
["^golems [hd][ae][va][el] "] = { addToMinion = true, addToMinionTag = { type = "SkillType", skillType = SkillType.Golem } },