123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- package model
- import (
- "encoding/json"
- "strconv"
- )
- // 所在页面
- const (
- PlayerStateOnline = 1 // 在线
- PlayerStateOffline = 2 // 离线
- PlayerStateGameOut = 3 // 游戏外
- PlayerStateGameIn = 4 // 游戏内
- )
- // 头像信息
- const (
- // 符文: 位置 符文 等级 等阶
- // 头像 头像框 昵称 等级 ID, 经验
- // 主线 合作模式
- // 神话英雄: 英雄 等级
- // 宝物: 宝物 等级
- PlayerMaskHead = 1 << 0
- PlayerMaskHeadFrame = 1 << 1
- PlayerMaskNick = 1 << 2
- PlayerMaskLevel = 1 << 3
- PlayerMaskExp = 1 << 4
- PlayerMaskMainChapter = 1 << 5
- PlayerMaskCoopChapter = 1 << 6
- PlayerMaskRune = 1 << 7
- PlayerMaskHeros = 1 << 8
- PlayerMaskTreasures = 1 << 9
- PlayerMaskStatus = 1 << 10
- PlayerMaskCredit = 1 << 11
- PlayerMaskRenown = 1 << 12
- PlayerMaskFort = 1 << 13
- PlayerMaskServer = 1 << 14
- // PlayerMaskFortSkin = 1 << 14
- // PlayerMask = 0x
- PlayerMaskAll = 0x7fff
- MaxPlayerMaskNum = 15
- )
- type RunesType []PartShow
- type HerosType []*HeroShow
- type TreasuresType []*TreasureShow
- type FortType struct {
- Level int64 `json:"level"` //等级
- WearSkin int64 `json:"wear"`
- }
- type MapKV map[int64]int64
- func (r *RunesType) RedisScan(src interface{}) error {
- src2 := src.([]byte)
- err := json.Unmarshal(src2, r)
- if err != nil {
- return err
- }
- return nil
- }
- func (r *HerosType) RedisScan(src interface{}) error {
- src2 := src.([]byte)
- err := json.Unmarshal(src2, r)
- if err != nil {
- return err
- }
- return nil
- }
- func (r *TreasuresType) RedisScan(src interface{}) error {
- src2 := src.([]byte)
- err := json.Unmarshal(src2, r)
- if err != nil {
- return err
- }
- return nil
- }
- func (r *FortType) RedisScan(src interface{}) error {
- src2 := src.([]byte)
- err := json.Unmarshal(src2, r)
- if err != nil {
- return err
- }
- return nil
- }
- func (r *MapKV) RedisScan(src interface{}) error {
- src2 := src.([]byte)
- err := json.Unmarshal(src2, r)
- if err != nil {
- return err
- }
- return nil
- }
- type PlayerProfile struct {
- PlayerId int64 `json:"playerId" redis:"playerId"`
- HeadId int64 `json:"headId" redis:"headId"`
- FrameId int64 `json:"frameId" redis:"frameId"`
- Nick string `json:"nick" redis:"nick"`
- Level int64 `json:"level" redis:"level"`
- Exp int64 `json:"exp" redis:"exp"`
- Runes RunesType `json:"runes" redis:"runes"`
- MainChapter int64 `json:"mainChapter" redis:"mainChapter"`
- CoopChapter MapKV `json:"coopChapter" redis:"coopChapter"`
- Heros HerosType `json:"heros" redis:"heros"`
- Treasures TreasuresType `json:"treasures" redis:"treasures"`
- Status int64 `json:"status" redis:"status"` //游戏中 游戏外 离线
- LastStatusTs int64 `json:"lastStatusTs" redis:"lastStatusTs"`
- CreditScore int64 `json:"creditScore" redis:"creditScore"` // 信誉积分
- Renown int64 `json:"renown" redis:"renown"` // 军衔
- Fort *FortType `json:"fort" redis:"fort"`
- ServerId int64 `json:"serverId" redis:"serverId"` //几服
- Mask uint32 `json:"-"`
- }
- func (pp *PlayerProfile) GetKey() int64 {
- return pp.PlayerId
- }
- func (p *PlayerProfile) TableName() string {
- return "playerProfile"
- }
- func (p *PlayerProfile) GetUniqueKey() string {
- return strconv.FormatInt(p.PlayerId, 10)
- }
- func NewPlayerProfile(player *GamePlayer) *PlayerProfile {
- return &PlayerProfile{
- PlayerId: player.PlayerId,
- Nick: player.NickName,
- Level: player.Level,
- }
- }
- // 必须是game模块主协程调用,并且生成的PlayerProfile的成员不能是GamePlayer的成员指针
- func CreatePlayerProfile(player *GamePlayer) *PlayerProfile {
- p := new(PlayerProfile)
- p.PlayerId = player.PlayerId
- p.HeadId = player.HeadId
- p.FrameId = player.HeadFrameId
- p.Nick = player.NickName
- p.Level = player.Level
- p.Exp = player.Exp
- p.MainChapter = 0 // 默认值,可以根据实际情况调整
- if player.Chapters != nil {
- cp := findChapterProcess(player.Chapters.Process, LevelTypeMainSingle)
- if cp != nil {
- levelId := CombineLevelId(LevelTypeMainSingle, cp.Chapter, cp.Level)
- p.MainChapter = levelId
- }
- p.CoopChapter = make(MapKV) // 默认值,可以根据实际情况调整
- cp = findChapterProcess(player.Chapters.Process, LevelTypeCooperation)
- if cp != nil {
- levelId := CombineLevelId(LevelTypeCooperation, cp.Chapter, cp.Level)
- p.CoopChapter[levelId] = cp.Wave
- }
- }
- p.Runes = player.GetRuneShow()
- p.Heros = player.GetHeroShow()
- p.Treasures = player.GetTreasureShow()
- if player.IsOnline() {
- p.Status = PlayerStateOnline
- p.LastStatusTs = player.LastLoginTick
- } else {
- p.Status = PlayerStateOffline
- p.LastStatusTs = player.LastLogoutTick
- }
- p.CreditScore = player.MapValues[MapValueCreditScore]
- p.Renown = player.MapValues[MapValueRenown]
- p.Fort = new(FortType)
- if player.Fort != nil {
- p.Fort.Level = player.Fort.Level
- p.Fort.WearSkin = player.Fort.WearSkin
- }
- p.ServerId = player.LineId
- return p
- }
- // 获取关卡进度
- func findChapterProcess(process []*ChapterProcess, typ int64) *ChapterProcess {
- for _, v := range process {
- if v.Type == typ {
- return v
- }
- }
- return nil
- }
- type PlayerBrief struct {
- PlayerId int64 `json:"playerId"`
- HeadId int64 `json:"headId"` //头像
- FrameId int64 `json:"frameId"` //头像框
- Nick string `json:"nick"` //昵称
- Level int64 `json:"level"` //等级
- ServerId int64 `json:"serverId"` //服务器id
- Online int64 `json:"online"` //在线状态
- LastLogInOutTick int64 `json:"lastLogInOutTick"` //上次登录时间
- // FriendStatus int64 `json:"friendStatus"` // 0未添加 1已申请未通过 2已是好友
- }
- func CreatePlayerBrief(player *GamePlayer) *PlayerBrief {
- p := new(PlayerBrief)
- p.PlayerId = player.PlayerId
- p.HeadId = player.HeadId
- p.FrameId = player.HeadFrameId
- p.Nick = player.NickName
- p.Level = player.Level
- p.ServerId = player.LineId
- if player.IsOnline() {
- p.Online = PlayerStateOnline
- p.LastLogInOutTick = player.LastLoginTick
- } else {
- p.Online = PlayerStateOffline
- p.LastLogInOutTick = player.LastLogoutTick
- }
- return p
- }
|