95 lines
1.9 KiB
Go
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,
|
|
}
|
|
}
|