diff --git a/logic/controller/item_use.go b/logic/controller/item_use.go index cfc781d8b..b5ba15b74 100644 --- a/logic/controller/item_use.go +++ b/logic/controller/item_use.go @@ -35,11 +35,16 @@ func (h Controller) GetUserItemList(data *ItemListInboundInfo, c *player.Player) // c: 当前玩家对象 // 返回: 使用后的宠物信息和错误码 func (h Controller) UsePetItemOutOfFight(data *C2S_USE_PET_ITEM_OUT_OF_FIGHT, c *player.Player) (result *item.S2C_USE_PET_ITEM_OUT_OF_FIGHT, err errorcode.ErrorCode) { - _, currentPet, found := c.FindPet(data.CatchTime) + slot, found := c.FindPetBagSlot(data.CatchTime) if !found { return nil, errorcode.ErrorCodes.Err10401 } + currentPet := slot.PetInfoPtr() + if currentPet == nil { + return nil, errorcode.ErrorCodes.Err10401 + } + itemID := uint32(data.ItemID) if c.Service.Item.CheakItem(itemID) == 0 { return nil, errorcode.ErrorCodes.ErrInsufficientItems @@ -184,11 +189,16 @@ func (h Controller) handleRegularPetItem(itemID uint32, currentPet *model.PetInf // c: 当前玩家对象 // 返回: 无数据和错误码 func (h Controller) ResetNature(data *C2S_PET_RESET_NATURE, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { - _, currentPet, found := c.FindPet(data.CatchTime) + slot, found := c.FindPetBagSlot(data.CatchTime) if !found { return nil, errorcode.ErrorCodes.Err10401 } + currentPet := slot.PetInfoPtr() + if currentPet == nil { + return nil, errorcode.ErrorCodes.Err10401 + } + if data.ItemId != UniversalNatureItemID { return nil, errorcode.ErrorCodes.ErrItemUnusable } diff --git a/logic/controller/pet_info.go b/logic/controller/pet_info.go index e5f616fec..448788bf5 100644 --- a/logic/controller/pet_info.go +++ b/logic/controller/pet_info.go @@ -13,10 +13,11 @@ func (h Controller) GetPetInfo( data *GetPetInfoInboundInfo, player *player.Player) (result *model.PetInfo, err errorcode.ErrorCode) { - _, petInfo, found := player.FindPet(data.CatchTime) - if found { - result = petInfo - return result, 0 + if slot, found := player.FindPetBagSlot(data.CatchTime); found { + if petInfo := slot.PetInfoPtr(); petInfo != nil { + result = petInfo + return result, 0 + } } ret := player.Service.Pet.PetInfoOneByCatchTime(data.CatchTime) @@ -73,7 +74,6 @@ func (h Controller) PlayerShowPet( Flag: data.Flag, } - _, currentPet, ok := player.FindPet(data.CatchTime) if data.Flag == 0 { player.SetPetDisplay(0, nil) player.GetSpace().RefreshUserInfo(player) @@ -81,10 +81,16 @@ func (h Controller) PlayerShowPet( return } + slot, ok := player.FindPetBagSlot(data.CatchTime) if !ok { return nil, errorcode.ErrorCodes.ErrPokemonNotExists } + currentPet := slot.PetInfoPtr() + if currentPet == nil { + return nil, errorcode.ErrorCodes.ErrPokemonNotExists + } + player.SetPetDisplay(data.Flag, currentPet) player.GetSpace().RefreshUserInfo(player) result = buildPetShowOutboundInfo(data.Head.UserID, data.Flag, currentPet) diff --git a/logic/controller/pet_manage.go b/logic/controller/pet_manage.go index 38d391ed0..69afcf8c6 100644 --- a/logic/controller/pet_manage.go +++ b/logic/controller/pet_manage.go @@ -32,9 +32,11 @@ func (h Controller) PetOneCure( return result, errorcode.ErrorCodes.ErrChampionCannotHeal } - _, currentPet, ok := player.FindPet(data.CatchTime) - if ok { - defer currentPet.Cure() + if slot, ok := player.FindPetBagSlot(data.CatchTime); ok { + currentPet := slot.PetInfoPtr() + if currentPet != nil { + defer currentPet.Cure() + } } return &pet.PetOneCureOutboundInfo{ diff --git a/logic/service/player/pet_bag.go b/logic/service/player/pet_bag.go index f15380408..15920a038 100644 --- a/logic/service/player/pet_bag.go +++ b/logic/service/player/pet_bag.go @@ -25,6 +25,13 @@ func (slot PetBagSlot) PetInfo() model.PetInfo { return slot.info } +func (slot PetBagSlot) PetInfoPtr() *model.PetInfo { + if !slot.IsValid() { + return nil + } + return &(*slot.list)[slot.index] +} + func (slot PetBagSlot) IsMainBag() bool { return slot.main }