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

´«Ææ×°±¸¼ø¶¨»úÖÆÓë½Å±¾´íÎóÐÞÕýÈ«½âÎö£º´Ó»úÖÆÔ­Àíµ½´úÂëµ÷ÊÔ

Èȶȣº
## Ò»¡¢´«Ææ×°±¸¼ø¶¨»úÖÆÉî¶È½âÎö
### 1.1 »ù´¡¹æÔòÓ뿪ÆôÌõ¼þ
´«Ææ×°±¸¼ø¶¨ÏµÍ³ÒªÇó½ÇÉ«µÈ¼¶´ïµ½**35¼¶¼°ÒÔÉÏ**£¬Í¨¹ýÏûºÄ**¼ø¶¨·û**¶Ôδ¼ø¶¨×°±¸½øÐÐÊôÐÔ½âÎö¡£¼ø¶¨·ûµÄ»ñȡ;¾¶°üÀ¨£º
- **É̵깺Âò**£ºÖ±½ÓÏûºÄÓÎÏ·»õ±Ò»ñÈ¡£¬µ«³É±¾½Ï¸ß
- **¸±±¾ÓëBOSSÕ½**£º¸ßÄѶȸ±±¾£¨Èç»ìÂÒÉîÔ¨£©ºÍ´óÐÍBOSSµôÂä¸ÅÂʸü¸ß
- **×°±¸·Ö½â**£º·Ö½â50¼¶ÒÔÉÏ×Ïɫװ±¸ÓиÅÂʲú³ö
- **ÔÆÓÎÉÌÈ˽»Ò×**£ºÏÞÁ¿¹©Ó¦µ«ÐÔ¼Û±ÈÍ»³ö

### 1.2 ×°±¸Æ·ÖÊÓëÊôÐÔ¹æÔò
×°±¸·ÖΪÆÕͨ¡¢ÓÅÐ㡢ϡÓС¢Ê·Ê«¡¢´«ËµÎå¼¶Æ·ÖÊ£¬²»Í¬Æ·ÖʶÔÓ¦²»Í¬¼ø¶¨¹æÔò£º

| ×°±¸Æ·ÖÊ | ×î´ó¼ø¶¨´ÎÊý | ÊôÐÔÌõÄ¿Êý | Ëø¶¨ÊôÐÔÏûºÄ |
|----------|--------------|------------|--------------|
| À¶É« | 3´Î | 1-3Ìõ | +50%Ôª±¦ |
| ×ÏÉ« | 5´Î | 2-4Ìõ | +100%Ôª±¦ |
| ½ðÉ« | 7´Î | 3-5Ìõ | +150%Ôª±¦ |
£¨Êý¾ÝÀ´Ô´£º£©


**ÊôÐÔÉú³É»úÖÆ**²ÉÓÃ**¶¯Ì¬Ëæ»úËã·¨**£¬°üº¬»ù´¡ÊôÐÔ£¨¹¥»÷/·ÀÓùµÈ¹Ì¶¨Öµ£©ºÍ¸½¼ÓÊôÐÔ£¨±©»÷¡¢ÎüѪµÈÌØÊâЧ¹û£©¡£Ê·Ê«¼¶×°±¸ÓиÅÂÊ´¥·¢**Ë«ÖØÒþ²ØÊôÐÔ**£¬Èç"ɱ¹Ö»ØÑª+5%+Èõµã»÷ÆÆ"¡£

### 1.3 ¸ß¼¶¼ø¶¨¼¼ÇÉ
- **ʱ¶ÎÔöÒæ**£º²¿·ÖÉ趨ÿÈÕ20:00-22:00¼ø¶¨±©»÷ÂÊÌáÉý30%
- **Ö°ÒµÊÊÅä**£ºÕ½Ê¿ÎäÆ÷ÓÅÏȼø¶¨ÎüѪÊôÐÔ£¬·¨Ê¦×°±¸²à֨ħ·¨±©»÷
- **ÊôÐÔËø¶¨**£ºÊ¹ÓÃ"LOCK"Ö¸Áî¿É±£ÁôÂúÒâÊôÐÔ£¬µ«Ã¿´ÎËø¶¨Ôö¼Ó50%¼ø¶¨³É±¾
- **Ì××°Áª¶¯**£º¼ø¶¨Ê±Ð¯´øÍ¬ÏµÁÐ×°±¸¿ÉÌáÉýÏ¡ÓÐÊôÐÔ³öÏÖ¸ÅÂÊ

