This commit is contained in:
fatiao 2026-01-16 19:33:39 +08:00
parent 2dab0dffbc
commit bd520fa719
3 changed files with 63 additions and 46 deletions

View File

@ -1,10 +1,10 @@
package model
import (
"fmt"
model2 "roserver/baseserver/model"
gameModel "roserver/game/model"
"roserver/serverproto"
"strconv"
)
type LiveAnswerRoom struct {
@ -113,24 +113,10 @@ func (self *LiveAnswerRoom) GetCMDPlayDataList(readyUidList []uint64, uid uint64
// 返回玩家分数排名
func (self *LiveAnswerRoom) GetShowResultList(readyUidList []uint64, uid uint64) []*serverproto.LiveRoomPlayerInfo {
playerResults := make([]*serverproto.LiveRoomPlayerInfo, 0)
maxResultNum := 10
if userAnswerInfo, exist := self.userAnswers[uid]; exist {
playerInfo := MakeLiveRoomPlayerInfo(uid)
for _, tmpUid := range self.readyUidList {
playerInfo := MakeLiveRoomPlayerInfo(tmpUid)
playerInfo.Data = "0"
for k, v := range userAnswerInfo.answers {
questionId := k
answer := v
if self.CheckAnswer(int32(questionId), answer) {
playerInfo.Data = "1"
break
}
}
playerResults = append(playerResults, playerInfo)
}
for _, userAnswerInfo := range self.userAnswers {
if len(playerResults) < maxResultNum && userAnswerInfo.uid != uid {
playerInfo := MakeLiveRoomPlayerInfo(userAnswerInfo.uid)
playerInfo.Data = "0"
if userAnswerInfo, exist := self.userAnswers[tmpUid]; exist {
for k, v := range userAnswerInfo.answers {
questionId := k
answer := v
@ -139,8 +125,8 @@ func (self *LiveAnswerRoom) GetShowResultList(readyUidList []uint64, uid uint64)
break
}
}
playerResults = append(playerResults, playerInfo)
}
playerResults = append(playerResults, playerInfo)
}
return playerResults
}
@ -160,13 +146,25 @@ func (self *LiveAnswerRoom) GetShowRewardList(readyUidList []uint64, uid uint64)
}
func (self *LiveAnswerRoom) HasShowData() bool {
return false
return true
}
// 返回游戏过程中的状态数据
func (self *LiveAnswerRoom) GetShowData(readyUidList []uint64, uid uint64) []*serverproto.KeyValueType64 {
submitResult := make([]*serverproto.KeyValueType64, 0)
return submitResult
showData := make([]*serverproto.KeyValueType64, 0)
for _, v := range self.userAnswers {
score := 0
for questionId, answer := range v.answers {
if self.CheckAnswer(int32(questionId), answer) {
score += 1
}
}
showData = append(showData, &serverproto.KeyValueType64{
Key: v.uid,
Value: int32(score),
})
}
return showData
}
// 处理玩家在游戏过程中提交的输入,玩家提交选择
@ -181,8 +179,7 @@ func (self *LiveAnswerRoom) HandleShowSubmit(uid uint64, data []*serverproto.Key
}
for _, v := range data {
questionId := v.Key
answerStr := v.StrVal
answer, _ := strconv.Atoi(answerStr)
answer := v.Value
self.userAnswers[uid].answers[questionId] = int32(answer)
}
return submitResult
@ -193,7 +190,8 @@ func (self *LiveAnswerRoom) GetStageEnterParams(stage uint32) string {
stageEnterParams := ""
switch stage {
case LIVEROOM_STAGE_SHOW:
stageEnterParams = ""
optionStr := ArrayJoin(self.questions[0].options, "-")
stageEnterParams = fmt.Sprintf("question:%d;options:%s", self.questions[0].questionCfg.Id, optionStr)
}
return stageEnterParams
}

View File

@ -63,22 +63,24 @@ func (self *LiveBidRoom) CheckIfShowEnd() bool {
// 结算阶段:给玩家背包里添加东西
func (self *LiveBidRoom) ShowEnd() {
uid := self.currBidInfo.uid
costItems := make([]*serverproto.KeyValueType, 0)
costItems = append(costItems, &serverproto.KeyValueType{
Key: int32(serverproto.ResType_Res_Rmb),
Value: int32(self.currBidInfo.bidPrice),
})
self.DeleteItemList(uid, costItems, int32(model2.AddFrom_LiveRoom_Bid), false)
addItems := make([]*serverproto.KeyValueType, 0)
for _, itemInfo := range self.currBidCfg.Items {
itemId, itemNum := model.Str2Res(itemInfo)
addItems = append(addItems, &serverproto.KeyValueType{
Key: itemId,
Value: itemNum,
if self.currBidInfo != nil {
uid := self.currBidInfo.uid
costItems := make([]*serverproto.KeyValueType, 0)
costItems = append(costItems, &serverproto.KeyValueType{
Key: int32(serverproto.ResType_Res_Rmb),
Value: int32(self.currBidInfo.bidPrice),
})
self.DeleteItemList(uid, costItems, int32(model2.AddFrom_LiveRoom_Bid), false)
addItems := make([]*serverproto.KeyValueType, 0)
for _, itemInfo := range self.currBidCfg.Items {
itemId, itemNum := model.Str2Res(itemInfo)
addItems = append(addItems, &serverproto.KeyValueType{
Key: itemId,
Value: itemNum,
})
}
self.AddItemList(uid, addItems, int32(model2.AddFrom_LiveRoom_Bid), true)
}
self.AddItemList(uid, addItems, int32(model2.AddFrom_LiveRoom_Bid), true)
}
func (self *LiveBidRoom) GetMaxReadyNum(roomType uint32) int {
@ -108,13 +110,15 @@ func (self *LiveBidRoom) GetCMDPlayDataList(readyUidList []uint64, uid uint64, c
// 返回客户端显示秒杀成功的玩家信息
func (self *LiveBidRoom) GetShowResultList(readyUidList []uint64, uid uint64) []*serverproto.LiveRoomPlayerInfo {
playerResults := make([]*serverproto.LiveRoomPlayerInfo, 0)
player := RoomMgr.GetPlayer(self.currBidInfo.uid)
playerResults = append(playerResults, &serverproto.LiveRoomPlayerInfo{
Uid: player.Uid,
Nickname: player.Name,
HeadId: player.HeadId,
Data: fmt.Sprintf("bidPrice:%d;bidCfgId:%d", self.currBidInfo.bidPrice, self.currBidCfg.Id),
})
if self.currBidInfo != nil {
player := RoomMgr.GetPlayer(self.currBidInfo.uid)
playerResults = append(playerResults, &serverproto.LiveRoomPlayerInfo{
Uid: player.Uid,
Nickname: player.Name,
HeadId: player.HeadId,
Data: fmt.Sprintf("bidPrice:%d;bidCfgId:%d", self.currBidInfo.bidPrice, self.currBidCfg.Id),
})
}
return playerResults
}

View File

@ -80,6 +80,21 @@ func SliceIsExist[T comparable](slice []T, value T) bool {
return false
}
func ArrayJoin[T any](slice []T, str string) string {
if len(slice) == 0 {
return ""
}
var builder strings.Builder
for i, v := range slice {
if i > 0 {
builder.WriteString(str)
}
builder.WriteString(fmt.Sprint(v)) // 使用 fmt.Sprint 转换为字符串
}
return builder.String()
}
func WeightedRandomChoice(weights map[string]int) string {
total := 0
for _, w := range weights {