```
feat(player): 重构玩家金币系统,使用BaseSysUserService管理金币 将玩家金币逻辑从PlayerInfo中移除,改为通过BaseSysUserService进行统一管理。 新增了金币的获取与设置方法,支持以分为单位的精确计算。 调整了登录时用户服务的初始化逻辑,确保User字段正确赋值。 fix(pet): 修复宠物性格道具使用逻辑错误 更新了多个性格相关道具的处理方式,包括新增的性格转换道具范围。 修正了性格随机与指定逻辑,避免越界问题并增强可维护性。 feat(fight): 战斗初始化时恢复宠物状态 在战斗初始化阶段调用宠物治愈方法,确保战斗开始前宠物处于健康状态。 feat(admin): 调整管理员会话获取接口参数类型 修改GetPerson方法传入参数为uint32类型,提高数据一致性与安全性。 refactor(model): 移除PlayerInfo中的GoldBean字段 金币字段不再存储于PlayerInfo结构体中,转而由BaseSysUser模块统一管理。 ```
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"blazing/common/rpc"
|
||||
"blazing/common/socket/errorcode"
|
||||
"blazing/logic/service/user"
|
||||
"blazing/modules/base/service"
|
||||
|
||||
"golang.org/x/sync/singleflight"
|
||||
|
||||
@@ -23,7 +24,7 @@ func fetchData() (any, error) {
|
||||
func (h *Controller) COMMEND_ONLINE(data *user.SidInfo, c gnet.Conn) (result *rpc.CommendSvrInfo, err errorcode.ErrorCode) { //这个时候player应该是空的
|
||||
result = rpc.NewInInfo()
|
||||
|
||||
if data.Head.UserID < 100000 {
|
||||
if service.NewBaseSysUserService().GetPerson(data.Head.UserID).Debug == 1 {
|
||||
result.IsVip = 1
|
||||
}
|
||||
v, _, _ := sg.Do("GetServerInfoList", fetchData)
|
||||
|
||||
@@ -10,7 +10,7 @@ func (h Controller) PlayerGoldCount(data *item.GoldOnlineRemainInboundInfo, c *p
|
||||
|
||||
return &item.GoldOnlineRemainOutboundInfo{
|
||||
|
||||
GoldNumber: uint32(c.Info.GoldBean) * 100,
|
||||
GoldNumber: c.User.GetGold(uint(c.Info.UserID)),
|
||||
Coin: c.Info.Coins,
|
||||
}, 0
|
||||
}
|
||||
|
||||
@@ -62,13 +62,14 @@ func (h Controller) BuyGoldItem(data *item.C2S_GOLD_BUY_PRODUCT, c *player.Playe
|
||||
return nil, errorcode.ErrorCodes.ErrSystemError
|
||||
}
|
||||
r1 := c.ItemAdd(model.ItemInfo{ItemId: uint32(gconv.Uint32(r.ItemID)), ItemCnt: uint32(data.Count)})
|
||||
if len(r1) == int(data.Count) {
|
||||
//失败返还
|
||||
c.Info.GoldBean += uint32(uint32(data.Count)-uint32(len(r1))) * uint32(gconv.Uint32(r.Price))
|
||||
}
|
||||
isbuycot := len(r1)
|
||||
|
||||
usegold := uint32(uint32(len(r1))) * uint32(gconv.Uint32(r.Price)*100)
|
||||
c.User.SetGold(c.Info.UserID, c.User.GetGold(uint(c.Info.UserID))-usegold)
|
||||
|
||||
result = &item.S2C_GoldBuyProductInfo{
|
||||
Gold: c.Info.GoldBean,
|
||||
PayGold: uint32(data.Count) * uint32(gconv.Uint32(r.Price)),
|
||||
Gold: c.User.GetGold(uint(c.Info.UserID)),
|
||||
PayGold: uint32(isbuycot) * uint32(gconv.Uint32(r.Price)),
|
||||
Reserved: 0,
|
||||
}
|
||||
|
||||
|
||||
@@ -50,18 +50,17 @@ func (h Controller) ItemUsePet(data *item.C2S_USE_PET_ITEM_OUT_OF_FIGHT, c *play
|
||||
|
||||
//性格随机
|
||||
case itemID == 300025:
|
||||
onpet.Nature = uint32(grand.Intn(25))
|
||||
|
||||
case itemID >= 240042 && itemID <= 240056:
|
||||
onpet.Nature = (onpet.Nature + uint32(grand.Intn(25))) % 25
|
||||
|
||||
if xmlres.ItemsMAP[int(itemID)].Nature != nil {
|
||||
onpet.Nature = gconv.Uint32(*xmlres.ItemsMAP[int(itemID)].Nature)
|
||||
}
|
||||
if xmlres.ItemsMAP[int(itemID)].NatureSet != nil {
|
||||
//性格转换
|
||||
case itemID >= 300081 && itemID <= 300086:
|
||||
onpet.Nature = gconv.Uint32(*xmlres.ItemsMAP[int(itemID)].Nature)
|
||||
|
||||
rr := strings.Split(*xmlres.ItemsMAP[int(itemID)].NatureSet, " ")
|
||||
onpet.Nature = gconv.Uint32(rr[grand.Intn(len(rr))-1])
|
||||
}
|
||||
//性格转换
|
||||
case (itemID >= 300602 && itemID <= 300605) || itemID == 300119 || itemID == 300120:
|
||||
rr := strings.Split(*xmlres.ItemsMAP[int(itemID)].NatureSet, " ")
|
||||
onpet.Nature = gconv.Uint32(rr[grand.Intn(len(rr))-1])
|
||||
default:
|
||||
// 无效ID处理
|
||||
return nil, errorcode.ErrorCodes.ErrSystemError
|
||||
|
||||
@@ -12,6 +12,7 @@ import (
|
||||
|
||||
"blazing/logic/service/player"
|
||||
"blazing/logic/service/space"
|
||||
"blazing/modules/base/service"
|
||||
blservice "blazing/modules/blazing/service"
|
||||
"context"
|
||||
"time"
|
||||
@@ -57,6 +58,7 @@ func (h *Controller) Login(data *user.MAIN_LOGIN_IN, c gnet.Conn) (result *user.
|
||||
return
|
||||
}
|
||||
t.Service = blservice.NewUserService(data.Head.UserID)
|
||||
t.User = service.NewBaseSysUserService()
|
||||
t.Info = t.Service.Info.Person(data.Head.UserID)
|
||||
if t.Info == nil {
|
||||
defer c.Close()
|
||||
|
||||
@@ -77,15 +77,17 @@ func (h *Controller) PET_ROWEI(
|
||||
c.Service.Pet.PetInfo_One_exec(data.CatchTime, func(t *model.PetEX) {
|
||||
|
||||
_, _, ok := c.FindPet(data.CatchTime)
|
||||
|
||||
r := xmlres.PetMAP[int(data.ID)].FreeForbidden
|
||||
//如果背包没找到,再放入背包
|
||||
if !ok && t.CatchTime != 0 && xmlres.PetMAP[int(data.ID)].FreeForbidden == 0 {
|
||||
if !ok && t.CatchTime != 0 && r == 0 {
|
||||
t.Free = 1
|
||||
} else {
|
||||
err = errorcode.ErrorCodes.ErrCannotReleaseNonWarehouse
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
return nil, 0
|
||||
return nil, err
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -168,6 +168,7 @@ func (f *FightC) initplayer(c common.PlayerI) (*input.Input, errorcode.ErrorCode
|
||||
}
|
||||
|
||||
v1.CatchTime = c.GetInfo().UserID + uint32(i)*1000000
|
||||
v1.Cure()
|
||||
in.AllPet = append(in.AllPet, info.CreateBattlePetEntity(v1, f.rand))
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,9 @@ import (
|
||||
"strings"
|
||||
"sync/atomic"
|
||||
|
||||
"blazing/modules/base/service"
|
||||
"blazing/modules/blazing/model"
|
||||
|
||||
blservice "blazing/modules/blazing/service"
|
||||
"context"
|
||||
"time"
|
||||
@@ -62,6 +64,7 @@ type Player struct {
|
||||
OgreInfo OgreInfo
|
||||
|
||||
Service *blservice.UserService
|
||||
User *service.BaseSysUserService
|
||||
// PVP被邀请信息
|
||||
HavePVPinfo []common.PlayerI
|
||||
monsters [3]int
|
||||
@@ -89,10 +92,10 @@ func (p *Player) UseCoins(t uint32) bool {
|
||||
}
|
||||
func (p *Player) UseGold(t uint32) bool {
|
||||
|
||||
if p.Info.GoldBean < t {
|
||||
if p.User.GetGold(uint(p.Info.UserID)) < t {
|
||||
return false
|
||||
}
|
||||
p.Info.GoldBean = p.Info.GoldBean - t
|
||||
//p.Info.GoldBean = p.Info.GoldBean - t
|
||||
return true
|
||||
|
||||
}
|
||||
@@ -294,7 +297,7 @@ func (p *Player) ItemAdd(t ...model.ItemInfo) (result []model.ItemInfo) {
|
||||
p.Info.ExpPool = p.Info.ExpPool + v.ItemCnt
|
||||
|
||||
case 5: //金豆ItemAdd
|
||||
p.Info.GoldBean = p.Info.GoldBean + v.ItemCnt
|
||||
p.User.SetGold(p.Info.UserID, uint32(p.User.GetGold(uint(p.Info.UserID))+v.ItemCnt*100))
|
||||
|
||||
default:
|
||||
ttt = append(ttt, v)
|
||||
|
||||
@@ -58,7 +58,7 @@ func (c *BaseSysUserController) GetSession(ctx context.Context, req *SessionReq)
|
||||
}
|
||||
res = &SessionRes{}
|
||||
|
||||
t1 := service.NewBaseSysUserService().GetPerson(t.UserId)
|
||||
t1 := service.NewBaseSysUserService().GetPerson(uint32(t.UserId))
|
||||
|
||||
res.Session = retsid
|
||||
|
||||
|
||||
@@ -15,9 +15,11 @@ type BaseSysUser struct {
|
||||
|
||||
HeadImg *string `gorm:"column:headImg;type:varchar(255)" json:"headImg"` // 头像
|
||||
|
||||
Email *string `gorm:"column:email;type:varchar(255)" json:"email"` // 邮箱
|
||||
Status *int32 `gorm:"column:status;not null;default:1" json:"status"` // 状态 0:禁用 1:启用
|
||||
Remark *string `gorm:"column:remark;type:varchar(255)" json:"remark"` // 备注
|
||||
Email *string `gorm:"column:email;type:varchar(255)" json:"email"` // 邮箱
|
||||
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"`
|
||||
Remark *string `gorm:"column:remark;type:varchar(255)" json:"remark"` // 备注
|
||||
Debug int32 `gorm:"column:debug;type:int;not null;default:0" json:"debug"` // 是否可以进入2服
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
|
||||
"blazing/modules/base/model"
|
||||
|
||||
"github.com/alpacahq/alpacadecimal"
|
||||
"github.com/gogf/gf/v2/container/garray"
|
||||
"github.com/gogf/gf/v2/container/gset"
|
||||
"github.com/gogf/gf/v2/crypto/gmd5"
|
||||
@@ -38,12 +39,27 @@ func (s *BaseSysUserService) GetSession(email string, password string) (res *mod
|
||||
|
||||
return
|
||||
}
|
||||
func (s *BaseSysUserService) GetPerson(userId uint) (res *model.BaseSysUser) {
|
||||
func (s *BaseSysUserService) GetPerson(userId uint32) (res *model.BaseSysUser) {
|
||||
m := cool.DBM(s.Model)
|
||||
m.Where("id", userId).FieldsEx("password").Scan(&res)
|
||||
|
||||
return
|
||||
}
|
||||
func (s *BaseSysUserService) SetGold(userId uint32, gold uint32) (res *model.BaseSysUser) {
|
||||
m := cool.DBM(s.Model)
|
||||
m.Where("id", userId).Scan(&res)
|
||||
res.GoldBean, _ = alpacadecimal.NewFromFloat(float64(gold)).Div(alpacadecimal.NewFromFloat(100)).Float64()
|
||||
m.Save(res)
|
||||
|
||||
return
|
||||
}
|
||||
func (s *BaseSysUserService) GetGold(userId uint) (res uint32) {
|
||||
var res1 model.BaseSysUser
|
||||
m := cool.DBM(s.Model)
|
||||
m.Where("id", userId).FieldsEx("password").Scan(&res1)
|
||||
|
||||
return uint32(alpacadecimal.NewFromFloat(res1.GoldBean).Mul(alpacadecimal.NewFromFloat(100)).IntPart())
|
||||
}
|
||||
func (s *BaseSysUserService) GetEamil(userId string) (res *model.BaseSysUser) {
|
||||
m := cool.DBM(s.Model)
|
||||
m.Where("email", userId).FieldsEx("password").Scan(&res)
|
||||
|
||||
@@ -67,8 +67,6 @@ func NewPlayerInfo() PlayerInfo {
|
||||
}
|
||||
|
||||
type PlayerInfo struct {
|
||||
GoldBean uint32 `struc:"skip" json:"gold_bean"` // 金豆(特殊货币)
|
||||
|
||||
ExpPool uint32 `struc:"skip" json:"exp_pool"` // 累计经验池
|
||||
LastResetTime time.Time `struc:"skip" json:"last_reset_time"` // 重置时间,比如电池和每日任务
|
||||
OnlineTime uint32 `struc:"skip" json:"online_time"` //在线分钟数
|
||||
|
||||
Reference in New Issue
Block a user