diff --git a/logic/controller/item_use.go b/logic/controller/item_use.go index 2e094f7e5..70de48e02 100644 --- a/logic/controller/item_use.go +++ b/logic/controller/item_use.go @@ -53,8 +53,10 @@ func (h Controller) UsePetItemOutOfFight(data *item.C2S_USE_PET_ITEM_OUT_OF_FIGH oldPetCatchTime := currentPet.CatchTime oldPet := c.Service.Pet.PetInfo_One_Unscoped(currentPet.OldCatchTime) println(c.Info.UserID, "还原", len(c.Info.PetList), currentPet.ID, oldPet.Data.ID) - currentPet = &oldPet.Data + + copier.CopyWithOption(currentPet, oldPet.Data, copier.Option{DeepCopy: true}) currentPet.CatchTime = oldPetCatchTime + println(c.Info.UserID, "还原后", len(c.Info.PetList), currentPet.ID, oldPet.Data.ID) } else { handler := item.PetItemRegistry.GetHandler(data.ItemID) if handler == nil { diff --git a/logic/controller/pet_info.go b/logic/controller/pet_info.go index f5fd2001a..664e8588a 100644 --- a/logic/controller/pet_info.go +++ b/logic/controller/pet_info.go @@ -7,8 +7,6 @@ import ( "blazing/logic/service/pet" "blazing/logic/service/player" - "blazing/modules/blazing/model" - "github.com/jinzhu/copier" ) @@ -76,17 +74,14 @@ func (h Controller) GetPetReleaseList( // 返回: 无数据和错误码 func (h Controller) PetReleaseToWarehouse( data *pet.PET_ROWEI, player *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { - player.Service.Pet.PetInfo_One_exec(data.CatchTime, func(petInfo *model.PetEX) { - _, _, inBag := player.FindPet(data.CatchTime) - freeForbidden := xmlres.PetMAP[int(data.ID)].FreeForbidden - // 如果背包没找到,再放入背包 - if !inBag && petInfo.CatchTime != 0 && freeForbidden == 0 { - petInfo.Free = 1 - } else { - err = errorcode.ErrorCodes.ErrCannotReleaseNonWarehouse - } - }) + _, _, inBag := player.FindPet(data.CatchTime) + freeForbidden := xmlres.PetMAP[int(data.ID)].FreeForbidden + // 如果背包没找到,再放入背包 + if inBag || freeForbidden == 1 { + return nil, errorcode.ErrorCodes.ErrCannotReleaseNonWarehouse + } + player.Service.Pet.UPdateFree(data.CatchTime, 1) return nil, err } @@ -95,14 +90,10 @@ func (h Controller) PetReleaseToWarehouse( func (h Controller) PetRetrieveFromWarehouse( data *pet.PET_RETRIEVE, player *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { //这个时候player应该是空的 - player.Service.Pet.PetInfo_One_exec(data.CatchTime, func(petInfo *model.PetEX) { - - //如果背包没找到,再放入背包 - if _, _, ok := player.FindPet(data.CatchTime); !ok && petInfo.CatchTime != 0 { - petInfo.Free = 0 - } - - }) + //如果背包没找到,再放入背包 + if _, _, ok := player.FindPet(data.CatchTime); !ok { + player.Service.Pet.UPdateFree(data.CatchTime, 0) + } return nil, 0 @@ -128,11 +119,7 @@ func (h Controller) TogglePetBagWarehouse( index, pet, ok := player.FindPet(data.CatchTime) if ok { - player.Service.Pet.PetInfo_One_exec(data.CatchTime, func(petData *model.PetEX) { - petData.Data = *pet - //t.InBag = 0 - - }) + player.Service.Pet.UPdate(*pet) player.Info.PetList = append(player.Info.PetList[:index], player.Info.PetList[index+1:]...) } @@ -140,18 +127,15 @@ func (h Controller) TogglePetBagWarehouse( case 1: if len(player.Info.PetList) < 6 { //todo 背包 - player.Service.Pet.PetInfo_One_exec(data.CatchTime, func(petData *model.PetEX) { + _, _, ok := player.FindPet(data.CatchTime) - _, _, ok := player.FindPet(data.CatchTime) + //如果背包没找到,再放入背包 + if !ok { + r := player.Service.Pet.PetInfo_One(data.CatchTime) + player.Info.PetList = append(player.Info.PetList, r.Data) + result.PetInfo = r.Data + } - //如果背包没找到,再放入背包 - if !ok && petData.CatchTime != 0 { - //t.InBag = 1 - player.Info.PetList = append(player.Info.PetList, petData.Data) - result.PetInfo = petData.Data - } - - }) } } @@ -242,4 +226,4 @@ func (h Controller) GetPetBargeList(data *pet.PetBargeListInboundInfo, player *p return &pet.PetBargeListOutboundInfo{ PetBargeList: make([]pet.PetBargeListInfo, 0), }, 0 -} \ No newline at end of file +} diff --git a/logic/service/player/base.go b/logic/service/player/base.go index f6f75d1d3..e5463f681 100644 --- a/logic/service/player/base.go +++ b/logic/service/player/base.go @@ -71,11 +71,7 @@ func (f *Player) PetDel(catchTime uint32) { f.Info.PetList = append(f.Info.PetList[:index], f.Info.PetList[index+1:]...) //先将背包更新 - f.Service.Pet.PetInfo_One_exec(catchTime, func(petData *model.PetEX) { - petData.Data = *olpet - //t.InBag = 0 - - }) + f.Service.Pet.UPdate(*olpet) f.Service.Pet.Pet_del(catchTime) } } diff --git a/modules/blazing/service/pet.go b/modules/blazing/service/pet.go index a862bc2c9..cd52f752e 100644 --- a/modules/blazing/service/pet.go +++ b/modules/blazing/service/pet.go @@ -37,17 +37,23 @@ func (s *PetService) PetCount(flag int) int { return ret } +func (s *PetService) UPdateFree(ctime uint32, free uint32) { -func (s *PetService) PetInfo_One_exec(cachetime uint32, t func(*model.PetEX)) { + cool.DBM(s.Model).Where("player_id", s.userid).Where("catch_time", ctime).Data( - m := cool.DBM(s.Model).Where("player_id", s.userid).Where("catch_time", cachetime) + "free", free, + ).Update() + +} +func (s *PetService) UPdate(t model.PetInfo) { + + m := cool.DBM(s.Model).Where("player_id", s.userid).Where("catch_time", t.CatchTime) var tt model.PetEX m.Scan(&tt) if tt.CatchTime == 0 { return } - tt.Data.CatchTime = tt.CatchTime - t(&tt) + tt.Data = t _, err := m.OnConflict("catch_time").Update(tt) if err != nil { panic(err)