feat(fight): 优化睡眠状态效果逻辑,确保对方攻击后解除睡眠

睡眠状态现在会正确挂载到对手身上,以实现在对方攻击后自动解除睡眠效果。

fix(fight): 修复技能PP减少逻辑,确保使用技能时正确扣减PP

在技能执行过程中,通过查找当前宠物的技能列表来正确地减少对应技能的PP值,避免了错误的PP扣减。

fix(fight): 修复回合开始时技能列表初始化问题

修正了战斗中角色和对手的技能列表初始化逻辑,确保双方技能数据正确加载。

feat(pet): 限制宠物技能数量为4个并修复技能学习逻辑

更新宠物技能学习逻辑,确保只保留最后四个技能,并在学习新技能时正确添加至技能列表。

fix(p
This commit is contained in:
2025-10-27 01:11:31 +08:00
parent e75ecd413d
commit 5542718a2b
4 changed files with 22 additions and 14 deletions

View File

@@ -32,7 +32,7 @@ func (e *StatusNotSkill) Skill_Hit_Pre(ctx input.Ctx) bool {
}
type StatusSleep struct { //睡眠不能出手
type StatusSleep struct { //睡眠不能出手 ,这个挂载到对面来实现对方攻击后解除睡眠效果
node.EffectNode
}

View File

@@ -1,11 +1,13 @@
package fight
import (
"blazing/common/utils"
"blazing/logic/service/common"
"blazing/logic/service/fight/action"
"blazing/logic/service/fight/info"
"blazing/logic/service/fight/input"
"blazing/logic/service/player"
"blazing/modules/blazing/model"
"fmt"
"math/rand"
"reflect"
@@ -613,8 +615,13 @@ func (f *FightC) enterturn(fattack, sattack *action.SelectSkillAction) {
f.processSkillAttack(attacker, defender, currentskill)
currentskill = oldskill
fmt.Printf("技能4 %p\n", currentskill)
currentskill.Info.PP--
_, skill, ok := utils.FindWithIndex(attacker.CurrentPet.Info.SkillList, func(item model.SkillInfo) bool {
return item.ID == currentskill.Info.ID
})
if ok {
skill.PP--
}
}
@@ -680,7 +687,8 @@ func (f *FightC) enterturn(fattack, sattack *action.SelectSkillAction) {
})
f.First.AttackValue.RemainHp = int32(f.First.CurrentPet.Info.Hp)
f.First.AttackValue.SkillList = f.First.CurrentPet.Info.SkillList
f.First.AttackValue.SkillList[0].PP = 0
f.Second.AttackValue.SkillList = f.Second.CurrentPet.Info.SkillList
f.Second.AttackValue.RemainHp = int32(f.Second.CurrentPet.Info.Hp)
ret := info.AttackValueS{
FAttack: *f.First.AttackValue,

View File

@@ -55,21 +55,21 @@ func (p *Player) AddPetExp(petinfo *model.PetInfo, addExp uint32, bro bool) {
// 处理技能学习
canLearnSkillList := LastFourElements(petinfo.GetLevelRangeCanLearningSkills(originalLevel, petinfo.Level)) //获取最后四个技能,如果不足,那就取全部技能
for i := 0; i < len(petinfo.SkillList); i++ {
for i := 0; i < 4; i++ {
if petinfo.SkillList[i].ID == 0 {
if len(canLearnSkillList) != 0 {
skid := canLearnSkillList[len(canLearnSkillList)-1]
petinfo.SkillList[i].ID = skid
petinfo.SkillList[i].PP = uint32(xmlres.SkillMap[int(skid)].MaxPP)
if len(canLearnSkillList) != 0 {
skid := canLearnSkillList[len(canLearnSkillList)-1]
petinfo.SkillList = append(petinfo.SkillList, model.SkillInfo{
canLearnSkillList = canLearnSkillList[:len(canLearnSkillList)-1]
}
ID: skid,
PP: uint32(xmlres.SkillMap[int(skid)].MaxPP),
})
canLearnSkillList = canLearnSkillList[:len(canLearnSkillList)-1]
}
}
petinfo.SkillList = petinfo.SkillList[:4] //归正到4
//todo 待实现
// // 发送技能更新消息
// updateSkillInfo := UpdateSkillInfo{

View File

@@ -125,7 +125,7 @@ type PetInfo struct {
func (pet *PetInfo) Cure() {
pet.Hp = pet.MaxHp
for i := 0; i < 4; i++ {
for i := 0; i < len(pet.SkillList); i++ {
maxPP, ok := xmlres.SkillMap[int(pet.SkillList[i].ID)]
// 恢复至最大PP值从配置表获取
if pet.SkillList[i].ID != 0 && ok {