-
Notifications
You must be signed in to change notification settings - Fork 2
/
profession.go
153 lines (135 loc) · 3.21 KB
/
profession.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
package evtc
import (
"encoding/json"
"net/http"
"strconv"
"sync"
)
// ProfessionID is the ID of a Guild Wars 2 profession.
type ProfessionID int
const (
Guardian ProfessionID = 1
Warrior ProfessionID = 2
Engineer ProfessionID = 3
Ranger ProfessionID = 4
Thief ProfessionID = 5
Elementalist ProfessionID = 6
Mesmer ProfessionID = 7
Necromancer ProfessionID = 8
Revenant ProfessionID = 9
)
func (id ProfessionID) String() string {
switch id {
case Guardian:
return "Guardian"
case Warrior:
return "Warrior"
case Engineer:
return "Engineer"
case Ranger:
return "Ranger"
case Thief:
return "Thief"
case Elementalist:
return "Elementalist"
case Mesmer:
return "Mesmer"
case Necromancer:
return "Necromancer"
case Revenant:
return "Revenant"
default:
return strconv.Itoa(int(id))
}
}
// EliteSpecID is the ID of a Guild Wars 2 elite specialization.
type EliteSpecID int
const (
Druid EliteSpecID = 5
Daredevil EliteSpecID = 7
Berserker EliteSpecID = 18
Dragonhunter EliteSpecID = 27
Reaper EliteSpecID = 34
Chronomancer EliteSpecID = 40
Scrapper EliteSpecID = 43
Tempest EliteSpecID = 48
Herald EliteSpecID = 52
Soulbeast EliteSpecID = 55
Weaver EliteSpecID = 56
Holosmith EliteSpecID = 57
Deadeye EliteSpecID = 58
Mirage EliteSpecID = 59
Scourge EliteSpecID = 60
Spellbreaker EliteSpecID = 61
Firebrand EliteSpecID = 62
Renegade EliteSpecID = 63
)
var hotEliteSpec = map[ProfessionID]EliteSpecID{
Guardian: Dragonhunter,
Warrior: Berserker,
Engineer: Scrapper,
Ranger: Druid,
Thief: Daredevil,
Elementalist: Tempest,
Mesmer: Chronomancer,
Necromancer: Reaper,
Revenant: Herald,
}
var eliteSpecName = map[EliteSpecID]string{
Druid: "Druid",
Daredevil: "Daredevil",
Berserker: "Berserker",
Dragonhunter: "Dragonhunter",
Reaper: "Reaper",
Chronomancer: "Chronomancer",
Scrapper: "Scrapper",
Tempest: "Tempest",
Herald: "Herald",
Soulbeast: "Soulbeast",
Weaver: "Weaver",
Holosmith: "Holosmith",
Deadeye: "Deadeye",
Mirage: "Mirage",
Scourge: "Scourge",
Spellbreaker: "Spellbreaker",
Firebrand: "Firebrand",
Renegade: "Renegade",
}
var apiEliteSpecName map[EliteSpecID]string
func populateAPIEliteSpecs() {
resp, err := http.Get("https://api.guildwars2.com/v2/specializations?ids=all&lang=en&v=2019-06-17")
if err != nil {
// can't do anything about it
return
}
defer resp.Body.Close()
var specs []struct {
ID int `json:"id"`
Name string `json:"name"`
Elite bool `json:"elite"`
}
if err = json.NewDecoder(resp.Body).Decode(&specs); err != nil {
// can't do anything about it
return
}
apiEliteSpecName = make(map[EliteSpecID]string)
for _, s := range specs {
if s.Elite {
apiEliteSpecName[EliteSpecID(s.ID)] = s.Name
}
}
}
var populateAPIEliteSpecsOnce sync.Once
func (id EliteSpecID) String() string {
if id == 0 {
return ""
}
if name, ok := eliteSpecName[id]; ok {
return name
}
populateAPIEliteSpecsOnce.Do(populateAPIEliteSpecs)
if name, ok := apiEliteSpecName[id]; ok {
return name
}
return strconv.Itoa(int(id))
}