道具是游戏中一个很基本的元素,一件装备,一锭银子,一个坐骑,一种图鉴等等都属于道具,一般来说,能够放在背包里面东西都是道具,这里的背包是广义上的背包,包括主背包,仓库,装备背包等等,关于背包这一块将在后续内容背包系统中单独介绍。道具数据结构定义可以用一个proto来表示:
package obj;
message object_data
{
optional uint32 baseid = 1;//道具的品类标识id,标识这一类道具
optional uint32 thisid = 2;//道具的唯一id,唯一标识这件道具
optional string name = 3;
optional uint32 num = 4;
optional uint32 x = 5; //道具在背包中的坐标
optional uint32 y = 6; //道具在背包中的坐标
optional uint32 pack = 7;//道具所属的背包
optional Equip equipdata = 8;//装备数据,打造装备的时候会先创建一个道具,然后再填充这个字段(假如该道具不是装备,则该字段为空)
...
}
除了一个proto数据外,还有一个封装道具的类Object,该类主要实现的道具的创建,及其获取道具某些属性值等。
class Object
{
public:
Object(pro::objects::data &data);
void create(pro::objects::data &data);//创建一个道具,会调用上面的构造函数,还可以通过baseid等来创建道具
...
private:
obj::object_data _data;//内存中的道具数据
pro::objects::data& &_base;//道具基本表配置中的道具数据,用来创建道具,构成内存中的道具数据
pro::equips::data& &_equipbase;//配置中的装备数据,如过该道具是装备的话,会在创建道具的时候根据装备表初始化该成员
};