|
GameServer VC++源代码,包括地图,脚本,人物处理,协议加密,带数据
库,由于源码为商业性质的,请使用者注意其版权和不要擅自公开发布和传播源码。
WEMADE 公司于 Delphi 版本服务器端程序后,修改为 VC++ 版本。
可编译的传奇2客户端和服务端源码,在VS2005下编译通过,此版本较齐全,研究传奇的朋友绝对不能错过
RunDB.pas 维护DBServer和M2 的数据交换。
RunSock.pas 维护 M2和网关的数据交换。
LocalDB.pas 用于读取标准数据库(物品 技能 怪物)内的数据。
其中可以看到 在读取物品数据库的时候
StdItem.AC := MakeLong(Round(Query.FieldByName('Ac').AsInteger * (g_Config.nItemsACPowerRate / 10)), Round(Query.FieldByName('Ac2').AsInteger * (g_Config.nItemsACPowerRate / 10)));
StdItem.MAC := MakeLong(Round(Query.FieldByName('Mac').AsInteger * (g_Config.nItemsACPowerRate / 10)), Round(Query.FieldByName('MAc2').AsInteger * (g_Config.nItemsACPowerRate / 10)));
StdItem.DC := MakeLong(Round(Query.FieldByName('Dc').AsInteger * (g_Config.nItemsPowerRate / 10)), Round(Query.FieldByName('Dc2').AsInteger * (g_Config.nItemsPowerRate / 10)));
StdItem.MC := MakeLong(Round(Query.FieldByName('Mc').AsInteger * (g_Config.nItemsPowerRate / 10)), Round(Query.FieldByName('Mc2').AsInteger * (g_Config.nItemsPowerRate / 10)));
StdItem.SC := MakeLong(Round(Query.FieldByName('Sc').AsInteger * (g_Config.nItemsPowerRate / 10)), Round(Query.FieldByName('Sc2').AsInteger * (g_Config.nItemsPowerRate / 10)));
物品的防御、魔法防御 、攻击这种 一个字段内包含了 攻击上限了下限。类型为4字节。 这里也就限制了 物品的属性无法超越2字节限制。 0-65535 。要超过此限制 必须使用8字节数据。
--------------------------------------------------------以上是M2和外部数据交换的操作--------------------------------------------
Magic.pas 内实现了一个魔法管理器 TMagicManager 所有魔法的伤害都在此进行管理和统计。源代码很冗余。相同的代码有太多重复。如果考虑将物品属性改成4字节 那么这里面有很多代码需要重新维护 防止数据溢出。
Guild.pas内 实现 了2个类,TGuild(行会) 和TGuildManager (行会管理)。那么关于行会的操作都将在此进行。
UsrEngn.pas内是对所有Actor数据的处理。包含处理NPC 人物 怪物 和英雄 的数据
在TUserEngine.ProcessHumans 我发现在处理全局公告的时候的逻辑 也在这里面处理 实在是很不应该。这应该是公告类自身来处理的。主要负责前端 不过职责太混乱 啥都有。
而frnEngn.pas 内 TFrontEngine = class(TThread) 虽然从字面上来理解是前端。。但是做的是后勤工作。。反正这两个类的职责比较混乱!是处理数据的主要类!
Event.pas 内实现的是事件类。安全区的光环 以及地图上的特效 都是以事件来实现的。比如困魔咒。在游戏网络突然中断我们可以看到困魔咒的光环依旧是动态的。这说明。这些地图特效的帧率 是不受服务端控制 的 主要逻辑在客户端 服务端只是告诉客户端 有这么一个事件 什么时候消亡!
TEvent = class(TBaseObject)
Envir.pas 内维护了一个TEnvirmonent 在服务端 如果服务端有1000个地图map 那么会有1000个TEnvirMonent 对象。每个对象维护各自地图内的玩家怪物列表。 而此类并不是线程类的子类。也就就是表示服务端在处理数据并不是并行处理的。而是线性处理。那么随着对象纵深越来越深 效率也是会降低。所以此类应该独立出来 不受M2维护 应该做到自维护。
在加入新土城格式 需要在此单元内做兼容。
DataEngn.pas 此单元与RunDB.pas配合 DataEngn.pas主要是处理底层Socket链接 而RunDB.pas主要负责合适发送者这种高层逻辑。是线程类。
Castle.pas 是城堡处理实现单元内部实现了TCastle 和 TCastleManager。关于城堡的操作 在此单元内。
StorageEngn.pas 仓库实现单元。其保存的为本地文件 并非数据库内。 需要改进
其他以Obj开头的单元是怪物 以及NPC的 AI实现。
|
上一篇:传奇yesm2引擎_2018.06.23[jjj版-官方原版]下一篇:传奇(LEG,BLUE引擎)945登陆器,登录器配置器_官方原版免费下载
|