package equipment import ( "fmt" "go_dreamfactory/comm" "go_dreamfactory/lego/sys/log" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" "math/rand" ) // 参数校验 func (this *apiComp) EnchCheck(session comm.IUserSession, req *pb.EquipmentEnchReq) (errdata *pb.ErrorData) { if req.Eid == "" { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ReqParameterError, Title: pb.ErrorCode_ReqParameterError.ToString(), } } return } // 附魔 func (this *apiComp) Ench(session comm.IUserSession, req *pb.EquipmentEnchReq) (errdata *pb.ErrorData) { var ( equip *pb.DB_Equipment conf *cfg.GameEquipEnchantingData hero *pb.DBHero equipments []*pb.DB_Equipment need []*cfg.Gameatn OldAttrValue int32 AttrValue int32 err error ) if errdata = this.EnchCheck(session, req); errdata != nil { return } if conf, err = this.module.configure.getEquipenchanting(req.Itemid); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Title: pb.ErrorCode_ConfigNoFound.ToString(), Message: err.Error(), } return } need = make([]*cfg.Gameatn, 0) need = append(need, conf.Need...) need = append(need, &cfg.Gameatn{ A: comm.ItemType, T: req.Itemid, N: 1, }) if errdata = this.module.ConsumeRes(session, need, true); errdata != nil { return } if equip, err = this.module.modelEquipment.QueryUserEquipmentsById(session.GetUserId(), req.Eid); err != nil { this.module.Errorf("Equip reader uid:%s equipment:%s err:%v", session.GetUserId(), req.Eid, err) errdata = &pb.ErrorData{ Code: pb.ErrorCode_SystemError, Title: pb.ErrorCode_SystemError.ToString(), Message: err.Error(), } return } if equip.AdverbEntry[req.Index] == nil || equip.AdverbEntry[req.Index].AttrName != conf.Attrkey { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ReqParameterError, Title: pb.ErrorCode_ReqParameterError.ToString(), Message: req.String(), } return } AttrValue = rand.Int31n(conf.AttrMax-conf.AttrMini) + conf.AttrMini OldAttrValue = equip.AdverbEntry[req.Index].EnchValue if AttrValue > equip.AdverbEntry[req.Index].EnchValue { equip.AdverbEntry[req.Index].EnchValue = AttrValue this.module.equipmentsChangePush(session, []*pb.DB_Equipment{equip}) } if err = this.module.modelEquipment.ChangeList(session.GetUserId(), equip.Id, map[string]interface{}{ "adverbEntry": equip.AdverbEntry, "isInitialState": false, }); err != nil { log.Errorf("Upgrade err:%v", err) errdata = &pb.ErrorData{ Code: pb.ErrorCode_SystemError, Title: pb.ErrorCode_SystemError.ToString(), Message: err.Error(), } return } if equip.HeroId != "" { equipments = make([]*pb.DB_Equipment, 8) if hero, errdata = this.module.ModuleHero.GetHeroByObjID(session.GetUserId(), equip.HeroId); errdata != nil { return } for i, v := range hero.EquipID { if v != "" { if v != equip.Id { if equipments[i], err = this.module.modelEquipment.QueryUserEquipmentsById(session.GetUserId(), v); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_EquipmentOnFoundEquipment, Title: pb.ErrorCode_EquipmentOnFoundEquipment.ToString(), Message: fmt.Sprintf("装备唯一 id:%s", v), } return } } else { equipments[i] = equip } } } if errdata = this.module.ModuleHero.UpdateEquipment(session, hero, equipments); errdata != nil { return } } session.SendMsg(string(this.module.GetType()), "ench", &pb.EquipmentEnchResp{ Eid: req.Eid, Itemid: req.Itemid, Index: req.Index, Oldvalue: OldAttrValue, Newvalue: AttrValue, }) go this.module.AsynHandleSession(session.Clone(), func(session comm.IUserSession) { this.module.ModuleBuried.TriggerBuried(session, comm.GetBuriedParam(comm.Rtype94, 1)) this.module.WriteUserLog(session.GetUserId(), req, comm.GMResDelType, "EquipmentEnchReq", need) }) return }