From b7f8aa8e90aa57eafc1f0535924f3d59f04e03e6 Mon Sep 17 00:00:00 2001 From: Huw Griffiths Date: Tue, 28 Jul 2020 21:54:05 +1000 Subject: [PATCH] d2datadict: Add Monprop.txt loader (#636) --- d2app/app.go | 1 + d2common/d2data/d2datadict/monprop.go | 218 ++++++++++++++++++++++++++ d2common/d2resource/resource_paths.go | 2 + 3 files changed, 221 insertions(+) create mode 100644 d2common/d2data/d2datadict/monprop.go diff --git a/d2app/app.go b/d2app/app.go index 7769303e..80a5325a 100644 --- a/d2app/app.go +++ b/d2app/app.go @@ -222,6 +222,7 @@ func (a *App) loadDataDict() error { {d2resource.MonStats, d2datadict.LoadMonStats}, {d2resource.MonStats2, d2datadict.LoadMonStats2}, {d2resource.MonPreset, d2datadict.LoadMonPresets}, + {d2resource.MonProp, d2datadict.LoadMonProps}, {d2resource.MagicPrefix, d2datadict.LoadMagicPrefix}, {d2resource.MagicSuffix, d2datadict.LoadMagicSuffix}, {d2resource.ItemStatCost, d2datadict.LoadItemStatCosts}, diff --git a/d2common/d2data/d2datadict/monprop.go b/d2common/d2data/d2datadict/monprop.go new file mode 100644 index 00000000..33139eab --- /dev/null +++ b/d2common/d2data/d2datadict/monprop.go @@ -0,0 +1,218 @@ +package d2datadict + +import ( + "log" + + "github.com/OpenDiablo2/OpenDiablo2/d2common" +) + +// MonPropRecord is a representation of a single row of monprop.txt +type MonPropRecord struct { + ID string + + Prop1 string + Chance1 int + Parameter1 string + Min1 int + Max1 int + Prop2 string + Chance2 int + Parameter2 string + Min2 int + Max2 int + Prop3 string + Chance3 int + Parameter3 string + Min3 int + Max3 int + Prop4 string + Chance4 int + Parameter4 string + Min4 int + Max4 int + Prop5 string + Chance5 int + Parameter5 string + Min5 int + Max5 int + Prop6 string + Chance6 int + Parameter6 string + Min6 int + Max6 int + Prop1N string + Chance1N int + Parameter1N string + Min1N int + Max1N int + Prop2N string + Chance2N int + Parameter2N string + Min2N int + Max2N int + Prop3N string + Chance3N int + Parameter3N string + Min3N int + Max3N int + Prop4N string + Chance4N int + Parameter4N string + Min4N int + Max4N int + Prop5N string + Chance5N int + Parameter5N string + Min5N int + Max5N int + Prop6N string + Chance6N int + Parameter6N string + Min6N int + Max6N int + Prop1H string + Chance1H int + Parameter1H string + Min1H int + Max1H int + Prop2H string + Chance2H int + Parameter2H string + Min2H int + Max2H int + Prop3H string + Chance3H int + Parameter3H string + Min3H int + Max3H int + Prop4H string + Chance4H int + Parameter4H string + Min4H int + Max4H int + Prop5H string + Chance5H int + Parameter5H string + Min5H int + Max5H int + Prop6H string + Chance6H int + Parameter6H string + Min6H int + Max6H int + + // EOL int // unused +} + +// MonProps stores all of the MonPropRecords +var MonProps map[string]*MonPropRecord //nolint:gochecknoglobals // Currently global by design, only written once + +// LoadMonProps loads Monprop records into a map[string]*MonPropRecord +func LoadMonProps(file []byte) { + MonProps = make(map[string]*MonPropRecord) + + d := d2common.LoadDataDictionary(file) + for d.Next() { + record := &MonPropRecord{ + ID: d.String("Id"), + + Prop1: d.String("prop1"), + Chance1: d.Number("chance1"), + Parameter1: d.String("par1"), + Min1: d.Number("min1"), + Max1: d.Number("max1"), + Prop2: d.String("prop2"), + Chance2: d.Number("chance2"), + Parameter2: d.String("par2"), + Min2: d.Number("min2"), + Max2: d.Number("max2"), + Prop3: d.String("prop3"), + Chance3: d.Number("chance3"), + Parameter3: d.String("par3"), + Min3: d.Number("min3"), + Max3: d.Number("max3"), + Prop4: d.String("prop4"), + Chance4: d.Number("chance4"), + Parameter4: d.String("par4"), + Min4: d.Number("min4"), + Max4: d.Number("max4"), + Prop5: d.String("prop5"), + Chance5: d.Number("chance5"), + Parameter5: d.String("par5"), + Min5: d.Number("min5"), + Max5: d.Number("max5"), + Prop6: d.String("prop6"), + Chance6: d.Number("chance6"), + Parameter6: d.String("par6"), + Min6: d.Number("min6"), + Max6: d.Number("max6"), + Prop1N: d.String("prop1 (N)"), + Chance1N: d.Number("chance1 (N)"), + Parameter1N: d.String("par1 (N)"), + Min1N: d.Number("min1 (N)"), + Max1N: d.Number("max1 (N)"), + Prop2N: d.String("prop2 (N)"), + Chance2N: d.Number("chance2 (N)"), + Parameter2N: d.String("par2 (N)"), + Min2N: d.Number("min2 (N)"), + Max2N: d.Number("max2 (N)"), + Prop3N: d.String("prop3 (N)"), + Chance3N: d.Number("chance3 (N)"), + Parameter3N: d.String("par3 (N)"), + Min3N: d.Number("min3 (N)"), + Max3N: d.Number("max3 (N)"), + Prop4N: d.String("prop4 (N)"), + Chance4N: d.Number("chance4 (N)"), + Parameter4N: d.String("par4 (N)"), + Min4N: d.Number("min4 (N)"), + Max4N: d.Number("max4 (N)"), + Prop5N: d.String("prop5 (N)"), + Chance5N: d.Number("chance5 (N)"), + Parameter5N: d.String("par5 (N)"), + Min5N: d.Number("min5 (N)"), + Max5N: d.Number("max5 (N)"), + Prop6N: d.String("prop6 (N)"), + Chance6N: d.Number("chance6 (N)"), + Parameter6N: d.String("par6 (N)"), + Min6N: d.Number("min6 (N)"), + Max6N: d.Number("max6 (N)"), + Prop1H: d.String("prop1 (H)"), + Chance1H: d.Number("chance1 (H)"), + Parameter1H: d.String("par1 (H)"), + Min1H: d.Number("min1 (H)"), + Max1H: d.Number("max1 (H)"), + Prop2H: d.String("prop2 (H)"), + Chance2H: d.Number("chance2 (H)"), + Parameter2H: d.String("par2 (H)"), + Min2H: d.Number("min2 (H)"), + Max2H: d.Number("max2 (H)"), + Prop3H: d.String("prop3 (H)"), + Chance3H: d.Number("chance3 (H)"), + Parameter3H: d.String("par3 (H)"), + Min3H: d.Number("min3 (H)"), + Max3H: d.Number("max3 (H)"), + Prop4H: d.String("prop4 (H)"), + Chance4H: d.Number("chance4 (H)"), + Parameter4H: d.String("par4 (H)"), + Min4H: d.Number("min4 (H)"), + Max4H: d.Number("max4 (H)"), + Prop5H: d.String("prop5 (H)"), + Chance5H: d.Number("chance5 (H)"), + Parameter5H: d.String("par5 (H)"), + Min5H: d.Number("min5 (H)"), + Max5H: d.Number("max5 (H)"), + Prop6H: d.String("prop6 (H)"), + Chance6H: d.Number("chance6 (H)"), + Parameter6H: d.String("par6 (H)"), + Min6H: d.Number("min6 (H)"), + Max6H: d.Number("max6 (H)"), + } + MonProps[record.ID] = record + } + + if d.Err != nil { + panic(d.Err) + } + + log.Printf("Loaded %d MonProp records", len(MonProps)) +} diff --git a/d2common/d2resource/resource_paths.go b/d2common/d2resource/resource_paths.go index 413d6db0..69318201 100644 --- a/d2common/d2resource/resource_paths.go +++ b/d2common/d2resource/resource_paths.go @@ -197,6 +197,8 @@ const ( TreasureClass = "/data/global/excel/TreasureClassEx.txt" States = "/data/global/excel/states.txt" + MonProp = "/data/global/excel/Monprop.txt" + // --- Animations --- ObjectData = "/data/global/objects"