平时游戏运营活动需求,看起来是蛮复杂的。事实上本质上任务系统或者成就系统类似。
一般需求像这样:
1. 活动有開始时间和结束时间要求。
2. 活动给出的奖励也有開始时间和结束时间要求。
3. 完毕活动须要做完几件事情(我们称作事件或者条件事件)。
4. 相比較任务和成就系统,这样的活动条目非常少。
分享一下我们的做法:
1. 独立实现一个活动server。存储的DB也是独立。这种优点是,活动server和主逻辑server的全然分离的,DB数据能够随便清除,很easy维护。
2. 主逻辑server,不断将事件通过网络协议的方式通知活动server;
3. 主逻辑server,通知事件后。活动server将可能返回已完毕的活动条目。
主逻辑server,没有什么好说的。考虑活动的特点。我们仅仅要无脑地将事件发给活动server。
活动server实现几个地方略微讲究一下。
1. 每次收到玩家登录消息时,就将全部未接受的活动项。自己主动接受下来。这里注意的一点事,即使这个活动開始时间未到。我们也接受下来。
2. 收到事件通知时,要注意一下活动是否已经開始,和活动是否已经结束。1&2这样做的目的是,某个活动的開始的时候。玩家不用又一次登录。这个是比較重要体验问题。
3. 完毕活动后,给主逻辑server发奖励的话,需要推断一下,当前时间是否是奖励发放时间范围内。
举一个实际的样例:
2014.10.1~2014.10.7充值的玩家,在2014.10.5~20.10.7期间,能获得双倍掉落的奖励。
接受时间:2014.10.1~2014.10.7
事件:充值
奖励时间:2014.10.5~20.10.7
奖励内容:双倍掉落
1. 某个玩家登录时,活动server生成这个 活动任务 对象。
2. 这个玩家充值的时候,活动server收到这个充值事件,仅仅要在2014.10.1~2014.10.7内。就推断该活动是否完毕。
3. 玩家登录后。主逻辑server发一个空的通知事件,然后就收到双倍奖励内容,后面该干什么就干什么。
这类需求头脑保持清醒。看似眼花缭乱的需求,实现起来很简洁。