package dragon import ( "go_dreamfactory/comm" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" ) //参数校验 func (this *apiComp) LvItemCheck(session comm.IUserSession, req *pb.DragonLvItemReq) (errdata *pb.ErrorData) { if len(req.Oid) == 0 || req.Attribute == "" { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ReqParameterError, Title: pb.ErrorCode_ReqParameterError.ToString(), } } return } func (this *apiComp) LvItem(session comm.IUserSession, req *pb.DragonLvItemReq) (errdata *pb.ErrorData) { var ( err error dragon *pb.DBDragon curLvConf *cfg.GameDragonLvItemData // 当前道具加成 upLvConf *cfg.GameDragonLvItemData // 下一级道具加成 speed int32 chanegList []*pb.DBDragon rsp *pb.DragonLvItemResp update map[string]interface{} conf *cfg.GameTrainlvData ) update = make(map[string]interface{}) rsp = &pb.DragonLvItemResp{} if errdata = this.LvItemCheck(session, req); errdata != nil { return } if dragon, err = this.module.modelDragon.GetDragonByOid(session.GetUserId(), req.Oid); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ReqParameterError, Title: pb.ErrorCode_ReqParameterError.ToString(), Message: err.Error(), } return } if conf, err = this.module.configure.GetDragonConfById(dragon.Dragonid, dragon.Lv); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Title: pb.ErrorCode_ConfigNoFound.ToString(), Message: err.Error(), } } if conf.Type != 3 { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DragonNotAdultDdragon, Title: pb.ErrorCode_DragonNotAdultDdragon.ToString(), } return } if _, ok := dragon.Lvitem[req.Attribute]; !ok { // 默认1级 dragon.Lvitem[req.Attribute] = 1 } if curLvConf, err = this.module.configure.GetDragonLvItemConf(req.Attribute, dragon.Lvitem[req.Attribute]); err == nil { if upLvConf, err = this.module.configure.GetDragonLvItemConf(req.Attribute, dragon.Lvitem[req.Attribute]+1); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DragonMaxLvItem, Title: pb.ErrorCode_DragonMaxLvItem.ToString(), Message: err.Error(), } return } if errdata = this.module.CheckRes(session, curLvConf.Item); errdata != nil { // 校验消耗 return } dragon.Lvitem[req.Attribute] += 1 // 升级 update["lvitem"] = dragon.Lvitem dragon.Property[req.Attribute] += upLvConf.Num update["property"] = dragon.Property } if speed > dragon.Property["etime"] { // 更新最大速度 dragon.Property["etime"] = speed update["property"] = dragon.Property } rsp.Dragons = dragon if errdata = this.module.ConsumeRes(session, curLvConf.Item, true); errdata != nil { return } this.module.modelDragon.UpdateDragonData(session.GetUserId(), dragon.Id, update) chanegList = append(chanegList, dragon) session.SendMsg(string(this.module.GetType()), "change", &pb.DragonChangePush{ Dragons: chanegList, }) session.SendMsg(string(this.module.GetType()), "lvitem", rsp) go this.module.AsynHandleSession(session.Clone(), func(session comm.IUserSession) { this.module.WriteUserLog(session.GetUserId(), comm.GMResDelType, "DragonLvItemReq", curLvConf.Item) // 消耗资源 }) return }