feat(npc): add preset unit helper to retrieve npc from 1.13c map data
This commit is contained in:
43
pkg/data/monplace/monplace.go
Normal file
43
pkg/data/monplace/monplace.go
Normal file
@@ -0,0 +1,43 @@
|
||||
package monplace
|
||||
|
||||
type ID int
|
||||
|
||||
const (
|
||||
nothing ID = iota
|
||||
npc_pack
|
||||
unique_pack
|
||||
champion
|
||||
rogue_warner
|
||||
bloodraven
|
||||
rivermonster_right
|
||||
rivermonster_left
|
||||
tightspotboss
|
||||
amphibian
|
||||
tentacle_ns
|
||||
tentacle_ew
|
||||
fallennest
|
||||
fetishnest
|
||||
talkingrogue
|
||||
talkingguard
|
||||
dumbguard
|
||||
fallen
|
||||
fallenshaman
|
||||
maggot
|
||||
maggotegg
|
||||
mosquitonest
|
||||
fetish
|
||||
fetishshaman
|
||||
impgroup
|
||||
imp
|
||||
miniongroup
|
||||
minion
|
||||
bloodlord
|
||||
deadminion
|
||||
deadimp
|
||||
deadbarb
|
||||
reanimateddead
|
||||
group25
|
||||
group50
|
||||
group75
|
||||
group100
|
||||
)
|
||||
@@ -2,9 +2,11 @@ package data
|
||||
|
||||
import (
|
||||
"github.com/hectorgimenez/d2go/pkg/data/mode"
|
||||
"github.com/hectorgimenez/d2go/pkg/data/monplace"
|
||||
"github.com/hectorgimenez/d2go/pkg/data/npc"
|
||||
"github.com/hectorgimenez/d2go/pkg/data/stat"
|
||||
"github.com/hectorgimenez/d2go/pkg/data/state"
|
||||
"github.com/hectorgimenez/d2go/pkg/data/superunique"
|
||||
)
|
||||
|
||||
type NPC struct {
|
||||
@@ -39,6 +41,32 @@ func (n NPCs) FindOne(npcid npc.ID) (NPC, bool) {
|
||||
return NPC{}, false
|
||||
}
|
||||
|
||||
func (n NPCs) FindOneBySuperUniqueID(id superunique.ID) (NPC, bool) {
|
||||
presetunit, found := npc.PresetUnitForSuperUniqueID(id)
|
||||
if found {
|
||||
for _, np := range n {
|
||||
if np.ID == npc.ID(presetunit.PresetID) {
|
||||
return np, true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NPC{}, false
|
||||
}
|
||||
|
||||
func (n NPCs) FindOneByMonPlaceID(id monplace.ID) (NPC, bool) {
|
||||
presetunit, found := npc.PresetUnitForMonPlaceID(id)
|
||||
if found {
|
||||
for _, np := range n {
|
||||
if np.ID == npc.ID(presetunit.PresetID) {
|
||||
return np, true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NPC{}, false
|
||||
}
|
||||
|
||||
func (m Monsters) FindOne(id npc.ID, t MonsterType) (Monster, bool) {
|
||||
for _, monster := range m {
|
||||
if monster.Name == id {
|
||||
|
||||
131
pkg/data/npc/presetunit.go
Normal file
131
pkg/data/npc/presetunit.go
Normal file
@@ -0,0 +1,131 @@
|
||||
package npc
|
||||
|
||||
import (
|
||||
"github.com/hectorgimenez/d2go/pkg/data/monplace"
|
||||
"github.com/hectorgimenez/d2go/pkg/data/superunique"
|
||||
)
|
||||
|
||||
type PresetUnit struct {
|
||||
PresetID int // Constructed by appending monstats.txt + superuniques.txt + monplace.txt to match map object npc id (d2go relies on 1.13c map data).
|
||||
}
|
||||
|
||||
var PresetUnitBySuperUniqueID = map[superunique.ID]PresetUnit{
|
||||
0: {PresetID: 734}, // Bishibosh
|
||||
1: {PresetID: 735}, // Bonebreak
|
||||
2: {PresetID: 736}, // Coldcrow
|
||||
3: {PresetID: 737}, // Rakanishu
|
||||
4: {PresetID: 738}, // TreeheadWoodFist
|
||||
5: {PresetID: 739}, // Griswold
|
||||
6: {PresetID: 740}, // TheCountess
|
||||
7: {PresetID: 741}, // PitspawnFouldog
|
||||
8: {PresetID: 742}, // FlamespiketheCrawlerER
|
||||
9: {PresetID: 743}, // Boneash
|
||||
10: {PresetID: 744}, // Radament
|
||||
11: {PresetID: 745}, // BloodwitchtheWild
|
||||
12: {PresetID: 746}, // Fangskin
|
||||
13: {PresetID: 747}, // Beetleburst
|
||||
14: {PresetID: 748}, // Leatherarm
|
||||
15: {PresetID: 749}, // ColdwormtheBurrowerR
|
||||
16: {PresetID: 750}, // FireEye
|
||||
17: {PresetID: 751}, // DarkElder
|
||||
18: {PresetID: 752}, // TheSummoner
|
||||
19: {PresetID: 753}, // AncientKaatheSoullessLESS
|
||||
20: {PresetID: 754}, // TheSmith
|
||||
21: {PresetID: 755}, // WebMagetheBurning
|
||||
22: {PresetID: 756}, // WitchDoctorEndugu
|
||||
23: {PresetID: 757}, // Stormtree
|
||||
24: {PresetID: 758}, // SarinatheBattlemaidD
|
||||
25: {PresetID: 759}, // IcehawkRiftwing
|
||||
26: {PresetID: 760}, // IsmailVilehand
|
||||
27: {PresetID: 761}, // GelebFlamefinger
|
||||
28: {PresetID: 762}, // BremmSparkfist
|
||||
29: {PresetID: 763}, // ToorcIcefist
|
||||
30: {PresetID: 764}, // WyandVoidfinger
|
||||
31: {PresetID: 765}, // MafferDragonhand
|
||||
32: {PresetID: 766}, // WingedDeath
|
||||
33: {PresetID: 767}, // TheTormentor
|
||||
34: {PresetID: 768}, // Taintbreeder
|
||||
35: {PresetID: 769}, // RiftwraiththeCannibalBAL
|
||||
36: {PresetID: 770}, // InfectorofSouls
|
||||
37: {PresetID: 771}, // LordDeSeis
|
||||
38: {PresetID: 772}, // GrandVizierofChaosS
|
||||
39: {PresetID: 773}, // TheCowKing
|
||||
40: {PresetID: 774}, // Corpsefire
|
||||
41: {PresetID: 775}, // TheFeatureCreep
|
||||
42: {PresetID: 776}, // SiegeBoss
|
||||
43: {PresetID: 777}, // AncientBarbarian1
|
||||
44: {PresetID: 778}, // AncientBarbarian2
|
||||
45: {PresetID: 779}, // AncientBarbarian3
|
||||
46: {PresetID: 780}, // AxeDweller
|
||||
47: {PresetID: 781}, // BonesawBreaker
|
||||
48: {PresetID: 782}, // DacFarren
|
||||
49: {PresetID: 783}, // MegaflowRectifier
|
||||
50: {PresetID: 784}, // EyebackUnleashed
|
||||
51: {PresetID: 785}, // ThreashSocket
|
||||
52: {PresetID: 786}, // Pindleskin
|
||||
53: {PresetID: 787}, // SnapchipShatter
|
||||
54: {PresetID: 788}, // AnodizedElite
|
||||
55: {PresetID: 789}, // VinvearMolech
|
||||
56: {PresetID: 790}, // SharpToothSayer
|
||||
57: {PresetID: 791}, // MagmaTorquer
|
||||
58: {PresetID: 792}, // BlazeRipper
|
||||
59: {PresetID: 793}, // Frozenstein
|
||||
60: {PresetID: 794}, // NihlathakBoss
|
||||
61: {PresetID: 795}, // BaalSubject1
|
||||
62: {PresetID: 796}, // BaalSubject2
|
||||
63: {PresetID: 797}, // BaalSubject3
|
||||
64: {PresetID: 798}, // BaalSubject4
|
||||
65: {PresetID: 799}, // BaalSubject5
|
||||
}
|
||||
|
||||
var PresetUnitByMonPlaceID = map[monplace.ID]PresetUnit{
|
||||
0: {PresetID: 800}, // nothing
|
||||
1: {PresetID: 801}, // npc_pack
|
||||
2: {PresetID: 802}, // unique_pack
|
||||
3: {PresetID: 803}, // champion
|
||||
4: {PresetID: 804}, // rogue_warner
|
||||
5: {PresetID: 805}, // bloodraven
|
||||
6: {PresetID: 806}, // rivermonster_right
|
||||
7: {PresetID: 807}, // rivermonster_left
|
||||
8: {PresetID: 808}, // tightspotboss
|
||||
9: {PresetID: 809}, // amphibian
|
||||
10: {PresetID: 810}, // tentacle_ns
|
||||
11: {PresetID: 811}, // tentacle_ew
|
||||
12: {PresetID: 812}, // fallennest
|
||||
13: {PresetID: 813}, // fetishnest
|
||||
14: {PresetID: 814}, // talkingrogue
|
||||
15: {PresetID: 815}, // talkingguard
|
||||
16: {PresetID: 816}, // dumbguard
|
||||
17: {PresetID: 817}, // fallen
|
||||
18: {PresetID: 818}, // fallenshaman
|
||||
19: {PresetID: 819}, // maggot
|
||||
20: {PresetID: 820}, // maggotegg
|
||||
21: {PresetID: 821}, // mosquitonest
|
||||
22: {PresetID: 822}, // fetish
|
||||
23: {PresetID: 823}, // fetishshaman
|
||||
24: {PresetID: 824}, // impgroup
|
||||
25: {PresetID: 825}, // imp
|
||||
26: {PresetID: 826}, // miniongroup
|
||||
27: {PresetID: 827}, // minion
|
||||
28: {PresetID: 828}, // bloodlord
|
||||
29: {PresetID: 829}, // deadminion
|
||||
30: {PresetID: 830}, // deadimp
|
||||
31: {PresetID: 831}, // deadbarb
|
||||
32: {PresetID: 832}, // reanimateddead
|
||||
33: {PresetID: 833}, // group25
|
||||
34: {PresetID: 834}, // group50
|
||||
35: {PresetID: 835}, // group75
|
||||
36: {PresetID: 836}, // group100
|
||||
}
|
||||
|
||||
func PresetUnitForSuperUniqueID(id superunique.ID) (PresetUnit, bool) {
|
||||
presetunit, ok := PresetUnitBySuperUniqueID[id]
|
||||
|
||||
return presetunit, ok
|
||||
}
|
||||
|
||||
func PresetUnitForMonPlaceID(id monplace.ID) (PresetUnit, bool) {
|
||||
presetunit, ok := PresetUnitByMonPlaceID[id]
|
||||
|
||||
return presetunit, ok
|
||||
}
|
||||
72
pkg/data/superunique/superunique.go
Normal file
72
pkg/data/superunique/superunique.go
Normal file
@@ -0,0 +1,72 @@
|
||||
package superunique
|
||||
|
||||
type ID int
|
||||
|
||||
const (
|
||||
Bishibosh ID = iota
|
||||
Bonebreak
|
||||
Coldcrow
|
||||
Rakanishu
|
||||
TreeheadWoodFist
|
||||
Griswold
|
||||
TheCountess
|
||||
PitspawnFouldog
|
||||
FlamespiketheCrawler
|
||||
Boneash
|
||||
Radament
|
||||
BloodwitchtheWild
|
||||
Fangskin
|
||||
Beetleburst
|
||||
Leatherarm
|
||||
ColdwormtheBurrower
|
||||
FireEye
|
||||
DarkElder
|
||||
TheSummoner
|
||||
AncientKaatheSoulless
|
||||
TheSmith
|
||||
WebMagetheBurning
|
||||
WitchDoctorEndugu
|
||||
Stormtree
|
||||
SarinatheBattlemaid
|
||||
IcehawkRiftwing
|
||||
IsmailVilehand
|
||||
GelebFlamefinger
|
||||
BremmSparkfist
|
||||
ToorcIcefist
|
||||
WyandVoidfinger
|
||||
MafferDragonhand
|
||||
WingedDeath
|
||||
TheTormentor
|
||||
Taintbreeder
|
||||
RiftwraiththeCannibal
|
||||
InfectorofSouls
|
||||
LordDeSeis
|
||||
GrandVizierofChaos
|
||||
TheCowKing
|
||||
Corpsefire
|
||||
TheFeatureCreep
|
||||
SiegeBoss
|
||||
AncientBarbarian1
|
||||
AncientBarbarian2
|
||||
AncientBarbarian3
|
||||
AxeDweller
|
||||
BonesawBreaker
|
||||
DacFarren
|
||||
MegaflowRectifier
|
||||
EyebackUnleashed
|
||||
ThreashSocket
|
||||
Pindleskin
|
||||
SnapchipShatter
|
||||
AnodizedElite
|
||||
VinvearMolech
|
||||
SharpToothSayer
|
||||
MagmaTorquer
|
||||
BlazeRipper
|
||||
Frozenstein
|
||||
NihlathakBoss
|
||||
BaalSubject1
|
||||
BaalSubject2
|
||||
BaalSubject3
|
||||
BaalSubject4
|
||||
BaalSubject5
|
||||
)
|
||||
Reference in New Issue
Block a user