pet_home_server/src/server/game/mod/handbook/Handbook.go
2026-03-24 18:52:49 +08:00

95 lines
1.9 KiB
Go

package handbook
import (
"errors"
"fmt"
handbookCfg "server/conf/handbook"
startMergeCfg "server/conf/start_merge"
"server/game/mod/item"
"server/msg"
)
type Handbook struct {
BookList map[int]int `json:"BookList"`
Collect map[string]struct{}
}
const (
STATUS_IDLE = 0
STATUS_REWARD = 1
)
func (h *Handbook) InitData() {
if h.Collect == nil {
h.Collect = make(map[string]struct{})
}
if h.BookList == nil {
h.BookList = make(map[int]int)
InitChess := startMergeCfg.GetInitChessList()
for _, v := range InitChess {
h.BookList[v] = STATUS_IDLE
}
}
}
// 解锁图鉴
func (h *Handbook) SetHandbook(id int) bool {
if id <= 0 {
return false
}
_, ok := h.BookList[id]
if ok {
return false
}
h.BookList[id] = STATUS_IDLE
return true
}
// 领取图鉴奖励
func (h *Handbook) GetHandbookReward(id int) error {
status, ok := h.BookList[id]
if !ok {
return errors.New("图鉴未解锁")
}
if status == STATUS_REWARD {
return errors.New("图鉴奖励已领取")
}
h.BookList[id] = STATUS_REWARD
return nil
}
func (h *Handbook) CollectItem(id string, AllChess []int) ([]*item.Item, error) {
for _, v := range AllChess {
if _, ok := h.BookList[v]; !ok {
return nil, fmt.Errorf("图鉴未解锁")
}
}
if _, ok := h.Collect[id]; ok {
return nil, fmt.Errorf("已经领取过该奖励")
}
reward := handbookCfg.GetHandbookReward(id)
if reward == nil {
return nil, fmt.Errorf("奖励不存在")
}
h.Collect[id] = struct{}{}
return reward, nil
}
func (h *Handbook) BackData() *msg.Handbook {
bookList := make([]*msg.HandbookInfo, 0, len(h.BookList))
for k, v := range h.BookList {
bookList = append(bookList, &msg.HandbookInfo{
ChessId: int32(k),
Status: int32(v),
})
}
collect := make([]string, 0, len(h.Collect))
for k := range h.Collect {
collect = append(collect, k)
}
return &msg.Handbook{
Handbooks: bookList,
Collect: collect,
}
}