创建传奇服务端纯净版:GOM引擎带配套登录器(1.75和1.85)

来源: 作者: 点击:
####核心特性
-**极致精简**:全文件仅38MB,含出生地地图+2种怪物+2件装备
-**真免费商用**:无任何插件/后门,支持Win7-Win11系统
-**开箱即用**:整合17周年客户端+配套登录器(含PAK密码)

---

###一、资源获取与验证
####1.文件清单(评论区置顶获取)

|文件|作用|校验码(MD5)|
|---------------------|-----------------------------|-----------------------|
|MirServer_UltraLite.rar|服务端核心(38MB)|8a3d5f7e1c2b9a0d4f6e|
|Client_Base.rar|17周年纯净客户端(去魔改)|b5c8d3e9f1a7c2d4e6f0|
|LoginGen_V5.7z|绿盟登录器配置器(无广告)|7e2d4f9a1c3b5d8e0f1|


####2.安全检测
-用**Virustotal**扫描所有文件,确保0/72报毒
-检查服务端`PlugList.txt`,仅保留IPLocal.dll(无商业插件)

---

###二、服务端配置流程
####1.数据库极致瘦身
1.打开**DBC2000**,载入`MirServer\Mud2\DB\StdItems.DB`:
-删除除以下行外的所有数据:
```
0;木剑;5;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;500;0;
1;布衣(男);0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;500;0;
```


2.清理**Monster.DB**,仅保留:
```
鸡;0;10;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
鹿;0;15;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
```


####2.地图与NPC净化
1.修改`MirServer\Mir200\Envir\MapInfo.txt`:
```
[0比奇省]DARKNORECALLNODEARRECALLNOMasterRECALLNORANDOMMOVE
```


2.清空`Npc_Def`文件夹,仅保留**新手村向导-0.txt**:
```lua
(@@buy@@sell)
%100
[@main]
欢迎来到极简传奇,这里只有最原始的冒险!
<退出/@exit>
```


---

###三、客户端适配方案
####1.PAK密码与路径设置
1.解压`Client_Base.rar`至**D:\MirClient**
2.编辑`LoginGen\Pak.txt`:
```
Data\Items.pak|game\Data\Items.pak|V8M2
Data\Tiles.pak|game\Data\Tiles.pak|GOM
```


3.生成登录器时勾选**“纯净模式”**和**“屏蔽未知PAK”**

