游戏活动框架

背景

经常玩游戏的人应该发现 几乎大部分游戏都有各种各样的活动玩法

对于开发者来说这些活动除了自身活动的逻辑不相同 有个相同点就是通过策划的配置来控制活动的开启和关闭

那么就需要一套框架来实现这种

配置格式

活动id  活动类型id    活动开启时间   活动开启条件 活动结束时间 

最核心无法就是这5个字段

活动id :全局唯一的标识

活动类型id:比如春节活动id为1  圣诞节活动id为2

活动开启时间:一般填年月日时分秒 或者填时间戳

活动开启条件:比如服务器等级达到多少 玩家等级达到多少

活动结束时间:一般填年月日时分秒 或者填时间戳

有读者问活动id和活动类型id是否重复了  这里是不重复了

比如圣诞节活动id为2  当时圣诞节活动不会只开一期  会开很多期   那么就是需要唯一标识这是第几期了

实现

一般来说活动都是零点开启

那么服务器一般会做个定时器 每天零点读取活动配置表 判断哪些活动是开启的 哪些活动是结束的

然后活动线程会将开启的活动id存到内存中 比如redis中让玩家去读取数据

玩家身上也会存储当前在进行的活动id  然后在0点的时候去读取redis判断哪些活动开启了 有以下四种情况

玩家身上有id   redis中无id          活动结束 玩家执行发奖励操作

玩家身上有id  redis中有id           活动正常进行 无需操作

玩家身上无id  redis中有id           活动开启  玩家执行活动开启操作

玩家身上无id  redis中无id           活动没开   无需操作

注意:

笔者在开发的过程中遇到到活动线程0点处理数据的同时 玩家线程也在处理活动数据 假如活动线程还没处理完  玩家线程就开始读redis数据了 那么这个时候数据是旧的 就会导致活动以外结束或者开启

处理这个问题就是 玩家0点读redis这个操作不需要玩家自己做定时器 而是活动线程处理操作后通知给所有在线的玩家去读取redis     同时玩家在做每个活动操作前都要读取redis判断活动是否开启

同时在玩家登陆的时候也要做读取redis的处理

其他

一般来说活动都是0点开启的 那么不一般的时候呢? 就是有些活动就是要5点或者12点才开启

这个时候就要跟策划讨论了   服务器在对应的5点或者12点也做定时器  少了时候还好 如果策划说每一秒钟都有可能有活动开启 这个时候我建议让策划提需求

直接做个web后台活动管理或者写脚本      每次都让策划自己去手动开启    开启后通知所有在线玩家和在玩家登陆的时候做读redis的操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值