1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-11-04 17:27:16 -05:00
OpenDiablo2/d2common/d2data/d2datadict/hireling.go

179 lines
5.1 KiB
Go
Raw Normal View History

package d2datadict
import (
"log"
"github.com/OpenDiablo2/OpenDiablo2/d2common"
)
// HirelingRecord is a representation of rows in hireling.txt
// these records describe mercenaries
type HirelingRecord struct {
Hireling string
SubType string
ID int
Class int
Act int
Difficulty int
Level int
Seller int
NameFirst string
NameLast string
Gold int
ExpPerLvl int
HP int
HPPerLvl int
Defense int
DefPerLvl int
Str int
StrPerLvl int
Dex int
DexPerLvl int
AR int
ARPerLvl int
Share int
DmgMin int
DmgMax int
DmgPerLvl int
Resist int
ResistPerLvl int
WType1 string
WType2 string
HireDesc string
DefaultChance int
Skill1 string
Mode1 int
Chance1 int
ChancePerLevel1 int
Level1 int
LvlPerLvl1 int
Skill2 string
Mode2 int
Chance2 int
ChancePerLevel2 int
Level2 int
LvlPerLvl2 int
Skill3 string
Mode3 int
Chance3 int
ChancePerLevel3 int
Level3 int
LvlPerLvl3 int
Skill4 string
Mode4 int
Chance4 int
ChancePerLevel4 int
Level4 int
LvlPerLvl4 int
Skill5 string
Mode5 int
Chance5 int
ChancePerLevel5 int
Level5 int
LvlPerLvl5 int
Skill6 string
Mode6 int
Chance6 int
ChancePerLevel6 int
Level6 int
LvlPerLvl6 int
Head int
Torso int
Weapon int
Shield int
}
// Hirelings stores hireling (mercenary) records
//nolint:gochecknoglobals // Currently global by design, only written once
var Hirelings []*HirelingRecord
// LoadHireling loads hireling data into []*HirelingRecord
func LoadHireling(file []byte) {
Hirelings = make([]*HirelingRecord, 0)
d := d2common.LoadDataDictionary(file)
for d.Next() {
hireling := &HirelingRecord{
Hireling: d.String("Hireling"),
SubType: d.String("SubType"),
ID: d.Number("Id"),
Class: d.Number("Class"),
Act: d.Number("Act"),
Difficulty: d.Number("Difficulty"),
Level: d.Number("Level"),
Seller: d.Number("Seller"),
NameFirst: d.String("NameFirst"),
NameLast: d.String("NameLast"),
Gold: d.Number("Gold"),
ExpPerLvl: d.Number("Exp/Lvl"),
HP: d.Number("HP"),
HPPerLvl: d.Number("HP/Lvl"),
Defense: d.Number("Defense"),
DefPerLvl: d.Number("Id"),
Str: d.Number("Str"),
StrPerLvl: d.Number("Str/Lvl"),
Dex: d.Number("Dex"),
DexPerLvl: d.Number("Dex/Lvl"),
AR: d.Number("AR"),
ARPerLvl: d.Number("AR/Lvl"),
Share: d.Number("Share"),
DmgMin: d.Number("Dmg-Min"),
DmgMax: d.Number("Dmg-Max"),
DmgPerLvl: d.Number("Dmg/Lvl"),
Resist: d.Number("Resist"),
ResistPerLvl: d.Number("Resist/Lvl"),
WType1: d.String("WType1"),
WType2: d.String("WType2"),
HireDesc: d.String("HireDesc"),
DefaultChance: d.Number("DefaultChance"),
Skill1: d.String("Skill1"),
Mode1: d.Number("Mode1"),
Chance1: d.Number("Chance1"),
ChancePerLevel1: d.Number("ChancePerLvl1"),
Level1: d.Number("Level1"),
LvlPerLvl1: d.Number("LvlPerLvl1"),
Skill2: d.String("Skill2"),
Mode2: d.Number("Mode2"),
Chance2: d.Number("Chance2"),
ChancePerLevel2: d.Number("ChancePerLvl2"),
Level2: d.Number("Level2"),
LvlPerLvl2: d.Number("LvlPerLvl2"),
Skill3: d.String("Skill3"),
Mode3: d.Number("Mode3"),
Chance3: d.Number("Chance3"),
ChancePerLevel3: d.Number("ChancePerLvl3"),
Level3: d.Number("Level3"),
LvlPerLvl3: d.Number("LvlPerLvl3"),
Skill4: d.String("Skill4"),
Mode4: d.Number("Mode4"),
Chance4: d.Number("Chance4"),
ChancePerLevel4: d.Number("ChancePerLvl4"),
Level4: d.Number("Level4"),
LvlPerLvl4: d.Number("LvlPerLvl4"),
Skill5: d.String("Skill5"),
Mode5: d.Number("Mode5"),
Chance5: d.Number("Chance5"),
ChancePerLevel5: d.Number("ChancePerLvl5"),
Level5: d.Number("Level5"),
LvlPerLvl5: d.Number("LvlPerLvl5"),
Skill6: d.String("Skill6"),
Mode6: d.Number("Mode6"),
Chance6: d.Number("Chance6"),
ChancePerLevel6: d.Number("ChancePerLvl6"),
Level6: d.Number("Level6"),
LvlPerLvl6: d.Number("LvlPerLvl6"),
Head: d.Number("Head"),
Torso: d.Number("Torso"),
Weapon: d.Number("Weapon"),
Shield: d.Number("Shield"),
}
Hirelings = append(Hirelings, hireling)
}
if d.Err != nil {
panic(d.Err)
}
log.Printf("Loaded %d Hireling records", len(Hirelings))
}