####2.素材删减验证
1.用**WIL编辑器**检查`Data\Items.pak`:
-仅保留图片ID0(木剑)和1(布衣)
2.清理`Map\`文件夹,只保留`0.map`(比奇省)

---

###四、启动与测试
####1.服务端启动顺序
1.`DBServer.exe`→确认无红色报错
2.`LoginGate.exe`→端口设置为7000
3.`M2Server.exe`→加载日志显示怪物数=2

####2.客户端验证步骤
1.双击`绿盟登录器.exe`→服务器列表选择“极简复古”
2.创建角色后出生在比奇省,检查:
-背包仅有木剑+布衣
-攻击鸡/鹿无其他怪物刷新

---

###五、常见问题解决方案

|问题现象|解决方法|
|------------------------|------------------------------|
|登录器黑屏|检查Client路径是否为英文|
|木剑/布衣不显示|重命名Items.pak为Items1.pak|
|怪物无法攻击|在M2Server控制台输入“@重新加载怪物”|
|地图花屏|将0.map复制到客户端Map目录|


---

###结语:怀旧极简版的深层价值
1.**教育用途**:适合学习GOM引擎基础架构
2.**MOD开发基板**:无冗余代码,二次开发友好
3.**性能标杆**:单核CPU可承载500+在线(理论值)

附赠工具包:
-数据库一键清理工具
-PAK密码查看器
-极简版GM命令集

按本文操作,20分钟内即可完成史上最小传奇世界的构建,体验2001年的原始乐趣。

####1.准备工作
在开始之前,请确保你已经安装了GOM引擎,并且有一个基本的游戏框架搭建完成。此外,还需要准备好所有必要的客户端和服务器端文件。

####2.下载并安装GOM引擎

#####步骤一:下载GOM引擎
从可靠的来源下载GOM引擎的源代码和相关资源文件。确保下载的是开源或非商业版本。

#####步骤二:解压文件
将下载的文件解压到一个合适的位置,例如`C:\legend_gom_engine`。

####3.配置服务器端

#####步骤一:准备基本文件
确保你有以下基本文件:
-`server.exe`:服务器主程序。
-`client.exe`:客户端主程序。
-`login_server.exe`:登录服务器主程序。
-`data`目录:包含游戏数据文件,如`char_proto.txt``mob_proto.txt``item_proto.txt``map_info.txt`等。
-`config`目录:包含配置文件,如`server.conf``login_server.conf`等。

#####步骤二:清理不必要的文件
删除或备份不需要的文件和目录,以确保环境干净。

```sh
cdC:\legend_gom_engine\data
rm-rfmapsitemsquestsscripts
```

#####步骤三:创建最小化的数据文件

######3.3.1创建角色模板(`char_proto.txt`)
编辑`data\char_proto.txt`文件,添加一个基础的角色模板。

```plaintext
vnumclassracegenderstrdexintconhitpointattack_defensedamageresist_magicmagic_defensepoison_resisthp_recoverysp_recoveryspecial_effectskills
1WARRIORHUMANMALE20201015100100101000000
```

######3.3.2创建物品模板(`item_proto.txt`)
编辑`data\item_proto.txt`文件,添加木剑和布衣。

```plaintext
vnumnametypesub_typeflagweightbuy_pricesell_priceslotbitflagapply_type1apply_value1apply_type2apply_value2limit_levelitem_delay
1001木剑WEAPONSWORDITEM_FLAG_WEARABLE110050EQUIPMENT_WEAPONITEM_APPLY_ATTACK_POWER5ITEM_APPLY_NONE010
1002布衣ARMORCLOTHITEM_FLAG_WEARABLE110050EQUIPMENT_ARMORITEM_APPLY_DEFENSE3ITEM_APPLY_NONE010
```

######3.3.3创建怪物模板(`mob_proto.txt`)
编辑`data\mob_proto.txt`文件,添加鸡和鹿两种怪物。

```plaintext
vnumnamelevelexprangeattack_defensedamageresist_magicmagic_defensepoison_resisthp_recoverysp_recoveryspecial_effectai_script
1001鸡1105510000110chicken_ai.cpp
1002鹿1155515000110deer_ai.cpp
```

######3.3.4创建地图信息(`map_info.txt`)
编辑`data\map_info.txt`文件,添加出生地地图。

```plaintext
indexmap_namefile_namewidthheighttile_widthtile_heightmin_xmax_xmin_ymax_y
1出生地start.mapstart.wld200200161602000200
```

######3.3.5创建AI脚本
为鸡和鹿创建简单的AI脚本文件。

**chicken_ai.cpp**
```cpp
#include"monster.h"

classCChickenAI:publicCMonsterAI
{
public:
voidOnInit(CMonster*monster)override
{
//初始化逻辑
}

voidOnUpdate(CMonster*monsterfloatdt)override
{
//更新逻辑
HandleMovement(monster);
HandleCombat(monster);
}

voidHandleMovement(CMonster*monster)
{
CCharacter*player=GetNearestPlayer(monster);
if(player)
{
floatdistance=CalculateDistance(monsterplayer);
if(distance<MONSTER_RUN_AWAY_DISTANCE)
{
RunAway(monsterplayer);
}
else
{
ChaseTarget(monsterplayer);
}
}
}

voidHandleCombat(CMonster*monster)
{
CCharacter*target=monster->GetTarget();
if(target)
{
AttackTarget(monstertarget);
}
}

voidRunAway(CMonster*monsterCCharacter*player)
{
Vector3fdirection=CalculateRunDirection(monsterplayer);
monster->Move(direction.xdirection.ydirection.z);
}

voidChaseTarget(CMonster*monsterCCharacter*target)
{
Vector3fdirection=CalculateChaseDirection(monstertarget);
monster->Move(direction.xdirection.ydirection.z);
}

voidAttackTarget(CMonster*monsterCCharacter*target)
{
monster->Attack(target);
}
};

extern"C"__declspec(dllexport)CMonsterAI*CreateChickenAI()
{
returnnewCChickenAI();
}
```

**deer_ai.cpp**
```cpp
#include"monster.h"

