英雄升级
This commit is contained in:
parent
69d8663f90
commit
e4d543647d
@ -85,13 +85,13 @@ func (this *DB_Comp) Model_UpdateDBByLog(uid string) (err error) {
|
|||||||
log.Errorf("parameter len _id : %s,uid : %s d.len:%v", data.ID, data.UID, len(data.D))
|
log.Errorf("parameter len _id : %s,uid : %s d.len:%v", data.ID, data.UID, len(data.D))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
_obj := bson.M{}
|
_obj := make(bson.A, len(data.D[1].(bson.A)))
|
||||||
for _, v := range data.D[1].(bson.D) {
|
for i, v := range data.D[1].(bson.A) {
|
||||||
_obj[v.Key] = v.Value
|
_obj[i] = v
|
||||||
}
|
}
|
||||||
_key := data.D[0].(string)
|
_key := data.D[0].(string)
|
||||||
|
|
||||||
_, err := this.DB.InsertOne(core.SqlTable(_key), _obj)
|
_, err := this.DB.InsertMany(core.SqlTable(_key), _obj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("insert %s db err:%v", (core.SqlTable(_key)), err)
|
log.Errorf("insert %s db err:%v", (core.SqlTable(_key)), err)
|
||||||
ErrorLogCount[data.ID]++
|
ErrorLogCount[data.ID]++
|
||||||
@ -138,16 +138,17 @@ func (this *DB_Comp) Model_UpdateDBByLog(uid string) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_tableName := data.D[0].(string) //表名
|
_tableName := data.D[0].(string) //表名
|
||||||
Where := bson.M{}
|
Where := data.D[1].(bson.M)
|
||||||
Query := bson.M{}
|
Query := data.D[2].(bson.M)
|
||||||
|
|
||||||
for _, v := range data.D[1].(bson.D) {
|
// for key, v := range data.D[1].(bson.M) {
|
||||||
Where[v.Key] = v.Value
|
// //Where[v.Key] = v.Value
|
||||||
}
|
// Where = v
|
||||||
for _, v := range data.D[2].(bson.D) {
|
// }
|
||||||
Query[v.Key] = v.Value
|
// for _, v := range data.D[2].(bson.M) {
|
||||||
|
// Query[v.Key] = v.Value
|
||||||
|
|
||||||
}
|
// }
|
||||||
_, err = this.DB.UpdateMany(core.SqlTable(_tableName), Where, bson.M{"$set": Query})
|
_, err = this.DB.UpdateMany(core.SqlTable(_tableName), Where, bson.M{"$set": Query})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("Update %s db err:%v", core.SqlTable(_tableName), err)
|
log.Errorf("Update %s db err:%v", core.SqlTable(_tableName), err)
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package hero
|
package hero
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"go_dreamfactory/comm"
|
||||||
"go_dreamfactory/lego/core"
|
"go_dreamfactory/lego/core"
|
||||||
"go_dreamfactory/modules"
|
"go_dreamfactory/modules"
|
||||||
)
|
)
|
||||||
@ -9,6 +10,7 @@ type Api_Comp struct {
|
|||||||
modules.MComp_GateComp
|
modules.MComp_GateComp
|
||||||
service core.IService
|
service core.IService
|
||||||
module *Hero
|
module *Hero
|
||||||
|
user comm.IUser
|
||||||
}
|
}
|
||||||
|
|
||||||
const ( //消息回复的头名称
|
const ( //消息回复的头名称
|
||||||
@ -27,5 +29,13 @@ func (this *Api_Comp) Init(service core.IService, module core.IModule, comp core
|
|||||||
|
|
||||||
func (this *Api_Comp) Start() (err error) {
|
func (this *Api_Comp) Start() (err error) {
|
||||||
err = this.MComp_GateComp.Start()
|
err = this.MComp_GateComp.Start()
|
||||||
|
|
||||||
|
var module core.IModule
|
||||||
|
|
||||||
|
if module, err = this.service.GetModule(comm.SM_UserModule); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.user = module.(comm.IUser)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package hero
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"go_dreamfactory/comm"
|
"go_dreamfactory/comm"
|
||||||
|
"go_dreamfactory/lego/sys/log"
|
||||||
"go_dreamfactory/pb"
|
"go_dreamfactory/pb"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -11,12 +12,20 @@ func (this *Api_Comp) StrengthenUplv_Check(session comm.IUserSession, req *pb.He
|
|||||||
code.Code = pb.ErrorCode_ReqParameterError
|
code.Code = pb.ErrorCode_ReqParameterError
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
_hero, err := this.module.model_hero.moduleHero.GetHeroInfoByObjID(req.HeroObjID) // 校验升级的对象是否存在
|
var (
|
||||||
|
curLv int32
|
||||||
|
curExp int32 // 当前英雄的经验
|
||||||
|
costGold int32 // 当前需要消耗金币的数量
|
||||||
|
addExp int32 // 需要增加的经验
|
||||||
|
//atn = map[string]interface{}{}
|
||||||
|
)
|
||||||
|
|
||||||
|
_hero, err := this.module.model_hero.moduleHero.GetHero(session.GetUserId(), req.HeroObjID) // 校验升级的对象是否存在
|
||||||
if err != 0 {
|
if err != 0 {
|
||||||
code.Code = pb.ErrorCode_HeroNoExist
|
code.Code = pb.ErrorCode_HeroNoExist
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
_expHero, err := this.module.model_hero.moduleHero.GetHeroInfoByObjID(req.ExpCardID) // 校验需要消耗经验卡牌的对象是否存在
|
_expHero, err := this.module.model_hero.moduleHero.GetHero(session.GetUserId(), req.ExpCardID) // 校验需要消耗经验卡牌的对象是否存在
|
||||||
if err != 0 {
|
if err != 0 {
|
||||||
code.Code = pb.ErrorCode_HeroNoExist
|
code.Code = pb.ErrorCode_HeroNoExist
|
||||||
return
|
return
|
||||||
@ -25,10 +34,9 @@ func (this *Api_Comp) StrengthenUplv_Check(session comm.IUserSession, req *pb.He
|
|||||||
code.Code = pb.ErrorCode_HeroNoExist
|
code.Code = pb.ErrorCode_HeroNoExist
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
curLv := _hero.Lv
|
curLv = _hero.Lv
|
||||||
curExp := _hero.Exp // 当前英雄的经验
|
curExp = _hero.Exp // 当前英雄的经验
|
||||||
var costGold int32 // 当前需要消耗金币的数量
|
|
||||||
var addExp int32 // 需要增加的经验
|
|
||||||
// 查询 本次消耗会获得多少经验
|
// 查询 本次消耗会获得多少经验
|
||||||
expConf := this.module.configure_comp.GetHeroExp(_expHero.HeroID)
|
expConf := this.module.configure_comp.GetHeroExp(_expHero.HeroID)
|
||||||
if expConf != nil {
|
if expConf != nil {
|
||||||
@ -44,7 +52,12 @@ func (this *Api_Comp) StrengthenUplv_Check(session comm.IUserSession, req *pb.He
|
|||||||
code.Code = pb.ErrorCode_HeroMaxLv
|
code.Code = pb.ErrorCode_HeroMaxLv
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if _data := this.module.configure_comp.GetHeroLv(curLv); _data != nil {
|
if _data := this.module.configure_comp.GetHeroLv(curLv); _data != nil {
|
||||||
|
// atn["a"] = _data.Gold[0].A
|
||||||
|
// atn["t"] = _data.Gold[0].T
|
||||||
|
// atn["n"] = _data.Gold[0].N
|
||||||
|
|
||||||
costGold += _data.Gold[0].N
|
costGold += _data.Gold[0].N
|
||||||
curExp += addExp // 先把经验加上
|
curExp += addExp // 先把经验加上
|
||||||
// 当前升级需要消耗的经验
|
// 当前升级需要消耗的经验
|
||||||
@ -74,18 +87,46 @@ func (this *Api_Comp) StrengthenUplv_Check(session comm.IUserSession, req *pb.He
|
|||||||
"costGold": costGold,
|
"costGold": costGold,
|
||||||
"curExp": curExp,
|
"curExp": curExp,
|
||||||
"curLv": curLv,
|
"curLv": curLv,
|
||||||
|
"addExp": addExp,
|
||||||
|
//"atn": atn,
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 英雄升级
|
/// 英雄升级
|
||||||
func (this *Api_Comp) StrengthenUplv(session comm.IUserSession, agrs map[string]interface{}, req *pb.Hero_StrengthenUplv_Req) (code pb.ErrorCode) {
|
func (this *Api_Comp) StrengthenUplv(session comm.IUserSession, agrs map[string]interface{}, req *pb.Hero_StrengthenUplv_Req) (code pb.ErrorCode) {
|
||||||
|
var (
|
||||||
|
curLv int32
|
||||||
|
curExp int32 // 当前英雄的经验
|
||||||
|
costGold int32 // 当前需要消耗金币的数量
|
||||||
|
addExp int32 // 需要增加的经验
|
||||||
|
//atn = map[string]interface{}{}
|
||||||
|
)
|
||||||
defer func() {
|
defer func() {
|
||||||
if code == pb.ErrorCode_Success {
|
if code == pb.ErrorCode_Success {
|
||||||
session.SendMsg(string(this.module.GetType()), StrengthenUplv, &pb.Hero_StrengthenUplv_Resp{})
|
session.SendMsg(string(this.module.GetType()), StrengthenUplv, &pb.Hero_StrengthenUplv_Resp{})
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
costGold = agrs["costGold"].(int32)
|
||||||
|
curLv = agrs["curLv"].(int32)
|
||||||
|
curExp = agrs["curExp"].(int32)
|
||||||
|
addExp = agrs["addExp"].(int32)
|
||||||
|
log.Debugf("升级后当前等级: %d,经验: %d,需要消耗的金币: %d,增加的经验: %d", curLv, curExp, costGold, addExp)
|
||||||
|
// 执行升级逻辑
|
||||||
|
code = this.module.model_hero.moduleHero.AddCardExp(session.GetUserId(), req.HeroObjID, addExp) // 加经验
|
||||||
|
if code != pb.ErrorCode_Success {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 消耗道具
|
||||||
|
code = this.user.AddAttributeValue(session.GetUserId(), "gold", -costGold) // 减少金币
|
||||||
|
if code != pb.ErrorCode_Success {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 删除经验卡
|
||||||
|
code = this.module.model_hero.moduleHero.DelCard(req.ExpCardID, req.Amount)
|
||||||
|
if code != pb.ErrorCode_Success {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,7 @@ type Hero struct {
|
|||||||
api_comp *Api_Comp
|
api_comp *Api_Comp
|
||||||
configure_comp *Configure_Comp
|
configure_comp *Configure_Comp
|
||||||
model_hero *ModelHero
|
model_hero *ModelHero
|
||||||
|
items comm.IItems
|
||||||
}
|
}
|
||||||
|
|
||||||
//模块名
|
//模块名
|
||||||
@ -38,12 +39,6 @@ func (this *Hero) OnInstallComp() {
|
|||||||
this.configure_comp = this.RegisterComp(new(Configure_Comp)).(*Configure_Comp)
|
this.configure_comp = this.RegisterComp(new(Configure_Comp)).(*Configure_Comp)
|
||||||
}
|
}
|
||||||
|
|
||||||
//通过唯一对象获取英雄信息
|
|
||||||
func (this *Hero) GetHeroInfoByObjID(id string) (*pb.DB_HeroData, pb.ErrorCode) {
|
|
||||||
|
|
||||||
return nil, pb.ErrorCode_HeroNoExist
|
|
||||||
}
|
|
||||||
|
|
||||||
//创建新英雄
|
//创建新英雄
|
||||||
func (this *Hero) CreatMultiHero(uid string, heroCfgId ...int32) error {
|
func (this *Hero) CreatMultiHero(uid string, heroCfgId ...int32) error {
|
||||||
return this.model_hero.createMultiHero(uid, heroCfgId...)
|
return this.model_hero.createMultiHero(uid, heroCfgId...)
|
||||||
@ -89,4 +84,58 @@ func (this *Hero) QueryCardAmount(uId string, cardId int32) (amount uint32) {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 给指定英雄加经验
|
||||||
|
func (this *Hero) AddCardExp(uid string, cardid string, exp int32) (code pb.ErrorCode) {
|
||||||
|
var (
|
||||||
|
curExp int32
|
||||||
|
curLv int32
|
||||||
|
)
|
||||||
|
_hero, err := this.GetHero(uid, cardid) // 获取英雄信息
|
||||||
|
if err != 0 {
|
||||||
|
code = pb.ErrorCode_HeroNoExist
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
curExp = _hero.Exp
|
||||||
|
curLv = _hero.Lv
|
||||||
|
curExp += exp // 先把经验加上
|
||||||
|
if _data := this.configure_comp.GetHeroLv(curLv); _data != nil {
|
||||||
|
|
||||||
|
for { // 死循环判断一键升级
|
||||||
|
// 校验等级达到上限
|
||||||
|
var maxLv int32
|
||||||
|
maxLv = _hero.Star * comm.HeroStarLvRatio
|
||||||
|
if maxLv >= _hero.Lv && _hero.Exp >= curExp { // 设置最大经验和等级
|
||||||
|
curLv = maxLv
|
||||||
|
curExp = _data.Heroexp[0].N
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if _data.Heroexp[0].N <= curExp { // 升级操作
|
||||||
|
curExp = _data.Heroexp[0].N
|
||||||
|
if curExp >= 0 { // 大于下一级经验
|
||||||
|
curLv += 1 // 经验够了 那么等级+1
|
||||||
|
if _data := this.configure_comp.GetHeroLv(curLv); _data != nil {
|
||||||
|
if _data.Heroexp[0].N > curExp { // 经验不足则 直接返回
|
||||||
|
break
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_hero.Lv = curLv
|
||||||
|
_hero.Exp = curExp
|
||||||
|
// 校验是否达到最大等级
|
||||||
|
|
||||||
|
this.ModifyHero(_hero) // 修改英雄数据
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除指定卡牌
|
||||||
|
func (this *Hero) DelCard(cardid string, amount int32) (code pb.ErrorCode) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user