logic.go 2 KB
package roomrank

import (
	"apigame/configs/confroomrank"
	"apigame/service-common/svconst"
	"apigame/util/zjson"
	"fmt"
)

func getLockKey(gameId string, topType int, activityId int64) string {
	return fmt.Sprintf("%s:lock:roomrank:%s:%d:%d", svconst.REDIS_CACHEP_REFIX, gameId, topType, activityId)
}

// TrySettle 尝试判断结算
func TrySettle(gameId string, topType int, player *Player, config *confroomrank.ActivityConfig) (hasChange bool) {
	hasChange = false
	if player.SettleActivityId == config.Id {
		return
	}
	if player.ActivityId == 0 {
		return
	}
	if player.ActivityId == config.Id {
		return
	}
	fmt.Println(zjson.Str(player))
	// 查找玩家所在的房间
	room, hasRoom := LoadRoom(gameId, topType, player.ActivityId, player.RoomUid)
	if !hasRoom {
		return
	}
	confActivity, hasConfActivity := confroomrank.GetConfig(gameId, room.ActivityId)
	if !hasConfActivity {
		return
	}
	TrySettleRoom(gameId, room, confActivity)

	// 找到玩家在房间里的名次
	// rankIndex = 0-49  rank = 1-50
	rankIndex, rankScore := room.FindPlayer(player.Uid)
	if rankIndex < 0 {
		return
	}
	player.SettleRank = rankIndex + 1
	player.SettleScore = rankScore
	// 设置玩家奖励等数据
	hasChange = true
	player.SettleActivityId = config.Id
	confRoom, hasConfRoom := confActivity.Room[room.ConfigId]
	if !hasConfRoom {
		return
	}
	if len(confRoom.Awards) > rankIndex {
		player.SettleAward = confRoom.Awards[rankIndex]
	}
	if len(confRoom.SettleScores) > rankIndex {
		player.AddUserScore(confRoom.SettleScores[rankIndex])
		player.SettleUserClass = player.UserClass
	}
	if len(confRoom.SettleUserType) > rankIndex {
		player.UserType = confRoom.SettleUserType[rankIndex]
	}
	return
}

// ChangePlayerScore 房间排行增加积分
func ChangePlayerScore(room *Room, player *Player, addScore int64) (oldScore, newScore int64) {
	for i := 0; i < len(room.Details.Players); i++ {
		p := room.Details.Players[i]
		if player.Uid == p.Uid {
			oldScore = p.Score
			p.Score += addScore
			newScore = p.Score
			return
		}
	}
	return
}