µ±Ç°Î»Öà : 145zÓÎÏ·Õ¾¡¡|¡¡ÈÈѪ´«Ææ¡¡|¡¡¼¼Êõ½Ì³Ì¡¡|¡¡

´«ÆæBLUEÒýÇæ·¨Ê¦Ä§·¨Ëø¶¨Ò쳣ȫ½âÎö£º´Ó¼¼ÄÜÅäÖõ½ÒýÇæÓÅ»¯µÄÖÕ¼«½â¾ö·½°¸

Èȶȣº
#### **Ò»¡¢Ëø¶¨»úÖÆÊ§Ð§µÄµäÐͱíÏÖÓëºËÐÄÔ­Àí**
ÔÚBLUEÒýÇæ´î½¨µÄ´«ÆæÖУ¬**·¨Ê¦Ä§·¨²¿·ÖÎÞ·¨Ëø¶¨Ä¿±ê**µÄÏÖÏóͨ³£±íÏÖΪ£º
1. **Ñ¡ÔñÐÔʧЧ**£º»ðǽ¡¢±ùÅØÏøµÈ·¶Î§¼¼ÄÜÕý³£ÉúЧ£¬µ«À×µçÊõ¡¢ÃðÌì»ðµÈµ¥Ìå¼¼ÄÜÎÞ·¨Ëø¶¨Ä¿±ê¡£
2. **»·¾³ÒÀÀµÐÔ**£ºÆ½µØ¿ÉËø¶¨£¬µ«Õϰ­ÎïÕÚµ²»ò¸ßµÍµØÐÎʱʧЧ¡£
3. **Ä¿±êÀàÐÍÒì³£**£º¿ÉËø¶¨¹ÖÎﵫÎÞ·¨Ëø¶¨Íæ¼Ò£¬»ò¶ÔÌØ¶¨ÖÖ×壨ÈçBOSS¼¶µ¥Î»£©Ê§Ð§¡£

ÕâÖÖÏÖÏóÔ´ÓÚBLUEÒýÇæµÄ**ÈýÖØÅж¨Ìåϵ**£º
- **¼¼ÄÜÊý¾Ý¿â±ê¼Ç**£¨`Skill.DB`ÖеÄ`NeedTarget`×ֶζ¨ÒåËø¶¨¿ª¹Ø£©
- **¿Í»§¶Ë¶¯×÷Ö¡ÑéÖ¤**£¨`Magic.wil`ÖÐÊÇ·ñ°üº¬Ä¿±êËø¶¨¹Ø¼üÖ¡£©
- **·þÎñÆ÷¶ËÅöײ¼ì²â**£¨`Monster.DB`µÄ`RaceImg`²ÎÊýÁª¶¯Ä¿±êÌå»ý£©

---

#### **¶þ¡¢Áù´óʧЧԭÒòÓëÕï¶ÏÁ÷³Ìͼ½â**
```mermaid
graph TD
A[ħ·¨ÎÞ·¨Ëø¶¨] --> B{¼ì²éNeedTarget±ê¼Ç}
B -->|NeedTarget=0| C[ÐÞ¸ÄSkill.DB×Ö¶Î]
B -->|NeedTarget=1| D{ÑéÖ¤Magic.wilÖ¡ÐòÁÐ}
D -->|Ëø¶¨Ö¡È±Ê§| E[ÖØ»æÄ§·¨ÌØÐ§Ö¡]
D -->|Ö¡ÐòÁÐÕý³£| F{¼ì²âRaceImg²ÎÊý}
F -->|Ìå»ýÅж¨Òì³£| G[µ÷ÕûMonster.DBÅöײϵÊý]
F -->|²ÎÊýÕý³£| H{ÅŲéÒýÇæ°æ±¾/²å¼þ³åÍ»}
H -->|¾É°æÒýÇæBUG| I[Éý¼¶ÖÁ2023·ÀÆ«ÒÆ°æ]
H -->|²å¼þ¸ÉÈÅ| J[½ûÓõÚÈý·½²å¼þ]
```


---

