feat: 添加战斗效果800-814及优化道具逻辑
Some checks failed
ci/woodpecker/push/my-first-workflow Pipeline failed

This commit is contained in:
xinian
2026-03-31 06:51:40 +08:00
committed by cnb
parent 8552eb61a8
commit b4a8048b85
7 changed files with 841 additions and 99 deletions

View File

@@ -46,29 +46,46 @@ func (h Controller) UsePetItemOutOfFight(data *item.C2S_USE_PET_ITEM_OUT_OF_FIGH
return nil, errorcode.ErrorCodes.Err10401
}
if c.Service.Item.CheakItem(uint32(data.ItemID)) == 0 {
itemID := uint32(data.ItemID)
if c.Service.Item.CheakItem(itemID) == 0 {
return nil, errorcode.ErrorCodes.ErrSystemError
}
itemCfg, ok := xmlres.ItemsMAP[int(itemID)]
if !ok {
return nil, errorcode.ErrorCodes.ErrSystemError
}
oldHP := currentPet.Hp
var errcode errorcode.ErrorCode
switch data.ItemID {
case 300036:
switch {
case itemID == 300036:
errcode = h.handleNeuronItem(currentPet, c)
case 300212:
if errcode == 0 {
refreshPetPaneKeepHP(currentPet, oldHP)
}
case itemID == 300212:
errcode = h.handlexuancaiItem(currentPet, c)
case itemCfg.Bonus != 0:
errcode = errorcode.ErrorCodes.ErrItemUnusable
case itemCfg.HP != 0:
errcode = h.handleRecoverHPItemOutOfFight(itemCfg.HP, currentPet)
case itemCfg.PP != 0:
errcode = h.handleRecoverPPItemOutOfFight(itemCfg.PP, currentPet)
default:
errcode = h.handleRegularPetItem(uint32(data.ItemID), currentPet)
errcode = h.handleRegularPetItem(itemID, currentPet)
if errcode == 0 {
refreshPetPaneKeepHP(currentPet, oldHP)
}
}
if errcode != 0 {
return nil, errcode
}
c.Service.Item.UPDATE(uint32(data.ItemID), -1)
c.Service.Item.UPDATE(itemID, -1)
result = &item.S2C_USE_PET_ITEM_OUT_OF_FIGHT{}
currentPet.CalculatePetPane(100)
copier.Copy(&result, currentPet)
// defer c.Service.Info.Save(*c.Info)
return result, 0
}
@@ -113,14 +130,56 @@ func (h Controller) handlexuancaiItem(currentPet *model.PetInfo, c *player.Playe
return 0
}
func (h Controller) handleRecoverHPItemOutOfFight(recoverHP int, currentPet *model.PetInfo) errorcode.ErrorCode {
if currentPet.Hp >= currentPet.MaxHp {
return errorcode.ErrorCodes.ErrItemUnusable
}
currentPet.ModelHP(int64(recoverHP))
if currentPet.Hp == 0 {
currentPet.Hp = 1
}
return 0
}
func (h Controller) handleRecoverPPItemOutOfFight(recoverPP int, currentPet *model.PetInfo) errorcode.ErrorCode {
if !canRecoverPP(currentPet) {
return errorcode.ErrorCodes.ErrItemUnusable
}
currentPet.HealPP(recoverPP)
return 0
}
func canRecoverPP(currentPet *model.PetInfo) bool {
for _, skill := range currentPet.SkillList {
skillCfg, ok := xmlres.SkillMap[int(skill.ID)]
if ok && skill.PP < uint32(skillCfg.MaxPP) {
return true
}
}
return false
}
func refreshPetPaneKeepHP(currentPet *model.PetInfo, hp uint32) {
currentPet.CalculatePetPane(100)
if hp > currentPet.MaxHp {
currentPet.Hp = currentPet.MaxHp
return
}
currentPet.Hp = hp
}
// handleRegularPetItem 处理普通宠物道具
func (h Controller) handleRegularPetItem(itemID uint32, currentPet *model.PetInfo) errorcode.ErrorCode {
handler := item.PetItemRegistry.GetHandler(itemID)
if handler == nil {
return errorcode.ErrorCodes.ErrSystemError
return errorcode.ErrorCodes.ErrItemUnusable
}
if !handler(itemID, currentPet) {
return errorcode.ErrorCodes.ErrSystemError
return errorcode.ErrorCodes.ErrItemUnusable
}
return 0
}
@@ -139,8 +198,9 @@ func (h Controller) ResetNature(data *item.C2S_PET_RESET_NATURE, c *player.Playe
return nil, errorcode.ErrorCodes.ErrSystemError
}
currentHP := currentPet.Hp
currentPet.Nature = data.Nature
currentPet.CalculatePetPane(100)
refreshPetPaneKeepHP(currentPet, currentHP)
c.Service.Item.UPDATE(data.ItemId, -1)
return result, 0
}