文章目录
- 一、需求介绍
- 二、数据库设计
- 3、代码部分实现
一、需求介绍
1、首先任务的类型
不同,可以分为:日常任务、成长任务、活动任务等等。
2、当达到任务目标时,自动发放
任务奖励。
3、任务需要后台可配置
,例如:任务名称、完成条件、奖励内容等等。
二、数据库设计
1、任务表
字段名称 | 注释 |
---|---|
task_id | 任务id |
type | 任务类型(日常、成长、活动等) |
task_describe | 任务描述 |
reward_describe | 奖励描述 |
unlock_rule | 解锁条件 |
finish_rule | 完成条件 |
reward_rule | 完成奖励 |
number | 每日可完成次数 |
start_time | 任务开始时间 |
end_time | 任务结束时间 |
2、解锁条件配置表
字段名称 | 注释 |
---|---|
unlock_id | 解锁条件id |
describe | 解锁条件描述 |
unlock_rule | 解锁条件规则 |
在unlock表中,我们配置一些任务解锁的条件:
INSERT INTO `sys_task_unlock_config` (`unlock_id `, `describe`, `unlock_rule `) VALUES (11000, '邀请%d个好友', 'type=11000&num=%d');
INSERT INTO `sys_task_unlock_config` (`unlock_id `, `describe`, `unlock_rule `) VALUES (12101, '累计拿到%d次SSS成绩', 'type=12101&num=%d');
比如:累计拿到3次SSS成绩
的解锁条件为累计拿到1次SSS成绩
,那么在任务表中,unlock_rule
解锁条件配置为 type=12101&num=1
3、完成条件配置表
字段名称 | 注释 |
---|---|
finish_id | 完成条件id |
describe | 完成条件描述 |
finish_rule | 完成条件规则 |
与解锁表相同,我们插入两条演示数据:
INSERT INTO `sys_task_finish_config` (`finish_id`, `describe`, `finish_rule `) VALUES (21000, '邀请%d个好友', 'type=21000&num=%d');
INSERT INTO `sys_task_finish_config` (`finish_id`, `describe`, `finish_rule `) VALUES (22101, '累计拿到%d次SSS成绩', 'type=22101&num=%d');
那么拿到3次SSS成绩的完成配置:type=22101&num=3
4、奖励条件配置表
字段名称 | 注释 |
---|---|
reward_id | 奖励条件id |
describe | 奖励条件描述 |
reward_rule | 奖励条件规则 |
同上,插入两条演示数据:
INSERT INTO `sys_task_rewaed_config` (`reward_id`, `describe`, `reward_rule `) VALUES (31000, '奖励%d个宝石', 'type=31000&num=%d');
那么,奖励条件配置为:type=31000&num=3
,即为完成任务奖励3个宝石
5、个人任务表
字段名称 | 注释 |
---|---|
task_record_id | 任务记录id |
user_id | 用户id |
task_id | 任务id |
type | 任务类型 |
status | 任务完成情况 |
completed_times | 已完成次数 |
number | 每日可完成次数 |
3、代码部分实现
首先需要监听游戏中发生的各种事件,比如:在线10分钟、杀死一个野怪等等。这些时间会触发我们的任务。
在触发任务后,需要统计角色的信息,然后用这些信息去遍历任务表,看看哪些任务可以解锁,将其添加至个人任务表。
随后遍历个人任务,查看哪些符合完成条件,对符合条件的发放奖励。
大致流程:
另外,我们在创建角色时,需要将一些没有解锁条件的任务添加至数据库。
我们在添加有时间期限的任务时,需要添加定时任务,在活动到期时将任务从个人任务表删除。