package expedition import ( "fmt" "go_dreamfactory/comm" "go_dreamfactory/lego/sys/log" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" ) // 参数校验 func (this *apiComp) ReceiveCheck(session comm.IUserSession, req *pb.ExpeditionReceiveReq) (errdata *pb.ErrorData) { return } // 获取工会boos战信息 func (this *apiComp) Receive(session comm.IUserSession, req *pb.ExpeditionReceiveReq) (errdata *pb.ErrorData) { var ( conf *cfg.GameExpeditionBossData info *pb.DBExpedition boos *pb.DBExpeditionBoos member *pb.DBExpeditionMember award []*pb.UserAtno err error ok bool ) if errdata = this.ReceiveCheck(session, req); errdata != nil { return } lock, _ := this.module.model.userlock(req.Guildid) err = lock.Lock() if err != nil { this.module.Error("公会战分布式锁 err!", log.Field{Key: "Guildid", Value: req.Guildid}, log.Field{Key: "err", Value: err.Error()}) return } defer lock.Unlock() if info, err = this.module.model.getInfo(req.Guildid); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Message: err.Error(), } return } for _, v := range info.Boos { if v.Boosid == req.Boosid { boos = v } } if boos == nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_SystemError, Message: fmt.Sprintf("no found currboos:%d", req.Boosid), } return } if !boos.Crusaded { this.module.model.settlementboos(info, boos) } if conf, err = this.module.configure.getGameExpeditionBoosData(boos.Boosid); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Message: err.Error(), } return } if boos.Hp > 0 { if state := getSysDayTimeState(); state != 2 { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ReqParameterError, Message: "curr no in award time!", } return } if member, ok = boos.Members[session.GetUserId()]; !ok || member.State == 0 { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ReqParameterError, Message: "Not involved!", } return } member.State = 2 if errdata, award = this.module.DispenseAtno(session, conf.FailReward, true); errdata != nil { return } } else { if member, ok = boos.Members[session.GetUserId()]; ok { if member.State == 2 { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ReqParameterError, Message: "Received!", } return } member.State = 2 } else { boos.Members[session.GetUserId()] = &pb.DBExpeditionMember{ Uid: session.GetUserId(), State: 2, } } user, err := this.module.GetUserForSession(session) if err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Title: pb.ErrorCode_DBError.ToString(), Message: err.Error(), } return } if prop := this.module.ModuleTools.GetGroupDataByLottery(conf.KillReward, user.Vip, user.Lv); len(prop) == 0 { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Title: pb.ErrorCode_ConfigNoFound.ToString(), Message: fmt.Sprintf("掉落组未找到:%d", conf.KillReward), } return } else { if errdata, award = this.module.DispenseAtno(session, prop, true); errdata != nil { return } } } if err = this.module.model.updateExpedition(info); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Message: err.Error(), } return } session.SendMsg(string(this.module.GetType()), "receive", &pb.ExpeditionReceiveResp{Boosid: req.Boosid, Award: award}) return }