From 5edf314b487221ff0e856008d7e26d651b331187 Mon Sep 17 00:00:00 2001 From: Ripolak Date: Sat, 20 Jun 2020 18:54:23 +0300 Subject: [PATCH] Feature/gems (#347) * Add GemsRecord struct * Implement LoadGems function. * Add condition for loading gems for excluding a visually separating line. * Add 'gems.txt' file to resource_paths.go * Add call for loading gems in main.go * Remove spaces * Add logging for gems loading. --- d2common/d2data/d2datadict/gems.go | 108 ++++++++++++++++++++++++++ d2common/d2resource/resource_paths.go | 1 + main.go | 1 + 3 files changed, 110 insertions(+) create mode 100644 d2common/d2data/d2datadict/gems.go diff --git a/d2common/d2data/d2datadict/gems.go b/d2common/d2data/d2datadict/gems.go new file mode 100644 index 00000000..532c7a4a --- /dev/null +++ b/d2common/d2data/d2datadict/gems.go @@ -0,0 +1,108 @@ +package d2datadict + +import ( + "github.com/OpenDiablo2/OpenDiablo2/d2common" + "log" +) + +type GemsRecord struct { + Name string + Letter string + Transform int + Code string + Nummods int + WeaponMod1Code string + WeaponMod1Param int + WeaponMod1Min int + WeaponMod1Max int + WeaponMod2Code string + WeaponMod2Param int + WeaponMod2Min int + WeaponMod2Max int + WeaponMod3Code string + WeaponMod3Param int + WeaponMod3Min int + WeaponMod3Max int + HelmMod1Code string + HelmMod1Param int + HelmMod1Min int + HelmMod1Max int + HelmMod2Code string + HelmMod2Param int + HelmMod2Min int + HelmMod2Max int + HelmMod3Code string + HelmMod3Param int + HelmMod3Min int + HelmMod3Max int + ShieldMod1Code string + ShieldMod1Param int + ShieldMod1Min int + ShieldMod1Max int + ShieldMod2Code string + ShieldMod2Param int + ShieldMod2Min int + ShieldMod2Max int + ShieldMod3Code string + ShieldMod3Param int + ShieldMod3Min int + ShieldMod3Max int +} + +func LoadGems(file []byte) { + d := d2common.LoadDataDictionary(string(file)) + var Gems []*GemsRecord + for idx, _ := range d.Data { + if d.GetString("name", idx) != "Expansion" { + /* + "Expansion" is the only field in line 36 of /data/global/excel/gems.txt and is only used to visually + separate base-game gems and expansion runes. + */ + gem := &GemsRecord{ + Name: d.GetString("name", idx), + Letter: d.GetString("letter", idx), + Transform: d.GetNumber("transform", idx), + Code: d.GetString("code", idx), + Nummods: d.GetNumber("nummods", idx), + WeaponMod1Code: d.GetString("weaponMod1Code", idx), + WeaponMod1Param: d.GetNumber("weaponMod1Param", idx), + WeaponMod1Min: d.GetNumber("weaponMod1Min", idx), + WeaponMod1Max: d.GetNumber("weaponMod1Max", idx), + WeaponMod2Code: d.GetString("weaponMod2Code", idx), + WeaponMod2Param: d.GetNumber("weaponMod2Param", idx), + WeaponMod2Min: d.GetNumber("weaponMod2Min", idx), + WeaponMod2Max: d.GetNumber("weaponMod2Max", idx), + WeaponMod3Code: d.GetString("weaponMod3Code", idx), + WeaponMod3Param: d.GetNumber("weaponMod3Param", idx), + WeaponMod3Min: d.GetNumber("weaponMod3Min", idx), + WeaponMod3Max: d.GetNumber("weaponMod3Max", idx), + HelmMod1Code: d.GetString("helmMod1Code", idx), + HelmMod1Param: d.GetNumber("helmMod1Param", idx), + HelmMod1Min: d.GetNumber("helmMod1Min", idx), + HelmMod1Max: d.GetNumber("helmMod1Max", idx), + HelmMod2Code: d.GetString("helmMod2Code", idx), + HelmMod2Param: d.GetNumber("helmMod2Param", idx), + HelmMod2Min: d.GetNumber("helmMod2Min", idx), + HelmMod2Max: d.GetNumber("helmMod2Max", idx), + HelmMod3Code: d.GetString("helmMod3Code", idx), + HelmMod3Param: d.GetNumber("helmMod3Param", idx), + HelmMod3Min: d.GetNumber("helmMod3Min", idx), + HelmMod3Max: d.GetNumber("helmMod3Max", idx), + ShieldMod1Code: d.GetString("shieldMod1Code", idx), + ShieldMod1Param: d.GetNumber("shieldMod1Param", idx), + ShieldMod1Min: d.GetNumber("shieldMod1Min", idx), + ShieldMod1Max: d.GetNumber("shieldMod1Max", idx), + ShieldMod2Code: d.GetString("shieldMod2Code", idx), + ShieldMod2Param: d.GetNumber("shieldMod2Param", idx), + ShieldMod2Min: d.GetNumber("shieldMod2Min", idx), + ShieldMod2Max: d.GetNumber("shieldMod2Max", idx), + ShieldMod3Code: d.GetString("shieldMod3Code", idx), + ShieldMod3Param: d.GetNumber("shieldMod3Param", idx), + ShieldMod3Min: d.GetNumber("shieldMod3Min", idx), + ShieldMod3Max: d.GetNumber("shieldMod3Max", idx), + } + Gems = append(Gems, gem) + } + } + log.Printf("Loaded %d Gems records", len(Gems)) +} diff --git a/d2common/d2resource/resource_paths.go b/d2common/d2resource/resource_paths.go index 11d89a34..2eb6d210 100644 --- a/d2common/d2resource/resource_paths.go +++ b/d2common/d2resource/resource_paths.go @@ -191,6 +191,7 @@ const ( Armor = "/data/global/excel/armor.txt" Misc = "/data/global/excel/misc.txt" UniqueItems = "/data/global/excel/UniqueItems.txt" + Gems = "/data/global/excel/gems.txt" // --- Affixes --- diff --git a/main.go b/main.go index 3c8fbc92..29758256 100644 --- a/main.go +++ b/main.go @@ -400,6 +400,7 @@ func loadDataDict() error { {d2resource.MonStats, d2datadict.LoadMonStats}, {d2resource.Hireling, d2datadict.LoadHireling}, {d2resource.Experience, d2datadict.LoadExperienceBreakpoints}, + {d2resource.Gems, d2datadict.LoadGems}, } for _, entry := range entries {