#### **Ò»¡¢Ëø¶¨»úÖÆÊ§Ð§µÄµäÐͱíÏÖÓëºËÐÄÔÀí**
ÔÚ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£©ÊµÏÖÿ´Î¸üеÄ×Ô¶¯»¯ÑéÖ¤£¬´Ó¸ù±¾ÉϽµµÍÒì³£¸´ÏÖ¸ÅÂÊ¡£
ÔÚ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£©ÊµÏÖÿ´Î¸üеÄ×Ô¶¯»¯ÑéÖ¤£¬´Ó¸ù±¾ÉϽµµÍÒì³£¸´ÏÖ¸ÅÂÊ¡£

