refactor(item): 统一物品操作接口并优化金币处理逻辑

This commit is contained in:
1
2025-12-16 06:54:27 +00:00
parent 39dc79f706
commit 49b4c8cf2a
10 changed files with 47 additions and 28 deletions

View File

@@ -64,7 +64,7 @@ func (h Controller) BuyGoldItem(data *item.C2S_GOLD_BUY_PRODUCT, c *player.Playe
isbuycot := c.ItemAdd(uint32(gconv.Uint32(r.ItemID)), uint32(data.Count)) isbuycot := c.ItemAdd(uint32(gconv.Uint32(r.ItemID)), uint32(data.Count))
if isbuycot { if isbuycot {
c.User.SetGold(c.Info.UserID, c.User.GetGold(uint(c.Info.UserID))-usegold) c.User.UpdateGold(c.Info.UserID, -gconv.Float64(usegold))
result = &item.S2C_GoldBuyProductInfo{ result = &item.S2C_GoldBuyProductInfo{
Gold: c.User.GetGold(uint(c.Info.UserID)), Gold: c.User.GetGold(uint(c.Info.UserID)),
PayGold: usegold, PayGold: usegold,

View File

@@ -6,6 +6,8 @@ import (
"blazing/logic/service/fight" "blazing/logic/service/fight"
"blazing/logic/service/item" "blazing/logic/service/item"
"blazing/logic/service/player" "blazing/logic/service/player"
"github.com/gogf/gf/v2/util/gconv"
) )
func (h Controller) ITEM_SALE(data *item.C2S_ITEM_SALE, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { func (h Controller) ITEM_SALE(data *item.C2S_ITEM_SALE, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) {
@@ -17,6 +19,6 @@ func (h Controller) ITEM_SALE(data *item.C2S_ITEM_SALE, c *player.Player) (resul
c.Info.Coins += uint32(int64(data.Amount) * int64(xmlres.ItemsMAP[int(data.ItemId)].SellPrice)) c.Info.Coins += uint32(int64(data.Amount) * int64(xmlres.ItemsMAP[int(data.ItemId)].SellPrice))
} }
c.Service.Item.SubItem(data.ItemId, data.Amount) c.Service.Item.UPDATE(data.ItemId, -gconv.Int(data.Amount))
return result, 0 return result, 0
} }

View File

@@ -63,7 +63,7 @@ func (h Controller) ItemUsePet(data *item.C2S_USE_PET_ITEM_OUT_OF_FIGHT, c *play
} }
c.Service.Item.SubItem(data.ItemID, 1) c.Service.Item.UPDATE(data.ItemID, -1)
result = &item.S2C_USE_PET_ITEM_OUT_OF_FIGHT{} result = &item.S2C_USE_PET_ITEM_OUT_OF_FIGHT{}
onpet.CalculatePetPane(false) onpet.CalculatePetPane(false)
copier.Copy(&result, onpet) copier.Copy(&result, onpet)
@@ -82,6 +82,6 @@ func (h Controller) ResetNature(data *item.C2S_PET_RESET_NATURE, c *player.Playe
onpet.Nature = data.Nature onpet.Nature = data.Nature
onpet.CalculatePetPane(false) onpet.CalculatePetPane(false)
c.Service.Item.SubItem(data.ItemId, 1) c.Service.Item.UPDATE(data.ItemId, -1)
return result, 0 return result, 0
} }

View File

@@ -163,17 +163,22 @@ func (f *FightC) initplayer(c common.PlayerI) (*input.Input, errorcode.ErrorCode
} }
in.SortPet() in.SortPet()
if len(in.AllPet) == 0 {
return nil, errorcode.ErrorCodes.ErrNoEligiblePokemon
}
switch f.Info.Mode { switch f.Info.Mode {
case info.BattleMode.SINGLE_MODE: case info.BattleMode.SINGLE_MODE:
in.AllPet = in.AllPet[:1] in.AllPet = in.AllPet[:1]
case info.BattleMode.PET_MELEE: case info.BattleMode.PET_MELEE:
in.AllPet = make([]*info.BattlePetEntity, 0) in.AllPet = make([]*info.BattlePetEntity, 0)
if len(meetpet) == 0 { // if len(meetpet) == 0 {
initmeetpet() // initmeetpet()
} // }
r := service.NewMELEEService().Def() r := service.NewMELEEService().Def()
if len(r) == 0 {
return nil, errorcode.ErrorCodes.ErrNoEligiblePokemon
}
for i, v := range r { for i, v := range r {
if v.Lv == 0 { if v.Lv == 0 {

View File

@@ -173,12 +173,12 @@ func (f *FightC) collectPlayerActions(ourID, oppID uint32) map[uint32]action.Bat
if selfinput.CanChange == 2 { if selfinput.CanChange == 2 {
selfinput.CanChange = 0 selfinput.CanChange = 0
if f.Info.Status == info.BattleMode.FIGHT_WITH_NPC && pid == 0 { // if f.Info.Status == info.BattleMode.FIGHT_WITH_NPC && pid == 0 {
f.Switch = make(map[uint32]*action.ActiveSwitchAction) // f.Switch = make(map[uint32]*action.ActiveSwitchAction)
f.Our.Player.SendPackCmd(2407, &ret.Reason) // f.Our.Player.SendPackCmd(2407, &ret.Reason)
f.Opp.GetAction() // f.Opp.GetAction()
println("开始执行NPC死切动作") // println("开始执行NPC死切动作")
} // }
continue continue
} }
} }
@@ -295,7 +295,7 @@ func (f *FightC) handleItemAction(a *action.UseItemAction) {
if r < 1 { if r < 1 {
return return
} }
f.GetInputByAction(a, false).Player.(*player.Player).Service.Item.SubItem(a.ItemID, 1) f.GetInputByAction(a, false).Player.(*player.Player).Service.Item.UPDATE(a.ItemID, -1)
switch { switch {
case gconv.Int(item.Bonus) != 0: case gconv.Int(item.Bonus) != 0:

View File

@@ -50,7 +50,14 @@ func getUnderlyingValue(val reflect.Value) (reflect.Value, error) {
// 遍历结构体方法并执行RECV_cmd // 遍历结构体方法并执行RECV_cmd
func (h *ClientData) Recv(data common.TomeeHeader) { func (h *ClientData) Recv(data common.TomeeHeader) {
defer func() {
if err := recover(); err != nil { // 恢复 panicerr 为 panic 错误值
// 1. 打印错误信息
cool.Loger.Error(context.TODO(), "panic 错误:", err)
}
}()
cmdlister, ok := cool.CmdCache.Load(data.CMD) cmdlister, ok := cool.CmdCache.Load(data.CMD)
if !ok { if !ok {

View File

@@ -19,6 +19,7 @@ import (
"github.com/antlabs/timer" "github.com/antlabs/timer"
"github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/util/gconv"
"github.com/panjf2000/gnet/v2" "github.com/panjf2000/gnet/v2"
) )
@@ -212,7 +213,7 @@ func (p *Player) ItemAdd(ItemId, ItemCnt uint32) (result bool) {
return true return true
case 5: //金豆ItemAdd case 5: //金豆ItemAdd
p.User.SetGold(p.Info.UserID, uint32(p.User.GetGold(uint(p.Info.UserID))+ItemCnt*100)) p.User.UpdateGold(p.Info.UserID, gconv.Float64(ItemCnt))
return true return true
default: default:
@@ -240,7 +241,7 @@ func (p *Player) ItemAdd(ItemId, ItemCnt uint32) (result bool) {
p.SendPack(t1.Pack(nil)) //准备包由各自发,因为协议不一样 p.SendPack(t1.Pack(nil)) //准备包由各自发,因为协议不一样
return false return false
} }
p.Service.Item.AddItem(ItemId, ItemCnt) p.Service.Item.UPDATE(ItemId, gconv.Int(ItemCnt))
return true return true
} }

View File

@@ -17,7 +17,7 @@ type BaseSysUser struct {
Email *string `gorm:"column:email;type:varchar(255)" json:"email"` // 邮箱 Email *string `gorm:"column:email;type:varchar(255)" json:"email"` // 邮箱
Status *int32 `gorm:"column:status;not null;default:1" json:"status"` // 状态 0:禁用 1启用 Status *int32 `gorm:"column:status;not null;default:1" json:"status"` // 状态 0:禁用 1启用
GoldBean float64 `gorm:"column:goldBean;type:decimal;not null;default:0" json:"goldBean"` GoldBean float64 `gorm:"column:goldbean;type:money;not null;default:0" json:"goldbean"`
Remark *string `gorm:"column:remark;type:varchar(255)" json:"remark"` // 备注 Remark *string `gorm:"column:remark;type:varchar(255)" json:"remark"` // 备注
Debug int32 `gorm:"column:debug;type:int;not null;default:0" json:"debug"` // 是否可以进入2服 测试服 Debug int32 `gorm:"column:debug;type:int;not null;default:0" json:"debug"` // 是否可以进入2服 测试服
Maxts uint32 `gorm:"column:max_ts;type:int;not null;default:0" json:"max_ts"` //最后生成的时间记录表 Maxts uint32 `gorm:"column:max_ts;type:int;not null;default:0" json:"max_ts"` //最后生成的时间记录表

View File

@@ -45,11 +45,19 @@ func (s *BaseSysUserService) GetPerson(userId uint32) (res *model.BaseSysUser) {
return return
} }
func (s *BaseSysUserService) SetGold(userId uint32, gold uint32) (res *model.BaseSysUser) { func (s *BaseSysUserService) UpdateGold(userId uint32, gold float64) {
m := cool.DBM(s.Model) // updateData := g.Map{
m.Where("id", userId).Scan(&res) // "views": &gdb.Counter{
res.GoldBean, _ = alpacadecimal.NewFromFloat(float64(gold)).Div(alpacadecimal.NewFromFloat(100)).Float64() // Field: "goldbean",
m.Save(res) // Value: 1,
// },
// }
m := cool.DBM(s.Model).Where("id", userId)
m.Increment("goldbean", gold)
// // UPDATE `article` SET `views`=`views`+1 WHERE `id`=1
// result, err := db.Update("article", updateData, "id", 1)
//res.GoldBean, _ = alpacadecimal.NewFromFloat(float64(gold)).Div(alpacadecimal.NewFromFloat(100)).Float64()
return return
} }

View File

@@ -20,7 +20,7 @@ func (s *ItemService) Get(min, max uint32) []model.Item {
return ttt return ttt
} }
func (s *ItemService) AddItem(id, count uint32) { func (s *ItemService) UPDATE(id uint32, count int) {
if t, _ := s.GModel(s.Model).Where("item_id", id).Count(); t != 0 { if t, _ := s.GModel(s.Model).Where("item_id", id).Count(); t != 0 {
_, err := s.GModel(s.Model).Where("item_id", id).Increment("item_cnt", count) _, err := s.GModel(s.Model).Where("item_id", id).Increment("item_cnt", count)
if err != nil { if err != nil {
@@ -35,11 +35,7 @@ func (s *ItemService) AddItem(id, count uint32) {
} }
} }
func (s *ItemService) SubItem(id, count uint32) {
s.GModel(s.Model).Where("item_id", id).Decrement("item_cnt", count)
}
func (s *ItemService) CheakItem(id uint32) uint32 { func (s *ItemService) CheakItem(id uint32) uint32 {
var ttt model.Item var ttt model.Item
s.GModel(s.Model).Where("item_id", id).Scan(&ttt) s.GModel(s.Model).Where("item_id", id).Scan(&ttt)