技能升级
This commit is contained in:
parent
22559d61f8
commit
19f9409784
@ -1,9 +1,11 @@
|
|||||||
package hero
|
package hero
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/rand"
|
||||||
"go_dreamfactory/comm"
|
"go_dreamfactory/comm"
|
||||||
"go_dreamfactory/lego/sys/log"
|
"go_dreamfactory/lego/sys/log"
|
||||||
"go_dreamfactory/pb"
|
"go_dreamfactory/pb"
|
||||||
|
"math/big"
|
||||||
)
|
)
|
||||||
|
|
||||||
//参数校验
|
//参数校验
|
||||||
@ -59,11 +61,14 @@ func (this *apiComp) StrengthenUpSkill(session comm.IUserSession, agrs map[strin
|
|||||||
}()
|
}()
|
||||||
var (
|
var (
|
||||||
tagHero int32 // 操作的英雄(configid)
|
tagHero int32 // 操作的英雄(configid)
|
||||||
tmpUpSkillID []int32 // 即将要升级的技能id
|
tmpUpSkillID map[int32]*pb.SkillData // 即将要升级的技能id
|
||||||
//probability []int32 // 即将升级技能的权重
|
probability map[int32]int32 // 即将升级技能的权重
|
||||||
|
upSkillPos int32 // 升级的技能位置
|
||||||
|
totalprobability int32 // 所有技能总权重
|
||||||
|
tmpValue int32 // 临时对象 存放累加权重
|
||||||
)
|
)
|
||||||
tmpUpSkillID = make([]int32, 0)
|
tmpUpSkillID = make(map[int32]*pb.SkillData, 0)
|
||||||
//probability = make([]int32, 0)
|
probability = make(map[int32]int32, 0)
|
||||||
tagHero = agrs["heroid"].(int32)
|
tagHero = agrs["heroid"].(int32)
|
||||||
log.Debugf("英雄:%d 技能升级", tagHero)
|
log.Debugf("英雄:%d 技能升级", tagHero)
|
||||||
config, err := this.moduleHero.configure.GetHeroSkillUpConfig()
|
config, err := this.moduleHero.configure.GetHeroSkillUpConfig()
|
||||||
@ -77,16 +82,64 @@ func (this *apiComp) StrengthenUpSkill(session comm.IUserSession, agrs map[strin
|
|||||||
|
|
||||||
_hero, errr := this.moduleHero.modelHero.moduleHero.GetHero(session.GetUserId(), req.HeroObjID) // 查询目标卡是否存在
|
_hero, errr := this.moduleHero.modelHero.moduleHero.GetHero(session.GetUserId(), req.HeroObjID) // 查询目标卡是否存在
|
||||||
if errr != 0 {
|
if errr != 0 {
|
||||||
|
code = pb.ErrorCode_HeroNoExist
|
||||||
|
log.Errorf("not find card:%s,%v", req.HeroObjID, errr)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
for _, skill := range _hero.NormalSkill {
|
for index, skill := range _hero.NormalSkill {
|
||||||
skillMaxLv := this.moduleHero.configure.GetHeroSkillMaxLvConfig(uint32(skill.SkillID))
|
skillMaxLv := this.moduleHero.configure.GetHeroSkillMaxLvConfig(uint32(skill.SkillID))
|
||||||
if skill.SkillLv >= skillMaxLv { // 找到没有满级的技能id
|
if skill.SkillLv < skillMaxLv { // 找到没有满级的技能id
|
||||||
tmpUpSkillID = append(tmpUpSkillID, skill.SkillID)
|
tmpUpSkillID[int32(index)] = skill
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
skillconfig, err := this.moduleHero.configure.GetHeroSkillUpConfig()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
// 获取权重
|
// 获取权重
|
||||||
|
for k, v := range tmpUpSkillID {
|
||||||
|
for _, v2 := range skillconfig.GetDataList() {
|
||||||
|
if v2.Hid == tagHero && k == v2.Skillpos && v.SkillLv == v2.Skilllevel {
|
||||||
|
probability[k] = v2.Probability // 设置权重
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据权重升级对应的技能
|
||||||
|
for _, v := range probability {
|
||||||
|
totalprobability += v
|
||||||
|
}
|
||||||
|
if totalprobability == 0 {
|
||||||
|
code = pb.ErrorCode_HeroSkillUpErr //技能升级失败
|
||||||
|
return
|
||||||
|
}
|
||||||
|
n, _ := rand.Int(rand.Reader, big.NewInt(int64(totalprobability)))
|
||||||
|
|
||||||
|
for k, v := range probability {
|
||||||
|
tmpValue += v
|
||||||
|
if int32(n.Int64()) <= tmpValue { // 找到了
|
||||||
|
upSkillPos = k
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for index, skill := range _hero.NormalSkill {
|
||||||
|
if int32(index) == upSkillPos { // 找到指定位置技能并升级
|
||||||
|
skill.SkillLv += 1
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_heroMap := map[string]interface{}{
|
||||||
|
"normalSkill": _hero.NormalSkill,
|
||||||
|
}
|
||||||
|
err = this.moduleHero.modelHero.modifyHero(session.GetUserId(), req.HeroObjID, _heroMap) // 修改英雄信息
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("update hero skill failed:%v", err)
|
||||||
|
}
|
||||||
|
// 扣除材料
|
||||||
|
code = this.moduleHero.DelCard(req.CostCardObj, 1)
|
||||||
|
if code != 0 {
|
||||||
|
code = pb.ErrorCode_DBError
|
||||||
|
return
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -114,12 +114,16 @@ func (this *apiComp) StrengthenUpStar(session comm.IUserSession, agrs map[string
|
|||||||
// 消耗道具
|
// 消耗道具
|
||||||
code = this.user.AddAttributeValue(session.GetUserId(), "gold", -costGold) // 减少金币
|
code = this.user.AddAttributeValue(session.GetUserId(), "gold", -costGold) // 减少金币
|
||||||
if code != pb.ErrorCode_Success {
|
if code != pb.ErrorCode_Success {
|
||||||
|
log.Errorf("cost gold failed ,count = %d", costGold)
|
||||||
|
code = pb.ErrorCode_GoldNoEnough
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// 消耗指定英雄
|
// 消耗指定英雄
|
||||||
for _, v := range req.Hero {
|
for _, v := range req.Hero {
|
||||||
code = this.moduleHero.DelCard(v.CostCardObj, v.Amount)
|
code = this.moduleHero.DelCard(v.CostCardObj, v.Amount)
|
||||||
if code != 0 {
|
if code != 0 {
|
||||||
|
code = pb.ErrorCode_DBError
|
||||||
|
log.Errorf("del hero err card:%s,count = %d", v.CostCardObj, v.Amount)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -128,8 +132,24 @@ func (this *apiComp) StrengthenUpStar(session comm.IUserSession, agrs map[string
|
|||||||
for _, v := range req.HeroRace {
|
for _, v := range req.HeroRace {
|
||||||
code = this.moduleHero.DelCard(v.CostCardObj, v.Amount)
|
code = this.moduleHero.DelCard(v.CostCardObj, v.Amount)
|
||||||
if code != 0 {
|
if code != 0 {
|
||||||
|
code = pb.ErrorCode_DBError
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
_hero, errr := this.moduleHero.modelHero.moduleHero.GetHero(session.GetUserId(), req.HeroObjID) // 查询目标卡是否存在
|
||||||
|
if errr != 0 {
|
||||||
|
code = pb.ErrorCode_HeroNoExist
|
||||||
|
log.Errorf("not find card:%s,%v", req.HeroObjID, errr)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_heroMap := map[string]interface{}{
|
||||||
|
"star": _hero.Star,
|
||||||
|
}
|
||||||
|
// 保存数据
|
||||||
|
err := this.moduleHero.modelHero.modifyHero(session.GetUserId(), req.HeroObjID, _heroMap)
|
||||||
|
if err != nil {
|
||||||
|
code = pb.ErrorCode_DBError
|
||||||
|
log.Errorf("update hero skill failed:%v", err)
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -72,6 +72,7 @@ const (
|
|||||||
ErrorCode_HeroMaxLv ErrorCode = 1302 //英雄达到最大等级
|
ErrorCode_HeroMaxLv ErrorCode = 1302 //英雄达到最大等级
|
||||||
ErrorCode_HeroInitCreat ErrorCode = 1303 //初始化英雄
|
ErrorCode_HeroInitCreat ErrorCode = 1303 //初始化英雄
|
||||||
ErrorCode_HeroColorErr ErrorCode = 1304 // 品质不匹配
|
ErrorCode_HeroColorErr ErrorCode = 1304 // 品质不匹配
|
||||||
|
ErrorCode_HeroSkillUpErr ErrorCode = 1035 // 技能升级失败
|
||||||
// equipment
|
// equipment
|
||||||
ErrorCode_EquipmentOnFoundEquipment ErrorCode = 1400 // 未找到武器
|
ErrorCode_EquipmentOnFoundEquipment ErrorCode = 1400 // 未找到武器
|
||||||
ErrorCode_EquipmentLvlimitReached ErrorCode = 1401 // 武器等级已达上限
|
ErrorCode_EquipmentLvlimitReached ErrorCode = 1401 // 武器等级已达上限
|
||||||
@ -125,6 +126,7 @@ var (
|
|||||||
1302: "HeroMaxLv",
|
1302: "HeroMaxLv",
|
||||||
1303: "HeroInitCreat",
|
1303: "HeroInitCreat",
|
||||||
1304: "HeroColorErr",
|
1304: "HeroColorErr",
|
||||||
|
1035: "HeroSkillUpErr",
|
||||||
1400: "EquipmentOnFoundEquipment",
|
1400: "EquipmentOnFoundEquipment",
|
||||||
1401: "EquipmentLvlimitReached",
|
1401: "EquipmentLvlimitReached",
|
||||||
}
|
}
|
||||||
@ -174,6 +176,7 @@ var (
|
|||||||
"HeroMaxLv": 1302,
|
"HeroMaxLv": 1302,
|
||||||
"HeroInitCreat": 1303,
|
"HeroInitCreat": 1303,
|
||||||
"HeroColorErr": 1304,
|
"HeroColorErr": 1304,
|
||||||
|
"HeroSkillUpErr": 1035,
|
||||||
"EquipmentOnFoundEquipment": 1400,
|
"EquipmentOnFoundEquipment": 1400,
|
||||||
"EquipmentLvlimitReached": 1401,
|
"EquipmentLvlimitReached": 1401,
|
||||||
}
|
}
|
||||||
@ -210,7 +213,7 @@ var File_errorcode_proto protoreflect.FileDescriptor
|
|||||||
|
|
||||||
var file_errorcode_proto_rawDesc = []byte{
|
var file_errorcode_proto_rawDesc = []byte{
|
||||||
0x0a, 0x0f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
0x0a, 0x0f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||||
0x6f, 0x2a, 0xe2, 0x07, 0x0a, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12,
|
0x6f, 0x2a, 0xf7, 0x07, 0x0a, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12,
|
||||||
0x0b, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d,
|
0x0b, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d,
|
||||||
0x4e, 0x6f, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x10, 0x0a, 0x12,
|
0x4e, 0x6f, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x10, 0x0a, 0x12,
|
||||||
0x1b, 0x0a, 0x17, 0x4e, 0x6f, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
0x1b, 0x0a, 0x17, 0x4e, 0x6f, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
||||||
@ -268,12 +271,13 @@ var file_errorcode_proto_rawDesc = []byte{
|
|||||||
0x0a, 0x12, 0x0e, 0x0a, 0x09, 0x48, 0x65, 0x72, 0x6f, 0x4d, 0x61, 0x78, 0x4c, 0x76, 0x10, 0x96,
|
0x0a, 0x12, 0x0e, 0x0a, 0x09, 0x48, 0x65, 0x72, 0x6f, 0x4d, 0x61, 0x78, 0x4c, 0x76, 0x10, 0x96,
|
||||||
0x0a, 0x12, 0x12, 0x0a, 0x0d, 0x48, 0x65, 0x72, 0x6f, 0x49, 0x6e, 0x69, 0x74, 0x43, 0x72, 0x65,
|
0x0a, 0x12, 0x12, 0x0a, 0x0d, 0x48, 0x65, 0x72, 0x6f, 0x49, 0x6e, 0x69, 0x74, 0x43, 0x72, 0x65,
|
||||||
0x61, 0x74, 0x10, 0x97, 0x0a, 0x12, 0x11, 0x0a, 0x0c, 0x48, 0x65, 0x72, 0x6f, 0x43, 0x6f, 0x6c,
|
0x61, 0x74, 0x10, 0x97, 0x0a, 0x12, 0x11, 0x0a, 0x0c, 0x48, 0x65, 0x72, 0x6f, 0x43, 0x6f, 0x6c,
|
||||||
0x6f, 0x72, 0x45, 0x72, 0x72, 0x10, 0x98, 0x0a, 0x12, 0x1e, 0x0a, 0x19, 0x45, 0x71, 0x75, 0x69,
|
0x6f, 0x72, 0x45, 0x72, 0x72, 0x10, 0x98, 0x0a, 0x12, 0x13, 0x0a, 0x0e, 0x48, 0x65, 0x72, 0x6f,
|
||||||
0x70, 0x6d, 0x65, 0x6e, 0x74, 0x4f, 0x6e, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x71, 0x75, 0x69,
|
0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x55, 0x70, 0x45, 0x72, 0x72, 0x10, 0x8b, 0x08, 0x12, 0x1e, 0x0a,
|
||||||
0x70, 0x6d, 0x65, 0x6e, 0x74, 0x10, 0xf8, 0x0a, 0x12, 0x1c, 0x0a, 0x17, 0x45, 0x71, 0x75, 0x69,
|
0x19, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x4f, 0x6e, 0x46, 0x6f, 0x75, 0x6e,
|
||||||
0x70, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x76, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x61, 0x63,
|
0x64, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x10, 0xf8, 0x0a, 0x12, 0x1c, 0x0a,
|
||||||
0x68, 0x65, 0x64, 0x10, 0xf9, 0x0a, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06,
|
0x17, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x76, 0x6c, 0x69, 0x6d, 0x69,
|
||||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
0x74, 0x52, 0x65, 0x61, 0x63, 0x68, 0x65, 0x64, 0x10, 0xf9, 0x0a, 0x42, 0x06, 0x5a, 0x04, 0x2e,
|
||||||
|
0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -55,6 +55,7 @@ enum ErrorCode {
|
|||||||
HeroMaxLv = 1302; //英雄达到最大等级
|
HeroMaxLv = 1302; //英雄达到最大等级
|
||||||
HeroInitCreat = 1303; //初始化英雄
|
HeroInitCreat = 1303; //初始化英雄
|
||||||
HeroColorErr = 1304; // 品质不匹配
|
HeroColorErr = 1304; // 品质不匹配
|
||||||
|
HeroSkillUpErr = 1035;// 技能升级失败
|
||||||
// equipment
|
// equipment
|
||||||
EquipmentOnFoundEquipment = 1400; // 未找到武器
|
EquipmentOnFoundEquipment = 1400; // 未找到武器
|
||||||
EquipmentLvlimitReached = 1401; // 武器等级已达上限
|
EquipmentLvlimitReached = 1401; // 武器等级已达上限
|
||||||
|
Loading…
Reference in New Issue
Block a user