package equipment import ( "fmt" "go_dreamfactory/comm" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" "go_dreamfactory/utils" ) // 参数校验 func (this *apiComp) EquipCheck(session comm.IUserSession, req *pb.EquipmentEquipReq) (errdata *pb.ErrorData) { if len(req.EquipmentId) != 8 || req.HeroCardId == "" { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ReqParameterError, Title: pb.ErrorCode_ReqParameterError.ToString(), } } return } // /英雄挂在装备 code 错误码信息 data 错误附加数据 func (this *apiComp) Equip(session comm.IUserSession, req *pb.EquipmentEquipReq) (errdata *pb.ErrorData) { var ( err error confs []*cfg.GameEquipData suitconfs []*cfg.GameEquipSuitData equipment *pb.DB_Equipment equipments []*pb.DB_Equipment updatequipment []*pb.DB_Equipment suits []*pb.DB_EquipmentSuit suit *pb.DB_EquipmentSuit equipNum int32 minstar, minlv int32 = int32(99999), int32(99999) hero *pb.DBHero tasks []*pb.BuriedParam = make([]*pb.BuriedParam, 0) ) if errdata = this.EquipCheck(session, req); errdata != nil { return } //校验数据 confs = make([]*cfg.GameEquipData, len(req.EquipmentId)) suitconfs = make([]*cfg.GameEquipSuitData, len(req.EquipmentId)) equipments = make([]*pb.DB_Equipment, len(req.EquipmentId)) //获取英雄数据 if hero, errdata = this.module.ModuleHero.GetHeroByObjID(session.GetUserId(), req.HeroCardId); errdata != nil { return } suits = make([]*pb.DB_EquipmentSuit, 0) for i, v := range req.EquipmentId { if v != "" { equipNum++ if equipments[i], err = this.module.modelEquipment.QueryUserEquipmentsById(session.GetUserId(), v); err != nil { this.module.Errorf("Equip_Check err:%v", err) errdata = &pb.ErrorData{ Code: pb.ErrorCode_EquipmentOnFoundEquipment, Title: pb.ErrorCode_EquipmentOnFoundEquipment.ToString(), } return } if equipments[i].HeroId != "" && hero.Id != equipments[i].HeroId { //装备已经有宿主了 errdata = &pb.ErrorData{ Code: pb.ErrorCode_EquipmentIsWorn, Title: pb.ErrorCode_EquipmentIsWorn.ToString(), Message: fmt.Sprintf("装备已穿戴 装备id:%s 英雄id:%s", hero.Id, equipments[i].HeroId), } return } if confs[i], err = this.module.configure.GetEquipmentConfigureById(equipments[i].CId); err != nil { this.module.Errorf("Equip_Check err:%v", err) errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Title: pb.ErrorCode_ConfigNoFound.ToString(), Message: err.Error(), } return } if confs[i].Color < minstar { minstar = confs[i].Color } if equipments[i].Lv < minlv { minlv = equipments[i].Lv } if suitconfs[i], err = this.module.configure.getEquipSuit(confs[i].Suittype); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Title: pb.ErrorCode_ConfigNoFound.ToString(), Message: err.Error(), } } suit = nil for _, _suit := range suits { if _suit.Suitid == confs[i].Suittype && !_suit.Effect { //找到一个未生效的套装 suit = _suit break } } if suit == nil { suit = &pb.DB_EquipmentSuit{ Suitid: confs[i].Suittype, Eids: []string{v}, Str: confs[i].Color, Lv: equipments[i].Lv, Effect: false, } if len(suit.Eids) >= int(suitconfs[i].Suitnum) { suit.Effect = true tasks = append(tasks, comm.GetBuriedParam(comm.Rtype93, 1, suit.Suitid, suit.Lv)) tasks = append(tasks, comm.GetBuriedParam(comm.Rtype46, 1, suit.Str, suit.Suitid)) tasks = append(tasks, comm.GetBuriedParam(comm.Rtype98, 1, suit.Lv)) tasks = append(tasks, comm.GetBuriedParam(comm.Rtype169, 1, suit.Suitid)) } suits = append(suits, suit) } else { suit.Eids = append(suit.Eids, v) if suit.Str < confs[i].Color { suit.Str = confs[i].Color } if suit.Lv < equipments[i].Lv { suit.Lv = equipments[i].Lv } if !suit.Effect && len(suit.Eids) >= int(suitconfs[i].Suitnum) { suit.Effect = true tasks = append(tasks, comm.GetBuriedParam(comm.Rtype93, 1, suit.Suitid, suit.Lv)) tasks = append(tasks, comm.GetBuriedParam(comm.Rtype46, 1, suit.Str, suit.Suitid)) tasks = append(tasks, comm.GetBuriedParam(comm.Rtype98, 1, suit.Lv)) tasks = append(tasks, comm.GetBuriedParam(comm.Rtype169, 1, suit.Suitid)) } } } else { equipments[i] = nil } } //读取英雄原装备 for i, v := range hero.EquipID { if v != "" { if equipments[i] != nil && v != equipments[i].Id { if equipment, err = this.module.modelEquipment.QueryUserEquipmentsById(session.GetUserId(), v); err != nil { this.module.Errorf("Equip reader uid:%s equipment:%s err:%v", session.GetUserId(), v, err) errdata = &pb.ErrorData{ Code: pb.ErrorCode_SystemError, Title: pb.ErrorCode_SystemError.ToString(), Message: err.Error(), } return } equipment.HeroId = "" equipments[i].HeroId = hero.Id updatequipment = append(updatequipment, equipment, equipments[i]) } else if equipments[i] == nil { if equipment, err = this.module.modelEquipment.QueryUserEquipmentsById(session.GetUserId(), v); err != nil { this.module.Errorf("Equip reader uid:%s equipment:%s err:%v", session.GetUserId(), v, err) errdata = &pb.ErrorData{ Code: pb.ErrorCode_SystemError, Title: pb.ErrorCode_SystemError.ToString(), Message: err.Error(), } return } equipment.HeroId = "" updatequipment = append(updatequipment, equipment) } } else { if equipments[i] != nil { equipments[i].HeroId = hero.Id updatequipment = append(updatequipment, equipments[i]) } } } for i, v := range equipments { //校验装备位置 if v != nil { if i != int(confs[i].Pos) { this.module.Errorf("Equip conf:%+v Target:%d Incorrect range!", confs[i], i) errdata = &pb.ErrorData{ Code: pb.ErrorCode_SystemError, Title: pb.ErrorCode_SystemError.ToString(), } return } hero.EquipID[i] = v.Id } else { hero.EquipID[i] = "" } } //重置套装数据 hero.Suits = suits //更新装备数据加成 if errdata = this.module.ModuleHero.UpdateEquipment(session, hero, equipments); errdata != nil { this.module.Errorf("Equip ModuleHero UpdateEquipment code%v", errdata) return } //同步数据 if err = this.module.modelEquipment.UpdateByHeroId(session.GetUserId(), updatequipment...); err != nil { this.module.Errorf("Equip err%v", err) errdata = &pb.ErrorData{ Code: pb.ErrorCode_SystemError, Title: pb.ErrorCode_SystemError.ToString(), Message: err.Error(), } return } tasks = append(tasks, comm.GetBuriedParam(comm.Rtype41, equipNum, minstar)) tasks = append(tasks, comm.GetBuriedParam(comm.Rtype42, equipNum, minstar)) tasks = append(tasks, comm.GetBuriedParam(comm.Rtype5, equipNum, utils.ToInt32(hero.HeroID))) if len(tasks) > 0 { go this.module.ModuleBuried.TriggerBuried(session.GetUserId(), tasks...) } session.SendMsg(string(this.module.GetType()), "equip", &pb.EquipmentEquipResp{Equipments: updatequipment, Suits: suits}) return }