player.go 1.52 KB
package cardholder

import (
	"apigame/configs-db/confcardholder"
	"apigame/service-common/svmysql"
	"apigame/util/util-lx/lxalilog"
	"apigame/util/util-lx/lxtime"
)

// SavePlayer 存储数据
func SavePlayer(gameId string, player *Player) {
	player.UpdateTime = lxtime.NowUninx()
	player.Encode()

	err := svmysql.Save(player, gameId)
	if err != nil {
		lxalilog.Errors(err, "cardholder.SavePlayer error", gameId, player.Uid, player.ActivityId)
	}
}

func _LoadPlayer(gameId string, playerUid int64) (player *Player) {
	player = NewPlayer(playerUid)
	has, err := svmysql.First(player, gameId)
	if has {
		player.Decode()
	} else {
		player.Init(playerUid)
		err = svmysql.Create(player, gameId)
		if err != nil {
			lxalilog.Errors(err, "cardholder._LoadPlayer Create error", gameId, player.Uid, player.ActivityId)
			return
		}
	}
	return
}

// LoadPlayer 获取数据 外部接口
func LoadPlayer(gameId string, playerUid int64, config *confcardholder.ActivityConfig) (player *Player) {
	configId := config.Id
	player = _LoadPlayer(gameId, playerUid)
	// 如果当前有上线活动(活动ID不为0),且活动ID和玩家数据不同,说明活动已切换 需更新
	if configId != 0 &&
		configId != player.ActivityId {

		// 剩余的星星数
		starCount := player.Details.StarCount

		player.ActivityId = configId
		player.Details = NewPlayerDetails()

		// 使用剩余的星星数来自动兑换卡包
		player.Details.LastStarCount = starCount
		NextActivityAutoExchange(gameId, player, config)

		SavePlayer(gameId, player)
	}
	return
}