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" "apigame/util/utstring" "math/rand" ) func tryInitPlayer(gameId string, player *Player) { svmysql.InitTable(player, gameId, false) } // SavePlayer 存储数据 func SavePlayer(gameId string, player *Player) { tryInitPlayer(gameId, player) player.UpdateTime = lxtime.NowUninx() err := svmysql.Save(player, gameId) if err != nil { lxalilog.Errors(err, "roomrank.SavePlayer error", gameId, player.Uid, player.ActivityId) return } } // LoadPlayer 获取数据 外部接口 func LoadPlayer(gameId string, playerUid int64, topType int) (player *Player) { player = NewPlayer(playerUid, topType) tryInitPlayer(gameId, player) has, err := svmysql.First(player, gameId) if has { } else { player.Init(playerUid, topType) err = svmysql.Create(player, gameId) if err != nil { lxalilog.Errors(err, "roomrank._LoadPlayer Create error", gameId, player.Uid, player.ActivityId) return } } return } // NewRoomRobot 新建房间机器人 func NewRoomRobot(gameId string, robotConfigId int, userType int) *RoomPlayer { d := &RoomPlayer{ Uid: rand.Int63(), Name: svcommon.GetName(gameId), Icon: svcommon.GetAvatar(gameId), 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, config *confroomrank.ActivityConfig) models.RoomRankInfo { info := models.RoomRankInfo{} if player.SettleHas() { info.SettleHas = true info.SettleRank = player.SettleRank info.SettleScore = player.SettleScore info.SettleUserClass = player.SettleUserClass info.SettleAward = player.SettleAward } return info } // GetInfoFromRoom 活动信息 从房间 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++ { 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 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 } info.Tops = append(info.Tops, node) } return info }