英雄属性计算

This commit is contained in:
meixiongfeng 2024-01-22 16:43:17 +08:00
parent f45347bd10
commit aa8ed33406
13 changed files with 544 additions and 133 deletions

View File

@ -1,34 +1,34 @@
[
{
"id": 3,
"id": 53,
"value": 100
},
{
"id": 4,
"id": 56,
"value": 1400
},
{
"id": 5,
"id": 59,
"value": 1400
},
{
"id": 6,
"id": 62,
"value": 13500
},
{
"id": 7,
"id": 65,
"value": 15500
},
{
"id": 8,
"id": 68,
"value": 11400
},
{
"id": 9,
"id": 71,
"value": 14000
},
{
"id": 10,
"id": 74,
"value": 14000
},
{

View File

@ -6793,6 +6793,178 @@
"text": "传说中的守护者“香塔尔杜布瓦队长手下2号”,拥有不俗的战斗能力"
}
},
{
"hid": "51008",
"name": {
"key": "hero_main_name_51008",
"text": "暴躁的村民"
},
"star": 3,
"color": 2,
"race": 4,
"job": 3,
"type": 2,
"ip": 1,
"sd": 1,
"handbook": false,
"prefab": "51002",
"rotation": "0|0|0",
"revolve": 0,
"scale": [
1,
1,
1
],
"icon": "51002",
"vocal": "51002",
"tujing": [
107
],
"detailwindow": "effect_huaidanlianmeng_daiji",
"intr": {
"key": "",
"text": ""
},
"events": "hero_51002",
"cite": "",
"effectstay": [],
"hpspace": {
"x": 0,
"y": 0,
"z": 0
},
"capskillrule": 101,
"skill": 0,
"skill1": 151002111,
"skill2": 151002211,
"skill3": 0,
"skill4": 0,
"skill5": 0,
"skill6": 0,
"txt": {
"key": "atlas_51008",
"text": ""
},
"enteranivalue": 0,
"camerainterval": 0,
"equiprcom": [
1,
2,
10
],
"angle": 0,
"deviation": 0,
"show": 2,
"herofrag": [
{
"a": "item",
"t": "12025001",
"n": 1
}
],
"herofragnum": 6,
"heroskillup": [
"10000004"
],
"expitem": [
{
"a": "item",
"t": "10000011",
"n": 1
}
],
"expitemnum": 7,
"herointr": {
"key": "hero_main_herointr_51008",
"text": "传说中的守护者“暴躁的村民”,拥有不俗的战斗能力"
}
},
{
"hid": "51009",
"name": {
"key": "hero_main_name_51009",
"text": "慌张的村民"
},
"star": 3,
"color": 2,
"race": 4,
"job": 3,
"type": 2,
"ip": 1,
"sd": 1,
"handbook": false,
"prefab": "51003",
"rotation": "0|0|0",
"revolve": 0,
"scale": [
1,
1,
1
],
"icon": "51003",
"vocal": "51003",
"tujing": [
107
],
"detailwindow": "effect_chezhan_daiji",
"intr": {
"key": "",
"text": ""
},
"events": "hero_51003",
"cite": "",
"effectstay": [],
"hpspace": {
"x": 0,
"y": 0,
"z": 0
},
"capskillrule": 101,
"skill": 0,
"skill1": 151003111,
"skill2": 151003211,
"skill3": 0,
"skill4": 0,
"skill5": 0,
"skill6": 0,
"txt": {
"key": "atlas_51009",
"text": ""
},
"enteranivalue": 0,
"camerainterval": 0,
"equiprcom": [
1,
2,
10
],
"angle": 0,
"deviation": 0,
"show": 2,
"herofrag": [
{
"a": "item",
"t": "12025001",
"n": 1
}
],
"herofragnum": 6,
"heroskillup": [
"10000004"
],
"expitem": [
{
"a": "item",
"t": "10000011",
"n": 1
}
],
"expitemnum": 7,
"herointr": {
"key": "hero_main_herointr_51009",
"text": "传说中的守护者“慌张的村民”,拥有不俗的战斗能力"
}
},
{
"hid": "54005",
"name": {

View File

@ -123776,12 +123776,12 @@
"newskill": [],
"lv": 65,
"hppro": 18,
"atkpro": 1.65,
"defpro": 0.5,
"atkpro": 1.7,
"defpro": 0.8,
"skill1": 1,
"skill2": 1,
"skill3": 1,
"speed": 145,
"speed": 155,
"modelsize": 1
},
{
@ -123801,7 +123801,7 @@
"skill1": 1,
"skill2": 1,
"skill3": 1,
"speed": 155,
"speed": 165,
"modelsize": 1
},
{

View File

@ -13431,7 +13431,7 @@
"icon": "",
"When": 16,
"FromCheck": "Target=3",
"TargetCheck": "Target=2,HasBuff=391000116,OverlayNum=25",
"TargetCheck": "Target=2,BuffTotalOverlayNumLess=391000116,OverlayNum=25",
"MainSkillCheck": "SkillPos=5",
"AfterSkillCheck": "",
"BuffCheck": "",
@ -13457,7 +13457,7 @@
"icon": "",
"When": 16,
"FromCheck": "Target=3",
"TargetCheck": "Target=2,HasBuff=391000123,OverlayNum=25",
"TargetCheck": "Target=2,BuffTotalOverlayNumLess=391000123,OverlayNum=25",
"MainSkillCheck": "SkillPos=5",
"AfterSkillCheck": "",
"BuffCheck": "",
@ -13483,7 +13483,7 @@
"icon": "",
"When": 16,
"FromCheck": "Target=3",
"TargetCheck": "Target=2,HasBuff=391000127,OverlayNum=25",
"TargetCheck": "Target=2,BuffTotalOverlayNumLess=391000127,OverlayNum=25",
"MainSkillCheck": "SkillPos=5",
"AfterSkillCheck": "",
"BuffCheck": "",

View File

@ -7,25 +7,25 @@
},
"recommendtype1": {
"key": "vikingexpedition_recommend_recommendtype1_1",
"text": "输出"
"text": "生存输出"
},
"herolist1": [
"25001",
"25001",
"25001",
"25001",
"25001"
"35001",
"15003",
"35005",
"14003",
"13004"
],
"recommendtype2": {
"key": "vikingexpedition_recommend_recommendtype2_1",
"text": "治疗"
"text": "生存治疗"
},
"herolist2": [
"25001",
"25001",
"25001",
"25001",
"25001"
"25004",
"15005",
"45003",
"43006",
"13004"
]
},
{
@ -36,25 +36,25 @@
},
"recommendtype1": {
"key": "vikingexpedition_recommend_recommendtype1_2",
"text": "段输出"
"text": "段输出"
},
"herolist1": [
"25001",
"25001",
"25001",
"25001",
"25001"
"15003",
"14003",
"35005",
"35002",
"14007"
],
"recommendtype2": {
"key": "vikingexpedition_recommend_recommendtype2_2",
"text": "净化"
"text": "辅助控制"
},
"herolist2": [
"25001",
"25001",
"25001",
"25001",
"25001"
"15005",
"45003",
"14007",
"24001",
"25004"
]
},
{
@ -65,25 +65,25 @@
},
"recommendtype1": {
"key": "vikingexpedition_recommend_recommendtype1_3",
"text": "段输出"
"text": "段输出"
},
"herolist1": [
"25001",
"25001",
"25001",
"25001",
"25001"
"44001",
"44006",
"24003",
"35001",
"24005"
],
"recommendtype2": {
"key": "vikingexpedition_recommend_recommendtype2_3",
"text": "治疗"
"text": "辅助净化"
},
"herolist2": [
"25001",
"25001",
"25001",
"25001",
"25001"
"24005",
"24003",
"15005",
"35001",
"13004"
]
},
{
@ -94,25 +94,25 @@
},
"recommendtype1": {
"key": "vikingexpedition_recommend_recommendtype1_4",
"text": "限制"
"text": "限制出手"
},
"herolist1": [
"25001",
"25001",
"25001",
"25001",
"25001"
"14003",
"44001",
"15004",
"24001",
"43002"
],
"recommendtype2": {
"key": "vikingexpedition_recommend_recommendtype2_4",
"text": "辅助"
"text": "辅助控制"
},
"herolist2": [
"25001",
"25001",
"25001",
"25001",
"25001"
"24005",
"43002",
"35006",
"24003",
"15005"
]
},
{
@ -123,25 +123,25 @@
},
"recommendtype1": {
"key": "vikingexpedition_recommend_recommendtype1_5",
"text": "爆发"
"text": "爆发输出"
},
"herolist1": [
"25001",
"25001",
"25001",
"25001",
"25001"
"44001",
"35001",
"35005",
"15003",
"35001"
],
"recommendtype2": {
"key": "vikingexpedition_recommend_recommendtype2_5",
"text": "禁疗"
"text": "辅助禁疗"
},
"herolist2": [
"25001",
"25001",
"25001",
"25001",
"25001"
"43004",
"35001",
"35006",
"35005",
"44001"
]
},
{
@ -155,22 +155,22 @@
"text": "无视防御"
},
"herolist1": [
"25001",
"25001",
"25001",
"25001",
"25001"
"35004",
"44001",
"35001",
"35005",
"15003"
],
"recommendtype2": {
"key": "vikingexpedition_recommend_recommendtype2_6",
"text": "中毒"
"text": "辅助中毒"
},
"herolist2": [
"25001",
"25001",
"25001",
"25001",
"25001"
"24002",
"13002",
"35005",
"15005",
"34005"
]
},
{
@ -181,25 +181,25 @@
},
"recommendtype1": {
"key": "vikingexpedition_recommend_recommendtype1_7",
"text": "中毒"
"text": "中毒输出"
},
"herolist1": [
"25001",
"25001",
"25001",
"25001",
"25001"
"34005",
"24002",
"13002",
"33003",
"35005"
],
"recommendtype2": {
"key": "vikingexpedition_recommend_recommendtype2_7",
"text": "治疗"
"text": "生存治疗"
},
"herolist2": [
"25001",
"25001",
"25001",
"25001",
"25001"
"15005",
"45003",
"43006",
"13004",
"25004"
]
},
{
@ -210,25 +210,25 @@
},
"recommendtype1": {
"key": "vikingexpedition_recommend_recommendtype1_8",
"text": "群体伤害"
"text": "群体爆发"
},
"herolist1": [
"25001",
"25001",
"25001",
"25001",
"25001"
"15004",
"35001",
"15003",
"35005",
"14003"
],
"recommendtype2": {
"key": "vikingexpedition_recommend_recommendtype2_8",
"text": "爆发"
"text": "控制输出"
},
"herolist2": [
"25001",
"25001",
"25001",
"25001",
"25001"
"14003",
"44001",
"24005",
"24003",
"15004"
]
}
]

