```
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful

feat(item_buy): 优化购买逻辑并添加库存限制功能

- 将变量名 is 改为 ok,提高代码可读性
- 移除未使用的变量 addSuccess
- 重构购买成功逻辑,确保物品添加成功后才扣减金币
- 在 talk.go 中修改判断条件,使用 Limit 字段而非 Type 字段
- 在 user_talk.go 中添加 Limit 字段用于限制数量配置
```
This commit is contained in:
昔念
2026-03-28 01:46:52 +08:00
parent ce0474258a
commit 06091ff42c
3 changed files with 25 additions and 21 deletions

View File

@@ -99,8 +99,8 @@ func (h Controller) BuyGoldItem(data *item.C2S_GOLD_BUY_PRODUCT, player *player.
}
config := service.NewTalkConfigService().GetCache(int(data.ProductID))
if config != nil {
_, is := player.Service.Talk.Cheak(0, int(data.ProductID))
if !is {
_, ok := player.Service.Talk.Cheak(0, int(data.ProductID))
if !ok {
return nil, errorcode.ErrorCodes.ErrExceedStock
}
}
@@ -115,7 +115,7 @@ func (h Controller) BuyGoldItem(data *item.C2S_GOLD_BUY_PRODUCT, player *player.
// }
var usegold uint64
var addSuccess bool
switch data.Type {
case 0:
if pro.SeerdouPrice == 0 {
@@ -139,28 +139,30 @@ func (h Controller) BuyGoldItem(data *item.C2S_GOLD_BUY_PRODUCT, player *player.
}
addSuccess = player.ItemAdd(pro.ProductID, data.Count)
if addSuccess {
switch data.Type {
case 0:
switch data.Type {
case 0:
if player.ItemAdd(pro.ProductID, data.Count) {
player.Info.Coins -= int64(usegold)
case 1:
r := player.Service.Talk.Update(int(pro.ProductID), int(data.Count))
if !r {
return nil, errorcode.ErrorCodes.ErrGoldBeanSingleLimit
}
player.User.UpdateGold(player.Info.UserID, -int64(usegold))
//购买成功,执行记录
}
player.SendPackCmd(1105, item.GoldOnlineRemainOutboundInfo{
Coin: player.Info.Coins,
GoldNumber: uint32(player.User.GetGold(uint(player.Info.UserID))),
})
case 1:
r := player.Service.Talk.Update(int(pro.ProductID), int(data.Count))
if !r {
return nil, errorcode.ErrorCodes.ErrGoldBeanSingleLimit
}
if player.ItemAdd(pro.ProductID, data.Count) {
player.User.UpdateGold(player.Info.UserID, -int64(usegold))
}
//购买成功,执行记录
}
player.SendPackCmd(1105, item.GoldOnlineRemainOutboundInfo{
Coin: player.Info.Coins,
GoldNumber: uint32(player.User.GetGold(uint(player.Info.UserID))),
})
return nil, -1
}