pet_home_server/src/server/game/PlayerMod.go
2024-12-25 11:11:06 +08:00

348 lines
9.2 KiB
Go

package game
import (
"bytes"
"encoding/gob"
"fmt"
"server/db"
"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/friendTreasure.go"
guesscolor "server/game/mod/guessColor"
"server/game/mod/guild"
"server/game/mod/handbook"
"server/game/mod/invite"
"server/game/mod/item"
"server/game/mod/kv"
"server/game/mod/limitedTimeEvent"
"server/game/mod/mail"
"server/game/mod/mining"
"server/game/mod/order"
"server/game/mod/piggyBank"
"server/game/mod/playroom"
"server/game/mod/race"
"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 // 基础信息
Chess chess.ChessBorad // 棋盘
Handbook handbook.Handbook // 图鉴
Order order.OrderMod //订单
Decorate decorate.Decorate //装饰
Card card.CardMod //卡牌
Var Var.Var // 变量
Guild guild.Guild // 引导
DailyTask dailyTask.DailyTaskMod // 每日任务
Face face.FaceMod // 头像
Avatar avatar.AvatarMod // 头像框
SevenLogin sevenLogin.SevenLoginMod // 七天签到
LimitedTimeEvent limitedTimeEvent.LimitedTimeEventMod // 限时事件
Friend friend.FriendMod // 好友
Mail mail.MailMod // 邮件
Charge charge.ChargeMod // 商店充值
Endless endless.EndlessMod // 无尽礼包
PiggyBank piggyBank.PiggyBankMod // 小猪存钱
Champship champship.ChampshipMod // 锦标赛
Invite invite.InviteMod // 邀请
Kv kv.KvMod // 客户端数据
Mining mining.MiningMod // 挖矿活动
Item item.ItemMod // 道具
GuessColor guesscolor.GuessColorMod // 猜颜色活动
Race race.RaceMod // 竞赛活动
Playroom playroom.PlayroomMod // 玩家小屋
FriendTreasure friendTreasure.FriendTreasureMod // 好友宝藏
}
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.(int64)); err != nil {
p.IsHaveDataDb = false
} else {
p.IsHaveDataDb = true
}
p.Data.DwUin = dwUin.(int64)
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(player *Player) (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
}
BaseMod := p.ModList.Base
if BaseMod.Uid == 0 {
PlayerBaseMod := player.GetPlayerBaseMod()
BaseMod.Uid = PlayerBaseMod.Data.DwUin
BaseMod.SetAccount(PlayerBaseMod.Data.UserName)
BaseMod.SetLevel(int(PlayerBaseMod.Data.Level))
BaseMod.SetExp(int(PlayerBaseMod.Data.Exp))
BaseMod.SetEnergy(int(PlayerBaseMod.Data.Energy))
BaseMod.SetStar(int(PlayerBaseMod.Data.Star))
BaseMod.SetDiamond(int(PlayerBaseMod.Data.Diamond))
BaseMod.SetRecoverTime(int64(PlayerBaseMod.Data.RecoverTime))
BaseMod.FackBookId = PlayerBaseMod.Data.FaceBookId
BaseMod.SetLoginTime(int64(PlayerBaseMod.Data.LoginTime))
BaseMod.SetLogoutTime(int64(PlayerBaseMod.Data.LogoutTime))
p.ModList.Base = BaseMod
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.LimitedTimeEvent.InitData()
p.ModList.Friend.InitData()
p.ModList.Mail.InitData()
p.ModList.Charge.InitData()
p.ModList.Endless.InitData()
p.ModList.Invite.InitData()
p.ModList.Kv.InitData()
p.ModList.Mining.InitData()
p.ModList.Item.InitData()
p.ModList.GuessColor.InitData()
p.ModList.Playroom.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 {
log.Debug("uid: %d, SaveData, playmod error %v", player.M_DwUin, 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()),
}
err = db.SavePlayerModData(modData)
if err != nil {
log.Debug("uid: %d, SaveData, playmod error %v", player.M_DwUin, err)
return
}
p.is_update = false
}
}
func (p *PlayerMod) BackUp(B *PlayerBackUp) {
var buf bytes.Buffer
encode := gob.NewEncoder(&buf)
err := encode.Encode(p.mod_list)
if err != nil {
log.Debug("Backup, playmod error %v", err)
return
}
B.PlayMod = buf.Bytes()
}
func (p *PlayerMod) Recover(B *PlayerBackUp) {
if len(B.PlayMod) > 0 {
PlayMod := PlayerModList{}
buf := bytes.NewBuffer(B.PlayMod)
decoder := gob.NewDecoder(buf)
err := decoder.Decode(&PlayMod)
if err != nil {
log.Debug("Recover, playmod error %v", err)
return
}
p.mod_list = PlayMod
}
}
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) 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
}
func (p *PlayerMod) getKvMod() *kv.KvMod {
return &p.mod_list.Kv
}
func (p *PlayerMod) getMiningMod() *mining.MiningMod {
return &p.mod_list.Mining
}
func (p *PlayerMod) getItemMod() *item.ItemMod {
return &p.mod_list.Item
}
func (p *PlayerMod) getGuessColorMod() *guesscolor.GuessColorMod {
return &p.mod_list.GuessColor
}
func (p *PlayerMod) getRaceMod() *race.RaceMod {
return &p.mod_list.Race
}
func (p *PlayerMod) getPlayroomMod() *playroom.PlayroomMod {
return &p.mod_list.Playroom
}
func (p *PlayerMod) getFriendTreasureMod() *friendTreasure.FriendTreasureMod {
return &p.mod_list.FriendTreasure
}