#### ºËÐÄÌØÐÔ
- **¼«Ö¾«¼ò**£ºÈ«Îļþ½ö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 ±ÈÆæÊ¡] DARK NORECALL NODEARRECALL NOMasterRECALL NORANDOMMOVE
```
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`£º
- ½ö±£ÁôͼƬID 0£¨Ä¾½££©ºÍ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ÃüÁ
°´±¾ÎIJÙ×÷£¬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
cd C:\legend_gom_engine\data
rm -rf maps items quests scripts
```
##### ²½ÖèÈý£º´´½¨×îС»¯µÄÊý¾ÝÎļþ
###### 3.3.1 ´´½¨½Çɫģ°å (`char_proto.txt`)
±à¼`data\char_proto.txt`Îļþ£¬Ìí¼ÓÒ»¸ö»ù´¡µÄ½Çɫģ°å¡£
```plaintext
vnum class race gender str dex int con hit point attack_defense damage resist_magic magic_defense poison_resist hp_recovery sp_recovery special_effect skills
1 WARRIOR HUMAN MALE 20 20 10 15 100 100 10 10 0 0 0 0 0
```
###### 3.3.2 ´´½¨ÎïÆ·Ä£°å (`item_proto.txt`)
±à¼`data\item_proto.txt`Îļþ£¬Ìí¼Óľ½£ºÍ²¼Ò¡£
```plaintext
vnum name type sub_type flag weight buy_price sell_price slot bitflag apply_type1 apply_value1 apply_type2 apply_value2 limit_level item_delay
1001 ľ½£ WEAPON SWORD ITEM_FLAG_WEARABLE 1 100 50 EQUIPMENT_WEAPON ITEM_APPLY_ATTACK_POWER 5 ITEM_APPLY_NONE 0 1 0
1002 ²¼ÒÂ ARMOR CLOTH ITEM_FLAG_WEARABLE 1 100 50 EQUIPMENT_ARMOR ITEM_APPLY_DEFENSE 3 ITEM_APPLY_NONE 0 1 0
```
###### 3.3.3 ´´½¨¹ÖÎïÄ£°å (`mob_proto.txt`)
±à¼`data\mob_proto.txt`Îļþ£¬Ìí¼Ó¼¦ºÍ¹Á½ÖÖ¹ÖÎï¡£
```plaintext
vnum name level exp range attack_defense damage resist_magic magic_defense poison_resist hp_recovery sp_recovery special_effect ai_script
1001 ¼¦ 1 10 5 5 10 0 0 0 1 1 0 chicken_ai.cpp
1002 ¹ 1 15 5 5 15 0 0 0 1 1 0 deer_ai.cpp
```
###### 3.3.4 ´´½¨µØÍ¼ÐÅÏ¢ (`map_info.txt`)
±à¼`data\map_info.txt`Îļþ£¬Ìí¼Ó³öÉúµØµØÍ¼¡£
```plaintext
index map_name file_name width height tile_width tile_height min_x max_x min_y max_y
1 ³öÉúµØ start.map start.wld 200 200 16 16 0 200 0 200
```
###### 3.3.5 ´´½¨AI½Å±¾
Ϊ¼¦ºÍ¹´´½¨¼òµ¥µÄAI½Å±¾Îļþ¡£
**chicken_ai.cpp**
```cpp
#include "monster.h"
class CChickenAI : public CMonsterAI
{
public:
void OnInit(CMonster* monster) override
{
// ³õʼ»¯Âß¼
}
void OnUpdate(CMonster* monster, float dt) override
{
// ¸üÐÂÂß¼
HandleMovement(monster);
HandleCombat(monster);
}
void HandleMovement(CMonster* monster)
{
CCharacter* player = GetNearestPlayer(monster);
if (player)
{
float distance = CalculateDistance(monster, player);
if (distance < MONSTER_RUN_AWAY_DISTANCE)
{
RunAway(monster, player);
}
else
{
ChaseTarget(monster, player);
}
}
}
void HandleCombat(CMonster* monster)
{
CCharacter* target = monster->GetTarget();
if (target)
{
AttackTarget(monster, target);
}
}
void RunAway(CMonster* monster, CCharacter* player)
{
Vector3f direction = CalculateRunDirection(monster, player);
monster->Move(direction.x, direction.y, direction.z);
}
void ChaseTarget(CMonster* monster, CCharacter* target)
{
Vector3f direction = CalculateChaseDirection(monster, target);
monster->Move(direction.x, direction.y, direction.z);
}
void AttackTarget(CMonster* monster, CCharacter* target)
{
monster->Attack(target);
}
};
extern "C" __declspec(dllexport) CMonsterAI* CreateChickenAI()
{
return new CChickenAI();
}
```
**deer_ai.cpp**
```cpp
#include "monster.h"
class CDeerAI : public CMonsterAI
{
public:
void OnInit(CMonster* monster) override
{
// ³õʼ»¯Âß¼
}
void OnUpdate(CMonster* monster, float dt) override
{
// ¸üÐÂÂß¼
HandleMovement(monster);
HandleCombat(monster);
}
void HandleMovement(CMonster* monster)
{
CCharacter* player = GetNearestPlayer(monster);
if (player)
{
float distance = CalculateDistance(monster, player);
if (distance < MONSTER_RUN_AWAY_DISTANCE)
{
RunAway(monster, player);
}
else
{
ChaseTarget(monster, player);
}
}
}
void HandleCombat(CMonster* monster)
{
CCharacter* target = monster->GetTarget();
if (target)
{
AttackTarget(monster, target);
}
}
void RunAway(CMonster* monster, CCharacter* player)
{
Vector3f direction = CalculateRunDirection(monster, player);
monster->Move(direction.x, direction.y, direction.z);
}
void ChaseTarget(CMonster* monster, CCharacter* target)
{
Vector3f direction = CalculateChaseDirection(monster, target);
monster->Move(direction.x, direction.y, direction.z);
}
void AttackTarget(CMonster* monster, CCharacter* target)
{
monster->Attack(target);
}
};
extern "C" __declspec(dllexport) CDeerAI* CreateDeerAI()
{
return new CDeerAI();
}
```
##### ²½ÖèËÄ£ºÅäÖ÷þÎñÆ÷Æô¶¯²ÎÊý
±à¼`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++ -o server src/server_main.cpp src/monster.cpp src/skill_manager.cpp -lengine
```
##### ²½Öè¶þ£º±àÒëµÇ¼·þÎñÆ÷
È·±£ËùÓÐÐ޸ĺóµÄ´úÂë¶¼Äܳɹ¦±àÒë¡£
```sh
g++ -o login_server src/login_server_main.cpp src/network.cpp -lengine
```
##### ²½ÖèÈý£ºÆô¶¯·þÎñÆ÷
Æô¶¯µÇ¼·þÎñÆ÷ºÍÓÎÏ··þÎñÆ÷¡£
```sh
start login_server.exe
start server.exe
```
##### ²½ÖèËÄ£ºÆô¶¯¿Í»§¶Ë
Æô¶¯¿Í»§¶Ë½øÐвâÊÔ¡£
```sh
start client.exe
```
##### µ÷ÊÔ¼¼ÇÉ
- **¼ì²é´íÎóÈÕÖ¾**£ºÈç¹û±àÒëʧ°Ü£¬×Ðϸ²é¿´´íÎóÈÕÖ¾£¬ÐÞ¸´ÏàÓ¦µÄÓï·¨´íÎó¡£
- **Öð²½µ÷ÊÔ**£ºÊ¹Óõ÷ÊÔ¹¤¾ßÖð²½Ö´ÐдúÂ룬ȷ±£Ã¿Ò»²½¶¼Äܰ´Ô¤ÆÚ¹¤×÷¡£
- **ÑéÖ¤Êý¾Ý´¦Àí**£ºÈ·ÈÏ´Ó·þÎñÆ÷·¢Ë͵ÄÊý¾ÝÊÇ·ñÕýÈ·½âÎö²¢ÏÔʾÔÚ½çÃæÉÏ¡£
#### 6. È·ÈϹ¦ÄÜÕý³£
##### ¼ì²é½ÇÉ«³õʼװ±¸
È·±£Íæ¼Ò³õʼװ±¸Ö»ÓÐľ½£ºÍ²¼Ò¡£
##### ¼ì²éµØÍ¼ºÍ¹ÖÎï
È·±£µØÍ¼Ö»ÓгöÉúµØ£¬²¢ÇÒÖ»Óм¦ºÍ¹Á½ÖÖ¹ÖÎï¡£
##### ¼ì²éµÇ¼Á÷³Ì
È·±£µÇ¼Æ÷Äܹ»Õý³£Á¬½Óµ½·þÎñÆ÷£¬²¢ÇÒÍæ¼ÒÄܹ»Ë³Àû½øÈëÓÎÏ·¡£
#### 7. ´ò°ü·¢²¼
##### ²½ÖèÒ»£ºÕûÀíÎļþ
½«ËùÓбØÒªµÄÎļþÕûÀíµ½Ò»¸öĿ¼ÖУ¬°üÀ¨£º
- `server.exe`
- `login_server.exe`
- `client.exe`
- `data`Ŀ¼
- `config`Ŀ¼
##### ²½Öè¶þ£ºÑ¹ËõÎļþ
½«ÕûÀíºÃµÄÎļþѹËõ³ÉÒ»¸öZIP°ü¡£
```sh
zip -r legend_gom_pure.zip *
```
##### ²½ÖèÈý£º·Ö·¢Îļþ
½«Ñ¹Ëõ°ü·Ö·¢¸øÐèÒªµÄÈË¡£
#### ×ܽá
ͨ¹ýÒÔÉϲ½Ö裬Äã¿ÉÒÔÔÚGOMÒýÇæÖгɹ¦´´½¨Ò»¸ö´¿¾»°æµÄ´«Ææ·þÎñ¶Ë£¬°üº¬ÅäÌ׵ĵǼÆ÷£¬²¢ÇÒÖ»°üº¬×î»ù±¾µÄÔªËØ¡£Õâ²»½öÓÐÖúÓÚ¿ª·¢ºÍ²âÊÔ£¬»¹ÄÜÌṩһ¸ö¸É¾»µÄ»ù´¡Æ½Ì¨¹©½øÒ»²½À©Õ¹¡£Ï£ÍûÕâÆª½Ì³Ì¶ÔÄãÓÐËù°ïÖú£¡
- **¼«Ö¾«¼ò**£ºÈ«Îļþ½ö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 ±ÈÆæÊ¡] DARK NORECALL NODEARRECALL NOMasterRECALL NORANDOMMOVE
```
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`£º
- ½ö±£ÁôͼƬID 0£¨Ä¾½££©ºÍ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ÃüÁ
°´±¾ÎIJÙ×÷£¬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
cd C:\legend_gom_engine\data
rm -rf maps items quests scripts
```
##### ²½ÖèÈý£º´´½¨×îС»¯µÄÊý¾ÝÎļþ
###### 3.3.1 ´´½¨½Çɫģ°å (`char_proto.txt`)
±à¼`data\char_proto.txt`Îļþ£¬Ìí¼ÓÒ»¸ö»ù´¡µÄ½Çɫģ°å¡£
```plaintext
vnum class race gender str dex int con hit point attack_defense damage resist_magic magic_defense poison_resist hp_recovery sp_recovery special_effect skills
1 WARRIOR HUMAN MALE 20 20 10 15 100 100 10 10 0 0 0 0 0
```
###### 3.3.2 ´´½¨ÎïÆ·Ä£°å (`item_proto.txt`)
±à¼`data\item_proto.txt`Îļþ£¬Ìí¼Óľ½£ºÍ²¼Ò¡£
```plaintext
vnum name type sub_type flag weight buy_price sell_price slot bitflag apply_type1 apply_value1 apply_type2 apply_value2 limit_level item_delay
1001 ľ½£ WEAPON SWORD ITEM_FLAG_WEARABLE 1 100 50 EQUIPMENT_WEAPON ITEM_APPLY_ATTACK_POWER 5 ITEM_APPLY_NONE 0 1 0
1002 ²¼ÒÂ ARMOR CLOTH ITEM_FLAG_WEARABLE 1 100 50 EQUIPMENT_ARMOR ITEM_APPLY_DEFENSE 3 ITEM_APPLY_NONE 0 1 0
```
###### 3.3.3 ´´½¨¹ÖÎïÄ£°å (`mob_proto.txt`)
±à¼`data\mob_proto.txt`Îļþ£¬Ìí¼Ó¼¦ºÍ¹Á½ÖÖ¹ÖÎï¡£
```plaintext
vnum name level exp range attack_defense damage resist_magic magic_defense poison_resist hp_recovery sp_recovery special_effect ai_script
1001 ¼¦ 1 10 5 5 10 0 0 0 1 1 0 chicken_ai.cpp
1002 ¹ 1 15 5 5 15 0 0 0 1 1 0 deer_ai.cpp
```
###### 3.3.4 ´´½¨µØÍ¼ÐÅÏ¢ (`map_info.txt`)
±à¼`data\map_info.txt`Îļþ£¬Ìí¼Ó³öÉúµØµØÍ¼¡£
```plaintext
index map_name file_name width height tile_width tile_height min_x max_x min_y max_y
1 ³öÉúµØ start.map start.wld 200 200 16 16 0 200 0 200
```
###### 3.3.5 ´´½¨AI½Å±¾
Ϊ¼¦ºÍ¹´´½¨¼òµ¥µÄAI½Å±¾Îļþ¡£
**chicken_ai.cpp**
```cpp
#include "monster.h"
class CChickenAI : public CMonsterAI
{
public:
void OnInit(CMonster* monster) override
{
// ³õʼ»¯Âß¼
}
void OnUpdate(CMonster* monster, float dt) override
{
// ¸üÐÂÂß¼
HandleMovement(monster);
HandleCombat(monster);
}
void HandleMovement(CMonster* monster)
{
CCharacter* player = GetNearestPlayer(monster);
if (player)
{
float distance = CalculateDistance(monster, player);
if (distance < MONSTER_RUN_AWAY_DISTANCE)
{
RunAway(monster, player);
}
else
{
ChaseTarget(monster, player);
}
}
}
void HandleCombat(CMonster* monster)
{
CCharacter* target = monster->GetTarget();
if (target)
{
AttackTarget(monster, target);
}
}
void RunAway(CMonster* monster, CCharacter* player)
{
Vector3f direction = CalculateRunDirection(monster, player);
monster->Move(direction.x, direction.y, direction.z);
}
void ChaseTarget(CMonster* monster, CCharacter* target)
{
Vector3f direction = CalculateChaseDirection(monster, target);
monster->Move(direction.x, direction.y, direction.z);
}
void AttackTarget(CMonster* monster, CCharacter* target)
{
monster->Attack(target);
}
};
extern "C" __declspec(dllexport) CMonsterAI* CreateChickenAI()
{
return new CChickenAI();
}
```
**deer_ai.cpp**
```cpp
#include "monster.h"
class CDeerAI : public CMonsterAI
{
public:
void OnInit(CMonster* monster) override
{
// ³õʼ»¯Âß¼
}
void OnUpdate(CMonster* monster, float dt) override
{
// ¸üÐÂÂß¼
HandleMovement(monster);
HandleCombat(monster);
}
void HandleMovement(CMonster* monster)
{
CCharacter* player = GetNearestPlayer(monster);
if (player)
{
float distance = CalculateDistance(monster, player);
if (distance < MONSTER_RUN_AWAY_DISTANCE)
{
RunAway(monster, player);
}
else
{
ChaseTarget(monster, player);
}
}
}
void HandleCombat(CMonster* monster)
{
CCharacter* target = monster->GetTarget();
if (target)
{
AttackTarget(monster, target);
}
}
void RunAway(CMonster* monster, CCharacter* player)
{
Vector3f direction = CalculateRunDirection(monster, player);
monster->Move(direction.x, direction.y, direction.z);
}
void ChaseTarget(CMonster* monster, CCharacter* target)
{
Vector3f direction = CalculateChaseDirection(monster, target);
monster->Move(direction.x, direction.y, direction.z);
}
void AttackTarget(CMonster* monster, CCharacter* target)
{
monster->Attack(target);
}
};
extern "C" __declspec(dllexport) CDeerAI* CreateDeerAI()
{
return new CDeerAI();
}
```
##### ²½ÖèËÄ£ºÅäÖ÷þÎñÆ÷Æô¶¯²ÎÊý
±à¼`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++ -o server src/server_main.cpp src/monster.cpp src/skill_manager.cpp -lengine
```
##### ²½Öè¶þ£º±àÒëµÇ¼·þÎñÆ÷
È·±£ËùÓÐÐ޸ĺóµÄ´úÂë¶¼Äܳɹ¦±àÒë¡£
```sh
g++ -o login_server src/login_server_main.cpp src/network.cpp -lengine
```
##### ²½ÖèÈý£ºÆô¶¯·þÎñÆ÷
Æô¶¯µÇ¼·þÎñÆ÷ºÍÓÎÏ··þÎñÆ÷¡£
```sh
start login_server.exe
start server.exe
```
##### ²½ÖèËÄ£ºÆô¶¯¿Í»§¶Ë
Æô¶¯¿Í»§¶Ë½øÐвâÊÔ¡£
```sh
start client.exe
```
##### µ÷ÊÔ¼¼ÇÉ
- **¼ì²é´íÎóÈÕÖ¾**£ºÈç¹û±àÒëʧ°Ü£¬×Ðϸ²é¿´´íÎóÈÕÖ¾£¬ÐÞ¸´ÏàÓ¦µÄÓï·¨´íÎó¡£
- **Öð²½µ÷ÊÔ**£ºÊ¹Óõ÷ÊÔ¹¤¾ßÖð²½Ö´ÐдúÂ룬ȷ±£Ã¿Ò»²½¶¼Äܰ´Ô¤ÆÚ¹¤×÷¡£
- **ÑéÖ¤Êý¾Ý´¦Àí**£ºÈ·ÈÏ´Ó·þÎñÆ÷·¢Ë͵ÄÊý¾ÝÊÇ·ñÕýÈ·½âÎö²¢ÏÔʾÔÚ½çÃæÉÏ¡£
#### 6. È·ÈϹ¦ÄÜÕý³£
##### ¼ì²é½ÇÉ«³õʼװ±¸
È·±£Íæ¼Ò³õʼװ±¸Ö»ÓÐľ½£ºÍ²¼Ò¡£
##### ¼ì²éµØÍ¼ºÍ¹ÖÎï
È·±£µØÍ¼Ö»ÓгöÉúµØ£¬²¢ÇÒÖ»Óм¦ºÍ¹Á½ÖÖ¹ÖÎï¡£
##### ¼ì²éµÇ¼Á÷³Ì
È·±£µÇ¼Æ÷Äܹ»Õý³£Á¬½Óµ½·þÎñÆ÷£¬²¢ÇÒÍæ¼ÒÄܹ»Ë³Àû½øÈëÓÎÏ·¡£
#### 7. ´ò°ü·¢²¼
##### ²½ÖèÒ»£ºÕûÀíÎļþ
½«ËùÓбØÒªµÄÎļþÕûÀíµ½Ò»¸öĿ¼ÖУ¬°üÀ¨£º
- `server.exe`
- `login_server.exe`
- `client.exe`
- `data`Ŀ¼
- `config`Ŀ¼
##### ²½Öè¶þ£ºÑ¹ËõÎļþ
½«ÕûÀíºÃµÄÎļþѹËõ³ÉÒ»¸öZIP°ü¡£
```sh
zip -r legend_gom_pure.zip *
```
##### ²½ÖèÈý£º·Ö·¢Îļþ
½«Ñ¹Ëõ°ü·Ö·¢¸øÐèÒªµÄÈË¡£
#### ×ܽá
ͨ¹ýÒÔÉϲ½Ö裬Äã¿ÉÒÔÔÚGOMÒýÇæÖгɹ¦´´½¨Ò»¸ö´¿¾»°æµÄ´«Ææ·þÎñ¶Ë£¬°üº¬ÅäÌ׵ĵǼÆ÷£¬²¢ÇÒÖ»°üº¬×î»ù±¾µÄÔªËØ¡£Õâ²»½öÓÐÖúÓÚ¿ª·¢ºÍ²âÊÔ£¬»¹ÄÜÌṩһ¸ö¸É¾»µÄ»ù´¡Æ½Ì¨¹©½øÒ»²½À©Õ¹¡£Ï£ÍûÕâÆª½Ì³Ì¶ÔÄãÓÐËù°ïÖú£¡