#### **Èý¡¢Éî¶ÈÐÞ¸´·½°¸Óëʵ²Ù´úÂë**
##### **1. ¼¼ÄÜÊý¾Ý¿â£¨Skill.DB£©ÐÞÕý**
- **ºËÐÄ×ֶμì²é**£º
```sql
-- ²éѯÀ×µçÊõËø¶¨²ÎÊý
SELECT Idx,Name,NeedTarget,Range FROM Skill WHERE Name='À×µçÊõ';
-- ÐÞÕýËø¶¨¿ª¹Ø£¨0→1£©
UPDATE Skill SET NeedTarget=1 WHERE Idx=23;
```

ÐèÈ·±£`NeedTarget=1`ÇÒ`Range`ÊýÖµ≥ʵ¼ÊÊ©·¨¾àÀë¡£

##### **2. ħ·¨¶¯×÷Ö¡ÐÞ¸´£¨Magic.wil£©**
- **¹Ø¼üÖ¡±ê×¼**£º

| Ö¡¶Î | ¹¦ÄÜ | ³ß´çÒªÇó |
|-------------|--------------------|--------------|
| 0-5Ö¡ | Ê©·¨Ç°Ò¡¶¯»­ | 48x48ÏñËØ |
| **6-8Ö¡** | **Ä¿±êËø¶¨ºì¿ò** | 32x32ÏñËØ |
| 9-12Ö¡ | É˺¦ÉúÐ§ÌØÐ§ | 64x64ÏñËØ |
ʹÓÃAFT WilEditor²åÈëËø¶¨ºì¿ò£¬²¢µ÷Õû`MagicEx.wzl`µÄ`Anicount`Öµ¡£


##### **3. ÅöײÌå»ýÓÅ»¯£¨Monster.DB£©**
```bash
; ³àÔ¶ñħʾÀý£¨ÐèÖ§³ÖËø¶¨£©
Race=81 ; ÊÜ»÷¶¯×÷ÀàÐÍ
RaceImg=15 ; ÅöײÌå»ý×é(15=±ê×¼ÈËÐιÖ)
Undead=1 ; ÔÊÐí±»Ëø¶¨
```

¶ÔBOSS¼¶¹ÖÎïÐè¶îÍâÉèÖÃ`Undead=1`½â³ýËø¶¨ÏÞÖÆ¡£

##### **4. ÒýÇæ°æ±¾È±ÏÝ´¦Àí**
- **0321°æ¾­µäBUGÐÞ¸´**£º
1. ±¸·Ý`Mir200`Ŀ¼
2. Ìæ»»`M2Server.exe`Ϊ2023·ÀÆ«ÒÆ°æ
3. Ö´ÐпØÖÆÌ¨ÃüÁ
```bash
/reloadmagicdb ; ÖØÔØÄ§·¨Êý¾Ý¿â
/clearcache ; Çå³ýÄÚ´æ²ÐÁôÊý¾Ý
```

¸Ã°æ±¾ÐÞ¸´ÁË`NeedTarget`±ê¼Ç¶ÁÈ¡Æ«ÒÆÎÊÌâ¡£

##### **5. ¿Í»§¶Ëͬ²½Ð£×¼**
- **ÎļþУÑéÁ÷³Ì**£º
1. ɾ³ý`Data`Ŀ¼ÏµÄ`MagicEx.wzl`
2. ´Ó´¿¾»¿Í»§¶Ë¸´ÖÆÐ°æÎļþ
3. ÐÞ¸Ä`Client.dat`Ê®Áù½øÖÆÆ«ÒÆ£º
```hex
Ô­Öµ:0000A3B0 74 12 → ÐÞ¸ÄΪ:EB 12 ; ½â³ýËø¶¨Ô¤²âÏÞÖÆ
```

½â¾ö"¸ôÇ½Ëø¶¨Ê§Ð§"ÎÊÌâ¡£

##### **6. ÖÇÄÜËø¶¨½Å±¾Ç¿»¯**
ÔÚ`QFunction-0.txt`ÖÐÌí¼ÓÓÅÏȼ¶Âß¼­£º
```lua
[@MagicAttack]
#IF
EQUAL <$CURRRUSEMAGICID> 23 ; À×µçÊõID
#ACT
CLEARLINKTARGET ; Çå³ý¾ÉÄ¿±ê
GetHumMultiTarget <$X> <$Y> 12 1 ; 12¸ñÄÚ¼ìË÷
ADDLINKTARGET <$STR(M0)> ; Ëø¶¨×î½üÄ¿±ê
BREAK
```

