diff --git a/server/roserver/fruit/model/live_answer_room.go b/server/roserver/fruit/model/live_answer_room.go index 57a39ab..680f624 100644 --- a/server/roserver/fruit/model/live_answer_room.go +++ b/server/roserver/fruit/model/live_answer_room.go @@ -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 } diff --git a/server/roserver/fruit/model/live_bid_room.go b/server/roserver/fruit/model/live_bid_room.go index 0ea7017..55d5ae9 100644 --- a/server/roserver/fruit/model/live_bid_room.go +++ b/server/roserver/fruit/model/live_bid_room.go @@ -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 } diff --git a/server/roserver/fruit/model/room_def.go b/server/roserver/fruit/model/room_def.go index 01b0aaa..e58af5b 100644 --- a/server/roserver/fruit/model/room_def.go +++ b/server/roserver/fruit/model/room_def.go @@ -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 {