- 在 `Item` 结构体中新增 `NatureProbs` 字段,用于支持性格概率配置 - 重构 `ItemUsePet` 控制器方法,引入处理器注册机制统一管理道具效果 - 修复神经元相关道具的特殊处理逻辑,增强代码可维护性 - 调整 `S2C_USE_PET_ITEM_OUT_OF_FIGHT` 响应结构体,增加技能列表长度字段 - 修改 `ResetNature` 方法命名及判断条件,提升语义清晰度与健壮性 - 新增 `PetInfo_One_Unscoped` 查询方法以支持软删除数据访问 - 实
83 lines
2.2 KiB
Go
83 lines
2.2 KiB
Go
package controller
|
|
|
|
import (
|
|
"blazing/common/socket/errorcode"
|
|
"blazing/logic/service/fight"
|
|
"blazing/logic/service/item"
|
|
"blazing/logic/service/player"
|
|
"blazing/modules/blazing/model"
|
|
|
|
"github.com/jinzhu/copier"
|
|
)
|
|
|
|
func (h Controller) UserItemList(data *item.ItemListInboundInfo, c *player.Player) (result *item.ItemListOutboundInfo, err errorcode.ErrorCode) {
|
|
result = &item.ItemListOutboundInfo{}
|
|
result.ItemList = make([]model.SingleItemInfo, 0)
|
|
|
|
item := c.Service.Item.Get(data.Param1, data.Param2)
|
|
for _, v := range item {
|
|
var vv model.SingleItemInfo
|
|
vv.ItemId = v.ItemId
|
|
vv.ItemCnt = v.ItemCnt
|
|
vv.LeftTime = 360000
|
|
result.ItemList = append(result.ItemList, vv)
|
|
}
|
|
|
|
return result, 0
|
|
}
|
|
func (h Controller) ItemUsePet(data *item.C2S_USE_PET_ITEM_OUT_OF_FIGHT, c *player.Player) (result *item.S2C_USE_PET_ITEM_OUT_OF_FIGHT, err errorcode.ErrorCode) {
|
|
|
|
_, onpet, ok := c.FindPet(data.CatchTime)
|
|
if !ok {
|
|
return nil, errorcode.ErrorCodes.Err10401
|
|
}
|
|
|
|
if c.Service.Item.CheakItem(data.ItemID) == 0 {
|
|
return nil, errorcode.ErrorCodes.ErrSystemError
|
|
}
|
|
hd := item.PetItemRegistry.GetHandler(data.ItemID)
|
|
if hd == nil {
|
|
return nil, errorcode.ErrorCodes.ErrSystemError
|
|
}
|
|
if data.ItemID == 300025 {
|
|
//神经元需要特殊处理
|
|
|
|
if onpet.OldCatchTime == 0 {
|
|
return nil, errorcode.ErrorCodes.ErrSystemError
|
|
}
|
|
oldpetc := onpet.CatchTime
|
|
oldpet := c.Service.Pet.PetInfo_One_Unscoped(onpet.OldCatchTime)
|
|
|
|
copier.Copy(onpet, oldpet.Data)
|
|
onpet.CatchTime = oldpetc
|
|
} else {
|
|
r := hd(data.ItemID, onpet)
|
|
if !r {
|
|
return nil, errorcode.ErrorCodes.ErrSystemError
|
|
}
|
|
|
|
}
|
|
|
|
c.Service.Item.SubItem(data.ItemID, 1)
|
|
result = &item.S2C_USE_PET_ITEM_OUT_OF_FIGHT{}
|
|
onpet.CalculatePetPane()
|
|
copier.Copy(&result, onpet)
|
|
|
|
return result, 0
|
|
}
|
|
|
|
func (h Controller) ResetNature(data *item.C2S_PET_RESET_NATURE, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) {
|
|
if c.Service.Item.CheakItem(data.ItemId) <= 0 {
|
|
return nil, errorcode.ErrorCodes.ErrSystemError
|
|
}
|
|
_, onpet, ok := c.FindPet(data.CatchTime)
|
|
if !ok {
|
|
return nil, errorcode.ErrorCodes.Err10401
|
|
}
|
|
|
|
onpet.Nature = data.Nature
|
|
onpet.CalculatePetPane()
|
|
c.Service.Item.SubItem(data.ItemId, 1)
|
|
return result, 0
|
|
}
|