add basic tz data

This commit is contained in:
Héctor Giménez
2024-04-24 22:16:23 +09:00
parent 07b5a3a1c3
commit de84f7bbe0
4 changed files with 268 additions and 151 deletions

View File

@@ -0,0 +1,76 @@
[
2,
8,
3,
9,
10,
12,
17,
18,
19,
4,
5,
10,
14,
6,
11,
15,
20,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
41,
47,
48,
49,
42,
56,
57,
60,
43,
44,
45,
58,
61,
65,
66,
74,
76,
85,
83,
77,
78,
88,
89,
91,
80,
94,
95,
100,
104,
105,
106,
107,
108,
110,
111,
125,
115,
116,
113,
114,
112,
126,
118,
119,
121,
128
]

View File

@@ -5,6 +5,7 @@ import (
"io" "io"
"log" "log"
"os" "os"
"slices"
"text/template" "text/template"
) )
@@ -34,7 +35,7 @@ package area
var Areas = map[ID]Area{ var Areas = map[ID]Area{
{{- range $key, $value := . }} {{- range $key, $value := . }}
{{ $key }}: {Name: "{{ $value.LevelName }}", ID: {{ $key }}}, {{ $key }}: {Name: "{{ $value.LevelName }}", ID: {{ $key }}, CanBeTerrorized: {{ $value.CanBeTerrorized }}},
{{- end }} {{- end }}
}` }`
@@ -58,8 +59,9 @@ type Skill struct {
} }
type Level struct { type Level struct {
ID int `json:"Id"` ID int `json:"Id"`
LevelName string `json:"LevelName"` LevelName string `json:"LevelName"`
CanBeTerrorized bool
} }
// Generate static code from https://github.com/blizzhackers/d2data data files. // Generate static code from https://github.com/blizzhackers/d2data data files.
@@ -74,22 +76,14 @@ func main() {
log.Fatal(err) log.Fatal(err)
} }
err = generateFromFile(templateLevels, "cmd/d2data/d2data/levels.json", "pkg/data/area/areas.go", &map[string]Level{}) err = generateAreas()
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
} }
func generateFromFile(templateName, filePath, outPath string, unmarshallStruct interface{}) error { func generateFromFile(templateName, filePath, outPath string, unmarshallStruct interface{}) error {
jsonFile, err := os.Open(filePath) err := unmarshalFile(filePath, &unmarshallStruct)
if err != nil {
return err
}
defer jsonFile.Close()
byteValue, _ := io.ReadAll(jsonFile)
err = json.Unmarshal(byteValue, &unmarshallStruct)
if err != nil { if err != nil {
return err return err
} }
@@ -104,3 +98,49 @@ func generateFromFile(templateName, filePath, outPath string, unmarshallStruct i
return t.Execute(file, unmarshallStruct) return t.Execute(file, unmarshallStruct)
} }
func generateAreas() error {
levels := make(map[string]Level)
err := unmarshalFile("cmd/d2data/d2data/levels.json", &levels)
if err != nil {
return err
}
terrorizedLevels := make([]int, 0)
err = unmarshalFile("cmd/d2data/d2data/terrorized_levels.json", &terrorizedLevels)
if err != nil {
return err
}
for k, lvl := range levels {
if slices.Contains(terrorizedLevels, lvl.ID) {
lvl.CanBeTerrorized = true
levels[k] = lvl
}
}
t := template.Must(template.New("tpl").Parse(templateLevels))
file, err := os.Create("pkg/data/area/areas.go")
if err != nil {
return err
}
defer file.Close()
return t.Execute(file, levels)
}
func unmarshalFile(filePath string, unmarshallTo interface{}) error {
jsonFile, err := os.Open(filePath)
if err != nil {
return err
}
defer jsonFile.Close()
byteValue, err := io.ReadAll(jsonFile)
if err != nil {
return err
}
return json.Unmarshal(byteValue, &unmarshallTo)
}

View File

@@ -4,7 +4,8 @@ type ID int
type Area struct { type Area struct {
ID ID
Name string Name string
CanBeTerrorized bool
} }
func (a ID) IsTown() bool { func (a ID) IsTown() bool {

View File

@@ -3,141 +3,141 @@
package area package area
var Areas = map[ID]Area{ var Areas = map[ID]Area{
0: {Name: "", ID: 0}, 0: {Name: "", ID: 0, CanBeTerrorized: false},
1: {Name: "Rogue Encampment", ID: 1}, 1: {Name: "Rogue Encampment", ID: 1, CanBeTerrorized: false},
10: {Name: "Underground Passage Level 1", ID: 10}, 10: {Name: "Underground Passage Level 1", ID: 10, CanBeTerrorized: true},
100: {Name: "Durance of Hate Level 1", ID: 100}, 100: {Name: "Durance of Hate Level 1", ID: 100, CanBeTerrorized: true},
101: {Name: "Durance of Hate Level 2", ID: 101}, 101: {Name: "Durance of Hate Level 2", ID: 101, CanBeTerrorized: false},
102: {Name: "Durance of Hate Level 3", ID: 102}, 102: {Name: "Durance of Hate Level 3", ID: 102, CanBeTerrorized: false},
103: {Name: "The Pandemonium Fortress", ID: 103}, 103: {Name: "The Pandemonium Fortress", ID: 103, CanBeTerrorized: false},
104: {Name: "Outer Steppes", ID: 104}, 104: {Name: "Outer Steppes", ID: 104, CanBeTerrorized: true},
105: {Name: "Plains of Despair", ID: 105}, 105: {Name: "Plains of Despair", ID: 105, CanBeTerrorized: true},
106: {Name: "City of the Damned", ID: 106}, 106: {Name: "City of the Damned", ID: 106, CanBeTerrorized: true},
107: {Name: "River of Flame", ID: 107}, 107: {Name: "River of Flame", ID: 107, CanBeTerrorized: true},
108: {Name: "Chaos Sanctum", ID: 108}, 108: {Name: "Chaos Sanctum", ID: 108, CanBeTerrorized: true},
109: {Name: "Harrogath", ID: 109}, 109: {Name: "Harrogath", ID: 109, CanBeTerrorized: false},
11: {Name: "Hole Level 1", ID: 11}, 11: {Name: "Hole Level 1", ID: 11, CanBeTerrorized: true},
110: {Name: "Bloody Foothills", ID: 110}, 110: {Name: "Bloody Foothills", ID: 110, CanBeTerrorized: true},
111: {Name: "Rigid Highlands", ID: 111}, 111: {Name: "Rigid Highlands", ID: 111, CanBeTerrorized: true},
112: {Name: "Arreat Plateau", ID: 112}, 112: {Name: "Arreat Plateau", ID: 112, CanBeTerrorized: true},
113: {Name: "Crystalized Cavern Level 1", ID: 113}, 113: {Name: "Crystalized Cavern Level 1", ID: 113, CanBeTerrorized: true},
114: {Name: "Cellar of Pity", ID: 114}, 114: {Name: "Cellar of Pity", ID: 114, CanBeTerrorized: true},
115: {Name: "Crystalized Cavern Level 2", ID: 115}, 115: {Name: "Crystalized Cavern Level 2", ID: 115, CanBeTerrorized: true},
116: {Name: "Echo Chamber", ID: 116}, 116: {Name: "Echo Chamber", ID: 116, CanBeTerrorized: true},
117: {Name: "Tundra Wastelands", ID: 117}, 117: {Name: "Tundra Wastelands", ID: 117, CanBeTerrorized: false},
118: {Name: "Glacial Caves Level 1", ID: 118}, 118: {Name: "Glacial Caves Level 1", ID: 118, CanBeTerrorized: true},
119: {Name: "Glacial Caves Level 2", ID: 119}, 119: {Name: "Glacial Caves Level 2", ID: 119, CanBeTerrorized: true},
12: {Name: "Pit Level 1", ID: 12}, 12: {Name: "Pit Level 1", ID: 12, CanBeTerrorized: true},
120: {Name: "Rocky Summit", ID: 120}, 120: {Name: "Rocky Summit", ID: 120, CanBeTerrorized: false},
121: {Name: "Nihlathaks Temple", ID: 121}, 121: {Name: "Nihlathaks Temple", ID: 121, CanBeTerrorized: true},
122: {Name: "Halls of Anguish", ID: 122}, 122: {Name: "Halls of Anguish", ID: 122, CanBeTerrorized: false},
123: {Name: "Halls of Death's Calling", ID: 123}, 123: {Name: "Halls of Death's Calling", ID: 123, CanBeTerrorized: false},
124: {Name: "Halls of Vaught", ID: 124}, 124: {Name: "Halls of Vaught", ID: 124, CanBeTerrorized: false},
125: {Name: "Hell1", ID: 125}, 125: {Name: "Hell1", ID: 125, CanBeTerrorized: true},
126: {Name: "Hell2", ID: 126}, 126: {Name: "Hell2", ID: 126, CanBeTerrorized: true},
127: {Name: "Hell3", ID: 127}, 127: {Name: "Hell3", ID: 127, CanBeTerrorized: false},
128: {Name: "The Worldstone Keep Level 1", ID: 128}, 128: {Name: "The Worldstone Keep Level 1", ID: 128, CanBeTerrorized: true},
129: {Name: "The Worldstone Keep Level 2", ID: 129}, 129: {Name: "The Worldstone Keep Level 2", ID: 129, CanBeTerrorized: false},
13: {Name: "Cave Level 2", ID: 13}, 13: {Name: "Cave Level 2", ID: 13, CanBeTerrorized: false},
130: {Name: "The Worldstone Keep Level 3", ID: 130}, 130: {Name: "The Worldstone Keep Level 3", ID: 130, CanBeTerrorized: false},
131: {Name: "Throne of Destruction", ID: 131}, 131: {Name: "Throne of Destruction", ID: 131, CanBeTerrorized: false},
132: {Name: "The Worldstone Chamber", ID: 132}, 132: {Name: "The Worldstone Chamber", ID: 132, CanBeTerrorized: false},
133: {Name: "Pandemonium Run 1", ID: 133}, 133: {Name: "Pandemonium Run 1", ID: 133, CanBeTerrorized: false},
134: {Name: "Pandemonium Run 2", ID: 134}, 134: {Name: "Pandemonium Run 2", ID: 134, CanBeTerrorized: false},
135: {Name: "Pandemonium Run 3", ID: 135}, 135: {Name: "Pandemonium Run 3", ID: 135, CanBeTerrorized: false},
136: {Name: "Tristram", ID: 136}, 136: {Name: "Tristram", ID: 136, CanBeTerrorized: false},
14: {Name: "Underground Passage Level 2", ID: 14}, 14: {Name: "Underground Passage Level 2", ID: 14, CanBeTerrorized: true},
15: {Name: "Hole Level 2", ID: 15}, 15: {Name: "Hole Level 2", ID: 15, CanBeTerrorized: true},
16: {Name: "Pit Level 2", ID: 16}, 16: {Name: "Pit Level 2", ID: 16, CanBeTerrorized: false},
17: {Name: "Burial Grounds", ID: 17}, 17: {Name: "Burial Grounds", ID: 17, CanBeTerrorized: true},
18: {Name: "Crypt", ID: 18}, 18: {Name: "Crypt", ID: 18, CanBeTerrorized: true},
19: {Name: "Mausoleum", ID: 19}, 19: {Name: "Mausoleum", ID: 19, CanBeTerrorized: true},
2: {Name: "Blood Moor", ID: 2}, 2: {Name: "Blood Moor", ID: 2, CanBeTerrorized: true},
20: {Name: "Forgotten Tower", ID: 20}, 20: {Name: "Forgotten Tower", ID: 20, CanBeTerrorized: true},
21: {Name: "Tower Cellar Level 1", ID: 21}, 21: {Name: "Tower Cellar Level 1", ID: 21, CanBeTerrorized: false},
22: {Name: "Tower Cellar Level 2", ID: 22}, 22: {Name: "Tower Cellar Level 2", ID: 22, CanBeTerrorized: false},
23: {Name: "Tower Cellar Level 3", ID: 23}, 23: {Name: "Tower Cellar Level 3", ID: 23, CanBeTerrorized: false},
24: {Name: "Tower Cellar Level 4", ID: 24}, 24: {Name: "Tower Cellar Level 4", ID: 24, CanBeTerrorized: false},
25: {Name: "Tower Cellar Level 5", ID: 25}, 25: {Name: "Tower Cellar Level 5", ID: 25, CanBeTerrorized: false},
26: {Name: "Monastery Gate", ID: 26}, 26: {Name: "Monastery Gate", ID: 26, CanBeTerrorized: false},
27: {Name: "Outer Cloister", ID: 27}, 27: {Name: "Outer Cloister", ID: 27, CanBeTerrorized: false},
28: {Name: "Barracks", ID: 28}, 28: {Name: "Barracks", ID: 28, CanBeTerrorized: false},
29: {Name: "Jail Level 1", ID: 29}, 29: {Name: "Jail Level 1", ID: 29, CanBeTerrorized: true},
3: {Name: "Cold Plains", ID: 3}, 3: {Name: "Cold Plains", ID: 3, CanBeTerrorized: true},
30: {Name: "Jail Level 2", ID: 30}, 30: {Name: "Jail Level 2", ID: 30, CanBeTerrorized: true},
31: {Name: "Jail Level 3", ID: 31}, 31: {Name: "Jail Level 3", ID: 31, CanBeTerrorized: true},
32: {Name: "Inner Cloister", ID: 32}, 32: {Name: "Inner Cloister", ID: 32, CanBeTerrorized: true},
33: {Name: "Cathedral", ID: 33}, 33: {Name: "Cathedral", ID: 33, CanBeTerrorized: true},
34: {Name: "Catacombs Level 1", ID: 34}, 34: {Name: "Catacombs Level 1", ID: 34, CanBeTerrorized: true},
35: {Name: "Catacombs Level 2", ID: 35}, 35: {Name: "Catacombs Level 2", ID: 35, CanBeTerrorized: true},
36: {Name: "Catacombs Level 3", ID: 36}, 36: {Name: "Catacombs Level 3", ID: 36, CanBeTerrorized: true},
37: {Name: "Catacombs Level 4", ID: 37}, 37: {Name: "Catacombs Level 4", ID: 37, CanBeTerrorized: true},
38: {Name: "Tristram", ID: 38}, 38: {Name: "Tristram", ID: 38, CanBeTerrorized: true},
39: {Name: "Moo Moo Farm", ID: 39}, 39: {Name: "Moo Moo Farm", ID: 39, CanBeTerrorized: true},
4: {Name: "Stony Field", ID: 4}, 4: {Name: "Stony Field", ID: 4, CanBeTerrorized: true},
40: {Name: "Lut Gholein", ID: 40}, 40: {Name: "Lut Gholein", ID: 40, CanBeTerrorized: false},
41: {Name: "Rocky Waste", ID: 41}, 41: {Name: "Rocky Waste", ID: 41, CanBeTerrorized: true},
42: {Name: "Dry Hills", ID: 42}, 42: {Name: "Dry Hills", ID: 42, CanBeTerrorized: true},
43: {Name: "Far Oasis", ID: 43}, 43: {Name: "Far Oasis", ID: 43, CanBeTerrorized: true},
44: {Name: "Lost City", ID: 44}, 44: {Name: "Lost City", ID: 44, CanBeTerrorized: true},
45: {Name: "Valley of Snakes", ID: 45}, 45: {Name: "Valley of Snakes", ID: 45, CanBeTerrorized: true},
46: {Name: "Canyon of the Magi", ID: 46}, 46: {Name: "Canyon of the Magi", ID: 46, CanBeTerrorized: false},
47: {Name: "Sewers Level 1", ID: 47}, 47: {Name: "Sewers Level 1", ID: 47, CanBeTerrorized: true},
48: {Name: "Sewers Level 2", ID: 48}, 48: {Name: "Sewers Level 2", ID: 48, CanBeTerrorized: true},
49: {Name: "Sewers Level 3", ID: 49}, 49: {Name: "Sewers Level 3", ID: 49, CanBeTerrorized: true},
5: {Name: "Dark Wood", ID: 5}, 5: {Name: "Dark Wood", ID: 5, CanBeTerrorized: true},
50: {Name: "Harem Level 1", ID: 50}, 50: {Name: "Harem Level 1", ID: 50, CanBeTerrorized: false},
51: {Name: "Harem Level 2", ID: 51}, 51: {Name: "Harem Level 2", ID: 51, CanBeTerrorized: false},
52: {Name: "Palace Cellar Level 1", ID: 52}, 52: {Name: "Palace Cellar Level 1", ID: 52, CanBeTerrorized: false},
53: {Name: "Palace Cellar Level 2", ID: 53}, 53: {Name: "Palace Cellar Level 2", ID: 53, CanBeTerrorized: false},
54: {Name: "Palace Cellar Level 3", ID: 54}, 54: {Name: "Palace Cellar Level 3", ID: 54, CanBeTerrorized: false},
55: {Name: "Stony Tomb Level 1", ID: 55}, 55: {Name: "Stony Tomb Level 1", ID: 55, CanBeTerrorized: false},
56: {Name: "Halls of the Dead Level 1", ID: 56}, 56: {Name: "Halls of the Dead Level 1", ID: 56, CanBeTerrorized: true},
57: {Name: "Halls of the Dead Level 2", ID: 57}, 57: {Name: "Halls of the Dead Level 2", ID: 57, CanBeTerrorized: true},
58: {Name: "Claw Viper Temple Level 1", ID: 58}, 58: {Name: "Claw Viper Temple Level 1", ID: 58, CanBeTerrorized: true},
59: {Name: "Stony Tomb Level 2", ID: 59}, 59: {Name: "Stony Tomb Level 2", ID: 59, CanBeTerrorized: false},
6: {Name: "Black Marsh", ID: 6}, 6: {Name: "Black Marsh", ID: 6, CanBeTerrorized: true},
60: {Name: "Halls of the Dead Level 3", ID: 60}, 60: {Name: "Halls of the Dead Level 3", ID: 60, CanBeTerrorized: true},
61: {Name: "Claw Viper Temple Level 2", ID: 61}, 61: {Name: "Claw Viper Temple Level 2", ID: 61, CanBeTerrorized: true},
62: {Name: "Maggot Lair Level 1", ID: 62}, 62: {Name: "Maggot Lair Level 1", ID: 62, CanBeTerrorized: false},
63: {Name: "Maggot Lair Level 2", ID: 63}, 63: {Name: "Maggot Lair Level 2", ID: 63, CanBeTerrorized: false},
64: {Name: "Maggot Lair Level 3", ID: 64}, 64: {Name: "Maggot Lair Level 3", ID: 64, CanBeTerrorized: false},
65: {Name: "Ancient Tunnels", ID: 65}, 65: {Name: "Ancient Tunnels", ID: 65, CanBeTerrorized: true},
66: {Name: "Tal Rasha's Tomb", ID: 66}, 66: {Name: "Tal Rasha's Tomb", ID: 66, CanBeTerrorized: true},
67: {Name: "Tal Rasha's Tomb", ID: 67}, 67: {Name: "Tal Rasha's Tomb", ID: 67, CanBeTerrorized: false},
68: {Name: "Tal Rasha's Tomb", ID: 68}, 68: {Name: "Tal Rasha's Tomb", ID: 68, CanBeTerrorized: false},
69: {Name: "Tal Rasha's Tomb", ID: 69}, 69: {Name: "Tal Rasha's Tomb", ID: 69, CanBeTerrorized: false},
7: {Name: "Tamoe Highland", ID: 7}, 7: {Name: "Tamoe Highland", ID: 7, CanBeTerrorized: false},
70: {Name: "Tal Rasha's Tomb", ID: 70}, 70: {Name: "Tal Rasha's Tomb", ID: 70, CanBeTerrorized: false},
71: {Name: "Tal Rasha's Tomb", ID: 71}, 71: {Name: "Tal Rasha's Tomb", ID: 71, CanBeTerrorized: false},
72: {Name: "Tal Rasha's Tomb", ID: 72}, 72: {Name: "Tal Rasha's Tomb", ID: 72, CanBeTerrorized: false},
73: {Name: "Duriel's Lair", ID: 73}, 73: {Name: "Duriel's Lair", ID: 73, CanBeTerrorized: false},
74: {Name: "Arcane Sanctuary", ID: 74}, 74: {Name: "Arcane Sanctuary", ID: 74, CanBeTerrorized: true},
75: {Name: "Kurast Docktown", ID: 75}, 75: {Name: "Kurast Docktown", ID: 75, CanBeTerrorized: false},
76: {Name: "Spider Forest", ID: 76}, 76: {Name: "Spider Forest", ID: 76, CanBeTerrorized: true},
77: {Name: "Great Marsh", ID: 77}, 77: {Name: "Great Marsh", ID: 77, CanBeTerrorized: true},
78: {Name: "Flayer Jungle", ID: 78}, 78: {Name: "Flayer Jungle", ID: 78, CanBeTerrorized: true},
79: {Name: "Lower Kurast", ID: 79}, 79: {Name: "Lower Kurast", ID: 79, CanBeTerrorized: false},
8: {Name: "Den of Evil", ID: 8}, 8: {Name: "Den of Evil", ID: 8, CanBeTerrorized: true},
80: {Name: "Kurast Bazaar", ID: 80}, 80: {Name: "Kurast Bazaar", ID: 80, CanBeTerrorized: true},
81: {Name: "Upper Kurast", ID: 81}, 81: {Name: "Upper Kurast", ID: 81, CanBeTerrorized: false},
82: {Name: "Kurast Causeway", ID: 82}, 82: {Name: "Kurast Causeway", ID: 82, CanBeTerrorized: false},
83: {Name: "Travincal", ID: 83}, 83: {Name: "Travincal", ID: 83, CanBeTerrorized: true},
84: {Name: "Spider Cave", ID: 84}, 84: {Name: "Spider Cave", ID: 84, CanBeTerrorized: false},
85: {Name: "Spider Cavern", ID: 85}, 85: {Name: "Spider Cavern", ID: 85, CanBeTerrorized: true},
86: {Name: "Swampy Pit Level 1", ID: 86}, 86: {Name: "Swampy Pit Level 1", ID: 86, CanBeTerrorized: false},
87: {Name: "Swampy Pit Level 2", ID: 87}, 87: {Name: "Swampy Pit Level 2", ID: 87, CanBeTerrorized: false},
88: {Name: "Flayer Dungeon Level 1", ID: 88}, 88: {Name: "Flayer Dungeon Level 1", ID: 88, CanBeTerrorized: true},
89: {Name: "Flayer Dungeon Level 2", ID: 89}, 89: {Name: "Flayer Dungeon Level 2", ID: 89, CanBeTerrorized: true},
9: {Name: "Cave Level 1", ID: 9}, 9: {Name: "Cave Level 1", ID: 9, CanBeTerrorized: true},
90: {Name: "Swampy Pit Level 3", ID: 90}, 90: {Name: "Swampy Pit Level 3", ID: 90, CanBeTerrorized: false},
91: {Name: "Flayer Dungeon Level 3", ID: 91}, 91: {Name: "Flayer Dungeon Level 3", ID: 91, CanBeTerrorized: true},
92: {Name: "Sewers Level 1", ID: 92}, 92: {Name: "Sewers Level 1", ID: 92, CanBeTerrorized: false},
93: {Name: "Sewers Level 2", ID: 93}, 93: {Name: "Sewers Level 2", ID: 93, CanBeTerrorized: false},
94: {Name: "Ruined Temple", ID: 94}, 94: {Name: "Ruined Temple", ID: 94, CanBeTerrorized: true},
95: {Name: "Disused Fane", ID: 95}, 95: {Name: "Disused Fane", ID: 95, CanBeTerrorized: true},
96: {Name: "Forgotten Reliquary", ID: 96}, 96: {Name: "Forgotten Reliquary", ID: 96, CanBeTerrorized: false},
97: {Name: "Forgotten Temple", ID: 97}, 97: {Name: "Forgotten Temple", ID: 97, CanBeTerrorized: false},
98: {Name: "Ruined Fane", ID: 98}, 98: {Name: "Ruined Fane", ID: 98, CanBeTerrorized: false},
99: {Name: "Disused Reliquary", ID: 99}, 99: {Name: "Disused Reliquary", ID: 99, CanBeTerrorized: false},
} }