package stonehenge import ( "fmt" "go_dreamfactory/comm" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" ) //参数校验 func (this *apiComp) EventCheck(session comm.IUserSession, req *pb.StonehengeEventReq) (errdata *pb.ErrorData) { if req.Eventid == 0 { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ReqParameterError, Title: pb.ErrorCode_ReqParameterError.ToString(), } } return } func (this *apiComp) Event(session comm.IUserSession, req *pb.StonehengeEventReq) (errdata *pb.ErrorData) { var ( stone *pb.DBStonehenge update map[string]interface{} roomConf *cfg.GameStoneRoomData err error newEvent int32 // 是否有新的事件 eventConf *cfg.GameStoneEventData newEventConf *cfg.GameStoneEventData //新的事件配置 reward []*pb.UserAtno ) update = make(map[string]interface{}) if errdata = this.EventCheck(session, req); errdata != nil { return } stone = this.module.modelStonehenge.GetStonehengeData(session.GetUserId()) if v, ok := stone.Rooms.Eventid[req.Eventid]; !ok || v == true { // 不存在该事件 errdata = &pb.ErrorData{ Code: pb.ErrorCode_ReqParameterError, Title: pb.ErrorCode_ReqParameterError.ToString(), Message: fmt.Sprintf("req.Eventid err :%d", req.Eventid), } return } if stone.Rooms.Eventid[req.Eventid] { // 重复完成 errdata = &pb.ErrorData{ Code: pb.ErrorCode_StonehengeRepeatedReward, Title: pb.ErrorCode_StonehengeRepeatedReward.ToString(), Message: fmt.Sprintf("req.Eventid err :%d", req.Eventid), } return } update["stageID"] = stone.StageID if roomConf, err = this.module.configure.GetStoneRoomDataById(stone.Rooms.Roomid); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Title: pb.ErrorCode_ConfigNoFound.ToString(), Message: err.Error(), } return } // if eventConf, err = this.module.configure.GetStoneEventDataById(req.Eventid); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Title: pb.ErrorCode_ConfigNoFound.ToString(), Message: err.Error(), } return } if eventConf.EventType == EventType16 { // 捡垃圾事件 直接得奖励 user := this.module.ModuleUser.GetUser(session.GetUserId()) if lotteryward := this.module.ModuleTools.GetGroupDataByLottery(eventConf.Value1, user.Vip, user.Lv); len(lotteryward) > 0 { if errdata, reward = this.module.DispenseAtno(session, lotteryward, true); errdata != nil { 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.Userbuff[stone.Rooms.Selectbuff[req.Param1]] = 1 stone.Rooms.Selectbuff = []int32{} update["userbuff"] = stone.Userbuff } else if eventConf.EventType == EventType14 { // 战斗事件合并 if req.Report == nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ReqParameterError, Title: pb.ErrorCode_ReqParameterError.ToString(), Message: fmt.Sprintf("BattleReport is nil"), } return } bWin := false errdata, bWin = this.module.battle.CheckBattleReport(session, req.Report) if errdata != nil { return } if !bWin { // 战斗失败直接返回 return } // 掉落奖励 if conf, err := this.module.configure.GetStoneEventDataById(req.Eventid); err == nil { if battleConf, err := this.module.configure.GetBattleConfById(conf.Value1); err == nil { user := this.module.ModuleUser.GetUser(session.GetUserId()) if lotteryward := this.module.ModuleTools.GetGroupDataByLottery(battleConf.RewardLottery, user.Vip, user.Lv); len(lotteryward) > 0 { if errdata, reward = this.module.DispenseAtno(session, lotteryward, true); errdata != nil { this.module.Debugf("Mline lotteryward DispenseRes err:+%v", lotteryward) } } } } for _, v := range req.Report.Alive { // 注意 阵亡英雄不在存货列表内 stone.Hero[v.Oid] = v } } stone.Rooms.Eventid[req.Eventid] = true // // 校验事件有后续事件 if eventConf.Probability >= comm.GetRandNum(0, 1000) { // 命中 newEvent = eventConf.PostEvent stone.Rooms.Eventid[newEvent] = false // if newEventConf, err = this.module.configure.GetStoneEventDataById(newEvent); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Title: pb.ErrorCode_ConfigNoFound.ToString(), Message: err.Error(), } return } // 如果新的事件是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(newEventConf.Value1, v, ownerbuff) } } } stone.Rooms.Complete = true for _, v := range roomConf.Condition { for k, ok := range stone.Rooms.Eventid { if !ok { if eventConf, err = this.module.configure.GetStoneEventDataById(k); err == nil { if eventConf.EventType == v { stone.Rooms.Complete = false break } } } } if !stone.Rooms.Complete { break } } // 通过条件判断 update["rooms"] = stone.Rooms this.module.modelStonehenge.ChangeStonehengeData(session.GetUserId(), update) session.SendMsg(string(this.module.GetType()), "event", &pb.StonehengeEventResp{ Eventid: req.Eventid, NewEvent: newEvent, Room: stone.Rooms, Reward: reward, Hero: stone.Hero, Userbuff: stone.Userbuff, }) return }