## Ò»¡¢ÒýÇæ×ª»»µÄºËÐÄÌôÕ½Óë½â¾ö˼·
### 1.1 ¼Ü¹¹²îÒìµ¼ÖµĽű¾²»¼æÈÝ£¨¹Ø¼üì¶Ü£©
BLUEÒýÇæÓëSKYÒýÇæÔڵײã¼Ü¹¹ÉϵIJîÒ죬ֱ½ÓÔì³É**70%ÒÔÉϵÄÔÉú½Å±¾ÎÞ·¨Ö±½ÓÔËÐÐ**¡£¸ù¾ÝµÄʵ²âÊý¾Ý£¬Ö÷Ҫì¶Ü¼¯ÖÐÔÚ£º
1. **ÃüÁîÓï·¨²îÒì**£ºÀýÈçBLUEµÄ`OPENBOOK`ÔÚSKYÖÐÐè¸ÄΪ`OPENDragonBook`£¬´¥·¢±êÇ©´Ó`[@gohill]`±äΪ`[@enterhill]`
2. **±äÁ¿×÷ÓÃÓò²îÒì**£ºBLUEµÄÈ«¾Ö±äÁ¿`GLOBALVAR`ÔÚSKYÖÐÐè²ð½âΪ`SERVERVAR`+`PLAYERVAR`˫ϵͳ
3. **Êý¾Ý¿â½á¹¹³åÍ»**£ºSKYÒýÇæµÄ¹ÖÎïÊý¾Ý¿â£¨Monster.DB£©ÐÂÔö`AILevel`×ֶοØÖÆÖÇÄܵȼ¶
### 1.2 Ç¨ÒÆ¼¼Êõ·ÏßÑ¡Ôñ
½¨Òé²ÉÓÃ**ËĽ׶Îת»»·¨**£º
```
Ôʼ½Å±¾½âÎö → ÃüÁîÓ³ÉäÌæ»» → Âß¼½á¹¹Öع¹ → ÐÔÄܵ÷ÓÅÑéÖ¤
```
ÅäºÏÌṩµÄÃâ·Ñת»»¹¤¾ßʵÏÖ»ù´¡Êý¾ÝÇ¨ÒÆ£¬È˹¤½éÈëÂÊ¿ØÖÆÔÚ20%ÒÔÄÚ
---
## ¶þ¡¢ºËÐĽű¾Ä£¿éת»»Ïê½â
### 2.1 ×°±¸ÏµÍ³½Å±¾Öع¹
**µäÐÍת»»°¸Àý**£ºÎäÆ÷Éý¼¶¹¦ÄÜ
```lua
-- BLUEÔʼ½Å±¾
[@main]
#IF
CHECKITEM ºÚÌú¿óʯ 5
#ACT
UPGRADEITEM 0 0 10
SENDMSG 6 "ÎäÆ÷Éý¼¶³É¹¦£¡"
-- SKYÖØ¹¹½Å±¾
[@smith]
#IF
CheckBagItem ºÚÌú¿óʯ >=5
#ACT
TakeBagItem ºÚÌú¿óʯ 5
EnhanceEquip 0 Attack 10
AddItemFlag 0 +Bind
SysMessage "ÎäÆ÷ÒѰ󶨲¢Ç¿»¯£¡"
```
**¹Ø¼ü¸Ä¶¯µã**£º
- ÎïÆ·¼ì²âÃüÁî´Ó`CHECKITEM`¸ÄΪ`CheckBagItem`
- Ç¿»¯Ö¸ÁîÉý¼¶Îª¶à²ÎÊýģʽ`EnhanceEquip [²¿Î»] [ÊôÐÔ] [ÊýÖµ]`
- ÐÂÔö×°±¸°ó¶¨±ê¼Ç`AddItemFlag`£¨SKY·À¸´ÖÆ»úÖÆ£©
### 2.2 ÈÎÎñÏµÍ³Ç¨ÒÆ·½°¸
¶Ô±ÈÁ½ÖÖÒýÇæµÄÈÎÎñ´¥·¢Æ÷²îÒ죺
| ¹¦ÄÜÄ£¿é | BLUEʵÏÖ·½Ê½ | SKYʵÏÖ·½Ê½ |
|----------------|----------------------|-----------------------|
| ÈÎÎñ½ÓÈ¡ | `ADDNAMELIST` | `CreateQuest` |
| ½ø¶È×·×Ù | `CHECKNAMELIST` | `GetQuestProgress` |
| ½±Àø·¢·Å | `GIVEITEM`+`ADDPG` | `CompleteQuest` |
**Êý¾Ý¶ªÊ§Ô¤·À**£ºÐèÔÚת»»Ç°Ö´ÐÐ`ExportQuestData`µ¼³öBLUEÈÎÎñ¼Ç¼£¬²¢Í¨¹ý¹¤¾ßµÄ`QuestConverter`Ä£¿é½øÐиñʽÊÊÅä
---
## Èý¡¢¸ß¼¶¹¦ÄÜÇ¨ÒÆ²ßÂÔ
### 3.1 ¼ÙÈËϵͳÉî¶È¸ÄÔì
SKYÒýÇæµÄAI¿ò¼Ü²ÉÓÃ**״̬»úÄ£ÐÍ**£¬ÐèÖØ¹¹BLUEµÄÏßÐÔÂß¼£º
```mermaid
stateDiagram
[*] --> ¿ÕÏÐ״̬ : ÎÞʼþ´¥·¢
¿ÕÏÐ״̬ --> ѲÂß״̬ : µØÍ¼Íæ¼Ò>10
ѲÂß״̬ --> Õ½¶·×´Ì¬ : ·¢ÏÖµÐÈË
Õ½¶·×´Ì¬ --> ÌÓÅÜ״̬ : HP<30%
ÌÓÅÜ״̬ --> »Ø³Ç״̬ : ÍÑÀëÕ½¶·
```
**²ÎÊý¶ÔÓ¦¹ØÏµ**£º
- BLUEµÄ`DUMMY_MODE`Ðè²ð½âΪ`SetAIMode`+`SetAIState`
- Õ½¶·²ßÂÔ´Ó`ATTACK_NEAR`Éý¼¶Îª`PriorityTarget(µÈ¼¶, Ö°Òµ, Íþвֵ)`
### 3.2 ¹¥³ÇսϵͳÉý¼¶
SKYÒýÇæÒýÈë**Èýάս³¡Åж¨**£¬Ðèµ÷Õû×ø±ê¼ì²âÂß¼£º
```
ÔBLUEÆ½Ãæ¼ì²â¹«Ê½£º
if (x1-x2)^2 + (y1-y2)^2 ≤ R^2
SKYÁ¢Ìå¼ì²â¹«Ê½£º
if (x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2 ≤ R^2
```
**ÅäÌ×ÐÞ¸ÄÏî**£º
1. µØÍ¼ÎļþÔö¼Ó¸ß¶È²ãÊý¾Ý£¨*.ZMap£©
2. ɳ°Í¿ËÆìÖÄ×ø±êÐèÉèÖÃZÖáÆ«ÒÆÁ¿
3. ÇṦ¼¼ÄÜÐèÌí¼Ó`CheckZAxis`ÏÞÖÆ
---
## ËÄ¡¢Êý¾ÝÇ¨ÒÆÓëÐÔÄÜÓÅ»¯
### 4.1 Êý¾Ý¿âת»»¶ÔÕÕ±í
| Êý¾Ý¿âÀàÐÍ | BLUE×Ö¶Î | SKY×Ö¶Î | ת»»¹æÔò |
|------------|-----------------------|-----------------------|------------------------|
| ÎïÆ·¿â | DuraMax | MaxDurability | Ö±½ÓÓ³Éä |
| ¼¼ÄÜ¿â | MagicDefense | MagicResist | ÊýÖµ÷2.5 |
| ¹ÖÎï¿â | - | AILevel | °´¾É°æHP»»Ë㣨HP/1000£©|
**×¢ÒâÊÂÏî**£ºÊ¹ÓõÄ`DBFConverter`¹¤¾ßʱÐè¹´Ñ¡"×Ô¶¯ÐÞÕý¸¡µãÎó²î"Ñ¡Ïî
### 4.2 ÐÔÄܵ÷ÓŲÎÊý
ͨ¹ýÐÞ¸Ä`SkyM2.ini`ʵÏÖ¸ºÔؾùºâ£º
```ini
[Performance]
MaxPlayerPerScene=800 ; µ¥µØÍ¼³ÐÔØÉÏÏÞ
AIThreadCount=4 ; ¼ÙÈËAIÏß³ÌÊý
PacketCompression=1 ; ÆôÓ÷â°üѹËõ
```
**ѹ²âÊý¾Ý**£ºÔÚE5-2680v4·þÎñÆ÷ÉÏ£¬SKYÒýÇæ³ÐÔØÄÜÁ¦½ÏBLUEÌáÉý42%
---
## Îå¡¢Ç¨ÒÆºóÑéÖ¤ÓëÅÅ´í
### 5.1 ×Ô¶¯»¯²âÊÔ·½°¸
¿ª·¢×¨ÓòâÊԽű¾£º
```lua
function TestCase()
SimulatePlayerLogin("test01") -- ´´½¨²âÊÔ½ÇÉ«
ExecCommand("@make ÍÀÁúµ¶") -- Éú³É×°±¸
CallNPC("Ìú½³ÆÌ") -- ´¥·¢Ç¿»¯½Å±¾
Assert(GetItemAttr(0, "Attack") == 100)
end
```
**¸²¸ÇÂÊÖ¸±ê**£ºÐè´ïµ½ºËÐŦÄÜÄ£¿éµÄ95%ÒÔÉÏ
### 5.2 ³£¼û¹ÊÕÏÅųýÖ¸ÄÏ
| ¹ÊÕÏÏÖÏó | ¸ù±¾ÔÒò | ½â¾ö·½°¸ |
|------------------------|-------------------------|-------------------------|
| NPC¶Ô»°ÎÞ·´Ó¦ | ´¥·¢±êǩδת»» | ʹÓõÄTagConverter¹¤¾ß |
| ×°±¸ÊôÐÔÏÔʾÒì³£ | ×Ö¶ÎÀàÐͲ»Æ¥Åä | ÖØÐ´StdItems.DB×ֶζ¨Òå |
| ¼ÙÈËԵز»¶¯ | AI״̬»úδ³õʼ»¯ | µ÷ÓÃ`InitAIStateMachine` |
---
## Áù¡¢Ç¨ÒƳɱ¾ÓëÊÕÒæ·ÖÎö
### 6.1 ¾¼ÃÐÔÆÀ¹ÀÄ£ÐÍ
```
×ܳɱ¾ = È˹¤³É±¾×120Сʱ + ¹¤¾ß²É¹º·Ñ + ·þÎñÆ÷Éý¼¶·Ñ
Ô¤ÆÚÊÕÒæ = (ÔÚÏßÍæ¼Ò×ARPU)×Áô´æÌáÉýÂÊ×30%
°¸ÀýÊý¾Ý£º
ij·þת»»ºóÔÚÏßÈËÊý´Ó800ÌáÉýÖÁ1500£¬ARPU´Ó£¤15ÔöÖÁ£¤22
Ͷ×Ê»ØÊÕÆÚ = (×ܳɱ¾) / (1500×22×0.3 - 800×15×0.3)
```
### 6.2 Éú̬¼ÛÖµÌáÉý
1. Ö§³ÖSKYÒýÇæµÄ**¹âÏß×·×ÙÌØÐ§**£¨»ÖÊÌáÉý300%£©
2. ¿É½ÓÈë**Çø¿éÁ´×°±¸ÏµÍ³**£¨²Î¿¼µÄ¿çÁ´·½°¸£©
3. ¼æÈÝ**VRÕ½³¡Ä£Ê½**£¨Ðè²É¹ºSKY-XRÄ£¿é£©
### 1.1 ¼Ü¹¹²îÒìµ¼ÖµĽű¾²»¼æÈÝ£¨¹Ø¼üì¶Ü£©
BLUEÒýÇæÓëSKYÒýÇæÔڵײã¼Ü¹¹ÉϵIJîÒ죬ֱ½ÓÔì³É**70%ÒÔÉϵÄÔÉú½Å±¾ÎÞ·¨Ö±½ÓÔËÐÐ**¡£¸ù¾ÝµÄʵ²âÊý¾Ý£¬Ö÷Ҫì¶Ü¼¯ÖÐÔÚ£º
1. **ÃüÁîÓï·¨²îÒì**£ºÀýÈçBLUEµÄ`OPENBOOK`ÔÚSKYÖÐÐè¸ÄΪ`OPENDragonBook`£¬´¥·¢±êÇ©´Ó`[@gohill]`±äΪ`[@enterhill]`
2. **±äÁ¿×÷ÓÃÓò²îÒì**£ºBLUEµÄÈ«¾Ö±äÁ¿`GLOBALVAR`ÔÚSKYÖÐÐè²ð½âΪ`SERVERVAR`+`PLAYERVAR`˫ϵͳ
3. **Êý¾Ý¿â½á¹¹³åÍ»**£ºSKYÒýÇæµÄ¹ÖÎïÊý¾Ý¿â£¨Monster.DB£©ÐÂÔö`AILevel`×ֶοØÖÆÖÇÄܵȼ¶
### 1.2 Ç¨ÒÆ¼¼Êõ·ÏßÑ¡Ôñ
½¨Òé²ÉÓÃ**ËĽ׶Îת»»·¨**£º
```
Ôʼ½Å±¾½âÎö → ÃüÁîÓ³ÉäÌæ»» → Âß¼½á¹¹Öع¹ → ÐÔÄܵ÷ÓÅÑéÖ¤
```
ÅäºÏÌṩµÄÃâ·Ñת»»¹¤¾ßʵÏÖ»ù´¡Êý¾ÝÇ¨ÒÆ£¬È˹¤½éÈëÂÊ¿ØÖÆÔÚ20%ÒÔÄÚ
---
## ¶þ¡¢ºËÐĽű¾Ä£¿éת»»Ïê½â
### 2.1 ×°±¸ÏµÍ³½Å±¾Öع¹
**µäÐÍת»»°¸Àý**£ºÎäÆ÷Éý¼¶¹¦ÄÜ
```lua
-- BLUEÔʼ½Å±¾
[@main]
#IF
CHECKITEM ºÚÌú¿óʯ 5
#ACT
UPGRADEITEM 0 0 10
SENDMSG 6 "ÎäÆ÷Éý¼¶³É¹¦£¡"
-- SKYÖØ¹¹½Å±¾
[@smith]
#IF
CheckBagItem ºÚÌú¿óʯ >=5
#ACT
TakeBagItem ºÚÌú¿óʯ 5
EnhanceEquip 0 Attack 10
AddItemFlag 0 +Bind
SysMessage "ÎäÆ÷ÒѰ󶨲¢Ç¿»¯£¡"
```
**¹Ø¼ü¸Ä¶¯µã**£º
- ÎïÆ·¼ì²âÃüÁî´Ó`CHECKITEM`¸ÄΪ`CheckBagItem`
- Ç¿»¯Ö¸ÁîÉý¼¶Îª¶à²ÎÊýģʽ`EnhanceEquip [²¿Î»] [ÊôÐÔ] [ÊýÖµ]`
- ÐÂÔö×°±¸°ó¶¨±ê¼Ç`AddItemFlag`£¨SKY·À¸´ÖÆ»úÖÆ£©
### 2.2 ÈÎÎñÏµÍ³Ç¨ÒÆ·½°¸
¶Ô±ÈÁ½ÖÖÒýÇæµÄÈÎÎñ´¥·¢Æ÷²îÒ죺
| ¹¦ÄÜÄ£¿é | BLUEʵÏÖ·½Ê½ | SKYʵÏÖ·½Ê½ |
|----------------|----------------------|-----------------------|
| ÈÎÎñ½ÓÈ¡ | `ADDNAMELIST` | `CreateQuest` |
| ½ø¶È×·×Ù | `CHECKNAMELIST` | `GetQuestProgress` |
| ½±Àø·¢·Å | `GIVEITEM`+`ADDPG` | `CompleteQuest` |
**Êý¾Ý¶ªÊ§Ô¤·À**£ºÐèÔÚת»»Ç°Ö´ÐÐ`ExportQuestData`µ¼³öBLUEÈÎÎñ¼Ç¼£¬²¢Í¨¹ý¹¤¾ßµÄ`QuestConverter`Ä£¿é½øÐиñʽÊÊÅä
---
## Èý¡¢¸ß¼¶¹¦ÄÜÇ¨ÒÆ²ßÂÔ
### 3.1 ¼ÙÈËϵͳÉî¶È¸ÄÔì
SKYÒýÇæµÄAI¿ò¼Ü²ÉÓÃ**״̬»úÄ£ÐÍ**£¬ÐèÖØ¹¹BLUEµÄÏßÐÔÂß¼£º
```mermaid
stateDiagram
[*] --> ¿ÕÏÐ״̬ : ÎÞʼþ´¥·¢
¿ÕÏÐ״̬ --> ѲÂß״̬ : µØÍ¼Íæ¼Ò>10
ѲÂß״̬ --> Õ½¶·×´Ì¬ : ·¢ÏÖµÐÈË
Õ½¶·×´Ì¬ --> ÌÓÅÜ״̬ : HP<30%
ÌÓÅÜ״̬ --> »Ø³Ç״̬ : ÍÑÀëÕ½¶·
```
**²ÎÊý¶ÔÓ¦¹ØÏµ**£º
- BLUEµÄ`DUMMY_MODE`Ðè²ð½âΪ`SetAIMode`+`SetAIState`
- Õ½¶·²ßÂÔ´Ó`ATTACK_NEAR`Éý¼¶Îª`PriorityTarget(µÈ¼¶, Ö°Òµ, Íþвֵ)`
### 3.2 ¹¥³ÇսϵͳÉý¼¶
SKYÒýÇæÒýÈë**Èýάս³¡Åж¨**£¬Ðèµ÷Õû×ø±ê¼ì²âÂß¼£º
```
ÔBLUEÆ½Ãæ¼ì²â¹«Ê½£º
if (x1-x2)^2 + (y1-y2)^2 ≤ R^2
SKYÁ¢Ìå¼ì²â¹«Ê½£º
if (x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2 ≤ R^2
```
**ÅäÌ×ÐÞ¸ÄÏî**£º
1. µØÍ¼ÎļþÔö¼Ó¸ß¶È²ãÊý¾Ý£¨*.ZMap£©
2. ɳ°Í¿ËÆìÖÄ×ø±êÐèÉèÖÃZÖáÆ«ÒÆÁ¿
3. ÇṦ¼¼ÄÜÐèÌí¼Ó`CheckZAxis`ÏÞÖÆ
---
## ËÄ¡¢Êý¾ÝÇ¨ÒÆÓëÐÔÄÜÓÅ»¯
### 4.1 Êý¾Ý¿âת»»¶ÔÕÕ±í
| Êý¾Ý¿âÀàÐÍ | BLUE×Ö¶Î | SKY×Ö¶Î | ת»»¹æÔò |
|------------|-----------------------|-----------------------|------------------------|
| ÎïÆ·¿â | DuraMax | MaxDurability | Ö±½ÓÓ³Éä |
| ¼¼ÄÜ¿â | MagicDefense | MagicResist | ÊýÖµ÷2.5 |
| ¹ÖÎï¿â | - | AILevel | °´¾É°æHP»»Ë㣨HP/1000£©|
**×¢ÒâÊÂÏî**£ºÊ¹ÓõÄ`DBFConverter`¹¤¾ßʱÐè¹´Ñ¡"×Ô¶¯ÐÞÕý¸¡µãÎó²î"Ñ¡Ïî
### 4.2 ÐÔÄܵ÷ÓŲÎÊý
ͨ¹ýÐÞ¸Ä`SkyM2.ini`ʵÏÖ¸ºÔؾùºâ£º
```ini
[Performance]
MaxPlayerPerScene=800 ; µ¥µØÍ¼³ÐÔØÉÏÏÞ
AIThreadCount=4 ; ¼ÙÈËAIÏß³ÌÊý
PacketCompression=1 ; ÆôÓ÷â°üѹËõ
```
**ѹ²âÊý¾Ý**£ºÔÚE5-2680v4·þÎñÆ÷ÉÏ£¬SKYÒýÇæ³ÐÔØÄÜÁ¦½ÏBLUEÌáÉý42%
---
## Îå¡¢Ç¨ÒÆºóÑéÖ¤ÓëÅÅ´í
### 5.1 ×Ô¶¯»¯²âÊÔ·½°¸
¿ª·¢×¨ÓòâÊԽű¾£º
```lua
function TestCase()
SimulatePlayerLogin("test01") -- ´´½¨²âÊÔ½ÇÉ«
ExecCommand("@make ÍÀÁúµ¶") -- Éú³É×°±¸
CallNPC("Ìú½³ÆÌ") -- ´¥·¢Ç¿»¯½Å±¾
Assert(GetItemAttr(0, "Attack") == 100)
end
```
**¸²¸ÇÂÊÖ¸±ê**£ºÐè´ïµ½ºËÐŦÄÜÄ£¿éµÄ95%ÒÔÉÏ
### 5.2 ³£¼û¹ÊÕÏÅųýÖ¸ÄÏ
| ¹ÊÕÏÏÖÏó | ¸ù±¾ÔÒò | ½â¾ö·½°¸ |
|------------------------|-------------------------|-------------------------|
| NPC¶Ô»°ÎÞ·´Ó¦ | ´¥·¢±êǩδת»» | ʹÓõÄTagConverter¹¤¾ß |
| ×°±¸ÊôÐÔÏÔʾÒì³£ | ×Ö¶ÎÀàÐͲ»Æ¥Åä | ÖØÐ´StdItems.DB×ֶζ¨Òå |
| ¼ÙÈËԵز»¶¯ | AI״̬»úδ³õʼ»¯ | µ÷ÓÃ`InitAIStateMachine` |
---
## Áù¡¢Ç¨ÒƳɱ¾ÓëÊÕÒæ·ÖÎö
### 6.1 ¾¼ÃÐÔÆÀ¹ÀÄ£ÐÍ
```
×ܳɱ¾ = È˹¤³É±¾×120Сʱ + ¹¤¾ß²É¹º·Ñ + ·þÎñÆ÷Éý¼¶·Ñ
Ô¤ÆÚÊÕÒæ = (ÔÚÏßÍæ¼Ò×ARPU)×Áô´æÌáÉýÂÊ×30%
°¸ÀýÊý¾Ý£º
ij·þת»»ºóÔÚÏßÈËÊý´Ó800ÌáÉýÖÁ1500£¬ARPU´Ó£¤15ÔöÖÁ£¤22
Ͷ×Ê»ØÊÕÆÚ = (×ܳɱ¾) / (1500×22×0.3 - 800×15×0.3)
```
### 6.2 Éú̬¼ÛÖµÌáÉý
1. Ö§³ÖSKYÒýÇæµÄ**¹âÏß×·×ÙÌØÐ§**£¨»ÖÊÌáÉý300%£©
2. ¿É½ÓÈë**Çø¿éÁ´×°±¸ÏµÍ³**£¨²Î¿¼µÄ¿çÁ´·½°¸£©
3. ¼æÈÝ**VRÕ½³¡Ä£Ê½**£¨Ðè²É¹ºSKY-XRÄ£¿é£©

