player.go 1.39 KB
package cardholder

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

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

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

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

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

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

		d.ActivityId = configId
		d.Details = NewDataCardHolderDetails()

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

		SavePlayer(gameId, d)
	}
	return
}