From b2de8adde0accee4bc53665805465165c8042ad2 Mon Sep 17 00:00:00 2001 From: 王家文 Date: Mon, 22 Apr 2024 14:08:32 +0800 Subject: [PATCH] feat✨:房间排行活动:增加玩家名字头像等 --- models/roomrank.go | 19 ++++++++++++++++--- service-common/svcommon/simulate.go | 11 +++++++++++ service-common/svmysql/dto.go | 2 +- service/roomrank/dto-player.go | 6 ++++-- service/roomrank/dto-room.go | 36 +++++++----------------------------- service/roomrank/handle.go | 6 +++++- service/roomrank/player.go | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 7 files changed, 97 insertions(+), 38 deletions(-) create mode 100644 service-common/svcommon/simulate.go diff --git a/models/roomrank.go b/models/roomrank.go index 3136f83..f76e413 100644 --- a/models/roomrank.go +++ b/models/roomrank.go @@ -17,17 +17,30 @@ type RspRoomRankGetConfig struct { Config any `form:"config" json:"config"` // 活动配置对象 } +// RoomRankTopNode 排行玩家 +type RoomRankTopNode struct { + Rank int `form:"rank" json:"rank"` // 排名 + Uid int64 `form:"uid" json:"uid"` // 玩家唯一ID + Score int64 `form:"score" json:"score"` // 玩家排行分数 + Name string `form:"name" json:"name"` // 名字 + Icon string `form:"icon" json:"icon"` // 头像 +} + // RoomRankInfo 房间排行信息 type RoomRankInfo struct { - SettleHas bool `form:"settle_has" json:"settle_has"` // 有结算内容未领取 - SettleAward string `form:"settle_award" json:"settle_award"` // 结算奖励内容 + SettleHas bool `form:"settle_has" json:"settle_has"` // 有结算内容未领取 + SettleAward string `form:"settle_award" json:"settle_award"` // 结算奖励内容 + RankSelf int `form:"rank_self" json:"rank_self"` // 自己排名 + Tops []RoomRankTopNode `form:"tops" json:"tops"` // 排行榜数据列表 } // ReqRoomRankInfo 请求 房间排行信息 type ReqRoomRankInfo struct { BaseLoginInfo BaseSign - PlayerLevel int `form:"player_level" json:"player_level"` // 玩家等级 + PlayerLevel int `form:"player_level" json:"player_level"` // 玩家等级 + PlayerName string `form:"player_name" json:"player_name"` // 玩家名字 + PlayerIcon string `form:"player_icon" json:"player_icon"` // 玩家头像 } // RspRoomRankInfo 返回 房间排行信息 diff --git a/service-common/svcommon/simulate.go b/service-common/svcommon/simulate.go new file mode 100644 index 0000000..52ec0d2 --- /dev/null +++ b/service-common/svcommon/simulate.go @@ -0,0 +1,11 @@ +package svcommon + +// GetName 随机模拟玩家名字 +func GetName() string { + return "李四" +} + +// GetIcon 随机模拟玩家头像 +func GetIcon() string { + return "lisi_icon" +} diff --git a/service-common/svmysql/dto.go b/service-common/svmysql/dto.go index 8b8adc9..e7b6b77 100644 --- a/service-common/svmysql/dto.go +++ b/service-common/svmysql/dto.go @@ -3,7 +3,7 @@ package svmysql func InitTable(obj IMysqlData, suffix string, notify bool) { info := obj.MysqlInfo(suffix) db := info.DbMysql - _ = db.Table(info.TableName).AutoMigrate(obj) + _ = db.Set("gorm:table_options", "ENGINE=InnoDB DEFAULT CHARSET=utf8").Table(info.TableName).AutoMigrate(obj) } func Create(obj IMysqlData, suffix string) (err error) { diff --git a/service/roomrank/dto-player.go b/service/roomrank/dto-player.go index 7d72eab..6fa54be 100644 --- a/service/roomrank/dto-player.go +++ b/service/roomrank/dto-player.go @@ -9,8 +9,10 @@ import ( // Player 房间排行持久数据 type Player struct { - Uid int64 `gorm:"column:uid;primaryKey;comment:玩家唯一ID"` - ActivityId int64 `gorm:"comment:活动ID"` + Uid int64 `gorm:"column:uid;primaryKey;comment:玩家唯一ID"` + Name string `gorm:"-"` // 玩家名字 + Icon string `gorm:"-"` // 玩家头像 + ActivityId int64 `gorm:"comment:活动ID"` UserType int `gorm:"comment:用户类型"` // 0=新手用户 1=优质用户 2=普通用户 3=垃圾用户 UserScore int `gorm:"comment:用户评级分"` diff --git a/service/roomrank/dto-room.go b/service/roomrank/dto-room.go index 0f91a8b..7db7342 100644 --- a/service/roomrank/dto-room.go +++ b/service/roomrank/dto-room.go @@ -4,11 +4,9 @@ import ( "apigame/service-common/svconst" "apigame/service-common/svmysql" "apigame/util/util-lx/lxalilog" - "apigame/util/util-lx/lxtime" "encoding/json" "fmt" "github.com/samber/lo" - "math/rand" ) // Room 房间排行持久数据 @@ -38,33 +36,13 @@ func (d *Room) MysqlInfo(suffix string) *svmysql.MysqlInfo { // RoomPlayer 房间玩家 type RoomPlayer struct { - Uid int64 // 玩家唯一ID - Score int64 // 玩家排行分数 - JoinTime int64 // 加入时间 - UserType int // 用户类型 -1=原生配置机器人 - RobotConfigId int // 0=玩家 -} - -func NewRoomRobot(robotConfigId int, userType int) *RoomPlayer { - d := &RoomPlayer{ - Uid: rand.Int63(), - Score: 0, - JoinTime: lxtime.NowUninx(), - UserType: userType, - RobotConfigId: robotConfigId, - } - return d -} - -func NewRoomPlayer(player *Player) *RoomPlayer { - d := &RoomPlayer{ - Uid: player.Uid, - Score: 0, - JoinTime: lxtime.NowUninx(), - UserType: player.UserType, - RobotConfigId: 0, - } - return d + Uid int64 // 玩家唯一ID + Name string // 玩家名字 + Icon string // 玩家头像 + Score int64 // 玩家排行分数 + JoinTime int64 // 加入时间 + UserType int // 用户类型 -1=原生配置机器人 + RobotConfigId int // 0=玩家 } // RoomDetails 详情 diff --git a/service/roomrank/handle.go b/service/roomrank/handle.go index fdb6870..6b4b697 100644 --- a/service/roomrank/handle.go +++ b/service/roomrank/handle.go @@ -54,13 +54,15 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan // 读取游戏数据 player := LoadPlayer(gameId, playerUid) + player.Name = req.PlayerName + player.Icon = req.PlayerIcon // 尝试判断结算 hasSettle := TrySettle(gameId, player, config) if hasSettle { SavePlayer(gameId, player) - rsp.RoomRankInfo = GetInfo(player, config) + rsp.RoomRankInfo = GetInfoFromSettle(player, config) return } @@ -74,6 +76,8 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan SaveRoom(gameId, room) } + rsp.RoomRankInfo = GetInfoFromRoom(player, room) + fmt.Println("dwjw🐸 len(room.Details.Players) 1:", len(room.Details.Players)) return diff --git a/service/roomrank/player.go b/service/roomrank/player.go index 1b999a0..567b671 100644 --- a/service/roomrank/player.go +++ b/service/roomrank/player.go @@ -3,9 +3,11 @@ package roomrank import ( "apigame/configs/confroomrank" "apigame/models" + "apigame/service-common/svcommon" "apigame/service-common/svmysql" "apigame/util/util-lx/lxalilog" "apigame/util/util-lx/lxtime" + "math/rand" ) // SavePlayer 存储数据 @@ -35,8 +37,36 @@ func LoadPlayer(gameId string, playerUid int64) (player *Player) { return } -// GetInfo 活动信息 -func GetInfo(player *Player, conf *confroomrank.ActivityConfig) models.RoomRankInfo { +// NewRoomRobot 新建房间机器人 +func NewRoomRobot(robotConfigId int, userType int) *RoomPlayer { + d := &RoomPlayer{ + Uid: rand.Int63(), + Name: svcommon.GetName(), + Icon: svcommon.GetIcon(), + Score: 0, + JoinTime: lxtime.NowUninx(), + UserType: userType, + RobotConfigId: robotConfigId, + } + return d +} + +// NewRoomPlayer 新建房间玩家 +func NewRoomPlayer(player *Player) *RoomPlayer { + d := &RoomPlayer{ + Uid: player.Uid, + Name: player.Name, + Icon: player.Icon, + Score: 0, + JoinTime: lxtime.NowUninx(), + UserType: player.UserType, + RobotConfigId: 0, + } + return d +} + +// GetInfoFromSettle 活动信息 从结算 +func GetInfoFromSettle(player *Player, conf *confroomrank.ActivityConfig) models.RoomRankInfo { info := models.RoomRankInfo{} if player.SettleHas { info.SettleHas = player.SettleHas @@ -44,3 +74,24 @@ func GetInfo(player *Player, conf *confroomrank.ActivityConfig) models.RoomRankI } return info } + +// GetInfoFromRoom 活动信息 从房间 +func GetInfoFromRoom(player *Player, room *Room) models.RoomRankInfo { + info := models.RoomRankInfo{} + for i := 0; i < len(room.Details.Players); i++ { + p := room.Details.Players[i] + rank := i + 1 + node := models.RoomRankTopNode{ + Rank: rank, + Uid: p.Uid, + Score: p.Score, + Name: p.Name, + Icon: p.Icon, + } + if player.Uid == p.Uid { + info.RankSelf = rank + } + info.Tops = append(info.Tops, node) + } + return info +} -- libgit2 0.21.0