player.go 4.29 KB
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/zconvert"
)

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.TopType)
			return
		}
	}
	return
}

// NewRoomRobot 新建房间机器人
func NewRoomRobot(gameId string, room *Room, robotConfigId int, userType int) *RoomPlayer {
	d := &RoomPlayer{
		//Uid:           rand.Int63(),
		//Uid: int64(utuuid.GetUint32()),
		//Name:          svcommon.GetName(gameId),
		Icon:          svcommon.GetAvatar(gameId),
		Score:         0,
		JoinTime:      lxtime.NowUninx(),
		UserType:      userType,
		RobotConfigId: robotConfigId,
	}
	if len(room.Details.IndexNames) > 0 {
		d.Name = svcommon.GetIndexName(gameId, room.Details.IndexNames[0])
		room.Details.IndexNames = room.Details.IndexNames[1:]
	} else {
		d.Name = svcommon.GetName(gameId)
	}
	d.Uid = 9900_0000 + int64(len(room.Details.Players))
	return d
}

// NewRoomPlayer 新建房间玩家
func NewRoomPlayer(player *Player) *RoomPlayer {
	d := &RoomPlayer{
		Uid:           player.Uid,
		Name:          player.Name,
		Icon:          player.Icon,
		Score:         player.Score,
		JoinTime:      lxtime.NowUninx(),
		UserType:      player.UserType,
		RobotConfigId: 0,
	}
	return d
}

// GetInfoFromSettle 活动信息 从结算
func GetInfoFromSettle(player *Player) 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
}

// GetInfoFromPlayer 活动信息 从玩家 未报名时
func GetInfoFromPlayer(gameId string, player *Player, config *confroomrank.ActivityConfig) models.RoomRankInfo {
	info := models.RoomRankInfo{}
	info.UserClass = player.UserClass
	info.SelfScore = player.Score
	info.RobotAvatarPath = svcommon.GetAvatarPath(gameId)
	return info
}

// GetInfoFromRoom 活动信息 从房间
func GetInfoFromRoom(gameId string, 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,
			IsRobot: p.IsRobot(),
		}
		if confRoom, hasConfRoom := config.Room[room.ConfigId]; hasConfRoom {
			if confAward, hasConfAward := confRoom.Awards[zconvert.IntToStr(rank)]; hasConfAward {
				node.Award = confAward
			}
		}
		if player.Uid == p.Uid {
			info.SelfRank = rank
		}
		info.Tops = append(info.Tops, node)
	}
	info.SelfScore = player.Score
	info.RobotAvatarPath = svcommon.GetAvatarPath(gameId)
	return info
}

func GetTopsInfoFromRoom(room *Room, config *confroomrank.ActivityConfig) []models.RoomRankTopNode {
	info := make([]models.RoomRankTopNode, 0)
	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,
			IsRobot: p.IsRobot(),
		}
		if confRoom, hasConfRoom := config.Room[room.ConfigId]; hasConfRoom {
			if confAward, hasConfAward := confRoom.Awards[zconvert.IntToStr(rank)]; hasConfAward {
				node.Award = confAward
			}
		}
		info = append(info, node)
	}
	return info
}