成品网站模板下载,东莞服务36招全称,网站建设案例展示,济南学生网站建设求职配置
ItemIdMainTypeSubTypeMaxStackableCount唯一Id大类小类最大堆叠数 MainType#xff1a; 主要的分类方式#xff0c;不建议写入数据库 SubType#xff1a; MainType下面的分类方式#xff0c;不建议写入数据库 MaxStackableCount: 为0时表示该Item不可堆叠#xff1…配置
ItemIdMainTypeSubTypeMaxStackableCount唯一Id大类小类最大堆叠数 MainType 主要的分类方式不建议写入数据库 SubType MainType下面的分类方式不建议写入数据库 MaxStackableCount: 为0时表示该Item不可堆叠可用于处理各种Item的存储当然有些时候需要一种添加Item后不可改变数量的情况具体可以根据业务设计 设计
存储
UIdItemIdCount拥有数量 基本的存储如上但是这里有些问题需要考虑。如果Count为0是否需要加载到内存是否可以重用Count为0 的数据建议不要重用Count为0的数据就我遇到的情况前期我们重用数据但是后面发现一些生成的DbId, 被其它的系统依赖当重用这些DbId, 就会出现添加的数据不是新数据而有些业务又只处理新数据在这里就出现了对于某些业务新数据是有意义的而有的却没有。当然如果不用背包做一些奇怪的系统以来我觉得重用是完全没问题的但是谁也保证不了 获取 一般来说玩家可以通过 MainType 和 itemId 获取相关的Item数据量大的情况建议细分查考下面链接 背包系统设计-获取数据量大问题-CSDN博客
增减问题 如果存在好几个 未到 堆叠数数据发生数量变化时怎样处理应该加到谁身上减到谁身上 理论上我们希望减数据的时候先减 同itemId中 数量最小的 加数据的时候先加 同itemId中 数量最多的 这样可以保证尽量少的数据在内存中 bool TryRemoveItemCount(uint itemId, uint count)
{// 先检查是否足够// 获取这个类型的物品list, 按照数量递增排序int removeCount remove;while(removeCount 0){// 移除物品直到 removeCount 为0 }// 更新数据推送等
}void AddItemCount(uint itemId, uint count)
{// 获取这个类型的物品list, 按照数量递减排序int addCount remove;while(addCount 0){// 添加物品直到 addCount 为0 }// 更新数据推送等
} 关联系统 这个系统算是所有系统的基础系统不管是奖励的发放、还是其它业务都是通过背包来工作的但是不建议所有系统跟背包进行强关联否则系统后期会很难维护就像我们前期为了省事考虑可能出现的各种交易将所有的系统DbId跟背包关联导致后期背包中存在很多无用的数据而且一个数据存储在两个地方本身就是违背设计的但是由于各种原因我们还是做了希望大家做的时候想清楚当然如果遇到一个喜欢应付的合作对象你会发现不管你怎样说他总有理由 ^ ^ 奖励可以参考下面的链接 奖励Reward系统设计-CSDN博客