条件系统
创建:2025-04-24 22:27
更新:2025-04-27 22:55

条件系统是游戏系统的重要的系统。好的条件系统可以让任务,成就,活动,功能开关等等都获益。

表设计

条件类型表

条件类型id 类型说明 值更新方式 类型参数个数 参数说明
int string enum{k_set,k_add} int
1 击败x级y怪物 k_add 2 [x等级,y怪物]
2 当前等级达到x级 k_set 1 [当前等级]

条件表

条件id 条件类型 条件参数 目标进度 默认激活 消费控制
int int int[5] int bool enum{k_remove,k_reduce}
1001 1 1001 1 true k_remove
2001 1 1001 1 true k_remove
  • 默认激活: 常用于成就类,或者长期统计类任务
  • 消费控制:控制该条件被consume后的行为
    • k_remove: 直接会移除这个条件的统计,例如普通主线
    • k_reduce: 减掉对应的次数,用于可循环任务。例如战令中 消耗钻石。可以重复完成

条件组

条件id 条件列表 是否必须完成 至少完成个数
int int[5] bool[5] int
100001 1001,1002,1003 true,false,false 2
  • 条件id: 此条件id与条件表id意义相同,但是值范围不同。可以用同一个函数操作。使用者不需要区分条件和条件组
  • 是否必须完成: 1:1对应条件列表,控制该任务是否必须完成

玩家数据不会实际记录条件组id,而是在判断finish的时候,计算子条件id判断是否完成

玩家数据和接口函数

此处逻辑用c语言表示,方便理解。

struct user_condition {
    int id;
    int progress;
};
struct user {
    ...
    struct user_condition condition[1024];
    int condition_count_;
};
// 初始化玩家默认激活的条件统计
bool user_condition_init(struct user* user);
// 激活指定条件的统计
bool user_condition_active(struct user* user, int condition_id);
// 移除指定条件的统计
bool user_condition_deactive(struct user* user, int condition_id);
// 检查指定条件是否完成
bool user_condition_finish(struct user* user, int condition_id);
// 消费一次指定条件
bool user_condition_consume(struct user* user, int condition_id); 
// 报告一次进度更新, 各个功能点进行上报
void user_condition_report(struct user* user, int type, int* params, int value);