```
feat(pet): 优化宠物仓库和背包功能的数据库操作 - 使用copier.CopyWithOption替代直接赋值,确保深拷贝操作 - 移除冗余的model导入,简化代码结构 - 重构PetReleaseToWarehouse和PetRetrieveFromWarehouse方法, 直接调用UPdateFree方法更新宠物状态 - 优化TogglePetBagWarehouse方法中的宠物数据更新逻辑 - 添加
This commit is contained in:
@@ -53,8 +53,10 @@ func (h Controller) UsePetItemOutOfFight(data *item.C2S_USE_PET_ITEM_OUT_OF_FIGH
|
|||||||
oldPetCatchTime := currentPet.CatchTime
|
oldPetCatchTime := currentPet.CatchTime
|
||||||
oldPet := c.Service.Pet.PetInfo_One_Unscoped(currentPet.OldCatchTime)
|
oldPet := c.Service.Pet.PetInfo_One_Unscoped(currentPet.OldCatchTime)
|
||||||
println(c.Info.UserID, "还原", len(c.Info.PetList), currentPet.ID, oldPet.Data.ID)
|
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
|
currentPet.CatchTime = oldPetCatchTime
|
||||||
|
println(c.Info.UserID, "还原后", len(c.Info.PetList), currentPet.ID, oldPet.Data.ID)
|
||||||
} else {
|
} else {
|
||||||
handler := item.PetItemRegistry.GetHandler(data.ItemID)
|
handler := item.PetItemRegistry.GetHandler(data.ItemID)
|
||||||
if handler == nil {
|
if handler == nil {
|
||||||
|
|||||||
@@ -7,8 +7,6 @@ import (
|
|||||||
"blazing/logic/service/pet"
|
"blazing/logic/service/pet"
|
||||||
"blazing/logic/service/player"
|
"blazing/logic/service/player"
|
||||||
|
|
||||||
"blazing/modules/blazing/model"
|
|
||||||
|
|
||||||
"github.com/jinzhu/copier"
|
"github.com/jinzhu/copier"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -76,17 +74,14 @@ func (h Controller) GetPetReleaseList(
|
|||||||
// 返回: 无数据和错误码
|
// 返回: 无数据和错误码
|
||||||
func (h Controller) PetReleaseToWarehouse(
|
func (h Controller) PetReleaseToWarehouse(
|
||||||
data *pet.PET_ROWEI, player *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) {
|
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)
|
||||||
_, _, inBag := player.FindPet(data.CatchTime)
|
freeForbidden := xmlres.PetMAP[int(data.ID)].FreeForbidden
|
||||||
freeForbidden := xmlres.PetMAP[int(data.ID)].FreeForbidden
|
// 如果背包没找到,再放入背包
|
||||||
// 如果背包没找到,再放入背包
|
if inBag || freeForbidden == 1 {
|
||||||
if !inBag && petInfo.CatchTime != 0 && freeForbidden == 0 {
|
return nil, errorcode.ErrorCodes.ErrCannotReleaseNonWarehouse
|
||||||
petInfo.Free = 1
|
}
|
||||||
} else {
|
|
||||||
err = errorcode.ErrorCodes.ErrCannotReleaseNonWarehouse
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
|
player.Service.Pet.UPdateFree(data.CatchTime, 1)
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -95,14 +90,10 @@ func (h Controller) PetReleaseToWarehouse(
|
|||||||
func (h Controller) PetRetrieveFromWarehouse(
|
func (h Controller) PetRetrieveFromWarehouse(
|
||||||
data *pet.PET_RETRIEVE, player *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { //这个时候player应该是空的
|
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 {
|
||||||
//如果背包没找到,再放入背包
|
player.Service.Pet.UPdateFree(data.CatchTime, 0)
|
||||||
if _, _, ok := player.FindPet(data.CatchTime); !ok && petInfo.CatchTime != 0 {
|
}
|
||||||
petInfo.Free = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
return nil, 0
|
return nil, 0
|
||||||
|
|
||||||
@@ -128,11 +119,7 @@ func (h Controller) TogglePetBagWarehouse(
|
|||||||
|
|
||||||
index, pet, ok := player.FindPet(data.CatchTime)
|
index, pet, ok := player.FindPet(data.CatchTime)
|
||||||
if ok {
|
if ok {
|
||||||
player.Service.Pet.PetInfo_One_exec(data.CatchTime, func(petData *model.PetEX) {
|
player.Service.Pet.UPdate(*pet)
|
||||||
petData.Data = *pet
|
|
||||||
//t.InBag = 0
|
|
||||||
|
|
||||||
})
|
|
||||||
player.Info.PetList = append(player.Info.PetList[:index], player.Info.PetList[index+1:]...)
|
player.Info.PetList = append(player.Info.PetList[:index], player.Info.PetList[index+1:]...)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,18 +127,15 @@ func (h Controller) TogglePetBagWarehouse(
|
|||||||
case 1:
|
case 1:
|
||||||
if len(player.Info.PetList) < 6 {
|
if len(player.Info.PetList) < 6 {
|
||||||
//todo 背包
|
//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{
|
return &pet.PetBargeListOutboundInfo{
|
||||||
PetBargeList: make([]pet.PetBargeListInfo, 0),
|
PetBargeList: make([]pet.PetBargeListInfo, 0),
|
||||||
}, 0
|
}, 0
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,11 +71,7 @@ func (f *Player) PetDel(catchTime uint32) {
|
|||||||
f.Info.PetList = append(f.Info.PetList[:index], f.Info.PetList[index+1:]...)
|
f.Info.PetList = append(f.Info.PetList[:index], f.Info.PetList[index+1:]...)
|
||||||
|
|
||||||
//先将背包更新
|
//先将背包更新
|
||||||
f.Service.Pet.PetInfo_One_exec(catchTime, func(petData *model.PetEX) {
|
f.Service.Pet.UPdate(*olpet)
|
||||||
petData.Data = *olpet
|
|
||||||
//t.InBag = 0
|
|
||||||
|
|
||||||
})
|
|
||||||
f.Service.Pet.Pet_del(catchTime)
|
f.Service.Pet.Pet_del(catchTime)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,17 +37,23 @@ func (s *PetService) PetCount(flag int) int {
|
|||||||
return ret
|
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
|
var tt model.PetEX
|
||||||
m.Scan(&tt)
|
m.Scan(&tt)
|
||||||
if tt.CatchTime == 0 {
|
if tt.CatchTime == 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
tt.Data.CatchTime = tt.CatchTime
|
tt.Data = t
|
||||||
t(&tt)
|
|
||||||
_, err := m.OnConflict("catch_time").Update(tt)
|
_, err := m.OnConflict("catch_time").Update(tt)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
|||||||
Reference in New Issue
Block a user