---

## ¶þ¡¢½Å±¾³£¼û´íÎóÀàÐÍÓëÐÞÕý·½°¸
### 2.1 Óï·¨¼¶´íÎóÐÞÕý
**µäÐÍ´íÎó°¸Àý**£º
```lua
-- ´íÎóʾÀý£ºÈ±ÉÙ½áÊø·û
if CheckLevel(35) then
ShowMsg("¼ø¶¨×ʸñÑé֤ͨ¹ý")
-- ÕýÈ·ÐÞÕý£º
if CheckLevel(35) then
ShowMsg("¼ø¶¨×ʸñÑé֤ͨ¹ý")
end
```

ÐÞÕýÒªµã£º
1. ʹÓÃNotepad++µÈ¹¤¾ß½øÐÐ**Óï·¨¸ßÁÁ¼ì²é**
2. ÖØµã¼ì²é**À¨ºÅǶÌ×**ºÍ**ÃüÁîÖÕÖ¹·û**
3. ÑéÖ¤±äÁ¿×÷ÓÃÓò£¨¾Ö²¿±äÁ¿ÐèÉùÃ÷Ϊlocal£©

### 2.2 Âß¼­´íÎóµ÷ÊÔ
**×°±¸µÈ¼¶Ñé֤ʧЧ°¸Àý**£º
```lua
-- ´íÎóÂß¼­£ºµÈ¼¶Ìõ¼þ·´ÏòÉèÖÃ
if PlayerLevel < 35 then
UnlockIdentify()
end
-- ÐÞÕý·½°¸£º
if PlayerLevel >= 35 then
UnlockIdentify()
end
```

µ÷ÊÔ²ßÂÔ£º
- ²åÈë**ÈÕÖ¾×·×Ùµã**£º`LogWrite("µ±Ç°µÈ¼¶£º"..PlayerLevel)`
- ʹÓÃM2ÒýÇæµÄ**µ¥²½µ÷ÊÔģʽ**
- ½¨Á¢**²âÊÔÓÃÀý¿â**¸²¸Ç±ß½çÌõ¼þ£¨35¼¶¡¢34¼¶¡¢50¼¶µÈ£©

### 2.3 ×ÊÔ´Àà´íÎó´¦Àí
**Îļþ·¾¶´íÎó½â¾ö·½°¸**£º
1. ¼ì²é·¾¶¸ñʽ£º`/script/identify/`ÓÅÓÚ`C:\´«Ææ\½Å±¾\`
2. ±ÜÃâÌØÊâ×Ö·û£ºÓÃ"identify_npc"´úÌæ"¼ø¶¨NPC#1"
3. ÉèÖÃ**·¾¶°×Ãûµ¥**·ÀֹԽȨ·ÃÎÊ

**Êý¾Ý¿âÁ¬½ÓÒì³£´¦ÀíÁ÷³Ì**£º
```mermaid
graph TD
A[Á¬½Óʧ°Ü] --> B{´íÎó´úÂë·ÖÎö}
B -->|1045| C[ÑéÖ¤Õ˺ÅȨÏÞ]
B -->|2003| D[¼ì²é·þÎñ¶Ë¿Ú]
B -->|1130| E[ÉèÖÃIP°×Ãûµ¥]
C --> F[¸üÐÂmysql.user±í]
D --> G[¿ª·Å3306¶Ë¿Ú]
E --> H[ÐÞ¸Äbind-address]
```


---

## Èý¡¢½Å±¾¿ª·¢¹æ·¶ÓëÓÅ»¯Êµ¼ù
### 3.1 NPC¼ø¶¨Ê¦½Å±¾¿ª·¢
```lua
[@Main]
#IF
CheckLevel 35
#SAY
»¶Ó­Ê¹Óüø¶¨·þÎñ£¡\
ÇëÑ¡Ôñ²Ù×÷£º\
<¼ø¶¨×°±¸/@Identify> <Ëø¶¨ÊôÐÔ/@LockAttr> \
#ACT

