技能升级
This commit is contained in:
parent
22559d61f8
commit
19f9409784
@ -1,9 +1,11 @@
|
||||
package hero
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"go_dreamfactory/comm"
|
||||
"go_dreamfactory/lego/sys/log"
|
||||
"go_dreamfactory/pb"
|
||||
"math/big"
|
||||
)
|
||||
|
||||
//参数校验
|
||||
@ -58,12 +60,15 @@ func (this *apiComp) StrengthenUpSkill(session comm.IUserSession, agrs map[strin
|
||||
}
|
||||
}()
|
||||
var (
|
||||
tagHero int32 // 操作的英雄(configid)
|
||||
tmpUpSkillID []int32 // 即将要升级的技能id
|
||||
//probability []int32 // 即将升级技能的权重
|
||||
tagHero int32 // 操作的英雄(configid)
|
||||
tmpUpSkillID map[int32]*pb.SkillData // 即将要升级的技能id
|
||||
probability map[int32]int32 // 即将升级技能的权重
|
||||
upSkillPos int32 // 升级的技能位置
|
||||
totalprobability int32 // 所有技能总权重
|
||||
tmpValue int32 // 临时对象 存放累加权重
|
||||
)
|
||||
tmpUpSkillID = make([]int32, 0)
|
||||
//probability = make([]int32, 0)
|
||||
tmpUpSkillID = make(map[int32]*pb.SkillData, 0)
|
||||
probability = make(map[int32]int32, 0)
|
||||
tagHero = agrs["heroid"].(int32)
|
||||
log.Debugf("英雄:%d 技能升级", tagHero)
|
||||
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) // 查询目标卡是否存在
|
||||
if errr != 0 {
|
||||
|
||||
code = pb.ErrorCode_HeroNoExist
|
||||
log.Errorf("not find card:%s,%v", req.HeroObjID, errr)
|
||||
return
|
||||
}
|
||||
for _, skill := range _hero.NormalSkill {
|
||||
for index, skill := range _hero.NormalSkill {
|
||||
skillMaxLv := this.moduleHero.configure.GetHeroSkillMaxLvConfig(uint32(skill.SkillID))
|
||||
if skill.SkillLv >= skillMaxLv { // 找到没有满级的技能id
|
||||
tmpUpSkillID = append(tmpUpSkillID, skill.SkillID)
|
||||
if skill.SkillLv < skillMaxLv { // 找到没有满级的技能id
|
||||
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
|
||||
}
|
||||
|
@ -114,12 +114,16 @@ func (this *apiComp) StrengthenUpStar(session comm.IUserSession, agrs map[string
|
||||
// 消耗道具
|
||||
code = this.user.AddAttributeValue(session.GetUserId(), "gold", -costGold) // 减少金币
|
||||
if code != pb.ErrorCode_Success {
|
||||
log.Errorf("cost gold failed ,count = %d", costGold)
|
||||
code = pb.ErrorCode_GoldNoEnough
|
||||
return
|
||||
}
|
||||
// 消耗指定英雄
|
||||
for _, v := range req.Hero {
|
||||
code = this.moduleHero.DelCard(v.CostCardObj, v.Amount)
|
||||
if code != 0 {
|
||||
code = pb.ErrorCode_DBError
|
||||
log.Errorf("del hero err card:%s,count = %d", v.CostCardObj, v.Amount)
|
||||
return
|
||||
}
|
||||
}
|
||||
@ -128,8 +132,24 @@ func (this *apiComp) StrengthenUpStar(session comm.IUserSession, agrs map[string
|
||||
for _, v := range req.HeroRace {
|
||||
code = this.moduleHero.DelCard(v.CostCardObj, v.Amount)
|
||||
if code != 0 {
|
||||
code = pb.ErrorCode_DBError
|
||||
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
|
||||
}
|
||||
|
@ -67,11 +67,12 @@ const (
|
||||
ErrorCode_ItemsGridNumUpper ErrorCode = 1202 //背包格子数量已达上限
|
||||
ErrorCode_ItemsGirdAmountUpper ErrorCode = 1203 //背包格子容量已达上限
|
||||
// hero
|
||||
ErrorCode_HeroNoExist ErrorCode = 1300 //英雄不存在
|
||||
ErrorCode_HeroNoEnough ErrorCode = 1301 //英雄数量不足
|
||||
ErrorCode_HeroMaxLv ErrorCode = 1302 //英雄达到最大等级
|
||||
ErrorCode_HeroInitCreat ErrorCode = 1303 //初始化英雄
|
||||
ErrorCode_HeroColorErr ErrorCode = 1304 // 品质不匹配
|
||||
ErrorCode_HeroNoExist ErrorCode = 1300 //英雄不存在
|
||||
ErrorCode_HeroNoEnough ErrorCode = 1301 //英雄数量不足
|
||||
ErrorCode_HeroMaxLv ErrorCode = 1302 //英雄达到最大等级
|
||||
ErrorCode_HeroInitCreat ErrorCode = 1303 //初始化英雄
|
||||
ErrorCode_HeroColorErr ErrorCode = 1304 // 品质不匹配
|
||||
ErrorCode_HeroSkillUpErr ErrorCode = 1035 // 技能升级失败
|
||||
// equipment
|
||||
ErrorCode_EquipmentOnFoundEquipment ErrorCode = 1400 // 未找到武器
|
||||
ErrorCode_EquipmentLvlimitReached ErrorCode = 1401 // 武器等级已达上限
|
||||
@ -125,6 +126,7 @@ var (
|
||||
1302: "HeroMaxLv",
|
||||
1303: "HeroInitCreat",
|
||||
1304: "HeroColorErr",
|
||||
1035: "HeroSkillUpErr",
|
||||
1400: "EquipmentOnFoundEquipment",
|
||||
1401: "EquipmentLvlimitReached",
|
||||
}
|
||||
@ -174,6 +176,7 @@ var (
|
||||
"HeroMaxLv": 1302,
|
||||
"HeroInitCreat": 1303,
|
||||
"HeroColorErr": 1304,
|
||||
"HeroSkillUpErr": 1035,
|
||||
"EquipmentOnFoundEquipment": 1400,
|
||||
"EquipmentLvlimitReached": 1401,
|
||||
}
|
||||
@ -210,7 +213,7 @@ var File_errorcode_proto protoreflect.FileDescriptor
|
||||
|
||||
var file_errorcode_proto_rawDesc = []byte{
|
||||
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,
|
||||
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,
|
||||
@ -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, 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,
|
||||
0x6f, 0x72, 0x45, 0x72, 0x72, 0x10, 0x98, 0x0a, 0x12, 0x1e, 0x0a, 0x19, 0x45, 0x71, 0x75, 0x69,
|
||||
0x70, 0x6d, 0x65, 0x6e, 0x74, 0x4f, 0x6e, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x71, 0x75, 0x69,
|
||||
0x70, 0x6d, 0x65, 0x6e, 0x74, 0x10, 0xf8, 0x0a, 0x12, 0x1c, 0x0a, 0x17, 0x45, 0x71, 0x75, 0x69,
|
||||
0x70, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x76, 0x6c, 0x69, 0x6d, 0x69, 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,
|
||||
0x6f, 0x72, 0x45, 0x72, 0x72, 0x10, 0x98, 0x0a, 0x12, 0x13, 0x0a, 0x0e, 0x48, 0x65, 0x72, 0x6f,
|
||||
0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x55, 0x70, 0x45, 0x72, 0x72, 0x10, 0x8b, 0x08, 0x12, 0x1e, 0x0a,
|
||||
0x19, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x4f, 0x6e, 0x46, 0x6f, 0x75, 0x6e,
|
||||
0x64, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x10, 0xf8, 0x0a, 0x12, 0x1c, 0x0a,
|
||||
0x17, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x76, 0x6c, 0x69, 0x6d, 0x69,
|
||||
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 (
|
||||
|
@ -55,6 +55,7 @@ enum ErrorCode {
|
||||
HeroMaxLv = 1302; //英雄达到最大等级
|
||||
HeroInitCreat = 1303; //初始化英雄
|
||||
HeroColorErr = 1304; // 品质不匹配
|
||||
HeroSkillUpErr = 1035;// 技能升级失败
|
||||
// equipment
|
||||
EquipmentOnFoundEquipment = 1400; // 未找到武器
|
||||
EquipmentLvlimitReached = 1401; // 武器等级已达上限
|
||||
|
Loading…
Reference in New Issue
Block a user