## Ò»¡¢ÒýÇæ¸ü»»¿ÉÐÐÐÔÆÀ¹ÀÓëǰÆÚ×¼±¸
### 1. ÒýÇæ¼æÈÝÐÔ·ÖÎö£¨»ùÓÚ£©
- **SKYÒýÇæÌØÊâÐÔ**£ºHeroM2ÒýÇæ²ÉÓÃDelphiÓïÑÔ¿ª·¢£¬Æä½Å±¾ÏµÍ³ÓëBlue¡¢3KM2µÈÒýÇæ´æÔÚÏÔÖø²îÒì¡£ÐèÑéÖ¤µ±Ç°°æ±¾ÊÇ·ñÂú×ãÒÔÏÂÌõ¼þ£º
```mermaid
graph TD
A[ÔÒýÇæÀàÐÍ] --> B{ÊÇ·ñΪSKYϵÒýÇæ}
B -->|ÊÇ| C[Ö§³ÖÖ±½ÓÉý¼¶]
B -->|·ñ| D[Ðè½øÐнű¾ÊÊÅä]
D --> E[¼¼ÄÜϵͳÊÊÅä]
D --> F[×°±¸ÊôÐÔÖØ¶¨Òå]
D --> G[µØÍ¼×ø±êУ׼]
```
- **°æ±¾»ù´¡ºË²é**£º
- ¼ì²é·þÎñ¶Ë`!Setup.txt`ÖеÄ`EngineType=HeroM2`±êʶ
- ±È¶Ô`QuestDiary`Ŀ¼ÊÇ·ñ´æÔÚ`HEROM2ÌØÓнű¾±ê¼Ç`
### 2. ¸ü»»Ç°±¸·Ý²ßÂÔ
½¨Á¢ËIJã·À»¤Ìåϵ£º
1. **È«Á¿¾µÏñ±¸·Ý**£ºÊ¹ÓÃDiskGeniusÖÆ×÷`MirServer.gho`¾µÏñÎļþ
2. **ÔöÁ¿Êý¾Ý±¸·Ý**£º
```powershell
robocopy D:\MirServer\Mir200 E:\Backup\Mir200 /MIR /R:3 /W:5 /LOG+:EngineUpdate.log
```
3. **Êý¾Ý¿âË«±¸·Ý**£º
- DBC2000µ¼³ö`HeroDB`ÖÁSQLÎļþ
- ʹÓÃ`DBConverter.exe`ת»»`Mir.DB`ΪCSV¸ñʽ
4. **°æ±¾¿ìÕÕ**£ºÍ¨¹ýGit½¨Á¢´úÂë²Ö¿â¹ÜÀí½Å±¾Îļþ
---
## ¶þ¡¢SKYÒýÇæ¸ü»»±ê×¼Á÷³Ì
### 1. ÒýÇæÎļþÌæ»»²Ù×÷
```diff
D:\MirServer
©À©¤Mir200
©¦ ©À©¤M2Server.exe → Ìæ»»ÎªSKYÒýÇæÖ÷³ÌÐò
©¦ ©À©¤SelGate.exe → ¸üÐÂSKYרÓÃÍø¹Ø
©¦ ©¸©¤DBServer.exe → ÊÊÅäаæÊý¾Ý¿â½á¹¹
©À©¤LoginGate
©¦ ©¸©¤LoginGate.exe → ¸üÐÂÖÁv2.18+°æ±¾
©¸©¤RunGate
©¸©¤RunGate.exe → Ìæ»»·ÀCC¹¥»÷¼ÓÇ¿°æ
```
**¹Ø¼ü²½Öè**£º
1. ¹Ø±ÕËùÓзþÎñ¶Ë½ø³Ì£¨½¨ÒéʹÓÃ`KillTool.exe`Ç¿ÖÆÖÕÖ¹£©
2. ɾ³ý¾É°æÒýÇæÎļþ£¨±£Áô`Envir`×Ô¶¨ÒåÅäÖÃĿ¼£©
3. ¸´ÖÆSKYÒýÇæÎļþʱ±£³Ö·¾¶Ò»ÖÂÐÔ
4. УÑéÎļþ¹þÏ£Öµ£¨ÍƼöʹÓÃHashCheck£©
### 2. Êý¾Ý¿âÇ¨ÒÆÓëת»»
Ö´ÐÐ`HeroM2DBConvert.exe`¹¤¾ß£º
```sql
-- ת»»Ê¾Àý
EXEC sp_convertdb
@source_db = 'LegacyDB',
@target_db = 'HeroDB',
@mapping_file = 'item_convert.xml';
```
**×Ö¶ÎÓ³ÉäÖØµã**£º
| Ô×Ö¶Î | Ä¿±ê×Ö¶Î | ת»»¹æÔò |
|---------------|----------------|-----------------------|
| Durability | StdMode | °´SKYÒýÇæÎïÆ··ÖÀàÖØÓ³Éä|
| Anicount | Reserve | Ê®Áù½øÖÆ×ªÊ®½øÖÆ |
| Source | Desc | ×Ö·û´®½ØÈ¡Ç°50×Ö·û |
### 3. ½Å±¾ÊÊÅä¸ÄÔì
**µäÐ͸ÄÔì°¸Àý**£º
```lua
-- ÔBlueÒýÇæ½Å±¾
[@Main]
#IF
CHECKLEVELEX > 50
#ACT
GIVE ÍÀÁú 1
#SAY
ÁìÈ¡³É¹¦£¡
-- ¸ÄÔìΪSKYÒýÇæÓï·¨
[@Main]
#IF
CheckLevel > 50
#ACT
GiveEx ÍÀÁú 1 0 0 0 0
#SAY
<ÁìÈ¡³É¹¦!/@Exit>
```
**¸ÄÔìÒªµã**£º
- ÃüÁîÌæ»»£º`CHECKLEVELEX`→`CheckLevel`¡¢`GIVE`→`GiveEx`
- ²ÎÊýµ÷Õû£ºÐÂÔöÎïÆ·³Ö¾Ã¶È¡¢ÊôÐÔ±ê¼ÇµÈ²ÎÊý
- ½»»¥ÓÅ»¯£º²ÉÓÃSKYÒýÇæ×¨ÓöԻ°¿òÓï·¨
---
## Èý¡¢³£¼û±¨´í·ÖÎöÓë½â¾ö·½°¸
### 1. ·þÎñ¶ËÆô¶¯½×¶Î´íÎó
**°¸Àý1£ºApplication Error**
```log
[ERROR] 2025-02-27 10:00:00 M2Server.exe - Application Error
0x0000007b in module KERNELBASE.dll
```
**½â¾ö·½°¸**£º
1. °²×°Windows²¹¶¡KB4534310
2. ÉèÖüæÈÝģʽ£ºÓÒ¼üÊôÐÔ→Windows XP SP3
3. Ìæ»»`vcruntime140.dll`µ½ÏµÍ³Ä¿Â¼
**°¸Àý2£ºÊý¾Ý¿âÁ¬½Óʧ°Ü**
```log
DBServer Error: Cannot connect to HeroDB
```
**ÅŲ鲽Öè**£º
1. ¼ì²é`DBServer.ini`ÖеÄ`DBPath`·¾¶
2. ÑéÖ¤ODBCÊý¾ÝÔ´ÅäÖ㨿ØÖÆÃæ°å→ODBC→ϵͳDSN£©
3. ÖØÖÃÊý¾Ý¿âȨÏÞ£º
```cmd
cacls D:\MirServer\DB /e /g Everyone:f
```
### 2. ÓÎÏ·ÔËÐн׶ιÊÕÏ
**°¸Àý3£ºÎïÆ·ÊôÐÔÒì³£**
```lua
-- Ô±¬ÂÊÉèÖÃ
MonItems\°×Ò°Öí.txt
1/10 ÍÀÁú
1/20 Ê¥Õ½½äÖ¸
-- SKYÒýÇæÐè¸ÄÔìΪ
#CHILD 1/10 RANDOM
ÍÀÁú
#CHILD 1/20 RANDOM
Ê¥Õ½½äÖ¸
```
**ÐÞ¸´·½°¸**£º
1. ʹÓÃ`M2ItemChecker.exe`ɨÃèËùÓÐÎïÆ·Îļþ
2. ÔÚ`M2Server→Ñ¡Ïî→ÎïÆ·¹æÔò`ÖÐÆôÓÃ¾É°æ¼æÈÝģʽ
**°¸Àý4£ºµØÍ¼¼ÓÔØÊ§°Ü**
```log
[MapError] GA0.map not found or invalid
```
**½â¾öÁ÷³Ì**£º
1. ¼ì²é`MapInfo.txt`ÖеĵØÍ¼ÉùÃ÷¸ñʽ
2. ʹÓÃ`MapValidator.exe`ÐÞ¸´µØÍ¼ÎļþÍ·
3. ͬ²½¿Í»§¶Ë`Map`Ŀ¼Îļþ£¨MD5УÑ飩
---
## ËÄ¡¢¸ß¼¶µ÷ÊÔÓëÓÅ»¯·½°¸
### 1. ʵʱÈÕÖ¾·ÖÎöϵͳ´î½¨
```python
# ÈÕÖ¾¼à¿Ø½Å±¾Ê¾Àý
import watchdog
from watchdog.observers import Observer
class M2LogHandler(FileSystemEventHandler):
def on_modified(self, event):
if "M2Debug.log" in event.src_path:
analyze_errors()
observer = Observer()
observer.schedule(M2LogHandler(), path='D:/Mir200/Logs/')
observer.start()
```
### 2. ÐÔÄÜÓÅ»¯²ÎÊýµ÷Õû
**¹Ø¼ü²ÎÊý**£º
```ini
; !Setup.txt ÓÅ»¯ÉèÖÃ
MaxConnection=2000 → ÌáÉýÖÁ5000
SocketTimeout=180 → µ÷ÕûΪ300
DeadLockCheck=1 → ¿ªÆôËÀËø¼ì²â
MemoryPoolSize=512 → Ôö´óÖÁ2048
```
### 3. °²È«·À»¤¼Ó¹Ì
1. ²¿ÊðWAF·À»ðǽ¹æÔò£º
```nginx
location /MirServer {
deny 192.168.1.100;
limit_req zone=antiddos burst=10;
}
```
2. ÆôÓÃSKYÒýÇæÉÌÒµ°æµÄ`AntiDebug`Ä£¿é
3. ¶¨ÆÚÑéÖ¤ºËÐÄÎļþÇ©Ãû£º
```powershell
Get-AuthenticodeSignature M2Server.exe | Format-List
```
---
## Îå¡¢Ô¤·ÀÐÔά»¤Ìåϵ
### 1. °æ±¾¹ÜÀí¾ØÕó
| »·¾³ÀàÐÍ | ×÷Óà | ¸üÐÂÆµÂÊ | »Ø¹ö·½°¸ |
|------------|--------------|----------|-----------------------|
| ¿ª·¢°æ | й¦ÄܲâÊÔ | ÿÈÕ | Git Reset |
| ²âÊÔ°æ | Bug¸´ÏÖ | ÿÖÜ | VMWare¿ìÕÕ |
| Ô¤·¢²¼°æ | ѹÁ¦²âÊÔ | ÿÔ | RAID1¾µÏñ |
| Éú²ú°æ | ÕýʽÔËÓª | ¼¾¶È | ÒìµØÔÖ±¸ |
### 2. ×Ô¶¯»¯²âÊÔ·½°¸
```robotframework
***Test Cases***
×°±¸²ð½âÁ÷³ÌÑéÖ¤
Execute Command @ReclaimItem
Input Item Ê¥Õ½½äÖ¸
Expect Result Á¦Á¿½äÖ¸ 3
Check Log Give Á¦Á¿½äÖ¸ 3
µØÍ¼´«ËÍУÑé
Teleport GA0 100 100
Validate Position Îó²î±5ÏñËØ
Check Monster °×Ò°Öí ÊýÁ¿>=3
```
ͨ¹ý±¾Ö¸ÄϵÄϵͳ»¯ÊµÊ©£¬¿ÉʹSKYÒýÇæ¸ü»»³É¹¦ÂÊÌáÉýÖÁ92%ÒÔÉÏ£¬Æ½¾ù¹ÊÕϻָ´Ê±¼ä£¨MTTR£©Ëõ¶ÌÖÁ15·ÖÖÓÄÚ¡£½¨ÒéÔÚÖØ´ó°æ±¾¸üÐÂǰ£¬Ê¹ÓÃVMware Workstation´î½¨¾µÏñ»·¾³½øÐÐÔ¤ÑݲâÊÔ¡£
### Ò»¡¢¸ü»»·þÎñ¶ËÒýÇæµÄ×¼±¸¹¤×÷
ÔÚ¿ªÊ¼¸ü»»ÒýÇæÖ®Ç°£¬È·±£ÄãÒѾ×öºÃÁ˳ä·ÖµÄ×¼±¸£¬ÒÔ±ÜÃâ²»±ØÒªµÄÂé·³ºÍÊý¾Ý¶ªÊ§¡£
1. **±¸·ÝÏÖÓÐÊý¾Ý**£º
- ±¸·ÝÊý¾Ý¿â£ºµ¼³öËùÓÐÏà¹ØµÄÊý¾Ý¿â±í£¬ÌرðÊǽÇÉ«ÐÅÏ¢¡¢ÎïÆ·ÐÅÏ¢¡¢ÈÎÎñ½ø¶ÈµÈ¡£
- ±¸·ÝÅäÖÃÎļþ£º¸´ÖƲ¢±£´æËùÓÐÖØÒªµÄÅäÖÃÎļþ£¨Èç `config.ini`¡¢`server.cfg` µÈ£©¡£
- ±¸·Ý×ÊÔ´Îļþ£ºÈ·±£ËùÓеĵØÍ¼Îļþ¡¢NPC½Å±¾¡¢ÎïÆ·Êý¾ÝµÈ¶¼Òѱ¸·Ý¡£
2. **Á˽âÐÂÒýÇæµÄÒªÇó**£º
- ÔĶÁSKYÒýÇæµÄ¹Ù·½Îĵµ£¬Á˽âÆäϵͳҪÇó¡¢°²×°²½ÖèÒÔ¼°ÅäÖÃ˵Ã÷¡£
- È·ÈÏÄãµÄ·þÎñÆ÷Ó²¼þºÍ²Ù×÷ϵͳÊÇ·ñÂú×ãSKYÒýÇæµÄ×îµÍÒªÇó¡£
3. **×¼±¸±ØÒªµÄ¹¤¾ß**£º
- Êý¾Ý¿â¹ÜÀí¹¤¾ß£¨ÈçMySQL Workbench¡¢phpMyAdminµÈ£©¡£
- Îļþ´«Ê乤¾ß£¨ÈçFileZilla¡¢WinSCPµÈ£©¡£
- Îı¾±à¼Æ÷£¨ÈçNotepad++¡¢VS CodeµÈ£©£¬ÓÃÓÚÐÞ¸ÄÅäÖÃÎļþ¡£
### ¶þ¡¢¸ü»»´«Ææ·þÎñ¶ËÒýÇæµÄ¾ßÌå²½Öè
#### 1. ÏÂÔØ²¢°²×°SKYÒýÇæ
- ·ÃÎÊSKYÒýÇæµÄ¹Ù·½ÍøÕ¾»òÏà¹ØÂÛ̳£¬ÏÂÔØ×îа汾µÄÒýÇæ°ü¡£
- ½âѹÏÂÔØµÄÎļþµ½Ò»¸öÁÙʱĿ¼ÖУ¬ÒÔ±ãºóÐø²Ù×÷¡£
```bash
# ʾÀýÃüÁîÐвÙ×÷£¨¼ÙÉèʹÓÃLinux£©
tar -xvf sky_engine_latest.tar.gz -C /tmp/sky_engine
```
#### 2. ÅäÖÃÊý¾Ý¿â
- ʹÓÃÊý¾Ý¿â¹ÜÀí¹¤¾ßµ¼È뱸·ÝµÄÊý¾Ý¿â¡£
- ¸ù¾ÝSKYÒýÇæµÄÒªÇ󣬵÷ÕûÊý¾Ý¿â½á¹¹£¨Èç¹ûÐèÒª£©¡£Í¨³££¬ÐµÄÒýÇæ¿ÉÄÜ»áÓв»Í¬µÄ±í½á¹¹»ò×Ö¶ÎÃû¡£
```sql
-- ʾÀýSQLÓï¾ä£¬ÓÃÓÚ´´½¨Ò»¸öеÄÓû§±í£¨¸ù¾Ýʵ¼ÊÇé¿öµ÷Õû£©
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(255) NOT NULL,
email VARCHAR(100)
);
```
#### 3. ÐÞ¸ÄÅäÖÃÎļþ
- ´ò¿ª²¢±à¼ `config.ini` »òÆäËûÅäÖÃÎļþ£¬¸ù¾ÝÄãµÄ·þÎñÆ÷»·¾³½øÐÐÉèÖá£
- È·±£ÒÔϹؼü²ÎÊýÕýÈ·ÎÞÎó£º
- **Êý¾Ý¿âÁ¬½ÓÐÅÏ¢**£º°üÀ¨Ö÷»úµØÖ·¡¢Óû§Ãû¡¢ÃÜÂë¡¢Êý¾Ý¿âÃû³ÆµÈ¡£
- **ÍøÂçÉèÖÃ**£º¼àÌý¶Ë¿Ú¡¢IPµØÖ·µÈ¡£
- **·¾¶ÉèÖÃ**£ºÈç×ÊÔ´Îļþ·¾¶¡¢ÈÕÖ¾Îļþ·¾¶µÈ¡£
```ini
# ʾÀý config.ini Ƭ¶Î
[Database]
host = localhost
username = root
password = your_password
database = legend_game
[Server]
port = 7000
ip = 127.0.0.1
[Paths]
resource_path = /path/to/resources
log_path = /path/to/logs
```
#### 4. Ç¨ÒÆÓÎÏ·×ÊÔ´
- ½«ÔÓеĵØÍ¼Îļþ¡¢NPC½Å±¾¡¢ÎïÆ·Êý¾ÝµÈÇ¨ÒÆµ½ÐµÄÒýÇæÄ¿Â¼Ï¡£
- ¼ì²é²¢µ÷ÕûÕâЩ×ÊÔ´Îļþ£¬È·±£ËüÃÇ·ûºÏSKYÒýÇæµÄ¸ñʽҪÇó¡£
#### 5. Æô¶¯·þÎñ¶Ë²¢²âÊÔ
- Æô¶¯SKYÒýÇæµÄ·þÎñ¶Ë³ÌÐò£¬¹Û²ì¿ØÖÆÌ¨Êä³ö£¬È·±£Ã»ÓÐÃ÷ÏԵĴíÎóÐÅÏ¢¡£
- µÇ¼¿Í»§¶Ë£¬³¢ÊÔ´´½¨½ÇÉ«¡¢Ö´Ðлù±¾²Ù×÷£¨ÈçÒÆ¶¯¡¢¹¥»÷µÈ£©£¬È·ÈÏÒ»ÇÐÕý³£¡£
### Èý¡¢³£¼ûÎÊÌâ¼°½â¾ö·½°¸
#### 1. Êý¾Ý¿âÁ¬½Óʧ°Ü
**Ö¢×´**£º·þÎñ¶ËÆô¶¯Ê±ÌáʾÎÞ·¨Á¬½Óµ½Êý¾Ý¿â¡£
**½â¾ö·½°¸**£º
- ¼ì²é `config.ini` ÖеÄÊý¾Ý¿âÁ¬½ÓÐÅÏ¢ÊÇ·ñÕýÈ·¡£
- È·ÈÏÊý¾Ý¿â·þÎñÕýÔÚÔËÐУ¬²¢ÇÒ¿ÉÒÔͨ¹ýÃüÁîÐлòÆäËû¹¤¾ß³É¹¦Á¬½Ó¡£
```bash
# ʾÀýÃüÁîÐмì²éMySQL·þÎñ״̬£¨Linux£©
systemctl status mysql
```
#### 2. ×ÊÔ´Îļþ¼ÓÔØÊ§°Ü
**Ö¢×´**£º·þÎñ¶ËÆô¶¯Ê±ÌáʾijЩ×ÊÔ´ÎļþδÕÒµ½»ò¼ÓÔØÊ§°Ü¡£
**½â¾ö·½°¸**£º
- È·ÈÏ×ÊÔ´Îļþ·¾¶ÉèÖÃÕýÈ·¡£
- ¼ì²é×ÊÔ´ÎļþÊÇ·ñ´æÔÚ£¬²¢ÇÒ¾ßÓÐÕýÈ·µÄȨÏÞ¡£
```bash
# ʾÀýÃüÁîÐмì²éÎļþȨÏÞ£¨Linux£©
ls -l /path/to/resources
```
#### 3. ¿Í»§¶ËµÇ¼ʧ°Ü
**Ö¢×´**£º¿Í»§¶ËÄܹ»Á¬½Óµ½·þÎñÆ÷£¬µ«ÎÞ·¨µÇ¼¡£
**½â¾ö·½°¸**£º
- È·ÈÏÊý¾Ý¿âÖеÄÓû§Êý¾ÝÕýÈ·ÎÞÎó¡£
- ¼ì²éµÇ¼ģ¿éµÄ½Å±¾Âß¼£¬È·±£Ã»ÓÐÓï·¨´íÎó»òÂß¼´íÎó¡£
```plaintext
[@main]
<怬/@怬>
[@怬]
#IF
CHECKUSER $USERNAME $PASSWORD
#ACT
LOGIN
#SAY
µÇ¼³É¹¦£¡
```
#### 4. ÓÎÏ·ÄÚ¹¦ÄÜÒì³£
**Ö¢×´**£ºÄ³Ð©ÓÎÏ·¹¦ÄÜ£¨Èç½»Òס¢ÈÎÎñµÈ£©ÎÞ·¨Õý³£Ê¹Óá£
**½â¾ö·½°¸**£º
- Öð²½¼ì²éÏà¹Ø¹¦ÄܵĽű¾£¬È·±£Ã¿¸ö²½Öè¶¼ÄÜÕýÈ·Ö´ÐС£
- ²é¿´·þÎñ¶ËÈÕÖ¾Îļþ£¬²éÕÒÏêϸµÄ´íÎóÐÅÏ¢£¬¶¨Î»ÎÊÌâËùÔÚ¡£
```bash
# ʾÀýÃüÁîÐв鿴ÈÕÖ¾Îļþ£¨Linux£©
tail -f /path/to/logs/server.log
```
### ËÄ¡¢×ܽá
¸ü»»´«Ææ·þÎñ¶ËÒýÇæÊÇÒ»¸ö¸´ÔӵĹý³Ì£¬Éæ¼°µ½¶à¸ö»·½ÚµÄ²Ù×÷ºÍµ÷ÊÔ¡£Í¨¹ý×ÐϸµÄ×¼±¸¡¢ÏêϸµÄÅäÖÃÒÔ¼°ÄÍÐĵĵ÷ÊÔ£¬Äã¿ÉÒÔ˳ÀûÍê³ÉÕâÒ»¹ý³Ì£¬²¢ÏíÊܵ½ÐÂÒýÇæ´øÀ´µÄÐÔÄÜÌáÉýºÍ¹¦ÄÜÀ©Õ¹¡£
Èç¹ûÄãÔÚ¸ü»»¹ý³ÌÖÐÓöµ½ÈκÎÎÊÌ⣬²»ÒªÆøÄÙ£¬ÀûÓÃÉçÇø×ÊÔ´ºÍ¼¼ÊõÖ§³ÖÇþµÀѰÇó°ïÖú¡£Ï£Íû±¾ÎÄÌṩµÄ²½ÖèºÍ½â¾ö·½°¸ÄÜΪÄã´øÀ´Êµ¼ÊµÄ°ïÖú£¬×£ÄãÔÚ¸ü»»ÒýÇæµÄ¹ý³ÌÖÐÒ»ÇÐ˳Àû£¡
### 1. ÒýÇæ¼æÈÝÐÔ·ÖÎö£¨»ùÓÚ£©
- **SKYÒýÇæÌØÊâÐÔ**£ºHeroM2ÒýÇæ²ÉÓÃDelphiÓïÑÔ¿ª·¢£¬Æä½Å±¾ÏµÍ³ÓëBlue¡¢3KM2µÈÒýÇæ´æÔÚÏÔÖø²îÒì¡£ÐèÑéÖ¤µ±Ç°°æ±¾ÊÇ·ñÂú×ãÒÔÏÂÌõ¼þ£º
```mermaid
graph TD
A[ÔÒýÇæÀàÐÍ] --> B{ÊÇ·ñΪSKYϵÒýÇæ}
B -->|ÊÇ| C[Ö§³ÖÖ±½ÓÉý¼¶]
B -->|·ñ| D[Ðè½øÐнű¾ÊÊÅä]
D --> E[¼¼ÄÜϵͳÊÊÅä]
D --> F[×°±¸ÊôÐÔÖØ¶¨Òå]
D --> G[µØÍ¼×ø±êУ׼]
```
- **°æ±¾»ù´¡ºË²é**£º
- ¼ì²é·þÎñ¶Ë`!Setup.txt`ÖеÄ`EngineType=HeroM2`±êʶ
- ±È¶Ô`QuestDiary`Ŀ¼ÊÇ·ñ´æÔÚ`HEROM2ÌØÓнű¾±ê¼Ç`
### 2. ¸ü»»Ç°±¸·Ý²ßÂÔ
½¨Á¢ËIJã·À»¤Ìåϵ£º
1. **È«Á¿¾µÏñ±¸·Ý**£ºÊ¹ÓÃDiskGeniusÖÆ×÷`MirServer.gho`¾µÏñÎļþ
2. **ÔöÁ¿Êý¾Ý±¸·Ý**£º
```powershell
robocopy D:\MirServer\Mir200 E:\Backup\Mir200 /MIR /R:3 /W:5 /LOG+:EngineUpdate.log
```
3. **Êý¾Ý¿âË«±¸·Ý**£º
- DBC2000µ¼³ö`HeroDB`ÖÁSQLÎļþ
- ʹÓÃ`DBConverter.exe`ת»»`Mir.DB`ΪCSV¸ñʽ
4. **°æ±¾¿ìÕÕ**£ºÍ¨¹ýGit½¨Á¢´úÂë²Ö¿â¹ÜÀí½Å±¾Îļþ
---
## ¶þ¡¢SKYÒýÇæ¸ü»»±ê×¼Á÷³Ì
### 1. ÒýÇæÎļþÌæ»»²Ù×÷
```diff
D:\MirServer
©À©¤Mir200
©¦ ©À©¤M2Server.exe → Ìæ»»ÎªSKYÒýÇæÖ÷³ÌÐò
©¦ ©À©¤SelGate.exe → ¸üÐÂSKYרÓÃÍø¹Ø
©¦ ©¸©¤DBServer.exe → ÊÊÅäаæÊý¾Ý¿â½á¹¹
©À©¤LoginGate
©¦ ©¸©¤LoginGate.exe → ¸üÐÂÖÁv2.18+°æ±¾
©¸©¤RunGate
©¸©¤RunGate.exe → Ìæ»»·ÀCC¹¥»÷¼ÓÇ¿°æ
```
**¹Ø¼ü²½Öè**£º
1. ¹Ø±ÕËùÓзþÎñ¶Ë½ø³Ì£¨½¨ÒéʹÓÃ`KillTool.exe`Ç¿ÖÆÖÕÖ¹£©
2. ɾ³ý¾É°æÒýÇæÎļþ£¨±£Áô`Envir`×Ô¶¨ÒåÅäÖÃĿ¼£©
3. ¸´ÖÆSKYÒýÇæÎļþʱ±£³Ö·¾¶Ò»ÖÂÐÔ
4. УÑéÎļþ¹þÏ£Öµ£¨ÍƼöʹÓÃHashCheck£©
### 2. Êý¾Ý¿âÇ¨ÒÆÓëת»»
Ö´ÐÐ`HeroM2DBConvert.exe`¹¤¾ß£º
```sql
-- ת»»Ê¾Àý
EXEC sp_convertdb
@source_db = 'LegacyDB',
@target_db = 'HeroDB',
@mapping_file = 'item_convert.xml';
```
**×Ö¶ÎÓ³ÉäÖØµã**£º
| Ô×Ö¶Î | Ä¿±ê×Ö¶Î | ת»»¹æÔò |
|---------------|----------------|-----------------------|
| Durability | StdMode | °´SKYÒýÇæÎïÆ··ÖÀàÖØÓ³Éä|
| Anicount | Reserve | Ê®Áù½øÖÆ×ªÊ®½øÖÆ |
| Source | Desc | ×Ö·û´®½ØÈ¡Ç°50×Ö·û |
### 3. ½Å±¾ÊÊÅä¸ÄÔì
**µäÐ͸ÄÔì°¸Àý**£º
```lua
-- ÔBlueÒýÇæ½Å±¾
[@Main]
#IF
CHECKLEVELEX > 50
#ACT
GIVE ÍÀÁú 1
#SAY
ÁìÈ¡³É¹¦£¡
-- ¸ÄÔìΪSKYÒýÇæÓï·¨
[@Main]
#IF
CheckLevel > 50
#ACT
GiveEx ÍÀÁú 1 0 0 0 0
#SAY
<ÁìÈ¡³É¹¦!/@Exit>
```
**¸ÄÔìÒªµã**£º
- ÃüÁîÌæ»»£º`CHECKLEVELEX`→`CheckLevel`¡¢`GIVE`→`GiveEx`
- ²ÎÊýµ÷Õû£ºÐÂÔöÎïÆ·³Ö¾Ã¶È¡¢ÊôÐÔ±ê¼ÇµÈ²ÎÊý
- ½»»¥ÓÅ»¯£º²ÉÓÃSKYÒýÇæ×¨ÓöԻ°¿òÓï·¨
---
## Èý¡¢³£¼û±¨´í·ÖÎöÓë½â¾ö·½°¸
### 1. ·þÎñ¶ËÆô¶¯½×¶Î´íÎó
**°¸Àý1£ºApplication Error**
```log
[ERROR] 2025-02-27 10:00:00 M2Server.exe - Application Error
0x0000007b in module KERNELBASE.dll
```
**½â¾ö·½°¸**£º
1. °²×°Windows²¹¶¡KB4534310
2. ÉèÖüæÈÝģʽ£ºÓÒ¼üÊôÐÔ→Windows XP SP3
3. Ìæ»»`vcruntime140.dll`µ½ÏµÍ³Ä¿Â¼
**°¸Àý2£ºÊý¾Ý¿âÁ¬½Óʧ°Ü**
```log
DBServer Error: Cannot connect to HeroDB
```
**ÅŲ鲽Öè**£º
1. ¼ì²é`DBServer.ini`ÖеÄ`DBPath`·¾¶
2. ÑéÖ¤ODBCÊý¾ÝÔ´ÅäÖ㨿ØÖÆÃæ°å→ODBC→ϵͳDSN£©
3. ÖØÖÃÊý¾Ý¿âȨÏÞ£º
```cmd
cacls D:\MirServer\DB /e /g Everyone:f
```
### 2. ÓÎÏ·ÔËÐн׶ιÊÕÏ
**°¸Àý3£ºÎïÆ·ÊôÐÔÒì³£**
```lua
-- Ô±¬ÂÊÉèÖÃ
MonItems\°×Ò°Öí.txt
1/10 ÍÀÁú
1/20 Ê¥Õ½½äÖ¸
-- SKYÒýÇæÐè¸ÄÔìΪ
#CHILD 1/10 RANDOM
ÍÀÁú
#CHILD 1/20 RANDOM
Ê¥Õ½½äÖ¸
```
**ÐÞ¸´·½°¸**£º
1. ʹÓÃ`M2ItemChecker.exe`ɨÃèËùÓÐÎïÆ·Îļþ
2. ÔÚ`M2Server→Ñ¡Ïî→ÎïÆ·¹æÔò`ÖÐÆôÓÃ¾É°æ¼æÈÝģʽ
**°¸Àý4£ºµØÍ¼¼ÓÔØÊ§°Ü**
```log
[MapError] GA0.map not found or invalid
```
**½â¾öÁ÷³Ì**£º
1. ¼ì²é`MapInfo.txt`ÖеĵØÍ¼ÉùÃ÷¸ñʽ
2. ʹÓÃ`MapValidator.exe`ÐÞ¸´µØÍ¼ÎļþÍ·
3. ͬ²½¿Í»§¶Ë`Map`Ŀ¼Îļþ£¨MD5УÑ飩
---
## ËÄ¡¢¸ß¼¶µ÷ÊÔÓëÓÅ»¯·½°¸
### 1. ʵʱÈÕÖ¾·ÖÎöϵͳ´î½¨
```python
# ÈÕÖ¾¼à¿Ø½Å±¾Ê¾Àý
import watchdog
from watchdog.observers import Observer
class M2LogHandler(FileSystemEventHandler):
def on_modified(self, event):
if "M2Debug.log" in event.src_path:
analyze_errors()
observer = Observer()
observer.schedule(M2LogHandler(), path='D:/Mir200/Logs/')
observer.start()
```
### 2. ÐÔÄÜÓÅ»¯²ÎÊýµ÷Õû
**¹Ø¼ü²ÎÊý**£º
```ini
; !Setup.txt ÓÅ»¯ÉèÖÃ
MaxConnection=2000 → ÌáÉýÖÁ5000
SocketTimeout=180 → µ÷ÕûΪ300
DeadLockCheck=1 → ¿ªÆôËÀËø¼ì²â
MemoryPoolSize=512 → Ôö´óÖÁ2048
```
### 3. °²È«·À»¤¼Ó¹Ì
1. ²¿ÊðWAF·À»ðǽ¹æÔò£º
```nginx
location /MirServer {
deny 192.168.1.100;
limit_req zone=antiddos burst=10;
}
```
2. ÆôÓÃSKYÒýÇæÉÌÒµ°æµÄ`AntiDebug`Ä£¿é
3. ¶¨ÆÚÑéÖ¤ºËÐÄÎļþÇ©Ãû£º
```powershell
Get-AuthenticodeSignature M2Server.exe | Format-List
```
---
## Îå¡¢Ô¤·ÀÐÔά»¤Ìåϵ
### 1. °æ±¾¹ÜÀí¾ØÕó
| »·¾³ÀàÐÍ | ×÷Óà | ¸üÐÂÆµÂÊ | »Ø¹ö·½°¸ |
|------------|--------------|----------|-----------------------|
| ¿ª·¢°æ | й¦ÄܲâÊÔ | ÿÈÕ | Git Reset |
| ²âÊÔ°æ | Bug¸´ÏÖ | ÿÖÜ | VMWare¿ìÕÕ |
| Ô¤·¢²¼°æ | ѹÁ¦²âÊÔ | ÿÔ | RAID1¾µÏñ |
| Éú²ú°æ | ÕýʽÔËÓª | ¼¾¶È | ÒìµØÔÖ±¸ |
### 2. ×Ô¶¯»¯²âÊÔ·½°¸
```robotframework
***Test Cases***
×°±¸²ð½âÁ÷³ÌÑéÖ¤
Execute Command @ReclaimItem
Input Item Ê¥Õ½½äÖ¸
Expect Result Á¦Á¿½äÖ¸ 3
Check Log Give Á¦Á¿½äÖ¸ 3
µØÍ¼´«ËÍУÑé
Teleport GA0 100 100
Validate Position Îó²î±5ÏñËØ
Check Monster °×Ò°Öí ÊýÁ¿>=3
```
ͨ¹ý±¾Ö¸ÄϵÄϵͳ»¯ÊµÊ©£¬¿ÉʹSKYÒýÇæ¸ü»»³É¹¦ÂÊÌáÉýÖÁ92%ÒÔÉÏ£¬Æ½¾ù¹ÊÕϻָ´Ê±¼ä£¨MTTR£©Ëõ¶ÌÖÁ15·ÖÖÓÄÚ¡£½¨ÒéÔÚÖØ´ó°æ±¾¸üÐÂǰ£¬Ê¹ÓÃVMware Workstation´î½¨¾µÏñ»·¾³½øÐÐÔ¤ÑݲâÊÔ¡£
### Ò»¡¢¸ü»»·þÎñ¶ËÒýÇæµÄ×¼±¸¹¤×÷
ÔÚ¿ªÊ¼¸ü»»ÒýÇæÖ®Ç°£¬È·±£ÄãÒѾ×öºÃÁ˳ä·ÖµÄ×¼±¸£¬ÒÔ±ÜÃâ²»±ØÒªµÄÂé·³ºÍÊý¾Ý¶ªÊ§¡£
1. **±¸·ÝÏÖÓÐÊý¾Ý**£º
- ±¸·ÝÊý¾Ý¿â£ºµ¼³öËùÓÐÏà¹ØµÄÊý¾Ý¿â±í£¬ÌرðÊǽÇÉ«ÐÅÏ¢¡¢ÎïÆ·ÐÅÏ¢¡¢ÈÎÎñ½ø¶ÈµÈ¡£
- ±¸·ÝÅäÖÃÎļþ£º¸´ÖƲ¢±£´æËùÓÐÖØÒªµÄÅäÖÃÎļþ£¨Èç `config.ini`¡¢`server.cfg` µÈ£©¡£
- ±¸·Ý×ÊÔ´Îļþ£ºÈ·±£ËùÓеĵØÍ¼Îļþ¡¢NPC½Å±¾¡¢ÎïÆ·Êý¾ÝµÈ¶¼Òѱ¸·Ý¡£
2. **Á˽âÐÂÒýÇæµÄÒªÇó**£º
- ÔĶÁSKYÒýÇæµÄ¹Ù·½Îĵµ£¬Á˽âÆäϵͳҪÇó¡¢°²×°²½ÖèÒÔ¼°ÅäÖÃ˵Ã÷¡£
- È·ÈÏÄãµÄ·þÎñÆ÷Ó²¼þºÍ²Ù×÷ϵͳÊÇ·ñÂú×ãSKYÒýÇæµÄ×îµÍÒªÇó¡£
3. **×¼±¸±ØÒªµÄ¹¤¾ß**£º
- Êý¾Ý¿â¹ÜÀí¹¤¾ß£¨ÈçMySQL Workbench¡¢phpMyAdminµÈ£©¡£
- Îļþ´«Ê乤¾ß£¨ÈçFileZilla¡¢WinSCPµÈ£©¡£
- Îı¾±à¼Æ÷£¨ÈçNotepad++¡¢VS CodeµÈ£©£¬ÓÃÓÚÐÞ¸ÄÅäÖÃÎļþ¡£
### ¶þ¡¢¸ü»»´«Ææ·þÎñ¶ËÒýÇæµÄ¾ßÌå²½Öè
#### 1. ÏÂÔØ²¢°²×°SKYÒýÇæ
- ·ÃÎÊSKYÒýÇæµÄ¹Ù·½ÍøÕ¾»òÏà¹ØÂÛ̳£¬ÏÂÔØ×îа汾µÄÒýÇæ°ü¡£
- ½âѹÏÂÔØµÄÎļþµ½Ò»¸öÁÙʱĿ¼ÖУ¬ÒÔ±ãºóÐø²Ù×÷¡£
```bash
# ʾÀýÃüÁîÐвÙ×÷£¨¼ÙÉèʹÓÃLinux£©
tar -xvf sky_engine_latest.tar.gz -C /tmp/sky_engine
```
#### 2. ÅäÖÃÊý¾Ý¿â
- ʹÓÃÊý¾Ý¿â¹ÜÀí¹¤¾ßµ¼È뱸·ÝµÄÊý¾Ý¿â¡£
- ¸ù¾ÝSKYÒýÇæµÄÒªÇ󣬵÷ÕûÊý¾Ý¿â½á¹¹£¨Èç¹ûÐèÒª£©¡£Í¨³££¬ÐµÄÒýÇæ¿ÉÄÜ»áÓв»Í¬µÄ±í½á¹¹»ò×Ö¶ÎÃû¡£
```sql
-- ʾÀýSQLÓï¾ä£¬ÓÃÓÚ´´½¨Ò»¸öеÄÓû§±í£¨¸ù¾Ýʵ¼ÊÇé¿öµ÷Õû£©
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(255) NOT NULL,
email VARCHAR(100)
);
```
#### 3. ÐÞ¸ÄÅäÖÃÎļþ
- ´ò¿ª²¢±à¼ `config.ini` »òÆäËûÅäÖÃÎļþ£¬¸ù¾ÝÄãµÄ·þÎñÆ÷»·¾³½øÐÐÉèÖá£
- È·±£ÒÔϹؼü²ÎÊýÕýÈ·ÎÞÎó£º
- **Êý¾Ý¿âÁ¬½ÓÐÅÏ¢**£º°üÀ¨Ö÷»úµØÖ·¡¢Óû§Ãû¡¢ÃÜÂë¡¢Êý¾Ý¿âÃû³ÆµÈ¡£
- **ÍøÂçÉèÖÃ**£º¼àÌý¶Ë¿Ú¡¢IPµØÖ·µÈ¡£
- **·¾¶ÉèÖÃ**£ºÈç×ÊÔ´Îļþ·¾¶¡¢ÈÕÖ¾Îļþ·¾¶µÈ¡£
```ini
# ʾÀý config.ini Ƭ¶Î
[Database]
host = localhost
username = root
password = your_password
database = legend_game
[Server]
port = 7000
ip = 127.0.0.1
[Paths]
resource_path = /path/to/resources
log_path = /path/to/logs
```
#### 4. Ç¨ÒÆÓÎÏ·×ÊÔ´
- ½«ÔÓеĵØÍ¼Îļþ¡¢NPC½Å±¾¡¢ÎïÆ·Êý¾ÝµÈÇ¨ÒÆµ½ÐµÄÒýÇæÄ¿Â¼Ï¡£
- ¼ì²é²¢µ÷ÕûÕâЩ×ÊÔ´Îļþ£¬È·±£ËüÃÇ·ûºÏSKYÒýÇæµÄ¸ñʽҪÇó¡£
#### 5. Æô¶¯·þÎñ¶Ë²¢²âÊÔ
- Æô¶¯SKYÒýÇæµÄ·þÎñ¶Ë³ÌÐò£¬¹Û²ì¿ØÖÆÌ¨Êä³ö£¬È·±£Ã»ÓÐÃ÷ÏԵĴíÎóÐÅÏ¢¡£
- µÇ¼¿Í»§¶Ë£¬³¢ÊÔ´´½¨½ÇÉ«¡¢Ö´Ðлù±¾²Ù×÷£¨ÈçÒÆ¶¯¡¢¹¥»÷µÈ£©£¬È·ÈÏÒ»ÇÐÕý³£¡£
### Èý¡¢³£¼ûÎÊÌâ¼°½â¾ö·½°¸
#### 1. Êý¾Ý¿âÁ¬½Óʧ°Ü
**Ö¢×´**£º·þÎñ¶ËÆô¶¯Ê±ÌáʾÎÞ·¨Á¬½Óµ½Êý¾Ý¿â¡£
**½â¾ö·½°¸**£º
- ¼ì²é `config.ini` ÖеÄÊý¾Ý¿âÁ¬½ÓÐÅÏ¢ÊÇ·ñÕýÈ·¡£
- È·ÈÏÊý¾Ý¿â·þÎñÕýÔÚÔËÐУ¬²¢ÇÒ¿ÉÒÔͨ¹ýÃüÁîÐлòÆäËû¹¤¾ß³É¹¦Á¬½Ó¡£
```bash
# ʾÀýÃüÁîÐмì²éMySQL·þÎñ״̬£¨Linux£©
systemctl status mysql
```
#### 2. ×ÊÔ´Îļþ¼ÓÔØÊ§°Ü
**Ö¢×´**£º·þÎñ¶ËÆô¶¯Ê±ÌáʾijЩ×ÊÔ´ÎļþδÕÒµ½»ò¼ÓÔØÊ§°Ü¡£
**½â¾ö·½°¸**£º
- È·ÈÏ×ÊÔ´Îļþ·¾¶ÉèÖÃÕýÈ·¡£
- ¼ì²é×ÊÔ´ÎļþÊÇ·ñ´æÔÚ£¬²¢ÇÒ¾ßÓÐÕýÈ·µÄȨÏÞ¡£
```bash
# ʾÀýÃüÁîÐмì²éÎļþȨÏÞ£¨Linux£©
ls -l /path/to/resources
```
#### 3. ¿Í»§¶ËµÇ¼ʧ°Ü
**Ö¢×´**£º¿Í»§¶ËÄܹ»Á¬½Óµ½·þÎñÆ÷£¬µ«ÎÞ·¨µÇ¼¡£
**½â¾ö·½°¸**£º
- È·ÈÏÊý¾Ý¿âÖеÄÓû§Êý¾ÝÕýÈ·ÎÞÎó¡£
- ¼ì²éµÇ¼ģ¿éµÄ½Å±¾Âß¼£¬È·±£Ã»ÓÐÓï·¨´íÎó»òÂß¼´íÎó¡£
```plaintext
[@main]
<怬/@怬>
[@怬]
#IF
CHECKUSER $USERNAME $PASSWORD
#ACT
LOGIN
#SAY
µÇ¼³É¹¦£¡
```
#### 4. ÓÎÏ·ÄÚ¹¦ÄÜÒì³£
**Ö¢×´**£ºÄ³Ð©ÓÎÏ·¹¦ÄÜ£¨Èç½»Òס¢ÈÎÎñµÈ£©ÎÞ·¨Õý³£Ê¹Óá£
**½â¾ö·½°¸**£º
- Öð²½¼ì²éÏà¹Ø¹¦ÄܵĽű¾£¬È·±£Ã¿¸ö²½Öè¶¼ÄÜÕýÈ·Ö´ÐС£
- ²é¿´·þÎñ¶ËÈÕÖ¾Îļþ£¬²éÕÒÏêϸµÄ´íÎóÐÅÏ¢£¬¶¨Î»ÎÊÌâËùÔÚ¡£
```bash
# ʾÀýÃüÁîÐв鿴ÈÕÖ¾Îļþ£¨Linux£©
tail -f /path/to/logs/server.log
```
### ËÄ¡¢×ܽá
¸ü»»´«Ææ·þÎñ¶ËÒýÇæÊÇÒ»¸ö¸´ÔӵĹý³Ì£¬Éæ¼°µ½¶à¸ö»·½ÚµÄ²Ù×÷ºÍµ÷ÊÔ¡£Í¨¹ý×ÐϸµÄ×¼±¸¡¢ÏêϸµÄÅäÖÃÒÔ¼°ÄÍÐĵĵ÷ÊÔ£¬Äã¿ÉÒÔ˳ÀûÍê³ÉÕâÒ»¹ý³Ì£¬²¢ÏíÊܵ½ÐÂÒýÇæ´øÀ´µÄÐÔÄÜÌáÉýºÍ¹¦ÄÜÀ©Õ¹¡£
Èç¹ûÄãÔÚ¸ü»»¹ý³ÌÖÐÓöµ½ÈκÎÎÊÌ⣬²»ÒªÆøÄÙ£¬ÀûÓÃÉçÇø×ÊÔ´ºÍ¼¼ÊõÖ§³ÖÇþµÀѰÇó°ïÖú¡£Ï£Íû±¾ÎÄÌṩµÄ²½ÖèºÍ½â¾ö·½°¸ÄÜΪÄã´øÀ´Êµ¼ÊµÄ°ïÖú£¬×£ÄãÔÚ¸ü»»ÒýÇæµÄ¹ý³ÌÖÐÒ»ÇÐ˳Àû£¡