[@Identify]
#IF
CheckItem ¼ø¶¨·û 3
#ACT
Take ¼ø¶¨·û 3
RandomEx(1,100)
#IF
Random < 30
#ACT
SetItemAttr ¹¥»÷ +15%
SendMsg 6 ¼ø¶¨³É¹¦£¡»ñµÃ¼«Æ·ÊôÐÔ£¡
#ELSESAY
¼ø¶¨Î´³öÏÖÌØÊâÊôÐÔ£¬ÇëÔÙÊÔ£¡
```


### 3.2 ÐÔÄÜÓÅ»¯·½°¸
1. **ÄÚ´æ¹ÜÀí**£º
- ʹÓÃ`ClearDelayCall`ÇåÀí¹ýÆÚ»Øµ÷
- ÏÞÖÆµ¥´Î¼ø¶¨²Ù×÷ÄÚ´æÕ¼ÓÃ≤5MB
2. **Òì³£´¦Àí»úÖÆ**£º
```lua
function SafeIdentify()
pcall(
function()
-- ºËÐļø¶¨Âß¼­
end,
function(err)
LogWrite("¼ø¶¨´íÎó£º"..err)
RollbackTransaction()
end
)
end
```

3. **·À×÷±×Éè¼Æ**£º
- Ìí¼Ó`AntiSpeedHack`¼ì²â¼ø¶¨ËÙ¶ÈÒì³£
- ²ÉÓÃRSA¼ÓÃܼø¶¨½á¹ûÊý¾Ý°ü

---

## ËÄ¡¢µ÷ÊÔ¹¤¾ßÁ´ÓëÈÕÖ¾·ÖÎö
### 4.1 µ÷ÊÔ¹¤¾ß¾ØÕó

| ¹¤¾ßÀàÐÍ | ÍÆ¼ö¹¤¾ß | ºËÐŦÄÜ |
|----------------|------------------------|------------------------------|
| Óï·¨¼ì²é | Notepad++ | À¨ºÅÆ¥Åä/Óï·¨¸ßÁÁ |
| ÍøÂç¼à¿Ø | Wireshark | ·â°üУÑé/ÑÓ³Ù·ÖÎö |
| ÄÚ´æ·ÖÎö | CheatEngine | ÄÚ´æÐ¹Â©¼ì²â |
| ÐÔÄÜÆÊÎö | Visual Studio Profiler | º¯ÊýºÄʱͳ¼Æ |
| ×Ô¶¯»¯²âÊÔ | AutoHotKey | ÅúÁ¿¼ø¶¨Ñ¹Á¦²âÊÔ |


### 4.2 ÈÕÖ¾·ÖÎö·¶Ê½
```log
[2025-03-29 14:35:22] INFO: PlayerID=1024 ¿ªÊ¼¼ø¶¨ÍÀÁúµ¶
[2025-03-29 14:35:23] DEBUG: ÏûºÄ¼ø¶¨·ûx3£¬Ê£Óà¿â´æ£º57
[2025-03-29 14:35:24] RANDOM: Éú³ÉÊôÐÔ³Ø[±©»÷,ÎüѪ,ÆÆ¼×]
[2025-03-29 14:35:25] ERROR: Êý¾Ý¿âдÈëʧ°Ü£¡´íÎóÂ룺2003
[2025-03-29 14:35:26] WARN: ÊÂÎñ»Ø¹ö£¬×°±¸ÊôÐÔδ±ä¸ü
```

·ÖÎöÒªµã£º
1. ʹÓÃ`grep "ERROR\|WARN" logfile.log`¿ìËÙ¶¨Î»Òì³£
2. ͨ¹ýʱ¼ä´Á¼ÆËã¸÷½×¶ÎºÄʱ
3. УÑéËæ»úÊýÉú³ÉÊÇ·ñ·ûºÏÕý̬·Ö²¼

---

## Îå¡¢°æ±¾¼æÈÝÐÔ½â¾ö·½°¸
½¨Á¢**¶àÒýÇæÊÊÅä²ã**´¦Àí²»Í¬°æ±¾²îÒ죺
```lua
-- ÒýÇæÀàÐͼì²â
if EngineType == "GOM" then
SetIdentifyCost(500Íò½ð±Ò)
elseif EngineType == "BLUE" then
SetIdentifyCost(300Ôª±¦)
end

-- ÃüÁîת»»Æ÷
function ConvertCmd(cmd)
local cmdMap = {
["GOM.SetAttr"] = "BLUE.ChangeAttr",
["GOM.RandomEx"] = "BLUE.GenRandom"
}
return cmdMap[cmd] or cmd
end
```

ͬ²½Î¬»¤**°æ±¾ÌØÐÔ¶ÔÕÕ±í**£¬±ê×¢¸÷ÒýÇæÔÚ¼ø¶¨´ÎÊý¡¢ÊôÐÔÉÏÏ޵ȲÎÊýµÄ²îÒì¡£