View File

@ -72,6 +72,7 @@ func (this *apiComp) Awaken(session comm.IUserSession, req *pb.HeroAwakenReq) (e
if len(awakenData.Phasebonus) > 0 {
this.module.modelHero.resetJuexingProperty(_hero)
this.module.modelHero.calFigthValue(_hero)
}
// 校验 有没有技能
if awakenData.Skill != 0 {
@ -84,6 +85,7 @@ func (this *apiComp) Awaken(session comm.IUserSession, req *pb.HeroAwakenReq) (e
}
_heroMap["juexingLv"] = _hero.JuexingLv
_heroMap["juexProperty"] = _hero.JuexProperty
_heroMap["fightvalue"] = _hero.Fightvalue
// 保存数据
err = this.module.modelHero.ChangeList(session.GetUserId(), _hero.Id, _heroMap)
if err != nil {

View File

@ -27,6 +27,7 @@ func (this *apiComp) StrengthenUpSkill(session comm.IUserSession, req *pb.HeroSt
_hero *pb.DBHero // 操作的英雄
cost []*cfg.Gameatn // 技能升级消耗
lvUpCount int32 // 技能升级的次数
//skillValue int32 // 战斗力
)
if errdata = this.StrengthenUpSkillCheck(session, req); errdata != nil {
return
@ -105,9 +106,10 @@ func (this *apiComp) StrengthenUpSkill(session comm.IUserSession, req *pb.HeroSt
if errdata = this.module.ConsumeRes(session, cost, true); errdata != nil {
return
}
this.module.modelHero.calFigthValue(_hero)
_heroMap := map[string]interface{}{
"normalSkill": _hero.NormalSkill,
"fightvalue": _hero.Fightvalue,
}
err = this.module.modelHero.ChangeList(session.GetUserId(), req.HeroObjID, _heroMap) // 修改英雄信息
if err != nil {

View File

@ -78,6 +78,7 @@ func (this *apiComp) StrengthenUpStar(session comm.IUserSession, req *pb.HeroStr
"property": _hero.Property,
"juexProperty": _hero.JuexProperty,
"horoscopeProperty": _hero.HoroscopeProperty,
"fightvalue": _hero.Fightvalue,
}
// 保存数据

View File

@ -179,6 +179,7 @@ func (this *apiComp) TalentLearn(session comm.IUserSession, req *pb.HeroTalentLe
// 同步修改属性
this.module.modelHero.setTalentProperty(hero, talentConf)
chanegCard = append(chanegCard, hero) // 添加推送属性变化信息
session.SendMsg(string(this.module.GetType()), "change", &pb.HeroChangePush{List: chanegCard})

View File

@ -43,6 +43,12 @@ const (
draw_reward = "game_drawreward.json" //新手招募奖励
game_herolevelupreward = "game_herolevelupreward.json" //英雄升级奖励
// 战力相关配置读取
game_fightingcapacity = "game_fightingcapacity.json"
game_fightingskill = "game_fightingskill.json"
game_fightingskilllv = "game_fightingskilllv.json"
game_fightingskillstar = "game_fightingskillstar.json"
)
type CondData struct {
@ -94,7 +100,12 @@ func (this *configureComp) Init(service core.IService, module core.IModule, comp
draw_reward: cfg.NewGamedrawReward,
game_herolevelupreward: cfg.NewGameHeroLevelupreward,
//hero_cardweight: cfg.NewGameDrawWeight,
game_fightingcapacity: cfg.NewGameFightingCapacity,
game_fightingskill: cfg.NewGameFightingSkill,
game_fightingskilllv: cfg.NewGameFightingSkilllv,
game_fightingskillstar: cfg.NewGameFightingSkillStar,
})
//this.drawCardCfg = make(map[string]map[int32][]*cfg.GameDrawCardData, 0)
//configure.RegisterConfigure(hero_drawcard, cfg.NewGameDrawCard, this.SetHeroDrawConfig)
this.awakenMap = make(map[int64]*cfg.GameHeroAwakenData, 0)
@ -604,3 +615,79 @@ func (this *configureComp) GetHeroLvUpWardData(star int32, lv int32) (conf *cfg.
err = fmt.Errorf("no found")
return
}
// 转map 类型 方便计算
func (this *configureComp) GetGameFightingCapacityData() (m map[int32]int32) {
var (
v interface{}
err error
)
m = make(map[int32]int32)
if v, err = this.GetConfigure(game_fightingcapacity); err == nil {
if confg, ok := v.(*cfg.GameFightingCapacity); ok {
for _, v1 := range confg.GetDataList() {
m[v1.Id] = v1.Value
}
}
}
return
}
func (this *configureComp) GetGameFightingCapacity(id int32) (conf *cfg.GameFightingCapacityData, err error) {
var (
v interface{}
)
if v, err = this.GetConfigure(game_fightingcapacity); err == nil {
if confg, ok := v.(*cfg.GameFightingCapacity); ok {
if conf = confg.Get(id); conf != nil {
return
}
}
}
err = comm.NewNotFoundConfErr(moduleName, game_fightingcapacity, id)
return
}
func (this *configureComp) GetGameFightingSkill(lv int32) (conf *cfg.GameFightingSkillData, err error) {
var (
v interface{}
)
if v, err = this.GetConfigure(game_fightingskill); err == nil {
if confg, ok := v.(*cfg.GameFightingSkill); ok {
if conf = confg.Get(lv); conf != nil {
return
}
}
}
err = comm.NewNotFoundConfErr(moduleName, game_fightingskill, lv)
return
}
func (this *configureComp) GetGameFightingSkilllv(skillId int32) (conf *cfg.GameFightingSkilllvData, err error) {
var (
v interface{}
)
if v, err = this.GetConfigure(game_fightingskilllv); err == nil {
if confg, ok := v.(*cfg.GameFightingSkilllv); ok {
if conf = confg.Get(skillId); conf != nil {
return
}
}
}
err = comm.NewNotFoundConfErr(moduleName, game_fightingskill, skillId)
return
}
func (this *configureComp) GetGameFightingSkillStar(star int32) (conf *cfg.GameFightingSkillStarData, err error) {
var (
v interface{}
)
if v, err = this.GetConfigure(game_fightingskillstar); err == nil {
if confg, ok := v.(*cfg.GameFightingSkillStar); ok {
if conf = confg.Get(star); conf != nil {
return
}
}
}
err = comm.NewNotFoundConfErr(moduleName, game_fightingskill, star)
return
}

View File

@ -37,6 +37,153 @@ func (this *ModelHero) Init(service core.IService, module core.IModule, comp cor
return
}
// 计算英雄战力
func (this *ModelHero) calFigthValue(hero *pb.DBHero) (addValue int32, err error) {
var (
skillValue int32 // 技能战力
baseValue int32 // 基础战力
heroCfg *cfg.GameHeroData //英雄配置
tmpHero *pb.DBHero
preValue int32
skillpos *cfg.GameFightingSkilllvData
skilllv *cfg.GameFightingSkilllvData
skillStar *cfg.GameFightingSkillStarData
)
tmpHero = new(pb.DBHero)
*tmpHero = *hero // 克隆一个对象
preValue = hero.Fightvalue
if heroCfg, err = this.module.configure.GetHeroConfig(tmpHero.HeroID); err != nil {
return
}
for k, v := range tmpHero.Property {
switch k {
case cfg.GamePropertyType_Base_MaxHp_Per:
tmpHero.Property[cfg.GamePropertyType_Base_MaxHp_Per] = 0
tmpHero.Property[cfg.GamePropertyType_Base_MaxHp_Base] += int32(math.Floor((float64(v) / 1000) * float64(tmpHero.Property[cfg.GamePropertyType_Base_MaxHp_Base])))
case cfg.GamePropertyType_Base_Atk_Per:
tmpHero.Property[cfg.GamePropertyType_Base_Atk_Per] = 0
tmpHero.Property[cfg.GamePropertyType_Base_Atk_Base] += int32(math.Floor((float64(v) / 1000) * float64(tmpHero.Property[cfg.GamePropertyType_Base_Atk_Base])))
case cfg.GamePropertyType_Base_Def_Per:
tmpHero.Property[cfg.GamePropertyType_Base_Def_Per] = 0
tmpHero.Property[cfg.GamePropertyType_Base_Def_Base] += int32(math.Floor((float64(v) / 1000) * float64(tmpHero.Property[cfg.GamePropertyType_Base_Def_Base])))
case cfg.GamePropertyType_Base_Speed_Per:
tmpHero.Property[cfg.GamePropertyType_Base_Speed_Per] = 0
tmpHero.Property[cfg.GamePropertyType_Base_Speed_Base] += int32(math.Floor((float64(v) / 1000) * float64(tmpHero.Property[cfg.GamePropertyType_Base_Speed_Base])))
}
}
for k, v := range tmpHero.AddProperty {
switch k {
case cfg.GamePropertyType_Base_MaxHp_Per:
tmpHero.AddProperty[cfg.GamePropertyType_Base_MaxHp_Per] = 0
tmpHero.AddProperty[cfg.GamePropertyType_Base_MaxHp_Base] += int32(math.Floor((float64(v) / 1000) * float64(tmpHero.Property[cfg.GamePropertyType_Base_MaxHp_Base])))
case cfg.GamePropertyType_Base_Atk_Per:
tmpHero.AddProperty[cfg.GamePropertyType_Base_Atk_Per] = 0
tmpHero.AddProperty[cfg.GamePropertyType_Base_Atk_Base] += int32(math.Floor((float64(v) / 1000) * float64(tmpHero.Property[cfg.GamePropertyType_Base_Atk_Base])))
case cfg.GamePropertyType_Base_Def_Per:
tmpHero.AddProperty[cfg.GamePropertyType_Base_Def_Per] = 0
tmpHero.AddProperty[cfg.GamePropertyType_Base_Def_Base] += int32(math.Floor((float64(v) / 1000) * float64(tmpHero.Property[cfg.GamePropertyType_Base_Def_Base])))
case cfg.GamePropertyType_Base_Speed_Per:
tmpHero.AddProperty[cfg.GamePropertyType_Base_Speed_Per] = 0
tmpHero.AddProperty[cfg.GamePropertyType_Base_Speed_Base] += int32(math.Floor((float64(v) / 1000) * float64(tmpHero.Property[cfg.GamePropertyType_Base_Speed_Base])))
}
}
for k, v := range tmpHero.JuexProperty {
switch k {
case cfg.GamePropertyType_Base_MaxHp_Per:
tmpHero.JuexProperty[cfg.GamePropertyType_Base_MaxHp_Per] = 0
tmpHero.JuexProperty[cfg.GamePropertyType_Base_MaxHp_Base] += int32(math.Floor((float64(v) / 1000) * float64(tmpHero.Property[cfg.GamePropertyType_Base_MaxHp_Base])))
case cfg.GamePropertyType_Base_Atk_Per:
tmpHero.JuexProperty[cfg.GamePropertyType_Base_Atk_Per] = 0
tmpHero.JuexProperty[cfg.GamePropertyType_Base_Atk_Base] += int32(math.Floor((float64(v) / 1000) * float64(tmpHero.Property[cfg.GamePropertyType_Base_Atk_Base])))
case cfg.GamePropertyType_Base_Def_Per:
tmpHero.JuexProperty[cfg.GamePropertyType_Base_Def_Per] = 0
tmpHero.JuexProperty[cfg.GamePropertyType_Base_Def_Base] += int32(math.Floor((float64(v) / 1000) * float64(tmpHero.Property[cfg.GamePropertyType_Base_Def_Base])))
case cfg.GamePropertyType_Base_Speed_Per:
tmpHero.JuexProperty[cfg.GamePropertyType_Base_Speed_Per] = 0
tmpHero.JuexProperty[cfg.GamePropertyType_Base_Speed_Base] += int32(math.Floor((float64(v) / 1000) * float64(tmpHero.Property[cfg.GamePropertyType_Base_Speed_Base])))
}
}
for k, v := range tmpHero.HoroscopeProperty {
switch k {
case cfg.GamePropertyType_Base_MaxHp_Per:
tmpHero.HoroscopeProperty[cfg.GamePropertyType_Base_MaxHp_Per] = 0
tmpHero.HoroscopeProperty[cfg.GamePropertyType_Base_MaxHp_Base] += int32(math.Floor((float64(v) / 1000) * float64(tmpHero.Property[cfg.GamePropertyType_Base_MaxHp_Base])))
case cfg.GamePropertyType_Base_Atk_Per:
tmpHero.HoroscopeProperty[cfg.GamePropertyType_Base_Atk_Per] = 0
tmpHero.HoroscopeProperty[cfg.GamePropertyType_Base_Atk_Base] += int32(math.Floor((float64(v) / 1000) * float64(tmpHero.Property[cfg.GamePropertyType_Base_Atk_Base])))
case cfg.GamePropertyType_Base_Def_Per:
tmpHero.HoroscopeProperty[cfg.GamePropertyType_Base_Def_Per] = 0
tmpHero.HoroscopeProperty[cfg.GamePropertyType_Base_Def_Base] += int32(math.Floor((float64(v) / 1000) * float64(tmpHero.Property[cfg.GamePropertyType_Base_Def_Base])))
case cfg.GamePropertyType_Base_Speed_Per:
tmpHero.HoroscopeProperty[cfg.GamePropertyType_Base_Speed_Per] = 0
tmpHero.HoroscopeProperty[cfg.GamePropertyType_Base_Speed_Base] += int32(math.Floor((float64(v) / 1000) * float64(tmpHero.Property[cfg.GamePropertyType_Base_Speed_Base])))
}
}
for k, v := range tmpHero.TalentProperty {
switch k {
case cfg.GamePropertyType_Base_MaxHp_Per:
tmpHero.TalentProperty[cfg.GamePropertyType_Base_MaxHp_Per] = 0
tmpHero.TalentProperty[cfg.GamePropertyType_Base_MaxHp_Base] += int32(math.Floor((float64(v) / 1000) * float64(tmpHero.Property[cfg.GamePropertyType_Base_MaxHp_Base])))
case cfg.GamePropertyType_Base_Atk_Per:
tmpHero.TalentProperty[cfg.GamePropertyType_Base_Atk_Per] = 0
tmpHero.TalentProperty[cfg.GamePropertyType_Base_Atk_Base] += int32(math.Floor((float64(v) / 1000) * float64(tmpHero.Property[cfg.GamePropertyType_Base_Atk_Base])))
case cfg.GamePropertyType_Base_Def_Per:
tmpHero.TalentProperty[cfg.GamePropertyType_Base_Def_Per] = 0
tmpHero.TalentProperty[cfg.GamePropertyType_Base_Def_Base] += int32(math.Floor((float64(v) / 1000) * float64(tmpHero.Property[cfg.GamePropertyType_Base_Def_Base])))
case cfg.GamePropertyType_Base_Speed_Per:
tmpHero.TalentProperty[cfg.GamePropertyType_Base_Speed_Per] = 0
tmpHero.TalentProperty[cfg.GamePropertyType_Base_Speed_Base] += int32(math.Floor((float64(v) / 1000) * float64(tmpHero.Property[cfg.GamePropertyType_Base_Speed_Base])))
}
}
// 属性汇总
for k, v := range tmpHero.TalentProperty {
tmpHero.Property[k] += v
}
for k, v := range tmpHero.HoroscopeProperty {
tmpHero.Property[k] += v
}
for k, v := range tmpHero.JuexProperty {
tmpHero.Property[k] += v
}
for k, v := range tmpHero.AddProperty {
tmpHero.Property[k] += v
}
// 算基础属性
for k, v := range this.module.configure.GetGameFightingCapacityData() {
if _, ok := tmpHero.Property[k]; ok {
baseValue += tmpHero.Property[k] * v / 1000
}
}
for pos, v := range tmpHero.NormalSkill {
if skillpos, err = this.module.configure.GetGameFightingSkilllv(int32(pos + 1)); err == nil {
if skilllv, err = this.module.configure.GetGameFightingSkilllv(v.SkillLv); err == nil {
skillValue += skillpos.Value * skilllv.Value / 1000
} else {
return
}
} else {
return
}
}
// 乘以星级系数
if skillStar, err = this.module.configure.GetGameFightingSkillStar(heroCfg.Star); err == nil {
skillValue = skillValue * skillStar.Value / 1000
}
hero.Fightvalue = skillValue + baseValue
addValue = hero.Fightvalue - preValue
return
}
//17
// 初始化英雄
func (this *ModelHero) InitHero(uid string, heroCfgId string) *pb.DBHero {
@ -64,8 +211,9 @@ func (this *ModelHero) InitHero(uid string, heroCfgId string) *pb.DBHero {
HoroscopeProperty: make(map[int32]int32),
Fetters: make(map[int32]int32),
}
this.PropertyCompute(newHero)
this.initHeroSkill(newHero)
this.PropertyCompute(newHero)
return newHero
}
@ -216,6 +364,7 @@ func (this *ModelHero) resetJuexingProperty(hero *pb.DBHero) {
}
}
}
}
// 设置装备属性
@ -340,7 +489,7 @@ func (this *ModelHero) PropertyCompute(hero *pb.DBHero) {
starLvfg := this.module.configure.GetHeroLv(starCfg.Level)
if growCfg == nil || heroCfg == nil || lvCfg == nil || starCfg == nil || starLvfg == nil {
this.module.Debugf("hero PropertyCompute Configure Info err:heroid :%s, herolv:=%d,heroStar:%d,", hero.HeroID, hero.Lv, hero.Star)
this.module.Debugf("hero propertyCompute Configure Info err:heroid :%s, herolv:=%d,heroStar:%d,", hero.HeroID, hero.Lv, hero.Star)
return
}
@ -371,24 +520,7 @@ func (this *ModelHero) PropertyCompute(hero *pb.DBHero) {
this.module.moduleHoroscope.ComputeHeroNumeric(hero.Uid, hero)
}
this.resetJuexingProperty(hero)
}
// 重新计算英雄属性
func (this *ModelHero) ChangeHeroProperty(session comm.IUserSession, hero *pb.DBHero) (err error) {
this.PropertyCompute(hero) //重新计算 property 的值
update := map[string]interface{}{
"property": hero.Property,
"talentProperty": hero.TalentProperty,
"juexProperty": hero.JuexProperty,
"horoscopeProperty": hero.HoroscopeProperty,
}
if err = this.ChangeList(session.GetUserId(), hero.Id, update); err != nil {
this.module.Errorf("ChangeHeroProperty err:%v", err)
return
}
return
this.calFigthValue(hero)
}
func (this *ModelHero) cleanData(uid string) {
@ -534,6 +666,7 @@ func (this *ModelHero) AddCardExp(session comm.IUserSession, heros []*pb.DBHero,
update["horoscopeProperty"] = hero.HoroscopeProperty
update["talentProperty"] = hero.TalentProperty
update["juexProperty"] = hero.JuexProperty
update["fightvalue"] = hero.Fightvalue
}
changeupdate[hero.Id] = update
@ -675,8 +808,8 @@ func (this *ModelHero) InitMonsterHero(heroCfgId string, star, lv int32) *pb.DBH
TalentProperty: make(map[int32]int32),
HoroscopeProperty: make(map[int32]int32),
}
this.PropertyCompute(newHero)
this.initHeroSkill(newHero)
this.PropertyCompute(newHero)
return newHero
}
@ -695,6 +828,8 @@ func (this *ModelHero) setTalentProperty(hero *pb.DBHero, conf *cfg.GameHeroTale
_heroMap := make(map[string]interface{}, 0)
_heroMap["talentProperty"] = hero.TalentProperty
this.module.modelHero.calFigthValue(hero)
_heroMap["fightvalue"] = hero.Fightvalue
if err := this.ChangeList(hero.Uid, hero.Id, _heroMap); err != nil {
this.module.Errorf("mergeenegryProperty err %v", err)
}

View File

@ -523,6 +523,7 @@ func (this *Hero) GetAllMaxHero(session comm.IUserSession) (errdata *pb.ErrorDat
"juexProperty": hero.JuexProperty,
"awakenskill": hero.Awakenskill,
"talentskill": hero.Talentskill,
"fightvalue": hero.Fightvalue,
}
// 保存数据

View File

@ -100,6 +100,7 @@ type DBHero struct {
Ispasson bool `protobuf:"varint,27,opt,name=ispasson,proto3" json:"ispasson"` //是否是传功学员
Awakenskill []*SkillData `protobuf:"bytes,28,rep,name=awakenskill,proto3" json:"awakenskill"` // 觉醒技能
Talentskill []*SkillData `protobuf:"bytes,29,rep,name=talentskill,proto3" json:"talentskill"` // 回响技能
Fightvalue int32 `protobuf:"varint,30,opt,name=fightvalue,proto3" json:"fightvalue"` // 战力
}
func (x *DBHero) Reset() {
@ -337,6 +338,13 @@ func (x *DBHero) GetTalentskill() []*SkillData {
return nil
}
func (x *DBHero) GetFightvalue() int32 {
if x != nil {
return x.Fightvalue
}
return 0
}
//英雄扩展数据
type DBHeroRecord struct {
state protoimpl.MessageState
@ -735,7 +743,7 @@ var file_hero_hero_db_proto_rawDesc = []byte{
0x0a, 0x12, 0x68, 0x65, 0x72, 0x6f, 0x2f, 0x68, 0x65, 0x72, 0x6f, 0x5f, 0x64, 0x62, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x1a, 0x1c, 0x65, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x65, 0x71, 0x75, 0x69,
0x70, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa2,
0x70, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc2,
0x0b, 0x0a, 0x06, 0x44, 0x42, 0x48, 0x65, 0x72, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x68,
@ -802,6 +810,8 @@ var file_hero_hero_db_proto_rawDesc = []byte{
0x6c, 0x6c, 0x12, 0x2c, 0x0a, 0x0b, 0x74, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x73, 0x6b, 0x69, 0x6c,
0x6c, 0x18, 0x1d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x44,
0x61, 0x74, 0x61, 0x52, 0x0b, 0x74, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x73, 0x6b, 0x69, 0x6c, 0x6c,
0x12, 0x1e, 0x0a, 0x0a, 0x66, 0x69, 0x67, 0x68, 0x74, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1e,
0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x66, 0x69, 0x67, 0x68, 0x74, 0x76, 0x61, 0x6c, 0x75, 0x65,
0x1a, 0x3b, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72,
0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03,
0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,