2025-09-21 17:01:31 +00:00
|
|
|
|
package model
|
|
|
|
|
|
|
2025-12-11 14:34:56 +00:00
|
|
|
|
import (
|
|
|
|
|
|
"blazing/common/data/xmlres"
|
|
|
|
|
|
)
|
2025-09-21 17:01:31 +00:00
|
|
|
|
|
|
|
|
|
|
// 实现获取等级范围内可学习的技能
|
|
|
|
|
|
func (p *PetInfo) GetLevelRangeCanLearningSkills(from, to uint32) []uint32 {
|
|
|
|
|
|
|
|
|
|
|
|
var skills []uint32
|
|
|
|
|
|
|
|
|
|
|
|
for _, skillIDs := range xmlres.PetMAP[int(p.ID)].LearnableMoves.Moves {
|
|
|
|
|
|
|
|
|
|
|
|
if skillIDs.LearningLv >= from && skillIDs.LearningLv <= to {
|
|
|
|
|
|
skills = append(skills, skillIDs.ID)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return skills
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 计算HP面板值(无性格修正)
|
|
|
|
|
|
func (c *PetInfo) calculatePetHPPanelSize(base, dv, level, ev uint32) uint32 {
|
|
|
|
|
|
|
|
|
|
|
|
return uint32((float64(base)*2+float64(ev)/4.0+float64(dv))*(float64(level)/100.0) + float64(level) + 10)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 计算其他属性面板值(带性格修正)
|
2025-12-11 14:34:56 +00:00
|
|
|
|
func (c *PetInfo) calculatePetPanelSize(base, ev uint32, natureCorrect float64) uint32 {
|
2025-09-21 17:01:31 +00:00
|
|
|
|
|
2025-12-11 14:34:56 +00:00
|
|
|
|
base1 := float64((float64(base)*2+float64(ev)/4.0+float64(c.Dv))*(float64(c.Level)/100.0) + 5)
|
2025-09-21 17:01:31 +00:00
|
|
|
|
return uint32(float64(base1) * natureCorrect)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-11 14:34:56 +00:00
|
|
|
|
// 计算生成面板,只允许第一次生成超过100,比如boss,不允许额外超过
|
|
|
|
|
|
func (p *PetInfo) CalculatePetPane(frist bool) {
|
|
|
|
|
|
if !frist {
|
2025-12-13 21:47:07 +08:00
|
|
|
|
|
|
|
|
|
|
if p.Level > 100 {
|
|
|
|
|
|
|
|
|
|
|
|
oldlveel := p.Level
|
|
|
|
|
|
p.Level = 100
|
|
|
|
|
|
defer func() {
|
|
|
|
|
|
p.Level = oldlveel
|
|
|
|
|
|
}()
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-11 14:34:56 +00:00
|
|
|
|
}
|
2025-09-21 17:01:31 +00:00
|
|
|
|
naxml := xmlres.NatureRootMap[int(p.Nature)]
|
|
|
|
|
|
petxml := xmlres.PetMAP[int(p.ID)]
|
|
|
|
|
|
// 计算各项属性
|
2025-11-08 01:07:37 +08:00
|
|
|
|
p.MaxHp = p.calculatePetHPPanelSize(
|
2025-09-21 17:01:31 +00:00
|
|
|
|
uint32(petxml.HP),
|
|
|
|
|
|
p.Dv,
|
|
|
|
|
|
p.Level,
|
2025-11-02 18:56:16 +08:00
|
|
|
|
p.Ev[0],
|
2025-09-21 17:01:31 +00:00
|
|
|
|
)
|
2025-11-08 01:07:37 +08:00
|
|
|
|
p.Hp = p.MaxHp
|
2025-09-21 17:01:31 +00:00
|
|
|
|
// * battle_lv: atk(0), def(1), sp_atk(2), sp_def(3), spd(4), accuracy(5)
|
|
|
|
|
|
p.Prop[0] = p.calculatePetPanelSize(
|
|
|
|
|
|
uint32(petxml.Atk),
|
2025-12-11 14:34:56 +00:00
|
|
|
|
|
2025-11-02 18:56:16 +08:00
|
|
|
|
p.Ev[1],
|
2025-09-21 17:01:31 +00:00
|
|
|
|
naxml.AttackCorrect,
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
p.Prop[1] = p.calculatePetPanelSize(
|
|
|
|
|
|
uint32(petxml.Def),
|
2025-12-11 14:34:56 +00:00
|
|
|
|
|
2025-11-02 18:56:16 +08:00
|
|
|
|
p.Ev[2],
|
2025-09-21 17:01:31 +00:00
|
|
|
|
naxml.DefenseCorrect,
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
p.Prop[2] = p.calculatePetPanelSize(
|
|
|
|
|
|
uint32(petxml.SpAtk),
|
2025-12-11 14:34:56 +00:00
|
|
|
|
|
2025-11-02 18:56:16 +08:00
|
|
|
|
p.Ev[3],
|
2025-09-21 17:01:31 +00:00
|
|
|
|
naxml.SaCorrect,
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
p.Prop[3] = p.calculatePetPanelSize(
|
|
|
|
|
|
uint32(petxml.SpDef),
|
2025-12-11 14:34:56 +00:00
|
|
|
|
|
2025-11-02 18:56:16 +08:00
|
|
|
|
p.Ev[4],
|
2025-09-21 17:01:31 +00:00
|
|
|
|
naxml.SdCorrect,
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
p.Prop[4] = p.calculatePetPanelSize(
|
|
|
|
|
|
uint32(petxml.Spd),
|
2025-12-11 14:34:56 +00:00
|
|
|
|
|
2025-11-02 18:56:16 +08:00
|
|
|
|
p.Ev[5],
|
2025-09-21 17:01:31 +00:00
|
|
|
|
naxml.SpeedCorrect,
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
}
|