Files
mir_server/Gateway/common/db/item_data.h
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

91 lines
1.8 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _USER_ITEM_H_
#define _USER_ITEM_H_
#include "common.h"
// 暂时没用可以用varchar64来做这个
//#define ITEM_DATA_RESERVED_SIZE 64
#define EQUIP_ATTR_COUNT 8
#define ITEM_ATTR_TYPEVALUE 2
#define ITEM_ATTR_TYPE 0
#define ITEM_ATTR_VALUE 1
enum BagType
{
BagType_Item = 0,
BagType_Equip,
BagType_Depot,
};
#pragma pack (push, 1)
union ItemSeries
{
int64_t llId;
struct
{
unsigned int time_; //31-0位表示物品产生的日期和时间值为短日期类型单位是秒
uint16_t series_; //47-32位表示在一秒内的序列每产生一个物品则序列值+1一秒后序列值归零
uint16_t sid_; //55-48位表示服务器ID
} t;
public:
//inline operator int64_t () const { return llId; }
//inline bool operator == (const ItemSeries& series) const { return llId == series.llId; }
//inline bool operator != (const ItemSeries& series) const { return llId != series.llId; }
};
union ItemAttrData
{
// define:
struct EquipAttr
{
int attr[EQUIP_ATTR_COUNT][ITEM_ATTR_TYPEVALUE]; // 类型+value
};
// public:
EquipAttr equip_attr;
};
struct ItemData
{
int64_t uid; //物品唯一系列号 ItemSeries
int id;
int count;
ItemAttrData attr_data; // 大部分物品都是装备,且属性很少,不需要做优化
ItemAttrData ex_attr_data;
ItemData()
{
memset(this, 0, sizeof(ItemData));
}
public:
//修改useritem 注意需要修改以下3个函数 writeToPack, writeDbPack, writeCrcPack
//组装发送给客户端的包
void writeData(DataPacket& pack) {
pack.writeBuf(this, sizeof(ItemData));
}
void readData(DataPacketReader& pack) {
pack.readBuf(this, sizeof(ItemData));
}
static void copy(ItemData* dstItem, ItemData* srcItem)
{
if (!dstItem || !srcItem || dstItem == srcItem) return;
memcpy(dstItem, srcItem, sizeof(ItemData));
}
};
#pragma pack(pop)
//STATIC_ASSERT(sizeof(ItemData) < ITEM_DATA_RESERVED_SIZE);
typedef std::vector<ItemData*> ItemList ;
#endif