pet_home_server/src/server/game/PlayerMod.go
2024-11-29 10:51:04 +08:00

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
}