diff --git a/modules/hero/api_awaken.go b/modules/hero/api_awaken.go index 093777539..9e4114759 100644 --- a/modules/hero/api_awaken.go +++ b/modules/hero/api_awaken.go @@ -29,7 +29,7 @@ func (this *apiComp) Awaken(session comm.IUserSession, req *pb.HeroAwakenReq) (c if code != pb.ErrorCode_Success { return } - _hero, code = this.module.GetHero(session.GetUserId(), req.HeroObjID) + _hero, code = this.module.GetHeroByObjID(session.GetUserId(), req.HeroObjID) if code != pb.ErrorCode_Success { return } diff --git a/modules/hero/api_lock.go b/modules/hero/api_lock.go index 69dddb69c..3e6cf7879 100644 --- a/modules/hero/api_lock.go +++ b/modules/hero/api_lock.go @@ -27,7 +27,7 @@ func (this *apiComp) Lock(session comm.IUserSession, req *pb.HeroLockReq) (code if code != pb.ErrorCode_Success { return } - _hero, code = this.module.GetHero(session.GetUserId(), req.Heroid) + _hero, code = this.module.GetHeroByObjID(session.GetUserId(), req.Heroid) if code != pb.ErrorCode_Success { return } diff --git a/modules/hero/api_resonance.go b/modules/hero/api_resonance.go index a5ca34174..c97cbda98 100644 --- a/modules/hero/api_resonance.go +++ b/modules/hero/api_resonance.go @@ -25,15 +25,17 @@ func (this *apiComp) Resonance(session comm.IUserSession, req *pb.HeroResonanceR _hero *pb.DBHero _costHero *pb.DBHero changeHero []*pb.DBHero // 变化的英雄数据 + _costMaphero map[string]*pb.DBHero ) changeHero = make([]*pb.DBHero, 0) szCostHero = make(map[string]int32, 0) + _costMaphero = make(map[string]*pb.DBHero, 0) code = this.ResonanceCheck(session, req) // check if code != pb.ErrorCode_Success { return } - _hero, code = this.module.GetHero(session.GetUserId(), req.HeroObjID) // 查询目标卡是否存在 + _hero, code = this.module.GetHeroByObjID(session.GetUserId(), req.HeroObjID) // 查询目标卡是否存在 if code != pb.ErrorCode_Success { return } @@ -54,17 +56,12 @@ func (this *apiComp) Resonance(session comm.IUserSession, req *pb.HeroResonanceR for k, v := range szCostHero { for _, v1 := range resonConfig.Heroneed { - if v1.A == comm.HeroType { totalCostCard += 1 } - //value, err := strconv.Atoi(v1.T) - // if err != nil { // 不能转成英雄配置ID 说明配置出错 - // code = pb.ErrorCode_ConfigurationException - // return - // } - _costHero, code = this.module.GetHero(session.GetUserId(), k) // 查询消耗卡是否存在 - if code != pb.ErrorCode_Success { // 英雄被锁不能消耗 + + _costHero, code = this.module.GetHeroByObjID(session.GetUserId(), k) // 查询消耗卡是否存在 + if code != pb.ErrorCode_Success { // 英雄被锁不能消耗 return } if _costHero.Block { @@ -74,6 +71,7 @@ func (this *apiComp) Resonance(session comm.IUserSession, req *pb.HeroResonanceR code = pb.ErrorCode_HeroNoEnough return } + _costMaphero[k] = _costHero } } @@ -82,12 +80,12 @@ func (this *apiComp) Resonance(session comm.IUserSession, req *pb.HeroResonanceR return } for k, v := range szCostHero { - _delhero, c := this.module.DelCard(session.GetUserId(), k, v) + c := this.module.DelCard(session.GetUserId(), _costMaphero[k], v) if c != pb.ErrorCode_Success { code = c return } - changeHero = append(changeHero, _delhero) + changeHero = append(changeHero, _costMaphero[k]) } resonConfig, err1 := this.module.configure.GetHeroResonanceConfig(_hero.HeroID) diff --git a/modules/hero/api_resonanceReset.go b/modules/hero/api_resonanceReset.go index b40debd7d..3ab5fff48 100644 --- a/modules/hero/api_resonanceReset.go +++ b/modules/hero/api_resonanceReset.go @@ -27,7 +27,7 @@ func (this *apiComp) ResonanceReset(session comm.IUserSession, req *pb.HeroReson return } - _hero, code = this.module.GetHero(session.GetUserId(), req.HeroObjID) // 查询目标卡是否存在 + _hero, code = this.module.GetHeroByObjID(session.GetUserId(), req.HeroObjID) // 查询目标卡是否存在 if code != pb.ErrorCode_Success { code = pb.ErrorCode_HeroNoExist return diff --git a/modules/hero/api_resonanceSelect.go b/modules/hero/api_resonanceSelect.go index 5f90c76da..f682d1ab7 100644 --- a/modules/hero/api_resonanceSelect.go +++ b/modules/hero/api_resonanceSelect.go @@ -26,7 +26,7 @@ func (this *apiComp) ResonanceUseEnergy(session comm.IUserSession, req *pb.HeroR return } - _hero, code = this.module.GetHero(session.GetUserId(), req.HeroObjID) // 查询目标卡是否存在 + _hero, code = this.module.GetHeroByObjID(session.GetUserId(), req.HeroObjID) // 查询目标卡是否存在 if code != pb.ErrorCode_Success { return } diff --git a/modules/hero/api_strengthenUpSkill.go b/modules/hero/api_strengthenUpSkill.go index d0c18e532..37f5a0f5a 100644 --- a/modules/hero/api_strengthenUpSkill.go +++ b/modules/hero/api_strengthenUpSkill.go @@ -39,11 +39,11 @@ func (this *apiComp) StrengthenUpSkill(session comm.IUserSession, req *pb.HeroSt return } - _hero, code = this.module.GetHero(session.GetUserId(), req.HeroObjID) // 查询目标卡是否存在 + _hero, code = this.module.GetHeroByObjID(session.GetUserId(), req.HeroObjID) // 查询目标卡是否存在 if code != pb.ErrorCode_Success { return } - _costHero, code = this.module.GetHero(session.GetUserId(), req.CostCardObj) // 查询消耗卡是否存在 + _costHero, code = this.module.GetHeroByObjID(session.GetUserId(), req.CostCardObj) // 查询消耗卡是否存在 if code != pb.ErrorCode_Success { return } @@ -125,12 +125,12 @@ func (this *apiComp) StrengthenUpSkill(session comm.IUserSession, req *pb.HeroSt return } // 扣除材料 - delcard, c := this.module.DelCard(session.GetUserId(), req.CostCardObj, 1) + c := this.module.DelCard(session.GetUserId(), _costHero, 1) if c != pb.ErrorCode_Success { code = pb.ErrorCode_DBError return } - session.SendMsg(string(this.module.GetType()), "change", &pb.HeroChangePush{List: []*pb.DBHero{delcard}}) + session.SendMsg(string(this.module.GetType()), "change", &pb.HeroChangePush{List: []*pb.DBHero{_costHero}}) m, err1 := this.module.modelHero.PushHeroProperty(session, _hero.Id) // 推送属性变化 if err1 != nil { this.module.Errorf("PushHeroProperty err!") diff --git a/modules/hero/api_strengthenUpStar.go b/modules/hero/api_strengthenUpStar.go index dca39204a..0dfc87393 100644 --- a/modules/hero/api_strengthenUpStar.go +++ b/modules/hero/api_strengthenUpStar.go @@ -42,8 +42,10 @@ func (this *apiComp) StrengthenUpStar(session comm.IUserSession, req *pb.HeroStr bCheckNeedhero bool // 指定英雄校验 bCheckRacehero bool // 种族英雄校验 chanegCard []*pb.DBHero // 变化的英雄数据 + CostHeroObj map[string]*pb.DBHero // 所有消耗英雄分类 ) mapCostHero = make(map[string]int32, 0) + CostHeroObj = make(map[string]*pb.DBHero, 0) for _, v := range req.Hero { mapCostHero[v.CostCardObj] += v.Amount costNeedHeroCount += v.Amount @@ -57,7 +59,7 @@ func (this *apiComp) StrengthenUpStar(session comm.IUserSession, req *pb.HeroStr if code != pb.ErrorCode_Success { return } - _hero, code = this.module.GetHero(session.GetUserId(), req.HeroObjID) + _hero, code = this.module.GetHeroByObjID(session.GetUserId(), req.HeroObjID) if code != pb.ErrorCode_Success { return } @@ -95,7 +97,7 @@ func (this *apiComp) StrengthenUpStar(session comm.IUserSession, req *pb.HeroStr } // 遍历所有消耗英雄 for k, v := range mapCostHero { - if tagHero, code = this.module.GetHero(session.GetUserId(), k); code != pb.ErrorCode_Success { // 没有这个英雄 + if tagHero, code = this.module.GetHeroByObjID(session.GetUserId(), k); code != pb.ErrorCode_Success { // 没有这个英雄 return } else { if tagHero.Block { // 锁定的卡不允许被消耗 @@ -123,6 +125,7 @@ func (this *apiComp) StrengthenUpStar(session comm.IUserSession, req *pb.HeroStr } this.module.Debugf("指定英雄校验结果:%b,种族英雄校验结果:%b", bCheckNeedhero, bCheckRacehero) } + CostHeroObj[k] = tagHero } if !bCheckRacehero || !bCheckNeedhero { code = pb.ErrorCode_ReqParameterError @@ -144,13 +147,13 @@ func (this *apiComp) StrengthenUpStar(session comm.IUserSession, req *pb.HeroStr return } for k, v := range mapCostHero { - _delcard, c := this.module.DelCard(session.GetUserId(), k, v) + c := this.module.DelCard(session.GetUserId(), CostHeroObj[k], v) if c != pb.ErrorCode_Success { code = pb.ErrorCode_DBError this.module.Errorf("del hero err card:%s,count = %d", k, v) return } - chanegCard = append(chanegCard, _delcard) + chanegCard = append(chanegCard, CostHeroObj[k]) } _hero.Star += 1 _heroMap := map[string]interface{}{ diff --git a/modules/hero/api_strengthenUplv.go b/modules/hero/api_strengthenUplv.go index 0611493df..b823b80b5 100644 --- a/modules/hero/api_strengthenUplv.go +++ b/modules/hero/api_strengthenUplv.go @@ -28,17 +28,18 @@ func (this *apiComp) StrengthenUplvCheck(session comm.IUserSession, req *pb.Hero func (this *apiComp) StrengthenUplv(session comm.IUserSession, req *pb.HeroStrengthenUplvReq) (code pb.ErrorCode, data proto.Message) { var ( - curLv int32 - curExp int32 // 当前英雄的经验 - addExp int32 // 需要增加的经验 - costGold int32 // 需要消耗的资源 - _hero *pb.DBHero // 目标英雄 - _expHero *pb.DBHero // 消耗英雄 - minAddExp int32 - _changeHero []*pb.DBHero // 变化的英雄 - iLvUp int32 // 当前升级次数 - _mapCost map[string]int32 + curLv int32 + curExp int32 // 当前英雄的经验 + addExp int32 // 需要增加的经验 + costGold int32 // 需要消耗的资源 + _hero *pb.DBHero // 目标英雄 + _costExpHero map[string]*pb.DBHero // 消耗英雄 + minAddExp int32 + _changeHero []*pb.DBHero // 变化的英雄 + iLvUp int32 // 当前升级次数 + _mapCost map[string]int32 // ) + _costExpHero = make(map[string]*pb.DBHero, 0) _mapCost = make(map[string]int32, 0) for _, v := range req.ExpCards { // 数组转map _mapCost[v.Key] += v.Value @@ -47,7 +48,7 @@ func (this *apiComp) StrengthenUplv(session comm.IUserSession, req *pb.HeroStren if code != pb.ErrorCode_Success { return } - _hero, code = this.module.GetHero(session.GetUserId(), req.HeroObjID) + _hero, code = this.module.GetHeroByObjID(session.GetUserId(), req.HeroObjID) if code != pb.ErrorCode_Success { return } @@ -57,7 +58,8 @@ func (this *apiComp) StrengthenUplv(session comm.IUserSession, req *pb.HeroStren return } for k, v := range _mapCost { - _expHero, code = this.module.GetHero(session.GetUserId(), k) // 校验需要消耗经验卡牌的对象是否存在 + _expHero, c := this.module.GetHeroByObjID(session.GetUserId(), k) // 校验需要消耗经验卡牌的对象是否存在 + code = c if code != pb.ErrorCode_Success { return } @@ -85,6 +87,7 @@ func (this *apiComp) StrengthenUplv(session comm.IUserSession, req *pb.HeroStren } else if minAddExp > expConf.Heroexp { minAddExp = expConf.Heroexp // 取出最小的经验卡 } + _costExpHero[k] = _expHero } if addExp == 0 { code = pb.ErrorCode_HeroExpTypeErr @@ -164,14 +167,15 @@ func (this *apiComp) StrengthenUplv(session comm.IUserSession, req *pb.HeroStren return } // 删除经验卡 + for k, v := range _mapCost { - costHero, err1 := this.module.modelHero.consumeHeroCard(session.GetUserId(), k, v) + err1 := this.module.modelHero.consumeHeroCard(session.GetUserId(), _costExpHero[k], v) if err1 != nil { code = pb.ErrorCode_HeroNoEnough this.module.Errorf("delete err failed err:%T!", err1) return } - _changeHero = append(_changeHero, costHero) + _changeHero = append(_changeHero, _costExpHero[k]) } m, err1 := this.module.modelHero.PushHeroProperty(session, _hero.Id) // 推送属性变化 diff --git a/modules/hero/model_hero.go b/modules/hero/model_hero.go index f09c1845b..1329dd6ee 100644 --- a/modules/hero/model_hero.go +++ b/modules/hero/model_hero.go @@ -209,12 +209,11 @@ func (this *ModelHero) getOneHero(uid, heroId string) *pb.DBHero { } //消耗英雄卡 (只需要传heroid即可) -func (this *ModelHero) consumeHeroCard(uid, heroId string, count int32) (hero *pb.DBHero, err error) { +func (this *ModelHero) consumeHeroCard(uid string, hero *pb.DBHero, count int32) (err error) { if count == 0 { return } - hero = this.getOneHero(uid, heroId) if hero == nil { err = errors.New("hero no exist") return @@ -224,18 +223,18 @@ func (this *ModelHero) consumeHeroCard(uid, heroId string, count int32) (hero *p err = errors.New("hero card no enough") return } - hero.SameCount -= count + hero.SameCount -= count // 数量-1 if hero.SameCount == 0 { - if err := this.moduleHero.modelHero.DelListlds(uid, heroId); err != nil { + if err := this.moduleHero.modelHero.DelListlds(uid, hero.Id); err != nil { this.moduleHero.Errorf("%v", err) } } else { update := map[string]interface{}{ "sameCount": hero.SameCount, } - err = this.modifyHeroData(uid, heroId, update) + err = this.modifyHeroData(uid, hero.Id, update) } - this.moduleHero.Debugf("删除一张卡牌uid:%s,卡牌ID:%s", uid, heroId) + this.moduleHero.Debugf("删除一张卡牌uid:%s,卡牌ID:%s", uid, hero.Id) return } diff --git a/modules/hero/module.go b/modules/hero/module.go index 4d5a019ac..3c222686c 100644 --- a/modules/hero/module.go +++ b/modules/hero/module.go @@ -49,7 +49,7 @@ func (this *Hero) CreateRepeatHero(uid string, heroCfgId string, num int32) (*pb } //获取英雄 -func (this *Hero) GetHero(uid, heroId string) (*pb.DBHero, pb.ErrorCode) { +func (this *Hero) GetHeroByObjID(uid, heroId string) (*pb.DBHero, pb.ErrorCode) { hero := this.modelHero.getOneHero(uid, heroId) if hero == nil { return nil, pb.ErrorCode_HeroNoExist @@ -203,11 +203,11 @@ func (this *Hero) AddCardExp(uid string, hero *pb.DBHero, exp int32) (newhero *p } // 删除指定卡牌 -func (this *Hero) DelCard(udi string, cardid string, amount int32) (hero *pb.DBHero, code pb.ErrorCode) { +func (this *Hero) DelCard(udi string, hero *pb.DBHero, amount int32) (code pb.ErrorCode) { var ( err error ) - hero, err = this.modelHero.consumeHeroCard(udi, cardid, amount) + err = this.modelHero.consumeHeroCard(udi, hero, amount) if err != nil { code = pb.ErrorCode_DBError return