上班的第四百八十六天——帮会模块

    最近学的东西都是比较虚,在实际开发中用到的都比较少,所以为了让试用期能够过得妥妥的,我应该要学习一下业务知识的。一个游戏,最基础的无非也就是那几个模块:背包模块、帮会模块、任务模块、技能模块、场景模块、交易模块、聊天模块以及角色模块,那我就一个个来好了。

    今天研究的是帮会模块,UML图如下(用astah professional绘制的):

上班的第四百八十六天——帮会模块_第1张图片

    按数据流来解析:

    初始化:服务器引擎CLogicEngine在逻辑服务器开启时,会从数据库服务器申请该服务器的所有帮会数据,将数据存储在其组合的CGuildComponent中。CGuildComponent中有一条链表用于存储每个帮会的数据,即CGuild的实例。

    运行中:CLogicEngine在初始化后,会进入一个死循环,然后开始调用个个管理器的逻辑处理,这里调用的帮会管理器也就是CGuildComponent。CGuildComponent会在逻辑处理中查询每个帮会的状态,看是否有数据需要更新,或者是否有些状态改变了(如行会的资金不足),需要通知玩家。

    客户端发送消息:如果没有客户端请求消息,那么数据流动就仅限于上面的“运行中”。反之,则需要识别客户端请求的消息id,根据一系列的计算,能够得出该id对应的m_ModuleFunc[MODULE_FUNC_MAX]数组下标,从而调用相应的处理函数。而负责处理帮会系统业务的模块有3个,CGuildSystem、CGuild和CComponent。CGuildSystem是组合在CActor类(也就是玩家实体),负责处理该玩家在帮会中的业务,比如该玩家贡献了多少行会钞票。CGuildSystem负责处理整个帮会的业务,比如该帮会的仇敌帮会是哪个,该帮会的帮主是谁,帮会的繁荣值是多少。CComponent负责处理所有帮会的业务,比如在沙巴克攻城活动开始后,每当有玩家进入沙城皇宫,都会遍历在该场地的所有帮会,判断是否仅剩1个帮会。

    实际编写代码的时候,CGuildSystem、CGuild以及CComponent会互相调用,应该是觉得那样方便,没有将交叉的地方用中介者模式封装起来,导致有点乱。但是涉及的类也就这3个,所以在不是太混乱的情况下还是可以接受的。


你可能感兴趣的:(上班的第四百八十六天——帮会模块)