Files
lunar-tear/server/internal/masterdata/cageornament.go
T

54 lines
1.4 KiB
Go

package masterdata
import (
"log"
"lunar-tear/server/internal/utils"
)
type CageOrnamentReward struct {
PossessionType int32
PossessionId int32
Count int32
}
type CageOrnamentCatalog struct {
ornamentToRewardId map[int32]int32
rewards map[int32]CageOrnamentReward
}
func (c *CageOrnamentCatalog) LookupReward(cageOrnamentId int32) (CageOrnamentReward, bool) {
rewardId, ok := c.ornamentToRewardId[cageOrnamentId]
if !ok || rewardId == 0 {
return CageOrnamentReward{}, false
}
entry, ok := c.rewards[rewardId]
return entry, ok
}
func LoadCageOrnamentCatalog() *CageOrnamentCatalog {
ornaments, err := utils.ReadTable[EntityMCageOrnament]("m_cage_ornament")
if err != nil {
log.Fatalf("load cage ornament table: %v", err)
}
rewards, err := utils.ReadTable[EntityMCageOrnamentReward]("m_cage_ornament_reward")
if err != nil {
log.Fatalf("load cage ornament reward table: %v", err)
}
cat := &CageOrnamentCatalog{
ornamentToRewardId: make(map[int32]int32, len(ornaments)),
rewards: make(map[int32]CageOrnamentReward, len(rewards)),
}
for _, o := range ornaments {
cat.ornamentToRewardId[o.CageOrnamentId] = o.CageOrnamentRewardId
}
for _, r := range rewards {
cat.rewards[r.CageOrnamentRewardId] = CageOrnamentReward{
PossessionType: r.PossessionType,
PossessionId: r.PossessionId,
Count: r.Count,
}
}
return cat
}