package player import ( "f1-game/internal/code" "f1-game/internal/data" nameLocal "f1-game/internal/name/local" "f1-game/internal/pb" "f1-game/nodes/game/player/asset" ao "f1-game/nodes/game/player/asset/origin" cproto "github.com/cherry-game/cherry/net/proto" ) func (p *actorPlayer) initMiniGame() { p.Local().Register(nameLocal.Player_MiniGameProgress, p.miniGameProgress) p.Local().Register(nameLocal.Player_MiniGameSettle, p.miniGameSettle) } // 获取小游戏进度 func (p *actorPlayer) miniGameProgress(session *cproto.Session, req *pb.I32) { playerTable := p.PlayerTable() if _, found := data.MiniGame.GetByGameIDLevelID(req.Value, 1); !found { p.ResponseCode(session, code.ConfigNotFound_MiniGameLevel) return } if playerTable.MiniGame.GameID != 0 && playerTable.MiniGame.GameID != req.Value { p.ResponseCode(session, code.MiniGameGameIDError) return } rsp := &pb.I32{ Value: playerTable.MiniGame.LevelId, } p.Response(session, rsp) } // 小游戏结算 func (p *actorPlayer) miniGameSettle(session *cproto.Session, req *pb.I64I64I32) { var ( playerTable = p.PlayerTable() chapterTable = p.ChapterTable() ) // 失败不用做任何处理 if req.Key3 == 0 { rsp := &pb.MiniGameSettle{ LevelID: playerTable.MiniGame.LevelId, } p.Response(session, rsp) } if playerTable.MiniGame.GameID != 0 && playerTable.MiniGame.GameID != int32(req.Key1) { p.ResponseCode(session, code.MiniGameGameIDError) return } if playerTable.MiniGame.LevelId == 0 { // 第一关 if int32(req.Key2) != 1 { p.ResponseCode(session, code.MiniGameLevelIDError) return } } else { currLevelRow, found := data.MiniGame.GetByGameIDLevelID(int32(req.Key1), playerTable.MiniGame.LevelId) if !found { p.ResponseCode(session, code.ConfigNotFound_MiniGameLevel) return } // 已通关所有关卡 if currLevelRow.NextLevelID == 0 { p.ResponseCode(session, code.MiniGameLevelCleared) return } // 关卡id错误 if currLevelRow.NextLevelID != int32(req.Key2) { p.ResponseCode(session, code.MiniGameLevelIDError) return } } nextLevelRow, found := data.MiniGame.GetByGameIDLevelID(int32(req.Key1), int32(req.Key2)) if !found { p.ResponseCode(session, code.ConfigNotFound_MiniGameLevel) return } // 探险解锁关卡前置条件 if !chapterTable.Chapter.IsLevelUnlocked(nextLevelRow.ChapterUnlockLevelID) { p.ResponseCode(session, code.MiniGameChapterUnLock) return } playerTable.MiniGame.GameID = int32(req.Key1) playerTable.MiniGame.LevelId = int32(req.Key2) playerTable.Save2Queue() rsp := &pb.MiniGameSettle{ LevelID: playerTable.MiniGame.LevelId, } if !nextLevelRow.Reward.IsEmpty() { _, errCode := asset.Service().Adds(p.playerID, nextLevelRow.Reward, ao.MiniGameReward, true) if code.IsFail(errCode) { p.ResponseCode(session, errCode) return } assertListProto := nextLevelRow.Reward.ToAssetListProto() rsp.Rewards = &assertListProto } p.Response(session, rsp) }