274 lines
6.9 KiB
Go
274 lines
6.9 KiB
Go
package game
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/gob"
|
|
"encoding/json"
|
|
"fmt"
|
|
"server/db"
|
|
"server/game/mod/activity"
|
|
"server/game/mod/avatar"
|
|
"server/game/mod/base"
|
|
"server/game/mod/card"
|
|
"server/game/mod/champship"
|
|
"server/game/mod/charge"
|
|
"server/game/mod/chess"
|
|
"server/game/mod/dailyTask"
|
|
"server/game/mod/decorate"
|
|
"server/game/mod/endless"
|
|
"server/game/mod/face"
|
|
"server/game/mod/friend"
|
|
"server/game/mod/guild"
|
|
"server/game/mod/handbook"
|
|
"server/game/mod/invite"
|
|
"server/game/mod/limitedTimeEvent"
|
|
"server/game/mod/mail"
|
|
"server/game/mod/order"
|
|
"server/game/mod/piggyBank"
|
|
"server/game/mod/sevenLogin"
|
|
Var "server/game/mod/var"
|
|
"server/pkg/github.com/name5566/leaf/log"
|
|
"time"
|
|
)
|
|
|
|
type PlayerModData struct {
|
|
*PlayerData
|
|
Data db.SqlModStruct
|
|
ModList PlayerModList
|
|
}
|
|
|
|
// PlayerModList 玩家模块列表
|
|
type PlayerModList struct {
|
|
Base base.Base `json:"base"`
|
|
Chess chess.ChessBorad `json:"chess"`
|
|
Handbook handbook.Handbook `json:"handbook"`
|
|
Order order.OrderMod `json:"order"`
|
|
Decorate decorate.Decorate `json:"decorate"`
|
|
Card card.CardMod `json:"card"`
|
|
Var Var.Var `json:"var"`
|
|
Guild guild.Guild `json:"guild"`
|
|
DailyTask dailyTask.DailyTaskMod `json:"dailyTask"`
|
|
Face face.FaceMod `json:"face"`
|
|
Avatar avatar.AvatarMod `json:"avatar"`
|
|
SevenLogin sevenLogin.SevenLoginMod `json:"sevenLogin"`
|
|
Activity activity.ActivityMod `json:"activity"`
|
|
LimitedTimeEvent limitedTimeEvent.LimitedTimeEventMod `json:"limitedTimeEvent"`
|
|
Friend friend.FriendMod `json:"friend"`
|
|
Mail mail.MailMod `json:"mail"`
|
|
Charge charge.ChargeMod `json:"charge"`
|
|
Endless endless.EndlessMod `json:"endless"`
|
|
PiggyBank piggyBank.PiggyBankMod `json:"piggyBank"`
|
|
Champship champship.ChampshipMod `json:"champship"`
|
|
Invite invite.InviteMod `json:"invite"`
|
|
}
|
|
|
|
func (p *PlayerModData) LoadDataFromDB(dwUin interface{}) bool {
|
|
sqlStr := "SELECT * FROM t_player_mod WHERE dwUin = ?"
|
|
p.Data = db.SqlModStruct{}
|
|
if err := db.SqlDb.Get(&p.Data, sqlStr, dwUin.(int32)); err != nil {
|
|
|
|
p.IsHaveDataDb = false
|
|
} else {
|
|
p.IsHaveDataDb = true
|
|
}
|
|
p.Data.DwUin = dwUin.(int32)
|
|
return true
|
|
}
|
|
|
|
func (p *PlayerModData) ClearData() bool {
|
|
return true
|
|
}
|
|
|
|
func (p *PlayerModData) SaveDataFromDB(Key interface{}) bool {
|
|
//序列化数据
|
|
db.FormatAllMemUpdateDb(&p.Data, "t_player_mod", "dwUin")
|
|
p.IsHaveDataDb = true
|
|
return true
|
|
}
|
|
|
|
func (p *PlayerModData) ReqModData(buf []byte) {
|
|
|
|
}
|
|
|
|
// 推送基础数据
|
|
func (p *PlayerModData) Reconnect(b bool) []byte {
|
|
|
|
return []byte{}
|
|
}
|
|
|
|
func (p *PlayerModData) InitMod() (bool, error) {
|
|
playerModList := PlayerModList{}
|
|
if len(p.Data.ModData) > 0 {
|
|
buf := bytes.NewBuffer(p.Data.ModData)
|
|
decoder := gob.NewDecoder(buf)
|
|
err := decoder.Decode(&playerModList)
|
|
if err != nil {
|
|
log.Debug("playmod get data failed, err:%v\n", err)
|
|
return false, fmt.Errorf("playmod get data failed, err:%v", err)
|
|
}
|
|
}
|
|
p.ModList = playerModList
|
|
is_update := false
|
|
|
|
// 初始化棋盘模块
|
|
|
|
if p.ModList.Chess.IsEmpty() {
|
|
var chessMod chess.ChessBorad
|
|
chessMod.InitData()
|
|
p.ModList.Chess = chessMod
|
|
is_update = true
|
|
}
|
|
|
|
p.ModList.Handbook.InitData()
|
|
p.ModList.Order.InitData()
|
|
p.ModList.Decorate.InitData()
|
|
p.ModList.Card.InitData()
|
|
p.ModList.Var.InitData()
|
|
p.ModList.Guild.InitData()
|
|
p.ModList.DailyTask.InitData()
|
|
p.ModList.Face.InitData()
|
|
p.ModList.Avatar.InitData()
|
|
p.ModList.Base.InitData(int(p.Data.DwUin))
|
|
p.ModList.SevenLogin.InitData()
|
|
p.ModList.Activity.InitData()
|
|
p.ModList.LimitedTimeEvent.InitData()
|
|
p.ModList.Friend.InitData()
|
|
p.ModList.Mail.InitData()
|
|
p.ModList.Charge.InitData()
|
|
p.ModList.Endless.InitData()
|
|
p.ModList.Invite.InitData()
|
|
|
|
return is_update, nil
|
|
}
|
|
|
|
type PlayerMod struct {
|
|
mod_list PlayerModList
|
|
is_update bool
|
|
}
|
|
|
|
func (p *PlayerMod) save() {
|
|
p.is_update = true
|
|
}
|
|
|
|
func (p *PlayerMod) ClearData(player *Player) {
|
|
ChessMod := p.getChessMod()
|
|
if len(ChessMod.ChessMap) > 0 && len(ChessMod.ChessList) != len(ChessMod.ChessMap) {
|
|
log.Debug("uid: %d, SaveData, chess error ", player.M_DwUin)
|
|
return
|
|
}
|
|
if p.is_update {
|
|
//序列化模块
|
|
var buf bytes.Buffer
|
|
encode := gob.NewEncoder(&buf)
|
|
err := encode.Encode(p.mod_list)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
log.Debug("uid: %d, ClearData, playmod", player.M_DwUin)
|
|
modData := &db.SqlModStruct{
|
|
DwUin: player.M_DwUin,
|
|
ModData: buf.Bytes(),
|
|
UpdataTime: int32(time.Now().Unix()),
|
|
}
|
|
|
|
db.SavePlayerModData(modData)
|
|
p.is_update = false
|
|
}
|
|
}
|
|
|
|
func (p *PlayerMod) BackUp(B *PlayerBackUp) {
|
|
modString, _ := json.Marshal(p.mod_list)
|
|
B.PlayMod = modString
|
|
}
|
|
|
|
func (p *PlayerMod) Recover(B *PlayerBackUp) {
|
|
if len(B.PlayMod) > 0 {
|
|
json.Unmarshal(B.PlayMod, &p.mod_list)
|
|
}
|
|
}
|
|
|
|
func (p *PlayerMod) getChessMod() *chess.ChessBorad {
|
|
return &p.mod_list.Chess
|
|
}
|
|
|
|
func (p *PlayerMod) getBaseMod() *base.Base {
|
|
return &p.mod_list.Base
|
|
}
|
|
|
|
func (p *PlayerMod) getHandbookMod() *handbook.Handbook {
|
|
return &p.mod_list.Handbook
|
|
}
|
|
|
|
func (p *PlayerMod) getOrderMod() *order.OrderMod {
|
|
return &p.mod_list.Order
|
|
}
|
|
|
|
func (p *PlayerMod) getDecorateMod() *decorate.Decorate {
|
|
return &p.mod_list.Decorate
|
|
}
|
|
|
|
func (p *PlayerMod) getCardMod() *card.CardMod {
|
|
return &p.mod_list.Card
|
|
}
|
|
|
|
func (p *PlayerMod) getVarMod() *Var.Var {
|
|
return &p.mod_list.Var
|
|
}
|
|
|
|
func (p *PlayerMod) getGuildMod() *guild.Guild {
|
|
return &p.mod_list.Guild
|
|
}
|
|
|
|
func (p *PlayerMod) getDailyTaskMod() *dailyTask.DailyTaskMod {
|
|
return &p.mod_list.DailyTask
|
|
}
|
|
|
|
func (p *PlayerMod) getFaceMod() *face.FaceMod {
|
|
return &p.mod_list.Face
|
|
}
|
|
|
|
func (p *PlayerMod) getAvatarMod() *avatar.AvatarMod {
|
|
return &p.mod_list.Avatar
|
|
}
|
|
|
|
func (p *PlayerMod) getSevenLoginMod() *sevenLogin.SevenLoginMod {
|
|
return &p.mod_list.SevenLogin
|
|
}
|
|
|
|
func (p *PlayerMod) getActivityMod() *activity.ActivityMod {
|
|
return &p.mod_list.Activity
|
|
}
|
|
|
|
func (p *PlayerMod) getLimitedTimeEventMod() *limitedTimeEvent.LimitedTimeEventMod {
|
|
return &p.mod_list.LimitedTimeEvent
|
|
}
|
|
|
|
func (p *PlayerMod) getFriendMod() *friend.FriendMod {
|
|
return &p.mod_list.Friend
|
|
}
|
|
|
|
func (p *PlayerMod) getMailMod() *mail.MailMod {
|
|
return &p.mod_list.Mail
|
|
}
|
|
|
|
func (p *PlayerMod) getChargeMod() *charge.ChargeMod {
|
|
return &p.mod_list.Charge
|
|
}
|
|
|
|
func (p *PlayerMod) getEndlessMod() *endless.EndlessMod {
|
|
return &p.mod_list.Endless
|
|
}
|
|
|
|
func (p *PlayerMod) getPiggyBankMod() *piggyBank.PiggyBankMod {
|
|
return &p.mod_list.PiggyBank
|
|
}
|
|
|
|
func (p *PlayerMod) getChampshipMod() *champship.ChampshipMod {
|
|
return &p.mod_list.Champship
|
|
}
|
|
|
|
func (p *PlayerMod) getInviteMod() *invite.InviteMod {
|
|
return &p.mod_list.Invite
|
|
}
|