消耗系统学习笔记
配置
- 配置文件: resource/ConsumeResource.xlsx
- 配置实体类
ConsumeResource- 配置主键
key - 配置类型
ConsumeType type - 分级参数,从0开始
step - 分级类型,根据玩家可获取当前分级
StepType stepType - 根据唯一id消耗(用于道具)
long objId - 背包列表类型列表
List<PackType> packTyps - 消耗id
String code - 消耗值
long value
- 配置主键
领域模型
消费对象 AbstractConsume<Obj>
Result verify(Obj obj, long multiple)校验资源是否足够abstract void consume(Obj obj,ModuleInfo mouduleInfo, long multiple)消耗资源abstract ConsumeType getType()获取消费类型final AbstractConsume<Obj> merge(AbstractConsume<Obj> consume)合并
消耗对象会继承该类并getType()和consume(...)方法。
消耗消息封装 消耗组 Consumes<Obj>
verity(Obj obj, int int account)检测消耗条件是否满足void act(Obj obj, ModuleInfo moduleInfo, int amount)消耗void actOrFailException(Obj obj, ModuleInfo moduleInfo, int amount)检测消耗条件并执行消耗
分级消耗 StepConsumes<Obj>
采用TreeMap的结构储存,key为下限,value为消耗组
addConsume(int step, Consume<Obj> consumes)添加分级消耗Consumes<Obj> getConsumes获取该级的消耗,使用
消耗类型 ConsumeType
HP耗血MP耗蓝ITEM消耗物品CURRENCY消耗货币EFFECT消耗一个被动效果ENERGY_EXP消耗内功经验GANG_FUNDS消耗公会资金GOD_MIGHT神威值TREASURE_SCORE探宝积分JING_JIE_SCORE消耗境界点STOVE_SCORE消耗公会积分GANG_CONTRIBUTIONS消耗公会贡献TRANSFER_ITEM消耗跨服物品
类型枚举ConsumeType拥有抽象方法abstract <T extends AbstractConsume> create(ConsumeResource resource)
消费管理器 ConsumeManager
Consumes getResource(ConsumeKey key)获取配置表的消耗<Obj> Consumes<Obj> createConsumes(List<ConsumeResource> resources)创建消耗组<Obj> StepConsumes<Obj> createStepConsumes(List<ConsumeResource> resource)创建分级消耗,需要保证ConsumeResource#step不冲突
如何使用消耗
- 如何要玩法需要的消耗是新的,要在
ConsumeType内定义消耗类型并重写create(...)方法 - 获取消耗的配置对象
- 通过配置对象创建消耗消息组
- 检测消耗组条件是否满足
- 执行消耗
XxxResource> XxxResource = XxxManager.getXxxResource();
Consume<Player> consumes = XxxResource.getConsumes();
Result result = consumes.verify(player,1);
if(!result.isSuccess()) {
throw ManagedException.valueOf(result.getCode())
}
consumes.actOrFailException(palyer,ModuleInfo.valueOf(ModuleType.Xxx,SubModuleType.Xxxx),1)