1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-09-30 23:25:57 -04:00
OpenDiablo2/d2core/d2records/skill_description_loader.go
presiyan-ivanov 7661b81576
Initial left & right skill select panel implementation. HeroSkill serialization cleanup. (#783)
- Clicking the active left/right skill now opens a skill select panel.
Only the available skills for the hero, which are valid for the panel type are shown.
Clicking on a skill from the skill select panel makes it the new active skill for the hero.

- Hovering a skill in the skill select panel shows the skill name +
skill description.

- New command which learns all skills for a specific
class(not persisted to a save file yet) - e.g. `learnskills ama` will learn
skills for the Amazon class.

- Initialize HeroSkill.shallowHeroSkill struct in the hero state factory, so we can use it
when we serialize the HeroSkill to packets/game save files.

- The parsed Skill.ListRow is now a number instead  of string.

Co-authored-by: Presiyan Ivanov <presiyan-ivanov@users.noreply.github.com>
2020-10-22 16:53:18 -04:00

148 lines
4.3 KiB
Go

package d2records
import (
"log"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2calculation/d2parser"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2txt"
)
// Loadrecords loads skill description records from skilldesc.txt
//nolint:funlen // doesn't make sense to split
func skillDescriptionLoader(r *RecordManager, d *d2txt.DataDictionary) error {
records := make(map[string]*SkillDescriptionRecord)
parser := d2parser.New()
parser.SetCurrentReference("skill", "TODO: connect skill with description!") //nolint:godox // TODO: Connect skill with description.
for d.Next() {
record := &SkillDescriptionRecord{
d.String("skilldesc"),
d.Number("SkillPage"),
d.Number("SkillRow"),
d.Number("SkillColumn"),
d.Number("ListRow"),
d.String("ListPool"),
d.Number("IconCel"),
d.String("str name"),
d.String("str short"),
d.String("str long"),
d.String("str alt"),
d.String("str mana"),
d.String("descdam"),
parser.Parse(d.String("ddam calc1")),
parser.Parse(d.String("ddam calc2")),
d.String("p1dmelem"),
parser.Parse(d.String("p1dmmin")),
parser.Parse(d.String("p1dmmax")),
d.String("p2dmelem"),
parser.Parse(d.String("p2dmmin")),
parser.Parse(d.String("p2dmmax")),
d.String("p3dmelem"),
parser.Parse(d.String("p3dmmin")),
parser.Parse(d.String("p3dmmax")),
d.String("descatt"),
d.String("descmissile1"),
d.String("descmissile2"),
d.String("descmissile3"),
d.String("descline1"),
d.String("desctexta1"),
d.String("desctextb1"),
parser.Parse(d.String("desccalca1")),
parser.Parse(d.String("desccalcb1")),
d.String("descline2"),
d.String("desctexta2"),
d.String("desctextb2"),
parser.Parse(d.String("desccalca2")),
parser.Parse(d.String("desccalcb2")),
d.String("descline3"),
d.String("desctexta3"),
d.String("desctextb3"),
parser.Parse(d.String("desccalca3")),
parser.Parse(d.String("desccalcb3")),
d.String("descline4"),
d.String("desctexta4"),
d.String("desctextb4"),
parser.Parse(d.String("desccalca4")),
parser.Parse(d.String("desccalcb4")),
d.String("descline5"),
d.String("desctexta5"),
d.String("desctextb5"),
parser.Parse(d.String("desccalca5")),
parser.Parse(d.String("desccalcb5")),
d.String("descline6"),
d.String("desctexta6"),
d.String("desctextb6"),
parser.Parse(d.String("desccalca6")),
parser.Parse(d.String("desccalcb6")),
d.String("dsc2line1"),
d.String("dsc2texta1"),
d.String("dsc2textb1"),
parser.Parse(d.String("dsc2calca1")),
parser.Parse(d.String("dsc2calcb1")),
d.String("dsc2line2"),
d.String("dsc2texta2"),
d.String("dsc2textb2"),
parser.Parse(d.String("dsc2calca2")),
parser.Parse(d.String("dsc2calcb2")),
d.String("dsc2line3"),
d.String("dsc2texta3"),
d.String("dsc2textb3"),
parser.Parse(d.String("dsc2calca3")),
parser.Parse(d.String("dsc2calcb3")),
d.String("dsc2line4"),
d.String("dsc2texta4"),
d.String("dsc2textb4"),
parser.Parse(d.String("dsc2calca4")),
parser.Parse(d.String("dsc2calcb4")),
d.String("dsc3line1"),
d.String("dsc3texta1"),
d.String("dsc3textb1"),
parser.Parse(d.String("dsc3calca1")),
parser.Parse(d.String("dsc3calcb1")),
d.String("dsc3line2"),
d.String("dsc3texta2"),
d.String("dsc3textb2"),
parser.Parse(d.String("dsc3calca2")),
parser.Parse(d.String("dsc3calcb2")),
d.String("dsc3line3"),
d.String("dsc3texta3"),
d.String("dsc3textb3"),
parser.Parse(d.String("dsc3calca3")),
parser.Parse(d.String("dsc3calcb3")),
d.String("dsc3line4"),
d.String("dsc3texta4"),
d.String("dsc3textb4"),
parser.Parse(d.String("dsc3calca4")),
parser.Parse(d.String("dsc3calcb4")),
d.String("dsc3line5"),
d.String("dsc3texta5"),
d.String("dsc3textb5"),
parser.Parse(d.String("dsc3calca5")),
parser.Parse(d.String("dsc3calcb5")),
d.String("dsc3line6"),
d.String("dsc3texta6"),
d.String("dsc3textb6"),
parser.Parse(d.String("dsc3calca6")),
parser.Parse(d.String("dsc3calcb6")),
d.String("dsc3line7"),
d.String("dsc3texta7"),
d.String("dsc3textb7"),
parser.Parse(d.String("dsc3calca7")),
parser.Parse(d.String("dsc3calcb7")),
}
records[record.Name] = record
}
if d.Err != nil {
return d.Err
}
r.Skill.Descriptions = records
log.Printf("Loaded %d Skill Description records", len(records))
return nil
}