diff --git a/models/roomrank.go b/models/roomrank.go index a8ac162..87f023f 100644 --- a/models/roomrank.go +++ b/models/roomrank.go @@ -24,6 +24,7 @@ type RoomRankTopNode struct { Score int64 `form:"score" json:"score"` // 玩家排行分数 Name string `form:"name" json:"name"` // 名字 Icon string `form:"icon" json:"icon"` // 头像 + Award string `form:"award" json:"award"` // 排名奖励内容 } // RoomRankInfo 房间排行信息 diff --git a/service/roomrank/dto-player.go b/service/roomrank/dto-player.go index 6fa54be..1446eea 100644 --- a/service/roomrank/dto-player.go +++ b/service/roomrank/dto-player.go @@ -20,8 +20,8 @@ type Player struct { RoomUid int64 `gorm:"comment:所在房间唯一ID"` - SettleHas bool `gorm:"comment:有结算内容未领取"` - SettleAward string `gorm:"comment:结算奖励内容"` + SettleActivityId int64 `gorm:"comment:上次结算的活动ID"` + SettleAward string `gorm:"comment:结算奖励内容"` CreateTime int64 `gorm:"comment:创建时间戳"` UpdateTime int64 `gorm:"comment:修改时间戳"` @@ -65,3 +65,7 @@ func (d *Player) AddUserScore(count int) { d.UserClass = UserClassMax } } + +func (d *Player) SettleHas() bool { + return d.SettleAward != "" +} diff --git a/service/roomrank/handle.go b/service/roomrank/handle.go index 462e18a..acef2cd 100644 --- a/service/roomrank/handle.go +++ b/service/roomrank/handle.go @@ -68,7 +68,7 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan if hasSettleChange { SavePlayer(gameId, player) } - if player.SettleHas { + if player.SettleHas() { rsp.RoomRankInfo = GetInfoFromSettle(player, config) return } @@ -89,7 +89,7 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan TryReSort(room, config) SavePlayer(gameId, player) SaveRoom(gameId, room) - rsp.RoomRankInfo = GetInfoFromRoom(player, room) + rsp.RoomRankInfo = GetInfoFromRoom(player, room, config) return } @@ -125,7 +125,7 @@ func HandleGetSettleAward(req *models.ReqRoomRankGetSettleAward) (code string, r // 尝试判断结算 _ = TrySettle(gameId, player, config) - if !player.SettleHas { + if !player.SettleHas() { code = code_msg.RECODE_MERGE_ROOMRANK_NOTHASSETTLE_ERROR return } @@ -134,7 +134,6 @@ func HandleGetSettleAward(req *models.ReqRoomRankGetSettleAward) (code string, r // 领取奖励 rsp.AwardText = player.SettleAward rsp.UserClass = player.UserClass - player.SettleHas = false player.SettleAward = "" player.ActivityId = config.Id player.RoomUid = 0 @@ -184,7 +183,8 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs if hasSettleChange { SavePlayer(gameId, player) } - if player.SettleHas { + + if player.SettleHas() { rsp.RoomRankInfo = GetInfoFromSettle(player, config) code = code_msg.RECODE_MERGE_ROOMRANK_HASSETTLE_ERROR return @@ -210,7 +210,7 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs SavePlayer(gameId, player) SaveRoom(gameId, room) - rsp.RoomRankInfo = GetInfoFromRoom(player, room) + rsp.RoomRankInfo = GetInfoFromRoom(player, room, config) // 记录日志 recordBase := NewRecordBase(player.Uid, config.Id) diff --git a/service/roomrank/logic.go b/service/roomrank/logic.go index de50335..8d0c411 100644 --- a/service/roomrank/logic.go +++ b/service/roomrank/logic.go @@ -15,7 +15,7 @@ func getLockKey(gameId string, activityId int64) string { // TrySettle 尝试判断结算 func TrySettle(gameId string, player *Player, config *confroomrank.ActivityConfig) (hasChange bool) { hasChange = false - if player.SettleHas { + if player.SettleActivityId == config.Id { return } if player.ActivityId == 0 { @@ -42,12 +42,12 @@ func TrySettle(gameId string, player *Player, config *confroomrank.ActivityConfi TrySettleRoom(gameId, room, confActivity) // 设置玩家奖励等数据 hasChange = true - player.SettleHas = true + player.SettleActivityId = config.Id confRoom, hasConfRoom := confActivity.Room[room.ConfigId] if !hasConfRoom { return } - if confAward, hasConfAward := confRoom.Awards[utstring.IntToString(rankIndex)]; hasConfAward { + if confAward, hasConfAward := confRoom.Awards[utstring.IntToString(rankIndex+1)]; hasConfAward { player.SettleAward = confAward } if len(confRoom.SettleScores) > rankIndex { diff --git a/service/roomrank/player.go b/service/roomrank/player.go index 9eae4f9..d7c5bb8 100644 --- a/service/roomrank/player.go +++ b/service/roomrank/player.go @@ -7,6 +7,7 @@ import ( "apigame/service-common/svmysql" "apigame/util/util-lx/lxalilog" "apigame/util/util-lx/lxtime" + "apigame/util/utstring" "math/rand" ) @@ -66,17 +67,17 @@ func NewRoomPlayer(player *Player) *RoomPlayer { } // GetInfoFromSettle 活动信息 从结算 -func GetInfoFromSettle(player *Player, conf *confroomrank.ActivityConfig) models.RoomRankInfo { +func GetInfoFromSettle(player *Player, config *confroomrank.ActivityConfig) models.RoomRankInfo { info := models.RoomRankInfo{} - if player.SettleHas { - info.SettleHas = player.SettleHas + if player.SettleHas() { + info.SettleHas = true info.SettleAward = player.SettleAward } return info } // GetInfoFromRoom 活动信息 从房间 -func GetInfoFromRoom(player *Player, room *Room) models.RoomRankInfo { +func GetInfoFromRoom(player *Player, room *Room, config *confroomrank.ActivityConfig) models.RoomRankInfo { info := models.RoomRankInfo{} info.UserClass = player.UserClass for i := 0; i < len(room.Details.Players); i++ { @@ -89,6 +90,11 @@ func GetInfoFromRoom(player *Player, room *Room) models.RoomRankInfo { Name: p.Name, Icon: p.Icon, } + if confRoom, hasConfRoom := config.Room[room.ConfigId]; hasConfRoom { + if confAward, hasConfAward := confRoom.Awards[utstring.IntToString(rank)]; hasConfAward { + node.Award = confAward + } + } if player.Uid == p.Uid { info.SelfRank = rank info.SelfScore = p.Score diff --git a/service/roomrank/room.go b/service/roomrank/room.go index bc5dbcd..4930f2c 100644 --- a/service/roomrank/room.go +++ b/service/roomrank/room.go @@ -86,11 +86,9 @@ func FindRoom(gameId string, activityId int64, roomConfigId int) (rooms []*Room, // TryGetRoom 尝试获取房间 func TryGetRoom(gameId string, player *Player, config *confroomrank.ActivityConfig, playerLevel int) (room *Room, hasRoom bool) { hasRoom = false - if player.SettleHas { - return - } if player.ActivityId != config.Id { player.ActivityId = config.Id + player.RoomUid = 0 } // 查找玩家所在的房间 room, hasRoom = LoadRoom(gameId, config.Id, player.RoomUid) -- libgit2 0.21.0