mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2025-02-03 15:17:04 -05:00
114 lines
3.3 KiB
Go
114 lines
3.3 KiB
Go
package d2datadict
|
|
|
|
import (
|
|
"log"
|
|
|
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
|
)
|
|
|
|
//MonsterLevelRecord represents a single row in monlvl.txt
|
|
type MonsterLevelRecord struct {
|
|
|
|
//The level
|
|
Level int
|
|
|
|
//Values for Battle.net
|
|
BattleNet monsterLevelValues
|
|
|
|
//Values for ladder/single player/lan
|
|
Ladder monsterLevelValues
|
|
}
|
|
|
|
type monsterLevelValues struct {
|
|
//Armor class
|
|
//An AC is calcuated as (MonLvl.txt Ac * Monstats.txt AC) / 100)
|
|
ArmorClass int
|
|
ArmorClassNightmare int
|
|
ArmorClassHell int
|
|
|
|
//To hit, influences ToHit values for both attacks
|
|
// (MonLvl.txt TH * Monstats.txt A1TH
|
|
// and MonLvl.txt TH * Monstats.txt A2TH) / 100
|
|
ToHit int
|
|
ToHitNightmare int
|
|
ToHitHell int
|
|
|
|
//Hitpoints, influences both minimum and maximum HP
|
|
//(MonLvl.txt HP * Monstats.txt minHP) / 100
|
|
// and MonLvl.txt HP * Monstats.txt maxHP) / 100
|
|
Hitpoints int
|
|
HitpointsNightmare int
|
|
HitpointsHell int
|
|
|
|
//Damage, influences minimum and maximum damage for both attacks
|
|
//MonLvl.txt DM * Monstats.txt A1MinD) / 100
|
|
// and MonLvl.txt DM * Monstats.txt A1MaxD) / 100
|
|
// and MonLvl.txt DM * Monstats.txt A2MinD) / 100
|
|
// and MonLvl.txt DM * Monstats.txt A2MaxD) / 100
|
|
Damage int
|
|
DamageNightmare int
|
|
DamageHell int
|
|
|
|
//Experience points
|
|
//The formula is (MonLvl.txt XP * Monstats.txt Exp) / 100
|
|
Experience int
|
|
ExperienceNightmare int
|
|
ExperienceHell int
|
|
}
|
|
|
|
//MonsterLevels stores the MonsterLevelRecords
|
|
var MonsterLevels map[int]*MonsterLevelRecord
|
|
|
|
//LoadMonsterLevels loads LoadMonsterLevelRecords into MonsterLevels
|
|
func LoadMonsterLevels(file []byte) {
|
|
MonsterLevels = make(map[int]*MonsterLevelRecord)
|
|
|
|
d := d2common.LoadDataDictionary(file)
|
|
for d.Next() {
|
|
record := &MonsterLevelRecord{
|
|
Level: d.Number("Level"),
|
|
BattleNet: monsterLevelValues{
|
|
ArmorClass: d.Number("AC"),
|
|
ArmorClassNightmare: d.Number("AC(N)"),
|
|
ArmorClassHell: d.Number("AC(H)"),
|
|
ToHit: d.Number("TH"),
|
|
ToHitNightmare: d.Number("TH (N)"),
|
|
ToHitHell: d.Number("TH (H)"),
|
|
Hitpoints: d.Number("HP"),
|
|
HitpointsNightmare: d.Number("HP (N)"),
|
|
HitpointsHell: d.Number("HP (H)"),
|
|
Damage: d.Number("DM"),
|
|
DamageNightmare: d.Number("DM (N)"),
|
|
DamageHell: d.Number("DM (H)"),
|
|
Experience: d.Number("XP"),
|
|
ExperienceNightmare: d.Number("XP (N)"),
|
|
ExperienceHell: d.Number("XP (H)"),
|
|
},
|
|
Ladder: monsterLevelValues{
|
|
ArmorClass: d.Number("L-AC"),
|
|
ArmorClassNightmare: d.Number("L-AC(N)"),
|
|
ArmorClassHell: d.Number("L-AC(H)"),
|
|
ToHit: d.Number("L-TH"),
|
|
ToHitNightmare: d.Number("L-TH (N)"),
|
|
ToHitHell: d.Number("L-TH (H)"),
|
|
Hitpoints: d.Number("L-HP"),
|
|
HitpointsNightmare: d.Number("L-HP (N)"),
|
|
HitpointsHell: d.Number("L-HP (H)"),
|
|
Damage: d.Number("L-DM"),
|
|
DamageNightmare: d.Number("L-DM (N)"),
|
|
DamageHell: d.Number("L-DM (H)"),
|
|
Experience: d.Number("L-XP"),
|
|
ExperienceNightmare: d.Number("L-XP (N)"),
|
|
ExperienceHell: d.Number("L-XP (H)"),
|
|
},
|
|
}
|
|
MonsterLevels[record.Level] = record
|
|
}
|
|
|
|
if d.Err != nil {
|
|
panic(d.Err)
|
|
}
|
|
|
|
log.Printf("Loaded %d MonsterLevel records", len(MonsterLevels))
|
|
}
|