ʵÏÖÕϰ­Îï»·¾³ÏµÄÖÇÄÜÄ¿±êÇл»¡£

---

#### **ËÄ¡¢Ñ¹Á¦²âÊÔÓëÎȶ¨ÐÔÑéÖ¤·½°¸**
##### **1. ¶àÄ¿±êѹÁ¦²âÊԽű¾**
```lua
-- Éú³É50¸öÒÆ¶¯µ¥Î»
for i=1,50 do
MonGen 0 330 330 µ¾²ÝÈË 1 1
MonGen 0 330 330 ³àÔ¶ñħ 1 1
end
-- ³ÖÐøÊͷż¼ÄÜ
While TRUE {
Cast À×µçÊõ
Delay(500)
Cast ÃðÌì»ð
Delay(1000)
}
```

¹Û²âM2¿ØÖÆÌ¨µÄ`Ä¿±ê¶ªÊ§ÂÊ`£¨ÀíÏëÖµÓ¦<5%£©¡£

##### **2. ¶¯Ì¬µ÷ÊÔÃüÁî**
```bash
/showmagiclock ; ÏÔÊ¾Ëø¶¨¹ì¼£
/testlock À×µçÊõ 0 330 330 ; Ç¿ÖÆ×ø±êËø¶¨
/memreport ; ¼ì²âÄÚ´æÐ¹Â©
```

½áºÏ`BlueMagicDebugger`¿ÉÊÓ»¯¹¤¾ß·ÖÎö֡ͬ²½ÑÓ³Ù¡£

---

#### **Îå¡¢³¤Ð§ÓÅ»¯ÓëÒì³£Ô¤·À**
1. **°æ±¾¹ÜÀí¹æ·¶**£º
- ʹÓÃGit¶Ô`Skill.DB`¡¢`Magic.wil`½øÐа汾¿ØÖÆ
- ÿ´Î¸üÐÂǰִÐÐ`SQLDiff`±È¶ÔÊý¾Ý¿â±ä¸ü

2. **ÄÚ´æÓÅ»¯ÅäÖÃ**£º
ÐÞ¸Ä`!Setup.txt`·ÀÖ¹ÄÚ´æÒç³ö£º
```ini
[Performance]
MaxCache=2048 ; ×î´ó»º´æ2GB
AsyncSave=1 ; Òì²½±£´æÄ£Ê½
```


3. **°²È«¼Ó¹Ì²ßÂÔ**£º
- ¶¨ÆÚУÑé`M2Server.exe`¹þÏ£Öµ£¨·À´Û¸Ä£©
- ɾ³ý`PlugList.txt`Öеķdz£¹æ²å¼þ

---

#### **Áù¡¢½áÓïÓë½ø½×½¨Òé**
½â¾öBLUEÒýÇæµÄħ·¨Ëø¶¨Òì³£Ðè**¶àά¶ÈЭͬÅŲé**£¬Öصã°Ñ¿Ø£º
1. **Êý¾ÝÒ»ÖÂÐÔ**£ºSkill.DB¡¢Magic.wil¡¢Monster.DBµÄ°æ±¾Í¬²½
2. **ÒýÇæ´¿¾»¶È**£ºÊ¹Óùٷ½Ì×¼þ£¬±ÜÃâ»ìºÏ°æ±¾×é¼þ
3. **½Å±¾¹æ·¶»¯**£º²ÉÓÃ`MagTagFunc`½Ó¿Ú¿ª·¢×Ô¶¨Òåħ·¨

½¨Ò齨Á¢**ħ·¨²âÊÔɳºÐ»·¾³**£º
```mermaid
graph LR
A[´¿¾»¿Í»§¶Ë] --> B[Ä£ÄâÕϰ­µØÐÎ]
B --> C[ÅúÁ¿Éú³ÉÄ¿±ê]
C --> D[×Ô¶¯»¯Ê©·¨½Å±¾]
D --> E[Éú³ÉËø¶¨·ÖÎö±¨¸æ]
```

ͨ¹ý³ÖÐø¼¯³É£¨CI£©ÊµÏÖÿ´Î¸üеÄ×Ô¶¯»¯ÑéÖ¤£¬´Ó¸ù±¾ÉϽµµÍÒì³£¸´ÏÖ¸ÅÂÊ¡£