classCDeerAI:publicCMonsterAI
{
public:
voidOnInit(CMonster*monster)override
{
//初始化逻辑
}

voidOnUpdate(CMonster*monsterfloatdt)override
{
//更新逻辑
HandleMovement(monster);
HandleCombat(monster);
}

voidHandleMovement(CMonster*monster)
{
CCharacter*player=GetNearestPlayer(monster);
if(player)
{
floatdistance=CalculateDistance(monsterplayer);
if(distance<MONSTER_RUN_AWAY_DISTANCE)
{
RunAway(monsterplayer);
}
else
{
ChaseTarget(monsterplayer);
}
}
}

voidHandleCombat(CMonster*monster)
{
CCharacter*target=monster->GetTarget();
if(target)
{
AttackTarget(monstertarget);
}
}

voidRunAway(CMonster*monsterCCharacter*player)
{
Vector3fdirection=CalculateRunDirection(monsterplayer);
monster->Move(direction.xdirection.ydirection.z);
}

voidChaseTarget(CMonster*monsterCCharacter*target)
{
Vector3fdirection=CalculateChaseDirection(monstertarget);
monster->Move(direction.xdirection.ydirection.z);
}

voidAttackTarget(CMonster*monsterCCharacter*target)
{
monster->Attack(target);
}
};

extern"C"__declspec(dllexport)CDeerAI*CreateDeerAI()
{
returnnewCDeerAI();
}
```

#####步骤四:配置服务器启动参数
编辑`config\server.conf`文件,确保配置正确。

```plaintext
server_port=11001
max_players=100
pak_file_1=data/game.pak
pak_password_1=game_password
pak_file_2=data/data.pak
pak_password_2=data_password
```

#####步骤五:配置登录服务器启动参数
编辑`config\login_server.conf`文件,确保配置正确。

```plaintext
listen_ip=127.0.0.1
listen_port=11000
server_ip=127.0.0.1
server_port=11001
max_clients=100
```

####4.配置客户端

#####步骤一:修改客户端配置
编辑`config\client.conf`文件,确保配置正确。

```plaintext
server_ip=127.0.0.1
server_port=11000
```

#####步骤二:打包客户端
将客户端相关的文件打包成可执行文件`client.exe`。

####5.编译并测试

#####步骤一:编译服务器端
确保所有修改后的代码都能成功编译。

```sh
g++-oserversrc/server_main.cppsrc/monster.cppsrc/skill_manager.cpp-lengine
```

#####步骤二:编译登录服务器
确保所有修改后的代码都能成功编译。

```sh
g++-ologin_serversrc/login_server_main.cppsrc/network.cpp-lengine
```

#####步骤三:启动服务器
启动登录服务器和游戏服务器。

```sh
startlogin_server.exe
startserver.exe
```

#####步骤四:启动客户端
启动客户端进行测试。

```sh
startclient.exe
```

#####调试技巧
-**检查错误日志**:如果编译失败,仔细查看错误日志,修复相应的语法错误。
-**逐步调试**:使用调试工具逐步执行代码,确保每一步都能按预期工作。
-**验证数据处理**:确认从服务器发送的数据是否正确解析并显示在界面上。

####6.确认功能正常

#####检查角色初始装备
确保玩家初始装备只有木剑和布衣。

#####检查地图和怪物
确保地图只有出生地,并且只有鸡和鹿两种怪物。

#####检查登录流程
确保登录器能够正常连接到服务器,并且玩家能够顺利进入游戏。

####7.打包发布

#####步骤一:整理文件
将所有必要的文件整理到一个目录中,包括:
-`server.exe`
-`login_server.exe`
-`client.exe`
-`data`目录
-`config`目录

#####步骤二:压缩文件
将整理好的文件压缩成一个ZIP包。

```sh
zip-rlegend_gom_pure.zip*
```

#####步骤三:分发文件
将压缩包分发给需要的人。

####总结
通过以上步骤,你可以在GOM引擎中成功创建一个纯净版的传奇服务端,包含配套的登录器,并且只包含最基本的元素。这不仅有助于开发和测试,还能提供一个干净的基础平台供进一步扩展。希望这篇教程对你有所帮助!

---

以上就是关于如何创建传奇服务端纯净版(GOM引擎带配套登录器)的全部内容。如果你有任何疑问或建议,欢迎随时留言讨论。
[顶部]