game_sync/model/baginfo.go

100 lines
2.3 KiB
Go

package model
import (
"fmt"
"time"
"github.com/globalsign/mgo/bson"
"mongo.games.com/goserver/core/logger"
)
type Item struct {
ItemId int32 // 物品ID
ItemNum int64 // 物品数量
ObtainTime int64 //获取的时间
}
type BagInfo struct {
BagId bson.ObjectId `bson:"_id"`
SnId int32 //玩家账号直接在这里生成
Platform string //平台
BagItem map[int32]*Item //背包数据 key为itemId
Ts int64 // 最后数据更新纳秒时间戳
// 临时参数,不保存数据库
GainWay int32 `bson:"-"`
}
type GetBagInfoArgs struct {
Plt string
SnId int32
}
func GetBagInfo(snid int32, plt string) (*BagInfo, error) {
if rpcCli == nil {
return nil, ErrRPClientNoConn
}
ret := &BagInfo{}
args := &GetBagInfoArgs{
SnId: snid,
Plt: plt,
}
err := rpcCli.CallWithTimeout("BagSvc.GetBagItem", args, ret, time.Second*30)
if err != nil {
logger.Logger.Error("GetBagInfo err:%v SnId:%v ", err, args.SnId)
return nil, err
}
return ret, nil
}
func UpBagItem(args *BagInfo) error {
if rpcCli == nil {
return ErrRPClientNoConn
}
ret := false
err := rpcCli.CallWithTimeout("BagSvc.UpgradeBag", args, &ret, time.Second*30)
if err != nil {
return fmt.Errorf("UpgradeBag err:%v SnId:%v BagId:%v Ts:%v", err, args.SnId, args.BagId, args.Ts)
}
return nil
}
func SaveDBBagItem(args *BagInfo) error {
if rpcCli == nil {
return ErrRPClientNoConn
}
ret := false
err := rpcCli.CallWithTimeout("BagSvc.AddBagItem", args, &ret, time.Second*30)
if err != nil {
return err
}
return nil
}
type AddItemParam struct {
Platform string
SnId int32
Change []*Item // 道具变化数量
Cost []*Item // 获得道具时消耗的道具数量
Add int64 // 加成数量
GainWay int32 // 记录类型
Operator, Remark string // 操作人,备注
GameId, GameFreeId int64 // 游戏id,场次id
LogId string // 撤销的id,道具兑换失败
RoomConfigId int32 // 房间配置id
IsGame bool // 是否为gamesrv的操作
}
type ChangeItemParam struct {
SnId int32
ItemId int32
ItemNum int64
GainWay int32
RoomConfigId int32
GameId int64
GameFreeId int64
Cost []*Item
}