Compare commits
48 Commits
main
...
899bed1b1c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
899bed1b1c | ||
|
|
3219e9c851 | ||
|
|
a52ef1fe63 | ||
|
|
e7e82817c4 | ||
|
|
2a899bdfb2 | ||
|
|
9408f1f980 | ||
|
|
bce4d07041 | ||
|
|
439bf27cb2 | ||
|
|
c2be2c1816 | ||
|
|
63e001982c | ||
|
|
15f204e2ff | ||
|
|
340189b2b2 | ||
|
|
1e3cd850d8 | ||
|
|
c4efbdfcf1 | ||
|
|
e8a41dc79c | ||
|
|
41abbe5217 | ||
|
|
7ba04695d8 | ||
|
|
38a4862893 | ||
|
|
a0a2a67e60 | ||
|
|
17ced44504 | ||
|
|
450fccb5e9 | ||
|
|
28da1b9a35 | ||
|
|
b6fbaa7acf | ||
|
|
b0b0d2720a | ||
|
|
666a16813e | ||
|
|
aec833c636 | ||
|
|
88548e97fc | ||
|
|
e1679a2d11 | ||
|
|
aa4a6f02a9 | ||
|
|
8c8f62f7a1 | ||
|
|
db3f190727 | ||
|
|
2563858a3b | ||
|
|
21cfba7a22 | ||
|
|
070e47e460 | ||
|
|
094eda658f | ||
|
|
839b04fd89 | ||
|
|
deb8c37b55 | ||
|
|
3c36d2d1ad | ||
|
|
fea62bbe31 | ||
|
|
4381127bb9 | ||
|
|
70da1d7a16 | ||
|
|
eaf784ef7a | ||
|
|
8173a628b2 | ||
|
|
be3ea9e419 | ||
|
|
cb9d60deb5 | ||
|
|
0456a518f3 | ||
|
|
dd642512b0 | ||
|
|
9840b0c026 |
@@ -145,20 +145,20 @@ fetish2 142 fetish1 fetish3 1 Fetish fetish2 fetish Fetish FE 1 fetish2
|
||||
fetish3 143 fetish1 fetish4 2 Flayer fetish3 fetish Fetish FE 1 fetish3 1 1 1 3 1 3 8 8 1 22 50 80 fetish fetish 10 15 14 13 100 100 100 10 9 8 4 4 4 33 33 33 1 1 1 1 1 1 1 SkeletonRaise seq_fethisraise 1 100 100 100 -50 -40 -33 33 33 100 50 2 22 22 22 5 66 107 85 79 72 108 94 55 80 125 75 60 95 95 55 80 125 75 60 95 95 Act 3 H2H A Act 3 Champ A Act 3 Unique A Act 3 (N) H2H A Act 3 (N) Champ A Act 3 (N) Unique A Act 3 (H) H2H A Act 3 (H) Champ A Act 3 (H) Unique A Act 3 (H) Champ A Desecrated Act 3 (H) Unique A Desecrated Act 3 (H) Herald A 0
|
||||
fetish4 144 fetish1 fetish5 3 SoulKiller fetish4 fetish Fetish FE 1 fetish4 1 1 2 3 2 3 9 9 1 23 51 81 fetish fetish 10 15 14 13 100 100 100 10 9 8 4 4 4 33 33 33 1 1 1 1 1 1 1 SkeletonRaise seq_fethisraise 1 100 100 100 -50 -40 -33 33 110 33 50 2 23 23 23 5 65 107 85 79 67 107 92 55 80 125 75 60 95 95 55 80 125 75 60 95 95 Act 3 H2H B Act 3 Champ B Act 3 Unique B Act 3 (N) H2H B Act 3 (N) Champ B Act 3 (N) Unique B Act 3 (H) H2H B Act 3 (H) Champ B Act 3 (H) Unique B Act 3 (H) Champ B Desecrated Act 3 (H) Unique B Desecrated Act 3 (H) Herald B 0
|
||||
fetish5 145 fetish1 fetish6 4 StygianDoll fetish5 fetish Fetish FE 1 fetish5 1 1 2 4 2 4 10 10 1 24 54 83 fetish fetish 10 15 14 13 100 100 100 10 9 8 4 4 4 33 33 33 1 1 1 1 1 1 1 SkeletonRaise seq_fethisraise 1 100 100 100 -50 -40 -33 100 33 33 50 2 24 24 24 5 65 107 85 79 69 101 92 55 80 125 75 60 95 95 55 80 125 75 60 95 95 Act 3 H2H B Act 3 Champ B Act 3 Unique B Act 3 (N) H2H B Act 3 (N) Champ B Act 3 (N) Unique B Act 3 (H) H2H B Act 3 (H) Champ B Act 3 (H) Unique B Act 3 (H) Champ B Desecrated Act 3 (H) Unique B Desecrated Act 3 (H) Herald B 0
|
||||
cain1 146 cain1 0 DeckardCain cain1 human NpcOutOfTown DC 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
gheed 147 gheed 0 Gheed gheed human Npc GH 1 1 1 4 4 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
akara 148 akara 0 Akara akara human Npc PS 1 1 1 1 1 0 lightnpc lightnpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
chicken 149 chicken 0 dummy chicken Idle CK 1 3 3 2 2 0 chicken chicken 15 15 15 1 1 1 2 0
|
||||
kashya 150 kashya 0 Kashya kashya human Npc RC 1 1 1 3 3 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
rat 151 rat 0 dummy rat Idle RT 1 4 4 5 5 0 rat rat 15 15 15 1 1 1 1 1 2 0
|
||||
rogue1 152 rogue1 0 Dummy rogue1 human Idle RG 1 1 1 8 8 0 act1hire act1hire 10 15 15 15 rogue1 1 1 1 1 1 1 100 100 100 -50 -50 -50 2 75 75 75 5 142 284 84 180 210 150 180 210 150 0
|
||||
cain1 146 cain1 0 DeckardCain cain1 human NpcOutOfTown DC 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
gheed 147 gheed 0 Gheed gheed human Npc GH 1 1 1 4 4 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 1 2 0
|
||||
akara 148 akara 0 Akara akara human Npc PS 1 1 1 1 1 0 lightnpc lightnpc 15 15 15 1 1 1 1 1 1 1 1 1 2 0
|
||||
chicken 149 chicken 0 dummy chicken Idle CK 1 3 3 2 2 0 chicken chicken 15 15 15 1 1 1 1 2 0
|
||||
kashya 150 kashya 0 Kashya kashya human Npc RC 1 1 1 3 3 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
rat 151 rat 0 dummy rat Idle RT 1 4 4 5 5 0 rat rat 15 15 15 1 1 1 1 1 1 2 0
|
||||
rogue1 152 rogue1 0 Dummy rogue1 human Idle RG 1 1 1 8 8 0 act1hire act1hire 10 15 15 15 rogue1 1 1 1 1 1 1 1 100 100 100 -50 -50 -50 2 75 75 75 5 142 284 84 180 210 150 180 210 150 0
|
||||
hellmeteor 153 hellmeteor 0 Dummy hellmeteor HellMeteor K9 1 1 1 0 0 0 0 33 66 15 15 15 50 60 70 50 50 50 10 10 10 1 1 HellMeteor A1 1 2 0
|
||||
charsi 154 charsi 0 Charsi charsi human Npc CI 1 1 1 4 4 0 charsi charsi 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
warriv1 155 warriv1 0 Warriv warriv1 human Npc WA 1 1 1 3 3 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
andariel 156 andariel 0 Andariel andariel demon Andariel AN 1 1 1 8 8 0 12 49 75 andariel andariel 14 15 11 9 30 35 35 10 8 6 30 32 34 50 55 60 1 1 1 1 1 AndrialSpray seq_andarielspray 1 AndyPoisonBolt A1 1 100 66 33 -25 -15 0 -50 50 50 80 -50 50 50 50 66 -50 66 66 66 0 1 0 20 40 5 2562 2562 84 916 76 238 153 2562 2562 110 1492 180 220 200 1193 1193 110 1492 180 220 470 A1 pois 100 33 33 30 100 60 33 33 100 33 33 225 Andarielq Andarielq Andarielq Andarielq Andarielq Desecrated A Andarielq Desecrated A Andarielq Desecrated A Andarielq (N) Andarielq (N) Andarielq (N) Andarielq (N) Andarielq (N) Desecrated A Andarielq (N) Desecrated A Andarielq (N) Desecrated A Andarielq (H) Andarielq (H) Andarielq (H) Andarielq (H) Andarielq (H) Desecrated A Andarielq (H) Desecrated A Andarielq (H) Desecrated A 6 1 0
|
||||
bird1 157 bird1 0 dummy bird1 Idle BS 1 1 1 7 7 1 15 15 15 1 1 1 1 1 2 0
|
||||
bird2 158 bird2 0 dummy bird2 Idle BL 1 1 1 4 4 1 15 15 15 1 1 1 1 1 2 0
|
||||
bat 159 bat 0 dummy bat Idle B9 1 1 3 7 7 1 bat bat 15 15 15 1 1 1 1 2 0
|
||||
charsi 154 charsi 0 Charsi charsi human Npc CI 1 1 1 4 4 0 charsi charsi 15 15 15 1 1 1 1 1 1 1 1 1 2 0
|
||||
warriv1 155 warriv1 0 Warriv warriv1 human Npc WA 1 1 1 3 3 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 1 2 0
|
||||
andariel 156 andariel 0 Andariel andariel demon Andariel AN 1 1 1 8 8 0 12 49 75 andariel andariel 14 15 11 9 30 35 35 10 8 6 30 32 34 50 55 60 1 1 1 1 1 1 AndrialSpray seq_andarielspray 1 AndyPoisonBolt A1 1 100 66 33 -25 -15 0 -50 50 50 80 -50 50 50 50 66 -50 66 66 66 0 1 0 20 40 5 2562 2562 84 916 76 238 153 2562 2562 110 1492 180 220 200 1193 1193 110 1492 180 220 470 A1 pois 100 33 33 30 100 60 33 33 100 33 33 225 Andarielq Andarielq Andarielq Andarielq Andarielq Desecrated A Andarielq Desecrated A Andarielq Desecrated A Andarielq (N) Andarielq (N) Andarielq (N) Andarielq (N) Andarielq (N) Desecrated A Andarielq (N) Desecrated A Andarielq (N) Desecrated A Andarielq (H) Andarielq (H) Andarielq (H) Andarielq (H) Andarielq (H) Desecrated A Andarielq (H) Desecrated A Andarielq (H) Desecrated A 6 1 0
|
||||
bird1 157 bird1 0 dummy bird1 Idle BS 1 1 1 7 7 1 15 15 15 1 1 1 1 1 1 2 0
|
||||
bird2 158 bird2 0 dummy bird2 Idle BL 1 1 1 4 4 1 15 15 15 1 1 1 1 1 1 2 0
|
||||
bat 159 bat 0 dummy bat Idle B9 1 1 3 7 7 1 bat bat 15 15 15 1 1 1 1 1 2 0
|
||||
cr_archer1 160 cr_archer1 cr_archer2 0 DarkRanger cr_archer1 corruptrogue CorruptArcher CR 1 1 1 2 4 4 1 4 37 68 cr_archer cr_archer 10 15 14 13 60 65 70 70 85 88 14 11 9 20 30 40 20 20 20 12 12 12 cr_arrow1 1 1 1 1 1 100 100 100 -50 -40 -33 15 25 100 25 25 2 13 13 13 5 91 128 84 91 60 90 256 55 95 90 100 60 90 150 55 95 90 100 60 90 150 Act 1 Miss A Act 1 Champ A Act 1 Unique A Act 1 (N) Miss A Act 1 (N) Champ A Act 1 (N) Unique A Act 1 (H) Miss A Act 1 (H) Champ A Act 1 (H) Unique A Act 1 (H) Champ A Desecrated Act 1 (H) Unique A Desecrated Act 1 (H) Herald A 0
|
||||
cr_archer2 161 cr_archer1 cr_archer3 1 VileArcher cr_archer2 corruptrogue CorruptArcher CR 1 1 1 3 5 6 1 5 38 69 cr_archer cr_archer 10 15 14 13 70 75 80 75 88 91 12 10 9 25 35 45 20 20 20 12 12 12 cr_arrow2 1 1 1 1 1 100 100 100 -50 -40 -33 15 110 25 25 25 2 15 15 15 5 93 131 84 91 60 90 255 55 95 90 100 60 90 150 55 95 90 100 60 90 150 A1 pois 10 20 20 100 20 25 25 100 Act 1 Miss B Act 1 Champ B Act 1 Unique B Act 1 (N) Miss B Act 1 (N) Champ B Act 1 (N) Unique B Act 1 (H) Miss B Act 1 (H) Champ B Act 1 (H) Unique B Act 1 (H) Champ B Desecrated Act 1 (H) Unique B Desecrated Act 1 (H) Herald B 0
|
||||
cr_archer3 162 cr_archer1 cr_archer4 2 DarkArcher cr_archer3 corruptrogue CorruptArcher CR 1 1 2 3 5 8 1 7 39 83 cr_archer cr_archer 10 15 14 13 80 85 90 80 91 94 10 9 8 30 40 50 20 20 20 12 12 12 cr_arrow3 1 1 1 1 1 100 100 100 -50 -40 -33 15 25 110 25 25 2 20 20 20 5 95 136 84 91 60 90 254 55 95 90 100 60 90 150 55 95 90 100 60 90 150 A1 cold 10 40 60 150 20 40 60 175 Act 1 Miss B Act 1 Champ B Act 1 Unique B Act 1 (N) Miss B Act 1 (N) Champ B Act 1 (N) Unique B Act 1 (H) Miss B Act 1 (H) Champ B Act 1 (H) Unique B Act 1 (H) Champ B Desecrated Act 1 (H) Unique B Desecrated Act 1 (H) Herald B 0
|
||||
@@ -174,17 +174,17 @@ sk_archer2 171 sk_archer1 sk_archer3 1 ReturnedArcher sk_archer2 skeleton Skele
|
||||
sk_archer3 172 sk_archer1 sk_archer4 2 BoneArcher sk_archer3 skeleton SkeletonBow SK 1 1 2 3 5 5 2 9 40 70 sk_archer sk_archer 10 15 14 13 80 85 90 15 13 12 50 50 50 5 5 5 6 6 6 skbowarrow3 1 1 1 1 1 -50 -40 -25 20 50 50 60 45 33 75 105 2 25 25 25 5 76 156 84 90 65 90 253 70 100 100 95 35 50 115 70 100 100 95 35 50 115 Act 1 Miss C Act 1 Champ C Act 1 Unique C Act 1 (N) Miss C Act 1 (N) Champ C Act 1 (N) Unique C Act 1 (H) Miss C Act 1 (H) Champ C Act 1 (H) Unique C Act 1 (H) Champ C Desecrated Act 1 (H) Unique C Desecrated Act 1 (H) Herald C 0
|
||||
sk_archer4 173 sk_archer1 sk_archer5 3 BurningDeadArcher sk_archer4 skeleton SkeletonBow SK 1 1 2 4 5 5 2 13 43 74 sk_archer sk_archer 10 15 14 13 80 85 90 15 13 11 50 50 50 5 5 5 6 6 6 skbowarrow4 1 1 1 1 1 -50 -40 -25 30 50 50 60 45 75 33 110 2 35 35 35 5 76 151 84 89 45 70 252 70 100 100 95 35 50 115 70 100 100 95 35 50 115 A1 fire 100 25 55 100 25 55 100 25 55 Act 2 Miss A Act 2 Champ A Act 2 Unique A Act 2 (N) Miss A Act 2 (N) Champ A Act 2 (N) Unique A Act 2 (H) Miss A Act 2 (H) Champ A Act 2 (H) Unique A Act 2 (H) Champ A Desecrated Act 2 (H) Unique A Desecrated Act 2 (H) Herald A 0
|
||||
sk_archer5 174 sk_archer1 sk_archer6 4 HorrorArcher sk_archer5 skeleton SkeletonBow SK 1 1 2 4 5 5 2 18 47 78 sk_archer sk_archer 10 15 14 13 90 90 95 15 12 11 50 50 50 5 5 5 6 6 6 skbowarrow5 1 1 1 1 1 -50 -40 -25 20 40 50 50 70 60 50 75 75 110 2 45 45 45 5 74 151 84 90 45 70 252 70 100 100 95 35 50 115 70 100 100 95 35 50 115 A1 ltng 100 5 80 100 5 80 100 5 120 Act 2 Miss B Act 2 Champ B Act 2 Unique B Act 2 (N) Miss B Act 2 (N) Champ B Act 2 (N) Unique B Act 2 (H) Miss B Act 2 (H) Champ B Act 2 (H) Unique B Act 2 (H) Champ B Desecrated Act 2 (H) Unique B Desecrated Act 2 (H) Herald B 0
|
||||
warriv2 175 warriv2 0 Warriv warriv2 human Npc WX 1 1 1 3 3 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
atma 176 atma 0 Atma atma human Npc AS 1 1 1 3 3 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
drognan 177 drognan 0 Drognan drognan human Npc DR 1 1 1 3 3 0 drognan drognan 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
fara 178 fara 0 Fara fara human Npc OF 1 1 1 3 3 0 fara fara 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
cow 179 cow 0 dummy cow Idle CW 1 1 1 2 2 0 cow cow 15 15 15 2 1 1 1 1 2 0
|
||||
warriv2 175 warriv2 0 Warriv warriv2 human Npc WX 1 1 1 3 3 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 1 2 0
|
||||
atma 176 atma 0 Atma atma human Npc AS 1 1 1 3 3 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 1 2 0
|
||||
drognan 177 drognan 0 Drognan drognan human Npc DR 1 1 1 3 3 0 drognan drognan 15 15 15 1 1 1 1 1 1 1 1 1 2 0
|
||||
fara 178 fara 0 Fara fara human Npc OF 1 1 1 3 3 0 fara fara 15 15 15 1 1 1 1 1 1 1 1 1 2 0
|
||||
cow 179 cow 0 dummy cow Idle CW 1 1 1 2 2 0 cow cow 15 15 15 2 1 1 1 1 1 2 0
|
||||
maggotbaby1 180 maggotbaby1 maggotbaby2 0 SandMaggotYoung maggotbaby1 sandmaggot MaggotLarva SB 1 1 1 4 4 1 16 45 76 maggotbaby maggotbaby 9 15 14 13 75 78 80 20 17 14 60 60 60 15 15 15 20 20 20 1 1 1 1 100 75 50 -50 -40 -33 100 2 17 17 17 5 21 65 84 55 28 46 94 20 45 50 30 25 45 70 20 45 50 30 25 45 70 A1 pois 5 15 15 50 5 15 15 50 0
|
||||
maggotbaby2 181 maggotbaby1 maggotbaby3 1 RockWormYoung maggotbaby2 sandmaggot MaggotLarva SB 1 1 1 4 4 1 17 45 84 maggotbaby maggotbaby 9 15 14 13 80 83 85 19 16 13 70 70 70 15 15 15 20 20 20 1 1 1 1 100 75 50 -50 -40 -33 100 2 17 17 17 5 23 64 84 55 28 46 92 20 45 50 30 25 45 70 20 45 50 30 25 45 70 A1 pois 5 15 15 50 5 15 15 50 0
|
||||
maggotbaby3 182 maggotbaby1 maggotbaby4 2 DevourerYoung maggotbaby3 sandmaggot MaggotLarva SB 1 1 1 5 5 1 19 48 79 maggotbaby maggotbaby 9 15 14 13 85 88 90 18 15 12 80 80 80 15 15 15 20 20 20 1 1 1 1 100 75 50 -50 -40 -33 100 2 19 19 19 5 21 66 84 54 24 47 93 20 45 50 30 25 45 70 20 45 50 30 25 45 70 A1 pois 5 15 15 50 5 15 15 50 0
|
||||
maggotbaby4 183 maggotbaby1 maggotbaby5 3 GiantLampreyYoung maggotbaby4 sandmaggot MaggotLarva SB 1 1 1 5 5 1 21 50 79 maggotbaby maggotbaby 9 15 14 13 88 91 93 17 14 11 85 85 85 15 15 15 20 20 20 1 1 1 1 100 75 50 -50 -40 -33 100 2 21 21 21 5 21 64 85 54 29 43 94 20 45 50 30 25 45 70 20 45 50 30 25 45 70 A1 pois 5 15 15 50 5 15 15 50 0
|
||||
maggotbaby5 184 maggotbaby1 maggotbaby6 4 WorldKillerYoung maggotbaby5 sandmaggot MaggotLarva SB 1 1 1 6 6 1 24 57 85 maggotbaby maggotbaby 9 15 14 13 90 93 95 16 13 10 90 90 90 15 15 15 20 20 20 1 1 1 1 100 75 50 -50 -40 -33 100 2 24 24 24 5 21 65 85 55 26 44 92 20 45 50 30 25 45 70 20 45 50 30 25 45 70 A1 pois 5 15 15 50 5 15 15 50 0
|
||||
camel 185 camel 0 dummy camel Idle CM 1 1 1 5 5 0 15 15 15 2 1 1 1 1 1 2 0
|
||||
camel 185 camel 0 dummy camel Idle CM 1 1 1 5 5 0 15 15 15 2 1 1 1 1 1 1 2 0
|
||||
blunderbore1 186 blunderbore1 blunderbore2 0 Blunderbore blunderbore1 blunderbore blunderbore PinHead stun attack PN 1 1 2 3 3 1 18 47 78 pinhead pinhead 10 15 14 13 75 80 85 15 12 10 60 70 70 12 12 12 40 50 55 1 1 1 1 1 1 Smite seq_pinheadsmite 1 100 100 100 -50 -40 -33 55 115 50 50 4 24 24 24 5 160 200 84 114 76 134 125 117 151 92 180 220 80 130 90 140 110 120 155 100 180 220 80 130 90 140 110 120 155 100 Act 2 H2H B Act 2 Champ B Act 2 Unique B Act 2 (N) H2H B Act 2 (N) Champ B Act 2 (N) Unique B Act 2 (H) H2H B Act 2 (H) Champ B Act 2 (H) Unique B Act 2 (H) Champ B Desecrated Act 2 (H) Unique B Desecrated Act 2 (H) Herald B 0
|
||||
blunderbore2 187 blunderbore1 blunderbore3 1 Gorbelly blunderbore2 blunderbore blunderbore PinHead stun attack PN 1 1 3 4 4 1 20 49 80 pinhead pinhead 10 15 14 13 80 85 90 12 9 7 80 80 80 9 9 9 50 60 65 1 1 1 1 1 1 Smite seq_pinheadsmite 1 100 100 100 -50 -40 -33 55 50 50 140 4 27 27 27 5 160 200 85 114 77 139 125 124 154 93 180 220 80 130 90 140 110 120 155 100 180 220 80 130 90 140 110 120 155 100 Act 2 H2H C Act 2 Champ C Act 2 Unique C Act 2 (N) H2H C Act 2 (N) Champ C Act 2 (N) Unique C Act 2 (H) H2H C Act 2 (H) Champ C Act 2 (H) Unique C Act 2 (H) Champ C Desecrated Act 2 (H) Unique C Desecrated Act 2 (H) Herald C 0
|
||||
blunderbore3 188 blunderbore1 blunderbore4 2 Mauler blunderbore3 blunderbore blunderbore PinHead stun attack PN 1 2 3 6 6 1 25 55 83 pinhead pinhead 10 15 14 13 85 90 95 9 7 7 90 90 90 7 7 7 60 65 65 1 1 1 1 1 1 Smite seq_pinheadsmite 1 100 100 100 -50 -40 -33 55 50 100 50 4 33 33 33 5 160 200 85 118 76 138 126 119 151 93 180 220 80 130 90 140 110 120 155 100 180 220 80 130 90 140 110 120 155 100 Act 3 H2H C Act 2 Champ C Act 2 Unique C Act 3 (N) H2H C Act 2 (N) Champ C Act 2 (N) Unique C Act 3 (H) H2H C Act 2 (H) Champ C Act 2 (H) Unique C Act 2 (H) Champ C Desecrated Act 2 (H) Unique C Desecrated Act 2 (H) Herald C 0
|
||||
@@ -194,23 +194,23 @@ maggotegg2 191 maggotegg1 maggotegg3 1 RockWormEgg maggotegg2 MaggotEgg SE 1
|
||||
maggotegg3 192 maggotegg1 maggotegg4 2 DevourerEgg maggotegg3 MaggotEgg SE 1 maggotbaby3 0 0 S1 1 1 1 1 1 19 48 79 maggotegg maggotegg 8 15 15 15 210 200 200 26 26 26 1 1 1 MaggotEgg seq_maggotegg 4 100 66 33 -50 -50 -50 2 78 96 84 50 60 80 25 25 60 80 25 25 0
|
||||
maggotegg4 193 maggotegg1 maggotegg5 3 GiantLampreyEgg maggotegg4 MaggotEgg SE 1 maggotbaby4 0 0 S1 1 1 1 1 1 21 50 79 maggotegg maggotegg 8 15 15 15 180 200 200 30 30 30 1 1 1 MaggotEgg seq_maggotegg 4 100 66 33 -50 -50 -50 2 78 96 85 50 60 80 25 25 60 80 25 25 0
|
||||
maggotegg5 194 maggotegg1 maggotegg6 4 WorldKillerEgg maggotegg5 MaggotEgg SE 1 maggotbaby5 0 0 S1 1 1 1 1 1 27 57 85 maggotegg maggotegg 8 15 15 15 150 200 200 34 34 34 1 1 1 MaggotEgg seq_maggotegg 5 100 66 33 -50 -50 -50 2 77 95 84 54 60 80 25 25 60 80 25 25 0
|
||||
act2male 195 act2male 0 dummy act2male human Towner 2M 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 2 0
|
||||
act2female 196 act2female 0 Dummy act2female human Towner 2F 1 1 1 2 2 0 lightnpc lightnpc 15 15 15 1 1 1 1 1 2 0
|
||||
act2child 197 act2child 0 dummy act2child human Towner 2C 1 1 1 2 2 0 lightnpc lightnpc 15 15 15 1 1 1 1 1 2 0
|
||||
greiz 198 greiz 0 Greiz greiz human Npc GR 1 1 1 4 4 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
elzix 199 elzix 0 Elzix elzix human Npc EL 1 1 1 3 3 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
geglash 200 geglash 0 Geglash geglash human Npc GE 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
jerhyn 201 jerhyn 0 Jerhyn jerhyn human Npc JE 1 1 1 4 4 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
lysander 202 lysander 0 Lysander lysander human Npc LY 1 1 1 3 3 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
act2guard1 203 act2guard1 0 Dummy act2guard1 human Towner GU 1 1 1 4 7 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 100 100 100 -50 -50 -50 2 0
|
||||
act2vendor1 204 act2vendor1 0 dummy act2vendor1 human Vendor M1 1 1 1 4 4 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 2 0
|
||||
act2vendor2 205 act2vendor2 0 dummy act2vendor2 human Vendor M2 1 1 1 4 4 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 2 0
|
||||
act2male 195 act2male 0 dummy act2male human Towner 2M 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 2 0
|
||||
act2female 196 act2female 0 Dummy act2female human Towner 2F 1 1 1 2 2 0 lightnpc lightnpc 15 15 15 1 1 1 1 1 1 2 0
|
||||
act2child 197 act2child 0 dummy act2child human Towner 2C 1 1 1 2 2 0 lightnpc lightnpc 15 15 15 1 1 1 1 1 1 2 0
|
||||
greiz 198 greiz 0 Greiz greiz human Npc GR 1 1 1 4 4 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 1 2 0
|
||||
elzix 199 elzix 0 Elzix elzix human Npc EL 1 1 1 3 3 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 1 2 0
|
||||
geglash 200 geglash 0 Geglash geglash human Npc GE 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
jerhyn 201 jerhyn 0 Jerhyn jerhyn human Npc JE 1 1 1 4 4 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
lysander 202 lysander 0 Lysander lysander human Npc LY 1 1 1 3 3 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 1 2 0
|
||||
act2guard1 203 act2guard1 0 Dummy act2guard1 human Towner GU 1 1 1 4 7 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 100 100 100 -50 -50 -50 2 0
|
||||
act2vendor1 204 act2vendor1 0 dummy act2vendor1 human Vendor M1 1 1 1 4 4 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
act2vendor2 205 act2vendor2 0 dummy act2vendor2 human Vendor M2 1 1 1 4 4 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
crownest1 206 crownest1 crownest2 0 FoulCrowNest crownest1 FoulCrowNest BN 1 1 foulcrow1 0 3 NU 1 1 0 0 2 3 37 68 crownest crownest 10 15 15 15 100 80 70 6 12 15 1 1 1 1 Nest seq_nestlay 1 100 75 50 -50 -40 -33 2 456 545 17 177 450 575 30 300 450 575 30 300 Act 1 Cast A Act 1 Champ A Act 1 Unique A Act 1 (N) Cast A Act 1 (N) Champ A Act 1 (N) Unique A Act 1 (H) Cast A Act 1 (H) Champ A Act 1 (H) Unique A Act 1 (H) Champ A Desecrated Act 1 (H) Unique A Desecrated Act 1 (H) Herald A 0
|
||||
crownest2 207 crownest1 crownest3 1 BloodHawkNest crownest2 FoulCrowNest BN 1 1 foulcrow2 0 3 NU 1 1 0 0 2 8 38 69 crownest crownest 10 15 15 15 100 80 70 8 15 18 1 1 1 1 Nest seq_nestlay 1 100 75 50 -50 -40 -33 2 489 584 19 178 450 575 30 300 450 575 30 300 Act 1 Cast B Act 1 Champ B Act 1 Unique B Act 1 (N) Cast B Act 1 (N) Champ B Act 1 (N) Unique B Act 1 (H) Cast B Act 1 (H) Champ B Act 1 (H) Unique B Act 1 (H) Champ B Desecrated Act 1 (H) Unique B Desecrated Act 1 (H) Herald B 0
|
||||
crownest3 208 crownest1 crownest4 2 BlackVultureNest crownest3 FoulCrowNest BN 1 1 foulcrow3 0 3 NU 1 1 0 0 2 15 45 76 crownest crownest 10 15 15 15 100 80 70 10 17 21 1 1 1 1 Nest seq_nestlay 1 100 75 50 -50 -40 -33 2 479 576 19 177 450 575 30 300 450 575 30 300 Act 2 Cast A Act 2 Champ A Act 2 Unique A Act 2 (N) Cast A Act 2 (N) Champ A Act 2 (N) Unique A Act 2 (H) Cast A Act 2 (H) Champ A Act 2 (H) Unique A Act 2 (H) Champ A Desecrated Act 2 (H) Unique A Desecrated Act 2 (H) Herald A 0
|
||||
crownest4 209 crownest1 3 CloudStalkerNest crownest4 FoulCrowNest BN 1 1 foulcrow4 0 3 NU 1 1 0 0 2 22 48 79 crownest crownest 10 15 15 15 100 80 70 15 19 24 1 1 1 1 Nest seq_nestlay 1 100 75 50 -50 -40 -33 2 477 572 19 177 450 575 30 300 450 575 30 300 Act 3 Cast A Act 3 Champ A Act 3 Unique A Act 3 (N) Cast A Act 3 (N) Champ A Act 3 (N) Unique A Act 3 (H) Cast A Act 3 (H) Champ A Act 3 (H) Unique A Act 3 (H) Champ A Desecrated Act 3 (H) Unique A Desecrated Act 3 (H) Herald A 0
|
||||
meshif1 210 meshif1 0 Meshif meshif1 human Npc MS 1 1 1 4 4 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
duriel 211 duriel 0 Duriel duriel demon Duriel DU 1 1 1 10 15 0 22 55 88 duriel duriel 15 15 15 5 5 6 33 33 33 50 50 50 1 1 1 1 1 Charge seq_durielcharge 5 Jab seq_durieljab 15 Smite seq_durielsmite 7 MonHolyFreeze NU 1 100 100 100 -20 -20 -20 20 20 50 20 50 50 75 50 50 33 75 75 95 75 0 1 0 25 50 5 4757 4757 85 1655 140 180 201 140 160 252 1 2 200 4757 4757 120 1655 140 190 110 115 165 150 40 50 135 1295 1295 120 1655 140 190 110 115 165 150 40 50 135 A2 stun 100 15 100 20 100 30 Duriel Duriel Duriel Durielq Duriel Desecrated A Duriel Desecrated A Duriel Desecrated A Duriel (N) Duriel (N) Duriel (N) Durielq (N) Duriel (N) Desecrated A Duriel (N) Desecrated A Duriel (N) Desecrated A Duriel (H) Duriel (H) Duriel (H) Durielq (H) Duriel (H) Desecrated A Duriel (H) Desecrated A Duriel (H) Desecrated A 14 5 0
|
||||
meshif1 210 meshif1 0 Meshif meshif1 human Npc MS 1 1 1 4 4 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 1 2 0
|
||||
duriel 211 duriel 0 Duriel duriel demon Duriel DU 1 1 1 10 15 0 22 55 88 duriel duriel 15 15 15 5 5 6 33 33 33 50 50 50 1 1 1 1 1 1 Charge seq_durielcharge 5 Jab seq_durieljab 15 Smite seq_durielsmite 7 MonHolyFreeze NU 1 100 100 100 -20 -20 -20 20 20 50 20 50 50 75 50 50 33 75 75 95 75 0 1 0 25 50 5 4757 4757 85 1655 140 180 201 140 160 252 1 2 200 4757 4757 120 1655 140 190 110 115 165 150 40 50 135 1295 1295 120 1655 140 190 110 115 165 150 40 50 135 A2 stun 100 15 100 20 100 30 Duriel Duriel Duriel Durielq Duriel Desecrated A Duriel Desecrated A Duriel Desecrated A Duriel (N) Duriel (N) Duriel (N) Durielq (N) Duriel (N) Desecrated A Duriel (N) Desecrated A Duriel (N) Desecrated A Duriel (H) Duriel (H) Duriel (H) Durielq (H) Duriel (H) Desecrated A Duriel (H) Desecrated A Duriel (H) Desecrated A 14 5 0
|
||||
bonefetish1 212 bonefetish1 bonefetish2 0 Undead RatMan bonefetish1 undeadfetish Fetish FK 1 1 1 6 6 1 10 41 73 bonefetish bonefetish 10 15 14 13 100 100 100 10 9 8 5 5 5 33 33 33 1 1 1 1 1 1 1 1 100 66 33 -50 -33 0 50 60 25 33 75 100 2 11 11 11 5 64 110 84 80 72 115 91 65 105 135 125 65 105 90 65 105 135 125 65 105 90 Act 1 H2H C Act 1 Champ C Act 1 Unique C Act 1 (N) H2H C Act 1 (N) Champ C Act 1 (N) Unique C Act 1 (H) H2H C Act 1 (H) Champ C Act 1 (H) Unique C Act 1 (H) Champ C Desecrated Act 1 (H) Unique C Desecrated Act 1 (H) Herald C 0
|
||||
bonefetish2 213 bonefetish1 bonefetish3 1 Undead Fetish bonefetish2 undeadfetish Fetish FK 1 1 2 7 7 1 21 50 80 bonefetish bonefetish 10 15 14 13 100 100 100 10 9 8 5 5 5 33 33 33 1 1 1 1 1 1 1 1 100 66 33 -50 -33 0 50 60 25 33 75 105 2 21 21 21 5 64 107 85 79 65 101 94 65 105 135 125 65 105 90 65 105 135 125 65 105 90 Act 3 H2H A Act 3 Champ A Act 3 Unique A Act 3 (N) H2H A Act 3 (N) Champ A Act 3 (N) Unique A Act 3 (H) H2H A Act 3 (H) Champ A Act 3 (H) Unique A Act 3 (H) Champ A Desecrated Act 3 (H) Unique A Desecrated Act 3 (H) Herald A 0
|
||||
bonefetish3 214 bonefetish1 bonefetish4 2 Undead Flayer bonefetish3 undeadfetish Fetish FK 1 1 3 8 8 1 22 51 81 bonefetish bonefetish 10 15 14 13 100 100 100 10 9 8 5 5 5 33 33 33 1 1 1 1 1 1 1 1 100 66 33 -50 -33 0 50 60 25 33 75 110 2 22 22 22 5 66 107 85 79 72 108 94 65 105 135 125 65 105 90 65 105 135 125 65 105 90 Act 3 H2H A Act 3 Champ A Act 3 Unique A Act 3 (N) H2H A Act 3 (N) Champ A Act 3 (N) Unique A Act 3 (H) H2H A Act 3 (H) Champ A Act 3 (H) Unique A Act 3 (H) Champ A Desecrated Act 3 (H) Unique A Desecrated Act 3 (H) Herald A 0
|
||||
@@ -226,9 +226,9 @@ bloodmage2 223 bloodmage1 bloodmage3 1 unused bloodmage2 Idle xx
|
||||
bloodmage3 224 bloodmage1 bloodmage4 2 unused bloodmage3 Idle xx 2 3 4 4 0 1 2 0
|
||||
bloodmage4 225 bloodmage1 bloodmage5 3 unused bloodmage4 Idle xx 2 4 4 4 0 1 2 0
|
||||
bloodmage5 226 bloodmage1 4 unused bloodmage5 Idle xx 3 4 4 4 0 1 2 0
|
||||
maggot 227 maggot 0 Maggot maggot Idle MA 1 1 1 1 1 0 bug bug 15 15 15 1 1 1 1 2 0
|
||||
maggot 227 maggot 0 Maggot maggot Idle MA 1 1 1 1 1 0 bug bug 15 15 15 1 1 1 1 1 2 0
|
||||
sarcophagus 228 sarcophagus 0 MummyGenerator sarcophagus construct Sarcophagus MG 1 mummy1 0 2 NU 1 1 0 0 1 15 49 79 sarcophagus sarcophagus 10 15 15 15 125 110 90 16 20 24 1 1 1 1 Nest seq_mummyspawn 1 0 0 0 50 50 50 50 25 25 150 50 2 957 957 56 327 950 950 5 340 950 950 5 340 0
|
||||
radament 229 radament 0 Radament radament demon GreaterMummy RD 1 skeleton4 1 1 2 2 0 16 49 83 radament radament 14 15 14 13 85 85 85 45 50 55 55 55 55 85 90 95 24 27 31 mummy4 1 1 1 1 1 1 Resurrect2 seq_mummyres 1 Bestow seq_mummyres 1 UnHolyBolt seq_mummyres 1 100 75 50 -50 -40 -33 40 50 60 60 50 60 80 0 17 17 17 5 498 498 63 218 73 155 94 73 155 125 500 500 120 315 100 150 130 70 155 160 500 500 120 315 100 150 130 70 155 160 A1 pois 25 181 272 1000 25 180 270 1000 25 180 270 1000 Radament Radament Radament Radament Desecrated A Radament Desecrated A Radament Desecrated A Radament (N) Radament (N) Radament (N) Radament (N) Desecrated A Radament (N) Desecrated A Radament (N) Desecrated A Radament (H) Radament (H) Radament (H) Radament (H) Desecrated A Radament (H) Desecrated A Radament (H) Desecrated A 0
|
||||
radament 229 radament 0 Radament radament demon GreaterMummy RD 1 skeleton4 1 1 2 2 0 16 49 83 radament radament 14 15 14 13 85 85 85 45 50 55 55 55 55 85 90 95 24 27 31 mummy4 1 1 1 1 1 1 1 Resurrect2 seq_mummyres 1 Bestow seq_mummyres 1 UnHolyBolt seq_mummyres 1 100 75 50 -50 -40 -33 40 50 60 60 50 60 80 0 17 17 17 5 498 498 63 218 73 155 94 73 155 125 500 500 120 315 100 150 130 70 155 160 500 500 120 315 100 150 130 70 155 160 A1 pois 25 181 272 1000 25 180 270 1000 25 180 270 1000 Radament Radament Radament Radament Desecrated A Radament Desecrated A Radament Desecrated A Radament (N) Radament (N) Radament (N) Radament (N) Desecrated A Radament (N) Desecrated A Radament (N) Desecrated A Radament (H) Radament (H) Radament (H) Radament (H) Desecrated A Radament (H) Desecrated A Radament (H) Desecrated A 0
|
||||
firebeast 230 firebeast 0 unused firebeast ElementalBeast FM 3 6 4 4 1 15 15 15 20 20 20 16 20 24 20 20 20 1 1 1 70 70 2 1 1 0
|
||||
iceglobe 231 iceglobe 0 unused iceglobe ElementalBeast IM 3 6 4 4 1 15 15 15 20 20 20 16 20 24 20 20 20 1 1 1 1 70 70 2 1 1 0
|
||||
lightningbeast 232 lightningbeast 0 unused lightningbeast ElementalBeast xx 3 6 4 4 1 15 15 15 20 20 20 16 20 24 20 20 20 1 1 1 1 70 70 2 0
|
||||
@@ -241,37 +241,37 @@ cantor1 238 cantor1 cantor2 0 Sexton cantor1 zakarum ZakarumPriest heals Zealot
|
||||
cantor2 239 cantor1 cantor3 1 Cantor cantor2 zakarum ZakarumPriest heals Zealots and Cantors ZP 1 1 zealot2 2 4 1 1 6 6 1 23 51 81 cantor cantor 10 15 14 13 30 30 30 6 12 18 55 65 75 30 45 65 120 120 120 36 38 40 1 1 1 1 ZakarumHeal S1 2 ZakarumLightning S1 1 MonTeleport S1 1 MonBlizzard S1 1 100 100 100 -50 -40 -33 50 50 10 25 100 75 20 2 23 23 23 5 130 171 85 106 67 154 92 90 130 75 130 40 85 90 90 130 75 130 40 85 90 A1 cold 55 33 60 25 55 30 60 50 55 30 60 75 Act 3 Cast B Act 3 Champ B Act 3 Unique B Act 3 (N) Cast B Act 3 (N) Champ B Act 3 (N) Unique B Act 3 (H) Cast B Act 3 (H) Champ B Act 3 (H) Unique B Act 3 (H) Champ B Desecrated Act 3 (H) Unique B Desecrated Act 3 (H) Herald B 0
|
||||
cantor3 240 cantor1 cantor4 2 Heirophant cantor3 zakarum ZakarumPriest heals Zealots and Cantors ZP 1 1 zealot3 2 4 1 2 6 6 1 24 53 82 cantor cantor 10 15 14 13 35 35 35 8 14 22 60 70 80 35 50 70 120 120 120 36 38 40 1 1 1 1 ZakarumHeal S1 3 ZakarumLightning S1 1 MonTeleport S1 1 MonBlizzard S1 1 100 100 100 -50 -40 -33 50 75 10 25 33 160 20 2 24 24 24 5 131 173 85 106 69 151 92 90 130 75 130 40 85 90 90 130 75 130 40 85 90 A1 cold 65 31 62 25 65 30 60 50 65 30 60 75 Act 3 Cast B Act 3 Champ B Act 3 Unique B Act 3 (N) Cast B Act 3 (N) Champ B Act 3 (N) Unique B Act 3 (H) Cast B Act 3 (H) Champ B Act 3 (H) Unique B Act 3 (H) Champ B Desecrated Act 3 (H) Unique B Desecrated Act 3 (H) Herald B 0
|
||||
cantor4 241 cantor1 cantor5 3 Heirophant cantor4 zakarum ZakarumPriest heals Zealots and Cantors ZP 1 1 zealot3 2 4 1 2 6 6 1 24 57 84 cantor cantor 10 15 14 13 40 40 40 10 16 25 65 75 85 40 55 75 120 120 120 36 38 40 1 1 1 1 ZakarumHeal S1 3 ZakarumLightning S1 1 MonTeleport S1 1 MonBlizzard S1 1 100 100 100 -50 -40 -33 10 33 75 75 20 2 24 24 24 5 131 173 85 106 69 151 92 90 130 75 130 40 85 90 90 130 75 130 40 85 90 A1 cold 75 31 68 25 75 30 60 50 75 30 60 75 Act 3 Cast B Act 3 Champ B Act 3 Unique B Act 3 (N) Cast B Act 3 (N) Champ B Act 3 (N) Unique B Act 3 (H) Cast B Act 3 (H) Champ B Act 3 (H) Unique B Act 3 (H) Champ B Desecrated Act 3 (H) Unique B Desecrated Act 3 (H) Herald B 0
|
||||
mephisto 242 mephisto 0 Mephisto mephisto mephisto demon Mephisto MP 1 1 1 8 8 0 26 59 87 mephisto mephisto 14 15 10 6 40 46 15 20 25 25 33 33 25 33 33 1 1 1 1 1 PrimeLightning A2 6 PrimeBolt A2 6 PrimePoisonNova A2 7 MephistoMissile A2 5 MephFrostNova A2 1 Blizzard A2 5 100 -25 -15 -10 33 33 25 50 50 50 25 50 20 50 75 75 75 75 0 1 20 40 50 5 5695 5695 124 2131 295 442 251 5695 5695 160 2131 160 220 200 1471 1471 160 2131 160 220 200 Mephisto Mephisto Mephisto Mephistoq Mephisto Desecrated A Mephisto Desecrated A Mephisto Desecrated A Mephisto (N) Mephisto (N) Mephisto (N) Mephistoq (N) Mephisto (N) Desecrated A Mephisto (N) Desecrated A Mephisto (N) Desecrated A Mephisto (H) Mephisto (H) Mephisto (H) Mephistoq (H) Mephisto (H) Desecrated A Mephisto (H) Desecrated A Mephisto (H) Desecrated A 22 0 0
|
||||
diablo 243 diablo 0 Diablo diablo demon Diablo DI 1 1 1 6 6 0 40 62 94 diablo diablo 14 15 13 12 1 1 1 1 1 DiabLight SC 3 DiabCold S2 4 DiabFire S1 5 DiabWall S3 3 DiabRun seq_diablorun 5 PrimeFirewall S3 8 DiabPrison S3 1 100 50 -25 -15 -10 33 33 33 50 50 50 50 50 45 50 50 50 50 0 1 25 40 50 5 6427 6427 87 3462 77 197 313 113 257 251 6427 6427 140 3462 180 220 215 190 250 200 1577 1577 140 3462 180 220 215 190 250 200 Diablo Diablo Diablo Diabloq Diablo Desecrated A Diablo Desecrated A Diablo Desecrated A Diablo (N) Diablo (N) Diablo (N) Diabloq (N) Diablo (N) Desecrated A Diablo (N) Desecrated A Diablo (N) Desecrated A Diablo (H) Diablo (H) Diablo (H) Diabloq (H) Diablo (H) Desecrated A Diablo (H) Desecrated A Diablo (H) Desecrated A 26 0 1 0
|
||||
cain2 244 cain2 0 DeckardCain cain2 human Npc DC 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 2 0
|
||||
cain3 245 cain3 0 DeckardCain cain3 human Npc DC 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 2 0
|
||||
cain4 246 cain4 0 DeckardCain cain4 human Npc DC 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 2 0
|
||||
mephisto 242 mephisto 0 Mephisto mephisto mephisto demon Mephisto MP 1 1 1 8 8 0 26 59 87 mephisto mephisto 14 15 10 6 40 46 15 20 25 25 33 33 25 33 33 1 1 1 1 1 1 PrimeLightning A2 6 PrimeBolt A2 6 PrimePoisonNova A2 7 MephistoMissile A2 5 MephFrostNova A2 1 Blizzard A2 5 100 -25 -15 -10 33 33 25 50 50 50 25 50 20 50 75 75 75 75 0 1 20 40 50 5 5695 5695 124 2131 295 442 251 5695 5695 160 2131 160 220 200 1471 1471 160 2131 160 220 200 Mephisto Mephisto Mephisto Mephistoq Mephisto Desecrated A Mephisto Desecrated A Mephisto Desecrated A Mephisto (N) Mephisto (N) Mephisto (N) Mephistoq (N) Mephisto (N) Desecrated A Mephisto (N) Desecrated A Mephisto (N) Desecrated A Mephisto (H) Mephisto (H) Mephisto (H) Mephistoq (H) Mephisto (H) Desecrated A Mephisto (H) Desecrated A Mephisto (H) Desecrated A 22 0 0
|
||||
diablo 243 diablo 0 Diablo diablo demon Diablo DI 1 1 1 6 6 0 40 62 94 diablo diablo 14 15 13 12 1 1 1 1 1 1 DiabLight SC 3 DiabCold S2 4 DiabFire S1 5 DiabWall S3 3 DiabRun seq_diablorun 5 PrimeFirewall S3 8 DiabPrison S3 1 100 50 -25 -15 -10 33 33 33 50 50 50 50 50 45 50 50 50 50 0 1 25 40 50 5 6427 6427 87 3462 77 197 313 113 257 251 6427 6427 140 3462 180 220 215 190 250 200 1577 1577 140 3462 180 220 215 190 250 200 Diablo Diablo Diablo Diabloq Diablo Desecrated A Diablo Desecrated A Diablo Desecrated A Diablo (N) Diablo (N) Diablo (N) Diabloq (N) Diablo (N) Desecrated A Diablo (N) Desecrated A Diablo (N) Desecrated A Diablo (H) Diablo (H) Diablo (H) Diabloq (H) Diablo (H) Desecrated A Diablo (H) Desecrated A Diablo (H) Desecrated A 26 0 1 0
|
||||
cain2 244 cain2 0 DeckardCain cain2 human Npc DC 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
cain3 245 cain3 0 DeckardCain cain3 human Npc DC 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
cain4 246 cain4 0 DeckardCain cain4 human Npc DC 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
frogdemon1 247 frogdemon1 frogdemon2 0 Swamp Dweller frogdemon1 frogdemon FrogDemon FD 1 1 1 2 9 9 1 21 49 79 frogdemon frogdemon 10 15 14 13 65 70 85 20 25 30 50 55 75 50 55 65 20 35 50 12 12 12 15 13 10 9 9 9 frogfire 1 1 1 Submerge seq_froghidden 1 Emerge S1 1 100 85 75 -50 -40 -33 15 100 25 50 2 21 21 21 5 130 171 85 110 65 151 94 110 140 95 90 65 95 100 110 140 95 90 65 95 100 Act 3 H2H A Act 3 Champ A Act 3 Unique A Act 3 (N) H2H A Act 3 (N) Champ A Act 3 (N) Unique A Act 3 (H) H2H A Act 3 (H) Champ A Act 3 (H) Unique A Act 3 (H) Champ A Desecrated Act 3 (H) Unique A Desecrated Act 3 (H) Herald A 1 1 0
|
||||
frogdemon2 248 frogdemon1 frogdemon3 1 Bog Creature frogdemon2 frogdemon FrogDemon FD 1 1 1 3 10 10 1 22 50 80 frogdemon frogdemon 10 15 14 13 70 75 90 20 25 30 50 65 80 50 60 70 25 40 55 12 12 12 14 12 9 9 9 9 frogfire 1 1 1 Submerge seq_froghidden 1 Emerge S1 1 100 85 75 -50 -40 -33 15 120 50 2 22 22 22 5 131 172 85 110 72 158 94 110 140 95 90 65 95 100 110 140 95 90 65 95 100 Act 3 H2H A Act 3 Champ A Act 3 Unique A Act 3 (N) H2H A Act 3 (N) Champ A Act 3 (N) Unique A Act 3 (H) H2H A Act 3 (H) Champ A Act 3 (H) Unique A Act 3 (H) Champ A Desecrated Act 3 (H) Unique A Desecrated Act 3 (H) Herald A 1 1 0
|
||||
frogdemon3 249 frogdemon1 2 Slime Prince frogdemon3 frogdemon FrogDemon FD 1 1 2 3 11 11 1 24 51 81 frogdemon frogdemon 10 15 14 13 75 80 95 20 25 30 50 70 85 50 65 75 30 45 60 12 12 12 13 11 8 9 9 9 frogpois 1 1 1 Submerge seq_froghidden 1 Emerge S1 1 100 85 75 -50 -40 -33 15 25 110 2 24 24 24 5 131 173 85 110 69 151 92 110 140 95 90 65 95 100 110 140 95 90 65 95 100 A1 pois 10 100 100 600 10 100 100 600 10 100 100 600 Act 3 H2H B Act 3 Champ B Act 3 Unique B Act 3 (N) H2H B Act 3 (N) Champ B Act 3 (N) Unique B Act 3 (H) H2H B Act 3 (H) Champ B Act 3 (H) Unique B Act 3 (H) Champ B Desecrated Act 3 (H) Unique B Desecrated Act 3 (H) Herald B 1 1 0
|
||||
summoner 250 summoner 0 Summoner summoner human Summoner SU 1 1 1 5 5 0 18 55 80 summoner summoner 14 15 13 10 85 93 98 5 5 5 63 63 63 40 40 40 120 100 80 33 20 10 5 8 11 40 40 40 1 1 Glacial Spike SC 6 Frost Nova SC 5 Fire Ball SC 5 VampireFirewall SC 7 Weaken SC 4 100 75 50 -50 -40 -33 50 50 50 50 50 50 75 75 75 0 18 18 18 5 129 172 153 123 110 140 85 293 110 140 85 293 Summoner Summoner Summoner Summoner Desecrated A Summoner Desecrated A Summoner Desecrated A Summoner (N) Summoner (N) Summoner (N) Summoner (N) Desecrated A Summoner (N) Desecrated A Summoner (N) Desecrated A Summoner (H) Summoner (H) Summoner (H) Summoner (H) Desecrated A Summoner (H) Desecrated A Summoner (H) Desecrated A 0
|
||||
tyrael1 251 tyrael1 0 tyrael tyrael1 NpcStationary TX 1 1 1 0 0 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
asheara 252 asheara 0 asheara asheara human Npc AH 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
hratli 253 hratli 0 hratli hratli human Npc HR 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
alkor 254 alkor 0 alkor alkor human Npc AL 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
ormus 255 ormus 0 ormus ormus human Npc OR 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
izual 256 izual 0 izual izual demon Izual 22 1 1 1 10 16 0 29 60 86 izual izual 14 15 12 8 45 50 50 50 50 50 66 66 66 0 75 100 20 5 0 3 4 4 1 1 1 1 Frost Nova SC 8 100 75 50 -50 -33 -25 30 30 30 30 75 30 30 30 30 30 75 30 30 30 30 30 75 30 0 50 50 50 5 9481 9481 84 3695 132 237 251 3111 3111 120 1987 120 160 200 911 911 120 1987 120 160 200 A1 cold 100 42 84 50 100 50 80 75 100 50 80 100 Izual Izual Izual Izual Desecrated A Izual Desecrated A Izual Desecrated A Izual (N) Izual (N) Izual (N) Izual (N) Desecrated A Izual (N) Desecrated A Izual (N) Desecrated A Izual (H) Izual (H) Izual (H) Izual (H) Desecrated A Izual (H) Desecrated A Izual (H) Desecrated A 0
|
||||
halbu 257 halbu 0 halbu halbu human Npc 20 1 1 1 2 2 0 halbu halbu 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
tentacle1 258 tentacle1 tentacle2 0 WaterWatcherLimb tentacle1 tentacle Tentacle TN 1 1 1 0 0 0 18 48 75 tentacle tentacle 8 15 15 15 70 75 80 5 8 10 16 16 16 12 12 12 20 15 15 12 12 12 1 Submerge seq_tentaclesubmerge 1 Emerge S1 1 100 85 75 -50 -40 -33 15 50 100 2 18 18 18 5 129 172 84 107 76 151 92 70 100 100 75 70 120 90 70 100 100 75 70 120 90 0
|
||||
tentacle2 259 tentacle1 tentacle3 1 RiverStalkerLimb tentacle2 tentacle Tentacle TN 1 1 1 0 0 0 20 50 78 tentacle tentacle 8 15 15 15 80 85 90 10 10 15 14 14 14 14 14 14 16 15 15 12 12 12 1 Submerge seq_tentaclesubmerge 1 Emerge S1 1 100 85 75 -50 -40 -33 15 50 105 2 20 20 20 5 129 172 85 107 77 154 93 70 100 100 75 70 120 90 70 100 100 75 70 120 90 0
|
||||
tentacle3 260 tentacle1 2 StygianWatcherLimb tentacle3 tentacle Tentacle TN 1 1 1 0 0 0 22 53 80 tentacle tentacle 8 15 15 15 90 95 95 15 15 17 12 12 12 16 16 16 12 12 12 12 12 12 1 Submerge seq_tentaclesubmerge 1 Emerge S1 1 100 85 75 -50 -40 -33 15 50 110 2 22 22 22 5 131 172 85 107 79 158 94 70 100 100 75 70 120 90 70 100 100 75 70 120 90 0
|
||||
tentaclehead1 261 tentaclehead1 tentaclehead2 0 WaterWatcherHead tentaclehead1 tentacle TentacleHead TE 1 tentacle1 1 4 6 1 1 0 0 0 18 48 75 tentaclehead tentaclehead 8 15 15 15 70 75 80 5 8 10 16 16 16 12 12 12 20 15 15 12 14 14 tentaclegoo 1 1 Submerge seq_tentheadsubmerge 1 Emerge S1 1 100 85 75 -50 -40 -33 15 50 100 2 24 24 24 5 129 172 84 86 90 120 100 130 90 120 100 130 0
|
||||
tentaclehead2 262 tentaclehead1 tentaclehead3 1 RiverStalkerHead tentaclehead2 tentacle TentacleHead TE 1 tentacle2 1 4 6 1 1 0 0 0 20 50 78 tentaclehead tentaclehead 8 15 15 15 80 85 90 10 10 15 14 14 14 14 14 14 16 15 15 12 14 14 tentaclegoo 1 1 Submerge seq_tentheadsubmerge 1 Emerge S1 1 100 85 75 -50 -40 -33 15 50 105 2 27 27 27 5 129 172 85 87 90 120 100 130 90 120 100 130 0
|
||||
tentaclehead3 263 tentaclehead1 2 StygianWatcherHead tentaclehead3 tentacle TentacleHead TE 1 tentacle3 1 4 6 1 1 0 0 0 22 53 80 tentaclehead tentaclehead 8 15 15 15 90 90 95 15 15 17 12 12 12 16 16 16 12 12 12 12 14 14 tentaclegoo 1 1 Submerge seq_tentheadsubmerge 1 Emerge S1 1 100 85 75 -50 -40 -33 15 50 110 2 29 29 29 5 131 172 85 86 90 120 100 130 90 120 100 130 0
|
||||
meshif2 264 meshif2 0 meshif meshif2 human Npc M3 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
cain5 265 cain5 0 DeckardCain cain5 human Npc 1D 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 2 0
|
||||
navi 266 navi 0 navi navi human Navi RG 1 1 1 8 8 0 1 34 67 act1hire act1hire 15 15 15 rogue1 1 1 1 1 1 1 1 -50 -50 -50 0 9981 9981 217 0 101 4281 4281 150 0 0 100 1075 1075 150 0 0 100 0
|
||||
bloodraven 267 bloodraven 0 Bloodraven bloodraven bloodraven corruptrogue BloodRaven CR 1 zombie2 0 0 S1 zombie2 5 9 1 1 6 8 0 10 43 88 bloodraven bloodraven 13 15 13 10 raven1 raven2 1 1 1 1 Nest seq_bloodravencast 1 Quick Strike seq_brquickstrike 1 100 85 75 -50 -40 -33 50 50 50 50 50 25 50 50 50 50 50 50 50 50 50 50 50 0 28 28 28 5 323 323 64 151 60 95 253 1287 1287 150 977 60 100 200 886 886 150 977 60 100 200 Blood Raven Blood Raven Blood Raven Blood Raven Desecrated A Blood Raven Desecrated A Blood Raven Desecrated A Blood Raven (N) Blood Raven (N) Blood Raven (N) Blood Raven (N) Desecrated A Blood Raven (N) Desecrated A Blood Raven (N) Desecrated A Blood Raven (H) Blood Raven (H) Blood Raven (H) Blood Raven (H) Desecrated A Blood Raven (H) Desecrated A Blood Raven (H) Desecrated A 0
|
||||
bug 268 bug 0 Dummy bug Idle BG 1 3 3 2 2 1 15 15 15 1 1 1 1 1 1 2 0
|
||||
scorpion 269 scorpion 0 Dummy scorpion Idle DS 1 4 4 5 5 1 bug bug 15 15 15 1 1 1 1 1 1 2 0
|
||||
rogue2 270 rogue2 0 RogueScout rogue2 human GoodNpcRanged RG 1 1 1 8 8 0 5 38 71 act1hire act1hire 10 15 15 15 rogue1 1 1 1 1 1 1 100 100 100 -50 -50 -50 0 15 15 15 5 93 231 84 0 255 180 210 150 0 0 150 180 210 150 0 0 150 0
|
||||
roguehire 271 roguehire 0 Rogue roguehire human Hireable RG 1 1 1 7 11 0 1 34 67 act1hire act1hire 10 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 bow none RogueMissile A1 1 100 100 100 -50 -50 -50 4 0
|
||||
rogue3 272 rogue3 0 Dummy rogue3 human TownRogue RG 1 1 1 8 8 0 5 38 71 act1hire act1hire 10 15 15 15 rogue1 1 1 1 1 1 100 100 100 -50 -50 -50 2 75 75 75 5 189 331 84 0 93 180 210 150 0 0 150 180 210 150 0 0 150 0
|
||||
summoner 250 summoner 0 Summoner summoner human Summoner SU 1 1 1 5 5 0 18 55 80 summoner summoner 14 15 13 10 85 93 98 5 5 5 63 63 63 40 40 40 120 100 80 33 20 10 5 8 11 40 40 40 1 1 1 Glacial Spike SC 6 Frost Nova SC 5 Fire Ball SC 5 VampireFirewall SC 7 Weaken SC 4 100 75 50 -50 -40 -33 50 50 50 50 50 50 75 75 75 0 18 18 18 5 129 172 153 123 110 140 85 293 110 140 85 293 Summoner Summoner Summoner Summoner Desecrated A Summoner Desecrated A Summoner Desecrated A Summoner (N) Summoner (N) Summoner (N) Summoner (N) Desecrated A Summoner (N) Desecrated A Summoner (N) Desecrated A Summoner (H) Summoner (H) Summoner (H) Summoner (H) Desecrated A Summoner (H) Desecrated A Summoner (H) Desecrated A 0
|
||||
tyrael1 251 tyrael1 0 tyrael tyrael1 NpcStationary TX 1 1 1 0 0 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
asheara 252 asheara 0 asheara asheara human Npc AH 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
hratli 253 hratli 0 hratli hratli human Npc HR 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
alkor 254 alkor 0 alkor alkor human Npc AL 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
ormus 255 ormus 0 ormus ormus human Npc OR 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
izual 256 izual 0 izual izual demon Izual 22 1 1 1 10 16 0 29 60 86 izual izual 14 15 12 8 45 50 50 50 50 50 66 66 66 0 75 100 20 5 0 3 4 4 1 1 1 1 1 Frost Nova SC 8 100 75 50 -50 -33 -25 30 30 30 30 75 30 30 30 30 30 75 30 30 30 30 30 75 30 0 50 50 50 5 9481 9481 84 3695 132 237 251 3111 3111 120 1987 120 160 200 911 911 120 1987 120 160 200 A1 cold 100 42 84 50 100 50 80 75 100 50 80 100 Izual Izual Izual Izual Desecrated A Izual Desecrated A Izual Desecrated A Izual (N) Izual (N) Izual (N) Izual (N) Desecrated A Izual (N) Desecrated A Izual (N) Desecrated A Izual (H) Izual (H) Izual (H) Izual (H) Desecrated A Izual (H) Desecrated A Izual (H) Desecrated A 0
|
||||
halbu 257 halbu 0 halbu halbu human Npc 20 1 1 1 2 2 0 halbu halbu 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
tentacle1 258 tentacle1 tentacle2 0 WaterWatcherLimb tentacle1 tentacle Tentacle TN 1 1 1 0 0 0 18 48 75 tentacle tentacle 8 15 15 15 70 75 80 5 8 10 16 16 16 12 12 12 20 15 15 12 12 12 1 1 Submerge seq_tentaclesubmerge 1 Emerge S1 1 100 85 75 -50 -40 -33 15 50 100 2 18 18 18 5 129 172 84 107 76 151 92 70 100 100 75 70 120 90 70 100 100 75 70 120 90 0
|
||||
tentacle2 259 tentacle1 tentacle3 1 RiverStalkerLimb tentacle2 tentacle Tentacle TN 1 1 1 0 0 0 20 50 78 tentacle tentacle 8 15 15 15 80 85 90 10 10 15 14 14 14 14 14 14 16 15 15 12 12 12 1 1 Submerge seq_tentaclesubmerge 1 Emerge S1 1 100 85 75 -50 -40 -33 15 50 105 2 20 20 20 5 129 172 85 107 77 154 93 70 100 100 75 70 120 90 70 100 100 75 70 120 90 0
|
||||
tentacle3 260 tentacle1 2 StygianWatcherLimb tentacle3 tentacle Tentacle TN 1 1 1 0 0 0 22 53 80 tentacle tentacle 8 15 15 15 90 95 95 15 15 17 12 12 12 16 16 16 12 12 12 12 12 12 1 1 Submerge seq_tentaclesubmerge 1 Emerge S1 1 100 85 75 -50 -40 -33 15 50 110 2 22 22 22 5 131 172 85 107 79 158 94 70 100 100 75 70 120 90 70 100 100 75 70 120 90 0
|
||||
tentaclehead1 261 tentaclehead1 tentaclehead2 0 WaterWatcherHead tentaclehead1 tentacle TentacleHead TE 1 tentacle1 1 4 6 1 1 0 0 0 18 48 75 tentaclehead tentaclehead 8 15 15 15 70 75 80 5 8 10 16 16 16 12 12 12 20 15 15 12 14 14 tentaclegoo 1 1 1 Submerge seq_tentheadsubmerge 1 Emerge S1 1 100 85 75 -50 -40 -33 15 50 100 2 24 24 24 5 129 172 84 86 90 120 100 130 90 120 100 130 0
|
||||
tentaclehead2 262 tentaclehead1 tentaclehead3 1 RiverStalkerHead tentaclehead2 tentacle TentacleHead TE 1 tentacle2 1 4 6 1 1 0 0 0 20 50 78 tentaclehead tentaclehead 8 15 15 15 80 85 90 10 10 15 14 14 14 14 14 14 16 15 15 12 14 14 tentaclegoo 1 1 1 Submerge seq_tentheadsubmerge 1 Emerge S1 1 100 85 75 -50 -40 -33 15 50 105 2 27 27 27 5 129 172 85 87 90 120 100 130 90 120 100 130 0
|
||||
tentaclehead3 263 tentaclehead1 2 StygianWatcherHead tentaclehead3 tentacle TentacleHead TE 1 tentacle3 1 4 6 1 1 0 0 0 22 53 80 tentaclehead tentaclehead 8 15 15 15 90 90 95 15 15 17 12 12 12 16 16 16 12 12 12 12 14 14 tentaclegoo 1 1 1 Submerge seq_tentheadsubmerge 1 Emerge S1 1 100 85 75 -50 -40 -33 15 50 110 2 29 29 29 5 131 172 85 86 90 120 100 130 90 120 100 130 0
|
||||
meshif2 264 meshif2 0 meshif meshif2 human Npc M3 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
cain5 265 cain5 0 DeckardCain cain5 human Npc 1D 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
navi 266 navi 0 navi navi human Navi RG 1 1 1 8 8 0 1 34 67 act1hire act1hire 15 15 15 rogue1 1 1 1 1 1 1 1 1 -50 -50 -50 0 9981 9981 217 0 101 4281 4281 150 0 0 100 1075 1075 150 0 0 100 0
|
||||
bloodraven 267 bloodraven 0 Bloodraven bloodraven bloodraven corruptrogue BloodRaven CR 1 zombie2 0 0 S1 zombie2 5 9 1 1 6 8 0 10 43 88 bloodraven bloodraven 13 15 13 10 raven1 raven2 1 1 1 1 1 Nest seq_bloodravencast 1 Quick Strike seq_brquickstrike 1 100 85 75 -50 -40 -33 50 50 50 50 50 25 50 50 50 50 50 50 50 50 50 50 50 0 28 28 28 5 323 323 64 151 60 95 253 1287 1287 150 977 60 100 200 886 886 150 977 60 100 200 Blood Raven Blood Raven Blood Raven Blood Raven Desecrated A Blood Raven Desecrated A Blood Raven Desecrated A Blood Raven (N) Blood Raven (N) Blood Raven (N) Blood Raven (N) Desecrated A Blood Raven (N) Desecrated A Blood Raven (N) Desecrated A Blood Raven (H) Blood Raven (H) Blood Raven (H) Blood Raven (H) Desecrated A Blood Raven (H) Desecrated A Blood Raven (H) Desecrated A 0
|
||||
bug 268 bug 0 Dummy bug Idle BG 1 3 3 2 2 1 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
scorpion 269 scorpion 0 Dummy scorpion Idle DS 1 4 4 5 5 1 bug bug 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
rogue2 270 rogue2 0 RogueScout rogue2 human GoodNpcRanged RG 1 1 1 8 8 0 5 38 71 act1hire act1hire 10 15 15 15 rogue1 1 1 1 1 1 1 1 100 100 100 -50 -50 -50 0 15 15 15 5 93 231 84 0 255 180 210 150 0 0 150 180 210 150 0 0 150 0
|
||||
roguehire 271 roguehire 0 Rogue roguehire human Hireable RG 1 1 1 7 11 0 1 34 67 act1hire act1hire 10 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 bow none RogueMissile A1 1 100 100 100 -50 -50 -50 4 0
|
||||
rogue3 272 rogue3 0 Dummy rogue3 human TownRogue RG 1 1 1 8 8 0 5 38 71 act1hire act1hire 10 15 15 15 rogue1 1 1 1 1 1 1 100 100 100 -50 -50 -50 2 75 75 75 5 189 331 84 0 93 180 210 150 0 0 150 180 210 150 0 0 150 0
|
||||
gargoyletrap 273 gargoyletrap 0 GargoyleTrap gargoyletrap construct GargoyleTrap GT 1 1 1 0 0 0 15 40 79 gargoyletrap gargoyletrap 9 15 15 15 24 26 28 20 50 80 12 10 8 15 7 0 1 1 1 1 GargoyleTrap seq_gargoyletrap 1 -50 0 0 70 100 1000 0 16 16 16 5 132 172 84 106 140 190 35 250 140 190 35 250 0
|
||||
skmage_pois1 274 skmage_pois1 skmage_pois2 1 ReturnedMage skmage_pois1 skeleton SkeletonMage SK 1 1 1 2 4 4 2 8 39 71 sk_mage sk_mage 10 15 15 15 35 65 85 9 10 11 30 30 30 5 6 7 0 30 50 18 17 16 20 20 20 5 5 5 skmage1 1 1 1 1 1 SkeletonRaise seq_skeletonraise 1 -50 -40 -25 70 60 33 15 75 2 9 9 9 5 56 84 84 56 55 80 90 110 55 80 90 110 A1 pois 100 33 33 100 100 33 33 100 100 33 33 100 Act 1 Cast B Act 1 Champ B Act 1 Unique B Act 1 (N) Cast B Act 1 (N) Champ B Act 1 (N) Unique B Act 1 (H) Cast B Act 1 (H) Champ B Act 1 (H) Unique B Act 1 (H) Champ B Desecrated Act 1 (H) Unique B Desecrated Act 1 (H) Herald B 0
|
||||
skmage_pois2 275 skmage_pois1 skmage_pois3 2 BoneMage skmage_pois2 skeleton SkeletonMage SK 1 1 1 3 4 4 2 10 41 75 sk_mage sk_mage 10 15 15 15 35 65 85 9 10 11 30 30 30 5 6 7 0 30 50 18 17 16 20 20 20 5 5 5 skmage1 1 1 1 1 1 SkeletonRaise seq_skeletonraise 1 -50 -40 -25 70 60 33 15 75 2 11 11 11 5 55 82 84 56 55 80 90 110 55 80 90 110 A1 pois 100 33 33 100 100 33 33 100 100 33 33 100 Act 1 Cast C Act 1 Champ C Act 1 Unique C Act 1 (N) Cast C Act 1 (N) Champ C Act 1 (N) Unique C Act 1 (H) Cast C Act 1 (H) Champ C Act 1 (H) Unique C Act 1 (H) Champ C Desecrated Act 1 (H) Unique C Desecrated Act 1 (H) Herald C 0
|
||||
@@ -288,15 +288,15 @@ maggotqueen2 285 maggotqueen1 maggotqueen3 1 RockWormQueen maggotqueen2 sandmag
|
||||
maggotqueen3 286 maggotqueen1 maggotqueen4 2 DevourerQueen maggotqueen3 sandmaggot SandMaggotQueen MQ 1 sandmaggot3 8 0 S1 1 1 4 4 1 17 48 83 maggotqueen maggotqueen 10 15 15 15 9 10 11 8 8 8 goospit3 1 1 1 1 MagottUp seq_maggotup 1 MagottDown seq_maggotdown 1 MagottLay seq_maggotlay 1 QueenDeath seq_queendeath 1 100 75 50 -50 -40 -33 50 120 2 17 17 17 5 159 259 84 134 220 270 70 185 220 270 70 185 Act 2 H2H B Act 2 Champ B Act 2 Unique B Act 2 (N) H2H B Act 2 (N) Champ B Act 2 (N) Unique B Act 2 (H) H2H B Act 2 (H) Champ B Act 2 (H) Unique B Act 2 (H) Champ B Desecrated Act 2 (H) Unique B Desecrated Act 2 (H) Herald B 1 0
|
||||
maggotqueen4 287 maggotqueen1 maggotqueen5 3 GiantLampreyQueen maggotqueen4 sandmaggot SandMaggotQueen MQ 1 sandmaggot4 8 0 S1 1 1 4 4 1 21 49 84 maggotqueen maggotqueen 10 15 15 15 10 11 12 6 6 6 goospit4 1 1 1 1 MagottUp seq_maggotup 1 MagottDown seq_maggotdown 1 MagottLay seq_maggotlay 1 QueenDeath seq_queendeath 1 100 75 50 -50 -40 -33 50 120 2 21 21 21 5 160 257 85 134 220 270 70 185 220 270 70 185 Act 3 H2H A Act 3 Champ A Act 3 Unique A Act 3 (N) H2H A Act 3 (N) Champ A Act 3 (N) Unique A Act 3 (H) H2H A Act 3 (H) Champ A Act 3 (H) Unique A Act 3 (H) Champ A Desecrated Act 3 (H) Unique A Desecrated Act 3 (H) Herald A 1 0
|
||||
maggotqueen5 288 maggotqueen1 4 WorldKillerQueen maggotqueen5 sandmaggot SandMaggotQueen MQ 1 sandmaggot5 8 0 S1 1 1 4 4 1 29 50 85 maggotqueen maggotqueen 10 15 15 15 11 12 13 4 4 4 goospit5 1 1 1 1 MagottUp seq_maggotup 1 MagottDown seq_maggotdown 1 MagottLay seq_maggotlay 1 QueenDeath seq_queendeath 1 100 75 50 -50 -40 -33 50 120 2 29 29 29 5 157 257 84 153 220 270 70 185 220 270 70 185 Act 4 H2H A Act 4 Champ A Act 4 Unique A Act 4 (N) H2H A Act 4 (N) Champ A Act 4 (N) Unique A Act 4 (H) H2H A Act 4 (H) Champ A Act 4 (H) Unique A Act 4 (H) Champ A Desecrated Act 4 (H) Unique A Desecrated Act 4 (H) Herald A 1 0
|
||||
claygolem 289 claygolem 0 ClayGolem claygolem golem NecroPet G1 1 1 1 8 8 0 claygolem claygolem 11 15 15 15 85 85 85 1 1 1 1 1 1 -50 -50 -50 25 20 50 25 20 50 25 20 50 3 1 21 21 21 5 100 100 100 2 5 40 4 7 40 175 175 100 2 6 66 5 10 66 275 275 100 3 7 92 6 11 92 0
|
||||
bloodgolem 290 bloodgolem 0 BloodGolem bloodgolem golem NecroPet G2 1 1 1 9 9 0 bloodgolem bloodgolem 11 15 15 15 90 90 90 1 1 1 1 1 1 BloodGolem NU 0 100 100 100 -50 -50 -50 20 20 20 20 20 20 3 1 31 31 31 5 201 201 120 7 20 60 14 30 60 388 388 120 11 28 104 20 43 104 637 637 120 12 33 148 24 50 148 0
|
||||
irongolem 291 irongolem 0 IronGolem irongolem golem NecroPet G4 1 1 1 9 9 0 irongolem irongolem 11 15 15 15 90 90 90 1 1 1 1 1 1 1 -50 -50 -50 50 100 50 100 50 100 3 1 41 41 41 5 306 306 140 7 19 80 15 29 80 595 595 140 11 30 138 23 45 138 980 980 140 12 33 197 25 49 197 0
|
||||
firegolem 292 firegolem 0 FireGolem firegolem golem NecroPet G3 1 1 1 10 10 0 firegolem firegolem 11 15 15 15 90 90 90 1 1 1 1 1 1 -50 -50 -50 100 100 100 3 1 50 50 50 5 313 313 200 10 27 120 21 41 120 613 613 200 15 39 209 30 60 209 1013 1013 200 18 47 298 35 71 298 A1 fire 80 5 10 80 80 0
|
||||
claygolem 289 claygolem 0 ClayGolem claygolem golem NecroPet G1 1 1 1 8 8 0 claygolem claygolem 11 15 15 15 85 85 85 1 1 1 1 1 1 1 -50 -50 -50 25 20 50 25 20 50 25 20 50 3 1 21 21 21 5 100 100 100 2 5 40 4 7 40 175 175 100 2 6 66 5 10 66 275 275 100 3 7 92 6 11 92 0
|
||||
bloodgolem 290 bloodgolem 0 BloodGolem bloodgolem golem NecroPet G2 1 1 1 9 9 0 bloodgolem bloodgolem 11 15 15 15 90 90 90 1 1 1 1 1 1 1 BloodGolem NU 0 100 100 100 -50 -50 -50 20 20 20 20 20 20 3 1 31 31 31 5 201 201 120 7 20 60 14 30 60 388 388 120 11 28 104 20 43 104 637 637 120 12 33 148 24 50 148 0
|
||||
irongolem 291 irongolem 0 IronGolem irongolem golem NecroPet G4 1 1 1 9 9 0 irongolem irongolem 11 15 15 15 90 90 90 1 1 1 1 1 1 1 1 -50 -50 -50 50 100 50 100 50 100 3 1 41 41 41 5 306 306 140 7 19 80 15 29 80 595 595 140 11 30 138 23 45 138 980 980 140 12 33 197 25 49 197 0
|
||||
firegolem 292 firegolem 0 FireGolem firegolem golem NecroPet G3 1 1 1 10 10 0 firegolem firegolem 11 15 15 15 90 90 90 1 1 1 1 1 1 1 -50 -50 -50 100 100 100 3 1 50 50 50 5 313 313 200 10 27 120 21 41 120 613 613 200 15 39 209 30 60 209 1013 1013 200 18 47 298 35 71 298 A1 fire 80 5 10 80 80 0
|
||||
familiar 293 familiar 0 Dummy familiar Idle FI 1 1 12 6 0 15 15 15 90 90 90 1 1 1 1 0 0
|
||||
act3male 294 act3male 0 Dummy act3male human Towner N4 1 1 1 3 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 2 0
|
||||
act3male 294 act3male 0 Dummy act3male human Towner N4 1 1 1 3 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
baboon6 295 baboon6 0 NightMarauder baboon6 baboon6 baboon Baboon BB 1 2 3 10 16 1 24 59 85 baboon baboon 10 15 14 13 33 33 33 20 30 35 50 50 50 50 50 50 1 2 3 1 1 1 1 1 -50 -25 100 33 105 2 24 24 24 5 107 151 85 97 51 151 92 51 151 92 80 125 140 135 60 110 115 50 150 125 80 125 140 135 60 110 115 50 150 135 A1 cold 85 31 68 25 85 30 80 50 85 40 80 75 Act 3 H2H B Act 3 Champ B Act 3 Unique B Act 3 (N) H2H B Act 3 (N) Champ B Act 3 (N) Unique B Act 3 (H) H2H B Act 3 (H) Champ B Act 3 (H) Unique B Act 3 (H) Champ B Desecrated Act 3 (H) Unique B Desecrated Act 3 (H) Herald B 0
|
||||
act3female 296 act3female 0 Dummy act3female human Towner N3 1 1 1 3 2 0 lightnpc lightnpc 15 15 15 1 1 1 1 1 2 0
|
||||
natalya 297 natalya 0 Natalya natalya human Npc TZ 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
act3female 296 act3female 0 Dummy act3female human Towner N3 1 1 1 3 2 0 lightnpc lightnpc 15 15 15 1 1 1 1 1 1 2 0
|
||||
natalya 297 natalya 0 Natalya natalya human Npc TZ 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
vilemother1 298 vilemother1 vilemother2 0 FleshSpawner vilemother1 vilekind VileMother VM 1 vilechild1 0 0 NU 1 2 7 7 1 24 56 82 vilemother vilemother 10 15 14 13 16 17 20 5 5 6 30 35 40 80 85 90 70 60 50 30 30 30 10 8 7 1 1 1 1 1 1 Nest seq_vileres 1 100 75 50 -50 -40 -33 66 140 2 24 24 24 5 229 295 63 142 82 182 92 200 250 80 130 80 130 110 200 250 80 130 80 130 110 Act 4 Cast A Act 4 Champ A Act 4 Unique A Act 4 (N) Cast A Act 4 (N) Champ A Act 4 (N) Unique A Act 4 (H) Cast A Act 4 (H) Champ A Act 4 (H) Unique A Act 4 (H) Champ A Desecrated Act 4 (H) Unique A Desecrated Act 4 (H) Herald A 0
|
||||
vilemother2 299 vilemother1 vilemother3 1 StygianHag vilemother2 vilekind VileMother VM 1 vilechild2 0 0 NU 1 3 7 7 1 27 57 84 vilemother vilemother 10 15 14 13 16 18 21 5 5 6 30 35 40 80 90 95 70 60 50 30 30 30 10 8 7 1 1 1 1 1 1 Nest seq_vileres 1 100 75 50 -50 -40 -33 25 50 66 150 2 27 27 27 5 229 295 63 154 89 189 93 200 250 80 130 80 130 110 200 250 80 130 80 130 110 Act 4 Cast A Act 4 Champ A Act 4 Unique A Act 4 (N) Cast A Act 4 (N) Champ A Act 4 (N) Unique A Act 4 (H) Cast A Act 4 (H) Champ A Act 4 (H) Unique A Act 4 (H) Champ A Desecrated Act 4 (H) Unique A Desecrated Act 4 (H) Herald A 0
|
||||
vilemother3 300 vilemother1 vilemother4 2 Grotesque vilemother3 vilekind VileMother VM 1 vilechild3 0 0 NU 2 3 7 7 1 30 57 85 vilemother vilemother 10 15 14 13 16 19 22 5 6 6 30 35 40 80 90 95 70 60 50 30 30 30 10 8 7 1 1 1 1 1 1 Nest seq_vileres 1 100 75 50 -50 -40 -33 40 70 66 160 2 29 29 29 5 228 294 63 168 90 190 92 200 250 80 130 80 130 110 200 250 80 130 80 130 110 Act 4 Cast B Act 4 Champ B Act 4 Unique B Act 4 (N) Cast B Act 4 (N) Champ B Act 4 (N) Unique B Act 4 (H) Cast B Act 4 (H) Champ B Act 4 (H) Unique B Act 4 (H) Champ B Desecrated Act 4 (H) Unique B Desecrated Act 4 (H) Herald B 0
|
||||
@@ -317,9 +317,9 @@ quillbear2 314 quillbear1 quillbear3 1 SpikeGiant quillbear2 quillrat QuillMoth
|
||||
quillbear3 315 quillbear1 quillbear4 2 ThornBrute quillbear3 quillrat QuillMother S7 1 1 3 5 5 1 15 15 15 80 80 90 70 80 80 12 8 8 15 15 15 1 1 1 1 2 0
|
||||
quillbear4 316 quillbear1 quillbear5 3 RazorBeast quillbear4 quillrat QuillMother S7 1 2 3 5 5 1 15 15 15 90 90 95 80 80 85 8 7 7 15 15 15 1 1 1 1 2 0
|
||||
quillbear5 317 quillbear1 4 GiantUrchin quillbear5 quillrat QuillMother S7 1 2 4 6 6 1 15 15 15 95 95 95 90 90 90 6 6 6 15 15 15 1 1 1 1 2 0
|
||||
snake 318 snake 0 Dummy snake Idle CO 1 1 1 2 2 1 15 15 15 1 1 1 1 1 2 0
|
||||
parrot 319 parrot 0 Dummy parrot Idle PR 1 1 1 5 5 1 15 15 15 1 1 1 1 1 1 2 0
|
||||
fish 320 fish 0 Dummy fish Idle FJ 1 1 1 5 5 1 15 15 15 1 1 1 1 1 1 2 0
|
||||
snake 318 snake 0 Dummy snake Idle CO 1 1 1 2 2 1 15 15 15 1 1 1 1 1 1 2 0
|
||||
parrot 319 parrot 0 Dummy parrot Idle PR 1 1 1 5 5 1 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
fish 320 fish 0 Dummy fish Idle FJ 1 1 1 5 5 1 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
evilhole1 321 evilhole1 evilhole2 0 Dummy evilhole1 EvilHole EH 1 fallen1 0 0 NU 1 1 0 0 1 1 34 67 smithdeath smithdeath 9 15 15 15 10 10 10 50 50 50 1 1 1 Nest S4 1 -50 2 0
|
||||
evilhole2 322 evilhole1 evilhole3 1 Dummy evilhole2 EvilHole EH fallen1 0 0 NU 1 1 0 0 1 4 37 70 smithdeath smithdeath 9 15 15 15 10 10 10 50 50 50 1 1 1 Nest S4 1 -50 2 0
|
||||
evilhole3 323 evilhole1 evilhole4 2 Dummy evilhole3 EvilHole EH fallen1 0 0 NU 1 1 0 0 1 7 40 73 smithdeath smithdeath 9 15 15 15 10 10 10 50 50 50 1 1 1 Nest S4 1 -50 2 0
|
||||
@@ -330,15 +330,15 @@ trap-horzmissile 327 trap-horzmissile 0 a trap trap-horzmissile Trap-RightArr
|
||||
trap-vertmissile 328 trap-vertmissile 0 a trap trap-vertmissile Trap-LeftArrow 9A 1 1 1 0 0 1 1 34 67 sk_archer sk_archer 15 15 15 5 5 5 15 15 15 30 23 18 200 200 200 trap spike left trap poison ball left trap cursed skull left 1 1 1 PoisonBallTrap S1 1 CursedBallTrapLeft S1 1 2 51 151 3001 50 150 5000 50 150 5000 S1 pois 100 33 33 150 100 33 33 150 100 33 33 150 0
|
||||
trap-poisoncloud 329 trap-poisoncloud 0 a trap trap-poisoncloud Trap-Poison 9A 1 1 1 0 0 1 15 15 15 20 20 20 1 1 1 15 15 15 trappoisonjavcloud 1 1 1 PrimePoisonNova A1 1 2 0
|
||||
trap-lightning 330 trap-lightning 0 a trap trap-lightning Trap-Missile 9A 1 1 1 0 0 1 15 15 15 25 30 32 1 1 1 15 15 15 chainlightning 1 1 1 2 0
|
||||
act2guard2 331 act2guard2 0 Kaelan act2guard2 human JarJar GU 1 1 1 6 6 0 act3hire act3hire 11 15 15 15 1 1 1 1 1 1 1 1 100 100 100 -50 -50 -50 2 0
|
||||
act2guard2 331 act2guard2 0 Kaelan act2guard2 human JarJar GU 1 1 1 6 6 0 act3hire act3hire 11 15 15 15 1 1 1 1 1 1 1 1 1 100 100 100 -50 -50 -50 2 0
|
||||
invisospawner 332 invisospawner 0 Dummy invisospawner InvisoSpawner K9 1 1 1 0 0 0 15 15 15 4 4 4 5 5 5 125 125 125 1 1 1 1 2 0
|
||||
diabloclone 333 diablo 0 Diablo diablo demon Diablo DI 1 1 1 8 8 0 110 110 110 diablo diablo 14 15 13 12 1 1 1 1 1 DiabLight SC 2 DiabCold S2 2 DiabFire S1 4 DiabWall S3 2 DiabRun seq_diablorun 5 PrimeFirewall S3 8 DiabPrison S3 1 Diablogeddon S3 5 15 15 15 -10 -10 -10 50 50 75 75 75 75 50 50 75 75 75 75 50 50 95 95 95 95 2 1 50 50 50 5 6427 6427 87 3462 77 197 313 113 257 251 6427 6427 140 3462 100 190 215 110 230 200 6427 6427 140 3462 100 190 215 110 230 200 ROP ROP ROP ROP (N) ROP (N) ROP (N) ROP (H) ROP (H) ROP (H) 1 0
|
||||
diabloclone 333 diablo 0 Diablo diablo demon Diablo DI 1 1 1 8 8 0 110 110 110 diablo diablo 14 15 13 12 1 1 1 1 1 1 DiabLight SC 2 DiabCold S2 2 DiabFire S1 4 DiabWall S3 2 DiabRun seq_diablorun 5 PrimeFirewall S3 8 DiabPrison S3 1 Diablogeddon S3 5 15 15 15 -10 -10 -10 50 50 75 75 75 75 50 50 75 75 75 75 50 50 95 95 95 95 2 1 50 50 50 5 6427 6427 87 3462 77 197 313 113 257 251 6427 6427 140 3462 100 190 215 110 230 200 6427 6427 140 3462 100 190 215 110 230 200 ROP ROP ROP ROP (N) ROP (N) ROP (N) ROP (H) ROP (H) ROP (H) 1 0
|
||||
suckernest1 334 suckernest1 suckernest2 0 SuckerNest suckernest1 MosquitoNest DH mosquito1 -2 -2 NU 1 1 0 0 1 15 15 15 16 17 21 25 26 27 200 180 175 1 1 1 1 Nest seq_mosquitonest 1 2 207 550 84 196 400 550 65 350 400 550 65 350 Act 1 H2H B Act 1 Champ B Act 1 Unique B Act 1 (N) H2H B Act 1 (N) Champ B Act 1 (N) Unique B Act 1 (H) H2H B Act 1 (H) Champ B Act 1 (H) Unique B Act 1 (H) Champ B Desecrated Act 1 (H) Unique B Desecrated Act 1 (H) Herald B 0
|
||||
suckernest2 335 suckernest1 suckernest3 1 FeederNest suckernest2 MosquitoNest DH mosquito2 -2 -2 NU 1 1 0 0 1 15 15 15 16 18 22 25 26 27 200 180 175 1 1 1 1 Nest seq_mosquitonest 1 2 216 550 84 196 400 550 65 350 400 550 65 350 Act 1 H2H B Act 1 Champ B Act 1 Unique B Act 1 (N) H2H B Act 1 (N) Champ B Act 1 (N) Unique B Act 1 (H) H2H B Act 1 (H) Champ B Act 1 (H) Unique B Act 1 (H) Champ B Desecrated Act 1 (H) Unique B Desecrated Act 1 (H) Herald B 0
|
||||
suckernest3 336 suckernest1 suckernest4 2 BloodHookNest suckernest3 MosquitoNest DH mosquito3 -2 -2 NU 1 1 0 0 1 15 15 15 16 19 23 25 26 27 200 180 175 1 1 1 1 Nest seq_mosquitonest 1 2 214 550 84 196 400 550 65 350 400 550 65 350 Act 2 H2H B Act 2 Champ B Act 2 Unique B Act 1 (N) H2H B Act 2 (N) Champ B Act 2 (N) Unique B Act 1 (H) H2H B Act 2 (H) Champ B Act 2 (H) Unique B Act 2 (H) Champ B Desecrated Act 2 (H) Unique B Desecrated Act 2 (H) Herald B 0
|
||||
suckernest4 337 suckernest1 3 BloodWingNest suckernest4 MosquitoNest DH mosquito4 -2 -2 NU 1 1 0 0 1 15 15 15 16 20 24 25 26 27 200 180 175 1 1 1 1 Nest seq_mosquitonest 1 2 214 550 85 201 400 550 65 350 400 550 65 350 Act 3 H2H B Act 3 Champ B Act 3 Unique B Act 1 (N) H2H B Act 3 (N) Champ B Act 3 (N) Unique B Act 1 (H) H2H B Act 3 (H) Champ B Act 3 (H) Unique B Act 3 (H) Champ B Desecrated Act 3 (H) Unique B Desecrated Act 3 (H) Herald B 0
|
||||
act2hire 338 act2hire 0 DesertMerc act2hire human Hireable GU 1 1 1 7 11 0 1 34 67 act2hire act2hire 11 1 1 1 2 2 2 4 4 4 1 1 1 1 1 1 sppl none Jab seq_act2guardjab 1 100 100 100 -50 -50 -50 4 0
|
||||
minispider 339 minispider 0 Dummy minispider Idle LS 1 1 1 1 2 1 spider spider 15 15 15 1 1 1 1 2 0
|
||||
act2hire 338 act2hire 0 DesertMerc act2hire human Hireable GU 1 1 1 7 11 0 1 34 67 act2hire act2hire 11 1 1 1 2 2 2 4 4 4 1 1 1 1 1 1 1 sppl none Jab seq_act2guardjab 1 100 100 100 -50 -50 -50 4 0
|
||||
minispider 339 minispider 0 Dummy minispider Idle LS 1 1 1 1 2 1 spider spider 15 15 15 1 1 1 1 1 2 0
|
||||
boneprison1 340 boneprison1 0 skillname88 boneprison1 construct Idle 67 1 1 1 0 0 0 12 45 78 boneprison boneprison 1 15 15 15 1 1 1 1 1 1 70 70 90 200 50 90 200 0 193 385 84 250 250 35 250 250 35 0
|
||||
boneprison2 341 boneprison2 0 skillname88 boneprison2 construct Idle 66 1 1 1 0 0 0 12 45 78 boneprison boneprison 1 15 15 15 1 1 1 1 1 1 70 70 90 200 50 90 200 0 193 385 84 250 250 35 250 250 35 0
|
||||
boneprison3 342 boneprison3 0 skillname88 boneprison3 construct Idle 69 1 1 1 0 0 0 12 45 78 boneprison boneprison 1 15 15 15 1 1 1 1 1 1 70 70 90 200 50 90 200 0 193 385 84 250 250 35 250 250 35 0
|
||||
@@ -350,23 +350,23 @@ councilmember3 347 councilmember1 2 Council Member councilmember3 councilmember
|
||||
turret1 348 turret1 turret2 0 Turret turret1 construct DesertTurret PB 1 1 1 0 0 1 10 43 76 turret turret 9 15 15 15 10 7 3 5 6 7 120 100 80 30 30 30 5 5 5 1 1 1 DesertTurret seq_desertturret 1 -50 50 95 50 85 1000 50 99 50 85 1000 25 50 99 50 85 1000 0 291 387 39 95 400 450 35 400 400 450 35 400 0
|
||||
turret2 349 turret1 turret3 1 Turret turret2 construct DesertTurret PB 1 1 1 0 0 1 10 43 76 turret turret 9 15 15 15 10 7 3 6 7 8 120 100 80 30 30 30 5 5 5 1 1 1 DesertTurret seq_desertturret 1 -50 50 95 50 85 1000 50 99 50 85 1000 25 50 99 50 85 1000 0 291 387 39 95 400 450 35 400 400 450 35 400 0
|
||||
turret3 350 turret1 2 Turret turret3 construct DesertTurret PB 1 1 1 0 0 1 10 43 76 turret turret 9 15 15 15 10 7 3 7 8 9 120 100 80 30 30 30 5 5 5 1 1 1 DesertTurret seq_desertturret 1 -50 50 95 50 85 1000 50 99 50 85 1000 25 50 99 50 85 1000 0 291 387 39 95 400 450 35 400 400 450 35 400 0
|
||||
hydra1 351 hydra1 0 Hydra hydra1 Hydra HX 1 1 1 0 0 0 hydra hydra 15 15 15 1 1 1 1 HydraMissile A1 1 2 0
|
||||
hydra2 352 hydra2 0 Hydra hydra2 Hydra 21 1 1 1 0 0 0 hydra hydra 15 15 15 1 1 1 1 HydraMissile A1 1 2 0
|
||||
hydra3 353 hydra3 0 Hydra hydra3 Hydra HZ 1 1 1 0 0 0 hydra hydra 15 15 15 1 1 1 1 HydraMissile A1 1 2 0
|
||||
hydra1 351 hydra1 0 Hydra hydra1 Hydra HX 1 1 1 0 0 0 hydra hydra 15 15 15 1 1 1 1 1 HydraMissile A1 1 2 0
|
||||
hydra2 352 hydra2 0 Hydra hydra2 Hydra 21 1 1 1 0 0 0 hydra hydra 15 15 15 1 1 1 1 1 HydraMissile A1 1 2 0
|
||||
hydra3 353 hydra3 0 Hydra hydra3 Hydra HZ 1 1 1 0 0 0 hydra hydra 15 15 15 1 1 1 1 1 HydraMissile A1 1 2 0
|
||||
trap-melee 354 trap-melee 0 a trap trap-melee construct Trap-Melee M4 1 1 1 0 0 1 skeleton skeleton 15 15 15 70 70 70 15 15 15 1 1 1 2 5 284 379 38 75 150 180 35 75 150 180 35 75 150 180 0
|
||||
seventombs 355 seventombs 0 Dummy seventombs 7TIllusion 9A 1 1 1 0 0 0 clawviper clawviper 15 15 15 chainlightning 1 1 2 0
|
||||
dopplezon 356 dopplezon 0 Dopplezon dopplezon Idle VK 1 1 1 9 9 0 dopplezon dopplezon 14 15 15 15 1 1 1 1 -50 -50 -50 15 1 28 28 28 5 10 10 141 10 10 152 10 10 164 0
|
||||
valkyrie 357 valkyrie 0 Valkyrie valkyrie NecroPet VK 1 1 1 11 11 0 valkyrie valkyrie 11 6 6 6 85 85 85 1 1 1 1 1 1 -50 -50 -50 12 1 28 28 28 5 400 480 141 9 24 250 18 37 250 400 480 152 13 35 300 26 53 300 400 480 164 16 41 350 31 62 350 0
|
||||
act2guard3 358 act2guard3 0 Dummy act2guard3 human Idle SK 1 1 1 8 8 0 mednpc mednpc 11 15 15 15 rogue1 1 1 1 1 1 1 1 Jab seq_act2guardjab 1 100 100 100 -50 -50 -50 70 70 70 0 17 17 17 5 577 770 84 120 170 125 0
|
||||
act3hire 359 act3hire 0 Iron Wolf act3hire human Hireable IW 1 1 1 7 11 0 1 34 67 act3hire act3hire 11 1 1 1 3 3 3 4 4 4 1 1 1 1 1 1 swor shie 1 100 100 100 -50 -50 -50 4 2 0
|
||||
dopplezon 356 dopplezon 0 Dopplezon dopplezon Idle VK 1 1 1 9 9 0 dopplezon dopplezon 14 15 15 15 1 1 1 1 1 -50 -50 -50 15 1 28 28 28 5 10 10 141 10 10 152 10 10 164 0
|
||||
valkyrie 357 valkyrie 0 Valkyrie valkyrie NecroPet VK 1 1 1 11 11 0 valkyrie valkyrie 11 6 6 6 85 85 85 1 1 1 1 1 1 1 -50 -50 -50 12 1 28 28 28 5 400 480 141 9 24 250 18 37 250 400 480 152 13 35 300 26 53 300 400 480 164 16 41 350 31 62 350 0
|
||||
act2guard3 358 act2guard3 0 Dummy act2guard3 human Idle SK 1 1 1 8 8 0 mednpc mednpc 11 15 15 15 rogue1 1 1 1 1 1 1 1 1 Jab seq_act2guardjab 1 100 100 100 -50 -50 -50 70 70 70 0 17 17 17 5 577 770 84 120 170 125 0
|
||||
act3hire 359 act3hire 0 Iron Wolf act3hire human Hireable IW 1 1 1 7 11 0 1 34 67 act3hire act3hire 11 1 1 1 3 3 3 4 4 4 1 1 1 1 1 1 1 swor shie 1 100 100 100 -50 -50 -50 4 2 0
|
||||
megademon1 360 megademon1 megademon2 0 Balrog megademon1 megademon Megademon DM 1 1 2 10 16 1 24 55 82 megademon megademon 10 15 13 11 50 65 80 40 50 55 80 85 90 70 70 70 50 50 50 75 60 45 1 1 1 1 1 MegademonInferno S1 6 100 85 66 -50 -40 -33 70 80 50 110 75 50 75 2 32 32 32 5 191 229 101 129 51 94 125 210 250 115 130 100 160 160 210 250 115 130 100 160 160 Act 4 H2H A Act 4 Champ A Act 4 Unique A Act 4 (N) H2H A Act 4 (N) Champ A Act 4 (N) Unique A Act 4 (H) H2H A Act 4 (H) Champ A Act 4 (H) Unique A Act 4 (H) Champ A Desecrated Act 4 (H) Unique A Desecrated Act 4 (H) Herald A 0
|
||||
megademon2 361 megademon1 megademon3 1 PitLord megademon2 megademon Megademon DM 1 1 3 10 16 1 27 56 83 megademon megademon 10 15 13 11 55 70 85 45 55 60 80 90 95 70 70 70 60 60 60 75 60 45 1 1 1 1 1 MegademonInferno S1 7 100 85 66 -50 -40 -33 70 80 50 120 75 50 75 2 36 36 36 5 190 229 101 140 53 101 126 210 250 115 130 100 160 160 210 250 115 130 100 160 160 Act 4 H2H B Act 4 Champ B Act 4 Unique B Act 4 (N) H2H B Act 4 (N) Champ B Act 4 (N) Unique B Act 4 (H) H2H B Act 4 (H) Champ B Act 4 (H) Unique B Act 4 (H) Champ B Desecrated Act 4 (H) Unique B Desecrated Act 4 (H) Herald B 0
|
||||
megademon3 362 megademon1 megademon4 2 VenomLord megademon3 megademon Megademon DM 1 2 3 10 16 1 30 57 84 megademon megademon 10 15 13 11 60 75 90 50 60 65 80 95 97 70 70 70 70 70 70 75 60 45 1 1 1 1 1 MegademonInferno S1 8 100 85 66 -50 -40 -33 70 70 80 100 50 130 75 50 75 2 39 39 39 5 191 228 101 152 53 95 125 210 250 115 130 100 160 160 210 250 115 130 100 160 160 Act 4 H2H B Act 4 Champ B Act 4 Unique B Act 4 (N) H2H B Act 4 (N) Champ B Act 4 (N) Unique B Act 4 (H) H2H B Act 4 (H) Champ B Act 4 (H) Unique B Act 4 (H) Champ B Desecrated Act 4 (H) Unique B Desecrated Act 4 (H) Herald B 0
|
||||
necroskeleton 363 necroskeleton 0 skeleton necroskeleton skeleton NecroPet SK 1 1 1 13 15 1 necroskeleton necroskeleton 10 15 15 15 60 60 60 75 75 75 15 15 15 50 50 50 0 0 0 1 1 1 1 1 1 1 -50 -50 -50 4 1 3 3 3 5 21 21 5 1 2 5 1 2 5 30 30 5 1 2 4 1 2 4 42 42 6 1 2 6 1 2 6 0
|
||||
necromage 364 necromage 0 skillan80 necromage skeleton NecroPet SK 1 1 1 12 14 1 necromage necromage 10 15 15 15 80 80 80 75 75 75 15 15 15 50 50 50 0 0 0 1 1 1 1 1 1 1 NecromageMissile A1 1 -50 -50 -50 4 1 3 3 3 5 61 61 24 1 2 5 1 2 5 88 88 26 1 2 4 1 2 4 123 123 28 1 2 6 1 2 6 0
|
||||
griswold 365 griswold 0 Griswold griswold undead Griswold GZ 1 1 1 3 4 0 5 39 84 zombie zombie 11 15 13 10 1 1 1 1 1 100 85 66 -50 -40 -33 50 50 50 50 120 2 6 6 6 5 608 608 84 273 51 151 91 608 608 80 273 50 150 100 608 608 80 273 50 150 100 Griswold Griswold Griswold Griswold Desecrated A Griswold Desecrated A Griswold Desecrated A Griswold (N) Griswold (N) Griswold (N) Griswold (N) Desecrated A Griswold (N) Desecrated A Griswold (N) Desecrated A Griswold (H) Griswold (H) Griswold (H) Griswold (H) Desecrated A Griswold (H) Desecrated A Griswold (H) Desecrated A 0
|
||||
necroskeleton 363 necroskeleton 0 skeleton necroskeleton skeleton NecroPet SK 1 1 1 13 15 1 necroskeleton necroskeleton 10 15 15 15 60 60 60 75 75 75 15 15 15 50 50 50 0 0 0 1 1 1 1 1 1 1 1 -50 -50 -50 4 1 3 3 3 5 21 21 5 1 2 5 1 2 5 30 30 5 1 2 4 1 2 4 42 42 6 1 2 6 1 2 6 0
|
||||
necromage 364 necromage 0 skillan80 necromage skeleton NecroPet SK 1 1 1 12 14 1 necromage necromage 10 15 15 15 80 80 80 75 75 75 15 15 15 50 50 50 0 0 0 1 1 1 1 1 1 1 1 NecromageMissile A1 1 -50 -50 -50 4 1 3 3 3 5 61 61 24 1 2 5 1 2 5 88 88 26 1 2 4 1 2 4 123 123 28 1 2 6 1 2 6 0
|
||||
griswold 365 griswold 0 Griswold griswold undead Griswold GZ 1 1 1 3 4 0 5 39 84 zombie zombie 11 15 13 10 1 1 1 1 1 1 100 85 66 -50 -40 -33 50 50 50 50 120 2 6 6 6 5 608 608 84 273 51 151 91 608 608 80 273 50 150 100 608 608 80 273 50 150 100 Griswold Griswold Griswold Griswold Desecrated A Griswold Desecrated A Griswold Desecrated A Griswold (N) Griswold (N) Griswold (N) Griswold (N) Desecrated A Griswold (N) Desecrated A Griswold (N) Desecrated A Griswold (H) Griswold (H) Griswold (H) Griswold (H) Desecrated A Griswold (H) Desecrated A Griswold (H) Desecrated A 0
|
||||
compellingorb 366 compellingorb 0 compellingorb compellingorb construct Idle 9a 1 1 1 0 0 0 40 55 80 compellingorb compellingorb 15 15 15 1 1 1 1000 1000 1000 2 152 303 84 303 303 5 1010 303 303 5 1010 0
|
||||
tyrael2 367 tyrael2 0 tyrael tyrael2 NpcStationary TY 1 1 1 0 0 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 2 0
|
||||
tyrael2 367 tyrael2 0 tyrael tyrael2 NpcStationary TY 1 1 1 0 0 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
darkwanderer 368 darkwanderer 0 youngdiablo darkwanderer DarkWanderer 1Z 1 1 1 2 2 0 darkwanderer darkwanderer 15 15 15 1 1 1 2 0
|
||||
trap-nova 369 trap-nova 0 a trap trap-nova Trap-Nova 9A 1 1 1 0 0 1 15 15 15 20 20 20 1 1 1 15 15 15 firebolt nova 1 1 1 Trap Nova S1 1 90 90 90 90 90 90 90 90 90 90 90 90 50 90 90 90 90 90 2 0
|
||||
spiritmummy 370 spiritmummy 0 Dummy spiritmummy mummy Idle xx 2 3 10 16 1 24 57 85 10 1 1 1 1 1 1 -50 -25 2 Act 2 H2H C Act 2 Champ C Act 2 Unique C Act 2 (N) H2H C Act 2 (N) Champ C Act 2 (N) Unique C Act 2 (H) H2H C Act 2 (H) Champ C Act 2 (H) Unique C Act 2 (H) Champ C Desecrated Act 2 (H) Unique C Desecrated Act 2 (H) Herald C 0
|
||||
@@ -376,8 +376,8 @@ slinger1 373 slinger1 slinger2 0 Slinger slinger1 pantherwoman PantherJavelin
|
||||
slinger2 374 slinger1 slinger3 1 SpearCat slinger2 pantherwoman PantherJavelin PW 1 1 2 3 5 10 1 15 44 77 slinger slinger 10 15 14 13 70 70 70 75 75 75 11 11 11 15 15 15 14 14 14 20 22 26 pantherjav2 1 1 1 1 100 100 100 -50 -40 -33 10 25 140 2 16 16 16 5 54 88 58 67 51 121 94 55 85 95 80 50 85 145 55 85 95 80 50 85 145 A1 cold 5 20 40 15 30 60 Act 2 Miss A Act 2 Champ A Act 2 Unique A Act 2 (N) Miss A Act 2 (N) Champ A Act 2 (N) Unique A Act 2 (H) Miss A Act 2 (H) Champ A Act 2 (H) Unique A Act 2 (H) Champ A Desecrated Act 2 (H) Unique A Desecrated Act 2 (H) Herald A 0
|
||||
slinger3 375 slinger1 slinger4 2 NightSlinger slinger3 pantherwoman PantherJavelin PW 1 1 2 4 5 10 1 17 46 79 slinger slinger 10 15 14 13 70 70 70 80 80 80 10 10 10 20 20 20 13 13 13 20 23 27 pantherjav3 1 1 1 1 100 100 100 -50 -40 -33 10 25 100 2 17 17 17 5 53 87 58 67 55 128 92 55 85 95 80 50 85 145 55 85 95 80 50 85 145 A1 ltng 5 5 80 15 5 110 Act 2 Miss B Act 2 Champ B Act 2 Unique B Act 2 (N) Miss B Act 2 (N) Champ B Act 2 (N) Unique B Act 2 (H) Miss B Act 2 (H) Champ B Act 2 (H) Unique B Act 2 (H) Champ B Desecrated Act 2 (H) Unique B Desecrated Act 2 (H) Herald B 0
|
||||
slinger4 376 slinger1 slinger7 3 HellSlinger slinger4 pantherwoman PantherJavelin PW 1 1 3 4 5 10 1 19 48 80 slinger slinger 10 15 14 13 70 70 70 85 85 85 9 9 9 25 25 25 12 12 12 20 24 28 pantherjav4 1 1 1 1 100 100 100 -50 -40 -33 10 105 2 19 19 19 5 53 86 58 67 47 116 93 55 85 95 80 50 85 145 55 85 95 80 50 85 145 A1 fire 5 30 55 15 40 75 Act 2 Miss C Act 2 Champ C Act 2 Unique C Act 2 (N) Miss C Act 2 (N) Champ C Act 2 (N) Unique C Act 2 (H) Miss C Act 2 (H) Champ C Act 2 (H) Unique C Act 2 (H) Champ C Desecrated Act 2 (H) Unique C Desecrated Act 2 (H) Herald C 0
|
||||
act2guard4 377 act2guard4 0 Dummy act2guard4 human Idle GU 1 1 1 6 6 0 act3hire act3hire 11 15 15 15 1 1 1 1 1 1 1 100 100 100 -50 -50 -50 2 0
|
||||
act2guard5 378 act2guard5 0 Dummy act2guard5 human Idle GU 1 1 1 6 6 0 act3hire act3hire 11 15 15 15 1 1 1 1 1 1 1 100 100 100 -50 -50 -50 2 0
|
||||
act2guard4 377 act2guard4 0 Dummy act2guard4 human Idle GU 1 1 1 6 6 0 act3hire act3hire 11 15 15 15 1 1 1 1 1 1 1 1 100 100 100 -50 -50 -50 2 0
|
||||
act2guard5 378 act2guard5 0 Dummy act2guard5 human Idle GU 1 1 1 6 6 0 act3hire act3hire 11 15 15 15 1 1 1 1 1 1 1 1 100 100 100 -50 -50 -50 2 0
|
||||
skmage_cold1 379 skmage_cold1 skmage_cold2 1 ReturnedMage skmage_cold1 skeleton SkeletonMage SK 1 1 1 2 4 4 2 8 39 69 sk_mage sk_mage 10 15 15 15 35 65 85 9 10 11 30 30 30 5 6 7 0 30 50 18 17 16 20 20 20 5 5 5 skmage2 1 1 1 1 1 SkeletonRaise seq_skeletonraise 1 -50 -40 -25 30 50 50 60 33 140 75 2 9 9 9 5 56 84 84 56 55 80 90 110 55 80 90 110 A1 cold 100 60 110 100 100 60 150 150 100 60 150 200 Act 1 Cast B Act 1 Champ B Act 1 Unique B Act 1 (N) Cast B Act 1 (N) Champ B Act 1 (N) Unique B Act 1 (H) Cast B Act 1 (H) Champ B Act 1 (H) Unique B Act 1 (H) Champ B Desecrated Act 1 (H) Unique B Desecrated Act 1 (H) Herald B 0
|
||||
skmage_cold2 380 skmage_cold1 skmage_cold3 2 BoneMage skmage_cold2 skeleton SkeletonMage SK 1 1 1 3 4 4 2 10 40 70 sk_mage sk_mage 10 15 15 15 35 65 85 9 10 11 30 30 30 5 6 7 0 30 50 18 17 16 20 20 20 5 5 5 skmage2 1 1 1 1 1 SkeletonRaise seq_skeletonraise 1 -50 -40 -25 30 50 50 60 33 150 75 2 11 11 11 5 55 82 84 56 55 80 90 110 55 80 90 110 A1 cold 100 60 110 100 100 60 150 150 100 60 150 200 Act 1 Cast C Act 1 Champ B Act 1 Unique B Act 1 (N) Cast C Act 1 (N) Champ B Act 1 (N) Unique B Act 1 (H) Cast C Act 1 (H) Champ B Act 1 (H) Unique B Act 1 (H) Champ B Desecrated Act 1 (H) Unique B Desecrated Act 1 (H) Herald B 0
|
||||
skmage_cold3 381 skmage_cold1 skmage_cold4 3 BaalColdMage skmage_cold3 skeleton SkeletonMage SK 1 1 2 3 5 5 2 14 43 74 sk_mage sk_mage 10 15 15 15 35 65 85 9 10 11 30 30 30 5 6 7 0 30 50 18 17 16 20 20 20 5 5 5 skmage2 1 1 1 1 1 SkeletonRaise seq_skeletonraise 1 -50 -40 -25 50 30 50 50 50 60 33 75 160 75 2 15 15 15 5 57 81 84 56 55 80 90 110 55 80 90 110 A1 cold 100 60 110 100 100 60 150 150 100 60 150 200 Act 5 Cast A Act 5 Champ A Act 5 Unique A Act 5 (N) Cast A Act 5 (N) Champ A Act 5 (N) Unique A Act 5 (H) Cast A Act 5 (H) Champ A Act 5 (H) Unique A Act 5 (H) Champ A Desecrated Act 5 (H) Unique A Desecrated Act 5 (H) Herald A 0
|
||||
@@ -404,34 +404,34 @@ mephistospirit 401 mephistospirit 0 Dummy mephistospirit undead Spirit M6 1
|
||||
smith 402 smith 0 The Smith smith demon Smith 5P 1 1 1 7 7 0 10 42 79 smith smith 11 15 13 12 1 1 1 1 1 100 85 66 -50 -40 -33 -50 10 25 -50 25 50 -50 0 13 13 13 5 291 291 84 151 101 129 115 400 450 80 227 90 110 146 400 450 80 227 90 110 146 A1 fire 15 30 60 30 40 80 Smith Smith Smith Smith Desecrated A Smith Desecrated A Smith Desecrated A Smith (N) Smith (N) Smith (N) Smith (N) Desecrated A Smith (N) Desecrated A Smith (N) Desecrated A Smith (H) Smith (H) Smith (H) Smith (H) Desecrated A Smith (H) Desecrated A Smith (H) Desecrated A 0
|
||||
trappedsoul1 403 trappedsoul1 0 TrappedSoul trappedsoul1 TrappedSoul 10 1 1 3 0 0 1 30 57 75 trappedsoul1 trappedsoul1 4 15 15 15 1 1 1 1 100 100 100 70 70 100 90 150 90 2 5 57 76 2 1 16 37 148 16 37 148 50 70 55 30 30 60 180 30 60 180 50 70 55 30 30 60 180 30 60 180 Trapped Soul Trapped Soul Trapped Soul Trapped Soul (N) Trapped Soul (N) Trapped Soul (N) Trapped Soul (H) Trapped Soul (H) Trapped Soul (H) 1 1 1 0
|
||||
trappedsoul2 404 trappedsoul2 0 TrappedSoul trappedsoul2 TrappedSoul 13 1 1 3 0 0 1 30 57 75 trappedsoul2 trappedsoul2 4 15 15 15 1 1 1 1 100 100 100 70 70 100 90 150 90 2 5 57 76 2 1 16 37 148 16 37 148 50 70 55 30 30 60 180 30 60 180 50 70 55 30 30 60 180 30 60 180 Trapped Soul Trapped Soul Trapped Soul Trapped Soul (N) Trapped Soul (N) Trapped Soul (N) Trapped Soul (H) Trapped Soul (H) Trapped Soul (H) 1 1 1 0
|
||||
jamella 405 jamella 0 Jamella jamella human Npc ja 1 1 1 2 2 0 jamella jamella 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
jamella 405 jamella 0 Jamella jamella human Npc ja 1 1 1 2 2 0 jamella jamella 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
izualghost 406 izualghost 0 Izual izualghost NpcStationary 17 1 1 1 0 0 0 izualspirit izualspirit 15 15 15 1 1 1 1 1 2 0
|
||||
fetish11 407 fetish11 0 RatMan fetish11 fetish Fetish FE 1 fetish3 fetishblow3 1 1 2 7 1 1 6 6 0 10 43 76 fetish fetish 10 15 15 15 0 0 0 55 55 55 20 20 20 0 0 0 0 0 0 1 1 1 1 1 SkeletonRaise seq_fethisraise 1 100 100 100 -50 -40 -33 2 11 11 11 5 64 110 84 76 29 86 125 50 80 110 85 40 90 125 50 80 110 85 40 90 125 Act 3 H2H B Act 3 Champ B Act 3 Unique B Act 3 (N) H2H B Act 3 (N) Champ B Act 3 (N) Unique B Act 3 (H) H2H B Act 3 (H) Champ B Act 3 (H) Unique B Act 3 (H) Champ B Desecrated Act 3 (H) Unique B Desecrated Act 3 (H) Herald B 0
|
||||
malachai 408 malachai 0 Malachai malachai human Buffy 36 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
malachai 408 malachai 0 Malachai malachai human Buffy 36 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
hephasto 409 hephasto 0 The Feature Creep hephasto demon Smith 5P 1 1 1 8 8 0 25 60 88 smithdemon smithdemon 12 15 13 12 1 1 1 1 1 100 85 75 -50 -40 -33 -50 -50 50 75 25 25 0 30 30 30 5 760 760 107 339 151 226 112 760 760 100 339 140 170 110 760 760 100 339 140 170 110 A1 fire 25 30 60 50 40 80 Haphesto Haphesto Haphesto Haphesto Desecrated A Haphesto Desecrated A Haphesto Desecrated A Haphesto (N) Haphesto (N) Haphesto (N) Haphesto (N) Desecrated A Haphesto (N) Desecrated A Haphesto (N) Desecrated A Haphesto (H) Haphesto (H) Haphesto (H) Haphesto (H) Desecrated A Haphesto (H) Desecrated A Haphesto (H) Desecrated A 0
|
||||
Expansion
|
||||
wakeofdestruction 410 wakeofdestruction 0 Wake of Destruction wakeofdestruction construct AssassinSentry e9 1 1 1 0 0 0 15 15 15 100 100 100 10 10 10 15 15 15 15 15 15 0 0 0 1 1 1 1 1 Wake Of Destruction Sentry S2 1 -50 -50 -50 2 1 100 100 100 100 100 100 100 100 100 5 10 0
|
||||
chargeboltsentry 411 chargeboltsentry 0 Charged Bolt Sentry chargeboltsentry construct AssassinSentry lg 1 1 1 0 0 0 lightningsentry lightningsentry 15 15 15 100 100 100 10 10 10 15 15 15 25 25 25 0 0 0 1 1 1 1 1 2 BoltSentry seq_chargesentry 1 Shock Field S1 0 -50 -50 -50 2 1 100 100 100 100 100 100 100 100 100 0
|
||||
lightningsentry 412 lightningsentry 0 Lightning Sentry lightningsentry construct AssassinSentry lg 1 1 1 0 0 0 lightningsentry lightningsentry 15 15 15 100 100 100 10 10 10 15 15 15 25 25 25 0 0 0 1 1 1 1 1 sentry lightning seq_chargesentry 1 -50 -50 -50 2 1 100 100 100 100 100 100 100 100 100 0
|
||||
bladecreeper 413 bladecreeper 0 Blade Creeper bladecreeper construct BladeCreeper b8 1 1 1 12 12 0 bladecreeper bladecreeper 15 15 15 1 1 1 1 1 Blade Sentinel A1 1 2 1 100 100 100 100 100 100 100 100 100 0
|
||||
invisopet 414 invisopet 0 Invis Pet invisopet InvisoPet k9 1 1 1 0 0 0 15 15 15 16 16 16 15 15 15 0 0 0 0 0 0 0 0 0 1 1 1 1 -50 -50 -50 2 1 0
|
||||
infernosentry 415 infernosentry 0 Inferno Sentry infernosentry construct AssassinSentry e9 1 1 1 0 0 0 15 15 15 100 100 100 10 10 10 15 15 15 13 13 13 0 0 0 1 1 1 1 1 2 mon inferno sentry seq_infernosentry 1 Wake of Fire Sentry S1 0 -50 -50 -50 2 1 100 100 100 100 100 100 100 100 100 0
|
||||
deathsentry 416 deathsentry 0 Death Sentry deathsentry construct DeathSentry lg 1 1 1 0 0 0 lightningsentry lightningsentry 15 15 15 30 30 30 0 0 0 50 50 50 16 16 16 0 0 0 1 1 1 1 1 mon death sentry seq_chargesentry 1 death sentry ltng seq_chargesentry 1 -50 -50 -50 2 1 100 100 100 100 100 100 100 100 100 0
|
||||
shadowwarrior 417 shadowwarrior 0 Shadow Warrior shadowwarrior ShadowWarrior k9 1 1 1 0 0 0 shadow shadow 11 15 15 15 40 40 40 30 30 30 60 60 60 1 1 1 268 5 64 1 1 1 1 1 1 1 1 1 Fists of Fire seq_swtigerfist 1 Blade Fury seq_swbladefury 1 Blades of Ice seq_swtigerfist 1 Dragon Claw seq_swtigerfist 1 Dragon Flight seq_swdragonflight 1 Claws of Thunder seq_swtigerfist 1 Attack A2 1 -50 -50 -50 40 40 40 3 1 50 50 50 376 376 196 0 0 163 0 0 163 376 376 196 0 0 243 0 0 243 376 376 196 0 0 323 0 0 323 1 0
|
||||
shadowmaster 418 shadowmaster 0 Shadow Master shadowmaster ShadowMaster k9 1 1 1 0 0 0 shadow shadow 11 15 15 15 20 10 10 20 36 36 60 60 60 279 1 1 1 1 1 1 1 1 1 Fists of Fire seq_swtigerfist 1 Blade Fury seq_swbladefury 1 Blades of Ice seq_swtigerfist 1 Dragon Claw seq_swtigerfist 1 Dragon Flight seq_swdragonflight 1 Claws of Thunder seq_swtigerfist 1 Attack A2 1 -50 -50 -50 40 40 40 2 1 50 50 50 376 376 196 0 0 163 0 0 163 376 376 196 0 0 243 0 0 243 376 376 196 0 0 323 0 0 323 1 0
|
||||
druidhawk 419 druidhawk 0 Druid Hawk druidhawk druidhawk Raven hk 1 1 1 10 20 0 raven raven 15 15 15 10 10 10 6 6 6 2 2 2 95 95 95 35 35 35 1 1 1 1 1 1 1 1 Raven NU 0 -50 -50 -50 2 Raven 1 5 26 26 25 26 26 25 26 26 25 0
|
||||
spiritwolf 420 spiritwolf fenris 0 Druid Spirit Wolf spiritwolf DruidWolf wf 1 1 1 5 10 0 wolf wolf 10 15 15 15 22 22 22 20 20 20 14 14 14 20 20 20 26 26 26 1 1 1 1 1 1 1 1 Teleport 2 S1 1 100 100 100 -50 -50 -50 4 Summon Spirit Wolf 1 5 130 130 67 50 130 130 67 50 130 130 67 50 0
|
||||
fenris 421 spiritwolf 1 Druid Fenris fenris DruidWolf wf 1 1 1 5 10 0 wolf wolf 10 15 15 15 22 22 22 20 20 20 25 25 25 24 24 24 30 30 30 1 1 1 1 1 1 1 1 fenris rage A1 1 Teleport 2 S1 1 100 100 100 -50 -50 -50 4 Summon Fenris 1 5 216 216 116 150 216 216 116 150 216 216 116 150 0
|
||||
spiritofbarbs 422 spiritofbarbs heartofwolverine 0 Spirit of Barbs spiritofbarbs Totem x4 1 1 1 6 6 0 druidspirit druidspirit 8 15 15 15 20 20 20 30 30 30 30 30 30 20 20 20 0 0 0 1 1 1 1 1 1 1 -50 -50 -50 25 25 25 25 25 70 25 25 25 25 25 100 25 25 25 25 25 100 3 1 213 213 196 213 213 196 213 213 196 0
|
||||
heartofwolverine 423 spiritofbarbs oaksage 1 Heart of Wolverine heartofwolverine Totem x3 1 1 1 6 6 0 druidspirit druidspirit 8 15 15 15 20 20 20 30 30 30 30 30 30 20 20 20 0 0 0 1 1 1 1 1 1 1 -50 -50 -50 25 25 25 25 25 70 25 25 25 25 25 100 25 25 25 25 25 100 3 1 136 136 123 136 136 123 136 136 123 0
|
||||
oaksage 424 spiritofbarbs 2 Oak Sage oaksage Totem xw 1 1 1 6 6 0 druidspirit druidspirit 8 15 15 15 20 20 20 30 30 30 30 30 30 20 20 20 0 0 0 1 1 1 1 1 1 1 -50 -50 -50 25 25 25 25 25 70 25 25 25 25 25 100 25 25 25 25 25 100 3 1 60 60 49 60 60 49 60 60 49 0
|
||||
plaguepoppy 425 plaguepoppy 0 Druid Plague Poppy plaguepoppy Vines k9 1 1 1 7 7 0 15 15 15 100 100 100 20 20 20 25 25 25 10 10 10 35 35 35 1 1 1 1 1 1 Vine Attack S1 1 -50 -50 -50 3 1 50 50 25 50 50 25 50 50 25 0
|
||||
cycleoflife 426 cycleoflife 0 Druid Cycle of Life cycleoflife CycleOfLife k9 1 1 1 7 7 0 15 15 15 50 50 50 20 20 20 25 25 25 10 10 10 35 35 35 1 1 1 1 1 1 CorpseCycler S1 1 -50 -50 -50 3 1 5 95 95 92 95 95 92 95 95 92 0
|
||||
vinecreature 427 vinecreature 0 Vine Creature vinecreature CycleOfLife k9 1 1 1 7 7 0 15 15 15 50 50 50 20 20 20 25 25 25 10 10 10 35 35 35 1 1 1 1 1 1 VineCycler S1 1 -50 -50 -50 3 1 5 165 165 165 165 165 165 165 165 165 0
|
||||
druidbear 428 druidbear 0 Druid Bear druidbear DruidBear b7 1 1 1 5 9 0 bear bear 11 15 15 15 15 15 15 40 40 40 50 50 50 0 0 0 0 0 0 1 1 1 1 1 1 1 BearSmite seq_bearsmite 1 100 100 100 -50 -50 -50 5 Summon Grizzly 1 5 750 750 245 300 650 650 245 300 650 650 245 300 0
|
||||
eagle 429 eagle 0 Eagleexp eagle Idle eg 1 1 1 6 6 0 foulcrow foulcrow 15 15 15 1 1 1 1 1 1 100 100 100 -50 -50 -50 2 1 48 48 48 5 36 58 95 4 14 93 115 184 102 4 15 138 199 319 110 5 20 183 0
|
||||
wolf 430 wolf 0 Wolf wolf NecroPet 40 1 1 1 6 6 0 werewolf werewolf 14 15 15 15 1 1 1 1 1 100 100 100 -50 -50 -50 2 1 8 8 8 5 16 25 37 2 6 14 2 6 14 46 74 40 2 6 20 2 6 20 79 127 43 2 7 27 2 7 27 0
|
||||
bear 431 bear 0 Bear bear NecroPet TG 1 1 1 6 6 0 werebear werebear 14 15 15 15 1 1 1 1 1 100 100 100 -50 -50 -50 2 1 12 19 30 1 5 28 34 54 33 1 5 40 57 92 35 2 7 53 0
|
||||
wakeofdestruction 410 wakeofdestruction 0 Wake of Destruction wakeofdestruction construct AssassinSentry e9 1 1 1 0 0 0 15 15 15 100 100 100 10 10 10 15 15 15 15 15 15 0 0 0 1 1 1 1 1 1 Wake Of Destruction Sentry S2 1 -50 -50 -50 2 1 100 100 100 100 100 100 100 100 100 5 10 0
|
||||
chargeboltsentry 411 chargeboltsentry 0 Charged Bolt Sentry chargeboltsentry construct AssassinSentry lg 1 1 1 0 0 0 lightningsentry lightningsentry 15 15 15 100 100 100 10 10 10 15 15 15 25 25 25 0 0 0 1 1 1 1 1 1 2 BoltSentry seq_chargesentry 1 Shock Field S1 0 -50 -50 -50 2 1 100 100 100 100 100 100 100 100 100 0
|
||||
lightningsentry 412 lightningsentry 0 Lightning Sentry lightningsentry construct AssassinSentry lg 1 1 1 0 0 0 lightningsentry lightningsentry 15 15 15 100 100 100 10 10 10 15 15 15 25 25 25 0 0 0 1 1 1 1 1 1 sentry lightning seq_chargesentry 1 -50 -50 -50 2 1 100 100 100 100 100 100 100 100 100 0
|
||||
bladecreeper 413 bladecreeper 0 Blade Creeper bladecreeper construct BladeCreeper b8 1 1 1 12 12 0 bladecreeper bladecreeper 15 15 15 1 1 1 1 1 1 Blade Sentinel A1 1 2 1 100 100 100 100 100 100 100 100 100 0
|
||||
invisopet 414 invisopet 0 Invis Pet invisopet InvisoPet k9 1 1 1 0 0 0 15 15 15 16 16 16 15 15 15 0 0 0 0 0 0 0 0 0 1 1 1 1 1 -50 -50 -50 2 1 0
|
||||
infernosentry 415 infernosentry 0 Inferno Sentry infernosentry construct AssassinSentry e9 1 1 1 0 0 0 15 15 15 100 100 100 10 10 10 15 15 15 13 13 13 0 0 0 1 1 1 1 1 1 2 mon inferno sentry seq_infernosentry 1 Wake of Fire Sentry S1 0 -50 -50 -50 2 1 100 100 100 100 100 100 100 100 100 0
|
||||
deathsentry 416 deathsentry 0 Death Sentry deathsentry construct DeathSentry lg 1 1 1 0 0 0 lightningsentry lightningsentry 15 15 15 30 30 30 0 0 0 50 50 50 16 16 16 0 0 0 1 1 1 1 1 1 mon death sentry seq_chargesentry 1 death sentry ltng seq_chargesentry 1 -50 -50 -50 2 1 100 100 100 100 100 100 100 100 100 0
|
||||
shadowwarrior 417 shadowwarrior 0 Shadow Warrior shadowwarrior ShadowWarrior k9 1 1 1 0 0 0 shadow shadow 11 15 15 15 40 40 40 30 30 30 60 60 60 1 1 1 268 5 64 1 1 1 1 1 1 1 1 1 1 Fists of Fire seq_swtigerfist 1 Blade Fury seq_swbladefury 1 Blades of Ice seq_swtigerfist 1 Dragon Claw seq_swtigerfist 1 Dragon Flight seq_swdragonflight 1 Claws of Thunder seq_swtigerfist 1 Attack A2 1 -50 -50 -50 40 40 40 3 1 50 50 50 376 376 196 0 0 163 0 0 163 376 376 196 0 0 243 0 0 243 376 376 196 0 0 323 0 0 323 1 0
|
||||
shadowmaster 418 shadowmaster 0 Shadow Master shadowmaster ShadowMaster k9 1 1 1 0 0 0 shadow shadow 11 15 15 15 20 10 10 20 36 36 60 60 60 279 1 1 1 1 1 1 1 1 1 1 Fists of Fire seq_swtigerfist 1 Blade Fury seq_swbladefury 1 Blades of Ice seq_swtigerfist 1 Dragon Claw seq_swtigerfist 1 Dragon Flight seq_swdragonflight 1 Claws of Thunder seq_swtigerfist 1 Attack A2 1 -50 -50 -50 40 40 40 2 1 50 50 50 376 376 196 0 0 163 0 0 163 376 376 196 0 0 243 0 0 243 376 376 196 0 0 323 0 0 323 1 0
|
||||
druidhawk 419 druidhawk 0 Druid Hawk druidhawk druidhawk Raven hk 1 1 1 10 20 0 raven raven 15 15 15 10 10 10 6 6 6 2 2 2 95 95 95 35 35 35 1 1 1 1 1 1 1 1 1 Raven NU 0 -50 -50 -50 2 Raven 1 5 26 26 25 26 26 25 26 26 25 0
|
||||
spiritwolf 420 spiritwolf fenris 0 Druid Spirit Wolf spiritwolf DruidWolf wf 1 1 1 5 10 0 wolf wolf 10 15 15 15 22 22 22 20 20 20 14 14 14 20 20 20 26 26 26 1 1 1 1 1 1 1 1 1 Teleport 2 S1 1 100 100 100 -50 -50 -50 4 Summon Spirit Wolf 1 5 130 130 67 50 130 130 67 50 130 130 67 50 0
|
||||
fenris 421 spiritwolf 1 Druid Fenris fenris DruidWolf wf 1 1 1 5 10 0 wolf wolf 10 15 15 15 22 22 22 20 20 20 25 25 25 24 24 24 30 30 30 1 1 1 1 1 1 1 1 1 fenris rage A1 1 Teleport 2 S1 1 100 100 100 -50 -50 -50 4 Summon Fenris 1 5 216 216 116 150 216 216 116 150 216 216 116 150 0
|
||||
spiritofbarbs 422 spiritofbarbs heartofwolverine 0 Spirit of Barbs spiritofbarbs Totem x4 1 1 1 6 6 0 druidspirit druidspirit 8 15 15 15 20 20 20 30 30 30 30 30 30 20 20 20 0 0 0 1 1 1 1 1 1 1 1 -50 -50 -50 25 25 25 25 25 70 25 25 25 25 25 100 25 25 25 25 25 100 3 1 213 213 196 213 213 196 213 213 196 0
|
||||
heartofwolverine 423 spiritofbarbs oaksage 1 Heart of Wolverine heartofwolverine Totem x3 1 1 1 6 6 0 druidspirit druidspirit 8 15 15 15 20 20 20 30 30 30 30 30 30 20 20 20 0 0 0 1 1 1 1 1 1 1 1 -50 -50 -50 25 25 25 25 25 70 25 25 25 25 25 100 25 25 25 25 25 100 3 1 136 136 123 136 136 123 136 136 123 0
|
||||
oaksage 424 spiritofbarbs 2 Oak Sage oaksage Totem xw 1 1 1 6 6 0 druidspirit druidspirit 8 15 15 15 20 20 20 30 30 30 30 30 30 20 20 20 0 0 0 1 1 1 1 1 1 1 1 -50 -50 -50 25 25 25 25 25 70 25 25 25 25 25 100 25 25 25 25 25 100 3 1 60 60 49 60 60 49 60 60 49 0
|
||||
plaguepoppy 425 plaguepoppy 0 Druid Plague Poppy plaguepoppy Vines k9 1 1 1 7 7 0 15 15 15 100 100 100 20 20 20 25 25 25 10 10 10 35 35 35 1 1 1 1 1 1 1 Vine Attack S1 1 -50 -50 -50 3 1 50 50 25 50 50 25 50 50 25 0
|
||||
cycleoflife 426 cycleoflife 0 Druid Cycle of Life cycleoflife CycleOfLife k9 1 1 1 7 7 0 15 15 15 50 50 50 20 20 20 25 25 25 10 10 10 35 35 35 1 1 1 1 1 1 1 CorpseCycler S1 1 -50 -50 -50 3 1 5 95 95 92 95 95 92 95 95 92 0
|
||||
vinecreature 427 vinecreature 0 Vine Creature vinecreature CycleOfLife k9 1 1 1 7 7 0 15 15 15 50 50 50 20 20 20 25 25 25 10 10 10 35 35 35 1 1 1 1 1 1 1 VineCycler S1 1 -50 -50 -50 3 1 5 165 165 165 165 165 165 165 165 165 0
|
||||
druidbear 428 druidbear 0 Druid Bear druidbear DruidBear b7 1 1 1 5 9 0 bear bear 11 15 15 15 15 15 15 40 40 40 50 50 50 0 0 0 0 0 0 1 1 1 1 1 1 1 1 BearSmite seq_bearsmite 1 100 100 100 -50 -50 -50 5 Summon Grizzly 1 5 750 750 245 300 650 650 245 300 650 650 245 300 0
|
||||
eagle 429 eagle 0 Eagleexp eagle Idle eg 1 1 1 6 6 0 foulcrow foulcrow 15 15 15 1 1 1 1 1 1 1 100 100 100 -50 -50 -50 2 1 48 48 48 5 36 58 95 4 14 93 115 184 102 4 15 138 199 319 110 5 20 183 0
|
||||
wolf 430 wolf 0 Wolf wolf NecroPet 40 1 1 1 6 6 0 werewolf werewolf 14 15 15 15 1 1 1 1 1 1 100 100 100 -50 -50 -50 2 1 8 8 8 5 16 25 37 2 6 14 2 6 14 46 74 40 2 6 20 2 6 20 79 127 43 2 7 27 2 7 27 0
|
||||
bear 431 bear 0 Bear bear NecroPet TG 1 1 1 6 6 0 werebear werebear 14 15 15 15 1 1 1 1 1 1 100 100 100 -50 -50 -50 2 1 12 19 30 1 5 28 34 54 33 1 5 40 57 92 35 2 7 53 0
|
||||
barricadedoor1 432 barricadedoor1 barricadedoor2 0 Barricade Door barricadedoor1 Idle AJ 1 1 1 0 0 0 26 35 67 barricadedoor barricadedoor 6 15 15 15 1 1 1 1 1 50 1000 50 1000 50 66 1000 95 152 88 150 200 35 150 200 35 0
|
||||
barricadedoor2 433 barricadedoor1 1 Barricade Door barricadedoor2 Idle AG 1 1 1 0 0 0 26 35 67 barricadedoor barricadedoor 6 15 15 15 1 1 1 1 1 50 1000 50 1000 50 66 1000 95 152 88 150 200 35 150 200 35 0
|
||||
prisondoor 434 prisondoor 0 Prison Door prisondoor Idle 2Q 1 1 1 0 0 0 26 35 67 6 15 15 15 1 1 1 1 1 25 25 25 25 25 1000 25 25 25 25 25 1000 25 25 25 25 66 1000 49 95 88 50 95 30 50 95 30 0
|
||||
@@ -511,32 +511,32 @@ bloodlord2 507 bloodlord1 bloodlord3 1 Blood Lord2 bloodlord2 bloodlord BloodLo
|
||||
bloodlord3 508 bloodlord1 bloodlord4 2 Blood Lord3 bloodlord3 bloodlord BloodLord L3 1 1 2 9 9 1 36 61 82 bloodlord bloodlord 10 15 14 13 90 90 90 85 85 85 70 70 70 10 10 10 1 1 1 1 BloodLordFrenzy A2 1 100 85 75 -30 -20 -10 100 33 33 33 33 33 2 50 50 50 5 284 379 126 260 66 148 188 66 148 188 240 300 130 210 80 150 180 80 150 180 240 300 130 210 80 150 180 80 150 180 Act 5 H2H C Act 5 Champ C Act 5 Unique C Act 5 (N) H2H C Act 5 (N) Champ C Act 5 (N) Unique C Act 5 (H) H2H C Act 5 (H) Champ C Act 5 (H) Unique C Act 5 (H) Champ C Desecrated Act 5 (H) Unique C Desecrated Act 5 (H) Herald C 0
|
||||
bloodlord4 509 bloodlord1 bloodlord5 3 Blood Lord4 bloodlord4 bloodlord BloodLord L3 1 1 2 9 9 1 40 63 84 bloodlord bloodlord 10 15 14 13 90 90 90 85 85 85 75 75 75 10 10 10 1 1 1 1 BloodLordFrenzy A2 1 100 85 75 -20 -10 -5 66 33 33 33 135 33 2 50 50 50 5 285 379 126 291 69 153 188 69 153 188 240 300 130 210 80 120 180 80 120 180 240 300 130 210 80 120 180 80 120 180 A1 cold 33 30 60 125 33 30 60 175 Act 5 H2H C Act 5 Champ C Act 5 Unique C Act 5 (N) H2H C Act 5 (N) Champ C Act 5 (N) Unique C Act 5 (H) H2H C Act 5 (H) Champ C Act 5 (H) Unique C Act 5 (H) Champ C Desecrated Act 5 (H) Unique C Desecrated Act 5 (H) Herald C 0
|
||||
bloodlord5 510 bloodlord1 bloodlord6 4 Blood Lord5 bloodlord5 bloodlord BloodLord L3 1 1 2 9 9 1 43 65 85 bloodlord bloodlord 10 15 14 13 90 90 90 85 85 85 80 80 80 10 10 10 1 1 1 1 BloodLordFrenzy A2 1 100 85 75 0 0 0 66 33 120 33 33 33 2 50 50 50 5 283 379 126 316 67 149 188 67 149 188 240 300 130 210 80 120 180 80 120 180 240 300 130 210 80 120 180 80 120 180 A1 fire 33 70 80 33 70 80 Act 5 H2H C Act 5 Champ C Act 5 Unique C Act 5 (N) H2H C Act 5 (N) Champ C Act 5 (N) Unique C Act 5 (H) H2H C Act 5 (H) Champ C Act 5 (H) Unique C Act 5 (H) Champ C Desecrated Act 5 (H) Unique C Desecrated Act 5 (H) Herald C 0
|
||||
larzuk 511 larzuk 0 Larzuk larzuk human Npc XR 1 1 1 3 3 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
drehya 512 drehya 0 Drehya drehya human Npc XS 1 1 1 3 3 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
malah 513 malah 0 Malah malah human Npc XT 1 1 1 1 1 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
nihlathak 514 nihlathak 0 Nihlathak Town nihlathak human Npc 0J 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
qual-kehk 515 qual-kehk 0 Qual-Kehk qual-kehk human Npc XV 1 1 1 3 3 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
larzuk 511 larzuk 0 Larzuk larzuk human Npc XR 1 1 1 3 3 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 1 2 0
|
||||
drehya 512 drehya 0 Drehya drehya human Npc XS 1 1 1 3 3 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 1 2 0
|
||||
malah 513 malah 0 Malah malah human Npc XT 1 1 1 1 1 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 1 2 0
|
||||
nihlathak 514 nihlathak 0 Nihlathak Town nihlathak human Npc 0J 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 1 2 0
|
||||
qual-kehk 515 qual-kehk 0 Qual-Kehk qual-kehk human Npc XV 1 1 1 3 3 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 1 2 0
|
||||
catapultspotter1 516 catapultspotter1 catapultspotter2 0 Catapult Spotter S catapultspotter1 CatapultSpotter k9 1 1 1 0 0 0 15 15 15 8 12 16 25 25 25 25 25 25 10 10 10 10 10 10 1 1 1 1 Catapult Charged Ball A1 1 Catapult Spike Ball A1 1 CatapultBlizzard A1 1 CatapultPlague A1 1 CatapultMeteor A1 1 2 0
|
||||
catapultspotter2 517 catapultspotter1 catapultspotter3 1 Catapult Spotter E catapultspotter2 CatapultSpotter k9 1 1 1 0 0 0 15 15 15 8 12 16 25 25 25 25 25 25 10 10 10 10 10 10 1 1 1 1 Catapult Charged Ball A1 1 Catapult Spike Ball A1 1 CatapultBlizzard A1 1 CatapultPlague A1 1 CatapultMeteor A1 1 2 0
|
||||
catapultspotter3 518 catapultspotter1 catapultspotter4 2 Catapult Spotter Siege catapultspotter3 CatapultSpotter k9 1 1 1 0 0 0 15 15 15 8 12 16 25 25 25 25 25 25 10 10 10 10 10 10 1 1 1 1 Catapult Charged Ball A1 1 Catapult Spike Ball A1 1 CatapultBlizzard A1 1 CatapultPlague A1 1 CatapultMeteor A1 1 2 0
|
||||
catapultspotter4 519 catapultspotter1 3 Catapult Spotter W catapultspotter4 CatapultSpotter k9 1 1 1 0 0 0 15 15 15 8 12 16 25 25 25 25 25 25 10 10 10 10 10 10 1 1 1 1 Catapult Charged Ball A1 1 Catapult Spike Ball A1 1 CatapultBlizzard A1 1 CatapultPlague A1 1 CatapultMeteor A1 1 2 0
|
||||
cain6 520 cain6 0 DeckardCain cain6 human Npc DC 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 2 0
|
||||
tyrael3 521 tyrael3 0 tyrael tyrael3 NpcStationary TY 1 1 1 0 0 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 2 0
|
||||
act5barb1 522 act5barb1 0 Act 5 Combatant act5barb1 human NpcBarb 0A 1 1 1 5 14 0 24 55 73 act2hire act2hire 11 15 15 15 15 15 15 85 85 85 15 15 15 1 1 1 1 1 1 1 1 100 100 100 -50 -50 -50 70 70 70 2 50 50 50 5 571 761 251 32 57 252 60 80 120 50 150 140 30 50 120 50 150 140 0
|
||||
act5barb2 523 act5barb2 0 Act 5 Combatant act5barb2 human NpcBarb 0A 1 1 1 5 14 0 30 55 73 act2hire act2hire 11 15 15 15 15 15 15 85 85 85 15 15 15 1 1 1 1 1 1 1 1 100 100 100 -50 -50 -50 70 70 70 2 50 50 50 5 226 355 212 90 122 251 60 80 120 50 150 140 30 50 120 50 150 140 0
|
||||
cain6 520 cain6 0 DeckardCain cain6 human Npc DC 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
tyrael3 521 tyrael3 0 tyrael tyrael3 NpcStationary TY 1 1 1 0 0 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 1 2 0
|
||||
act5barb1 522 act5barb1 0 Act 5 Combatant act5barb1 human NpcBarb 0A 1 1 1 5 14 0 24 55 73 act2hire act2hire 11 15 15 15 15 15 15 85 85 85 15 15 15 1 1 1 1 1 1 1 1 1 100 100 100 -50 -50 -50 70 70 70 2 50 50 50 5 571 761 251 32 57 252 60 80 120 50 150 140 30 50 120 50 150 140 0
|
||||
act5barb2 523 act5barb2 0 Act 5 Combatant act5barb2 human NpcBarb 0A 1 1 1 5 14 0 30 55 73 act2hire act2hire 11 15 15 15 15 15 15 85 85 85 15 15 15 1 1 1 1 1 1 1 1 1 100 100 100 -50 -50 -50 70 70 70 2 50 50 50 5 226 355 212 90 122 251 60 80 120 50 150 140 30 50 120 50 150 140 0
|
||||
barricadewall1 524 barricadewall1 barricadewall2 0 Barricade Wall Right barricadewall1 Idle A6 1 1 1 0 0 0 26 59 75 gargoyletrap gargoyletrap 2 15 15 15 1 1 1 1 1 50 1000 50 1000 66 20 50 50 1000 0 95 152 88 250 300 35 250 300 35 0
|
||||
barricadewall2 525 barricadewall1 1 Barricade Wall Left barricadewall2 Idle AK 1 1 1 0 0 0 26 59 75 gargoyletrap gargoyletrap 2 15 15 15 1 1 1 1 1 50 1000 50 1000 66 20 50 50 1000 0 95 152 88 250 300 35 250 300 35 0
|
||||
nihlathakboss 526 nihlathakboss 0 Nihlathak nihlathakboss human Nihlathak XU 1 1 1 7 7 0 65 70 92 nihlathak nihlathak 14 15 15 15 30 30 30 20 20 20 80 80 80 75 75 75 8 8 8 1 1 1 1 Imp Teleport A1 1 Overseer Whip A2 1 NihlathakCorpseExplosion A1 1 Horror Arctic Blast seq_nihlathakarctic 20 MinionSpawner A1 1 100 100 100 -50 -40 -33 70 70 70 70 25 33 33 70 70 0 50 50 50 5 191 191 126 277 191 191 110 277 191 191 110 277 Nihlathak Nihlathak Nihlathak Nihlathak Desecrated Nihlathak Desecrated Nihlathak Desecrated Nihlathak (N) Nihlathak (N) Nihlathak (N) Nihlathak (N) Desecrated Nihlathak (N) Desecrated Nihlathak (N) Desecrated Nihlathak (H) Nihlathak (H) Nihlathak (H) Nihlathak (H) Desecrated Nihlathak (H) Desecrated Nihlathak (H) Desecrated 0
|
||||
drehyaiced 527 drehyaiced 0 Drehya drehyaiced human NpcOutOfTown XS 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 2 0
|
||||
nihlathakboss 526 nihlathakboss 0 Nihlathak nihlathakboss human Nihlathak XU 1 1 1 7 7 0 65 70 92 nihlathak nihlathak 14 15 15 15 30 30 30 20 20 20 80 80 80 75 75 75 8 8 8 1 1 1 1 1 Imp Teleport A1 1 Overseer Whip A2 1 NihlathakCorpseExplosion A1 1 Horror Arctic Blast seq_nihlathakarctic 20 MinionSpawner A1 1 100 100 100 -50 -40 -33 70 70 70 70 25 33 33 70 70 0 50 50 50 5 191 191 126 277 191 191 110 277 191 191 110 277 Nihlathak Nihlathak Nihlathak Nihlathak Desecrated Nihlathak Desecrated Nihlathak Desecrated Nihlathak (N) Nihlathak (N) Nihlathak (N) Nihlathak (N) Desecrated Nihlathak (N) Desecrated Nihlathak (N) Desecrated Nihlathak (H) Nihlathak (H) Nihlathak (H) Nihlathak (H) Desecrated Nihlathak (H) Desecrated Nihlathak (H) Desecrated 0
|
||||
drehyaiced 527 drehyaiced 0 Drehya drehyaiced human NpcOutOfTown XS 1 1 1 2 2 0 mednpc mednpc 15 15 15 1 1 1 1 1 1 2 0
|
||||
evilhut 528 evilhut 0 Evil hut evilhut GenericSpawner 2T 1 imp1 2 5 NU 1 1 40 0 0 0 30 53 81 evilhut evilhut 10 15 15 15 80 80 80 0 0 0 15 15 15 1 1 1 1 Nest seq_genericspawner 1 50 70 70 70 70 70 70 70 70 0 284 475 63 123 330 400 50 123 330 400 50 123 1 0
|
||||
deathmauler1 529 deathmauler1 deathmauler2 0 Death Mauler1 deathmauler1 deathmauler DeathMauler m5 1 4 5 4 4 1 32 58 80 deathmauler deathmauler 10 15 15 15 75 75 75 65 65 65 15 15 15 50 50 50 1 1 1 1 DeathMaul seq_deathmaulerdig 1 100 85 75 -50 -40 -33 25 50 25 33 50 100 50 2 50 50 50 5 123 152 126 153 51 76 251 115 145 95 105 75 140 115 115 145 95 105 75 140 115 Act 5 H2H A Act 5 Champ A Act 5 Unique A Act 5 (N) H2H A Act 5 (N) Champ A Act 5 (N) Unique A Act 5 (H) H2H A Act 5 (H) Champ A Act 5 (H) Unique A Act 5 (H) Champ A Desecrated Act 5 (H) Unique A Desecrated Act 5 (H) Herald A 0
|
||||
deathmauler2 530 deathmauler1 deathmauler3 1 Death Mauler2 deathmauler2 deathmauler DeathMauler m5 1 4 5 4 4 1 35 59 81 deathmauler deathmauler 10 15 15 15 75 75 75 65 65 65 18 18 18 60 60 60 1 1 1 1 DeathMaul seq_deathmaulerdig 2 100 85 75 -50 -40 -33 33 50 100 50 2 50 50 50 5 124 152 126 166 51 78 251 115 145 95 105 75 140 115 115 145 95 105 75 140 115 Act 5 H2H A Act 5 Champ A Act 5 Unique A Act 5 (N) H2H A Act 5 (N) Champ A Act 5 (N) Unique A Act 5 (H) H2H A Act 5 (H) Champ A Act 5 (H) Unique A Act 5 (H) Champ A Desecrated Act 5 (H) Unique A Desecrated Act 5 (H) Herald A 0
|
||||
deathmauler3 531 deathmauler1 deathmauler4 2 Death Mauler3 deathmauler3 deathmauler DeathMauler m5 1 4 5 5 5 1 38 60 81 deathmauler deathmauler 10 15 15 15 75 75 75 65 65 65 19 19 19 70 70 70 1 1 1 1 DeathMaul seq_deathmaulerdig 3 100 85 75 -50 -40 -33 33 50 50 135 2 50 50 50 5 124 152 126 180 51 76 251 115 145 95 105 75 140 115 115 145 95 105 75 140 115 Act 5 H2H B Act 5 Champ B Act 5 Unique B Act 5 (N) H2H B Act 5 (N) Champ B Act 5 (N) Unique B Act 5 (H) H2H B Act 5 (H) Champ B Act 5 (H) Unique B Act 5 (H) Champ B Desecrated Act 5 (H) Unique B Desecrated Act 5 (H) Herald B 0
|
||||
deathmauler4 532 deathmauler1 deathmauler5 3 Death Mauler4 deathmauler4 deathmauler DeathMauler m5 1 4 5 5 5 1 40 61 82 deathmauler deathmauler 10 15 15 15 75 75 75 65 65 65 20 20 20 80 80 80 1 1 1 1 DeathMaul seq_deathmaulerdig 4 100 85 75 -50 -40 -33 100 25 25 25 2 50 50 50 5 124 152 126 191 53 77 251 115 145 95 105 75 140 115 115 145 95 105 75 140 115 Act 5 H2H B Act 5 Champ B Act 5 Unique B Act 5 (N) H2H B Act 5 (N) Champ B Act 5 (N) Unique B Act 5 (H) H2H B Act 5 (H) Champ B Act 5 (H) Unique B Act 5 (H) Champ B Desecrated Act 5 (H) Unique B Desecrated Act 5 (H) Herald B 0
|
||||
deathmauler5 533 deathmauler1 deathmauler6 4 Death Mauler5 deathmauler5 deathmauler DeathMauler m5 1 4 5 6 6 1 41 62 83 deathmauler deathmauler 10 15 15 15 75 75 75 65 65 65 21 21 21 90 90 90 1 1 1 1 DeathMaul seq_deathmaulerdig 5 100 85 75 -50 -40 -33 33 50 50 145 2 50 50 50 5 123 152 126 196 51 74 251 115 145 95 105 75 140 115 115 145 95 105 75 140 115 Act 5 H2H C Act 5 Champ C Act 5 Unique C Act 5 (N) H2H C Act 5 (N) Champ C Act 5 (N) Unique C Act 5 (H) H2H C Act 5 (H) Champ C Act 5 (H) Unique C Act 5 (H) Champ C Desecrated Act 5 (H) Unique C Desecrated Act 5 (H) Herald C 0
|
||||
act5pow 534 act5pow 0 POW act5pow human Wussie 0A 1 1 1 4 7 0 40 55 73 mednpc mednpc 1 15 15 15 1 1 1 1 1 1 100 100 100 -50 -50 -50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 3 5 946 1324 84 1100 1400 95 1100 1400 95 0
|
||||
act5barb3 535 act5barb3 act5barb4 0 Act 5 Townguard act5barb3 human Npc 0A 1 1 1 5 14 0 30 55 73 act2hire act2hire 11 15 15 15 1 1 1 1 1 1 1 1 100 100 100 -50 -50 -50 70 0 5 0
|
||||
act5barb4 536 act5barb3 1 Act 5 Townguard act5barb4 human Npc 0A 1 1 1 5 14 0 30 55 73 act2hire act2hire 11 15 15 15 1 1 1 1 1 1 1 1 100 100 100 -50 -50 -50 0 5 0
|
||||
act5pow 534 act5pow 0 POW act5pow human Wussie 0A 1 1 1 4 7 0 40 55 73 mednpc mednpc 1 15 15 15 1 1 1 1 1 1 1 100 100 100 -50 -50 -50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 3 5 946 1324 84 1100 1400 95 1100 1400 95 0
|
||||
act5barb3 535 act5barb3 act5barb4 0 Act 5 Townguard act5barb3 human Npc 0A 1 1 1 5 14 0 30 55 73 act2hire act2hire 11 15 15 15 1 1 1 1 1 1 1 1 1 100 100 100 -50 -50 -50 70 0 5 0
|
||||
act5barb4 536 act5barb3 1 Act 5 Townguard act5barb4 human Npc 0A 1 1 1 5 14 0 30 55 73 act2hire act2hire 11 15 15 15 1 1 1 1 1 1 1 1 1 100 100 100 -50 -50 -50 0 5 0
|
||||
ancientstatue1 537 ancientstatue1 ancientstatue2 0 Ancient Statue 1 ancientstatue1 AncientStatue 0G 1 ancientbarb1 0 2 NU 1 1 5 14 0 40 70 90 15 15 15 1 1 1 1 1 1 MinionSpawner A1 1 0 0
|
||||
ancientstatue2 538 ancientstatue1 ancientstatue3 1 Ancient Statue 2 ancientstatue2 AncientStatue 0H 1 ancientbarb2 0 2 NU 1 1 5 14 0 40 70 90 15 15 15 1 1 1 1 1 1 MinionSpawner A1 1 0 0
|
||||
ancientstatue3 539 ancientstatue1 2 Ancient Statue 3 ancientstatue3 AncientStatue 0I 1 ancientbarb3 0 2 NU 1 1 5 14 0 40 70 90 15 15 15 1 1 1 1 1 1 MinionSpawner A1 1 0 0
|
||||
@@ -544,7 +544,7 @@ ancientbarb1 540 ancientbarb1 ancientbarb2 0 Ancient Barbarian 1 ancientbarb1 h
|
||||
ancientbarb2 541 ancientbarb1 ancientbarb3 1 Ancient Barbarian 2 ancientbarb2 human Ancient 0F 1 1 1 10 10 0 37 68 87 ancient ancient 10 15 13 11 15 15 15 50 50 50 25 25 25 25 25 25 7 7 7 ancient throwing axe 1 1 1 1 Shout SC 5 100 100 100 -25 -25 -15 70 70 70 70 40 50 100 70 50 0 5 500 600 84 9 14 251 600 800 125 4 7 250 800 1000 125 4 7 250 0
|
||||
ancientbarb3 542 ancientbarb1 2 Ancient Barbarian 3 ancientbarb3 human Ancient 0E 1 1 1 10 10 0 37 68 87 ancient ancient 10 15 13 11 15 15 15 50 50 50 75 75 75 1 1 1 1 MonLeapAttack seq_ancientleap 5 100 100 100 0 0 0 70 70 70 70 70 70 40 70 50 150 50 0 5 500 600 84 9 14 251 9 14 251 600 800 125 4 7 250 4 7 250 800 1000 125 4 7 250 4 7 250 0
|
||||
baalthrone 543 baalthrone 0 Baal Throne baalthrone demon BaalThrone 41 1 1 1 6 6 0 60 70 90 baal baal 15 15 15 25 25 25 1 1 Decrepify S3 5 Baal Corpse Explode S3 1 Defense Curse S3 3 Blood Mana S3 3 33 33 33 50 50 50 50 50 50 50 50 50 50 0 50 50 50 5 6336 6336 87 6333 76 111 125 111 179 101 6336 6336 150 6333 75 120 125 110 180 125 6336 6336 150 6333 75 120 125 110 180 125 1 0
|
||||
baalcrab 544 baalcrab 0 Baal Crab baalcrab demon BaalCrab 42 1 1 1 6 6 0 60 75 99 baalcrab baalcrab 14 15 13 12 1 1 1 1 1 Baal Nova S3 1 Baal Inferno seq_baalinferno 1 Baal Tentacle S2 1 Baal Cold Missiles A1 1 Baal Teleport A1 1 Defense Curse S3 3 Blood Mana S3 3 100 50 20 -15 -15 -15 33 33 33 50 50 50 50 50 50 50 50 50 50 0 1 40 45 55 5 6336 6336 87 6460 106 179 251 136 271 376 6336 6336 150 6460 120 180 250 135 240 250 6336 6336 150 6460 150 190 250 165 240 250 A1 fire 0 100 100 150 100 120 200 A2 frze 0 100 100 160 500 100 120 160 1000 Baal Baal Baal Baalq Baal Desecrated Baal Desecrated Baal Desecrated Baal (N) Baal (N) Baal (N) Baalq (N) Baal (N) Desecrated Baal (N) Desecrated Baal (N) Desecrated Baal (H) Baal (H) Baal (H) Baalq (H) Baal (H) Desecrated Baal (H) Desecrated Baal (H) Desecrated 40 0 1 0
|
||||
baalcrab 544 baalcrab 0 Baal Crab baalcrab demon BaalCrab 42 1 1 1 6 6 0 60 75 99 baalcrab baalcrab 14 15 13 12 1 1 1 1 1 1 Baal Nova S3 1 Baal Inferno seq_baalinferno 1 Baal Tentacle S2 1 Baal Cold Missiles A1 1 Baal Teleport A1 1 Defense Curse S3 3 Blood Mana S3 3 100 50 20 -15 -15 -15 33 33 33 50 50 50 50 50 50 50 50 50 50 0 1 40 45 55 5 6336 6336 87 6460 106 179 251 136 271 376 6336 6336 150 6460 120 180 250 135 240 250 6336 6336 150 6460 150 190 250 165 240 250 A1 fire 0 100 100 150 100 120 200 A2 frze 0 100 100 160 500 100 120 160 1000 Baal Baal Baal Baalq Baal Desecrated Baal Desecrated Baal Desecrated Baal (N) Baal (N) Baal (N) Baalq (N) Baal (N) Desecrated Baal (N) Desecrated Baal (N) Desecrated Baal (H) Baal (H) Baal (H) Baalq (H) Baal (H) Desecrated Baal (H) Desecrated Baal (H) Desecrated 40 0 1 0
|
||||
baaltaunt 545 baaltaunt 0 Baal Taunt baaltaunt demon BaalTaunt K9 1 1 1 12 12 0 0 33 66 15 15 15 3 3 3 10 10 10 20 20 20 1 1 1 Baal Taunt A1 1 2 0
|
||||
putriddefiler1 546 putriddefiler1 putriddefiler2 0 Putrid Defiler1 putriddefiler1 putriddefiler PutridDefiler 45 1 1 1 6 6 1 35 61 80 putriddefiler putriddefiler 10 15 15 15 15 15 15 5 5 5 1 1 1 1 1 1 1 Impregnate S1 1 100 85 75 -50 -40 -33 33 33 33 50 50 50 50 50 50 50 50 100 2 50 50 50 5 114 189 126 149 32 91 126 80 130 65 110 30 90 110 80 130 65 110 30 90 110 Act 5 Cast A Act 5 Champ A Act 5 Unique A Act 5 (N) Cast A Act 5 (N) Champ A Act 5 (N) Unique A Act 5 (H) Cast A Act 5 (H) Champ A Act 5 (H) Unique A Act 5 (H) Champ A Desecrated Act 5 (H) Unique A Desecrated Act 5 (H) Herald A 1 0
|
||||
putriddefiler2 547 putriddefiler1 putriddefiler3 1 Putrid Defiler2 putriddefiler2 putriddefiler PutridDefiler 45 1 1 1 6 6 1 37 62 81 putriddefiler putriddefiler 10 15 15 15 15 15 15 5 5 5 1 1 1 1 1 1 1 Impregnate S1 1 100 85 75 -50 -40 -33 33 33 33 50 50 50 50 50 50 50 50 105 2 50 50 50 5 114 190 126 157 31 92 126 80 130 65 110 30 90 110 80 130 65 110 30 90 110 Act 5 Cast A Act 5 Champ A Act 5 Unique A Act 5 (N) Cast A Act 5 (N) Champ A Act 5 (N) Unique A Act 5 (H) Cast A Act 5 (H) Champ A Act 5 (H) Unique A Act 5 (H) Champ A Desecrated Act 5 (H) Unique A Desecrated Act 5 (H) Herald A 1 0
|
||||
@@ -556,21 +556,21 @@ painworm2 552 painworm1 painworm3 1 Pain Worm2 painworm2 vilekind VileDog 46 1
|
||||
painworm3 553 painworm1 painworm4 2 Pain Worm3 painworm3 vilekind VileDog 46 1 2 2 8 10 1 36 63 82 vilechild vilechild 10 15 14 13 80 85 90 10 10 10 80 85 90 1 1 1 1 1 1 100 85 75 -50 -40 -33 140 2 47 47 47 5 65 106 84 5 31 61 125 35 65 85 5 30 60 80 35 65 85 5 30 60 80 0
|
||||
painworm4 554 painworm1 painworm5 3 Pain Worm4 painworm4 vilekind VileDog 46 1 2 2 8 10 1 37 64 83 vilechild vilechild 10 15 14 13 80 85 90 10 10 10 80 85 90 1 1 1 1 1 1 100 85 75 -50 -40 -33 50 100 2 48 48 48 5 65 107 84 5 31 61 126 35 65 85 5 30 60 80 35 65 85 5 30 60 80 0
|
||||
painworm5 555 painworm1 4 Pain Worm5 painworm5 vilekind VileDog 46 1 2 2 8 10 1 42 65 84 vilechild vilechild 10 15 14 13 80 85 90 10 10 10 80 85 90 1 1 1 1 1 1 100 85 75 -50 -40 -33 150 2 50 50 50 5 64 106 84 6 31 62 125 35 65 85 5 30 60 80 35 65 85 5 30 60 80 0
|
||||
bunny 556 bunny 0 Bunny bunny Idle 48 1 3 3 2 2 1 bunny bunny 15 15 15 1 1 1 2 0
|
||||
bunny 556 bunny 0 Bunny bunny Idle 48 1 3 3 2 2 1 bunny bunny 15 15 15 1 1 1 1 2 0
|
||||
baalhighpriest 557 baalhighpriest 0 Council Member baalhighpriest baalhighpriest councilmember HighPriest HP 1 1 1 10 12 0 40 68 93 councilmember councilmember 11 15 14 13 65 65 65 20 25 25 125 100 75 45 50 50 80 80 80 9 9 9 12 12 12 30 30 30 highpriestlightning 1 1 1 1 1 1 Hydra S1 4 ZakarumHeal S1 4 100 75 50 -50 -40 -33 39 39 39 5 190 379 84 225 53 121 93 220 270 100 225 70 150 135 220 270 100 225 70 150 135 Act 5 H2H B Act 5 Champ B Act 5 Unique B Act 5 (N) H2H B Act 5 (N) Champ B Act 5 (N) Unique B Act 5 (H) H2H C Act 5 (H) Champ B Act 5 (H) Unique B Act 5 (H) Champ B Desecrated Act 5 (H) Unique B Desecrated Act 5 (H) Herald B 0
|
||||
venomlord 558 venomlord 0 VenomLord venomlord megademon Megademon DM 1 2 3 10 16 0 40 68 93 megademon megademon 10 15 14 13 60 75 90 50 60 65 80 95 97 70 70 70 70 70 70 75 60 45 infernoflame1 1 1 1 1 1 MegademonInferno S1 4 100 75 50 -50 -40 -33 70 70 80 100 95 120 2 50 50 50 5 190 379 101 239 57 97 125 300 350 100 239 100 180 200 300 350 100 239 100 180 200 Act 5 H2H B Act 5 Champ B Act 5 Unique B Act 5 (N) H2H B Act 5 (N) Champ B Act 5 (N) Unique B Act 5 (H) H2H C Act 5 (H) Champ B Act 5 (H) Unique B Act 5 (H) Champ B Desecrated Act 5 (H) Unique B Desecrated Act 5 (H) Herald B 0
|
||||
baalcrabstairs 559 baalcrabstairs 0 Baal Crab to Stairs baalcrabstairs demon BaalToStairs 42 1 1 1 6 6 0 60 70 96 baal baal 15 15 15 4 4 4 1 1 1 1 -50 -40 -33 33 33 33 50 50 50 50 50 50 50 50 50 1 0
|
||||
act5hire1 560 act5hire1 act5hire2 0 Barbarian act5hire1 human Hireable 0A 1 1 1 8 14 0 1 1 1 act2hire act2hire 11 1 1 1 2 2 2 4 4 4 1 1 1 1 1 1 1 1 1 swor swor 1 100 100 100 -50 -50 -50 70 70 70 10 5 0
|
||||
act5hire2 561 act5hire1 1 Barbarian act5hire2 human Hireable 0A 1 1 1 8 14 0 1 1 1 act2hire act2hire 11 1 1 1 2 2 2 5 5 5 1 1 1 1 1 1 1 1 1 swor none 100 100 100 -50 -50 -50 70 70 70 10 5 0
|
||||
baaltentacle1 562 baaltentacle1 baaltentacle2 0 Baal Tentacle baaltentacle1 demon BaalTentacle 44 1 2 2 0 0 0 34 67 87 baaltentacle baaltentacle 10 15 15 15 70 70 70 24 24 24 10 10 10 1 1 1 1 100 100 100 -50 -40 -33 25 25 110 2 44 44 44 5 65 106 84 28 87 125 50 80 65 80 120 125 50 80 65 80 120 125 0
|
||||
baaltentacle2 563 baaltentacle1 baaltentacle3 1 Baal Tentacle baaltentacle2 demon BaalTentacle 44 1 2 2 0 0 0 35 67 87 baaltentacle baaltentacle 10 15 15 15 80 80 80 22 22 22 10 10 10 1 1 1 1 100 100 100 -50 -40 -33 25 25 115 2 46 46 46 5 64 106 84 32 91 126 50 80 65 80 120 125 50 80 65 80 120 125 0
|
||||
baaltentacle3 564 baaltentacle1 baaltentacle4 2 Baal Tentacle baaltentacle3 demon BaalTentacle 44 1 2 2 0 0 0 36 67 87 baaltentacle baaltentacle 10 15 15 15 90 90 90 20 20 20 10 10 10 1 1 1 1 100 100 100 -50 -40 -33 25 25 120 2 47 47 47 5 65 106 84 31 87 125 50 80 65 80 120 125 50 80 65 80 120 125 0
|
||||
baaltentacle4 565 baaltentacle1 baaltentacle5 3 Baal Tentacle baaltentacle4 demon BaalTentacle 44 1 2 2 0 0 0 37 67 87 baaltentacle baaltentacle 10 15 15 15 90 90 90 18 18 18 10 10 10 1 1 1 1 100 100 100 -50 -40 -33 25 25 125 2 48 48 48 5 65 107 84 31 92 126 50 80 65 80 120 125 50 80 65 80 120 125 0
|
||||
baaltentacle5 566 baaltentacle1 4 Baal Tentacle baaltentacle5 demon BaalTentacle 44 1 2 2 0 0 0 42 67 87 baaltentacle baaltentacle 10 15 15 15 90 90 90 16 16 16 10 10 10 1 1 1 1 100 100 100 -50 -40 -33 25 25 130 2 50 50 50 5 64 106 84 31 93 125 50 80 65 80 120 125 50 80 65 80 120 125 0
|
||||
injuredbarb1 567 injuredbarb1 0 Injured Barbarian 1 injuredbarb1 human Idle 6z 1 3 3 0 0 0 1 1 1 15 15 15 1 1 1 -50 -50 -50 2 0
|
||||
injuredbarb2 568 injuredbarb2 0 Injured Barbarian 2 injuredbarb2 human Idle 7j 1 3 3 0 0 0 1 1 1 15 15 15 1 1 1 -50 -50 -50 2 0
|
||||
injuredbarb3 569 injuredbarb3 0 Injured Barbarian 3 injuredbarb3 human Idle 7i 1 3 3 0 0 0 1 1 1 15 15 15 1 1 1 -50 -50 -50 2 0
|
||||
baalclone 570 baalclone 0 Baal Crab Clone baalclone demon BaalCrabClone 42 1 1 1 6 6 0 60 69 95 baal baal 14 15 14 12 1 1 1 1 1 1 Baal Nova S3 1 Baal Inferno seq_baalinferno 1 Baal Tentacle S2 1 Baal Cold Missiles A1 1 Baal Clone Teleport A1 1 Defense Curse S3 3 Blood Mana S3 3 100 50 20 -15 -15 -15 15 15 15 33 25 25 25 25 50 25 25 25 25 0 1 40 45 55 5 1901 1901 87 106 179 251 136 271 376 2801 2801 160 110 180 250 135 240 250 2801 2801 160 110 180 250 135 240 250 1 0
|
||||
baalcrabstairs 559 baalcrabstairs 0 Baal Crab to Stairs baalcrabstairs demon BaalToStairs 42 1 1 1 6 6 0 60 70 96 baal baal 15 15 15 4 4 4 1 1 1 1 1 -50 -40 -33 33 33 33 50 50 50 50 50 50 50 50 50 1 0
|
||||
act5hire1 560 act5hire1 act5hire2 0 Barbarian act5hire1 human Hireable 0A 1 1 1 8 14 0 1 1 1 act2hire act2hire 11 1 1 1 2 2 2 4 4 4 1 1 1 1 1 1 1 1 1 1 swor swor 1 100 100 100 -50 -50 -50 70 70 70 10 5 0
|
||||
act5hire2 561 act5hire1 1 Barbarian act5hire2 human Hireable 0A 1 1 1 8 14 0 1 1 1 act2hire act2hire 11 1 1 1 2 2 2 5 5 5 1 1 1 1 1 1 1 1 1 1 swor none 100 100 100 -50 -50 -50 70 70 70 10 5 0
|
||||
baaltentacle1 562 baaltentacle1 baaltentacle2 0 Baal Tentacle baaltentacle1 demon BaalTentacle 44 1 2 2 0 0 0 34 67 87 baaltentacle baaltentacle 10 15 15 15 70 70 70 24 24 24 10 10 10 1 1 1 1 1 100 100 100 -50 -40 -33 25 25 110 2 44 44 44 5 65 106 84 28 87 125 50 80 65 80 120 125 50 80 65 80 120 125 0
|
||||
baaltentacle2 563 baaltentacle1 baaltentacle3 1 Baal Tentacle baaltentacle2 demon BaalTentacle 44 1 2 2 0 0 0 35 67 87 baaltentacle baaltentacle 10 15 15 15 80 80 80 22 22 22 10 10 10 1 1 1 1 1 100 100 100 -50 -40 -33 25 25 115 2 46 46 46 5 64 106 84 32 91 126 50 80 65 80 120 125 50 80 65 80 120 125 0
|
||||
baaltentacle3 564 baaltentacle1 baaltentacle4 2 Baal Tentacle baaltentacle3 demon BaalTentacle 44 1 2 2 0 0 0 36 67 87 baaltentacle baaltentacle 10 15 15 15 90 90 90 20 20 20 10 10 10 1 1 1 1 1 100 100 100 -50 -40 -33 25 25 120 2 47 47 47 5 65 106 84 31 87 125 50 80 65 80 120 125 50 80 65 80 120 125 0
|
||||
baaltentacle4 565 baaltentacle1 baaltentacle5 3 Baal Tentacle baaltentacle4 demon BaalTentacle 44 1 2 2 0 0 0 37 67 87 baaltentacle baaltentacle 10 15 15 15 90 90 90 18 18 18 10 10 10 1 1 1 1 1 100 100 100 -50 -40 -33 25 25 125 2 48 48 48 5 65 107 84 31 92 126 50 80 65 80 120 125 50 80 65 80 120 125 0
|
||||
baaltentacle5 566 baaltentacle1 4 Baal Tentacle baaltentacle5 demon BaalTentacle 44 1 2 2 0 0 0 42 67 87 baaltentacle baaltentacle 10 15 15 15 90 90 90 16 16 16 10 10 10 1 1 1 1 1 100 100 100 -50 -40 -33 25 25 130 2 50 50 50 5 64 106 84 31 93 125 50 80 65 80 120 125 50 80 65 80 120 125 0
|
||||
injuredbarb1 567 injuredbarb1 0 Injured Barbarian 1 injuredbarb1 human Idle 6z 1 3 3 0 0 0 1 1 1 15 15 15 1 1 1 1 -50 -50 -50 2 0
|
||||
injuredbarb2 568 injuredbarb2 0 Injured Barbarian 2 injuredbarb2 human Idle 7j 1 3 3 0 0 0 1 1 1 15 15 15 1 1 1 1 -50 -50 -50 2 0
|
||||
injuredbarb3 569 injuredbarb3 0 Injured Barbarian 3 injuredbarb3 human Idle 7i 1 3 3 0 0 0 1 1 1 15 15 15 1 1 1 1 -50 -50 -50 2 0
|
||||
baalclone 570 baalclone 0 Baal Crab Clone baalclone demon BaalCrabClone 42 1 1 1 6 6 0 60 69 95 baal baal 14 15 14 12 1 1 1 1 1 1 1 Baal Nova S3 1 Baal Inferno seq_baalinferno 1 Baal Tentacle S2 1 Baal Cold Missiles A1 1 Baal Clone Teleport A1 1 Defense Curse S3 3 Blood Mana S3 3 100 50 20 -15 -15 -15 15 15 15 33 25 25 25 25 50 25 25 25 25 0 1 40 45 55 5 1901 1901 87 106 179 251 136 271 376 2801 2801 160 110 180 250 135 240 250 2801 2801 160 110 180 250 135 240 250 1 0
|
||||
baalminion1 571 baalminion1 baalminion2 0 Baals Minion baalminion1 demon BaalMinion 43 1 1 1 8 8 0 55 68 92 baalminion baalminion 10 15 14 13 90 90 90 85 85 85 50 50 50 17 17 17 1 1 1 1 1 Smite A2 1 100 75 50 -50 -40 -33 50 50 95 95 50 95 50 120 33 50 95 2 50 50 50 5 472 660 87 634 30 92 251 15 165 238 430 480 135 247 80 130 210 80 140 210 430 480 135 247 80 130 210 80 140 210 Act 5 H2H C Act 5 Champ C Act 5 Unique C Act 5 (N) H2H C Act 5 (N) Champ C Act 5 (N) Unique C Act 5 (H) H2H C Act 5 (H) Champ C Act 5 (H) Unique C Act 5 (H) Champ C Desecrated Act 5 (H) Unique C Desecrated Act 5 (H) Herald C 1 0
|
||||
baalminion2 572 baalminion1 baalminion3 1 Baals Minion baalminion2 demon BaalMinion 43 1 1 1 8 8 0 57 68 92 baalminion baalminion 10 15 14 13 90 90 90 85 85 85 50 50 50 17 17 17 1 1 1 1 1 Smite A2 1 100 75 50 -50 -40 -33 50 50 95 95 50 95 50 120 33 50 95 2 50 50 50 5 472 661 87 683 32 92 251 15 166 238 430 480 135 247 80 130 210 80 140 210 430 480 135 247 80 130 210 80 140 210 Act 5 H2H C Act 5 Champ C Act 5 Unique C Act 5 (N) H2H C Act 5 (N) Champ C Act 5 (N) Unique C Act 5 (H) H2H C Act 5 (H) Champ C Act 5 (H) Unique C Act 5 (H) Champ C Desecrated Act 5 (H) Unique C Desecrated Act 5 (H) Herald C 1 0
|
||||
baalminion3 573 baalminion1 2 Baals Minion baalminion3 demon BaalMinion 43 1 1 1 8 8 0 60 68 92 baalminion baalminion 10 15 14 13 90 90 90 85 85 85 50 50 50 17 17 17 1 1 1 1 1 Smite A2 1 100 75 50 -50 -40 -33 50 50 95 95 50 95 50 120 33 50 95 2 50 50 50 5 476 666 87 763 30 90 251 17 165 238 430 480 135 247 80 130 210 80 140 210 430 480 135 247 80 130 210 80 140 210 Act 5 H2H C Act 5 Champ C Act 5 Unique C Act 5 (N) H2H C Act 5 (N) Champ C Act 5 (N) Unique C Act 5 (H) H2H C Act 5 (H) Champ C Act 5 (H) Unique C Act 5 (H) Champ C Desecrated Act 5 (H) Unique C Desecrated Act 5 (H) Herald C 1 0
|
||||
@@ -704,12 +704,12 @@ dkfig2 700 doomknight1 0 DoomKnight doomknight1 doomknight DoomKnight Fighter
|
||||
dkmag1 701 doomknight3 dkmag2 0 OblivionKnight doomknight3 doomknight OblivionKnight Mage UM 1 1 dkfig1 2 4 1 2 8 7 1 30 58 85 doomknight doomknight 10 15 14 13 6 7 8 25 26 27 500 350 200 50 50 50 80 85 90 30 30 30 30 30 30 9 10 11 1 1 1 1 DoomKnightMissile S1 1 MonBoneArmor S1 6 MonBoneSpirit S1 2 Decrepify S2 3 Bestow seq_undeadbestow 2 MonCurseCast S2 3 100 75 33 -50 -33 -25 60 60 60 60 60 60 80 60 33 60 60 140 75 2 29 29 29 5 130 171 107 131 69 153 92 120 150 115 210 60 135 160 120 150 115 210 60 135 160 Act 4 H2H B Act 4 Champ B Act 4 Unique B Act 4 (N) H2H B Act 4 (N) Champ B Act 4 (N) Unique B Act 4 (H) H2H B Act 4 (H) Champ B Act 4 (H) Unique B Act 4 (H) Champ B Desecrated Act 4 (H) Unique B Desecrated Act 4 (H) Herald B 0
|
||||
dkmag2 702 doomknight3 0 OblivionKnight doomknight3 doomknight OblivionKnight Mage UM 1 1 dkfig2 2 4 1 2 8 7 1 30 58 85 doomknight doomknight 10 15 14 13 6 7 8 25 26 27 500 350 200 50 50 50 80 85 90 30 30 30 30 30 30 9 10 11 1 1 1 1 DoomKnightMissile S1 1 MonBoneArmor S1 6 MonBoneSpirit S1 2 Decrepify S2 3 Bestow seq_undeadbestow 2 MonCurseCast S2 3 100 75 33 -50 -33 -25 60 60 60 60 60 60 80 60 33 60 60 145 75 2 29 29 29 5 130 171 107 131 69 153 92 120 150 115 210 60 135 160 120 150 115 210 60 135 160 Act 4 H2H B Act 4 Champ B Act 4 Unique B Act 4 (N) H2H B Act 4 (N) Champ B Act 4 (N) Unique B Act 4 (H) H2H B Act 4 (H) Champ B Act 4 (H) Unique B Act 4 (H) Champ B Desecrated Act 4 (H) Unique B Desecrated Act 4 (H) Herald B 0
|
||||
mummy6 703 mummy1 3 Cadaver mummy1 mummy Mummy MM 1 4 5 3 3 1 25 55 83 mummy mummy 10 15 14 13 25 25 25 50 50 50 100 100 100 55 55 55 10 10 10 1 1 1 1 1 1 100 66 33 -50 -40 -25 70 80 50 50 50 130 2 25 25 25 5 70 154 85 89 57 107 93 57 107 93 100 140 95 100 60 105 105 100 140 95 100 60 105 105 A1 pois 35 56 106 800 35 55 110 800 35 55 110 800 Act 3 H2H C Act 3 Champ C Act 3 Unique C Act 3 (N) H2H C Act 3 (N) Champ C Act 3 (N) Unique C Act 3 (H) H2H C Act 3 (H) Champ C Act 3 (H) Unique C Act 3 (H) Champ C Desecrated Act 3 (H) Unique C Desecrated Act 3 (H) Herald C 0
|
||||
ubermephisto 704 mephisto 0 Mephisto mephisto mephisto demon UberMephisto MP 1 1 1 8 8 0 110 110 110 mephisto mephisto 14 15 10 6 40 46 15 20 25 25 33 33 25 33 33 1 1 1 1 1 1 PrimeLightning A2 6 PrimeBolt A2 20 PrimePoisonNova A2 7 MephistoMissile A2 5 MephFrostNova A2 1 Blizzard A2 5 100 -25 -15 -10 33 33 25 50 50 50 25 50 20 75 75 110 75 110 4 1 20 40 50 5 5695 5695 124 2131 295 442 251 5695 5695 160 2131 160 220 200 6500 6600 160 2131 375 440 200 0
|
||||
uberdiablo 705 diablo 0 Diablo diablo demon UberDiablo DI 1 1 1 8 8 0 110 110 110 diablo diablo 14 15 13 12 1 1 1 1 1 1 DiabLight SC 2 DiabCold S2 2 DiabFire S1 4 DiabWall S3 2 DiabRun seq_diablorun 5 PrimeFirewall S3 8 DiabPrison S3 1 Diablogeddon S3 5 15 15 15 -10 -10 -10 50 50 75 75 75 75 50 50 75 75 75 75 50 75 110 75 75 75 4 1 50 50 50 5 6427 6427 87 3462 77 197 313 113 257 251 6427 6427 140 3462 100 190 215 110 230 200 6500 6600 140 3462 370 380 215 110 230 200 1 0
|
||||
uberizual 706 izual 0 izual izual demon UberIzual 22 1 1 1 10 16 0 110 110 110 izual izual 14 15 12 8 45 50 50 50 50 50 66 66 66 0 75 100 20 5 0 3 4 4 1 1 1 1 1 Frost Nova SC 8 Chilling Armor SC 20 MonTeleport SC 1 100 75 50 -50 -33 -25 30 30 30 30 75 30 30 30 30 30 75 30 30 75 75 75 110 75 4 50 50 50 5 9481 9481 84 3695 132 237 251 3111 3111 120 1987 120 160 200 6500 6600 120 1987 350 400 200 A1 cold 100 42 84 50 100 50 80 75 100 50 80 100 Uber Izual Uber Izual Uber Izual 0
|
||||
uberandariel 707 andariel 0 Lilith andariel demon Andariel AN 1 1 1 8 8 0 110 110 110 andariel andariel 14 15 11 9 30 35 35 10 8 6 30 32 34 50 55 60 1 1 1 1 1 1 AndrialSpray seq_andarielspray 1 AndyPoisonBolt A1 1 100 66 33 -25 -15 0 -50 50 50 80 -50 50 50 50 66 75 75 75 75 110 4 1 0 20 40 5 2562 2562 84 916 76 238 153 2562 2562 110 1492 180 220 200 6500 6600 110 1492 400 440 470 A1 pois 100 33 33 30 100 60 33 33 100 33 33 225 Uber Andariel Uber Andariel Uber Andariel 0
|
||||
uberduriel 708 duriel 0 Duriel duriel demon Duriel DU 1 1 1 10 15 0 110 110 110 duriel duriel 15 15 15 5 5 6 33 33 33 50 50 50 1 1 1 1 1 1 Charge seq_durielcharge 5 Jab seq_durieljab 15 Smite seq_durielsmite 7 MonHolyFreeze NU 1 100 100 100 -20 -20 -20 20 20 50 20 50 50 75 50 50 75 75 75 75 75 4 1 0 25 50 5 4757 4757 85 1655 140 180 201 140 160 252 1 2 200 4757 4757 120 1655 140 190 110 115 165 150 40 50 135 6500 6600 120 1655 360 380 110 115 165 150 40 50 135 A2 stun 100 15 100 20 100 30 Uber Duriel Uber Duriel Uber Duriel 0
|
||||
uberbaal 709 baalcrab 0 Baal Crab baalcrab demon UberBaal 42 1 1 1 6 6 0 110 110 110 baalcrab baalcrab 14 15 13 12 1 1 1 1 1 1 Baal Nova S3 1 Baal Inferno seq_baalinferno 1 Baal Tentacle S2 1 Baal Cold Missiles A1 1 Baal Teleport A1 1 Defense Curse S3 3 Blood Mana S3 3 Chilling Armor A1 30 100 50 20 -15 -15 -15 33 33 33 50 50 50 50 50 50 75 75 75 110 75 4 1 40 45 55 5 6336 6336 87 6460 106 179 251 136 271 376 6336 6336 150 6460 120 180 250 135 240 250 6500 6600 150 6460 330 380 250 165 240 250 A1 fire 0 100 100 150 100 120 200 A2 frze 0 100 100 160 500 100 120 160 1000 1 0
|
||||
ubermephisto 704 mephisto 0 Mephisto mephisto mephisto demon UberMephisto MP 1 1 1 8 8 0 110 110 110 mephisto mephisto 14 15 10 6 40 46 15 20 25 25 33 33 25 33 33 1 1 1 1 1 1 1 PrimeLightning A2 6 PrimeBolt A2 20 PrimePoisonNova A2 7 MephistoMissile A2 5 MephFrostNova A2 1 Blizzard A2 5 100 -25 -15 -10 33 33 25 50 50 50 25 50 20 75 75 110 75 110 4 1 20 40 50 5 5695 5695 124 2131 295 442 251 5695 5695 160 2131 160 220 200 6500 6600 160 2131 375 440 200 0
|
||||
uberdiablo 705 diablo 0 Diablo diablo demon UberDiablo DI 1 1 1 8 8 0 110 110 110 diablo diablo 14 15 13 12 1 1 1 1 1 1 1 DiabLight SC 2 DiabCold S2 2 DiabFire S1 4 DiabWall S3 2 DiabRun seq_diablorun 5 PrimeFirewall S3 8 DiabPrison S3 1 Diablogeddon S3 5 15 15 15 -10 -10 -10 50 50 75 75 75 75 50 50 75 75 75 75 50 75 110 75 75 75 4 1 50 50 50 5 6427 6427 87 3462 77 197 313 113 257 251 6427 6427 140 3462 100 190 215 110 230 200 6500 6600 140 3462 370 380 215 110 230 200 1 0
|
||||
uberizual 706 izual 0 izual izual demon UberIzual 22 1 1 1 10 16 0 110 110 110 izual izual 14 15 12 8 45 50 50 50 50 50 66 66 66 0 75 100 20 5 0 3 4 4 1 1 1 1 1 1 Frost Nova SC 8 Chilling Armor SC 20 MonTeleport SC 1 100 75 50 -50 -33 -25 30 30 30 30 75 30 30 30 30 30 75 30 30 75 75 75 110 75 4 50 50 50 5 9481 9481 84 3695 132 237 251 3111 3111 120 1987 120 160 200 6500 6600 120 1987 350 400 200 A1 cold 100 42 84 50 100 50 80 75 100 50 80 100 Uber Izual Uber Izual Uber Izual 0
|
||||
uberandariel 707 andariel 0 Lilith andariel demon Andariel AN 1 1 1 8 8 0 110 110 110 andariel andariel 14 15 11 9 30 35 35 10 8 6 30 32 34 50 55 60 1 1 1 1 1 1 1 AndrialSpray seq_andarielspray 1 AndyPoisonBolt A1 1 100 66 33 -25 -15 0 -50 50 50 80 -50 50 50 50 66 75 75 75 75 110 4 1 0 20 40 5 2562 2562 84 916 76 238 153 2562 2562 110 1492 180 220 200 6500 6600 110 1492 400 440 470 A1 pois 100 33 33 30 100 60 33 33 100 33 33 225 Uber Andariel Uber Andariel Uber Andariel 0
|
||||
uberduriel 708 duriel 0 Duriel duriel demon Duriel DU 1 1 1 10 15 0 110 110 110 duriel duriel 15 15 15 5 5 6 33 33 33 50 50 50 1 1 1 1 1 1 1 Charge seq_durielcharge 5 Jab seq_durieljab 15 Smite seq_durielsmite 7 MonHolyFreeze NU 1 100 100 100 -20 -20 -20 20 20 50 20 50 50 75 50 50 75 75 75 75 75 4 1 0 25 50 5 4757 4757 85 1655 140 180 201 140 160 252 1 2 200 4757 4757 120 1655 140 190 110 115 165 150 40 50 135 6500 6600 120 1655 360 380 110 115 165 150 40 50 135 A2 stun 100 15 100 20 100 30 Uber Duriel Uber Duriel Uber Duriel 0
|
||||
uberbaal 709 baalcrab 0 Baal Crab baalcrab demon UberBaal 42 1 1 1 6 6 0 110 110 110 baalcrab baalcrab 14 15 13 12 1 1 1 1 1 1 1 Baal Nova S3 1 Baal Inferno seq_baalinferno 1 Baal Tentacle S2 1 Baal Cold Missiles A1 1 Baal Teleport A1 1 Defense Curse S3 3 Blood Mana S3 3 Chilling Armor A1 30 100 50 20 -15 -15 -15 33 33 33 50 50 50 50 50 50 75 75 75 110 75 4 1 40 45 55 5 6336 6336 87 6460 106 179 251 136 271 376 6336 6336 150 6460 120 180 250 135 240 250 6500 6600 150 6460 330 380 250 165 240 250 A1 fire 0 100 100 150 100 120 200 A2 frze 0 100 100 160 500 100 120 160 1000 1 0
|
||||
demonspawner 710 minionspawner1 7 Evil hut minionspawner8 MinionSpawner xa 1 megademon5 0 3 NU 1 1 0 0 1 14 66 82 11 15 15 15 100 100 100 25 25 25 100 100 100 20 22 25 25 25 25 1 1 MinionSpawner A1 1 -50 -40 -33 15 15 15 5 67 107 84 93 50 90 75 100 400 500 75 100 0
|
||||
demonhole 711 evilhole1 evilhole2 0 Dummy evilhole1 EvilHole EH 1 megademon6 0 0 NU 1 1 0 0 1 1 34 67 smithdeath smithdeath 9 15 15 15 3 3 3 25 25 25 1 1 1 Nest S4 1 -50 2 0
|
||||
megademon6 712 megademon1 0 PitLord megademon1 megademon Megademon DM 1 2 3 10 16 1 30 57 84 megademon megademon 10 15 13 11 60 75 90 50 60 65 80 95 97 70 70 70 70 70 70 75 60 45 1 1 1 1 1 MegademonInferno S1 9 100 85 66 -50 -40 -33 70 70 80 100 50 145 145 145 145 145 2 39 39 39 5 191 228 101 152 53 95 125 400 500 115 130 80 120 160 400 500 230 260 160 240 160 A1 fire 15 40 80 25 40 80 Act 4 H2H B Act 4 Champ B Act 4 Unique B 0
|
||||
@@ -734,20 +734,20 @@ skmage_pois7 730 skmage_pois1 0 HorrorMage skmage_pois1 skeleton SkeletonMage
|
||||
vampire9 731 vampire1 3 DarkLord vampire1 vampire Vampire steals life VA 1 1 2 3 8 8 1 25 55 83 vampire vampire 10 15 14 13 85 85 85 35 40 45 24 24 24 25 34 47 7 7 7 1 1 1 1 1 1 VampireFireball SC 5 VampireFirewall SC 5 VampireMeteor SC 5 VampireMissile SC 1 100 85 75 -50 -40 -25 60 50 60 50 50 100 33 33 135 50 5 25 25 25 5 152 210 85 113 51 119 93 150 200 100 150 50 100 120 150 200 100 150 50 100 120 A1 cold 75 50 68 25 75 50 100 50 75 50 100 75 0
|
||||
wraith9 732 wraith1 0 Specter wraith1 wraith Wraith drains mana WR 1 2 4 8 8 1 15 61 82 wraith wraith 10 15 14 13 90 100 100 4 4 4 90 95 99 1 1 1 1 1 1 1 -50 -33 0 20 50 30 60 100 50 50 100 2 8 8 8 5 83 165 84 93 61 121 94 65 90 130 105 60 105 95 65 90 130 105 60 105 95 A1 mana 40 60 100 45 100 200 50 200 300 0
|
||||
willowisp8 733 willowisp1 0 BurningSoul willowisp1 willowisp WillOWisp drains mana WW 1 1 2 4 15 15 1 42 61 83 willowisp willowisp 10 15 14 13 70 70 75 90 90 90 30 30 30 willowisplightningbolt2 1 1 1 1 1 1 Chain Lightning SC 4 -50 -33 0 70 80 70 100 50 90 50 100 33 115 2 28 28 28 5 44 87 84 82 34 151 93 45 85 115 120 45 115 120 45 85 115 120 45 115 120 A1 mana 90 16 72 90 100 200 90 200 300 SC ltng 100 5 120 100 5 160 100 5 190 1 1 0
|
||||
horse 734 horse 0 dummy horse Idle hs 1 1 1 2 2 0 horse horse 15 15 15 2 1 1 1 1 2 0
|
||||
horse 734 horse 0 dummy horse Idle hs 1 1 1 2 2 0 horse horse 15 15 15 2 1 1 1 1 1 2 0
|
||||
cowking 735 hellbovine 1 Hell Bovine hellbovine bovine Skeleton EC 1 1 1 5 5 1 28 61 81 hellbovine hellbovine 10 15 14 13 99 99 99 5 5 5 95 99 99 33 33 33 1 1 1 1 1 100 75 66 -50 -40 -33 33 15 25 25 25 25 50 33 50 50 50 33 2 28 28 28 5 133 285 88 140 151 223 93 178 239 101 220 270 80 80 130 180 130 120 170 155 220 270 80 80 130 180 130 120 170 130 Cow Act 4 Champ B Act 4 Unique B Cow (N) Act 4 (N) Champ B Act 4 (N) Unique B Cow (H) Act 4 (H) Champ B Act 4 (H) Unique B Act 4 (H) Champ B Desecrated Act 4 (H) Unique B Desecrated Act 4 (H) Herald B 0
|
||||
darkelder 736 darkelder 4 PlagueBearer darkelder zombie Zombie ZM 1 3 4 1 5 2 17 46 77 zombie zombieunique 10 15 14 13 60 70 80 25 30 30 40 45 50 1 1 1 1 1 1 100 75 50 -50 -40 -25 50 50 75 75 50 100 75 2 17 17 17 5 109 192 84 109 55 137 92 101 164 92 105 150 80 105 60 140 105 70 150 110 105 150 80 105 55 135 105 70 150 110 A1 pois 50 27 54 400 50 25 25 400 50 25 25 400 Act 2 H2H B Act 2 Champ B Act 2 Unique B Act 2 (N) H2H B Act 2 (N) Champ B Act 2 (N) Unique B Act 2 (H) H2H B Act 2 (H) Champ B Act 2 (H) Unique B Act 2 (H) Champ B Desecrated Act 2 (H) Unique B Desecrated Act 2 (H) Herald B 0
|
||||
pig 737 pig 0 dummy pig Idle CW 1 1 1 2 2 0 pig pig 15 15 15 2 1 1 1 1 2 0
|
||||
seagull 738 seagull 0 dummy seagull Idle CW 1 1 1 7 7 1 15 15 15 1 1 1 1 1 2 0
|
||||
pig 737 pig 0 dummy pig Idle CW 1 1 1 2 2 0 pig pig 15 15 15 2 1 1 1 1 1 2 0
|
||||
seagull 738 seagull 0 dummy seagull Idle CW 1 1 1 7 7 1 15 15 15 1 1 1 1 1 1 2 0
|
||||
suicideminion9 739 suicideminion1 suicideminion10 2 BerserkSlayer suicideminion1 minion SuicideMinion xy 1 1 1 10 10 2 42 66 80 suicideminion suicideminion 11 15 14 13 15 15 15 5 5 5 50 60 70 4 4 4 1 1 1 1 1 100 85 75 -50 -40 -33 30 30 33 50 25 130 2 50 50 50 5 39 58 84 188 100 150 20 40 85 70 100 150 20 40 105 70 100 150 0
|
||||
suicideminion10 740 suicideminion1 suicideminion11 3 FrenziedHellSpawn suicideminion1 minion SuicideMinion xy 1 1 1 10 10 2 42 66 82 suicideminion suicideminion 11 15 14 13 15 15 15 5 5 5 50 60 70 4 4 4 1 1 1 1 1 1 100 85 75 -50 -40 -33 20 70 20 100 33 20 110 25 50 2 50 50 50 5 39 57 84 210 100 150 20 40 85 70 100 150 20 40 105 70 100 150 0
|
||||
suicideminion11 741 suicideminion1 2 InsaneHellSpawn suicideminion1 minion SuicideMinion xy 1 1 1 10 10 2 42 66 82 suicideminion suicideminion 11 15 14 13 15 15 15 5 5 5 50 60 70 4 4 4 1 1 1 1 1 1 100 85 75 -50 -40 -33 40 40 33 50 25 135 2 50 50 50 5 39 58 84 234 100 150 20 40 85 70 100 150 20 40 105 70 100 150 0
|
||||
wargoatman 742 wargoatman 0 WarGoatman wargoatman demon GenericPet GM 1 1 1 8 8 0 wargoatman wargoatman 10 15 15 15 30 30 60 10 0 0 0 0 1 4 4 0 0 15 1 0 25 0 0 0 1 1 1 1 1 1 1 1 Goatman Stun A1 1 Goatman Berserk A1 1 Goatman Frenzy A1 1 Goatman Cleave seq_wargoatmancleave 1 -50 -50 -50 25 20 20 50 20 25 20 20 50 20 25 20 20 50 20 3 1 21 21 21 5 100 100 100 3 4 60 3 4 60 175 175 150 30 50 66 30 50 66 275 275 200 230 275 92 230 275 92 0
|
||||
warbighead 743 warbighead 0 Tainted warbighead demon GenericPet BH 1 1 1 1 6 6 0 warbighead warbighead 10 15 15 15 30 30 60 10 0 0 0 0 1 0 0 0 0 15 0 1 25 10 0 0 taintedfireball 1 1 1 1 1 1 1 Tainted Fire Ball A2 1 Tainted Resist Fire S1 1 -50 -50 -50 50 20 20 20 50 20 20 20 50 20 20 20 3 1 11 11 11 5 127 127 75 76 113 77 180 180 90 50 100 110 290 290 190 50 100 110 A2 ltng 100 75 110 100 140 180 100 160 200 A1 ltng 15 10 20 35 10 20 0
|
||||
warputriddefiler 744 warputriddefiler 0 WarDefiler warputriddefiler demon GenericPet 45 1 1 1 6 6 0 warputriddefiler warputriddefiler 10 15 15 15 30 30 60 10 0 2 0 0 1 4 2 0 0 15 0 0 25 10 0 0 1 1 1 1 1 1 1 1 1 Health Link S1 1 -50 -50 -50 33 33 33 50 50 50 50 50 50 50 50 100 3 1 50 50 50 5 140 140 125 32 91 126 190 190 190 30 90 110 300 300 240 30 90 110 0
|
||||
colossal1 745 colossal1 colossal2 0 Ancient Barbarian 1 colossal1 human ColossalWhirlwind 0D 1 colbarbwhirl 0 2 NU 1 1 20 20 0 110 110 110 colossal1 colossal1 10 15 13 11 15 15 15 25 25 25 75 75 75 8 8 8 5 5 5 66 33 75 150 1 1 1 1 1 Talic's Whirlwind seq_ancientwhirlwind 1 Nest seq_genericspawner 30 Colossal Volcano seq_ancientwhirlwind 40 Enchant SC 35 UberAncientsHeal SC 1 Talic's Fire Pierce NU 20 Fire Twisters NU 50 100 100 100 0 0 0 70 50 150 70 70 70 70 50 150 70 70 70 50 50 150 70 70 90 4 5 500 600 84 110 140 251 110 140 251 600 800 125 4 7 250 4 7 250 6700 6800 200 3462 360 380 250 360 380 250 Uber Talic 0
|
||||
colossal2 746 colossal1 colossal3 1 Ancient Barbarian 2 colossal2 human ColossalThrow 0F 1 colbarbthrow 0 2 NU 1 1 30 30 0 110 110 110 colossal2 colossal2 10 15 13 11 15 15 15 50 50 50 25 25 25 25 25 25 7 7 7 5 5 5 66 33 75 150 colossal throwing axe ancient throwing axe 1 1 1 1 1 Shout SC 40 Nest seq_genericspawner 30 Lightning Enchant SC 40 Colossal Thunder Storm SC 40 UberAncientsHeal SC 1 Madawc's Lightning Pierce NU 20 Charged Bolt Disk NU 40 100 100 100 0 0 0 70 50 70 120 70 70 70 50 70 120 70 70 30 90 70 120 70 70 4 5 500 600 84 130 180 251 130 180 251 600 800 125 4 7 250 4 7 250 6700 6800 140 3462 375 440 250 375 440 250 Uber Madawc 0
|
||||
colossal3 747 colossal1 2 Ancient Barbarian 3 colossal3 human ColossalLeap 0E 1 colbarbfrenzy 0 2 NU 1 1 25 25 0 110 110 110 colossal3 colossal3 10 15 13 11 15 15 15 50 50 50 75 75 75 125 125 125 250 250 175 5 5 5 66 33 75 250 250 150 1 1 1 1 1 Korlic's Leap Attack seq_ancientleap 30 Nest seq_genericspawner 30 Cold Enchant SC 40 Blizzard SC 25 UberAncientsHeal SC 1 Korlic's Cold Pierce NU 20 Cold Fissure NU 40 Korlic's Bash A2 40 100 100 100 0 0 0 70 50 70 70 70 70 70 50 70 70 70 70 66 50 70 70 180 70 4 5 500 600 84 150 250 251 150 250 251 600 800 125 4 7 250 4 7 250 6700 6800 170 3462 370 380 250 370 380 250 Uber Korlic 0
|
||||
colbarbwhirl 748 act5barb1 0 DefenderSpirit colbarbwhirl human ColBarbWhirl 0A 1 1 1 15 15 0 37 68 87 colbarbwhirl colbarbwhirl 10 15 13 11 15 15 15 25 25 25 75 75 75 8 8 8 1 1 1 1 Whirlwind seq_ancientwhirlwind 1 100 100 100 -15 -15 -15 70 50 140 70 70 70 70 50 140 70 70 70 30 50 140 70 70 70 2 5 500 600 84 9 14 251 9 14 251 600 800 125 4 7 250 4 7 250 400 500 125 260 80 115 160 80 115 160 0
|
||||
colbarbthrow 749 act5barb1 0 GuardianSpirit colbarbthrow human ColBarbThrow 0A 1 1 1 20 20 0 37 68 87 colbarbthrow colbarbthrow 10 15 13 11 15 15 15 50 50 50 25 25 25 7 7 7 ancient throwing axe 1 1 1 1 100 100 100 -15 -15 -15 70 50 70 110 70 70 70 50 70 110 70 70 20 50 70 110 70 70 2 5 500 600 84 12 18 251 600 800 125 4 7 250 400 500 125 260 100 150 160 100 150 160 0
|
||||
colbarbfrenzy 750 act5barb2 0 ProtectorSpirit colbarbfrenzy human ColBarbFrenzy 0A 1 1 1 15 15 0 37 68 87 colbarbfrenzy colbarbfrenzy 10 15 13 11 50 50 50 25 25 25 25 25 25 5 5 5 75 75 75 1 1 1 1 MonFrenzy A2 14 Bash A2 14 100 100 100 -15 -15 -15 70 50 70 70 180 70 70 50 70 70 180 70 40 50 70 70 160 70 2 5 500 600 84 16 25 251 9 14 251 600 800 125 4 7 250 4 7 250 400 500 125 260 80 120 160 80 120 160 0
|
||||
wargoatman 742 wargoatman 0 WarGoatman wargoatman demon GenericPet GM 1 1 1 8 8 0 wargoatman wargoatman 10 15 15 15 30 30 60 10 0 0 0 0 1 4 4 0 0 15 1 0 25 0 0 0 1 1 1 1 1 1 1 1 1 Goatman Stun A1 1 Goatman Berserk A1 1 Goatman Frenzy A1 1 Goatman Cleave seq_wargoatmancleave 1 -50 -50 -50 25 20 20 50 20 25 20 20 50 20 25 20 20 50 20 3 1 21 21 21 5 100 100 100 3 4 60 3 4 60 175 175 150 30 50 66 30 50 66 275 275 200 230 275 92 230 275 92 0
|
||||
warbighead 743 warbighead 0 Tainted warbighead demon GenericPet BH 1 1 1 1 6 6 0 warbighead warbighead 10 15 15 15 30 30 60 10 0 0 0 0 1 0 0 0 0 15 0 1 25 10 0 0 taintedfireball 1 1 1 1 1 1 1 1 Tainted Fire Ball A2 1 Tainted Resist Fire S1 1 -50 -50 -50 50 20 20 20 50 20 20 20 50 20 20 20 3 1 11 11 11 5 127 127 75 76 113 77 180 180 90 50 100 110 290 290 190 50 100 110 A2 ltng 100 75 110 100 140 180 100 160 200 A1 ltng 15 10 20 35 10 20 0
|
||||
warputriddefiler 744 warputriddefiler 0 WarDefiler warputriddefiler demon GenericPet 45 1 1 1 6 6 0 warputriddefiler warputriddefiler 10 15 15 15 30 30 60 10 0 2 0 0 1 4 2 0 0 15 0 0 25 10 0 0 1 1 1 1 1 1 1 1 1 1 Health Link S1 1 -50 -50 -50 33 33 33 50 50 50 50 50 50 50 50 100 3 1 50 50 50 5 140 140 125 32 91 126 190 190 190 30 90 110 300 300 240 30 90 110 0
|
||||
colossal1 745 colossal1 colossal2 0 Ancient Barbarian 1 colossal1 human ColossalWhirlwind 0D 1 colbarbwhirl 0 2 NU 1 1 20 20 0 110 110 110 colossal1 colossal1 10 15 13 11 15 15 15 25 25 25 75 75 75 8 8 8 5 5 5 66 33 75 150 1 1 1 1 1 1 1 Talic's Whirlwind seq_ancientwhirlwind 1 Nest seq_genericspawner 30 Colossal Volcano seq_ancientwhirlwind 40 Enchant SC 35 UberAncientsHeal SC 1 Talic's Fire Pierce NU 20 Fire Twisters NU 50 100 100 100 0 0 0 70 75 150 70 70 70 70 75 150 70 70 70 50 75 150 70 70 90 4 5 500 600 84 110 140 251 110 140 251 600 800 125 4 7 250 4 7 250 6700 6800 200 3462 360 380 250 360 380 250 Uber Talic 3 0
|
||||
colossal2 746 colossal1 colossal3 1 Ancient Barbarian 2 colossal2 human ColossalThrow 0F 1 colbarbthrow 0 2 NU 1 1 30 30 0 110 110 110 colossal2 colossal2 10 15 13 11 15 15 15 50 50 50 25 25 25 25 25 25 7 7 7 5 5 5 66 33 75 150 colossal throwing axe ancient throwing axe 1 1 1 1 1 1 1 Shout SC 40 Nest seq_genericspawner 30 Lightning Enchant SC 40 Colossal Thunder Storm SC 40 UberAncientsHeal SC 1 Madawc's Lightning Pierce NU 20 Charged Bolt Disk NU 40 100 100 100 0 0 0 70 90 70 120 70 70 70 90 70 120 70 70 30 90 70 120 70 70 4 5 500 600 84 130 180 251 130 180 251 600 800 125 4 7 250 4 7 250 6700 6800 140 3462 375 440 250 375 440 250 Uber Madawc 3 0
|
||||
colossal3 747 colossal1 2 Ancient Barbarian 3 colossal3 human ColossalLeap 0E 1 colbarbfrenzy 0 2 NU 1 1 25 25 0 110 110 110 colossal3 colossal3 10 15 13 11 15 15 15 50 50 50 75 75 75 125 125 125 250 250 175 5 5 5 66 33 75 250 250 150 1 1 1 1 1 1 1 Korlic's Leap Attack seq_ancientleap 30 Nest seq_genericspawner 30 Cold Enchant SC 40 Blizzard SC 25 UberAncientsHeal SC 1 Korlic's Cold Pierce NU 20 Cold Fissure NU 40 Korlic's Bash A2 40 100 100 100 0 0 0 70 75 70 70 70 70 70 75 70 70 70 70 66 75 70 70 180 70 4 5 500 600 84 150 250 251 150 250 251 600 800 125 4 7 250 4 7 250 6700 6800 170 3462 370 380 250 370 380 250 Uber Korlic 3 0
|
||||
colbarbwhirl 748 act5barb1 0 DefenderSpirit colbarbwhirl human ColBarbWhirl 0A 1 1 1 15 15 0 37 68 87 colbarbwhirl colbarbwhirl 10 15 13 11 15 15 15 25 25 25 75 75 75 8 8 8 1 1 1 1 1 Whirlwind seq_ancientwhirlwind 1 100 100 100 -15 -15 -15 70 50 140 70 70 70 70 50 140 70 70 70 30 50 140 70 70 70 2 5 500 600 84 9 14 251 9 14 251 600 800 125 4 7 250 4 7 250 400 500 125 260 80 115 160 80 115 160 3 0
|
||||
colbarbthrow 749 act5barb1 0 GuardianSpirit colbarbthrow human ColBarbThrow 0A 1 1 1 20 20 0 37 68 87 colbarbthrow colbarbthrow 10 15 13 11 15 15 15 50 50 50 25 25 25 7 7 7 ancient throwing axe 1 1 1 1 1 100 100 100 -15 -15 -15 70 50 70 110 70 70 70 50 70 110 70 70 20 50 70 110 70 70 2 5 500 600 84 12 18 251 600 800 125 4 7 250 400 500 125 260 100 150 160 100 150 160 3 0
|
||||
colbarbfrenzy 750 act5barb2 0 ProtectorSpirit colbarbfrenzy human ColBarbFrenzy 0A 1 1 1 15 15 0 37 68 87 colbarbfrenzy colbarbfrenzy 10 15 13 11 50 50 50 25 25 25 25 25 25 5 5 5 75 75 75 1 1 1 1 1 MonFrenzy A2 14 Bash A2 14 100 100 100 -15 -15 -15 70 50 70 70 180 70 70 50 70 70 180 70 40 50 70 70 160 70 2 5 500 600 84 16 25 251 9 14 251 600 800 125 4 7 250 4 7 250 400 500 125 260 80 120 160 80 120 160 3 0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
skilldesc SkillPage SkillRow SkillColumn ListRow IconCel HireableIconCel str name str short str long str alt descdam ddam calc1 ddam calc2 p1dmelem p1dmmin p1dmmax p2dmelem p2dmmin p2dmmax p3dmelem p3dmmin p3dmmax descatt descmissile1 descmissile2 descmissile3 descline1 desctexta1 desctextb1 desccalca1 desccalcb1 descline2 desctexta2 desctextb2 desccalca2 desccalcb2 descline3 desctexta3 desctextb3 desccalca3 desccalcb3 descline4 desctexta4 desctextb4 desccalca4 desccalcb4 descline5 desctexta5 desctextb5 desccalca5 desccalcb5 descline6 desctexta6 desctextb6 desccalca6 desccalcb6 dsc2line1 dsc2texta1 dsc2textb1 dsc2calca1 dsc2calcb1 dsc2line2 dsc2texta2 dsc2textb2 dsc2calca2 dsc2calcb2 dsc2line3 dsc2texta3 dsc2textb3 dsc2calca3 dsc2calcb3 dsc2line4 dsc2texta4 dsc2textb4 dsc2calca4 dsc2calcb4 dsc2line5 dsc2texta5 dsc2textb5 dsc2calca5 dsc2calcb5 dsc3line1 dsc3texta1 dsc3textb1 dsc3calca1 dsc3calcb1 dsc3line2 dsc3texta2 dsc3textb2 dsc3calca2 dsc3calcb2 dsc3line3 dsc3texta3 dsc3textb3 dsc3calca3 dsc3calcb3 dsc3line4 dsc3texta4 dsc3textb4 dsc3calca4 dsc3calcb4 dsc3line5 dsc3texta5 dsc3textb5 dsc3calca5 dsc3calcb5 dsc3line6 dsc3texta6 dsc3textb6 dsc3calca6 dsc3calcb6 dsc3line7 dsc3texta7 dsc3textb7 dsc3calca7 dsc3calcb7 item proc text item proc descline count *eol
|
||||
abyss 3 6 3 3 58 AbyssName AbyssLongDesc AbyssLongDesc AbyssAN 27 25 miss('abysscenter'.par1) abysscenter abyssexplode 36 StrSkill3 usmc 256 75 StrSkillMagicDamageAveragePerSecond (m1nm*25)/miss('abysscenter'.par1) (m1xm*25)/miss('abysscenter'.par1) 75 StrSkill39 enma exma 74 StrSkill18 miss('abyssexplode'.sd34)+(sksrc('Enhanced Entropy'.blvl)/miss('abyssexplode'.par5)) 36 StrSkillCastingDelaySingular StrSkillCastingDelayPlural 50 25 36 StrSkillDurationSingular StrSkill20 miss('abysscenter'.rang) 25 40 Sksyn AbyssName 2 76 Magdplev MiasmaBoltName par8 76 AMDImm MiasmaBoltName par8 76 Magdplev MiasmaChainName par8 76 AMDImm MiasmaChainName par8 0
|
||||
abyss 3 6 3 3 58 AbyssName AbyssLongDesc AbyssLongDesc AbyssAN 27 25 miss('abysscenter'.par1) abysscenter abyssexplode 36 StrSkill3 usmc 256 75 StrSkillMagicDamageAveragePerSecond (m1nm*25)/miss('abysscenter'.par1) (m1xm*25)/miss('abysscenter'.par1) 75 StrSkill39 enma exma 74 StrSkill18 "min((miss('abyssexplode'.sd34)+(sksrc('Enhanced Entropy'.lvl)/miss('abyssexplode'.par5))),11)" 36 StrSkillCastingDelaySingular StrSkillCastingDelayPlural 50 25 36 StrSkillDurationSingular StrSkill20 miss('abysscenter'.rang) 25 40 Sksyn AbyssName 2 76 Magdplev MiasmaBoltName par8 76 AMDImm MiasmaBoltName par8 76 Magdplev MiasmaChainName par8 76 AMDImm MiasmaChainName par8 0
|
||||
amplify damage 1 1 2 1 0 skillname66 skillld66 skillld66 skillan66 36 StrSkillDurationSingular StrSkill20 ln34 25 36 StrSkillRadiusSingular StrSkill18 ln12*2 3 36 StrSkill3 usmc 256 74 StrSkill37 par5 0
|
||||
apocalypse 3 6 1 3 56 ApocalypseName ApocalypseLongDesc ApocalypseLongDesc ApocalypseAN 5 36 StrSkill3 usmc 256 74 StrSkill18 rng 74 StrSkill51 -ln12 75 StrSkill5 enma exma 36 StrSkillCastingDelaySingular StrSkillCastingDelayPlural 45 25 40 Sksyn ApocalypseName 2 76 Firedplev RingOfFireName par8 76 Firedplev FlameWaveName par8 0
|
||||
apocalypse 3 6 1 3 56 ApocalypseName ApocalypseLongDesc ApocalypseLongDesc ApocalypseAN 5 36 StrSkill3 usmc 256 74 StrSkill18 rng 74 StrSkill51 ast1 75 StrSkill5 enma exma 36 StrSkillCastingDelaySingular StrSkillCastingDelayPlural 45 25 40 Sksyn ApocalypseName 2 76 Firedplev RingOfFireName par8 76 Firedplev FlameWaveName par8 0
|
||||
arctic blast 3 2 3 3 36 Skillname231 Skillld231 Skillld231 Skillan231 8 74 StrSkillManaCostPerSecond mps 36 StrSkillRangeSingular StrSkill56 ln12/4*2 3 36 StrSkillColdLengthSingular StrSkill13 edln 25 75 StrSkillColdDamageAveragePerSecond enms*12/256 exms*12/256 74 StrSkill115 par3 40 Sksyn Skillname231 2 76 Colddplev Skillname236 par8 0
|
||||
armageddon 3 6 1 3 50 Skillname250 Skillld250 Skillld250 Skillan250 5 armageddonfire 75 StrSkillFireDamageAveragePerSecond m1eo*25*3*(mael+100)/100/256 m1ey*25*3*(mael+100)/100/256 75 StrSkill5 enma exma 75 StrSkill4 pnma pxma 36 StrSkill3 usmc 256 36 StrSkillRadiusSingular StrSkill18 par3*2 3 36 StrSkillDurationSingular StrSkill20 ln12 + skill('Eruption'.blvl) * par7 25 40 Sksyn Skillname250 2 76 Secplev2 Skillname235 2 76 Firedplev Skillname226 par8 76 Firedplev Skillname230 par8 76 Damplev Skillname245 par6 0
|
||||
attack 0 0 0 0 2 skillname0 skillld0 skillld0 skillan0 1 2 0
|
||||
@@ -13,7 +13,7 @@ battle command 3 6 2 3 58 skillname155 skillld155 skillld155 skillan155
|
||||
battle cry 3 4 1 3 40 24 skillname146 skillld146 skillld146 skillan146 36 StrSkillDurationSingular StrSkill20 ln12 25 74 StrSkill25 ln34 74 StrSkill38 ln56 36 StrSkillRadiusSingular StrSkill18 5*2 3 36 StrSkill3 usmc 256 0
|
||||
battle orders 3 5 2 3 46 skillname149 skillld149 skillld149 skillan149 36 StrSkillDurationSingular StrSkill20 len 25 74 StrSkill102 ln34 74 StrSkill101 ln34 74 StrSkill100 ln34 36 StrSkillRadiusSingular StrSkill18 19*2 3 36 StrSkill3 usmc 256 40 Sksyn skillname149 2 76 Secplev2 skillname138 par8/25 76 Secplev2 skillname155 par8/25 0
|
||||
berserk 1 6 2 1 52 skillname152 skillld152 skillld152 skillan152 7 clc1 2 36 StrSkillDurationSingular StrSkill20 "par4-min(((110*lvl)/(lvl+6)*(par4-par3)/100),(par4-par3))" 25 74 StrSkillMagicDamagePercent clc1 74 StrSkill22 toht 36 StrSkill3 usmc 256 40 Sksyn skillname152 2 76 Magdplev skillname130 par8 76 Magdplev skillname149 par8 0
|
||||
bind demon 1 6 3 1 18 BindDemonName BindDemonLongDesc BindDemonLongDesc BindDemonAN 36 StrSkill3 usmc 256 74 StrSkillChanceToSucceed dm34+((skill('Death Mark'.blvl)*par8)/100) 74 StrSkillDemonicMasteryDemonLife clc1 74 ModStr5b pst9 74 StrSkillDemonicMasteryDemonDamage pst3 74 StrSkillUniqueAffixStrong lvl/5 74 StrSkillUniqueAffixFast lvl/10 74 StrSkillUniqueAffixSpectral lvl/15 74 StrSkillUniqueAffixAura lvl/20 40 Sksyn BindDemonName 2 76 SynChanceToBindPerLevel DeathMarkName par8/100 0
|
||||
bind demon 1 6 3 1 18 BindDemonName BindDemonLongDesc BindDemonLongDesc BindDemonAN 74 StrSkillManaCostPerSecond mps 74 StrSkillChanceToSucceed dm34+((skill('Death Mark'.blvl)*par8)/100) 74 StrSkillDemonicMasteryDemonLife clc1 74 ModStr5b pst9 74 StrSkillDemonicMasteryDemonDamage pst3 74 StrSkillUniqueAffixStrong lvl/5 74 StrSkillUniqueAffixFast lvl/10 74 StrSkillUniqueAffixSpectral lvl/15 74 StrSkillUniqueAffixAura lvl/20 40 Sksyn BindDemonName 2 79 SynChanceToBindPerLevel DeathMarkName par8 100 0
|
||||
blade fury 1 4 3 1 10 Skillname267 Skillld267 Skillld267 Skillan267 24 1 36 EskillPerBlade usmc 256 75 StrSkill4 pnma pxma 74 StrSkill22 toht 74 StrSkill115 par3 74 WeapDamsk 96*100/128 40 Sksyn Skillname267 2 76 Damplev Skillname258 par8 76 Damplev Skillname278 par8 0
|
||||
blade mastery 2 1 1 2 2 skillname127 skillld127 skillld127 skillan127 74 eskillincasemasteryX macr 74 StrSkillDamagePercent madm 74 StrSkill22 math 0
|
||||
blade sentinel 1 2 3 1 4 Skillname258 Skillld258 Skillld258 Skillan258 5 1 36 StrSkillDurationSingular StrSkill20 ln12 25 75 StrSkill4 pnma pxma 36 StrSkill3 usmc 256 36 StrSkillCastingDelaySingular StrSkillCastingDelayPlural 25 25 74 WeapDamsk 96*100/128 40 Sksyn Skillname258 2 76 Damplev Skillname267 par8 76 Damplev Skillname278 par8 0
|
||||
@@ -24,7 +24,7 @@ blaze 1 3 1 1 20 skillname46 skillld46 skillld46 skillan46 9 blaze
|
||||
blessed aim 2 3 1 2 24 8 skillname108 skillld108 skillld108 skillan108 36 StrSkillRadiusSingular StrSkill18 ln12*2 3 74 StrSkillAttackRatingPassive (skill('Blessed Aim'.blvl) < 1) ? par8 : skill('Blessed Aim'.blvl) * par8 74 StrSkillAttackRatingActive ln34 0
|
||||
blessed hammer 1 4 2 1 32 skillname112 skillld112 skillld112 skillan112 12 36 StrSkill3 usmc 256 75 StrSkill39 enma exma 74 StrSkillDamageToUndead 50 40 Sksyn skillname112 2 76 Magdplev skillname108 par8 76 Magdplev skillname115 par8 0
|
||||
blizzard 3 5 1 3 46 skillname59 skillld59 skillld59 skillan59 5 blizzardcenter 36 StrSkill3 usmc 256 75 StrSkill6 enma exma 36 StrSkillDurationSingular StrSkill20 miss('blizzardcenter'.rang) 25 36 StrSkillCastingDelaySingular StrSkillCastingDelayPlural 45 25 40 Sksyn skillname59 2 76 Colddplev skillname39 par8 76 Colddplev skillname45 par8 76 Colddplev skillname55 par8 0
|
||||
blood boil 1 4 2 1 14 BloodBoilName BloodBoilLongDesc BloodBoilLongDesc BloodBoilAN 23 36 StrSkill3 usmc 256 74 StrSkillLifeCostDemon clc1 36 StrSkillRadiusSingular StrSkill18 ln34 3 75 StrSkill5 enma exma 75 StrSkill4 pnma pxma 40 Sksyn BloodBoilName 2 76 Firedplev BloodOathName par8 76 Damplev EngorgeName par8 0
|
||||
blood boil 1 4 2 1 14 BloodBoilName BloodBoilLongDesc BloodBoilLongDesc BloodBoilAN 23 36 StrSkill3 usmc 256 74 StrSkillLifeCostDemon clc1 36 StrSkillRadiusSingular StrSkill18 rng 3 75 StrSkill5 enma exma 75 StrSkill4 pnma pxma 40 Sksyn BloodBoilName 2 76 Firedplev BloodOathName par8 76 Damplev EngorgeName par8 0
|
||||
blood oath 1 2 1 1 4 BloodOathName BloodOathLongDesc BloodOathLongDesc BloodOathAN 74 StrSkillDamageToDemon ln12 74 StrSkillPhysicalReductionDemon dm91 74 StrSkillDemonAllResist dm78 74 StrSkillDemonicMasteryDemonLife ln56 0
|
||||
bloodgolem 3 4 2 3 38 skillname85 skillld85 skillld85 skillan85 36 StrSkill3 usmc 256 34 StrSkill4 74 StrSkill80 dm12 13 StrSkill42 (100 + (par7 * (lvl - 1)))*(100 + skill('Golem Mastery'.ln12))/100 - 100 74 StrSkillDefense 120+skill('IronGolem'.lvl)*skill('IronGolem'.par8) 74 StrSkillAttackRating 60 + skill('Golem Mastery'.ln56)+skill('Clay Golem'.blvl)*skill('Clay Golem'.par8) 40 Sksyn skillname85 2 18 skillname79 18 skillname89 76 StrSkillAttackRatingPerLevelFlat skillname75 skill('Clay Golem'.par8) 76 StrSkillDefensePerLevelFlat skillname90 skill('IronGolem'.par8) 76 Damplev skillname94 skill('FireGolem'.par8) 0
|
||||
bone armor 2 1 3 2 4 skillname68 skillld68 skillld68 skillan68 36 StrSkill3 usmc 256 74 StrSkill40 (ln12 + (skill('Bone Wall'.blvl) + skill('Bone Prison'.blvl)) * par8) 40 Sksyn skillname68 2 76 Damabsplev skillname78 par8 76 Damabsplev skillname88 par8 0
|
||||
@@ -65,7 +65,7 @@ death sentry 1 6 1 1 16 Skillname277 Skillld277 Skillld277 Skillan277 5
|
||||
decrepify 1 5 3 1 42 skillname87 skillld87 skillld87 skillan87 36 StrSkill3 usmc 256 36 StrSkillDurationSingular StrSkill20 ln34 25 36 StrSkillRadiusSingular StrSkill18 ln12*2 3 74 StrSkill89 par5 74 StrSkill106 par5 74 StrSkill37 0 74 StrSkill38 par5 0
|
||||
defiance 3 2 2 3 16 7 skillname104 skillld104 skillld104 skillan104 36 StrSkillRadiusSingular StrSkill18 ln12*2 3 74 StrSkill21 ln34 0
|
||||
delerium change 0 0 0 0 2 Runeword22 Runeword22 Runeword22 Runeword22 0
|
||||
demonic mastery 1 1 1 1 0 DemonicMasteryName DemonicMasteryLongDesc DemonicMasteryLongDesc DemonicMasteryAN 74 StrSkill89 dm91 74 StrSkillDemonicMasteryDemonDamage ln21 74 StrSkill106 min(ln12.25) 74 StrSkillAttackRatingFlatBonus ln56 74 StrSkillDemonMaxCount ((lvl>=20)?3:((lvl>=10)?2:1)) 0
|
||||
demonic mastery 1 1 1 1 0 DemonicMasteryName DemonicMasteryLongDesc DemonicMasteryLongDesc DemonicMasteryAN 74 StrSkill89 dm91 74 StrSkillDemonicMasteryDemonDamage ln21 74 StrSkill106 "min(ln12, 25)" 74 StrSkillAttackRatingFlatBonus ln56 74 StrSkillDemonMaxCount ((blvl>=10)?3:((blvl>=5)?2:1)) 0
|
||||
dim vision 1 2 1 1 10 skillname71 skillld71 skillld71 skillan71 31 StrSkillDurationSingular StrSkill20 ln34 25 36 StrSkillRadiusSingular StrSkill18 ln12*2 3 36 StrSkill3 usmc 256 0
|
||||
dodge 2 2 2 2 14 skillname13 skillld13 skillld13 skillan13 74 StrSkill24 dm12 0
|
||||
dopplezon 2 5 1 2 44 skillname28 skillld28 skillld28 skillan28 36 StrSkill3 "max(usmc, 1)" 256 36 StrSkillDurationSingular StrSkill20 ln12 25 74 StrSkillLifePercent lvl*par4 0
|
||||
@@ -81,7 +81,7 @@ emotewheel 0 0 0 0 2 SkillNameEmoteWheel SkillDescEmoteWheel SkillDescEmoteWhee
|
||||
enchant 1 4 3 1 32 15 skillname52 skillld52 skillld52 skillan52 36 StrSkill3 usmc 256 36 StrSkillDurationSingular StrSkill20 ln12 25 75 StrSkill5 enma exma 74 StrSkill22 toht 40 Sksyn skillname52 2 76 Firedplev skillname37 par8 0
|
||||
energy shield 2 5 3 2 44 skillname58 skillld58 skillld58 skillan58 36 StrSkillDurationSingular StrSkill20 ln12 25 74 StrSkill41 "min(edmn,95)" 36 StrSkill3 usmc 256 74 StrSkillManaConsumedRatio (par5)*100/16-skill('Telekinesis'.blvl)*100/16 40 Sksyn skillname58 2 76 StrSkillManaConsumedSynergy skillname43 -6.25 0
|
||||
engorge 1 5 2 1 12 EngorgeName EngorgeLongDesc EngorgeLongDesc EngorgeAN 36 StrSkill3 usmc 256 36 StrSkillDurationSingular StrSkill20 ln56 25 74 EskillLifeSteal ln21 74 StrSkillHealPercentDemon ln34 75 StrSkill106 ast4 74 StrSkillPhysicalReductionDemon par7 74 StrSkillDemonicMasteryDemonAC ast5 74 ModStr2l ast6 40 Sksyn EngorgeName 2 76 SynDefenseFlatPerLevel BloodOathName skill('Blood Oath'.pa11) 76 SynHealthRegenPerLvl BloodOathName skill('Blood Oath'.pa12) 0
|
||||
enhanced entropy 3 5 3 3 54 EnhancedEntropyName EnhancedEntropyLongDesc EnhancedEntropyLongDesc EnhancedEntropyAN 5 36 ShadowMasteryAbyssRangeIncrease ShadowMasteryAbyssRangeIncrease lvl 5 36 ShadowMasteryMiasmaDurationIncrease ShadowMasteryMiasmaDurationIncrease "min(lvl*5,100)" 25 74 ShadowMasteryMiasmaRangeIncrease (lvl >= 10)?4:((lvl>=5)?3:2) 0
|
||||
enhanced entropy 3 5 3 3 54 EnhancedEntropyName EnhancedEntropyLongDesc EnhancedEntropyLongDesc EnhancedEntropyAN 5 36 ShadowMasteryAbyssRangeIncrease ShadowMasteryAbyssRangeIncrease "min(lvl,20)" 5 36 ShadowMasteryMiasmaDurationIncrease ShadowMasteryMiasmaDurationIncrease "min(lvl*5,100)" 25 74 ShadowMasteryMiasmaRangeIncrease (lvl >= 10)?4:((lvl>=5)?3:2) 0
|
||||
eruption 3 3 1 3 38 Skillname235 Skillld235 Skillld235 Skillan235 5 erruption center 75 StrSkill5 enma exma 36 StrSkill3 usmc 256 36 StrSkillCastingDelaySingular StrSkillCastingDelayPlural 50 25 36 StrSkillDurationSingular StrSkill20 miss('erruption center'.rang) 25 40 Sksyn Skillname235 2 76 Firedplev Skillname226 par8 76 Firedplev Skillname245 par8 0
|
||||
evade 2 5 2 2 46 skillname29 skillld29 skillld29 skillan29 74 StrSkill24 dm12 0
|
||||
exploding arrow 1 3 3 1 20 2 skillname16 skillxld16 skillxld16 skillan16 6 1 36 StrSkill3 usmc 256 75 StrSkill5 enma exma 74 StrSkill22 toht 40 Sksyn skillname16 2 76 Firedplev skillname7 par8 0
|
||||
@@ -164,8 +164,8 @@ mark of the wolf 0 0 0 0 2 SkillnameMetamorphosisWolf SkillnameMetamorphosisWol
|
||||
maul 2 3 3 2 56 Skillname234 Skillld234 Skillld234 Skillan234 1 2 36 StrSkillStunLengthSingular StrSkill48 "min(250,dm56)" 25 75 StrSkillDamagePercentRange par3 par3 * (lvl/par7+par8) 75 StrSkillAttackSpeedRange par1 par1 * (lvl/par7+par8) 74 StrSkill22 toht 36 StrSkillDurationSingular StrSkill20 par4 25 36 StrSkill3 usmc 256 0
|
||||
meditation 3 5 1 3 48 skillname120 skillld120 skillld120 skillan120 36 StrSkillRadiusSingular StrSkill18 ln12*2 3 74 StrSkill88 ln34 76 Healplev2 skillname99 skill('Prayer'.edmn) 40 Sksyn skillname120 2 18 skillname99 0
|
||||
meteor 1 5 2 1 40 skillname56 skillld56 skillld56 skillan56 5 meteorfire 36 StrSkill3 usmc 256 75 StrSkillFireDamageAveragePerSecond m1eo*25*3*(mael+100)/100/256 m1ey*25*3*(mael+100)/100/256 75 StrSkill5 enma exma 36 StrSkillCastingDelaySingular StrSkillCastingDelayPlural 30 25 36 StrSkillRadiusSingular StrSkill18 ln12*2 3 40 Sksyn skillname56 2 76 Firedplev skillname36 par8 76 Firedplev skillname47 par8 76 AFDImm skillname41 3 0
|
||||
miasma bolt 3 1 3 3 46 MiasmaBoltName MiasmaBoltLongDesc MiasmaBoltLongDesc MiasmaBoltAN 27 miasmaboltdot 36 StrSkill3 usmc 256 75 StrSkillMagicDamageAveragePerSecond m1nm m1xm 75 StrSkill39 enma exma 36 StrSkillDurationSingular StrSkill20 "miss('miasmaboltcloud'.par4) + min(((skill('Enhanced Entropy'.blvl) > 0) ? (skill('Enhanced Entropy'.lvl)*miss('miasmaboltcloud'.par5)) : 0),100)" 25 36 ShadowMasteryMiasmaRangeIncrease ShadowMasteryMiasmaRangeIncrease miss('miasmaboltcloud'.rad) 1 40 Sksyn MiasmaBoltName 2 76 Magdplev MiasmaChainName par8 76 AMDImm MiasmaChainName par9 76 Magdplev AbyssName par8 76 AMDImm AbyssName par9 0
|
||||
miasma chains 3 3 3 3 52 MiasmaChainName MiasmaChainLongDesc MiasmaChainLongDesc MiasmaChainAN 27 miasmachainscloud 36 StrSkill3 usmc 256 75 StrSkillMagicDamageAveragePerSecond m1nm m1xm 75 StrSkill39 enma exma 74 StrSkill11 clc1 36 StrSkillCastingDelaySingular StrSkillCastingDelayPlural 32 25 36 StrSkillDurationSingular StrSkill20 "miss('miasmachainscloud'.par2) + min(((skill('Enhanced Entropy'.blvl) > 0) ? (skill('Enhanced Entropy'.lvl)*miss('miasmachainscloud'.par3)) : 0),100)" 25 36 ShadowMasteryMiasmaRangeIncrease ShadowMasteryMiasmaRangeIncrease miss('miasmachainscloud'.rad) 1 40 Sksyn MiasmaChainName 2 76 Magdplev MiasmaBoltName par8 76 AMDImm MiasmaBoltName par9 76 Magdplev AbyssName par8 76 AMDImm AbyssName par9 0
|
||||
miasma bolt 3 1 3 3 46 MiasmaBoltName MiasmaBoltLongDesc MiasmaBoltLongDesc MiasmaBoltAN 27 miasmaboltcloud 36 StrSkill3 usmc 256 75 StrSkillMagicDamageAveragePerSecond m1nm m1xm 75 StrSkill39 enma exma 36 StrSkillDurationSingular StrSkill20 "miss('miasmaboltcloud'.par4) + min(((skill('Enhanced Entropy'.lvl) > 0) ? (skill('Enhanced Entropy'.lvl)*miss('miasmaboltcloud'.par5)) : 0),100)" 25 36 ShadowMasteryMiasmaRangeIncrease ShadowMasteryMiasmaRangeIncrease miss('miasmaboltcloud'.rad) 1 40 Sksyn MiasmaBoltName 2 76 Magdplev MiasmaChainName par8 76 AMDImm MiasmaChainName par9 76 Magdplev AbyssName par8 76 AMDImm AbyssName par9 0
|
||||
miasma chains 3 3 3 3 52 MiasmaChainName MiasmaChainLongDesc MiasmaChainLongDesc MiasmaChainAN 27 miasmachainscloud 36 StrSkill3 usmc 256 75 StrSkillMagicDamageAveragePerSecond m1nm m1xm 75 StrSkill39 enma exma 74 StrSkill11 clc1 36 StrSkillDurationSingular StrSkill20 "miss('miasmachainscloud'.par2) + min(((skill('Enhanced Entropy'.lvl) > 0) ? (skill('Enhanced Entropy'.lvl)*miss('miasmachainscloud'.par3)) : 0),100)" 25 36 ShadowMasteryMiasmaRangeIncrease ShadowMasteryMiasmaRangeIncrease miss('miasmachainscloud'.rad) 1 40 Sksyn MiasmaChainName 2 76 Magdplev MiasmaBoltName par8 76 AMDImm MiasmaBoltName par9 76 Magdplev AbyssName par8 76 AMDImm AbyssName par9 0
|
||||
might 2 1 1 2 4 11 skillname98 skillld98 skillld98 skillan98 36 StrSkillRadiusSingular StrSkill18 ln12*2 3 74 StrSkillDamagePercent ln34 0
|
||||
mind blast 2 5 3 2 34 Skillname274 Skillld274 Skillld274 Skillan274 5 74 StrSkill99 dm56 36 StrSkillStunLengthSingular StrSkill48 "min(250,edln)" 25 75 StrSkill4 pnma pxma 36 StrSkill3 usmc 256 75 StrSkillDurationRange par3/25 (par3+par4)/25 0
|
||||
mirrored blades 2 6 2 2 38 MirroredBladesName MirroredBladesLongDesc MirroredBladesLongDesc MirroredBladesAN 7 (clc5*100)*clc6/100 36 StrSkill3 usmc 256 74 StrSkill106 clc3 74 MirroredBladesDamagePercent clc6 74 StrSkillMirroredBladesDuplicates clc5-1 0
|
||||
@@ -215,7 +215,7 @@ shock wave 2 5 3 2 28 Skillname244 Skillld244 Skillld244 Skillan244 5
|
||||
shout 3 2 2 3 24 skillname138 skillld138 skillld138 skillan138 36 StrSkillDurationSingular StrSkill20 len 25 74 StrSkill21 ln12 36 StrSkillRadiusSingular StrSkill18 19*2 3 36 StrSkill3 usmc 256 40 Sksyn skillname138 2 76 Secplev2 skillname149 par8/25 76 Secplev2 skillname155 par8/25 0
|
||||
showitems 0 0 0 0 2 SkillNameShowItems SkillDescShowItems SkillDescShowItems SkillNameShowItems 0
|
||||
sigil death 3 5 2 3 48 DeathSigilName DeathSigilLongDesc DeathSigilLongDesc DeathSigilAN 36 StrSkill3 usmc 256 36 StrSkillDurationSingular StrSkill20 miss('sigildeathsmall'.rang) 25 74 StrSkill18 rng 3 74 StrSkillSlayEnemies par1 75 SigilDeathExplosionDamage skill('Sigil Death Explosion'.par1) skill('Sigil Death Explosion'.par2) 0
|
||||
sigil lethargy 3 2 2 3 40 LethargySigilName LethargySigilLongDesc LethargySigilLongDesc LethargySigilAN 36 StrSkill3 usmc 256 36 StrSkillDurationSingular StrSkill20 miss('sigillethargysmall'.rang) 25 74 StrSkill18 rng 3 74 StrSkill25 ln56 74 StrSkill37 ln34 74 StrSkill89 par7 74 StrSkill106 par7 0
|
||||
sigil lethargy 3 2 2 3 40 LethargySigilName LethargySigilLongDesc LethargySigilLongDesc LethargySigilAN 36 StrSkill3 usmc 256 36 StrSkillDurationSingular StrSkill20 miss('sigillethargysmall'.rang) 25 74 StrSkill18 rng 3 74 StrSkill25 ln56 74 StrSkill89 par7 74 StrSkill106 par7 0
|
||||
sigil rancor 3 3 2 3 44 RancorSigilName RancorSigilLongDesc RancorSigilLongDesc RancorSigilAN 36 StrSkill3 usmc 256 36 StrSkillDurationSingular StrSkill20 miss('sigilrancorsmall'.rang) 25 74 StrSkill18 rng 3 74 StrSkill106 ast2 74 StrSkillDamagePercent ast1 74 StrSkillConfuseChance clc1 0
|
||||
skeleton mastery 3 1 1 3 6 skillname69 skillld69 skillld69 skillan69 74 StrSkillSleketonMasteryMonsterDamage lvl*par4 74 StrSkill97 lvl*par3 74 StrSkill43 (lvl < 2) ? 0 : skill('Skeleton Mastery'.lvl) 74 StrSkill96 StrSkill42 lvl*par1 74 StrSkillSleketonMasterySkeletonDamage lvl*par2 74 StrSkill95 lvl*par1 0
|
||||
slow missiles 2 3 1 2 22 skillname17 skillld17 skillld17 skillan17 36 StrSkillDurationSingular StrSkill20 ln34 25 74 ModStr2uPercent dm78 74 StrSkill67 100-dm12 36 StrSkill3 usmc 256 36 StrSkillRadiusSingular StrSkill18 ln56*2 3 0
|
||||
|
||||
@@ -372,36 +372,36 @@ MonHolyShock 369 66 42883 holyshock ln12
|
||||
CubeLoot 370 cubeloot 0 none xx 1 0 0 1 0 0
|
||||
Mark of the Bear 371 mark of the bear 18 markbear 4500 attackrate par1 damageresist par2 0 none 1 1 1 1 2 bear 0 0 25 Attack Speed % 20 Damage Resist % 1 8 256 1000 0
|
||||
Mark of the Wolf 372 mark of the wolf 18 markwolf 4500 item_tohit_percent par1 item_maxhp_percent par2 0 none 1 1 1 1 2 wolf 0 0 30 Attack Rating % 40 Life % 1 8 256 1000 0
|
||||
Summon Goatman 373 war summon goatman 56 warlockdemonground domeleedamage 16 velocitypercent (skill('Demonic Mastery'.dm91)) tohit skill('Demonic Mastery'.ln56) + ln78 damagepercent (ln56 + (skill('Demonic Mastery'.ln21)) armorclass ln91 item_pierce_damage_immunity stat('item_pierce_damage_immunity'.accr) item_pierce_damage_immunity stat('item_pierce_damage_immunity'.accr) damageresist skill('Blood Oath'.dm91) item_normaldamage ln34 item_fasterattackrate "min(ln21, 25)+(skill('Demonic Mastery'.ln12))" item_crushingblow (skill('Death Mark'.blvl)*par2)+5 wargoatman demon (skill('Demonic Mastery'.lvl)>=20)?3:((skill('Demonic Mastery'.lvl)>=10)?2:1) S1 Goatman Stun (lvl < 2)?0:(lvl) Goatman Berserk (lvl <3)?0:(lvl) Goatman Frenzy (lvl < 4)?0:(lvl) Goatman Cleave (lvl <5)?0:(lvl) Warlock_Skill_Cast_Khazra_03 warlock_shadow_cast_2 1 5 none SC SC S1 4 1 20 15 0 1 1 7 30 1 1 1 ((par1 * (lvl - 1))+skill('Blood Oath'.ln56)) HP % Modifier 35 HP % per level 1 % Chance Crushing blow syn 1 Flat Damage baseline 2 Flat Damage per level 10 Damage % baseline 10 Damage % per level 140 Attack Rating Baseline 40 Attack Rating per level flat 100 Defense baseline 20 Defense per level 10 attack speed baseline 1 attack speed increase per level 1 8 256 1000 0
|
||||
Summon Goatman 373 war summon goatman 56 warlockdemonground domeleedamage 16 velocitypercent (skill('Demonic Mastery'.dm91)) tohit skill('Demonic Mastery'.ln56) + ln78 damagepercent (ln56 + (skill('Demonic Mastery'.ln21)) armorclass ln91 item_pierce_damage_immunity stat('item_pierce_damage_immunity'.accr) item_pierce_damage_immunity stat('item_pierce_damage_immunity'.accr) damageresist skill('Blood Oath'.dm91) item_normaldamage ln34 item_fasterattackrate "min(ln21, 25)+(min(skill('Demonic Mastery'.ln12),25))" item_crushingblow (skill('Death Mark'.blvl)*par2)+5 wargoatman demon (skill('Demonic Mastery'.blvl)>=10)?3:((skill('Demonic Mastery'.blvl)>=5)?2:1) S1 Goatman Stun (lvl < 2)?0:(lvl) Goatman Berserk (lvl <3)?0:(lvl) Goatman Frenzy (lvl < 4)?0:(lvl) Goatman Cleave (lvl <5)?0:(lvl) Warlock_Skill_Cast_Khazra_03 warlock_shadow_cast_2 1 5 none SC SC S1 4 1 20 15 0 1 1 7 30 1 1 1 ((par1 * (lvl - 1))+skill('Blood Oath'.ln56)) HP % Modifier 35 HP % per level 1 % Chance Crushing blow syn 1 Flat Damage baseline 2 Flat Damage per level 10 Damage % baseline 10 Damage % per level 140 Attack Rating Baseline 40 Attack Rating per level flat 100 Defense baseline 20 Defense per level 10 attack speed baseline 1 attack speed increase per level 1 8 256 1000 0
|
||||
Demonic Mastery 374 war demonic mastery demonic_mastery 1 0 none SC SC xx 1 20 Summon Goatman 0 0 0 8 0 0 1 1 5 attack speed baseline 1 attack speed increase per level 25 Attack Rating % baseline 25 Attack Rating % per level 5 move speed % baseline 39 movespeed % per level 10 Damage % baseline 10 Damage % per level 1 8 256 1000 0
|
||||
Death Mark 375 war death mark 155 death_mark ln34 par9 armorclass ln56 normal_damage_reduction ln12 magic_damage_reduction ln12 demon 1 warlock_death_mark_pet Warlock_Skill_Death_Mark_Cast_01 warlock_fire_cast_1 1 9 none SC SC S2 6 20 Summon Goatman 20 1 1 1 6 9 1 1 1 Clear some CC from pet 3 Max pet count -5 damage received increased baseline -2 damage received increased per level 125 debuff duration baseline 13 debuff duration per level -50 armor class decreased baseline -35 armor class decreased per level 2 Synergy Movespeed Per Level 38 teleport distance 1 8 384 3000 0
|
||||
Summon Tainted 376 war summon tainted 56 warlockdemonground velocitypercent (skill('Demonic Mastery'.dm91)) passive_fire_mastery (ln91 + (skill('Demonic Mastery'.ln21)) armorclass ln78 item_pierce_damage_immunity stat('item_pierce_damage_immunity'.accr) damageresist skill('Blood Oath'.dm91) item_pierce_fire_immunity stat('item_pierce_fire_immunity'.accr) item_fasterattackrate "min(ln21, 25)+(skill('Demonic Mastery'.ln12))" warbighead demon (skill('Demonic Mastery'.lvl)>=20)?3:((skill('Demonic Mastery'.lvl)>=10)?2:1) S1 Tainted Resist Fire "min(ln56,30)" Tainted Fire Ball lvl Warlock_Skill_Cast_Tainted_03 warlock_shadow_cast_2 1 6 none SC SC xx 4 12 20 Summon Goatman 15 0 1 1 7 50 1 1 1 ((par1 * (lvl - 1))+skill('Blood Oath'.ln56)) HP % Modifier 35 HP % per level 1 Resist Fire Level Base 1 Resist Fire level per level 75 Defense baseline 20 Defense per level Damage % baseline Damage % per level of demonic mastery 10 attack speed baseline 1 attack speed increase per level 1 8 512 8000 0
|
||||
Summon Defiler 377 war summon defiler 56 warlockdemonground velocitypercent (skill('Demonic Mastery'.dm91)) damagepercent par2*((lvl - 1) + (skill('Demonic Mastery'.blvl)) armorclass ln78 item_pierce_damage_immunity stat('item_pierce_damage_immunity'.accr) damageresist skill('Blood Oath'.dm91) item_pierce_damage_immunity stat('item_pierce_damage_immunity'.accr) item_fasterattackrate "min((skill('Demonic Mastery'.ln12)), 25)" warputriddefiler demon (skill('Demonic Mastery'.lvl)>=20)?3:((skill('Demonic Mastery'.lvl)>=10)?2:1) S3 Health Link lvl Summon Defiler lvl Warlock_Skill_Cast_Defiler_03 warlock_shadow_cast_2 1 6 none SC SC xx 4 18 20 Summon Tainted 15 0 1 1 7 70 1 1 1 ((par1 * (lvl - 1))+skill('Blood Oath'.ln56)) HP % Modifier 35 HP % per level 10 damage percent baseline 35 Defense per level 125 Defense baseline 20 Defense per level 1 8 640 16000 0
|
||||
Summon Tainted 376 war summon tainted 56 warlockdemonground velocitypercent (skill('Demonic Mastery'.dm91)) passive_fire_mastery (ln91 + (skill('Demonic Mastery'.ln21)) armorclass ln78 item_pierce_damage_immunity stat('item_pierce_damage_immunity'.accr) damageresist skill('Blood Oath'.dm91) item_pierce_fire_immunity stat('item_pierce_fire_immunity'.accr) item_fasterattackrate "min(ln21, 25)+(min(skill('Demonic Mastery'.ln12),25))" warbighead demon (skill('Demonic Mastery'.blvl)>=10)?3:((skill('Demonic Mastery'.blvl)>=5)?2:1) S1 Tainted Resist Fire "min(ln56,30)" Tainted Fire Ball lvl Blood Boil blvl Warlock_Skill_Cast_Tainted_03 warlock_shadow_cast_2 1 6 none SC SC xx 4 12 20 Summon Goatman 15 0 1 1 7 50 1 1 1 ((par1 * (lvl - 1))+skill('Blood Oath'.ln56)) HP % Modifier 35 HP % per level 1 Resist Fire Level Base 1 Resist Fire level per level 75 Defense baseline 20 Defense per level Damage % baseline Damage % per level of demonic mastery 10 attack speed baseline 1 attack speed increase per level 1 8 512 8000 0
|
||||
Summon Defiler 377 war summon defiler 56 warlockdemonground velocitypercent (skill('Demonic Mastery'.dm91)) damagepercent par2*((lvl - 1) + (skill('Demonic Mastery'.blvl)) armorclass ln78 item_pierce_damage_immunity stat('item_pierce_damage_immunity'.accr) damageresist skill('Blood Oath'.dm91) item_pierce_damage_immunity stat('item_pierce_damage_immunity'.accr) item_fasterattackrate "min((skill('Demonic Mastery'.ln12)), 25)" warputriddefiler demon (skill('Demonic Mastery'.blvl)>=10)?3:((skill('Demonic Mastery'.blvl)>=5)?2:1) S3 Health Link lvl Summon Defiler lvl Warlock_Skill_Cast_Defiler_03 warlock_shadow_cast_2 1 6 none SC SC xx 4 18 20 Summon Tainted 15 0 1 1 7 70 1 1 1 ((par1 * (lvl - 1))+skill('Blood Oath'.ln56)) HP % Modifier 35 HP % per level 10 damage percent baseline 35 Defense per level 125 Defense baseline 20 Defense per level 1 8 640 16000 0
|
||||
Blood Oath 378 war blood oath 66 absorbresisteddamage 35 bloodoath passive_summon_resist dm78 demon Warlock_Skill_Blood_Oath_03 1 0 none SC SC xx 1 6 20 Demonic Mastery 1 0 0 0 8 0 0 1 1 ln12 Damage to % Demon 3 Max pet count 5 Damage to % Demon baseline 2 Damage to % Demon per level 10 HP Mana Stamina % baseline 1 HP Mana Stamina % per level 50 HP baseline 35 HP % Per level 3 Resistance % Min 79 Resistance % Max 1 Physcial damage reduction baseline 12 Physical Damage Reduction cap 25 Synergy Defense per level with Demonic Mastery 5 Syn HP regen 1 8 384 3000 0
|
||||
Engorge 379 war engorge 17 161 engorgecast engorge ln56 1 damageresist par7 lifedrainmindam (skill('Engorge'.ln21)) lifedrainmaxdam (skill('Engorge'.ln21)) item_fasterattackrate "min(ln12, 35)" armorclass (skill('Blood Oath'.blvl)*skill('Blood Oath'.pa11)) hpregen (skill('Blood Oath'.pa12)*skill('Blood Oath'.blvl)) demon 1 1 Warlock_Skill_Engorge_03 warlock_shadow_cast_2 21 102 engorge engorgecorpseeffect 1 4 rng SC SC xx 1 1 1 24 20 Blood Boil 1 1 1 6 12 1 1 ln34 %Health healed to pet 15 Attack Speed Baseline 1 attack speed per level 30 HP % Healed Baseline 1 HP % Healed per level 125 baseline PDR duration 75 per level PDR duration 5 % damage reduction 15 life drain min syn 2 life drain max sin 1 8 768 32000 0
|
||||
Blood Boil 380 war blood boil 160 "min(ln34/3,11)" demon 1 Warlock_Skill_Blood_Boil_Cast_01 necromancer_corpseexp_1 warlock_fire_cast_1 105 bloodboilexplode 1 0 none SC SC xx 0 0 1 1 necromancer_corpse_cast 18 20 Death Mark 1 1 1 6 15 1 1 "max(ln12, 5)" % amount of pet health (1 demon) "max((ln12/2), 5)" % amount of pet health (2 demons) "max((ln12/3), 5)" % amount of pet health (3 demons) 3 Hit Delay 15 baseline for lifecost on demon pet -1 cap for life cost for demon pet 12 Explosion Radius (half squares) baseline 1 Radius cap (half squares) 20 Damage synergy 1 8 10 8 10 12 16 20 20 10 12 18 26 30 (skill('Engorge'.blvl))*par8 fire 10 8 10 12 16 20 20 10 12 18 26 30 (skill('Blood Oath'.blvl))*par8 640 16000 0
|
||||
Blood Boil 380 war blood boil 160 (lvl >= 10)?12:((lvl>=5)?9:6) demon 1 Warlock_Skill_Blood_Boil_Cast_01 necromancer_corpseexp_1 warlock_fire_cast_1 105 bloodboilexplode 1 0 none SC SC xx 0 0 1 1 necromancer_corpse_cast 18 20 Death Mark 1 1 1 6 15 1 1 "max(ln12, 5)" % amount of pet health (1 demon) "max((ln12/2), 5)" % amount of pet health (2 demons) "max((ln12/3), 5)" % amount of pet health (3 demons) 3 Hit Delay 15 baseline for lifecost on demon pet -1 cap for life cost for demon pet 20 Damage synergy 1 8 10 8 10 12 16 20 20 10 12 18 26 30 (skill('Engorge'.blvl))*par8 fire 10 8 10 12 16 20 20 10 12 18 26 30 (skill('Blood Oath'.blvl))*par8 640 16000 0
|
||||
Consume 381 war consume 69 159 consume ln12 item_maxhp_percent ln34 velocitypercent dm56 demon 1 Consume lvl 1 Warlock_Skill_Consume_03 warlock_shadow_cast_2 56 1 3 none SC SC xx 1 1 30 20 Blood Oath 0 1 1 8 25 1 1 1 1 25 1 100 % amount of pets health 1000 Duration baseline 500 Duration per level 5 Max health % Baseline 1 Max health % per level 10 Movement Speed Baseline 46 Movement speed per level 1 8 896 64000 0
|
||||
Bind Demon 382 war bind demon 30 158 binddemonchannelmaker bind_demon bind_demon_underling velocitypercent (skill('Demonic Mastery'.dm91)) tohit skill('Demonic Mastery'.ln56) + ln78 damagepercent (ln56 + (skill('Demonic Mastery'.ln21))) armorclass ln91 item_pierce_damage_immunity stat('item_pierce_damage_immunity'.accr) passive_summon_resist skill('Blood Oath'.dm78) item_pierce_damage_immunity stat('item_pierce_damage_immunity'.accr) damageresist skill('Blood Oath'.dm91) item_normaldamage ln34 item_fasterattackrate "min((skill('Demonic Mastery'.ln12)), 25)" binddemon 1 1 Warlock_Skill_Bind_Demon_03 warlock_shadow_cast_2 58 106 1 6 none SQ SQ xx 6 10 4 1 30 20 Engorge Summon Defiler 1 1 8 25 1 1 0 HP % Modifier (lvl >= 5)?5:0 Add certain affix based on skill lvl (5 is an index for a monster affix - Extra Strong) (lvl >= 10)?6:0 Add certain affix based on skill lvl (6 is an index for a monster affix - Extra Fast) (lvl >= 15)?27:0 Add certain affix based on skill lvl (27 is an index for a monster affix - Spectral Hit) (lvl >= 20)?30:0 Add certain affix based on skill lvl (30 is an index for a monster affix - Aura Enchanted) 2 "HP Regen Behavior (0=default, no hp regen for elites, 1=no hp regen, 2=hp regen for all)" 7 Growthrate/start for % capture referenced in monpet.txt 29 Cap for % capture referenced in monpet.txt 75 Baseline damage percent Increase 5 Damage per level increase 100 Synergy Chance to Bind w/ Death Mark referenced in monpet.txt 100 Baseline health percent Increase 5 Heatlh per level increase 15 Life% syn other demon skills 10 dmg % syn other demon skills 1 8 896 64000 0
|
||||
Bind Demon 382 war bind demon 30 158 binddemonchannelmaker bind_demon bind_demon_underling velocitypercent (skill('Demonic Mastery'.dm91)) tohit skill('Demonic Mastery'.ln56) + ln78 damagepercent (ln56 + (skill('Demonic Mastery'.ln21))) armorclass ln91 item_pierce_damage_immunity stat('item_pierce_damage_immunity'.accr) passive_summon_resist skill('Blood Oath'.dm78) item_pierce_damage_immunity stat('item_pierce_damage_immunity'.accr) damageresist skill('Blood Oath'.dm91) item_normaldamage ln34 item_fasterattackrate "min((skill('Demonic Mastery'.ln12)), 25)" binddemon 1 1 Warlock_Skill_Bind_Demon_03 warlock_shadow_cast_2 58 106 1 6 none SQ SQ xx 6 10 4 1 30 20 Engorge Summon Defiler 1 9 0 2 50 1 1 0 HP % Modifier (lvl >= 5)?5:0 Add certain affix based on skill lvl (5 is an index for a monster affix - Extra Strong) (lvl >= 10)?6:0 Add certain affix based on skill lvl (6 is an index for a monster affix - Extra Fast) (lvl >= 15)?27:0 Add certain affix based on skill lvl (27 is an index for a monster affix - Spectral Hit) (lvl >= 20)?30:0 Add certain affix based on skill lvl (30 is an index for a monster affix - Aura Enchanted) 2 "HP Regen Behavior (0=default, no hp regen for elites, 1=no hp regen, 2=hp regen for all)" 7 Growthrate/start for % capture referenced in monpet.txt 29 Cap for % capture referenced in monpet.txt 75 Baseline damage percent Increase 5 Damage per level increase 50 Synergy Chance to Bind w/ Death Mark referenced in monpet.txt 100 Baseline health percent Increase 5 Heatlh per level increase 15 Life% syn other demon skills 10 dmg % syn other demon skills 1 8 896 64000 0
|
||||
Levitate 383 war levitate levitate_mastery weap 1 passive_mastery_melee_crit dm12 passive_mastery_item_req_percent "-1*min(ln78,50)" passive_mastery_melee_th ln56 passive_mastery_melee_dmg ln34 1 0 none SC SC xx 1 1 20 0 0 0 8 0 0 1 1 0 Min % Chance 35 Max % Chance 25 Damage % baseline 4 Damage % per level 40 Attack Rating % baseline 5 Attack Rating % per level 2 Requirements -#% base 2 Requirements -#% per level 1 8 256 1000 0
|
||||
Eldritch Blast 384 war eldritchblast 28 165 eldritchblastnova surge_hex_explode eldritchblastperiodic hexbanedebuff par3 + skill('Psychic Ward'.blvl) * par4 5 Warlock_Skill_Eldritch_Blast_03 warlock_psychic_cast_1_no_hex 60 109 eldritchblastnova 1 Missile Velocity Adder 1 4 none SC SC SC 24 20 Psychic Ward 1 1 1 7 11 1 1 1 30 "min(ln12, 20)" lifesteal % "min(ln12, 20)" Manasteal % 5 baseline life/manasteal 1 per level life/manasteal 1000 Duration baseline 50 Synergy Duration per level (psychic ward) 50 Damage synergy 25 Duration Synergy 1 64 8 mag 2 3 6 9 15 17 6 3 6 9 15 17 (skill('Blade Warp'.blvl)+skill('Hex Purge'.blvl))*par8 768 32000 0
|
||||
Hex Bane 385 war hex bane 23 hexbane hexbanedebuff ln34 skill_armor_percent "min(ln56,50)*-1" item_tohit_percent -25 domeleeattack 36 domissiledamage 36 hextrigger 36 weap 1 magicmindam enma magicmaxdam exma item_tohit_percent toht Warlock_Skill_Hex_Bane_01 warlock_psychic_cast_2 1 4 none 1 weap h2h SC SC xx 1 20 0 1 1 7 12 1 1 1 150+(((skill('Eldritch Blast'.blvl)) *par9)) Debuff Duration 3600 Hex Duration baseline 300 Hex Duration per level 30 Defense % baseline 1 Defense % per level 50 Damage synergy 5 Duration Synergy 35 Hex Purge Damage synergy 1 20 9 7 mag 9 3 7 11 15 19 16 5 9 13 17 21 (skill('Consume'.blvl)*pa10)+(skill('Hex Purge'.blvl)*pa10)+(skill('Mirrored Blades'.blvl)*pa10) 256 1000 0
|
||||
Hex Siphon 386 war hex siphon 23 hexsiphon hexsiphondebuff ln34 damagepercent -33 domeleeattack 36 domissiledamage 36 hextrigger 36 weap 1 item_tohit_percent toht item_healafterkill ln12+(((skill('Engorge'.blvl)) *par9)) item_manaafterkill ln56+(((skill('Engorge'.blvl)) *par9)) Warlock_Skill_Hex_Siphon_03 warlock_psychic_cast_2 1 4 none 1 weap h2h SC SC xx 24 20 Hex Purge 0 1 1 7 25 1 1 1 150+(((skill('Eldritch Blast'.blvl)) *par8)) Debuff Duration 1 Life/Mana drain baseline 1 Life/Mana drain per level 3600 Hex Duration baseline 300 Hex Duration per level 1 Life/Mana drain baseline 1 Life/Mana drain per level 5 Debuff Duration synergy 1 life/mana steal synergy 1 Damage% synergy 33 damage % baseline 3 damage % steal per level 1 20 9 7 768 32000 0
|
||||
Psychic Ward 387 war psychic ward 18 psychicward psychicward (ln34 + (skill('Levitate'.blvl) + skill('Cleave'.blvl)) * par8)*256 psychicwardmax (ln34 + (skill('Levitate'.blvl) + skill('Cleave'.blvl)) * par8)*256 absorbdamage 40 damagedinmelee 37 Warlock_Skill_Psychic_Ward_Cast_03 Warlock_Skill_Psychic_Ward_03 psychicward_hit0 warlock_psychic_cast_1_no_hex 1 4 none SC SC xx 18 18 20 Cleave 0 1 1 8 20 2 1 1 dm12 Stun Length 37 Stun Length baseline 85 Stun Length per level 15 Damage absorbed baseline 10 Damage absorbed per level 15 Damage Absorbed synergy Duration Synergy 1 8 640 16000 0
|
||||
Echoing Strike 388 war echoing strike 166 echoingstrike Warlock_Skill_Soaring_Strike_Cast_03 warlock_psychic_cast_1 104 echoingstrike 1 0 rng 1 mele SC SC xx 1 12 20 Levitate 1 1 1 7 14 1 1 Damage % 0 Flat Damage (melee only) 0 Attack Speed % (unusable) % Damage Dealt as Elemental (Only in melee and if there is an Etype) (skill('Mirrored Blades'.blvl) > 0) ? (1+(skill('Mirrored Blades'.blvl)/5)) : 1 Amount of attacks (((100+(ln12+clc0))/clc5)/2) Damage % override applied to attacks after the first one (100% is baseline) (skill('Mirrored Blades'.blvl)+skill('Blade Warp'.blvl))*par8 synergy reference 30 baseline damage increase 5 per level damage increase 5 Damage synergy 5 Damage synergy 1 Mirrored Blade Projectile Count Synergy 1 Separate Skill Cast ID for Missiles 1 lvl*10 8 8 96 8 3 4 6 6 6 12 5 6 9 9 9 (skill('Mirrored Blades'.blvl)+skill('Blade Warp'.blvl))*par8 512 8000 0
|
||||
Echoing Strike 388 war echoing strike 166 echoingstrike Warlock_Skill_Soaring_Strike_Cast_03 warlock_psychic_cast_1 104 echoingstrike 1 0 rng 1 mele SC SC xx 1 1 12 20 Levitate 1 1 1 7 14 1 1 (ln12+clc0) Damage % 0 Flat Damage (melee only) 0 Attack Speed % (unusable) % Damage Dealt as Elemental (Only in melee and if there is an Etype) (skill('Mirrored Blades'.blvl) > 0) ? (1+(skill('Mirrored Blades'.blvl)/5)) : 1 Amount of attacks (100/clc5)/2 Total damage % applied to attacks after the first one (100% is baseline) melee divisor for Crushing blow on duplicates ranged divisor for Crushing blow on duplicates player divisor for Crushing blow on duplicates (skill('Mirrored Blades'.blvl)+skill('Blade Warp'.blvl))*par8 synergy reference 30 baseline damage increase 5 per level damage increase 3 Damage synergy 3 Damage synergy 1 Mirrored Blade Projectile Count Synergy 0 Should calc6 only apply to attacks after the first 1 Separate Skill Cast ID for Missiles 1 lvl*10 8 8 96 8 3 4 6 6 6 12 5 6 9 9 9 (skill('Mirrored Blades'.blvl)+skill('Blade Warp'.blvl))*par8 512 8000 0
|
||||
Hex Purge 389 war hex purge 23 hex_purge_explosion hexpurge hexpurgedebuff ln34 par7/100 domeleedamage 36 domissiledamage 36 hextrigger 36 weap 1 attackrate "min(30, ln56)" item_tohit_percent toht Warlock_Skill_Hex_Purge_03 warlock_psychic_cast_2 1 4 none 1 weap h2h SC SC xx 12 20 Hex Bane 0 1 1 8 25 1 1 1 150+(((skill('Eldritch Blast'.blvl)) *par2)) Debuff Duration (ln21+(skill('Sigil Death'.blvl) *pa10)) / 100 Chance to trigger explosion "min(1+(lvl/10),3)" Number of explosion charges (0 == infinite) 39 AuraEventFunc installed onto Target. 39 = sWarPurgeOnHitDebuff 5 Debuff Duration synergy 3600 Hex Duration baseline 300 Hex Duration per level 10 Attackspeed Baseline percent 1 attackspeed per level 400 Radius * 100 33 Radius per level * 100 10 Damage synergy 100 Chance to Explode Synergy 6900 Chance to Explode % Base * 100 50 1 20 9 32 8 mag 10 4 8 10 14 18 15 6 10 12 16 20 (skill('Hex Bane'.blvl)+skill('Eldritch Blast'.blvl) )*par9 512 8000 0
|
||||
Blade Warp 390 war blade warp 166 1 bladewarp par1 Warlock_Skill_Blade_Dance_Cast_03 warlock_psychic_cast_1 104 bladewarp 1 1 0 rng 1 mele SC SC SC 1 18 20 Echoing Strike 20 1 1 1 8 15 0 1 0 Damage % 0 Flat Damage (melee only) 0 Attack Speed % (unusable) 0 % Damage Dealt as Elemental (Only in melee and if there is an Etype) 1 Amount of attacks skill('Mirrored Blades'.clc6) Damage % override applied to attacks after the first one (100% is baseline) 4 Explosion Radius Explosion Radius logorithmic cap 1 Mirrored Blade Projectile Count Synergy 24 Damage synergy 0 Separate Skill Cast ID for Missiles 1 8 mag 8 3 5 8 8 8 10 3 5 8 8 8 (skill('Echoing Strike'.blvl)+skill('Mirrored Blades'.blvl))*par8 640 16000 0
|
||||
Blade Warp 390 war blade warp 166 1 bladewarp par1 Warlock_Skill_Blade_Dance_Cast_03 warlock_psychic_cast_1 104 bladewarp 1 1 0 rng 1 mele SC SC SC 1 18 20 Echoing Strike 20 1 1 1 8 15 0 1 0 Damage % 0 Flat Damage (melee only) 0 Attack Speed % (unusable) 0 % Damage Dealt as Elemental (Only in melee and if there is an Etype) 1 Amount of attacks skill('Mirrored Blades'.clc6) Total damage % applied to attacks after the first one (100% is baseline) melee divisor for Crushing blow on duplicates ranged divisor for Crushing blow on duplicates player divisor for Crushing blow on duplicates 4 Explosion Radius Explosion Radius logorithmic cap 1 Mirrored Blade Projectile Count Synergy 24 Damage synergy 0 Should calc6 only apply to attacks after the first 0 Separate Skill Cast ID for Missiles 1 8 mag 8 3 5 8 8 8 10 3 5 8 8 8 (skill('Echoing Strike'.blvl)+skill('Mirrored Blades'.blvl))*par8 640 16000 0
|
||||
Cleave 391 war cleave 68 164 41347 Warlock_Skill_Cleave_04 warlock_psychic_cast_1 59 103 1 3 h2h 1 mele SQ SQ xx 24 1 1 1 1 6 20 Levitate 1 1 1 8 3 0 ln12+((skill('Mirrored Blades'.blvl)+skill('Hex Purge'.blvl)+skill('Eldritch Blast'.blvl))*par9) Damage % 0 Flat Damage dm34 Attack Speed % (from srvstfunc 68 BarDoDoubleSwing) 0 % Damage Dealt as Elemental (Only if there is an Etype) (lvl >= 20) ? 20 : lvl +10 Amount of slices in the circle that can be attacked 30 Total amount of slices in the circle 0 Range Bonus 20 Damage % base 5 Damage % per level 10 Attack Speed % Min 30 Attack Speed % Max 10 Damage synergy 12 Mirrored Blades Synergy for degrees arc increased 1 50 7 8 128 384 3000 0
|
||||
Mirrored Blades 392 war mirrored blades 68 166 Warlock_Skill_Blades_06 57 104 clc3 Attack Speed % 4 Max amount of visual mirrors (Requires bones to be set up on the rig) 1 4 both 1 weap tpot SQ SQ xx 25 1 1 1 1 1 1 30 20 Blade Warp Eldritch Blast 1 1 1 7 10 1 1 0 Damage % 0 Flat Damage (melee only) dm34 Attack Speed % (from srvstfunc 68 BarDoDoubleSwing) 0 % Damage Dealt as Elemental (Only in melee and if there is an Etype) "min((2 + (lvl / 5)), 5)" Amount of attacks dm12 Damage % override applied to attacks after the first one (100% is baseline) (lvl>15)?20:((lvl>10)?16:((lvl>5)?12:8)) melee divisor for Crushing blow on duplicates (lvl>15)?40:((lvl>10)?32:((lvl>5)?24:16)) ranged divisor for Crushing blow on duplicates (lvl>15)?50:((lvl>10)?40:((lvl>5)?30:20)) player divisor for Crushing blow on duplicates 50 Damage % Override Starting 120 Damage % Override Per level 10 Attack Speed % Min 30 Attack Speed % Max 0 Separate Skill Cast ID for Missiles 1 100 15 8 128 (skill('Blade Warp'.blvl)+skill('Echoing Strike'.blvl))*par8 896 64000 0
|
||||
Sigil Lethargy 393 war sigil lethargy 157 (lvl >= 20)?3:((lvl>=10)?2:1) sigillethargysmall sigillethargymedium sigillethargylarge 2 sigil sigillethargy 12 (lvl >= 20)?8:((lvl>=10)?6:4) damageresist -ln34 item_armor_percent ln56 velocitypercent ln78 attackrate ln78 Warlock_Skill_Seal_Lethargy_Cast_01 warlock_shadow_cast_1 101 sigillethargysmall sigillethargymedium sigillethargylarge 1 0 none SC SC SC 4 1 1 1 necromancer_curse_cast 6 20 1 1 1 8 4 0 1 1 1 Missile Limit 7 Radius 0 Radius per level 20 Damage Resistance % 1 Damage Resistance % per level -33 Damage Dealt % -1 Damage Dealt % per level -50 Slow % 0 Slow % per level 1 8 384 3000 0
|
||||
Ring of Fire 394 war ring of fire 154 ringoffire ringoffire ringoffire Warlock_Skill_Ring_Of_Fire_Cast_03 warlock_fire_cast_1 99 ringoffire 0 Missile Velocity Adder 1 7 none SC SC xx 154 99 sorceress_cast_fire 6 20 1 1 1 7 16 1 1 0 Missile Velocity Adder ((lvl>=10)?32:16) # missiles 5 number of missiles 10 Damage synergy 1 8 fire 6 6 8 10 11 12 12 7 9 12 14 18 (skill('Flame Wave'.blvl)+skill('Apocalypse'.blvl))*par8 384 3000 0
|
||||
Miasma Bolt 395 war miasma bolt miasmabolt Warlock_Skill_Miasma_Bolt_03 warlock_shadow_cast_1 miasmabolt 1 7 none SC SC xx 1 1 Warlock_Skill_Miasma_Bolt_03 cast_undead 1 20 1 1 1 7 4 1 1 10 Damage synergy 20 Damage synergy 1 8 mag 1 1 2 3 3 4 3 2 3 3 4 4 (skill('Miasma Chains'.blvl)+skill('Abyss'.blvl))*par8 256 1000 0
|
||||
Mirrored Blades 392 war mirrored blades 68 166 Warlock_Skill_Blades_06 57 104 clc3 Attack Speed % 4 Max amount of visual mirrors (Requires bones to be set up on the rig) 1 4 both 1 weap tpot SQ SQ xx 25 1 1 1 1 1 1 30 20 Blade Warp Eldritch Blast 1 1 1 7 10 1 1 0 Damage % 0 Flat Damage (melee only) dm34 Attack Speed % (from srvstfunc 68 BarDoDoubleSwing) 0 % Damage Dealt as Elemental (Only in melee and if there is an Etype) "min((2 + (lvl / 5)), 5)" Amount of attacks dm12 Total damage % applied to attacks after the first one (100% is baseline) (lvl>15)?20:((lvl>10)?16:((lvl>5)?12:8)) melee divisor for Crushing blow on duplicates (lvl>15)?40:((lvl>10)?32:((lvl>5)?24:16)) ranged divisor for Crushing blow on duplicates (lvl>15)?50:((lvl>10)?40:((lvl>5)?30:20)) player divisor for Crushing blow on duplicates 50 Damage % Override Starting 120 Damage % Override Per level 10 Attack Speed % Min 30 Attack Speed % Max 1 Should calc6 only apply to attacks after the first 0 Separate Skill Cast ID for Missiles 1 100 15 8 128 (skill('Blade Warp'.blvl)+skill('Echoing Strike'.blvl))*par8 896 64000 0
|
||||
Sigil Lethargy 393 war sigil lethargy 157 (lvl >= 20)?3:((lvl>=10)?2:1) sigillethargysmall sigillethargymedium sigillethargylarge 3 sigil sigillethargy 12 (lvl >= 20)?8:((lvl>=10)?6:4) item_armor_percent ln56 velocitypercent ln78 attackrate ln78 Warlock_Skill_Seal_Lethargy_Cast_01 warlock_shadow_cast_1 101 sigillethargysmall sigillethargymedium sigillethargylarge 1 0 none SC SC SC 4 1 1 1 necromancer_curse_cast 6 20 1 1 1 8 4 0 1 1 1 Missile Limit 7 Radius 0 Radius per level 20 Damage Resistance % 1 Damage Resistance % per level -33 Damage Dealt % -1 Damage Dealt % per level -50 Slow % 0 Slow % per level 1 8 384 3000 0
|
||||
Ring of Fire 394 war ring of fire 154 ringoffire ringoffire ringoffire Warlock_Skill_Ring_Of_Fire_Cast_03 warlock_fire_cast_1 99 ringoffire 0 Missile Velocity Adder 1 7 none SC SC xx 154 99 sorceress_cast_fire 6 20 1 1 1 7 16 1 1 "if sHitParam in the Server Missile is 0, then use calc1 to dictate the radius of the explosion." ((lvl>=10)?32:16) # missiles 0 Missile Velocity Adder 5 number of missiles 10 Damage synergy 1 8 fire 6 6 8 10 11 12 10 7 9 11 13 15 (skill('Flame Wave'.blvl)+skill('Apocalypse'.blvl))*par8 384 3000 0
|
||||
Miasma Bolt 395 war miasma bolt miasmabolt Warlock_Skill_Miasma_Bolt_03 warlock_shadow_cast_1 miasmabolt 1 7 none SC SC xx 1 1 Warlock_Skill_Miasma_Bolt_03 cast_undead 1 20 1 1 1 7 4 1 1 10 Damage synergy 20 Damage synergy 1 7 mag 2 2 2 3 3 4 4 2 2 4 4 6 (skill('Miasma Chains'.blvl)+skill('Abyss'.blvl))*par8 256 1000 0
|
||||
Sigil Rancor 396 war sigil rancor 157 (lvl >= 20)?3:((lvl>=10)?2:1) sigilrancorsmall sigilrancormedium sigilrancorlarge 2 sigil sigilrancor 12 (lvl >= 20)?8:((lvl>=10)?6:4) damagepercent ln34 attackrate ln56 Warlock_Skill_Seal_Rancor_Cast_03 warlock_fire_cast_1 101 sigilrancorsmall sigilrancormedium sigilrancorlarge 1 0 none SC SC SC 4 1 1 1 necromancer_curse_cast 12 20 Sigil Lethargy 1 1 1 8 12 0 1 1 75 Chance to confuse ai 1 Missile Limit 7 Radius 0 Radius per level 50 Damage Dealt % 5 Damage Dealt % per level 5 Attack Speed % Baseline 1 Attack Speed % per level 1 8 512 8000 0
|
||||
Enhanced Entropy 397 war enhanced entropy shadow_mastery 1 0 none SC SC xx 24 20 Miasma Chains 0 0 0 8 0 0 1 1 2 Baseline Miasma damage Percent increase 2 per level Miasma damage Percent increase 5 Baseline Miasma range Percent increase 1 per level Miasma range Percent increase 2 Baseline Miasma duration Percent increase 2 per level Miasma duration Percent increase 2 Baseline abyss damage Percent increase 3 per level abyss damage Percent increase 2 Baseline abyss duration Percent increase 2 per level abyss duration Percent increase 1 8 640 16000 0
|
||||
Flame Wave 398 war flame wave 156 flamewaveunveiling Warlock_Skill_Flame_Wave_Cast_01 warlock_fire_cast_1 100 flamewaveunveiling 1 6 none SC SC SC 1 156 100 sorceress_cast_fire warlock_fire_cast_1 18 20 Ring of Fire 15 1 1 1 7 14 1 1 dm12 # of half of flamewave missiles for width par3 delay for flamewave travel 4 Width baseline for flamewave 7 Max length for flamewave 17 flame wave delay 15 Damage synergy 10 Damage synergy 1 8 fire 15 9 14 20 21 25 20 11 16 21 23 27 (skill('Ring of Fire'.blvl)+skill('Apocalypse'.blvl))*par8 640 16000 0
|
||||
Miasma Chains 399 war miasma chains 167 miasmachainsmaker 125 Warlock_Skill_Miasma_Chain_Cast_03 warlock_shadow_cast_1 1 2 none SC SC SC 12 1 1 167 Warlock_Skill_Miasma_Chain_Cast_03 12 20 Miasma Bolt 32 1 1 1 7 9 1 1 dm34 number of misasma bolts spawned 3 baseline number of miasmabolts 12 cap for number of miasma bolts made 10 Damage synergy 20 Damage synergy 1 8 mag 6 2 3 3 4 4 9 2 3 3 4 4 (skill('Miasma Bolt'.blvl)+skill('Abyss'.blvl))*par8 512 8000 0
|
||||
Flame Wave 398 war flame wave 156 flamewaveunveiling Warlock_Skill_Flame_Wave_Cast_01 warlock_fire_cast_1 100 flamewaveunveiling 1 6 none SC SC SC 1 156 100 sorceress_cast_fire warlock_fire_cast_1 18 20 Ring of Fire 15 1 1 1 7 14 1 1 dm12 # of half of flamewave missiles for width par3 delay for flamewave travel 4 Width baseline for flamewave 7 Max length for flamewave 17 flame wave delay 15 Damage synergy 10 Damage synergy 1 8 fire 13 8 12 17 18 21 17 9 14 18 20 23 (skill('Ring of Fire'.blvl)+skill('Apocalypse'.blvl))*par8 640 16000 0
|
||||
Miasma Chains 399 war miasma chains 167 miasmachainsmaker 125 Warlock_Skill_Miasma_Chain_Cast_03 warlock_shadow_cast_1 1 2 none SC SC SC 12 1 1 167 Warlock_Skill_Miasma_Chain_Cast_03 12 20 Miasma Bolt 1 1 1 7 9 1 1 dm34 number of misasma bolts spawned 3 baseline number of miasmabolts 12 cap for number of miasma bolts made 10 Damage synergy 20 Damage synergy 1 8 mag 6 2 3 3 4 4 9 2 3 3 4 4 (skill('Miasma Bolt'.blvl)+skill('Abyss'.blvl))*par8 512 8000 0
|
||||
Sigil Death 400 war sigil death 157 (lvl >= 20)?3:((lvl>=10)?2:1) sigildeathsmall sigildeathmedium sigildeathlarge 278530 sigil sigildeath 12 (lvl >= 20)?8:((lvl>=10)?6:4) 100 0 1 1 damagedinmelee 34 damagedbymissile 34 killed 33 install 34 Sigil Death Explosion skill('Sigil Death'.lvl) Warlock_Skill_Seal_Death_Cast_03 warlock_shadow_cast_1 101 sigildeathsmall sigildeathmedium sigildeathlarge 1 0 none SC SC S2 4 1 1 necromancer_curse_cast 24 20 Sigil Rancor 1 1 1 7 20 1 1 1 ln12 % HP to kill normal monsters ln34 "% HP to kill champion, unique, and superunique monsters" 1 Missile Limit 13 HP % to kill normal monsters 0 HP % to kill normal monsters per level 10 "% HP to kill champion, unique, and superunique monsters" 0 "% HP to kill champion, unique, and superunique monsters per level" 7 Radius 0 Radius per level 1 8 768 32000 0
|
||||
Apocalypse 401 war apocalypse 123 apocalypse apocalypse 34691 apocalypse (lvl >= 20)?17:((lvl>=10)?15:13) fireresist "-min(ln12,40)" Warlock_Skill_Apocalypse_Cast_03 warlock_fire_cast_1 91 apocalypse 1 6 none SC SC xx 4 1 Warlock_Skill_Apocalypse_Cast_03 30 20 Flame Wave Sigil Death 45 1 1 1 8 32 1 1 5 baseline fire pierce 1 fire immunity pierce per level 10 Damage synergy 1 8 fire 80 23 46 69 75 95 100 25 50 75 95 115 (skill('Ring of Fire'.blvl)+skill('Flame Wave'.blvl))*par8 896 64000 0
|
||||
Abyss 402 war abyss 14 28 abysscenter Warlock_Skill_Abyss_03_hd warlock_shadow_cast_1 28 abysscenter 1 7 none SC SC xx 4 1 1 1 Warlock_Skill_Abyss_03_hd fire_cast_2 30 20 Enhanced Entropy 30 1 1 1 8 23 1 1 ln12 Explosion Radius 6 Explosion Radius baseline 0 Explosion Radius per level 2 Duration of ground fire baseline 0 Duration of ground fire per level 10 Damage synergy 20 Damage synergy 1 8 mag 20 3 6 9 12 15 40 4 8 12 16 20 (skill('Miasma Bolt'.blvl)+skill('Miasma Chains'.blvl))*(skill('Abyss'.par8)) 896 64000 0
|
||||
Abyss 402 war abyss 14 28 abysscenter Warlock_Skill_Abyss_03_hd warlock_shadow_cast_1 17 28 abysscenter 1 7 none SC SC xx 4 1 1 1 Warlock_Skill_Abyss_03_hd fire_cast_2 30 20 Enhanced Entropy 30 1 1 1 1 8 23 1 1 ln12 Explosion Radius 6 Explosion Radius baseline 0 Explosion Radius per level 2 Duration of ground fire baseline 0 Duration of ground fire per level 10 Damage synergy 20 Damage synergy 1 8 mag 20 3 6 9 12 15 40 4 8 12 16 20 (skill('Miasma Bolt'.blvl)+skill('Miasma Chains'.blvl))*(skill('Abyss'.par8)) 896 64000 0
|
||||
Sigil Death Explosion 403 153 ln34 necromancer_corpseexp_1 death_sentry 98 corpseexplosion explodingarrowexp redlightmissile 1 0 none SQ SQ xx 1 1 1 0 0 1 par1 Damage % of base HP for enemy Min par2 Damage % of base HP for enemy Max par5 % Damage Dealt as Elemental 70 Damage % of base HP for enemy Min 120 Damage % of base HP for enemy Max 8 Radius (half squares) 0 Radius per level (half squares) 50 Damage % Dealt as Elemental 1 32 8 fire 0 0
|
||||
Hex Purge Explosion 404 1 0
|
||||
Health Link 405 70 162 33027 healthlinkcaster healthlink 500 25 absorbdamage 38 necromancer_curse_cast warlock_shadow_cast_1 1 0 none SC SC S1 1 0 1 1 ((110 * (skill('Summon Defiler'.lvl))) * (par2 - par1)) / (100 * ((skill('Summon Defiler'.lvl))+ 6)) + par1 Damage % Linked ((110 *skill('Summon Defiler'.lvl) * (par4 - par3)) / (100 * (skill('Summon Defiler'.lvl) + 6)) + par3 Max number of affected units "min(5,(lvl+1))" Number of affected units per cast 20 baseline damage shared between targets 60 damage shared between targets per level 2 baseline number of links 6 max number of links 1 8 2 0
|
||||
@@ -409,7 +409,7 @@ Cold Fissure 406 eruption 28 coldfissure center
|
||||
Korlic's Leap Attack 407 leap attack 41 170 leapattack bash 1 barbarian_leapattack_1 30 44 leapattack 1 6 none mele SQ A1 xx 14 1 4 1 1 18 20 Leap 1 1 1 8 10 0 1 ln34+skill('Leap'.blvl)*par8 Damage % par7 Leap Speed % 0 % Damage Dealt as Elemental (stat('ua_escalation'.accr) > 0) ? 406 : 0 Skill ID to cast when leap ends 5 Level of cast skill ID 200 Damage % baseline 30 Damage % per level 12 Minimum Airborn Frames 175 Leap Speed % 10 Damage synergy 1 100 20 8 128 10 4 8 12 16 20 20 8 16 24 32 40 skill('Leap'.blvl)*par8 640 16000 0
|
||||
Cold Enchant 408 enchant 25 coldenchant ln12 coldmindam enma coldmaxdam exma item_tohit_percent toht barbarian_shout_1 1 4 none SC SC xx 1 1 1 1 barbarian_shout_1 18 20 0 1 0 3600 Buff Duration baseline 600 Buff Duration per level 33 % Damage for Ranged Weapons 9 Damage synergy 1 20 9 7 cold 16 3 7 11 15 19 20 5 9 13 17 21 1 640 16000 0
|
||||
Lightning Enchant 409 enchant 25 lightningenchant ln12 lightmindam enma lightmaxdam exma item_tohit_percent toht barbarian_shout_2 1 4 none SC SC xx 1 1 1 1 barbarian_shout_2 18 20 0 1 0 3600 Buff Duration baseline 600 Buff Duration per level 33 % Damage for Ranged Weapons 9 Damage synergy 1 20 9 7 ltng 16 3 7 11 15 19 20 5 9 13 17 21 1 640 16000 0
|
||||
Talic's Whirlwind 410 whirlwind 38 168 1 whirlwind 1 barbarian_whirlwind 31 45 1 1 3 none 2 mele SQ A1 xx 10 1 1 1 30 20 1 1 -1*(ln12) Damage % 1 Escalation 1 Skill Level (stat('ua_escalation'.accr) > 0) ? 100 : 0 Chance to Cast Escalation 1 Skill 1 Escalation 2 Skill Level (stat('ua_escalation'.accr) == 2) ? 100 : 0 Chance To Cast Escalation 2 Skill (stat('ua_escalation'.accr) > 0) ? 412 : 0 Escalation 1 Skill Id (stat('ua_escalation'.accr) == 2) ? 413 : 0 Escalation 2 Skill Id 60 Damage % baseline 5 Damage % per level 1 50 5 8 128 896 64000 0
|
||||
Talic's Whirlwind 410 whirlwind 38 168 1 whirlwind 1 barbarian_whirlwind 31 45 1 1 3 none 2 mele SQ A1 xx 10 1 1 1 30 20 1 1 ln12 Damage % 20 Escalation 1 Skill Level (stat('ua_escalation'.accr) > 0) ? 100 : 0 Chance to Cast Escalation 1 Skill 30 Escalation 2 Skill Level (stat('ua_escalation'.accr) == 2) ? 100 : 0 Chance To Cast Escalation 2 Skill (stat('ua_escalation'.accr) > 0) ? 412 : 0 Escalation 1 Skill Id (stat('ua_escalation'.accr) == 2) ? 413 : 0 Escalation 2 Skill Id -95 Damage % baseline 5 Damage % per level 1 50 5 8 128 896 64000 0
|
||||
Townportal O Skill 411 otownportal 109 0 none SC SC xx 1 1 0 1 1 8 0 0
|
||||
Fire Twisters 412 twister 118 firetwister druid_windcast 68 firetwister 1 0 none SC SC xx 1 1 1 18 20 Cyclone Armor 1 1 1 8 7 0 1 par1 # of Missiles created par2+par7*skill('Arctic Blast'.blvl) Stun Length (Used by Missile pSrvDmgFunc function) 3 # of Missiles created 10 Stun Length 2 Duration Synergy 10 Damage synergy 1 7 fire 12 7 11 15 18 21 16 7 11 15 18 21 640 16000 0
|
||||
Colossal Volcano 413 volcano 123 volcano par1 druid_firecast_a druid_fire_cast_2 97 91 volcano volcano overlay fire 1 0 none SC SC xx 1 4 1 1 1 sorceress_cast_fire druid_fire_cast_2 24 20 Eruption 100 0 1 1 8 25 0 1 par2 Delay between Missiles created 12 Missile Range 2 Delay between Missiles created 16 Physical Damage synergy 12 Fire Damage synergy 1 8 8 2 4 6 8 10 10 2 4 6 8 10 skill('Molten Boulder'.blvl)*par7 fire 8 2 4 6 8 11 10 2 4 6 8 13 (skill('Eruption'.blvl)+skill('Armageddon'.blvl))*par8 768 32000 0
|
||||
|
||||
@@ -426,15 +426,15 @@ Protector's Frost 422 100 1 110 75 cjw jewel 3 5000 invgswe Gethit
|
||||
Defender's Fire 423 100 1 110 75 cjw jewel 3 5000 invgswe Gethit-skill 46 1 25 extra-fire 5 10 dmg-fire 20 60 pierce-fire 5 10 addxp 3 5 mag% 15 35 gold% 25 50 0
|
||||
Protector's Stone 424 100 1 110 75 cjw jewel 3 5000 invgswe Gethit-skill 267 1 15 dmg% 30 50 dmg-norm 10 30 pierce-dmg 5 10 addxp 3 5 mag% 15 35 gold% 25 50 0
|
||||
Guardian's Light 425 100 1 110 75 cjw jewel 3 5000 invgswe Gethit-skill 387 1 25 extra-mag 5 10 dmg-mag 15 35 pierce-mag 5 10 addxp 3 5 mag% 15 35 gold% 25 50 0
|
||||
PreCrafted Cold Rupture 426 100 1 "cond('MonsterTestElite', herald)" 2 69 75 cm3 charm 3 5000 lblu lblu pierce-immunity-cold 300 300 res-cold -90 -90 0
|
||||
Crafted Cold Rupture 427 100 1 1 69 75 cs2 charm 1004 3 5000 lblu lblu pierce-immunity-cold 300 300 res-cold -90 -70 Gelid-Affix1 1 1 Gelid-Affix2 1 1 Gelid-Affix3 1 1 Gelid-Affix4 1 1 Gelid-Affix5 1 1 Gelid-Affix6 1 1 0
|
||||
PreCrafted Flame Rift 428 100 1 "cond('MonsterTestElite', herald)" 2 69 75 cm3 charm 3 5000 lred lred pierce-immunity-fire 300 300 res-fire -90 -90 0
|
||||
PreCrafted Crack of the Heavens 429 100 1 "cond('MonsterTestElite', herald)" 2 69 75 cm3 charm 3 5000 lyel lyel pierce-immunity-light 300 300 res-ltng -90 -90 0
|
||||
PreCrafted Rotting Fissure 430 100 1 "cond('MonsterTestElite', herald)" 2 69 75 cm3 charm 3 5000 lgrn lgrn pierce-immunity-poison 300 300 res-pois -90 -90 0
|
||||
PreCrafted Bone Break 431 100 1 "cond('MonsterTestElite', herald)" 2 69 75 cm3 charm 3 5000 whit whit pierce-immunity-damage 300 300 red-dmg% -20 -20 0
|
||||
PreCrafted Black Cleft 432 100 1 "cond('MonsterTestElite', herald)" 2 69 75 cm3 charm 3 5000 lgry lgry pierce-immunity-magic 300 300 res-mag -65 -65 0
|
||||
Crafted Flame Rift 433 100 1 1 69 75 cs2 charm 1004 3 5000 lred lred pierce-immunity-fire 300 300 res-fire -90 -70 Incendiary-Affix1 1 1 Incendiary-Affix2 1 1 Incendiary-Affix3 1 1 Incendiary-Affix4 1 1 Incendiary-Affix6 1 1 0
|
||||
Crafted Crack of the Heavens 434 100 1 1 69 75 cs2 charm 1004 3 5000 lyel lyel pierce-immunity-light 300 300 res-ltng -90 -70 Magnetic-Affix1 1 1 Magnetic-Affix2 1 1 Magnetic-Affix3 1 1 Magnetic-Affix4 1 1 Magnetic-Affix6 1 1 0
|
||||
Crafted Rotting Fissure 435 100 1 1 69 75 cs2 charm 1004 3 5000 lgrn lgrn pierce-immunity-poison 300 300 res-pois -90 -70 Virulent-Affix1 1 1 Virulent-Affix2 1 1 Virulent-Affix3 1 1 Virulent-Affix4 1 1 Virulent-Affix6 1 1 0
|
||||
Crafted Bone Break 436 100 1 1 69 75 cs2 charm 1004 3 5000 whit whit pierce-immunity-damage 300 300 red-dmg% -20 -10 Breaching-Affix1 1 1 Breaching-Affix2 1 1 Breaching-Affix3 1 1 Breaching-Affix4 1 1 Breaching-Affix6 1 1 0
|
||||
Crafted Black Cleft 437 100 1 1 69 75 cs2 charm 1004 3 5000 lgry lgry pierce-immunity-magic 300 300 res-mag -65 -45 Mystical-Affix1 1 1 Mystical-Affix2 1 1 Mystical-Affix3 1 1 Mystical-Affix4 1 1 Mystical-Affix6 1 1 0
|
||||
PreCrafted Cold Rupture 426 100 1 1 69 75 cm3 charm 3 5000 lblu lblu pierce-immunity-cold 300 300 res-cold -90 -70 0
|
||||
Crafted Cold Rupture 427 100 1 1 69 75 cs2 charm 1004 3 5000 lblu lblu pierce-immunity-cold 300 300 res-cold -70 -70 Gelid-Affix1 1 1 Gelid-Affix2 1 1 Gelid-Affix3 1 1 Gelid-Affix4 1 1 Gelid-Affix5 1 1 Gelid-Affix6 1 1 0
|
||||
PreCrafted Flame Rift 428 100 1 1 69 75 cm3 charm 3 5000 lred lred pierce-immunity-fire 300 300 res-fire -90 -70 0
|
||||
PreCrafted Crack of the Heavens 429 100 1 1 69 75 cm3 charm 3 5000 lyel lyel pierce-immunity-light 300 300 res-ltng -90 -70 0
|
||||
PreCrafted Rotting Fissure 430 100 1 1 69 75 cm3 charm 3 5000 lgrn lgrn pierce-immunity-poison 300 300 res-pois -90 -70 0
|
||||
PreCrafted Bone Break 431 100 1 1 69 75 cm3 charm 3 5000 whit whit pierce-immunity-damage 300 300 red-dmg% -20 -10 0
|
||||
PreCrafted Black Cleft 432 100 1 1 69 75 cm3 charm 3 5000 lgry lgry pierce-immunity-magic 300 300 res-mag -65 -45 0
|
||||
Crafted Flame Rift 433 100 1 1 69 75 cs2 charm 1004 3 5000 lred lred pierce-immunity-fire 300 300 res-fire -70 -70 Incendiary-Affix1 1 1 Incendiary-Affix2 1 1 Incendiary-Affix3 1 1 Incendiary-Affix4 1 1 Incendiary-Affix6 1 1 0
|
||||
Crafted Crack of the Heavens 434 100 1 1 69 75 cs2 charm 1004 3 5000 lyel lyel pierce-immunity-light 300 300 res-ltng -70 -70 Magnetic-Affix1 1 1 Magnetic-Affix2 1 1 Magnetic-Affix3 1 1 Magnetic-Affix4 1 1 Magnetic-Affix6 1 1 0
|
||||
Crafted Rotting Fissure 435 100 1 1 69 75 cs2 charm 1004 3 5000 lgrn lgrn pierce-immunity-poison 300 300 res-pois -70 -70 Virulent-Affix1 1 1 Virulent-Affix2 1 1 Virulent-Affix3 1 1 Virulent-Affix4 1 1 Virulent-Affix6 1 1 0
|
||||
Crafted Bone Break 436 100 1 1 69 75 cs2 charm 1004 3 5000 whit whit pierce-immunity-damage 300 300 red-dmg% -10 -10 Breaching-Affix1 1 1 Breaching-Affix2 1 1 Breaching-Affix3 1 1 Breaching-Affix4 1 1 Breaching-Affix6 1 1 0
|
||||
Crafted Black Cleft 437 100 1 1 69 75 cs2 charm 1004 3 5000 lgry lgry pierce-immunity-magic 300 300 res-mag -45 -45 Mystical-Affix1 1 1 Mystical-Affix2 1 1 Mystical-Affix3 1 1 Mystical-Affix4 1 1 Mystical-Affix6 1 1 0
|
||||
|
||||
@@ -38,10 +38,10 @@ Giant Sword swor gis gsd gis 0 4 1 0 xxx 3 16 1 1 9 28 2 100 56 34 50
|
||||
Bastard Sword swor bsw clm bsw 0 4 1 0 xxx 7 19 1 1 20 28 1 10 100 62 40 24 0 0 1971 61804 bsw 9b9 7b7 1hs 2hs 5 2hss 1 4 flpbsw invbsw invbswu invbswu 1 4 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 1 1 1 1 20 255 255 255 255 255 1 1 1 20 255 1 1 1 20 255 255 1 2 0 xxx xxx 1 0
|
||||
Flamberge swor flb clm flb 0 4 1 0 xxx 9 15 1 1 13 26 2 -10 100 70 49 50 27 0 0 2400 80800 flb 9fb 7fb 1hs 2hs 5 2hss 2 4 flpflb invflb 1 5 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 1 1 1 20 255 255 255 255 255 1 1 1 2 20 255 1 1 2 20 255 255 1 2 0 xxx xxx 1 0
|
||||
Great Sword swor gsd gsd gsd 0 4 1 0 xxx 12 20 1 1 25 42 2 10 100 100 60 50 33 0 0 3451 132883 gsd 9gd 7gd 1hs 2hs 5 2hss 2 4 flpgsd invgsd invgsdu invgsdu 1 6 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 1 1 1 3 20 255 1 1 2 20 255 255 1 2 0 xxx xxx 1 0
|
||||
Dagger knif dgr dgr dgr 0 2 1 0 xxx 1 4 -20 75 75 16 3 0 0 60 4180 dgr 9dg 7dg 1ht 1ht 5 1ht 1 2 flpdgr invdgr 1 1 0 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 1 1 1 1 20 255 255 1 1 1 1 20 255 255 255 255 255 255 255 255 255 255 255 1 2 0 kri bld 1 0
|
||||
Dirk knif dir dir dir 0 2 1 0 xxx 3 9 75 75 25 20 9 0 0 532 11788 dir 9di 7di 1ht 1ht 5 1ht 1 2 flpdir invdir 1 1 0 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 1 1 1 1 20 255 255 255 255 255 1 1 1 1 1 255 255 255 255 255 1 2 0 kri bld 1 0
|
||||
Kriss knif kri dir kri 0 2 1 0 xxx 2 11 -20 75 75 45 24 17 0 0 1227 31859 kri 9kr 7kr 1ht 1ht 5 1ht 1 3 flpkrs invkrs invkrsu invkrsu 1 3 0 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 1 1 1 20 255 255 255 255 1 1 20 255 255 1 1 20 1 2 0 xxx xxx 1 0
|
||||
Blade knif bld dgr bld 0 3 1 0 xxx 4 15 -10 75 75 35 51 24 23 0 0 1764 54572 bld 9bl 7bl 1ht 1ht 5 1ht 1 3 flpbld invbld 1 3 0 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 1 1 1 1 20 255 255 255 255 1 1 1 1 20 255 255 1 1 1 1 20 1 2 0 xxx xxx 1 0
|
||||
Dagger knif dgr dgr dgr 0 2 1 0 xxx 1 4 -20 75 75 16 3 0 0 60 4180 dgr 9dg 7dg 1ht 1ht 5 1ht 1 2 flpdgr invdgr 1 1 0 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 3 5 3 5 1 255 255 3 5 3 5 1 255 255 255 255 255 255 255 255 255 255 255 1 2 0 kri bld 1 0
|
||||
Dirk knif dir dir dir 0 2 1 0 xxx 3 9 75 75 25 20 9 0 0 532 11788 dir 9di 7di 1ht 1ht 5 1ht 1 2 flpdir invdir 1 1 0 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 2 3 1 2 1 255 255 4 5 4 5 1 255 255 255 255 255 255 255 255 255 255 255 1 2 0 kri bld 1 0
|
||||
Kriss knif kri dir kri 0 2 1 0 xxx 2 11 -20 75 75 45 24 17 0 0 1227 31859 kri 9kr 7kr 1ht 1ht 5 1ht 1 3 flpkrs invkrs invkrsu invkrsu 1 3 0 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 3 5 3 5 1 255 255 255 255 3 5 20 255 255 3 5 20 1 2 0 xxx xxx 1 0
|
||||
Blade knif bld dgr bld 0 3 1 0 xxx 4 15 -10 75 75 35 51 24 23 0 0 1764 54572 bld 9bl 7bl 1ht 1ht 5 1ht 1 3 flpbld invbld 1 3 0 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 3 3 3 3 1 255 255 255 255 5 5 5 5 20 255 255 5 5 5 5 20 1 2 0 xxx xxx 1 0
|
||||
Throwing Knife tkni tkf dgr tkf 0 2 1 0 xxx 2 3 4 9 75 75 21 4 2 0 0 6 3512 tkf 9tk 7tk 1ht 1ht 5 1ht 1 2 1 60 240 120 flptkn invtkn 0 primarily thrown 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 36 7 4 0 3 1 2 255 1 2 20 255 255 255 255 20 255 255 2 2 1 255 255 255 255 255 255 1 1 20 1 2 0 bkf bkf 1 0
|
||||
Throwing Axe taxe tax hax tax 0 2 1 0 xxx 4 7 8 12 10 75 75 40 6 7 0 0 11 6077 tax 9ta 7ta 1hs 1hs 5 1hsl 1 2 1 24 200 48 flptax invtax 0 primarily thrown 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 35 7 5 0 3 1 1 255 1 2 20 255 1 1 20 255 255 20 255 255 2 2 1 255 255 255 255 255 255 1 1 20 2 2 0 bal bal 1 0
|
||||
Balanced Knife tkni bkf dgr bkf 0 2 1 0 xxx 1 8 6 11 -20 75 75 51 8 13 0 0 15 9195 bkf 9bk 7bk 1ht 1ht 5 1ht 1 2 1 45 240 90 flpbkf invbkf 0 primarily thrown 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 36 7 4 0 3 255 255 255 1 1 1 1 20 255 255 20 255 255 255 1 2 1 2 3 1 1 2 1 2 20 255 255 255 1 1 20 1 2 0 xxx xxx 1 0
|
||||
|
||||
3
opencmd.bat
Normal file
3
opencmd.bat
Normal file
@@ -0,0 +1,3 @@
|
||||
@echo off
|
||||
go run ./cmd/txttocode
|
||||
pause
|
||||
@@ -30,14 +30,16 @@ func (b Belt) GetFirstPotion(potionType PotionType) (Position, bool) {
|
||||
|
||||
func (b Belt) Rows() int {
|
||||
switch b.Name {
|
||||
case "":
|
||||
return 1
|
||||
case "Sash", "LightBelt":
|
||||
return 2
|
||||
case "Belt", "HeavyBelt":
|
||||
return 3
|
||||
default:
|
||||
case "PlatedBelt",
|
||||
"DemonhideSash", "SharkskinBelt", "MeshBelt", "BattleBelt", "WarBelt",
|
||||
"SpiderwebSash", "VampirefangBelt", "MithrilCoil", "TrollBelt", "ColossusGirdle":
|
||||
return 4
|
||||
default:
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@ type Data struct {
|
||||
Corpse Corpse
|
||||
Monsters Monsters
|
||||
Corpses Monsters
|
||||
Mercenary OwnMercenary
|
||||
Game OnlineGame
|
||||
PlayerUnit PlayerUnit
|
||||
NPCs NPCs
|
||||
@@ -100,19 +101,9 @@ func (r Room) IsInside(p Position) bool {
|
||||
}
|
||||
|
||||
func (d Data) MercHPPercent() int {
|
||||
for _, m := range d.Monsters {
|
||||
if m.IsMerc() {
|
||||
// Hacky thing to read merc life properly
|
||||
maxLife := m.Stats[stat.MaxLife] >> 8
|
||||
life := float64(m.Stats[stat.Life] >> 8)
|
||||
if m.Stats[stat.Life] <= 32768 {
|
||||
life = float64(m.Stats[stat.Life]) / 32768.0 * float64(maxLife)
|
||||
if d.Mercenary.Found {
|
||||
return d.Mercenary.HPPercent
|
||||
}
|
||||
|
||||
return int(life / float64(maxLife) * 100)
|
||||
}
|
||||
}
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ const (
|
||||
RunewordChaos RunewordName = "Chaos"
|
||||
RunewordCrescentMoon RunewordName = "Crescent Moon"
|
||||
RunewordDeath RunewordName = "Death"
|
||||
RunewordDelerium RunewordName = "Delerium"
|
||||
RunewordDelirium RunewordName = "Delirium"
|
||||
RunewordDestruction RunewordName = "Destruction"
|
||||
RunewordDoom RunewordName = "Doom"
|
||||
RunewordDragon RunewordName = "Dragon"
|
||||
@@ -91,6 +91,8 @@ const (
|
||||
RunewordWrath RunewordName = "Wrath"
|
||||
RunewordZephyr RunewordName = "Zephyr"
|
||||
RunewordHustle RunewordName = "Hustle"
|
||||
RunewordMania RunewordName = "Mania"
|
||||
RunewordHysteria RunewordName = "Hysteria"
|
||||
RunewordMosaic RunewordName = "Mosaic"
|
||||
RunewordMetamorphosis RunewordName = "Metamorphosis"
|
||||
RunewordGround RunewordName = "Ground"
|
||||
@@ -118,7 +120,7 @@ var RunewordIDMap = map[int16]RunewordName{
|
||||
20522: RunewordChaos,
|
||||
20523: RunewordCrescentMoon,
|
||||
20526: RunewordDeath,
|
||||
20528: RunewordDelerium,
|
||||
20528: RunewordDelirium,
|
||||
20531: RunewordDestruction,
|
||||
20532: RunewordDoom,
|
||||
20533: RunewordDragon,
|
||||
|
||||
@@ -13,3 +13,15 @@ type Type struct {
|
||||
func (t Type) IsType(typeName string) bool {
|
||||
return t.Code == typeName
|
||||
}
|
||||
|
||||
func (itmType Type) IsCharmOrTorch() bool {
|
||||
if itmType.IsType(TypeCharm) ||
|
||||
itmType.IsType(TypeSmallCharm) ||
|
||||
itmType.IsType(TypeMediumCharm) ||
|
||||
itmType.IsType(TypeLargeCharm) ||
|
||||
itmType.IsType(TypeCraftedSunderCharm) ||
|
||||
itmType.IsType(TypeTorch) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -847,13 +847,13 @@ var UniqueItems = map[UniqueName]UniqueItemInfo{
|
||||
DefendersFire: {Name: "Defender's Fire", Code: "cjw", LevelReq: 75, Rarity: 1, ID: 423},
|
||||
ProtectorsStone: {Name: "Protector's Stone", Code: "cjw", LevelReq: 75, Rarity: 1, ID: 424},
|
||||
GuardiansLight: {Name: "Guardian's Light", Code: "cjw", LevelReq: 75, Rarity: 1, ID: 425},
|
||||
PreCraftedColdRupture: {Name: "PreCrafted Cold Rupture", Code: "cm3", LevelReq: 75, Rarity: 2, ID: 426},
|
||||
PreCraftedColdRupture: {Name: "PreCrafted Cold Rupture", Code: "cm3", LevelReq: 75, Rarity: 1, ID: 426},
|
||||
CraftedColdRupture: {Name: "Crafted Cold Rupture", Code: "cs2", LevelReq: 75, Rarity: 1, ID: 427},
|
||||
PreCraftedFlameRift: {Name: "PreCrafted Flame Rift", Code: "cm3", LevelReq: 75, Rarity: 2, ID: 428},
|
||||
PreCraftedCrackoftheHeavens: {Name: "PreCrafted Crack of the Heavens", Code: "cm3", LevelReq: 75, Rarity: 2, ID: 429},
|
||||
PreCraftedRottingFissure: {Name: "PreCrafted Rotting Fissure", Code: "cm3", LevelReq: 75, Rarity: 2, ID: 430},
|
||||
PreCraftedBoneBreak: {Name: "PreCrafted Bone Break", Code: "cm3", LevelReq: 75, Rarity: 2, ID: 431},
|
||||
PreCraftedBlackCleft: {Name: "PreCrafted Black Cleft", Code: "cm3", LevelReq: 75, Rarity: 2, ID: 432},
|
||||
PreCraftedFlameRift: {Name: "PreCrafted Flame Rift", Code: "cm3", LevelReq: 75, Rarity: 1, ID: 428},
|
||||
PreCraftedCrackoftheHeavens: {Name: "PreCrafted Crack of the Heavens", Code: "cm3", LevelReq: 75, Rarity: 1, ID: 429},
|
||||
PreCraftedRottingFissure: {Name: "PreCrafted Rotting Fissure", Code: "cm3", LevelReq: 75, Rarity: 1, ID: 430},
|
||||
PreCraftedBoneBreak: {Name: "PreCrafted Bone Break", Code: "cm3", LevelReq: 75, Rarity: 1, ID: 431},
|
||||
PreCraftedBlackCleft: {Name: "PreCrafted Black Cleft", Code: "cm3", LevelReq: 75, Rarity: 1, ID: 432},
|
||||
CraftedFlameRift: {Name: "Crafted Flame Rift", Code: "cs2", LevelReq: 75, Rarity: 1, ID: 433},
|
||||
CraftedCrackoftheHeavens: {Name: "Crafted Crack of the Heavens", Code: "cs2", LevelReq: 75, Rarity: 1, ID: 434},
|
||||
CraftedRottingFissure: {Name: "Crafted Rotting Fissure", Code: "cs2", LevelReq: 75, Rarity: 1, ID: 435},
|
||||
|
||||
@@ -13,11 +13,22 @@ type Inventory struct {
|
||||
Gold int
|
||||
StashedGold [6]int // [0]=personal, [1..5]=shared stash pages
|
||||
SharedStashPages int // Number of shared stash units detected (3=non-DLC, 5+=DLC)
|
||||
PlayerID UnitID // Number of shared stash units detected (3=non-DLC, 5+=DLC)
|
||||
}
|
||||
|
||||
func (i Inventory) isMatchOwner(it Item) bool {
|
||||
if it.Location.LocationType == item.LocationUnknown ||
|
||||
it.Location.LocationType == item.LocationGround ||
|
||||
it.Location.LocationType == item.LocationMercenary || it.Location.LocationType == item.LocationVendor {
|
||||
return true
|
||||
}
|
||||
|
||||
return it.Owner == i.PlayerID
|
||||
}
|
||||
|
||||
func (i Inventory) Find(name item.Name, locations ...item.LocationType) (Item, bool) {
|
||||
for _, it := range i.AllItems {
|
||||
if strings.EqualFold(string(it.Name), string(name)) {
|
||||
if strings.EqualFold(string(it.Name), string(name)) && i.isMatchOwner(it) {
|
||||
// If no locations are specified, return the first item found
|
||||
if len(locations) == 0 {
|
||||
return it, true
|
||||
@@ -34,9 +45,27 @@ func (i Inventory) Find(name item.Name, locations ...item.LocationType) (Item, b
|
||||
return Item{}, false
|
||||
}
|
||||
|
||||
func (i Inventory) FindByType(t string, locations ...item.LocationType) (Item, bool) {
|
||||
for _, it := range i.AllItems {
|
||||
if it.Type().IsType(t) && i.isMatchOwner(it) {
|
||||
if len(locations) == 0 {
|
||||
return it, true
|
||||
}
|
||||
|
||||
for _, l := range locations {
|
||||
if it.Location.LocationType == l {
|
||||
return it, true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Item{}, false
|
||||
}
|
||||
|
||||
func (i Inventory) FindByID(unitID UnitID) (Item, bool) {
|
||||
for _, it := range i.AllItems {
|
||||
if it.UnitID == unitID {
|
||||
if it.UnitID == unitID && i.isMatchOwner(it) {
|
||||
return it, true
|
||||
}
|
||||
}
|
||||
@@ -49,7 +78,7 @@ func (i Inventory) ByLocation(locations ...item.LocationType) []Item {
|
||||
|
||||
for _, it := range i.AllItems {
|
||||
for _, l := range locations {
|
||||
if it.Location.LocationType == l {
|
||||
if it.Location.LocationType == l && i.isMatchOwner(it) {
|
||||
items = append(items, it)
|
||||
}
|
||||
}
|
||||
@@ -87,6 +116,7 @@ type ItemAffixes struct {
|
||||
type Item struct {
|
||||
ID int
|
||||
UnitID
|
||||
Owner UnitID
|
||||
Name item.Name
|
||||
Quality item.Quality
|
||||
IdentifiedName string
|
||||
@@ -121,6 +151,14 @@ type Drop struct {
|
||||
DropLocation string
|
||||
}
|
||||
|
||||
func (i Item) GetItemName() item.Name {
|
||||
if i.IsRuneword {
|
||||
return item.Name(string(i.RunewordName) + " " + string(i.Name))
|
||||
}
|
||||
|
||||
return item.Name(string(i.IdentifiedName) + " " + string(i.Name))
|
||||
}
|
||||
|
||||
func (i Item) Desc() item.Description {
|
||||
return item.Desc[i.ID]
|
||||
}
|
||||
|
||||
@@ -9,6 +9,21 @@ import (
|
||||
"github.com/hectorgimenez/d2go/pkg/data/superunique"
|
||||
)
|
||||
|
||||
type OwnMercenary struct {
|
||||
Found bool
|
||||
ClassID npc.ID
|
||||
UnitID UnitID
|
||||
OwnerUnitID UnitID
|
||||
OwnerName string
|
||||
Position Position
|
||||
Mode mode.NpcMode
|
||||
IsCorpse bool
|
||||
HPPercent int
|
||||
Level int
|
||||
Strength int
|
||||
Dexterity int
|
||||
}
|
||||
|
||||
type NPC struct {
|
||||
ID npc.ID
|
||||
Name string
|
||||
@@ -162,7 +177,9 @@ func (m Monster) IsMerc() bool {
|
||||
|
||||
func (m Monster) IsPet() bool {
|
||||
// Necromancer revive.
|
||||
if m.States.HasState(state.Revive) || m.States.HasState(state.BindDemon) || m.States.HasState(state.BindDemonUnderling) {
|
||||
if m.States.HasState(state.Revive) ||
|
||||
m.States.HasState(state.BindDemon) ||
|
||||
m.States.HasState(state.BindDemonUnderling) {
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -171,7 +188,8 @@ func (m Monster) IsPet() bool {
|
||||
npc.OakSage, npc.DruBear, npc.DruPlaguePoppy, npc.VineCreature,
|
||||
npc.DruCycleOfLife, npc.ClayGolem, npc.BloodGolem, npc.IronGolem,
|
||||
npc.FireGolem, npc.NecroSkeleton, npc.NecroMage, npc.Valkyrie, npc.Decoy,
|
||||
npc.ShadowWarrior, npc.ShadowMaster, npc.Tainted3, npc.WarGoatman, npc.WarDefiler:
|
||||
npc.ShadowWarrior, npc.ShadowMaster,
|
||||
npc.WarDefiler, npc.WarGoatman, npc.Tainted, npc.Tainted2, npc.Tainted3:
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
@@ -94,7 +94,13 @@ func (o Object) IsPortal() bool {
|
||||
}
|
||||
|
||||
func (o Object) IsRedPortal() bool {
|
||||
return o.Name == object.PermanentTownPortal
|
||||
return o.Name == object.PermanentTownPortal ||
|
||||
o.Name == object.DurielsLairPortal ||
|
||||
o.Name == object.BaalsPortal ||
|
||||
o.Name == object.ArcaneSanctuaryPortal ||
|
||||
o.Name == object.LastLastPortal ||
|
||||
o.Name == object.HellGate ||
|
||||
o.Name == object.SiegeHellGate
|
||||
}
|
||||
|
||||
func (o Object) IsChest() bool {
|
||||
|
||||
@@ -28,6 +28,17 @@ func (i Stats) FindStat(id ID, layer int) (Data, bool) {
|
||||
|
||||
return Data{}, false
|
||||
}
|
||||
|
||||
func (i Stats) FindStatIndex(id ID, layer int) (int, bool) {
|
||||
for idx, s := range i {
|
||||
if s.ID == id && s.Layer == layer {
|
||||
return idx, true
|
||||
}
|
||||
}
|
||||
|
||||
return 0, false
|
||||
}
|
||||
|
||||
func (s ID) String() string {
|
||||
return StringStats[s]
|
||||
}
|
||||
|
||||
@@ -245,4 +245,5 @@ const (
|
||||
BindDemonUnderling State = 227
|
||||
Herald State = 228
|
||||
Apocalypse State = 229
|
||||
Missilelimit State = 230
|
||||
)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
package memory
|
||||
|
||||
const (
|
||||
tzOffline = 0x29B3208
|
||||
tzOffline = 0x25B2300
|
||||
)
|
||||
|
||||
279
pkg/memory/direct_syscall.go
Normal file
279
pkg/memory/direct_syscall.go
Normal file
@@ -0,0 +1,279 @@
|
||||
package memory
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"errors"
|
||||
"fmt"
|
||||
"sync"
|
||||
"syscall"
|
||||
"unsafe"
|
||||
|
||||
"golang.org/x/sys/windows"
|
||||
)
|
||||
|
||||
type objectAttributes struct {
|
||||
Length uint32
|
||||
RootDirectory windows.Handle
|
||||
ObjectName uintptr
|
||||
Attributes uint32
|
||||
SecurityDescriptor uintptr
|
||||
SecurityQualityOfService uintptr
|
||||
}
|
||||
|
||||
type clientID struct {
|
||||
UniqueProcess uintptr
|
||||
UniqueThread uintptr
|
||||
}
|
||||
|
||||
var (
|
||||
dsInitOnce sync.Once
|
||||
dsInitErr error
|
||||
|
||||
ntOpenProcessStub uintptr
|
||||
ntReadVMStub uintptr
|
||||
ntWriteVMStub uintptr
|
||||
ntCloseStub uintptr
|
||||
ntAllocVMStub uintptr
|
||||
ntProtectVMStub uintptr
|
||||
ntFreeVMStub uintptr
|
||||
)
|
||||
|
||||
func initDirectSyscalls() {
|
||||
var err error
|
||||
ntOpenProcessStub, err = buildNtStub("NtOpenProcess")
|
||||
if err != nil {
|
||||
dsInitErr = err
|
||||
return
|
||||
}
|
||||
ntReadVMStub, err = buildNtStub("NtReadVirtualMemory")
|
||||
if err != nil {
|
||||
dsInitErr = err
|
||||
return
|
||||
}
|
||||
ntWriteVMStub, err = buildNtStub("NtWriteVirtualMemory")
|
||||
if err != nil {
|
||||
dsInitErr = err
|
||||
return
|
||||
}
|
||||
ntCloseStub, err = buildNtStub("NtClose")
|
||||
if err != nil {
|
||||
dsInitErr = err
|
||||
return
|
||||
}
|
||||
ntAllocVMStub, err = buildNtStub("NtAllocateVirtualMemory")
|
||||
if err != nil {
|
||||
dsInitErr = err
|
||||
return
|
||||
}
|
||||
ntProtectVMStub, err = buildNtStub("NtProtectVirtualMemory")
|
||||
if err != nil {
|
||||
dsInitErr = err
|
||||
return
|
||||
}
|
||||
ntFreeVMStub, err = buildNtStub("NtFreeVirtualMemory")
|
||||
if err != nil {
|
||||
dsInitErr = err
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func ensureDirectSyscalls() error {
|
||||
dsInitOnce.Do(initDirectSyscalls)
|
||||
return dsInitErr
|
||||
}
|
||||
|
||||
func buildNtStub(name string) (uintptr, error) {
|
||||
ntdll := windows.NewLazySystemDLL("ntdll.dll")
|
||||
proc := ntdll.NewProc(name)
|
||||
if err := ntdll.Load(); err != nil {
|
||||
return 0, fmt.Errorf("load ntdll.dll: %w", err)
|
||||
}
|
||||
|
||||
addr := proc.Addr()
|
||||
if addr == 0 {
|
||||
return 0, fmt.Errorf("%s address is zero", name)
|
||||
}
|
||||
sysID, err := extractSysID(addr)
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("extract %s sysid: %w", name, err)
|
||||
}
|
||||
return makeSyscallStub(sysID)
|
||||
}
|
||||
|
||||
func extractSysID(procAddr uintptr) (uint32, error) {
|
||||
b := unsafe.Slice((*byte)(unsafe.Pointer(procAddr)), 64)
|
||||
if len(b) < 11 {
|
||||
return 0, errors.New("short Nt stub")
|
||||
}
|
||||
if b[0] != 0x4C || b[1] != 0x8B || b[2] != 0xD1 || b[3] != 0xB8 {
|
||||
return 0, errors.New("unexpected Nt stub prefix")
|
||||
}
|
||||
found := false
|
||||
for i := 0; i+2 < len(b); i++ {
|
||||
if b[i] == 0x0F && b[i+1] == 0x05 && b[i+2] == 0xC3 {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
return 0, errors.New("syscall;ret not found")
|
||||
}
|
||||
return binary.LittleEndian.Uint32(b[4:8]), nil
|
||||
}
|
||||
|
||||
func makeSyscallStub(sysID uint32) (uintptr, error) {
|
||||
code := []byte{0x4C, 0x8B, 0xD1, 0xB8, 0, 0, 0, 0, 0x0F, 0x05, 0xC3}
|
||||
binary.LittleEndian.PutUint32(code[4:8], sysID)
|
||||
mem, err := windows.VirtualAlloc(0, uintptr(len(code)), windows.MEM_COMMIT|windows.MEM_RESERVE, windows.PAGE_EXECUTE_READWRITE)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
copy(unsafe.Slice((*byte)(unsafe.Pointer(mem)), len(code)), code)
|
||||
return mem, nil
|
||||
}
|
||||
|
||||
func ntStatusErr(op string, status uintptr) error {
|
||||
return fmt.Errorf("%s failed: NTSTATUS=0x%08X", op, uint32(status))
|
||||
}
|
||||
|
||||
func ntOpenProcess(pid uint32, access uint32) (windows.Handle, error) {
|
||||
if err := ensureDirectSyscalls(); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
var h windows.Handle
|
||||
oa := objectAttributes{Length: uint32(unsafe.Sizeof(objectAttributes{}))}
|
||||
cid := clientID{UniqueProcess: uintptr(pid)}
|
||||
status, _, _ := syscall.SyscallN(
|
||||
ntOpenProcessStub,
|
||||
uintptr(unsafe.Pointer(&h)),
|
||||
uintptr(access),
|
||||
uintptr(unsafe.Pointer(&oa)),
|
||||
uintptr(unsafe.Pointer(&cid)),
|
||||
)
|
||||
if status != 0 {
|
||||
return 0, ntStatusErr("NtOpenProcess", status)
|
||||
}
|
||||
return h, nil
|
||||
}
|
||||
|
||||
func ntReadProcessMemory(handle windows.Handle, address uintptr, out []byte) error {
|
||||
if len(out) == 0 {
|
||||
return nil
|
||||
}
|
||||
if err := ensureDirectSyscalls(); err != nil {
|
||||
return err
|
||||
}
|
||||
var bytesRead uintptr
|
||||
status, _, _ := syscall.SyscallN(
|
||||
ntReadVMStub,
|
||||
uintptr(handle),
|
||||
address,
|
||||
uintptr(unsafe.Pointer(&out[0])),
|
||||
uintptr(len(out)),
|
||||
uintptr(unsafe.Pointer(&bytesRead)),
|
||||
)
|
||||
if status != 0 {
|
||||
return ntStatusErr("NtReadVirtualMemory", status)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ntWriteProcessMemory(handle windows.Handle, address uintptr, in []byte) error {
|
||||
if len(in) == 0 {
|
||||
return nil
|
||||
}
|
||||
if err := ensureDirectSyscalls(); err != nil {
|
||||
return err
|
||||
}
|
||||
var bytesWritten uintptr
|
||||
status, _, _ := syscall.SyscallN(
|
||||
ntWriteVMStub,
|
||||
uintptr(handle),
|
||||
address,
|
||||
uintptr(unsafe.Pointer(&in[0])),
|
||||
uintptr(len(in)),
|
||||
uintptr(unsafe.Pointer(&bytesWritten)),
|
||||
)
|
||||
if status != 0 {
|
||||
return ntStatusErr("NtWriteVirtualMemory", status)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ntCloseHandle(handle windows.Handle) error {
|
||||
if handle == 0 {
|
||||
return nil
|
||||
}
|
||||
if err := ensureDirectSyscalls(); err != nil {
|
||||
return err
|
||||
}
|
||||
status, _, _ := syscall.SyscallN(ntCloseStub, uintptr(handle))
|
||||
if status != 0 {
|
||||
return ntStatusErr("NtClose", status)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ntAllocateVirtualMemory(handle windows.Handle, size uintptr, allocType, protect uint32) (uintptr, error) {
|
||||
if err := ensureDirectSyscalls(); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
base := uintptr(0)
|
||||
regionSize := size
|
||||
status, _, _ := syscall.SyscallN(
|
||||
ntAllocVMStub,
|
||||
uintptr(handle),
|
||||
uintptr(unsafe.Pointer(&base)),
|
||||
0,
|
||||
uintptr(unsafe.Pointer(®ionSize)),
|
||||
uintptr(allocType),
|
||||
uintptr(protect),
|
||||
)
|
||||
if status != 0 {
|
||||
return 0, ntStatusErr("NtAllocateVirtualMemory", status)
|
||||
}
|
||||
return base, nil
|
||||
}
|
||||
|
||||
func ntProtectVirtualMemory(handle windows.Handle, address uintptr, size uintptr, newProtect uint32) (uint32, error) {
|
||||
if err := ensureDirectSyscalls(); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
base := address
|
||||
regionSize := size
|
||||
var oldProtect uint32
|
||||
status, _, _ := syscall.SyscallN(
|
||||
ntProtectVMStub,
|
||||
uintptr(handle),
|
||||
uintptr(unsafe.Pointer(&base)),
|
||||
uintptr(unsafe.Pointer(®ionSize)),
|
||||
uintptr(newProtect),
|
||||
uintptr(unsafe.Pointer(&oldProtect)),
|
||||
)
|
||||
if status != 0 {
|
||||
return 0, ntStatusErr("NtProtectVirtualMemory", status)
|
||||
}
|
||||
return oldProtect, nil
|
||||
}
|
||||
|
||||
func ntFreeVirtualMemory(handle windows.Handle, address uintptr, freeType uint32) error {
|
||||
if address == 0 {
|
||||
return nil
|
||||
}
|
||||
if err := ensureDirectSyscalls(); err != nil {
|
||||
return err
|
||||
}
|
||||
base := address
|
||||
regionSize := uintptr(0) // required for MEM_RELEASE
|
||||
status, _, _ := syscall.SyscallN(
|
||||
ntFreeVMStub,
|
||||
uintptr(handle),
|
||||
uintptr(unsafe.Pointer(&base)),
|
||||
uintptr(unsafe.Pointer(®ionSize)),
|
||||
uintptr(freeType),
|
||||
)
|
||||
if status != 0 {
|
||||
return ntStatusErr("NtFreeVirtualMemory", status)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -82,12 +82,16 @@ func (gd *GameReader) GetData() data.Data {
|
||||
gd.monstersLastUpdate = now
|
||||
}
|
||||
|
||||
// Always update other critical data
|
||||
corpseUnit := rawPlayerUnits.GetCorpse()
|
||||
roster := gd.getRoster(rawPlayerUnits)
|
||||
|
||||
// Conditionally update inventory 500ms
|
||||
// Except when hovering over an item
|
||||
inventory := gd.cachedInventory
|
||||
if now.Sub(gd.inventoryLastUpdate) > 500*time.Millisecond ||
|
||||
if now.Sub(gd.inventoryLastUpdate) > 250*time.Millisecond ||
|
||||
(hover.IsHovered && hover.UnitType == 4) { // 4 = Item type
|
||||
inventory = gd.Inventory(rawPlayerUnits, hover)
|
||||
inventory = gd.Inventory(rawPlayerUnits, len(roster) > 1, hover)
|
||||
gd.cachedInventory = inventory
|
||||
gd.inventoryLastUpdate = now
|
||||
}
|
||||
@@ -100,9 +104,6 @@ func (gd *GameReader) GetData() data.Data {
|
||||
gd.objectsLastUpdate = now
|
||||
}
|
||||
|
||||
// Always update other critical data
|
||||
corpseUnit := rawPlayerUnits.GetCorpse()
|
||||
roster := gd.getRoster(rawPlayerUnits)
|
||||
openMenus := gd.OpenMenus()
|
||||
|
||||
// Quests
|
||||
@@ -147,13 +148,17 @@ func (gd *GameReader) GetData() data.Data {
|
||||
ActiveWeaponSlot: gd.GetActiveWeaponSlot(),
|
||||
}
|
||||
|
||||
merc, foundMerc := gd.OwnMercenary()
|
||||
merc.Found = foundMerc
|
||||
d.Mercenary = data.OwnMercenary(merc)
|
||||
return d
|
||||
}
|
||||
|
||||
func (gd *GameReader) GetInventory() data.Inventory {
|
||||
rawPlayerUnits := gd.GetRawPlayerUnits()
|
||||
roster := gd.getRoster(rawPlayerUnits)
|
||||
hover := gd.HoveredData()
|
||||
return gd.Inventory(rawPlayerUnits, hover)
|
||||
return gd.Inventory(rawPlayerUnits, len(roster) > 1, hover)
|
||||
}
|
||||
|
||||
func (gd *GameReader) InGame() bool {
|
||||
@@ -215,7 +220,7 @@ func (gd *GameReader) HoveredData() data.HoverData {
|
||||
func (gd *GameReader) getStatsList(statListPtr uintptr) stat.Stats {
|
||||
statsListBuffer := gd.ReadBytesFromMemory(statListPtr, 0x10)
|
||||
statList := ReadUIntFromBuffer(statsListBuffer, 0, Uint64)
|
||||
statCount := ReadUIntFromBuffer(statsListBuffer, 0x08, Uint64)
|
||||
statCount := ReadUIntFromBuffer(statsListBuffer, 0x08, Uint32)
|
||||
if statCount == 0 {
|
||||
return []stat.Data{}
|
||||
}
|
||||
@@ -228,7 +233,7 @@ func (gd *GameReader) getStatsList(statListPtr uintptr) stat.Stats {
|
||||
|
||||
statLayer := ReadUIntFromBuffer(statBuffer, offset, Uint16)
|
||||
statEnum := ReadUIntFromBuffer(statBuffer, offset+0x2, Uint16)
|
||||
statValue := ReadIntFromBuffer(statBuffer, offset+0x4, Uint32)
|
||||
statValue := ReadIntFromBuffer(statBuffer, offset+0x4, Int32)
|
||||
|
||||
value := statValue
|
||||
switch stat.ID(statEnum) {
|
||||
|
||||
@@ -13,7 +13,7 @@ import (
|
||||
"github.com/hectorgimenez/d2go/pkg/utils"
|
||||
)
|
||||
|
||||
func (gd *GameReader) Inventory(rawPlayerUnits RawPlayerUnits, hover data.HoverData) data.Inventory {
|
||||
func (gd *GameReader) Inventory(rawPlayerUnits RawPlayerUnits, partyMode bool, hover data.HoverData) data.Inventory {
|
||||
mainPlayer := rawPlayerUnits.GetMainPlayer()
|
||||
baseAddr := gd.Process.moduleBaseAddressPtr + gd.offset.UnitTable + (4 * 1024)
|
||||
unitTableBuffer := gd.Process.ReadBytesFromMemory(baseAddr, 128*8)
|
||||
@@ -54,6 +54,7 @@ func (gd *GameReader) Inventory(rawPlayerUnits RawPlayerUnits, hover data.HoverD
|
||||
Gold: inventoryGold.Value,
|
||||
StashedGold: stashedGold,
|
||||
SharedStashPages: len(stashPlayerUnitOrder),
|
||||
PlayerID: mainPlayer.UnitID,
|
||||
}
|
||||
belt := data.Belt{}
|
||||
|
||||
@@ -67,8 +68,12 @@ func (gd *GameReader) Inventory(rawPlayerUnits RawPlayerUnits, hover data.HoverD
|
||||
item *data.Item
|
||||
position int // Store X position
|
||||
}
|
||||
type baseItemInfo struct {
|
||||
item *data.Item
|
||||
numSockets int
|
||||
}
|
||||
socketedItemsMap := make(map[data.UnitID][]socketInfo, 120) // Up to ~120 items could be socketable
|
||||
baseItemsMap := make(map[data.UnitID]*data.Item, 120) // Same number of potential base items
|
||||
baseItemsMap := make(map[data.UnitID]baseItemInfo, 120) // Same number of potential base items
|
||||
allItems := make([]*data.Item, 0, 800) // max capacity: 600 (stashes) + 91 (DLC tabs) + 40 (inv) + 12 (cube) + 12 (equipped) + 16 (belt) + headroom
|
||||
|
||||
// Pre-allocate buffers for repeated use
|
||||
@@ -142,20 +147,22 @@ func (gd *GameReader) Inventory(rawPlayerUnits RawPlayerUnits, hover data.HoverD
|
||||
UniqueSetID: txtUniqueSet,
|
||||
}
|
||||
|
||||
// Set item properties
|
||||
setProperties(itm, uint32(flags))
|
||||
itm.Owner = data.UnitID(itemOwnerNPC)
|
||||
if itemOwnerNPC == 1 {
|
||||
itm.Owner = mainPlayer.UnitID
|
||||
}
|
||||
|
||||
// Read rare affixes
|
||||
rarePrefix := int16(gd.Process.ReadUInt(unitDataPtr+0x42, Uint16))
|
||||
rareSuffix := int16(gd.Process.ReadUInt(unitDataPtr+0x44, Uint16))
|
||||
rarePrefix := int16(ReadUIntFromBuffer(unitDataBuffer, 0x42, Uint16))
|
||||
rareSuffix := int16(ReadUIntFromBuffer(unitDataBuffer, 0x44, Uint16))
|
||||
//autoAffix := int16(gd.Process.ReadUInt(unitDataPtr+0x46, Uint16))
|
||||
|
||||
// Read magic affixes
|
||||
var prefixes [3]int16
|
||||
var suffixes [3]int16
|
||||
for i := 0; i < 3; i++ {
|
||||
prefixes[i] = int16(gd.Process.ReadUInt(unitDataPtr+0x48+uintptr(i*2), Uint16))
|
||||
suffixes[i] = int16(gd.Process.ReadUInt(unitDataPtr+0x4E+uintptr(i*2), Uint16))
|
||||
prefixes[i] = int16(ReadUIntFromBuffer(unitDataBuffer, 0x48+uint(i*2), Uint16))
|
||||
suffixes[i] = int16(ReadUIntFromBuffer(unitDataBuffer, 0x4E+uint(i*2), Uint16))
|
||||
}
|
||||
|
||||
itm.Affixes = data.ItemAffixes{
|
||||
@@ -255,12 +262,6 @@ func (gd *GameReader) Inventory(rawPlayerUnits RawPlayerUnits, hover data.HoverD
|
||||
}
|
||||
}
|
||||
|
||||
// Set runeword name if applicable
|
||||
if itm.IsRuneword {
|
||||
if runeword, exists := item.RunewordIDMap[prefixes[0]]; exists {
|
||||
itm.RunewordName = runeword
|
||||
}
|
||||
}
|
||||
// Determine item location
|
||||
location := item.LocationUnknown
|
||||
switch itemLoc {
|
||||
@@ -270,15 +271,26 @@ func (gd *GameReader) Inventory(rawPlayerUnits RawPlayerUnits, hover data.HoverD
|
||||
if page, ok := stashUnitIDToPage[itemOwnerNPC]; ok {
|
||||
location = item.LocationSharedStash
|
||||
invPage = page
|
||||
|
||||
// In party mode / current memory layout:
|
||||
// shared stash page 1 belongs to the current character.
|
||||
// Other pages are other shared stash containers and should keep raw owner.
|
||||
if !partyMode || page == 1 {
|
||||
itm.Owner = mainPlayer.UnitID
|
||||
}
|
||||
|
||||
} else if itemOwnerNPC == 2 && len(stashUnitIDToPage) == 0 {
|
||||
location = item.LocationSharedStash
|
||||
invPage = 1
|
||||
itm.Owner = mainPlayer.UnitID
|
||||
} else if itemOwnerNPC == 3 && len(stashUnitIDToPage) == 0 {
|
||||
location = item.LocationSharedStash
|
||||
invPage = 2
|
||||
itm.Owner = mainPlayer.UnitID
|
||||
} else if itemOwnerNPC == 4 && len(stashUnitIDToPage) == 0 {
|
||||
location = item.LocationSharedStash
|
||||
invPage = 3
|
||||
itm.Owner = mainPlayer.UnitID
|
||||
} else if itemOwnerNPC == 4294967295 {
|
||||
if 0x00002000&flags != 0 {
|
||||
location = item.LocationVendor
|
||||
@@ -288,6 +300,7 @@ func (gd *GameReader) Inventory(rawPlayerUnits RawPlayerUnits, hover data.HoverD
|
||||
location = classifyDLCTabItem(txtFileNo)
|
||||
}
|
||||
} else if data.UnitID(itemOwnerNPC) == mainPlayer.UnitID || itemOwnerNPC == 1 {
|
||||
|
||||
if invPage == 0 {
|
||||
location = item.LocationInventory
|
||||
} else if invPage == 3 {
|
||||
@@ -298,9 +311,11 @@ func (gd *GameReader) Inventory(rawPlayerUnits RawPlayerUnits, hover data.HoverD
|
||||
invPage = 0
|
||||
}
|
||||
}
|
||||
|
||||
case 1:
|
||||
isMercItem := (flags & 0x800000) != 0
|
||||
if data.UnitID(itemOwnerNPC) == mainPlayer.UnitID || itemOwnerNPC == 1 {
|
||||
|
||||
location = item.LocationEquipped
|
||||
if itm.Type().Code == item.TypeBelt {
|
||||
belt.Name = itm.Name
|
||||
@@ -365,10 +380,31 @@ func (gd *GameReader) Inventory(rawPlayerUnits RawPlayerUnits, hover data.HoverD
|
||||
continue
|
||||
}
|
||||
|
||||
// Set item properties
|
||||
setProperties(itm, uint32(flags))
|
||||
|
||||
// Read item stats
|
||||
statsListExPtr := uintptr(ReadUIntFromBuffer(itemDataBuffer, 0x88, Uint64))
|
||||
itm.BaseStats, itm.Stats = gd.getItemStats(statsListExPtr)
|
||||
|
||||
// Set runeword name if applicable
|
||||
if itm.IsRuneword {
|
||||
for _, prefixID := range prefixes {
|
||||
if runeword, exists := item.RunewordIDMap[prefixID]; exists {
|
||||
itm.RunewordName = runeword
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if itm.RunewordName == "" || itm.RunewordName == item.RunewordHustle {
|
||||
if FasterRunWalk, found := itm.Stats.FindStat(stat.FasterRunWalk, 0); found && FasterRunWalk.Value == 65 {
|
||||
itm.RunewordName = item.RunewordHysteria
|
||||
} else if Fanaticism, found := itm.Stats.FindStat(stat.Aura, 122); found && Fanaticism.Value == 1 {
|
||||
itm.RunewordName = item.RunewordMania
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// stack quantity as item property
|
||||
stackQty := gd.Process.ReadUInt(unitDataPtr+0x9C, Uint32)
|
||||
itm.StackedQuantity = int(stackQty)
|
||||
@@ -412,7 +448,7 @@ func (gd *GameReader) Inventory(rawPlayerUnits RawPlayerUnits, hover data.HoverD
|
||||
} else {
|
||||
// Check if item has sockets
|
||||
if numSockets, _ := itm.Stats.FindStat(stat.NumSockets, 0); numSockets.Value > 0 {
|
||||
baseItemsMap[itm.UnitID] = itm
|
||||
baseItemsMap[itm.UnitID] = baseItemInfo{item: itm, numSockets: numSockets.Value}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -428,18 +464,13 @@ func (gd *GameReader) Inventory(rawPlayerUnits RawPlayerUnits, hover data.HoverD
|
||||
}
|
||||
|
||||
// Link sockets to base items
|
||||
for baseUnitID, baseItem := range baseItemsMap {
|
||||
numSockets, _ := baseItem.Stats.FindStat(stat.NumSockets, 0)
|
||||
if numSockets.Value == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
for baseUnitID, baseInfo := range baseItemsMap {
|
||||
// Get socket list for this base item
|
||||
sockets := socketedItemsMap[baseUnitID]
|
||||
if len(sockets) == 0 {
|
||||
continue
|
||||
}
|
||||
if len(sockets) > numSockets.Value {
|
||||
if len(sockets) > baseInfo.numSockets {
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -451,6 +482,7 @@ func (gd *GameReader) Inventory(rawPlayerUnits RawPlayerUnits, hover data.HoverD
|
||||
}
|
||||
|
||||
// Validate socket positions and build final list in one pass (allow partial sockets)
|
||||
baseItem := baseInfo.item
|
||||
baseItem.Sockets = make([]data.Item, 0, len(sockets))
|
||||
for i, socket := range sockets {
|
||||
if socket.position != i {
|
||||
@@ -461,14 +493,21 @@ func (gd *GameReader) Inventory(rawPlayerUnits RawPlayerUnits, hover data.HoverD
|
||||
}
|
||||
}
|
||||
|
||||
// Build final inventory
|
||||
inventory.AllItems = make([]data.Item, len(allItems))
|
||||
type itemDistance struct {
|
||||
item *data.Item
|
||||
distance int
|
||||
}
|
||||
|
||||
// Finalize items and retain the distance with the item that owns it.
|
||||
sortedItems := make([]itemDistance, len(allItems))
|
||||
for i, itm := range allItems {
|
||||
baseDesc := itm.Desc()
|
||||
maxReq := calculateItemLevelReq(itm, baseDesc)
|
||||
|
||||
// Check magic/rare affixes
|
||||
if itm.Identified && (itm.Quality == item.QualityMagic || itm.Quality == item.QualityRare || itm.Quality == item.QualityCrafted) {
|
||||
//itm.Quality == item.QualityMagic ||
|
||||
//itm.Quality == item.QualityRare ||
|
||||
if itm.Identified && (itm.Quality == item.QualityCrafted) {
|
||||
maxReq = updateMaxReqFromAffixes(maxReq, itm.Affixes)
|
||||
}
|
||||
|
||||
@@ -495,20 +534,19 @@ func (gd *GameReader) Inventory(rawPlayerUnits RawPlayerUnits, hover data.HoverD
|
||||
break
|
||||
}
|
||||
}
|
||||
inventory.AllItems[i] = *itm
|
||||
sortedItems[i] = itemDistance{
|
||||
item: itm,
|
||||
distance: utils.DistanceFromPoint(mainPlayer.Position, itm.Position),
|
||||
}
|
||||
}
|
||||
|
||||
// Sort items by distance if needed, using pre-calculated distances
|
||||
if len(inventory.AllItems) > 0 {
|
||||
// Pre-calculate distances to avoid recalculating in sort comparisons
|
||||
distances := make([]int, len(inventory.AllItems))
|
||||
for i, invItem := range inventory.AllItems {
|
||||
distances[i] = utils.DistanceFromPoint(mainPlayer.Position, invItem.Position)
|
||||
}
|
||||
|
||||
sort.SliceStable(inventory.AllItems, func(i, j int) bool {
|
||||
return distances[i] < distances[j]
|
||||
sort.SliceStable(sortedItems, func(i, j int) bool {
|
||||
return sortedItems[i].distance < sortedItems[j].distance
|
||||
})
|
||||
|
||||
inventory.AllItems = make([]data.Item, len(sortedItems))
|
||||
for i, itm := range sortedItems {
|
||||
inventory.AllItems[i] = *itm.item
|
||||
}
|
||||
|
||||
inventory.Belt = belt
|
||||
@@ -517,7 +555,7 @@ func (gd *GameReader) Inventory(rawPlayerUnits RawPlayerUnits, hover data.HoverD
|
||||
|
||||
func (gd *GameReader) getItemStats(statsListExPtr uintptr) (stat.Stats, stat.Stats) {
|
||||
// Initial full and base stats extraction
|
||||
fullStats := gd.getStatsList(statsListExPtr + 0xA8)
|
||||
fullStats := gd.getStatsList(statsListExPtr + 0xE8)
|
||||
baseStats := gd.getStatsList(statsListExPtr + 0x30)
|
||||
|
||||
// Create empty LevelRequire stat .We will update it from inventory
|
||||
@@ -582,8 +620,8 @@ func (gd *GameReader) getItemStats(statsListExPtr uintptr) (stat.Stats, stat.Sta
|
||||
|
||||
for _, mStat := range modifierBaseStats {
|
||||
// Update fullStats
|
||||
if existingStat, found := fullStats.FindStat(mStat.ID, mStat.Layer); found {
|
||||
existingStat.Value = mStat.Value
|
||||
if idx, found := fullStats.FindStatIndex(mStat.ID, mStat.Layer); found {
|
||||
fullStats[idx].Value = mStat.Value
|
||||
} else {
|
||||
fullStats = append(fullStats, mStat)
|
||||
}
|
||||
@@ -621,7 +659,7 @@ func setProperties(item *data.Item, flags uint32) {
|
||||
item.IsEar = true
|
||||
}
|
||||
if 0x2000&flags != 0 {
|
||||
item.InTradeOrStoreScreen = true // If item is sold to vendor or placed in trade with another player
|
||||
item.InTradeOrStoreScreen = item.Owner == 0 // If item is sold to vendor or placed in trade with another player
|
||||
}
|
||||
if 0x800&flags != 0 {
|
||||
item.HasSockets = true
|
||||
@@ -661,18 +699,10 @@ func updateMaxReqFromAffixes(currentMax int, affixes data.ItemAffixes) int {
|
||||
}
|
||||
|
||||
func staffModLevelRequirement(itm *data.Item, baseDesc item.Description) int {
|
||||
eligibleTypes := map[string]bool{
|
||||
item.TypeScepter: true,
|
||||
item.TypeWand: true,
|
||||
item.TypeStaff: true,
|
||||
item.TypeOrb: true,
|
||||
item.TypeHandtoHand: true,
|
||||
item.TypeHandtoHand2: true,
|
||||
item.TypePelt: true,
|
||||
item.TypePrimalHelm: true,
|
||||
}
|
||||
|
||||
if !eligibleTypes[baseDesc.Type] {
|
||||
switch baseDesc.Type {
|
||||
case item.TypeScepter, item.TypeWand, item.TypeStaff, item.TypeOrb,
|
||||
item.TypeHandtoHand, item.TypeHandtoHand2, item.TypePelt, item.TypePrimalHelm:
|
||||
default:
|
||||
return 0
|
||||
}
|
||||
|
||||
@@ -742,10 +772,12 @@ func calculateItemLevelReq(itm *data.Item, baseDesc item.Description) int {
|
||||
|
||||
// Find the original item tier by looking up the unique/set item
|
||||
var originalCode string
|
||||
specificLevelReq := 0
|
||||
if itm.Quality == item.QualityUnique {
|
||||
for _, uniqueInfo := range item.UniqueItems {
|
||||
if uniqueInfo.ID == int(itm.UniqueSetID) {
|
||||
originalCode = uniqueInfo.Code
|
||||
specificLevelReq = uniqueInfo.LevelReq
|
||||
break
|
||||
}
|
||||
}
|
||||
@@ -753,6 +785,7 @@ func calculateItemLevelReq(itm *data.Item, baseDesc item.Description) int {
|
||||
for _, setItemInfo := range item.SetItems {
|
||||
if setItemInfo.ID == int(itm.UniqueSetID) {
|
||||
originalCode = setItemInfo.Code
|
||||
specificLevelReq = setItemInfo.LevelReq
|
||||
break
|
||||
}
|
||||
}
|
||||
@@ -773,26 +806,8 @@ func calculateItemLevelReq(itm *data.Item, baseDesc item.Description) int {
|
||||
}
|
||||
|
||||
// Check unique/set specific level requirement
|
||||
if itm.Identified {
|
||||
if itm.Quality == item.QualityUnique {
|
||||
for _, uniqueInfo := range item.UniqueItems {
|
||||
if uniqueInfo.ID == int(itm.UniqueSetID) {
|
||||
if uniqueInfo.LevelReq > maxReq {
|
||||
maxReq = uniqueInfo.LevelReq
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
} else if itm.Quality == item.QualitySet {
|
||||
for _, setItemInfo := range item.SetItems {
|
||||
if setItemInfo.ID == int(itm.UniqueSetID) {
|
||||
if setItemInfo.LevelReq > maxReq {
|
||||
maxReq = setItemInfo.LevelReq
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
if itm.Identified && specificLevelReq > maxReq {
|
||||
maxReq = specificLevelReq
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
186
pkg/memory/mercenary.go
Normal file
186
pkg/memory/mercenary.go
Normal file
@@ -0,0 +1,186 @@
|
||||
package memory
|
||||
|
||||
import (
|
||||
"math"
|
||||
"sort"
|
||||
|
||||
"github.com/hectorgimenez/d2go/pkg/data"
|
||||
"github.com/hectorgimenez/d2go/pkg/data/mode"
|
||||
"github.com/hectorgimenez/d2go/pkg/data/npc"
|
||||
"github.com/hectorgimenez/d2go/pkg/data/stat"
|
||||
)
|
||||
|
||||
type OwnMercenary data.OwnMercenary
|
||||
|
||||
func (m OwnMercenary) Alive() bool {
|
||||
return m.Found && !m.IsCorpse && m.HPPercent > 0 && m.Mode != mode.NpcDeath && m.Mode != mode.NpcDead
|
||||
}
|
||||
|
||||
func (gd *GameReader) OwnMercenary() (OwnMercenary, bool) {
|
||||
if gd.offset.UnitTable == 0 {
|
||||
gd.offset = calculateOffsets(gd.Process)
|
||||
}
|
||||
|
||||
ownerIDs := gd.mainPlayerOwnerIDs()
|
||||
if len(ownerIDs) == 0 {
|
||||
return OwnMercenary{}, false
|
||||
}
|
||||
|
||||
// Capture the main player name for ownership verification at the caller level.
|
||||
mainPlayerName := gd.GetRawPlayerUnits().GetMainPlayer().Name
|
||||
|
||||
baseAddr := gd.Process.moduleBaseAddressPtr + gd.offset.UnitTable + 1024
|
||||
unitTableBuffer := gd.Process.ReadBytesFromMemory(baseAddr, 128*8)
|
||||
candidates := make([]OwnMercenary, 0)
|
||||
|
||||
for bucket := 0; bucket < 128; bucket++ {
|
||||
monsterOffset := uint(8 * bucket)
|
||||
monsterUnitPtr := uintptr(ReadUIntFromBuffer(unitTableBuffer, monsterOffset, Uint64))
|
||||
for depth := 0; depth < 64 && monsterUnitPtr != 0; depth++ {
|
||||
monsterDataBuffer := gd.Process.ReadBytesFromMemory(monsterUnitPtr, 0x1B0)
|
||||
classID := npc.ID(ReadUIntFromBuffer(monsterDataBuffer, 0x04, Uint32))
|
||||
if !isMercenaryClassID(classID) {
|
||||
monsterUnitPtr = uintptr(gd.Process.ReadUInt(monsterUnitPtr+0x158, Uint64))
|
||||
continue
|
||||
}
|
||||
|
||||
unitDataPtr := uintptr(ReadUIntFromBuffer(monsterDataBuffer, 0x10, Uint64))
|
||||
unitOwnerID := uint32(ReadUIntFromBuffer(monsterDataBuffer, 0x08, Uint32))
|
||||
unitDataOwnerID := uint32(0)
|
||||
if unitDataPtr != 0 {
|
||||
unitDataOwnerID = uint32(gd.Process.ReadUInt(unitDataPtr+0x54, Uint32))
|
||||
}
|
||||
ownerID, ownerMatched := matchOwnerUnitID(ownerIDs, unitOwnerID, unitDataOwnerID)
|
||||
if !ownerMatched {
|
||||
monsterUnitPtr = uintptr(gd.Process.ReadUInt(monsterUnitPtr+0x158, Uint64))
|
||||
continue
|
||||
}
|
||||
|
||||
pathPtr := uintptr(ReadUIntFromBuffer(monsterDataBuffer, 0x38, Uint64))
|
||||
xPos := int(gd.Process.ReadUInt(pathPtr+0x02, Uint16))
|
||||
yPos := int(gd.Process.ReadUInt(pathPtr+0x06, Uint16))
|
||||
statsListExPtr := uintptr(ReadUIntFromBuffer(monsterDataBuffer, 0x88, Uint64))
|
||||
statPtr := uintptr(gd.Process.ReadUInt(statsListExPtr+0x30, Uint64))
|
||||
statCount := gd.Process.ReadUInt(statsListExPtr+0x38, Uint64)
|
||||
stats := gd.getMonsterStats(statCount, statPtr)
|
||||
|
||||
candidates = append(candidates, OwnMercenary{
|
||||
Found: true,
|
||||
ClassID: classID,
|
||||
UnitID: data.UnitID(unitOwnerID),
|
||||
OwnerUnitID: data.UnitID(ownerID),
|
||||
OwnerName: mainPlayerName,
|
||||
Position: data.Position{
|
||||
X: xPos,
|
||||
Y: yPos,
|
||||
},
|
||||
Mode: mode.NpcMode(ReadUIntFromBuffer(monsterDataBuffer, 0x0C, Uint32)),
|
||||
IsCorpse: ReadUIntFromBuffer(monsterDataBuffer, 0x1AE, Uint8) != 0,
|
||||
HPPercent: mercenaryHPPercent(stats),
|
||||
Level: stats[stat.Level],
|
||||
Strength: stats[stat.Strength],
|
||||
Dexterity: stats[stat.Dexterity],
|
||||
})
|
||||
|
||||
monsterUnitPtr = uintptr(gd.Process.ReadUInt(monsterUnitPtr+0x158, Uint64))
|
||||
}
|
||||
}
|
||||
|
||||
if len(candidates) == 0 {
|
||||
return OwnMercenary{}, false
|
||||
}
|
||||
|
||||
// Filter candidates to only the mercenary owned by the main (local) player.
|
||||
// In a Wine/Proton party multiple players may have IsMainPlayer=true, so the
|
||||
// raw candidates list can contain teammates' mercenaries. We filter by the
|
||||
// owner name captured from the main player unit before sorting.
|
||||
ownCandidates := make([]OwnMercenary, 0, len(candidates))
|
||||
for _, c := range candidates {
|
||||
if c.OwnerName == mainPlayerName {
|
||||
ownCandidates = append(ownCandidates, c)
|
||||
}
|
||||
}
|
||||
if len(ownCandidates) == 0 {
|
||||
return OwnMercenary{}, false
|
||||
}
|
||||
|
||||
sort.SliceStable(ownCandidates, func(i, j int) bool {
|
||||
if ownCandidates[i].Alive() != ownCandidates[j].Alive() {
|
||||
return ownCandidates[i].Alive()
|
||||
}
|
||||
if ownCandidates[i].ClassID == npc.Guard && ownCandidates[j].ClassID != npc.Guard {
|
||||
return true
|
||||
}
|
||||
if ownCandidates[i].ClassID != npc.Guard && ownCandidates[j].ClassID == npc.Guard {
|
||||
return false
|
||||
}
|
||||
return ownCandidates[i].HPPercent > ownCandidates[j].HPPercent
|
||||
})
|
||||
|
||||
return ownCandidates[0], true
|
||||
}
|
||||
|
||||
func (gd *GameReader) mainPlayerOwnerIDs() map[uint32]struct{} {
|
||||
rawPlayerUnits := gd.GetRawPlayerUnits()
|
||||
ownerIDs := make(map[uint32]struct{})
|
||||
for _, player := range rawPlayerUnits {
|
||||
if !player.IsMainPlayer || player.UnitID <= 0 {
|
||||
continue
|
||||
}
|
||||
if player.Area > 0 && player.Position.X > 0 && player.Position.Y > 0 {
|
||||
ownerIDs[uint32(player.UnitID)] = struct{}{}
|
||||
}
|
||||
}
|
||||
if len(ownerIDs) > 0 {
|
||||
return ownerIDs
|
||||
}
|
||||
for _, player := range rawPlayerUnits {
|
||||
if player.IsMainPlayer && player.UnitID > 0 {
|
||||
ownerIDs[uint32(player.UnitID)] = struct{}{}
|
||||
}
|
||||
}
|
||||
return ownerIDs
|
||||
}
|
||||
|
||||
func isMercenaryClassID(classID npc.ID) bool {
|
||||
switch classID {
|
||||
case npc.Guard, npc.Act5Hireling1Hand, npc.Act5Hireling2Hand, npc.IronWolf, npc.Rogue2:
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
func matchOwnerUnitID(ownerIDs map[uint32]struct{}, unitOwnerID, unitDataOwnerID uint32) (uint32, bool) {
|
||||
if _, ok := ownerIDs[unitDataOwnerID]; ok {
|
||||
return unitDataOwnerID, true
|
||||
}
|
||||
if _, ok := ownerIDs[unitOwnerID]; ok {
|
||||
return unitOwnerID, true
|
||||
}
|
||||
return 0, false
|
||||
}
|
||||
|
||||
func mercenaryHPPercent(stats map[stat.ID]int) int {
|
||||
maxLife := stats[stat.MaxLife] >> 8
|
||||
if maxLife <= 0 {
|
||||
return 0
|
||||
}
|
||||
|
||||
life := float64(stats[stat.Life] >> 8)
|
||||
if stats[stat.Life] <= 32768 {
|
||||
life = float64(stats[stat.Life]) / 32768.0 * float64(maxLife)
|
||||
}
|
||||
|
||||
percentage := (life / float64(maxLife)) * 100
|
||||
if math.IsNaN(percentage) || math.IsInf(percentage, 0) {
|
||||
return 0
|
||||
}
|
||||
if percentage < 0 {
|
||||
return 0
|
||||
}
|
||||
if percentage > 100 {
|
||||
return 100
|
||||
}
|
||||
return int(percentage)
|
||||
}
|
||||
@@ -26,61 +26,61 @@ type Offset struct {
|
||||
|
||||
func calculateOffsets(_ *Process) Offset {
|
||||
// UnitTable
|
||||
unitTableOffset := uintptr(0x1EAA350)
|
||||
unitTableOffset := uintptr(0x1EB9430)
|
||||
|
||||
// UI
|
||||
uiOffsetPtr := uintptr(0x1EBA042)
|
||||
uiOffsetPtr := uintptr(0x1EC912A)
|
||||
|
||||
// Hover
|
||||
hoverOffset := uintptr(0x1DFE010)
|
||||
hoverOffset := uintptr(0x1E0D0A0)
|
||||
|
||||
// Expansion
|
||||
expOffset := uintptr(0x1DFD460)
|
||||
expOffset := uintptr(0x1E0C508)
|
||||
|
||||
// Party members offset
|
||||
rosterOffset := uintptr(0x1EC0660)
|
||||
rosterOffset := uintptr(0x1ECF748)
|
||||
|
||||
// PanelManagerContainer
|
||||
panelManagerContainerOffset := uintptr(0x1E14DB8)
|
||||
panelManagerContainerOffset := uintptr(0x1E23E60)
|
||||
|
||||
// WidgetStates
|
||||
WidgetStatesOffset := uintptr(0x1EE2678)
|
||||
WidgetStatesOffset := uintptr(0x1EF1760)
|
||||
|
||||
// Waypoints
|
||||
WaypointTableOffset := uintptr(0x1D5C3C0)
|
||||
WaypointTableOffset := uintptr(0x1D6B458)
|
||||
|
||||
// FPS
|
||||
fpsOffset := uintptr(0x1D5C394)
|
||||
fpsOffset := uintptr(0x1D6B42C)
|
||||
|
||||
// KeyBindings
|
||||
keyBindingsOffset := uintptr(0x19D5594)
|
||||
keyBindingsOffset := uintptr(0x19E45F4)
|
||||
|
||||
// KeyBindings Skills
|
||||
keyBindingsSkillsOffset := uintptr(0x1DFE100)
|
||||
keyBindingsSkillsOffset := uintptr(0x1E0D1B0)
|
||||
|
||||
// QuestInfo
|
||||
questInfoOffset := uintptr(0x1EC6CD8)
|
||||
// QuestInfo: s_questInfo resolved from live D2R AOB scan.
|
||||
questInfoOffset := uintptr(0x1ED5DB8)
|
||||
|
||||
// Terror Zones
|
||||
tzOffset := uintptr(0x25B4990)
|
||||
tzOffset := uintptr(0x25C3B50)
|
||||
|
||||
// Ping
|
||||
pingOffset := uintptr(0x1DFD460)
|
||||
pingOffset := uintptr(0x1E0C508)
|
||||
|
||||
// LegacyGraphics
|
||||
legacyGfxOffset := uintptr(0x1EC6E7E)
|
||||
legacyGfxOffset := uintptr(0x1ED6026)
|
||||
|
||||
// CharData
|
||||
charDataOffset := uintptr(0x1E01710)
|
||||
charDataOffset := uintptr(0x1E10658)
|
||||
|
||||
// Selected Char Name
|
||||
selectedCharNameOffset := uintptr(0x1D53195)
|
||||
selectedCharNameOffset := uintptr(0x1D62215)
|
||||
|
||||
// Last Game Name
|
||||
lastGameNameOffset := uintptr(0x25FD2F0)
|
||||
lastGameNameOffset := uintptr(0x260C4B0)
|
||||
|
||||
// Last Game Password
|
||||
lastGamePasswordOffset := uintptr(0x25FD348)
|
||||
lastGamePasswordOffset := uintptr(0x260C508)
|
||||
|
||||
return Offset{
|
||||
UnitTable: unitTableOffset,
|
||||
|
||||
@@ -47,7 +47,7 @@ func (gd *GameReader) GetRawPlayerUnits() RawPlayerUnits {
|
||||
|
||||
statsListExPtr := uintptr(gd.Process.ReadUInt(playerUnit+0x88, Uint64))
|
||||
baseStats := gd.getStatsList(statsListExPtr + 0x30)
|
||||
stats := gd.getStatsList(statsListExPtr + 0xA8)
|
||||
stats := gd.getStatsList(statsListExPtr + 0xE8)
|
||||
states := gd.GetStates(statsListExPtr)
|
||||
playerMode := mode.PlayerMode(gd.Process.ReadUInt(playerUnit+0x0c, Uint32))
|
||||
|
||||
@@ -184,9 +184,9 @@ func (gd *GameReader) getSkills(skillListPtr uintptr) map[skill.ID]skill.Points
|
||||
for skillPtr != 0 {
|
||||
skillTxtPtr := uintptr(gd.Process.ReadUInt(skillPtr, Uint64))
|
||||
skillTxt := uintptr(gd.Process.ReadUInt(skillTxtPtr, Uint16))
|
||||
lvl := gd.Process.ReadUInt(skillPtr+0x40, Uint16)
|
||||
lvl := gd.Process.ReadUInt(skillPtr+0x38, Uint16)
|
||||
qty := gd.Process.ReadUInt(skillPtr+0x48, Uint16)
|
||||
charges := gd.Process.ReadUInt(skillPtr+0x50, Uint16)
|
||||
charges := gd.Process.ReadUInt(skillPtr+0x4C, Uint16)
|
||||
|
||||
shouldSetSkill := true
|
||||
existingSkill, exists := skills[skill.ID(skillTxt)]
|
||||
@@ -214,7 +214,7 @@ func (gd *GameReader) GetStates(statsListExPtr uintptr) state.States {
|
||||
var states state.States
|
||||
for i := 0; i < 8; i++ {
|
||||
offset := i * 4
|
||||
stateByte := gd.Process.ReadUInt(statsListExPtr+0xAF0+uintptr(offset), Uint32)
|
||||
stateByte := gd.Process.ReadUInt(statsListExPtr+0xB30+uintptr(offset), Uint32)
|
||||
|
||||
offset = (32 * i) - 1
|
||||
states = append(states, calculateStates(stateByte, uint(offset))...)
|
||||
|
||||
@@ -36,7 +36,7 @@ func NewProcess() (*Process, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
h, err := windows.OpenProcess(0x0010, false, module.ProcessID)
|
||||
h, err := ntOpenProcess(module.ProcessID, 0x0010)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -55,7 +55,7 @@ func NewProcessForPID(pid uint32) (*Process, error) {
|
||||
return nil, errors.New("no module found for the specified PID")
|
||||
}
|
||||
|
||||
h, err := windows.OpenProcess(0x0010, false, module.ProcessID)
|
||||
h, err := ntOpenProcess(module.ProcessID, 0x0010)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -69,7 +69,7 @@ func NewProcessForPID(pid uint32) (*Process, error) {
|
||||
}
|
||||
|
||||
func (p *Process) Close() error {
|
||||
return windows.CloseHandle(p.handler)
|
||||
return ntCloseHandle(p.handler)
|
||||
}
|
||||
|
||||
// ModuleBaseAddress returns the base address of the D2R module.
|
||||
@@ -138,7 +138,7 @@ func ReadMemoryChunked(handle windows.Handle, baseAddress uintptr, size uint32)
|
||||
}
|
||||
|
||||
// Try to read, but don't fail if it's protected
|
||||
err := windows.ReadProcessMemory(handle, address, &data[offset], chunkSize, nil)
|
||||
err := ntReadProcessMemory(handle, address, data[offset:offset+chunkSize])
|
||||
if err != nil {
|
||||
failedReads++
|
||||
// Fill with zeros and continue (pattern matching will fail gracefully)
|
||||
@@ -155,7 +155,7 @@ func ReadMemoryChunked(handle windows.Handle, baseAddress uintptr, size uint32)
|
||||
|
||||
func (p *Process) ReadBytesFromMemory(address uintptr, size uint) []byte {
|
||||
var data = make([]byte, size)
|
||||
windows.ReadProcessMemory(p.handler, address, &data[0], uintptr(size), nil)
|
||||
_ = ntReadProcessMemory(p.handler, address, data)
|
||||
|
||||
return data
|
||||
}
|
||||
@@ -275,11 +275,11 @@ type ModuleInfo struct {
|
||||
}
|
||||
|
||||
func GetProcessModules(processID uint32) ([]ModuleInfo, error) {
|
||||
hProcess, err := windows.OpenProcess(windows.PROCESS_QUERY_INFORMATION|windows.PROCESS_VM_READ, false, processID)
|
||||
hProcess, err := ntOpenProcess(processID, windows.PROCESS_QUERY_INFORMATION|windows.PROCESS_VM_READ)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer windows.CloseHandle(hProcess)
|
||||
defer ntCloseHandle(hProcess)
|
||||
|
||||
var modules [1024]windows.Handle
|
||||
var needed uint32
|
||||
@@ -323,7 +323,7 @@ func (p *Process) ReadPointer(address uintptr, size int) (uintptr, error) {
|
||||
}
|
||||
|
||||
func (p *Process) ReadIntoBuffer(address uintptr, buffer []byte) error {
|
||||
return windows.ReadProcessMemory(p.handler, address, &buffer[0], uintptr(len(buffer)), nil)
|
||||
return ntReadProcessMemory(p.handler, address, buffer)
|
||||
}
|
||||
|
||||
// ReadWidgetContainer reads the WidgetContainer structure.
|
||||
|
||||
@@ -38,21 +38,14 @@ var (
|
||||
}
|
||||
|
||||
kernel32 = windows.NewLazySystemDLL("kernel32.dll")
|
||||
procVirtualAllocEx = kernel32.NewProc("VirtualAllocEx")
|
||||
procVirtualFreeEx = kernel32.NewProc("VirtualFreeEx")
|
||||
procQueueUserAPC = kernel32.NewProc("QueueUserAPC")
|
||||
procSuspendThread = kernel32.NewProc("SuspendThread")
|
||||
procResumeThread = kernel32.NewProc("ResumeThread")
|
||||
procGetExitCodeThread = kernel32.NewProc("GetExitCodeThread")
|
||||
procGetThreadTimes = kernel32.NewProc("GetThreadTimes")
|
||||
procVirtualProtectEx = kernel32.NewProc("VirtualProtectEx")
|
||||
procSetProcessValidCallTargets = kernel32.NewProc("SetProcessValidCallTargets")
|
||||
procCreateRemoteThread = kernel32.NewProc("CreateRemoteThread")
|
||||
|
||||
ntdll = windows.NewLazySystemDLL("ntdll.dll")
|
||||
procNtGetContextThread = ntdll.NewProc("NtGetContextThread")
|
||||
procNtSetContextThread = ntdll.NewProc("NtSetContextThread")
|
||||
|
||||
d2gsCachedFn uintptr
|
||||
d2gsCacheMu sync.RWMutex
|
||||
d2gsCachePID uint32
|
||||
@@ -143,7 +136,7 @@ func (s *sendPacketState) ensureHandle(pid uint32) (windows.Handle, error) {
|
||||
virtualFreeEx(s.handle, s.stub)
|
||||
}
|
||||
|
||||
windows.CloseHandle(s.handle)
|
||||
_ = ntCloseHandle(s.handle)
|
||||
s.handle = 0
|
||||
s.processPID = 0
|
||||
s.stub = 0
|
||||
@@ -153,7 +146,7 @@ func (s *sendPacketState) ensureHandle(pid uint32) (windows.Handle, error) {
|
||||
s.fn = 0
|
||||
}
|
||||
|
||||
h, err := windows.OpenProcess(sendPacketProcessAccess, false, pid)
|
||||
h, err := ntOpenProcess(pid, sendPacketProcessAccess)
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("open process %d: %w", pid, err)
|
||||
}
|
||||
@@ -305,7 +298,7 @@ func (s *sendPacketState) Cleanup() error {
|
||||
|
||||
// Close thread handle - the main thread may change between games
|
||||
if s.thread != 0 {
|
||||
windows.CloseHandle(s.thread)
|
||||
_ = ntCloseHandle(s.thread)
|
||||
s.thread = 0
|
||||
s.threadID = 0
|
||||
}
|
||||
@@ -343,12 +336,12 @@ func (s *sendPacketState) ensureThreadHandle(p *Process) (windows.Handle, error)
|
||||
}
|
||||
}
|
||||
// Thread is invalid, close and reset
|
||||
windows.CloseHandle(s.thread)
|
||||
_ = ntCloseHandle(s.thread)
|
||||
s.thread = 0
|
||||
s.threadID = 0
|
||||
s.processPID = 0
|
||||
} else if s.thread != 0 && s.processPID != p.pid {
|
||||
windows.CloseHandle(s.thread)
|
||||
_ = ntCloseHandle(s.thread)
|
||||
s.thread = 0
|
||||
s.threadID = 0
|
||||
s.processPID = 0
|
||||
@@ -366,7 +359,7 @@ func (s *sendPacketState) ensureThreadHandle(p *Process) (windows.Handle, error)
|
||||
|
||||
// Validate the newly opened thread belongs to the correct process
|
||||
if err := validateThreadBelongsToProcess(handle, p.pid); err != nil {
|
||||
windows.CloseHandle(handle)
|
||||
_ = ntCloseHandle(handle)
|
||||
return 0, fmt.Errorf("thread %d validation failed: %w", threadID, err)
|
||||
}
|
||||
|
||||
@@ -509,7 +502,7 @@ func findMainThreadID(pid uint32) (uint32, error) {
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("CreateToolhelp32Snapshot: %w", err)
|
||||
}
|
||||
defer windows.CloseHandle(snapshot)
|
||||
defer ntCloseHandle(snapshot)
|
||||
|
||||
var entry windows.ThreadEntry32
|
||||
entry.Size = uint32(unsafe.Sizeof(entry))
|
||||
@@ -526,7 +519,7 @@ func findMainThreadID(pid uint32) (uint32, error) {
|
||||
thread, err := windows.OpenThread(sendPacketThreadAccess, false, entry.ThreadID)
|
||||
if err == nil {
|
||||
creationTime, err := getThreadCreationTime(thread)
|
||||
windows.CloseHandle(thread)
|
||||
_ = ntCloseHandle(thread)
|
||||
|
||||
if err == nil && creationTime < earliestCreationTime {
|
||||
earliestCreationTime = creationTime
|
||||
@@ -866,7 +859,7 @@ func (p *Process) waitForPacketCompletion(handle windows.Handle, state *sendPack
|
||||
select {
|
||||
case <-timeout:
|
||||
// Try to read status one last time before failing
|
||||
if err := windows.ReadProcessMemory(handle, state.meta+sendPacketStatusOffset, &statusBuf[0], 4, nil); err == nil {
|
||||
if err := ntReadProcessMemory(handle, state.meta+sendPacketStatusOffset, statusBuf[:]); err == nil {
|
||||
status := binary.LittleEndian.Uint32(statusBuf[:])
|
||||
if status == 1 {
|
||||
return nil
|
||||
@@ -874,7 +867,7 @@ func (p *Process) waitForPacketCompletion(handle windows.Handle, state *sendPack
|
||||
}
|
||||
return fmt.Errorf("packet send timeout: APC not processed within %dms", timeoutMs)
|
||||
case <-ticker.C:
|
||||
if err := windows.ReadProcessMemory(handle, state.meta+sendPacketStatusOffset, &statusBuf[0], 4, nil); err != nil {
|
||||
if err := ntReadProcessMemory(handle, state.meta+sendPacketStatusOffset, statusBuf[:]); err != nil {
|
||||
continue
|
||||
}
|
||||
status := binary.LittleEndian.Uint32(statusBuf[:])
|
||||
@@ -892,74 +885,26 @@ func writeRemoteMemory(handle windows.Handle, address uintptr, data []byte) erro
|
||||
if len(data) == 0 {
|
||||
return nil
|
||||
}
|
||||
return windows.WriteProcessMemory(handle, address, &data[0], uintptr(len(data)), nil)
|
||||
return ntWriteProcessMemory(handle, address, data)
|
||||
}
|
||||
|
||||
func virtualAllocEx(handle windows.Handle, size uintptr, protect uint32) (uintptr, error) {
|
||||
if size == 0 {
|
||||
return 0, errors.New("allocation size cannot be zero")
|
||||
}
|
||||
|
||||
addr, _, err := procVirtualAllocEx.Call(
|
||||
uintptr(handle),
|
||||
0,
|
||||
size,
|
||||
windows.MEM_COMMIT|windows.MEM_RESERVE,
|
||||
uintptr(protect),
|
||||
)
|
||||
if addr == 0 {
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return 0, errors.New("VirtualAllocEx failed")
|
||||
}
|
||||
return addr, nil
|
||||
return ntAllocateVirtualMemory(handle, size, windows.MEM_COMMIT|windows.MEM_RESERVE, protect)
|
||||
}
|
||||
|
||||
func virtualFreeEx(handle windows.Handle, address uintptr) error {
|
||||
if address == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
ret, _, err := procVirtualFreeEx.Call(
|
||||
uintptr(handle),
|
||||
address,
|
||||
0,
|
||||
windows.MEM_RELEASE,
|
||||
)
|
||||
if ret == 0 {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return errors.New("VirtualFreeEx failed")
|
||||
}
|
||||
return nil
|
||||
return ntFreeVirtualMemory(handle, address, windows.MEM_RELEASE)
|
||||
}
|
||||
|
||||
func virtualProtectEx(handle windows.Handle, address uintptr, size uintptr, protect uint32) error {
|
||||
if address == 0 || size == 0 {
|
||||
return errors.New("attempt to protect invalid region")
|
||||
}
|
||||
|
||||
if err := procVirtualProtectEx.Find(); err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
var oldProtect uint32
|
||||
ret, _, err := procVirtualProtectEx.Call(
|
||||
uintptr(handle),
|
||||
address,
|
||||
size,
|
||||
uintptr(protect),
|
||||
uintptr(unsafe.Pointer(&oldProtect)),
|
||||
)
|
||||
if ret == 0 {
|
||||
if err != nil {
|
||||
return fmt.Errorf("VirtualProtectEx: %w", err)
|
||||
}
|
||||
return errors.New("VirtualProtectEx failed")
|
||||
}
|
||||
return nil
|
||||
_, err := ntProtectVirtualMemory(handle, address, size, protect)
|
||||
return err
|
||||
}
|
||||
|
||||
func markCallTargetValid(handle windows.Handle, address uintptr, size uintptr) error {
|
||||
@@ -1078,26 +1023,3 @@ const CONTEXT_AMD64 = 0x00100000
|
||||
const CONTEXT_CONTROL = CONTEXT_AMD64 | 0x0001
|
||||
const CONTEXT_INTEGER = CONTEXT_AMD64 | 0x0002
|
||||
const CONTEXT_FULL = CONTEXT_CONTROL | CONTEXT_INTEGER
|
||||
|
||||
func getThreadContext(threadHandle windows.Handle, ctx *CONTEXT64) error {
|
||||
ctx.ContextFlags = CONTEXT_FULL
|
||||
ret, _, err := procNtGetContextThread.Call(
|
||||
uintptr(threadHandle),
|
||||
uintptr(unsafe.Pointer(ctx)),
|
||||
)
|
||||
if ret != 0 {
|
||||
return fmt.Errorf("NtGetContextThread failed: 0x%X, %w", ret, err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func setThreadContext(threadHandle windows.Handle, ctx *CONTEXT64) error {
|
||||
ret, _, err := procNtSetContextThread.Call(
|
||||
uintptr(threadHandle),
|
||||
uintptr(unsafe.Pointer(ctx)),
|
||||
)
|
||||
if ret != 0 {
|
||||
return fmt.Errorf("NtSetContextThread failed: 0x%X, %w", ret, err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
262
pkg/nip/rule.go
262
pkg/nip/rule.go
@@ -25,6 +25,7 @@ var (
|
||||
maxQtyRegexp = regexp.MustCompile(`(\[maxquantity]\s*(<=|<|>|>=|!=|==)\s*([0-9]+))`)
|
||||
tierRegexp = regexp.MustCompile(`(\[tier]\s*(<=|<|>|>=|!=|==)\s*([0-9]+))`)
|
||||
mercTierRegexp = regexp.MustCompile(`(\[merctier]\s*(<=|<|>|>=|!=|==)\s*([0-9]+))`)
|
||||
whitespaceRegexp = regexp.MustCompile(`\s+`)
|
||||
)
|
||||
|
||||
type Rule struct {
|
||||
@@ -38,6 +39,10 @@ type Rule struct {
|
||||
stage1 *vm.Program
|
||||
stage2 *vm.Program
|
||||
requiredStats []string
|
||||
skillTabSum bool
|
||||
classSkillSum bool
|
||||
resistSum bool
|
||||
nonResistStat bool
|
||||
}
|
||||
|
||||
type RuleResult int
|
||||
@@ -118,6 +123,24 @@ func (r Rules) EvaluateTiers(it data.Item, tierRulesIndexes []int) (Rule, Rule)
|
||||
|
||||
var fixedPropsList = map[string]int{"type": 0, "quality": 0, "class": 0, "name": 0, "flag": 0, "color": 0, "prefix": 0, "suffix": 0}
|
||||
|
||||
// flagBit* are the bits Evaluate sets on the runtime `flag` value AND the
|
||||
// rewriter (replaceStringPropertiesInStage1) recognises. flagAllBits is the
|
||||
// disjunction of every supported flag bit: the rewriter enumerates all subsets
|
||||
// of flagAllBits when expanding bit tests for the `==`/`!=` operators (expr-lang
|
||||
// has no bitwise operators). To add a new flag bit, update Evaluate to set it,
|
||||
// add a case in the rewriter's name->bit switch, AND fold it into flagAllBits
|
||||
// so the enumeration sees it.
|
||||
const (
|
||||
flagBitEthereal = 0x400000
|
||||
flagBitRuneword = 0x4000000
|
||||
flagAllBits = flagBitEthereal | flagBitRuneword
|
||||
)
|
||||
|
||||
var (
|
||||
maxClassSkillsLayer = maxAliasLayer(stat.AddClassSkills)
|
||||
maxSkillTabLayer = maxAliasLayer(stat.AddSkillTab)
|
||||
)
|
||||
|
||||
func NewRule(rawRule string, filename string, lineNumber int) (Rule, error) {
|
||||
rule := sanitizeLine(rawRule)
|
||||
|
||||
@@ -170,7 +193,7 @@ func NewRule(rawRule string, filename string, lineNumber int) (Rule, error) {
|
||||
mercTier: mercTier,
|
||||
}
|
||||
|
||||
parts := strings.Split(rule, "#")
|
||||
parts := strings.SplitN(rule, "#", 3)
|
||||
|
||||
if len(parts) > 0 {
|
||||
stage1 := strings.TrimSpace(parts[0])
|
||||
@@ -195,10 +218,24 @@ func NewRule(rawRule string, filename string, lineNumber int) (Rule, error) {
|
||||
if stage2 != "" {
|
||||
// Extract stats before removing brackets for compilation
|
||||
r.requiredStats = getRequiredStatsForRule(stage2)
|
||||
stage2Source := ""
|
||||
rawParts := strings.SplitN(rawRule, "#", 3)
|
||||
if len(rawParts) > 1 {
|
||||
stage2Source = strings.ToLower(rawParts[1])
|
||||
}
|
||||
r.skillTabSum = strings.Contains(stage2Source, "[itemaddskilltab]")
|
||||
r.classSkillSum = strings.Contains(stage2Source, "[itemaddclassskills]")
|
||||
if strings.Contains(stage2Source, "resist") {
|
||||
r.resistSum = strings.Contains(stage2Source, "+") || strings.Contains(stage2Source, "-") ||
|
||||
(strings.Contains(stage2Source, "(") && strings.Contains(stage2Source, ")"))
|
||||
}
|
||||
|
||||
statsMap := make(map[string]int)
|
||||
for _, prop := range r.requiredStats {
|
||||
statsMap[prop] = 0
|
||||
if !strings.Contains(prop, "resist") {
|
||||
r.nonResistStat = true
|
||||
}
|
||||
}
|
||||
|
||||
// Normalize whitespace around operators in parenthesized expressions
|
||||
@@ -229,7 +266,7 @@ func normalizeParenthesizedExpressions(expr string) string {
|
||||
expr = strings.ReplaceAll(expr, "<=", " <= ")
|
||||
|
||||
// Fix extra spaces
|
||||
expr = regexp.MustCompile(`\s+`).ReplaceAllString(expr, " ")
|
||||
expr = whitespaceRegexp.ReplaceAllString(expr, " ")
|
||||
|
||||
// Normalize parentheses spacing
|
||||
expr = strings.ReplaceAll(expr, "( ", "(")
|
||||
@@ -240,30 +277,29 @@ func normalizeParenthesizedExpressions(expr string) string {
|
||||
|
||||
func (r Rule) Evaluate(it data.Item) (RuleResult, error) {
|
||||
// Stage 1: Basic properties evaluation
|
||||
stage1Props := make(map[string]int)
|
||||
for prop := range fixedPropsList {
|
||||
switch prop {
|
||||
case "type":
|
||||
stage1Props["type"] = it.Type().ID
|
||||
case "quality":
|
||||
stage1Props["quality"] = int(it.Quality)
|
||||
case "class":
|
||||
stage1Props["class"] = int(it.Desc().Tier())
|
||||
case "name":
|
||||
stage1Props["name"] = it.ID
|
||||
case "flag":
|
||||
// 0x400000 (eth) | 0x4000000 (runeword) kolbot style
|
||||
desc := it.Desc()
|
||||
/*
|
||||
// 0x400000 (eth) | 0x4000000 (runeword) kolbot style. Bit values are
|
||||
// shared with the rewriter (replaceStringPropertiesInStage1) via the
|
||||
// package-level flagBit* constants so the rewriter's enumeration of
|
||||
// possible flag-states stays in lock-step with the values written
|
||||
// here — adding a third bit requires editing both this writer AND
|
||||
// the rewriter, but the constants make the dependency discoverable.
|
||||
*/
|
||||
currentFlag := 0
|
||||
|
||||
if it.Ethereal {
|
||||
currentFlag |= 0x400000
|
||||
currentFlag |= flagBitEthereal
|
||||
}
|
||||
if it.IsRuneword {
|
||||
currentFlag |= 0x4000000
|
||||
currentFlag |= flagBitRuneword
|
||||
}
|
||||
stage1Props := map[string]int{
|
||||
"type": desc.GetType().ID,
|
||||
"quality": int(it.Quality),
|
||||
"class": int(desc.Tier()),
|
||||
"name": it.ID,
|
||||
"flag": currentFlag,
|
||||
}
|
||||
|
||||
stage1Props["flag"] = currentFlag
|
||||
case "prefix":
|
||||
if it.Affixes.Rare.Prefix != 0 {
|
||||
stage1Props["prefix"] = int(it.Affixes.Rare.Prefix)
|
||||
}
|
||||
@@ -273,7 +309,6 @@ func (r Rule) Evaluate(it data.Item) (RuleResult, error) {
|
||||
break
|
||||
}
|
||||
}
|
||||
case "suffix":
|
||||
if it.Affixes.Rare.Suffix != 0 {
|
||||
stage1Props["suffix"] = int(it.Affixes.Rare.Suffix)
|
||||
}
|
||||
@@ -283,10 +318,6 @@ func (r Rule) Evaluate(it data.Item) (RuleResult, error) {
|
||||
break
|
||||
}
|
||||
}
|
||||
case "color":
|
||||
// TODO: Not supported yet
|
||||
}
|
||||
}
|
||||
|
||||
// Check if stage1 exists before evaluating
|
||||
if r.stage1 == nil {
|
||||
@@ -314,51 +345,22 @@ func (r Rule) Evaluate(it data.Item) (RuleResult, error) {
|
||||
return RuleResultPartial, nil
|
||||
}
|
||||
|
||||
stage2Props := make(map[string]int)
|
||||
stage2 := ""
|
||||
if len(strings.Split(r.RawLine, "#")) > 1 {
|
||||
stage2 = strings.ToLower(strings.Split(r.RawLine, "#")[1])
|
||||
}
|
||||
stage2Props := make(map[string]int, len(r.requiredStats))
|
||||
|
||||
// Special handling for skill tabs
|
||||
if strings.Contains(stage2, "[itemaddskilltab]") {
|
||||
if r.skillTabSum {
|
||||
stage2Props["itemaddskilltab"] = evaluateSkillTabSum(it)
|
||||
}
|
||||
|
||||
// Special handling for class skills
|
||||
if strings.Contains(stage2, "[itemaddclassskills]") {
|
||||
if r.classSkillSum {
|
||||
stage2Props["itemaddclassskills"] = evaluateClassSkillsSum(it)
|
||||
}
|
||||
|
||||
// Preprocess stage2 to see if certain stats are being compared to zero
|
||||
zeroCheckStats := make(map[string]bool)
|
||||
for _, statName := range r.requiredStats {
|
||||
if strings.Contains(stage2, "["+statName+"] == 0") ||
|
||||
strings.Contains(stage2, "["+statName+"]==0") {
|
||||
zeroCheckStats[statName] = true
|
||||
}
|
||||
}
|
||||
|
||||
// Handle resist sums - check if item has any resist stats (including negative values)
|
||||
hasAnyResist := false
|
||||
|
||||
// Detect if this is a rule with a resist sum expression
|
||||
isResistSum := false
|
||||
if strings.Contains(stage2, "resist") {
|
||||
isResistSum = strings.Contains(stage2, "+") || strings.Contains(stage2, "-") ||
|
||||
(strings.Contains(stage2, "(") && strings.Contains(stage2, ")"))
|
||||
}
|
||||
|
||||
// Check if rule ONLY checks resist sums (no other OR conditions)
|
||||
hasNonResistConditions := false
|
||||
for _, statName := range r.requiredStats {
|
||||
if !strings.Contains(statName, "resist") {
|
||||
hasNonResistConditions = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if isResistSum {
|
||||
if r.resistSum {
|
||||
// Check if the item has any resist stats at all (including negative values like sunders)
|
||||
for _, statName := range r.requiredStats {
|
||||
if !strings.Contains(statName, "resist") {
|
||||
@@ -448,10 +450,15 @@ func (r Rule) Evaluate(it data.Item) (RuleResult, error) {
|
||||
|
||||
// Special handling for stats not found
|
||||
if !statFound {
|
||||
if statName == "allres" {
|
||||
stage2Props[statName] = evaluateAllRes(it)
|
||||
continue
|
||||
}
|
||||
|
||||
isResistStat := strings.Contains(statName, "resist")
|
||||
// Special case: Pure resist-sum rules (like sunders) should fail early if no resists exist
|
||||
// But mixed rules (resists OR other stats) should continue to check other conditions
|
||||
if isResistStat && isResistSum && !hasAnyResist && !hasNonResistConditions {
|
||||
if isResistStat && r.resistSum && !hasAnyResist && !r.nonResistStat {
|
||||
// This is a pure resist rule and item has no resists - can't match
|
||||
return RuleResultNoMatch, nil
|
||||
}
|
||||
@@ -489,16 +496,47 @@ func replaceStringPropertiesInStage1(stage1 string) (string, error) {
|
||||
case "name":
|
||||
replaceWith = strings.ReplaceAll(prop[0], prop[4], fmt.Sprintf("%d", item.GetIDByName(prop[4])))
|
||||
case "flag":
|
||||
val := 0
|
||||
switch strings.ToLower(prop[4]) {
|
||||
// [flag] is a bitmask at runtime (ethereal | runeword), so equality must be
|
||||
// a bit test, not a scalar compare. Previously "[flag] == ethereal" rewrote
|
||||
// to "flag == 0x400000", which evaluated FALSE on an ethereal runeword (whose
|
||||
// flag is 0x4400000 == eth|rw). expr-lang has no bitwise operators, so we
|
||||
// enumerate the two states the chosen bit can produce. flagAllBits below
|
||||
// MUST stay in sync with the writer in Evaluate — every bit Evaluate can
|
||||
// set must appear here, otherwise the negation form may miss valid items.
|
||||
name := strings.ToLower(prop[4])
|
||||
var bit int
|
||||
switch name {
|
||||
case "runeword":
|
||||
val = 0x4000000
|
||||
bit = flagBitRuneword
|
||||
case "ethereal":
|
||||
val = 0x400000
|
||||
bit = flagBitEthereal
|
||||
default:
|
||||
val = 1
|
||||
bit = 1
|
||||
}
|
||||
switch {
|
||||
case bit == 1:
|
||||
// Unknown flag name — preserve legacy behaviour (replace value with 1).
|
||||
replaceWith = strings.ReplaceAll(prop[0], prop[4], "1")
|
||||
case prop[3] == "==":
|
||||
switch bit {
|
||||
case flagBitRuneword:
|
||||
replaceWith = fmt.Sprintf("(flag == %d || flag == %d)", flagBitRuneword, flagBitRuneword|flagBitEthereal)
|
||||
case flagBitEthereal:
|
||||
replaceWith = fmt.Sprintf("(flag == %d || flag == %d)", flagBitEthereal, flagBitRuneword|flagBitEthereal)
|
||||
}
|
||||
|
||||
case prop[3] == "!=":
|
||||
switch bit {
|
||||
case flagBitRuneword:
|
||||
replaceWith = fmt.Sprintf("(flag == 0 || flag == %d)", flagBitEthereal)
|
||||
case flagBitEthereal:
|
||||
replaceWith = fmt.Sprintf("(flag == 0 || flag == %d)", flagBitRuneword)
|
||||
}
|
||||
default:
|
||||
// Comparison operators other than ==/!= are nonsensical for a bitmask
|
||||
// but kept as scalar compares so exotic legacy rules don't suddenly fail.
|
||||
replaceWith = strings.ReplaceAll(prop[0], prop[4], fmt.Sprintf("%d", bit))
|
||||
}
|
||||
replaceWith = strings.ReplaceAll(prop[0], prop[4], fmt.Sprintf("%d", val))
|
||||
case "prefix", "suffix":
|
||||
// Handle prefix/suffix IDs
|
||||
replaceWith = strings.ReplaceAll(prop[0], prop[4], prop[4])
|
||||
@@ -539,30 +577,88 @@ func (r Rule) ValidateStats() error {
|
||||
}
|
||||
|
||||
func evaluateClassSkillsSum(it data.Item) int {
|
||||
// Check all class skills stats
|
||||
totalClassSkills := 0
|
||||
maxLayer := 6 // in aliases.go the max layer for class skills is 6 (itemaddassassinskills)
|
||||
|
||||
for layer := 0; layer <= maxLayer; layer++ {
|
||||
if itemStat, found := it.FindStat(stat.AddClassSkills, layer); found && itemStat.Value > 0 {
|
||||
totalClassSkills += itemStat.Value
|
||||
}
|
||||
}
|
||||
|
||||
return totalClassSkills
|
||||
return evaluatePositiveStatSum(it, stat.AddClassSkills, maxClassSkillsLayer)
|
||||
}
|
||||
|
||||
func evaluateSkillTabSum(it data.Item) int {
|
||||
// Check all skill tab stats
|
||||
totalSkillTabs := 0
|
||||
maxLayer := 50 // in aliases.go the max layer for skill tabs is 50 (itemaddmartialartsskilltab)
|
||||
return evaluatePositiveStatSum(it, stat.AddSkillTab, maxSkillTabLayer)
|
||||
}
|
||||
|
||||
func evaluateAllRes(it data.Item) int {
|
||||
resistStats := []stat.ID{
|
||||
stat.FireResist,
|
||||
stat.LightningResist,
|
||||
stat.ColdResist,
|
||||
stat.PoisonResist,
|
||||
}
|
||||
|
||||
lowest := 0
|
||||
for idx, statID := range resistStats {
|
||||
itemStat, found := it.FindStat(statID, 0)
|
||||
if !found {
|
||||
return 0
|
||||
}
|
||||
if idx == 0 || itemStat.Value < lowest {
|
||||
lowest = itemStat.Value
|
||||
}
|
||||
}
|
||||
|
||||
return lowest
|
||||
}
|
||||
|
||||
const aggregateLayerFastPathLimit = 64
|
||||
|
||||
func evaluatePositiveStatSum(it data.Item, statID stat.ID, maxLayer int) int {
|
||||
// Current aggregate aliases fit in a small stack bitmap; retain the general
|
||||
// lookup path if additional layers later exceed that bound.
|
||||
if maxLayer >= aggregateLayerFastPathLimit {
|
||||
total := 0
|
||||
for layer := 0; layer <= maxLayer; layer++ {
|
||||
if itemStat, found := it.FindStat(stat.AddSkillTab, layer); found && itemStat.Value > 0 {
|
||||
totalSkillTabs += itemStat.Value
|
||||
if itemStat, found := it.FindStat(statID, layer); found && itemStat.Value > 0 {
|
||||
total += itemStat.Value
|
||||
}
|
||||
}
|
||||
return total
|
||||
}
|
||||
|
||||
return totalSkillTabs
|
||||
var foundLayers [aggregateLayerFastPathLimit]bool
|
||||
total := 0
|
||||
for _, itemStat := range it.Stats {
|
||||
if itemStat.ID != statID || itemStat.Layer < 0 || itemStat.Layer > maxLayer || foundLayers[itemStat.Layer] {
|
||||
continue
|
||||
}
|
||||
foundLayers[itemStat.Layer] = true
|
||||
if itemStat.Value > 0 {
|
||||
total += itemStat.Value
|
||||
}
|
||||
}
|
||||
for _, itemStat := range it.BaseStats {
|
||||
if itemStat.ID != statID || itemStat.Layer < 0 || itemStat.Layer > maxLayer || foundLayers[itemStat.Layer] {
|
||||
continue
|
||||
}
|
||||
foundLayers[itemStat.Layer] = true
|
||||
if itemStat.Value > 0 {
|
||||
total += itemStat.Value
|
||||
}
|
||||
}
|
||||
return total
|
||||
}
|
||||
|
||||
func maxAliasLayer(statID stat.ID) int {
|
||||
maxLayer := 0
|
||||
for _, statData := range statAliases {
|
||||
if len(statData) == 0 || stat.ID(statData[0]) != statID {
|
||||
continue
|
||||
}
|
||||
layer := 0
|
||||
if len(statData) > 1 {
|
||||
layer = statData[1]
|
||||
}
|
||||
if layer > maxLayer {
|
||||
maxLayer = layer
|
||||
}
|
||||
}
|
||||
return maxLayer
|
||||
}
|
||||
|
||||
// MaxQuantity returns the maximum quantity of items that character can have, 0 means no limit
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package nip
|
||||
|
||||
import (
|
||||
"sort"
|
||||
"strconv"
|
||||
"testing"
|
||||
|
||||
"github.com/hectorgimenez/d2go/pkg/data"
|
||||
@@ -755,6 +757,112 @@ func TestRule_Evaluate(t *testing.T) {
|
||||
},
|
||||
want: RuleResultNoMatch,
|
||||
},
|
||||
// Regression tests for the ethereal+runeword [flag] bitmask interaction.
|
||||
// Previously "[flag] == ethereal" rewrote to a scalar compare and missed
|
||||
// ethereal runewords (flag = eth | rw). The rewriter now enumerates both
|
||||
// states the chosen bit can produce.
|
||||
{
|
||||
name: "Flag: == ethereal matches a plain ethereal item",
|
||||
fields: fields{
|
||||
RawLine: "[type] == armor && [flag] == ethereal",
|
||||
Enabled: true,
|
||||
},
|
||||
args: args{
|
||||
item: data.Item{
|
||||
ID: 373,
|
||||
Name: "mageplate",
|
||||
Identified: true,
|
||||
Ethereal: true,
|
||||
IsRuneword: false,
|
||||
},
|
||||
},
|
||||
want: RuleResultFullMatch,
|
||||
},
|
||||
{
|
||||
name: "Flag: == ethereal also matches an ethereal RUNEWORD (regression: was NoMatch)",
|
||||
fields: fields{
|
||||
RawLine: "[type] == armor && [flag] == ethereal",
|
||||
Enabled: true,
|
||||
},
|
||||
args: args{
|
||||
item: data.Item{
|
||||
ID: 373,
|
||||
Name: "mageplate",
|
||||
Identified: true,
|
||||
Ethereal: true,
|
||||
IsRuneword: true,
|
||||
},
|
||||
},
|
||||
want: RuleResultFullMatch,
|
||||
},
|
||||
{
|
||||
name: "Flag: != ethereal correctly excludes ethereal runeword",
|
||||
fields: fields{
|
||||
RawLine: "[type] == armor && [flag] != ethereal",
|
||||
Enabled: true,
|
||||
},
|
||||
args: args{
|
||||
item: data.Item{
|
||||
ID: 373,
|
||||
Name: "mageplate",
|
||||
Identified: true,
|
||||
Ethereal: true,
|
||||
IsRuneword: true,
|
||||
},
|
||||
},
|
||||
want: RuleResultNoMatch,
|
||||
},
|
||||
{
|
||||
name: "Flag: != ethereal matches a non-ethereal runeword",
|
||||
fields: fields{
|
||||
RawLine: "[type] == armor && [flag] != ethereal",
|
||||
Enabled: true,
|
||||
},
|
||||
args: args{
|
||||
item: data.Item{
|
||||
ID: 373,
|
||||
Name: "mageplate",
|
||||
Identified: true,
|
||||
Ethereal: false,
|
||||
IsRuneword: true,
|
||||
},
|
||||
},
|
||||
want: RuleResultFullMatch,
|
||||
},
|
||||
{
|
||||
name: "Flag: == runeword matches an ethereal runeword",
|
||||
fields: fields{
|
||||
RawLine: "[type] == armor && [flag] == runeword",
|
||||
Enabled: true,
|
||||
},
|
||||
args: args{
|
||||
item: data.Item{
|
||||
ID: 373,
|
||||
Name: "mageplate",
|
||||
Identified: true,
|
||||
Ethereal: true,
|
||||
IsRuneword: true,
|
||||
},
|
||||
},
|
||||
want: RuleResultFullMatch,
|
||||
},
|
||||
{
|
||||
name: "Flag: != runeword excludes ethereal runeword",
|
||||
fields: fields{
|
||||
RawLine: "[type] == armor && [flag] != runeword",
|
||||
Enabled: true,
|
||||
},
|
||||
args: args{
|
||||
item: data.Item{
|
||||
ID: 373,
|
||||
Name: "mageplate",
|
||||
Identified: true,
|
||||
Ethereal: true,
|
||||
IsRuneword: true,
|
||||
},
|
||||
},
|
||||
want: RuleResultNoMatch,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
@@ -804,6 +912,227 @@ func TestNew(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestAggregateSkillRulesIncludeHighestAliasLayers(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
rule string
|
||||
stat stat.ID
|
||||
layer int
|
||||
}{
|
||||
{
|
||||
name: "class skills include warlock layer",
|
||||
rule: "[quality] >= normal # [itemaddclassskills] >= 3",
|
||||
stat: stat.AddClassSkills,
|
||||
layer: 7,
|
||||
},
|
||||
{
|
||||
name: "skill tabs include demon layer",
|
||||
rule: "[quality] >= normal # [itemaddskilltab] >= 3",
|
||||
stat: stat.AddSkillTab,
|
||||
layer: 56,
|
||||
},
|
||||
{
|
||||
name: "skill tabs include eldritch layer",
|
||||
rule: "[quality] >= normal # [itemaddskilltab] >= 3",
|
||||
stat: stat.AddSkillTab,
|
||||
layer: 57,
|
||||
},
|
||||
{
|
||||
name: "skill tabs include chaos layer",
|
||||
rule: "[quality] >= normal # [itemaddskilltab] >= 3",
|
||||
stat: stat.AddSkillTab,
|
||||
layer: 58,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
rule, err := NewRule(tt.rule, "test.nip", 1)
|
||||
require.NoError(t, err)
|
||||
|
||||
result, err := rule.Evaluate(data.Item{
|
||||
ID: 516,
|
||||
Name: "healingpotion",
|
||||
Quality: item.QualityMagic,
|
||||
Identified: true,
|
||||
Stats: []stat.Data{
|
||||
{ID: tt.stat, Layer: tt.layer, Value: 3},
|
||||
},
|
||||
})
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, RuleResultFullMatch, result)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestWarlockSkillAliasesReadExactLayers(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
rule string
|
||||
stat stat.ID
|
||||
layer int
|
||||
}{
|
||||
{
|
||||
name: "warlock class skills",
|
||||
rule: "[quality] >= normal # [warlockskills] >= 3",
|
||||
stat: stat.AddClassSkills,
|
||||
layer: 7,
|
||||
},
|
||||
{
|
||||
name: "itemadd warlock class skills",
|
||||
rule: "[quality] >= normal # [itemaddwarlockskills] >= 3",
|
||||
stat: stat.AddClassSkills,
|
||||
layer: 7,
|
||||
},
|
||||
{
|
||||
name: "warlock chaos skill tab",
|
||||
rule: "[quality] >= normal # [chaosskilltab] >= 3",
|
||||
stat: stat.AddSkillTab,
|
||||
layer: 58,
|
||||
},
|
||||
{
|
||||
name: "itemadd warlock chaos skill tab",
|
||||
rule: "[quality] >= normal # [itemaddchaosskilltab] >= 3",
|
||||
stat: stat.AddSkillTab,
|
||||
layer: 58,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
rule, err := NewRule(tt.rule, "test.nip", 1)
|
||||
require.NoError(t, err)
|
||||
|
||||
result, err := rule.Evaluate(data.Item{
|
||||
ID: 516,
|
||||
Name: "healingpotion",
|
||||
Quality: item.QualityMagic,
|
||||
Identified: true,
|
||||
Stats: []stat.Data{
|
||||
{ID: tt.stat, Layer: tt.layer, Value: 3},
|
||||
},
|
||||
})
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, RuleResultFullMatch, result)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestAllResUsesLowestElementalResistance(t *testing.T) {
|
||||
rule, err := NewRule("[quality] >= normal # [allres] >= 20", "test.nip", 1)
|
||||
require.NoError(t, err)
|
||||
|
||||
result, err := rule.Evaluate(data.Item{
|
||||
ID: 516,
|
||||
Name: "healingpotion",
|
||||
Quality: item.QualityMagic,
|
||||
Identified: true,
|
||||
Stats: stat.Stats{
|
||||
{ID: stat.FireResist, Value: 25},
|
||||
{ID: stat.LightningResist, Value: 20},
|
||||
{ID: stat.ColdResist, Value: 30},
|
||||
{ID: stat.PoisonResist, Value: 35},
|
||||
},
|
||||
})
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, RuleResultFullMatch, result)
|
||||
}
|
||||
|
||||
func TestAllStatAliasesReadFromItemStats(t *testing.T) {
|
||||
aliases := make([]string, 0, len(statAliases))
|
||||
for alias := range statAliases {
|
||||
aliases = append(aliases, alias)
|
||||
}
|
||||
sort.Strings(aliases)
|
||||
|
||||
for _, alias := range aliases {
|
||||
t.Run(alias, func(t *testing.T) {
|
||||
if alias == "allres" {
|
||||
itemToCheck := data.Item{
|
||||
ID: 516,
|
||||
Name: "healingpotion",
|
||||
Quality: item.QualityMagic,
|
||||
Identified: true,
|
||||
Stats: stat.Stats{
|
||||
{ID: stat.FireResist, Value: 321},
|
||||
{ID: stat.LightningResist, Value: 321},
|
||||
{ID: stat.ColdResist, Value: 321},
|
||||
{ID: stat.PoisonResist, Value: 321},
|
||||
},
|
||||
}
|
||||
requireRuleFullMatch(t, alias, 321, itemToCheck)
|
||||
return
|
||||
}
|
||||
|
||||
statData := statAliases[alias]
|
||||
require.NotEmpty(t, statData)
|
||||
|
||||
statID := stat.ID(statData[0])
|
||||
layer := 0
|
||||
if len(statData) > 1 {
|
||||
layer = statData[1]
|
||||
}
|
||||
|
||||
statsItem, expected := itemWithStat(statID, layer, false)
|
||||
requireRuleFullMatch(t, alias, expected, statsItem)
|
||||
|
||||
baseStatsItem, expected := itemWithStat(statID, layer, true)
|
||||
requireRuleFullMatch(t, alias, expected, baseStatsItem)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func itemWithStat(statID stat.ID, layer int, base bool) (data.Item, int) {
|
||||
expected := 321
|
||||
statLayer := layer
|
||||
statValue := expected
|
||||
|
||||
switch statID {
|
||||
case stat.SkillOnAttack, stat.SkillOnKill, stat.SkillOnDeath, stat.SkillOnHit, stat.SkillOnLevelUp, stat.SkillOnGetHit, stat.ItemChargedSkill:
|
||||
if layer == 1 || layer == 2 {
|
||||
skillID := 47
|
||||
level := 13
|
||||
statLayer = skillID<<6 | level
|
||||
statValue = 5
|
||||
if layer == 1 {
|
||||
expected = skillID
|
||||
} else {
|
||||
expected = level
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
itemToCheck := data.Item{
|
||||
ID: 516,
|
||||
Name: "healingpotion",
|
||||
Quality: item.QualityMagic,
|
||||
Identified: true,
|
||||
}
|
||||
statToCheck := stat.Data{ID: statID, Layer: statLayer, Value: statValue}
|
||||
if base {
|
||||
itemToCheck.BaseStats = stat.Stats{statToCheck}
|
||||
} else {
|
||||
itemToCheck.Stats = stat.Stats{statToCheck}
|
||||
}
|
||||
|
||||
return itemToCheck, expected
|
||||
}
|
||||
|
||||
func requireRuleFullMatch(t *testing.T, alias string, expected int, itemToCheck data.Item) {
|
||||
t.Helper()
|
||||
|
||||
rule, err := NewRule("[quality] >= normal # ["+alias+"] == "+strconv.Itoa(expected), "test.nip", 1)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, rule.ValidateStats())
|
||||
|
||||
result, err := rule.Evaluate(itemToCheck)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, RuleResultFullMatch, result)
|
||||
}
|
||||
|
||||
func BenchmarkEvaluate(b *testing.B) {
|
||||
it := data.Item{
|
||||
ID: 0,
|
||||
|
||||
Reference in New Issue
Block a user