package controller import ( "blazing/common/data/xmlres" "blazing/common/socket/errorcode" "blazing/logic/service/item" "blazing/logic/service/player" "github.com/gogf/gf/v2/util/gconv" ) func (h Controller) BuyItem(data *item.BuyInboundInfo, c *player.Player) (result *item.BuyOutboundInfo, err errorcode.ErrorCode) { tt, ok := xmlres.ItemsMAP[int(data.ItemId)] if ok && tt.Price != 0 && c.UseCoins(data.Count*uint32(tt.Price)) { r := c.ItemAdd(data.ItemId, data.Count) if r { return &item.BuyOutboundInfo{ ItemId: data.ItemId, Level: 1, Count: data.Count, Coins: c.Info.Coins, }, 0 } //购买失败,返还豆子 c.Info.Coins += data.Count * uint32(tt.Price) } return &item.BuyOutboundInfo{ Coins: c.Info.Coins, }, 0 } func (h Controller) BuyMItem(data *item.BuyMultiInboundInfo, c *player.Player) (result *item.BuyMultiOutboundInfo, err errorcode.ErrorCode) { for _, v := range data.ItemIds { iteminfo, ok := xmlres.ItemsMAP[int(v)] if ok { if !c.UseCoins(uint32(iteminfo.Price)) { break } if c.ItemAdd(v, 1) { c.Info.Coins -= uint32(iteminfo.Price) } } } return &item.BuyMultiOutboundInfo{ Coins: c.Info.Coins, }, 0 } func (h Controller) BuyGoldItem(data *item.C2S_GOLD_BUY_PRODUCT, c *player.Player) (result *item.S2C_GoldBuyProductInfo, err errorcode.ErrorCode) { r := xmlres.GoldProductMap[int(data.ProductID)] usegold := uint32(data.Count) * uint32(gconv.Uint32(r.Price)*100) if !c.UseGold(usegold) { return nil, errorcode.ErrorCodes.ErrSystemError } isbuycot := c.ItemAdd(uint32(gconv.Uint32(r.ItemID)), uint32(data.Count)) if isbuycot { c.User.SetGold(c.Info.UserID, c.User.GetGold(uint(c.Info.UserID))-usegold) result = &item.S2C_GoldBuyProductInfo{ Gold: c.User.GetGold(uint(c.Info.UserID)), PayGold: usegold, Reserved: 0, } } result = &item.S2C_GoldBuyProductInfo{ Gold: c.User.GetGold(uint(c.Info.UserID)), PayGold: 0, Reserved: 0, } return }