feat(config): 更新服务器配置字段注释并修复VIP标识逻辑 - 修改config.go中IsVip字段注释,明确其表示测试服状态 - 添加isdebug字段注释说明本地服标识 - 从.gitignore添加login-login-linux-amd64到忽略列表 - 移除已废弃的coolconfig.SetTest函数 fix(item_buy): 注释掉金币购买功能代码 - 将BuyGoldItem方法注释掉,暂时禁用金币购买商品功能 - 移除未使用的gconv导入包 fix(server): 修正调试模式判断条件 - 将server.go中的IsVip判断改为IsDebug,确保调试模式正确启用 refactor(item_service): 优化模型调用并添加VIP标识 - 修复ItemService.UPDATE方法中模型调用的一致性问题 - 添加is_vip字段到数据记录中用于区分服务器类型 feat(pet_service): 为宠物数据添加VIP标识 - 在宠物服务中为新捕捉的宠物添加IsVip字段设置 ```
124 lines
3.5 KiB
Go
124 lines
3.5 KiB
Go
package controller
|
|
|
|
import (
|
|
"blazing/common/data/xmlres"
|
|
"blazing/common/socket/errorcode"
|
|
|
|
"blazing/logic/service/item"
|
|
"blazing/logic/service/player"
|
|
)
|
|
|
|
// 防止封包通过领取来获取道具
|
|
|
|
// BuyItem 购买单个道具
|
|
// data: 包含购买道具信息的输入数据
|
|
// player: 当前玩家对象
|
|
// 返回: 购买结果和错误码
|
|
func (h Controller) BuyItem(data *item.BuyInboundInfo, player *player.Player) (result *item.BuyOutboundInfo, err errorcode.ErrorCode) {
|
|
itemInfo, exists := xmlres.ItemsMAP[int(data.ItemId)]
|
|
if !exists {
|
|
return &item.BuyOutboundInfo{Coins: player.Info.Coins}, 0
|
|
}
|
|
|
|
// 免费道具直接添加
|
|
if itemInfo.Price == 0 {
|
|
if player.ItemAdd(data.ItemId, data.Count) {
|
|
return &item.BuyOutboundInfo{
|
|
ItemId: data.ItemId,
|
|
Level: 1,
|
|
Count: data.Count,
|
|
Coins: player.Info.Coins,
|
|
}, 0
|
|
}
|
|
return &item.BuyOutboundInfo{Coins: player.Info.Coins}, 0
|
|
}
|
|
|
|
// 需要付费的道具
|
|
totalCost := data.Count * uint32(itemInfo.Price)
|
|
if !player.GetCoins(totalCost) {
|
|
return &item.BuyOutboundInfo{Coins: player.Info.Coins}, errorcode.ErrorCodes.ErrSunDouInsufficient10016
|
|
}
|
|
|
|
if player.ItemAdd(data.ItemId, data.Count) {
|
|
player.Info.Coins -= totalCost
|
|
return &item.BuyOutboundInfo{
|
|
ItemId: data.ItemId,
|
|
Level: 1,
|
|
Count: data.Count,
|
|
Coins: player.Info.Coins,
|
|
}, 0
|
|
}
|
|
|
|
// 购买失败,返还赛尔豆
|
|
player.Info.Coins += totalCost
|
|
return &item.BuyOutboundInfo{Coins: player.Info.Coins}, 0
|
|
}
|
|
|
|
// BuyMultipleItems 批量购买道具
|
|
// data: 包含批量购买道具信息的输入数据
|
|
// player: 当前玩家对象
|
|
// 返回: 批量购买结果和错误码
|
|
func (h Controller) BuyMultipleItems(data *item.BuyMultiInboundInfo, player *player.Player) (result *item.BuyMultiOutboundInfo, err errorcode.ErrorCode) {
|
|
for _, itemID := range data.ItemIds {
|
|
itemInfo, exists := xmlres.ItemsMAP[int(itemID)]
|
|
if !exists {
|
|
continue
|
|
}
|
|
|
|
// 免费道具直接添加
|
|
if itemInfo.Price == 0 {
|
|
player.ItemAdd(itemID, 1)
|
|
continue
|
|
}
|
|
|
|
// 需要付费的道具
|
|
if !player.GetCoins(uint32(itemInfo.Price)) {
|
|
break
|
|
}
|
|
|
|
if player.ItemAdd(itemID, 1) {
|
|
player.Info.Coins -= uint32(itemInfo.Price)
|
|
}
|
|
}
|
|
|
|
return &item.BuyMultiOutboundInfo{
|
|
Coins: player.Info.Coins,
|
|
}, 0
|
|
}
|
|
|
|
// BuyGoldItem 使用金豆购买商品
|
|
// data: 包含金豆购买商品信息的输入数据
|
|
// player: 当前玩家对象
|
|
// 返回: 金豆购买结果和错误码
|
|
// func (h Controller) BuyGoldItem(data *item.C2S_GOLD_BUY_PRODUCT, player *player.Player) (result *item.S2C_GoldBuyProductInfo, err errorcode.ErrorCode) {
|
|
// product, exists := xmlres.GoldProductMap[int(data.ProductID)]
|
|
// if !exists {
|
|
// return nil, errorcode.ErrorCodes.ErrSystemError
|
|
// }
|
|
|
|
// useGold := uint32(data.Count) * uint32(gconv.Float64(product.Price)*100)
|
|
// if !player.UseGold(useGold) {
|
|
// return &item.S2C_GoldBuyProductInfo{
|
|
// Gold: player.User.GetGold(uint(player.Info.UserID)),
|
|
// PayGold: 0,
|
|
// Reserved: 0,
|
|
// }, errorcode.ErrorCodes.ErrXinDouInsufficient
|
|
// }
|
|
|
|
// addSuccess := player.ItemAdd(uint32(gconv.Uint32(product.ItemID)), uint32(data.Count))
|
|
// if addSuccess {
|
|
// player.User.UpdateGold(player.Info.UserID, -int64(useGold))
|
|
// return &item.S2C_GoldBuyProductInfo{
|
|
// Gold: player.User.GetGold(uint(player.Info.UserID)),
|
|
// PayGold: useGold,
|
|
// Reserved: 0,
|
|
// }, 0
|
|
// }
|
|
|
|
// return &item.S2C_GoldBuyProductInfo{
|
|
// Gold: player.User.GetGold(uint(player.Info.UserID)),
|
|
// PayGold: 0,
|
|
// Reserved: 0,
|
|
// }, errorcode.ErrorCodes.ErrSystemError
|
|
// }
|