player.go 2.3 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"
	"math/rand"
)

// SavePlayer 存储数据
func SavePlayer(gameId string, player *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) (player *Player) {
	player = NewPlayer(playerUid)
	has, err := svmysql.First(player, gameId)
	if has {
	} else {
		player.Init(playerUid)
		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(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
		info.SettleAward = player.SettleAward
	}
	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
}