Add monequip.txt loader (#662)

This commit is contained in:
AndrejMijic 2020-08-01 00:24:47 +02:00 committed by GitHub
parent 247bda97c6
commit 3fea5a096d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 98 additions and 0 deletions

View File

@ -264,6 +264,7 @@ func (a *App) loadDataDict() error {
{d2resource.PetType, d2datadict.LoadPetTypes},
{d2resource.NPC, d2datadict.LoadNPCs},
{d2resource.MonsterUniqueModifier, d2datadict.LoadMonsterUniqueModifiers},
{d2resource.MonsterEquipment, d2datadict.LoadMonsterEquipment},
{d2resource.UniqueAppellation, d2datadict.LoadUniqueAppellations},
{d2resource.MonsterLevel, d2datadict.LoadMonsterLevels},
{d2resource.MonsterSound, d2datadict.LoadMonsterSounds},

View File

@ -0,0 +1,80 @@
package d2datadict
import (
"log"
"github.com/OpenDiablo2/OpenDiablo2/d2common"
)
//MonsterEquipmentRecord represents a single line in monequip.txt
//Information gathered from [https://d2mods.info/forum/kb/viewarticle?a=365]
type MonsterEquipmentRecord struct {
//Name of monster, pointer to MonStats.txt
Monster string
//If true, monster is created by level, otherwise created by skill
OnInit bool
//Not written in description, only appear on monsters with OnInit false
//Level of skill for which this equipment row can be used?
Level int
//Code of item
Item1 string
//Slot of equipped item
Location1 string
//Item quality
Mod1 int
//Ditto, 3 items maximum
Item2 string
Location2 string
Mod2 int
Item3 string
Location3 string
Mod3 int
}
//MonsterEquipment stores the MonsterEquipmentRecords
var MonsterEquipment map[string][]*MonsterEquipmentRecord //nolint:gochecknoglobals // Currently global by design
//LoadMonsterEquipment loads MonsterEquipmentRecords into MonsterEquipment
func LoadMonsterEquipment(file []byte) {
MonsterEquipment = make(map[string][]*MonsterEquipmentRecord)
d := d2common.LoadDataDictionary(file)
for d.Next() {
record := &MonsterEquipmentRecord{
Monster: d.String("monster"),
OnInit: d.Bool("oninit"),
Level: d.Number("level"),
Item1: d.String("item1"),
Location1: d.String("loc1"),
Mod1: d.Number("mod1"),
Item2: d.String("item2"),
Location2: d.String("loc2"),
Mod2: d.Number("mod2"),
Item3: d.String("item3"),
Location3: d.String("loc3"),
Mod3: d.Number("mod3"),
}
if _, ok := MonsterEquipment[record.Monster]; !ok {
MonsterEquipment[record.Monster] = make([]*MonsterEquipmentRecord, 0)
}
MonsterEquipment[record.Monster] = append(MonsterEquipment[record.Monster], record)
}
if d.Err != nil {
panic(d.Err)
}
length := 0
for k := range MonsterEquipment {
length += len(MonsterEquipment[k])
}
log.Printf("Loaded %d MonsterEquipment records", length)
}

View File

@ -0,0 +1,16 @@
package d2enum
//ItemQuality is used for enumerating item quality values
type ItemQuality int
const (
LowQuality ItemQuality = iota + 1
Normal
Superior
Magic
Set
Rare
Unique
Crafted
Tempered
)

View File

@ -208,6 +208,7 @@ const (
PetType = "/data/global/excel/pettype.txt"
NPC = "/data/global/excel/npc.txt"
MonsterUniqueModifier = "/data/global/excel/monumod.txt"
MonsterEquipment = "/data/global/excel/monequip.txt"
UniqueAppellation = "/data/global/excel/UniqueAppellation.txt"
MonsterLevel = "/data/global/excel/monlvl.txt"
MonsterSound = "/data/global/excel/monsounds.txt"