维护DBServer和M2 的数据交换。
维护 M2和网关的数据交换。
用于读取标准数据库(物品 技能 怪物)内的数据。
其中可以看到 在读取物品数据库的时候
:= MakeLong(Round((‘Ac’).AsInteger * (g_ /10)), Round((‘Ac2’).AsInteger * (g_ /10)))。
:= MakeLong(Round((‘Mac’).AsInteger * (g_ /10)), Round((‘MAc2’).AsInteger * (g_ /10)))。
:= MakeLong(Round((‘Dc’).AsInteger * (g_ /10)), Round((‘Dc2’).AsInteger * (g_ /10)))。
:= MakeLong(Round((‘Mc’).AsInteger * (g_ /10)), Round((‘Mc2’).AsInteger * (g_ /10)))。
:= MakeLong(Round((‘Sc’).AsInteger * (g_ /10)), Round((‘Sc2’).AsInteger * (g_ /10)))。
物品的防御、魔法防御 、攻击这种 一个字段内包含了 攻击上限了下限。类型为4字节。 这里也就限制了 物品的属性无法超越2字节限制。 0-65535 。要超过此限制 必须使用8字节数据。
源代码很冗余。相同的代码有太多重复。如果考虑将物品属性改成4字节 那么这里面有很多代码需要重新维护 防止数据溢出。
那么关于行会的操作都将在此进行。
内是对所有Actor数据的处理。包含处理NPC 人物 怪物 和英雄 的数据
在 我发现在处理全局公告的时候的逻辑 也在这里面处理 实在是很不应该。这应该是公告类自身来处理的。主要负责前端 不过职责太混乱 啥都有。
而 内 TFrontEngine = class(TThread) 虽然从字面上来理解是前端。但是做的是后勤工作。反正这两个类的职责比较混乱!是处理数据的主要类!
内实现的是事件类。安全区的光环 以及地图上的特效 都是以事件来实现的。比如困魔咒。在游戏网络突然中断我们可以看到困魔咒的光环依旧是动态的。这说明。这些地图特效的帧率 是不受服务端控制 的 主要逻辑在客户端 服务端只是告诉客户端 有这么一个事件 什么时候消亡!
内维护了一个TEnvirmonent 在服务端 如果服务端有1000个地图map 那么会有1000个TEnvirMonent 对象。每个对象维护各自地图内的玩家怪物列表。 而此类并不是线程类的子类。也就就是表示服务端在处理数据并不是并行处理的。而是线性处理。那么随着对象纵深越来越深 效率也是会降低。所以此类应该独立出来 不受M2维护 应该做到自维护。
在加入新土城格式 需要在此单元内做兼容。
此单元与配合 主要是处理底层Socket链接 而主要负责合适发送者这种高层逻辑。是线程类。
关于城堡的操作 在此单元内。
仓库实现单元。其保存的为本地文件 并非数据库内。 需要改进
其他以Obj开头的单元是怪物 以及NPC的 AI实现。
ps:源代码为 飞尔20120918代码