```
feat(item): 实现批量购买物品功能并优化物品添加逻辑 新增 BuyMItem 方法支持批量购买多个物品,并在 Controller 中完善错误处理流程。 修改 ItemAdd 方法以返回添加结果,增强对物品数量限制和异常情况的控制。 调整任务完成时的物品发放逻辑,确保只有成功添加的物品才会被返回给客户端。 修复新手任务中初级体力药剂的数量从 3 改为 5。 将 defer 调用提前执行以避免潜在的数据不一致问题。 ```
This commit is contained in:
@@ -50,13 +50,16 @@ func (h Controller) BuyItem(data *item.BuyInboundInfo, c *player.Player) (result
|
||||
if (data.Count * uint32(tt.Price)) <= c.Info.Coins {
|
||||
c.Info.Coins -= data.Count * uint32(tt.Price)
|
||||
|
||||
c.ItemAdd(model.SingleItemInfo{ItemId: data.ItemId, ItemCnt: data.Count})
|
||||
return &item.BuyOutboundInfo{
|
||||
ItemId: data.ItemId,
|
||||
Level: 1,
|
||||
Count: data.Count,
|
||||
Coins: c.Info.Coins,
|
||||
}, 0
|
||||
r := c.ItemAdd(model.SingleItemInfo{ItemId: data.ItemId, ItemCnt: data.Count})
|
||||
if len(r) != 0 {
|
||||
return &item.BuyOutboundInfo{
|
||||
ItemId: data.ItemId,
|
||||
Level: 1,
|
||||
Count: data.Count,
|
||||
Coins: c.Info.Coins,
|
||||
}, 0
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -77,7 +80,7 @@ func (h Controller) ChangePlayerCloth(data *item.ChangePlayerClothInboundInfo, c
|
||||
result.ClothList = append(result.ClothList, model.PeopleItemInfo{ID: v, Level: 1})
|
||||
}
|
||||
c.Info.Clothes = result.ClothList
|
||||
defer space.GetSpace(c.Info.MapID).User.IterCb(func(playerID uint32, player common.PlayerI) {
|
||||
space.GetSpace(c.Info.MapID).User.IterCb(func(playerID uint32, player common.PlayerI) {
|
||||
// fmt.Println("ChangePlayerCloth", playerID, data.Head.Pack(result))
|
||||
data.Head.Result = 0
|
||||
player.SendPack(data.Head.Pack(result))
|
||||
@@ -140,3 +143,25 @@ func (h Controller) TalkCate(data *item.TalkCateInboundInfo, c *player.Player) (
|
||||
|
||||
return result, 0
|
||||
}
|
||||
func (h Controller) BuyMItem(data *item.BuyMultiInboundInfo, c *player.Player) (result *item.BuyMultiOutboundInfo, err errorcode.ErrorCode) {
|
||||
var rrr []model.SingleItemInfo
|
||||
for _, v := range data.ItemIds {
|
||||
_, ok := xmlres.ItemsMAP[int(v)]
|
||||
|
||||
if ok {
|
||||
rrr = append(rrr, model.SingleItemInfo{ItemId: uint32(v), ItemCnt: 1})
|
||||
|
||||
}
|
||||
}
|
||||
r := c.ItemAdd(rrr...)
|
||||
if len(r) != 0 {
|
||||
return &item.BuyMultiOutboundInfo{
|
||||
|
||||
Coins: c.Info.Coins,
|
||||
}, 0
|
||||
}
|
||||
return &item.BuyMultiOutboundInfo{
|
||||
|
||||
Coins: c.Info.Coins,
|
||||
}, 0
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user