This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user