消耗系统学习笔记
配置
- 配置文件: 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)