英雄堆叠数量优化
This commit is contained in:
parent
e2a480b1c4
commit
720aca33dc
@ -87,7 +87,7 @@ func (this *apiComp) Awaken(session comm.IUserSession, req *pb.HeroAwakenReq) (c
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
property[awakenData.Phasebonus[0]] += int32(value)
|
property[awakenData.Phasebonus[0]] += int32(value)
|
||||||
}
|
}
|
||||||
this.module.modelHero.mergeMainProperty(session.GetUserId(), _hero.Id, property)
|
this.module.modelHero.mergeMainProperty(session.GetUserId(), _hero, property)
|
||||||
_hero.JuexingLv += 1
|
_hero.JuexingLv += 1
|
||||||
_heroMap := map[string]interface{}{
|
_heroMap := map[string]interface{}{
|
||||||
"juexingLv": _hero.JuexingLv,
|
"juexingLv": _hero.JuexingLv,
|
||||||
|
@ -64,7 +64,7 @@ func (this *apiComp) ResonanceReset(session comm.IUserSession, req *pb.HeroReson
|
|||||||
property[comm.HpPro] -= _hero.AddProperty[comm.HpPro]
|
property[comm.HpPro] -= _hero.AddProperty[comm.HpPro]
|
||||||
property[comm.AtkPro] -= _hero.AddProperty[comm.AtkPro]
|
property[comm.AtkPro] -= _hero.AddProperty[comm.AtkPro]
|
||||||
property[comm.DefPro] -= _hero.AddProperty[comm.DefPro]
|
property[comm.DefPro] -= _hero.AddProperty[comm.DefPro]
|
||||||
this.module.modelHero.mergeMainProperty(session.GetUserId(), _hero.Id, property)
|
this.module.modelHero.mergeMainProperty(session.GetUserId(), _hero, property)
|
||||||
for k := range _hero.Energy { // 清除玩家选择的共鸣属性
|
for k := range _hero.Energy { // 清除玩家选择的共鸣属性
|
||||||
delete(_hero.Energy, k)
|
delete(_hero.Energy, k)
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,7 @@ func (this *apiComp) ResonanceUseEnergy(session comm.IUserSession, req *pb.HeroR
|
|||||||
case 3:
|
case 3:
|
||||||
property[comm.Def] = int32(math.Floor((1.0 + float64(resonConfig.Defpro*req.UseEnergy)/1000) * float64(_hero.Property[comm.Def])))
|
property[comm.Def] = int32(math.Floor((1.0 + float64(resonConfig.Defpro*req.UseEnergy)/1000) * float64(_hero.Property[comm.Def])))
|
||||||
}
|
}
|
||||||
this.module.modelHero.mergeMainProperty(session.GetUserId(), _hero.Id, property)
|
this.module.modelHero.mergeMainProperty(session.GetUserId(), _hero, property)
|
||||||
|
|
||||||
m, err1 := this.module.modelHero.PushHeroProperty(session, _hero.Id) // 推送属性变化
|
m, err1 := this.module.modelHero.PushHeroProperty(session, _hero.Id) // 推送属性变化
|
||||||
if err1 != nil {
|
if err1 != nil {
|
||||||
|
@ -20,6 +20,7 @@ func (this *apiComp) StrengthenUplvCheck(session comm.IUserSession, req *pb.Hero
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -27,17 +28,21 @@ 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) {
|
func (this *apiComp) StrengthenUplv(session comm.IUserSession, req *pb.HeroStrengthenUplvReq) (code pb.ErrorCode, data proto.Message) {
|
||||||
|
|
||||||
var (
|
var (
|
||||||
curLv int32
|
curLv int32
|
||||||
curExp int32 // 当前英雄的经验
|
curExp int32 // 当前英雄的经验
|
||||||
addExp int32 // 需要增加的经验
|
addExp int32 // 需要增加的经验
|
||||||
costGold int32 // 需要消耗的资源
|
costGold int32 // 需要消耗的资源
|
||||||
_hero *pb.DBHero // 目标英雄
|
_hero *pb.DBHero // 目标英雄
|
||||||
_expHero *pb.DBHero // 消耗英雄
|
_expHero *pb.DBHero // 消耗英雄
|
||||||
minAddExp int32
|
minAddExp int32
|
||||||
_costHero []*pb.DBHero // 删除的英雄
|
_changeHero []*pb.DBHero // 变化的英雄
|
||||||
iLvUp int32 // 当前升级次数
|
iLvUp int32 // 当前升级次数
|
||||||
|
_mapCost map[string]int32
|
||||||
)
|
)
|
||||||
|
_mapCost = make(map[string]int32, 0)
|
||||||
|
for _, v := range req.ExpCards { // 数组转map
|
||||||
|
_mapCost[v.Key] += v.Value
|
||||||
|
}
|
||||||
code = this.StrengthenUplvCheck(session, req) // check
|
code = this.StrengthenUplvCheck(session, req) // check
|
||||||
if code != pb.ErrorCode_Success {
|
if code != pb.ErrorCode_Success {
|
||||||
return
|
return
|
||||||
@ -51,8 +56,8 @@ func (this *apiComp) StrengthenUplv(session comm.IUserSession, req *pb.HeroStren
|
|||||||
code = pb.ErrorCode_HeroTypeErr
|
code = pb.ErrorCode_HeroTypeErr
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
for _, v := range req.ExpCards {
|
for k, v := range _mapCost {
|
||||||
_expHero, code = this.module.GetHero(session.GetUserId(), v.Key) // 校验需要消耗经验卡牌的对象是否存在
|
_expHero, code = this.module.GetHero(session.GetUserId(), k) // 校验需要消耗经验卡牌的对象是否存在
|
||||||
if code != pb.ErrorCode_Success {
|
if code != pb.ErrorCode_Success {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -61,17 +66,17 @@ func (this *apiComp) StrengthenUplv(session comm.IUserSession, req *pb.HeroStren
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if v.Value > _expHero.SameCount { // 校验数量
|
if v > _expHero.SameCount { // 校验数量
|
||||||
code = pb.ErrorCode_HeroNoEnough
|
code = pb.ErrorCode_HeroNoEnough
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// 查询 本次消耗会获得多少经验
|
// 查询 本次消耗会获得多少经验
|
||||||
expConf := this.module.configure.GetHeroExp(_expHero.HeroID)
|
expConf := this.module.configure.GetHeroExp(_expHero.HeroID)
|
||||||
if expConf != nil {
|
if expConf != nil {
|
||||||
addExp += expConf.Heroexp * v.Value
|
addExp += expConf.Heroexp * v
|
||||||
}
|
}
|
||||||
costGold = expConf.Needgold * v.Value // 需要消耗的金币
|
costGold = expConf.Needgold * v // 需要消耗的金币
|
||||||
if _expHero.SameCount < v.Value { // 消耗经验卡片数量不足
|
if _expHero.SameCount < v { // 消耗经验卡片数量不足
|
||||||
code = pb.ErrorCode_HeroNoEnough
|
code = pb.ErrorCode_HeroNoEnough
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -140,6 +145,12 @@ func (this *apiComp) StrengthenUplv(session comm.IUserSession, req *pb.HeroStren
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.module.Debugf("升级后当前等级: %d,经验: %d,需要消耗的金币: %d,增加的经验: %d", curLv, curExp, costGold, addExp)
|
this.module.Debugf("升级后当前等级: %d,经验: %d,需要消耗的金币: %d,增加的经验: %d", curLv, curExp, costGold, addExp)
|
||||||
|
|
||||||
|
// 执行升级逻辑
|
||||||
|
newhero, code := this.module.AddCardExp(session.GetUserId(), _hero, addExp) // 加经验
|
||||||
|
if code != pb.ErrorCode_Success {
|
||||||
|
return
|
||||||
|
}
|
||||||
// 消耗金币
|
// 消耗金币
|
||||||
res := make([]*cfg.Game_atn, 0)
|
res := make([]*cfg.Game_atn, 0)
|
||||||
_d := &cfg.Game_atn{
|
_d := &cfg.Game_atn{
|
||||||
@ -152,36 +163,30 @@ func (this *apiComp) StrengthenUplv(session comm.IUserSession, req *pb.HeroStren
|
|||||||
if code != pb.ErrorCode_Success {
|
if code != pb.ErrorCode_Success {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 执行升级逻辑
|
|
||||||
newhero, oldhero, code := this.module.AddCardExp(session.GetUserId(), req.HeroObjID, addExp) // 加经验
|
|
||||||
if code != pb.ErrorCode_Success {
|
|
||||||
// 升级失败资源回退
|
|
||||||
code = this.module.DispenseRes(session, res, true)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 删除经验卡
|
// 删除经验卡
|
||||||
for _, v := range req.ExpCards {
|
for k, v := range _mapCost {
|
||||||
costHero, err1 := this.module.modelHero.consumeHeroCard(session.GetUserId(), v.Key, v.Value)
|
costHero, err1 := this.module.modelHero.consumeHeroCard(session.GetUserId(), k, v)
|
||||||
if err1 != nil {
|
if err1 != nil {
|
||||||
code = pb.ErrorCode_HeroNoEnough
|
code = pb.ErrorCode_HeroNoEnough
|
||||||
this.module.Errorf("delete err failed err:%T!", err1)
|
this.module.Errorf("delete err failed err:%T!", err1)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
_costHero = append(_costHero, costHero)
|
_changeHero = append(_changeHero, costHero)
|
||||||
}
|
}
|
||||||
|
|
||||||
m, err1 := this.module.modelHero.PushHeroProperty(session, oldhero.Id) // 推送属性变化
|
m, err1 := this.module.modelHero.PushHeroProperty(session, _hero.Id) // 推送属性变化
|
||||||
if err1 != nil {
|
if err1 != nil {
|
||||||
this.module.Errorf("PushHeroProperty err!")
|
this.module.Errorf("PushHeroProperty err!")
|
||||||
}
|
}
|
||||||
|
|
||||||
oldhero.Property = m
|
_hero.Property = m
|
||||||
_costHero = append(_costHero, oldhero)
|
_changeHero = append(_changeHero, _hero) // 升级后的英雄 hero id 不变
|
||||||
_costHero = append(_costHero, newhero)
|
if newhero != nil {
|
||||||
session.SendMsg(string(this.module.GetType()), "change", &pb.HeroChangePush{List: _costHero})
|
_changeHero = append(_changeHero, newhero) // 原来的英雄 只是数量变化了
|
||||||
session.SendMsg(string(this.module.GetType()), StrengthenUplv, &pb.HeroStrengthenUplvResp{Hero: newhero})
|
}
|
||||||
|
|
||||||
|
session.SendMsg(string(this.module.GetType()), "change", &pb.HeroChangePush{List: _changeHero})
|
||||||
|
session.SendMsg(string(this.module.GetType()), StrengthenUplv, &pb.HeroStrengthenUplvResp{Hero: _hero})
|
||||||
if iLvUp > 0 { // 升级了 统计任务
|
if iLvUp > 0 { // 升级了 统计任务
|
||||||
this.module.ModuleTask.SendToTask(session, comm.TaskTypeUpHeroLevel, &pb.TaskParam{Second: iLvUp})
|
this.module.ModuleTask.SendToTask(session, comm.TaskTypeUpHeroLevel, &pb.TaskParam{Second: iLvUp})
|
||||||
}
|
}
|
||||||
|
@ -208,7 +208,7 @@ func (this *ModelHero) getOneHero(uid, heroId string) *pb.DBHero {
|
|||||||
return hero
|
return hero
|
||||||
}
|
}
|
||||||
|
|
||||||
//消耗英雄卡
|
//消耗英雄卡 (只需要传heroid即可)
|
||||||
func (this *ModelHero) consumeHeroCard(uid, heroId string, count int32) (hero *pb.DBHero, err error) {
|
func (this *ModelHero) consumeHeroCard(uid, heroId string, count int32) (hero *pb.DBHero, err error) {
|
||||||
if count == 0 {
|
if count == 0 {
|
||||||
return
|
return
|
||||||
@ -274,7 +274,7 @@ func (this *ModelHero) setEquipProperty(hero *pb.DBHero, equip []*pb.DB_Equipmen
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.mergeMainProperty(hero.Uid, hero.Uid, property)
|
this.mergeMainProperty(hero.Uid, hero, property)
|
||||||
this.mergeAddProperty(hero.Uid, hero.Uid, addProperty)
|
this.mergeAddProperty(hero.Uid, hero.Uid, addProperty)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -329,8 +329,8 @@ func (this *ModelHero) setEquipment(hero *pb.DBHero) (newHero *pb.DBHero, err er
|
|||||||
}
|
}
|
||||||
|
|
||||||
//合并属性即属性值累加
|
//合并属性即属性值累加
|
||||||
func (this *ModelHero) mergeMainProperty(uid, heroId string, data map[string]int32) {
|
func (this *ModelHero) mergeMainProperty(uid string, hero *pb.DBHero, data map[string]int32) {
|
||||||
hero := this.getOneHero(uid, heroId)
|
|
||||||
if hero == nil {
|
if hero == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -343,7 +343,7 @@ func (this *ModelHero) mergeMainProperty(uid, heroId string, data map[string]int
|
|||||||
comm.Atk: hero.Property[comm.Atk],
|
comm.Atk: hero.Property[comm.Atk],
|
||||||
comm.Def: hero.Property[comm.Def],
|
comm.Def: hero.Property[comm.Def],
|
||||||
}
|
}
|
||||||
if err := this.modifyHeroData(uid, heroId, update); err != nil {
|
if err := this.modifyHeroData(uid, hero.Id, update); err != nil {
|
||||||
this.moduleHero.Errorf("mergeMainProperty err %v", err)
|
this.moduleHero.Errorf("mergeMainProperty err %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -112,33 +112,33 @@ func (this *Hero) QueryHeroAmount(uId string, heroCfgId int32) (amount uint32) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 给指定英雄加经验
|
// 给指定英雄加经验
|
||||||
func (this *Hero) AddCardExp(uid string, heroId string, exp int32) (newhero *pb.DBHero, oldhero *pb.DBHero, code pb.ErrorCode) {
|
func (this *Hero) AddCardExp(uid string, hero *pb.DBHero, exp int32) (newhero *pb.DBHero, code pb.ErrorCode) {
|
||||||
var (
|
var (
|
||||||
curExp int32
|
curExp int32
|
||||||
curLv int32
|
curLv int32
|
||||||
err1 error
|
err1 error
|
||||||
|
update map[string]interface{} // 属性变化
|
||||||
)
|
)
|
||||||
_hero, err := this.GetHero(uid, heroId) // 获取英雄信息
|
if hero == nil {
|
||||||
if err != 0 {
|
|
||||||
code = pb.ErrorCode_HeroNoExist
|
code = pb.ErrorCode_HeroNoExist
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
update = make(map[string]interface{}, 0)
|
||||||
curExp = _hero.Exp
|
curExp = hero.Exp
|
||||||
curLv = _hero.Lv
|
curLv = hero.Lv
|
||||||
|
|
||||||
var maxLv int32 // 校验等级达到上限
|
var maxLv int32 // 校验等级达到上限
|
||||||
maxLv = _hero.Star * comm.HeroStarLvRatio
|
maxLv = hero.Star * comm.HeroStarLvRatio
|
||||||
_data := this.configure.GetHeroLv(curLv)
|
_data := this.configure.GetHeroLv(curLv)
|
||||||
if _data != nil {
|
if _data != nil {
|
||||||
if maxLv <= _hero.Lv && curExp >= _data.Heroexp[0].N { // 加经验之前校验是否达到最大等级
|
if maxLv <= hero.Lv && curExp >= _data.Heroexp[0].N { // 加经验之前校验是否达到最大等级
|
||||||
code = pb.ErrorCode_HeroMaxLv
|
code = pb.ErrorCode_HeroMaxLv
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
curExp += exp // 先把经验加上
|
curExp += exp // 先把经验加上
|
||||||
for { // 死循环判断一键升级
|
for { // 死循环判断一键升级
|
||||||
|
|
||||||
if maxLv <= _hero.Lv && curExp >= _data.Heroexp[0].N { // 设置最大经验和等级
|
if maxLv <= hero.Lv && curExp >= _data.Heroexp[0].N { // 设置最大经验和等级
|
||||||
curLv = maxLv
|
curLv = maxLv
|
||||||
curExp = _data.Heroexp[0].N
|
curExp = _data.Heroexp[0].N
|
||||||
break
|
break
|
||||||
@ -156,22 +156,20 @@ func (this *Hero) AddCardExp(uid string, heroId string, exp int32) (newhero *pb.
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检测等级有变化 推送属性
|
// 检测等级有变化
|
||||||
if curLv != _hero.Lv {
|
if curLv != hero.Lv {
|
||||||
data := make(map[string]int32, 0)
|
//data := make(map[string]int32, 0)
|
||||||
preConfig := this.configure.GetHeroLv(_hero.Lv)
|
preConfig := this.configure.GetHeroLv(hero.Lv)
|
||||||
nowConfig := this.configure.GetHeroLv(curLv)
|
nowConfig := this.configure.GetHeroLv(curLv)
|
||||||
data["hp"] = int32(nowConfig.Hp - preConfig.Hp)
|
update["hp"] = int32(nowConfig.Hp - preConfig.Hp)
|
||||||
data["atk"] = int32(nowConfig.Atk - preConfig.Atk)
|
update["atk"] = int32(nowConfig.Atk - preConfig.Atk)
|
||||||
data["def"] = int32(nowConfig.Def - preConfig.Def)
|
update["def"] = int32(nowConfig.Def - preConfig.Def)
|
||||||
this.modelHero.mergeMainProperty(uid, heroId, data)
|
//this.modelHero.mergeMainProperty(uid, hero.Id, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
curCount := _hero.SameCount - 1
|
curCount := hero.SameCount - 1
|
||||||
if curCount == 0 {
|
if curCount != 0 { // 有叠加的情况
|
||||||
this.modelHero.consumeHeroCard(uid, _hero.Id, 1)
|
newhero, err1 = this.modelHero.createOneHero(uid, hero.HeroID)
|
||||||
} else {
|
|
||||||
newhero, err1 = this.modelHero.createOneHero(uid, _hero.HeroID)
|
|
||||||
if err1 != nil {
|
if err1 != nil {
|
||||||
code = pb.ErrorCode_DBError
|
code = pb.ErrorCode_DBError
|
||||||
}
|
}
|
||||||
@ -183,23 +181,20 @@ func (this *Hero) AddCardExp(uid string, heroId string, exp int32) (newhero *pb.
|
|||||||
code = pb.ErrorCode_DBError
|
code = pb.ErrorCode_DBError
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
update1 := map[string]interface{}{
|
|
||||||
"lv": curLv,
|
|
||||||
"exp": curExp,
|
|
||||||
"isOverlying": false,
|
|
||||||
"sameCount": 1,
|
|
||||||
}
|
|
||||||
|
|
||||||
_hero.Lv = curLv
|
update["lv"] = curLv
|
||||||
_hero.Exp = curExp
|
update["exp"] = curExp
|
||||||
_hero.IsOverlying = false
|
update["isOverlying"] = false
|
||||||
_hero.SameCount = 1
|
update["sameCount"] = 1
|
||||||
|
|
||||||
if err := this.modelHero.modifyHeroData(uid, _hero.Id, update1); err != nil {
|
hero.Lv = curLv
|
||||||
|
hero.Exp = curExp
|
||||||
|
hero.IsOverlying = false
|
||||||
|
hero.SameCount = 1
|
||||||
|
|
||||||
|
if err := this.modelHero.modifyHeroData(uid, hero.Id, update); err != nil {
|
||||||
code = pb.ErrorCode_DBError
|
code = pb.ErrorCode_DBError
|
||||||
}
|
}
|
||||||
|
|
||||||
oldhero = _hero
|
|
||||||
} else {
|
} else {
|
||||||
code = pb.ErrorCode_HeroNoExist
|
code = pb.ErrorCode_HeroNoExist
|
||||||
return
|
return
|
||||||
|
Loading…
Reference in New Issue
Block a user