diff --git a/modules/stonehenge/api_event.go b/modules/stonehenge/api_event.go index 48492e202..2c755e3ac 100644 --- a/modules/stonehenge/api_event.go +++ b/modules/stonehenge/api_event.go @@ -78,12 +78,30 @@ func (this *apiComp) Event(session comm.IUserSession, req *pb.StonehengeEventReq this.module.Debugf("Mline lotteryward DispenseRes err:+%v", lotteryward) } } + } else if eventConf.EventType == EventType25 { + lenSelect := len(stone.Rooms.Selectbuff) + if lenSelect == 0 || lenSelect <= int(req.Param1) { + return + } + stone.Rooms.Selectbuff = []int32{} + stone.Userbuff[stone.Rooms.Selectbuff[req.Param1]] = 1 + update["userbuff"] = stone.Userbuff } // 校验事件有后续事件 if eventConf.Probability >= comm.GetRandNum(0, 1000) { // 命中 newEvent = eventConf.PostEvent stone.Rooms.Eventid[newEvent] = false // stone.Rooms.Eventid[req.Eventid] = true // + // 如果新的事件是3选1 + if newEventConf.EventType == EventType25 { + for _, v := range stone.Addweight { + ownerbuff := make(map[int32]struct{}, 0) + for k := range stone.Userbuff { + ownerbuff[k] = struct{}{} + } + stone.Rooms.Selectbuff = this.module.configure.GetBuffGroupDataByLottery(eventConf.Value1, v, ownerbuff) + } + } } // 校验是否通关 diff --git a/modules/stonehenge/api_finish.go b/modules/stonehenge/api_finish.go index 3bafb4f24..f01bfb687 100644 --- a/modules/stonehenge/api_finish.go +++ b/modules/stonehenge/api_finish.go @@ -28,7 +28,7 @@ func (this *apiComp) Finish(session comm.IUserSession, req *pb.StonehengeFinishR update["stageID"] = stone.StageID stone.CurRoomIndes = 0 update["curRoomIndes"] = stone.CurRoomIndes - stone.Rooms = &pb.RoomData{} + stone.Rooms = nil update["rooms"] = stone.Rooms stone.Webuff = make([]int32, 0) update["webuff"] = stone.Webuff diff --git a/modules/stonehenge/api_gotoroom.go b/modules/stonehenge/api_gotoroom.go index 3f2ba4867..e5c75deab 100644 --- a/modules/stonehenge/api_gotoroom.go +++ b/modules/stonehenge/api_gotoroom.go @@ -3,6 +3,7 @@ package stonehenge import ( "go_dreamfactory/comm" "go_dreamfactory/pb" + cfg "go_dreamfactory/sys/configure/structs" ) //参数校验 @@ -18,9 +19,14 @@ func (this *apiComp) GotoRoomCheck(session comm.IUserSession, req *pb.Stonehenge func (this *apiComp) GotoRoom(session comm.IUserSession, req *pb.StonehengeGotoRoomReq) (errdata *pb.ErrorData) { var ( - stone *pb.DBStonehenge - update map[string]interface{} - bCheck bool + stone *pb.DBStonehenge + update map[string]interface{} + bCheck bool + curRoomConf *cfg.GameStoneRoomData // 当前房间 + confStage *cfg.GameStoneStageData + szEvent []int32 + szBuff []int32 + err error ) update = make(map[string]interface{}) if errdata = this.GotoRoomCheck(session, req); errdata != nil { @@ -52,20 +58,70 @@ func (this *apiComp) GotoRoom(session comm.IUserSession, req *pb.StonehengeGotoR return } stone.CurRoomIndes += 1 - - update["curRoomIndes"] = stone.CurRoomIndes - stone.Rooms = &pb.RoomData{ - Eventid: map[int32]bool{}, - Roomid: req.Portal, - Index: stone.CurRoomIndes, + if curRoomConf, err = this.module.configure.GetStoneRoomDataById(req.Portal); err != nil { + errdata = &pb.ErrorData{ + Code: pb.ErrorCode_ConfigNoFound, + Title: pb.ErrorCode_ConfigNoFound.ToString(), + Message: err.Error(), + } + return } + update["curRoomIndes"] = stone.CurRoomIndes + + confStage = this.module.configure.GetStageConfByStageid(stone.StageID, stone.CurRoomIndes) + if confStage == nil { + errdata = &pb.ErrorData{ + Code: pb.ErrorCode_ConfigNoFound, + Title: pb.ErrorCode_ConfigNoFound.ToString(), + } + return + } + stone.Rooms = &pb.RoomData{ + Eventid: map[int32]bool{}, + Portal: this.module.configure.GetRoomGroupDataByLottery(confStage.PortalGroup), + Selectbuff: []int32{}, + Complete: false, + Index: stone.CurRoomIndes, + Roomid: curRoomConf.RoomId, // 第一个房间的房间id读配置 + } + + if curRoomConf.EventrewardGroup != 0 { // 垃圾事件组 + szEvent = append(szEvent, curRoomConf.EventrewardGroup) + + } + if curRoomConf.EventBattleGroup != 0 { // 战斗事件组 + szEvent = append(szEvent, curRoomConf.EventBattleGroup) + } + if curRoomConf.EventStoryNpcGroup != 0 { // 剧情NPC事件组 + szEvent = append(szEvent, curRoomConf.EventStoryNpcGroup) + } + if curRoomConf.EventTreasureGroup != 0 { // 宝箱奖励事件组 + szEvent = append(szEvent, curRoomConf.EventTreasureGroup) + } + + if curRoomConf.EventStoreGroup != 0 { // 商店事件组 + szEvent = append(szEvent, curRoomConf.EventStoreGroup) + } + + if len(szEvent) > 0 { + szBuff = this.module.configure.GetEventGroupDataByLottery(szEvent...) + for _, v := range szBuff { + stone.Rooms.Eventid[v] = false + } + } + stone.Rooms.Portal = this.module.configure.GetRoomGroupDataByLottery(req.Portal) // 校验是否进boss if this.module.configure.GetFloorConfByStageId(stone.StageID)-1 == stone.CurRoomIndes { if stage := this.module.modelStonehenge.GetStoneBoosData(stone.StageID); stage != nil { stone.Rooms.Portal = []int32{stage.Roomid} } - + } + // 进boss + if this.module.configure.GetFloorConfByStageId(stone.StageID) == stone.CurRoomIndes { + if c := this.module.configure.GetStageConfByStageid(stone.StageID, stone.CurRoomIndes); c != nil { + stone.Rooms.Portal = []int32{c.PortalGroup} + } } update["rooms"] = stone.Rooms this.module.modelStonehenge.ChangeStonehengeData(session.GetUserId(), update) diff --git a/modules/stonehenge/core.go b/modules/stonehenge/core.go index fbad45135..3fe212b0e 100644 --- a/modules/stonehenge/core.go +++ b/modules/stonehenge/core.go @@ -1,5 +1,6 @@ package stonehenge const ( - EventType16 = 16 + EventType16 = 16 // 捡垃圾事件 + EventType25 = 25 // buff三选一 )