fix(pet): 优化宠物面板计算逻辑,限制非首次生成时等级不超过100并简化特性生成

This commit is contained in:
1
2025-12-11 14:34:56 +00:00
parent cbf9b1039f
commit 8eb0a1324b
6 changed files with 30 additions and 36 deletions

View File

@@ -454,22 +454,17 @@ func GenPetInfo(
})
}
case abilityTypeEnum == -1:
// 随机特性
randomIndex := grand.Intn(len(xmlres.PlayerEffectMAP))
var i int
for _, v := range xmlres.PlayerEffectMAP {
if i == randomIndex {
p.EffectInfo = append(p.EffectInfo, PetEffectInfo{
Idx: uint16(gconv.Int16(v.Idx)),
Status: 1,
EID: uint16(gconv.Int16(v.Eid)),
Args: v.ArgsS,
})
break
}
i++
p.EffectInfo = append(p.EffectInfo, PetEffectInfo{
Idx: uint16(gconv.Int16(v.Idx)),
Status: 1,
EID: uint16(gconv.Int16(v.Eid)),
Args: v.ArgsS,
})
break
}
}
@@ -488,7 +483,7 @@ func GenPetInfo(
}
// ---- 属性计算 ----
p.CalculatePetPane()
p.CalculatePetPane(true)
p.Update_EXP()

View File

@@ -1,6 +1,9 @@
package model
import "blazing/common/data/xmlres"
import (
"blazing/common/data/xmlres"
"blazing/common/utils"
)
// 实现获取等级范围内可学习的技能
func (p *PetInfo) GetLevelRangeCanLearningSkills(from, to uint32) []uint32 {
@@ -23,14 +26,17 @@ func (c *PetInfo) calculatePetHPPanelSize(base, dv, level, ev uint32) uint32 {
}
// 计算其他属性面板值(带性格修正)
func (c *PetInfo) calculatePetPanelSize(base, dv, level, ev uint32, natureCorrect float64) uint32 {
func (c *PetInfo) calculatePetPanelSize(base, ev uint32, natureCorrect float64) uint32 {
base1 := float64((float64(base)*2+float64(ev)/4.0+float64(dv))*(float64(level)/100.0) + 5)
base1 := float64((float64(base)*2+float64(ev)/4.0+float64(c.Dv))*(float64(c.Level)/100.0) + 5)
return uint32(float64(base1) * natureCorrect)
}
// 计算生成面板
func (p *PetInfo) CalculatePetPane() {
// 计算生成面板,只允许第一次生成超过100比如boss,不允许额外超过
func (p *PetInfo) CalculatePetPane(frist bool) {
if !frist {
p.Level = utils.Min(p.Level, 100)
}
naxml := xmlres.NatureRootMap[int(p.Nature)]
petxml := xmlres.PetMAP[int(p.ID)]
// 计算各项属性
@@ -44,40 +50,35 @@ func (p *PetInfo) CalculatePetPane() {
// * battle_lv: atk(0), def(1), sp_atk(2), sp_def(3), spd(4), accuracy(5)
p.Prop[0] = p.calculatePetPanelSize(
uint32(petxml.Atk),
p.Dv,
p.Level,
p.Ev[1],
naxml.AttackCorrect,
)
p.Prop[1] = p.calculatePetPanelSize(
uint32(petxml.Def),
p.Dv,
p.Level,
p.Ev[2],
naxml.DefenseCorrect,
)
p.Prop[2] = p.calculatePetPanelSize(
uint32(petxml.SpAtk),
p.Dv,
p.Level,
p.Ev[3],
naxml.SaCorrect,
)
p.Prop[3] = p.calculatePetPanelSize(
uint32(petxml.SpDef),
p.Dv,
p.Level,
p.Ev[4],
naxml.SdCorrect,
)
p.Prop[4] = p.calculatePetPanelSize(
uint32(petxml.Spd),
p.Dv,
p.Level,
p.Ev[5],
naxml.SpeedCorrect,
)