ÔÚ´«ÆæÉ±¹ÖÈÎÎñ½Å±¾ÖУ¬ÉèÖÃÈÎÎñʧ°ÜµÄÌõ¼þ¿ÉÒÔÔö¼ÓÈÎÎñµÄÌôÕ½ÐÔºÍȤζÐÔ¡£ÈÎÎñʧ°ÜµÄÌõ¼þͨ³£°üÀ¨Ê±¼äÏÞÖÆ¡¢ËÀÍö´ÎÊýÏÞÖÆ¡¢»÷ɱ´íÎóÄ¿±êµÈ¡£ÒÔÏÂÊÇÏêϸµÄÉè¼ÆË¼Â·ºÍʵÏÖ·½·¨¡£
---
### Ò»¡¢ÈÎÎñʧ°ÜÌõ¼þµÄ³£¼ûÀàÐÍ
1. **ʱ¼äÏÞÖÆ**£º
- Íæ¼ÒÐèÒªÔڹ涨ʱ¼äÄÚÍê³ÉÈÎÎñ£¬·ñÔòÈÎÎñʧ°Ü¡£
- ÀýÈ磺30·ÖÖÓÄÚ»÷ɱ50Ö»“÷¼÷Ãսʿ”¡£
2. **ËÀÍö´ÎÊýÏÞÖÆ**£º
- Íæ¼ÒÔÚÈÎÎñ¹ý³ÌÖÐËÀÍö´ÎÊý³¬¹ýÒ»¶¨ÏÞÖÆ£¬ÈÎÎñʧ°Ü¡£
- ÀýÈ磺ËÀÍö´ÎÊý³¬¹ý3´Î£¬ÈÎÎñʧ°Ü¡£
3. **»÷ɱ´íÎóÄ¿±ê**£º
- Íæ¼Ò»÷ɱÁË·ÇÈÎÎñÄ¿±êµÄ¹ÖÎ¿ÉÄܵ¼ÖÂÈÎÎñʧ°Ü¡£
- ÀýÈ磺»÷ɱÁË“½©Ê¬”¶ø²»ÊÇ“÷¼÷Ãսʿ”¡£
4. **ÈÎÎñÄ¿±êδ´ï³É**£º
- Íæ¼ÒδÄÜÔڹ涨ʱ¼äÄÚ»òÌõ¼þÏÂÍê³ÉÈÎÎñÄ¿±ê¡£
- ÀýÈ磺δÄÜÔڹ涨ʱ¼äÄÚ»÷ɱ×ã¹»ÊýÁ¿µÄ¹ÖÎï¡£
---
### ¶þ¡¢ÊµÏÖÈÎÎñʧ°ÜÌõ¼þµÄ½Å±¾Ê¾Àý
ÒÔÏÂÊÇÒ»¸ö»ùÓÚLua½Å±¾µÄʵÏÖʾÀý£¬¼ÙÉèÒýÇæÖ§³ÖLua½Å±¾À©Õ¹¡£
#### 1. ¶¨ÒåÈÎÎñÄ¿±êºÍʧ°ÜÌõ¼þ
```lua
-- ÈÎÎñIDºÍÃû³Æ
local taskID = 1001
local taskName = "»÷ɱ÷¼÷ÃսʿÈÎÎñ"
-- ÈÎÎñÄ¿±ê
local targetMonster = "÷¼÷Ãսʿ" -- ÐèÒª»÷ɱµÄ¹ÖÎïÃû³Æ
local targetKillCount = 50 -- ÐèÒª»÷ɱµÄ¹ÖÎïÊýÁ¿
-- ÈÎÎñʧ°ÜÌõ¼þ
local timeLimit = 30 * 60 -- ʱ¼äÏÞÖÆ£º30·ÖÖÓ£¨µ¥Î»£ºÃ룩
local maxDeathCount = 3 -- ×î´óËÀÍö´ÎÊý£º3´Î
-- ÈÎÎñ½±Àø
local rewardYuanbao = 100 -- Íê³ÉÈÎÎñºó½±ÀøµÄÔª±¦ÊýÁ¿
```
#### 2. ³õʼ»¯ÈÎÎñ״̬
```lua
-- Íæ¼Ò½ÓÈ¡ÈÎÎñʱµÄ»Øµ÷º¯Êý
function AcceptTask(player)
if player:GetLevel() >= 10 then -- ½ÓÈ¡ÈÎÎñµÄÌõ¼þ£ºÍæ¼ÒµÈ¼¶≥10
player:SetTaskProgress(taskID, 0) -- ³õʼ»¯ÈÎÎñ½ø¶È
player:SetTaskData(taskID, "startTime", os.time()) -- ¼Ç¼ÈÎÎñ¿ªÊ¼Ê±¼ä
player:SetTaskData(taskID, "deathCount", 0) -- ³õʼ»¯ËÀÍö´ÎÊý
player:SendMessage("ÄãÒѽÓÈ¡ÈÎÎñ£º" .. taskName .. "£¬ÇëÔÚ30·ÖÖÓÄÚÍê³É¡£")
else
player:SendMessage("ÄãµÄµÈ¼¶²»×㣬ÎÞ·¨½ÓÈ¡´ËÈÎÎñ¡£")
end
end
```
#### 3. Íæ¼Ò»÷ɱ¹ÖÎïʱ¸üÐÂÈÎÎñ½ø¶È
```lua
-- Íæ¼Ò»÷ɱ¹ÖÎïʱµÄ»Øµ÷º¯Êý
function OnKillMonster(player, monster)
-- ¼ì²é»÷ɱµÄ¹ÖÎïÊÇ·ñÊÇÈÎÎñÄ¿±ê
if monster:GetName() == targetMonster then
-- »ñÈ¡Íæ¼Òµ±Ç°µÄÈÎÎñ½ø¶È
local currentKillCount = player:GetTaskProgress(taskID) or 0
-- Èç¹ûÈÎÎñδÍê³É£¬¸üнø¶È
if currentKillCount < targetKillCount then
currentKillCount = currentKillCount + 1
player:SetTaskProgress(taskID, currentKillCount) -- ¸üÐÂÈÎÎñ½ø¶È
player:SendMessage("Äã»÷ɱÁË1Ö»" .. targetMonster .. "£¬µ±Ç°½ø¶È£º" .. currentKillCount .. "/" .. targetKillCount)
-- ¼ì²éÈÎÎñÊÇ·ñÍê³É
if currentKillCount >= targetKillCount then
CompleteTask(player) -- µ÷ÓÃÈÎÎñÍê³Éº¯Êý
end
end
else
-- Èç¹û»÷ɱÁË´íÎóµÄÄ¿±ê£¬¿ÉÄܵ¼ÖÂÈÎÎñʧ°Ü
player:SendMessage("¾¯¸æ£ºÄã»÷ɱÁË´íÎóµÄÄ¿±ê£¬¿ÉÄܵ¼ÖÂÈÎÎñʧ°Ü£¡")
end
end
```
#### 4. Íæ¼ÒËÀÍöʱ¸üÐÂËÀÍö´ÎÊý
```lua
-- Íæ¼ÒËÀÍöʱµÄ»Øµ÷º¯Êý
function OnPlayerDeath(player)
if player:HasTask(taskID) then
local deathCount = player:GetTaskData(taskID, "deathCount") or 0
deathCount = deathCount + 1
player:SetTaskData(taskID, "deathCount", deathCount) -- ¸üÐÂËÀÍö´ÎÊý
-- ¼ì²éËÀÍö´ÎÊýÊÇ·ñ³¬¹ýÏÞÖÆ
if deathCount >= maxDeathCount then
FailTask(player, "ËÀÍö´ÎÊý³¬¹ýÏÞÖÆ£¬ÈÎÎñʧ°Ü£¡")
else
player:SendMessage("ÄãÒÑËÀÍö" .. deathCount .. "´Î£¬Ê£Óà´ÎÊý£º" .. (maxDeathCount - deathCount))
end
end
end
```
#### 5. ¼ì²éÈÎÎñʱ¼äÏÞÖÆ
```lua
-- ¶¨Ê±¼ì²éÈÎÎñʱ¼äÏÞÖÆ
function CheckTimeLimit(player)
if player:HasTask(taskID) then
local startTime = player:GetTaskData(taskID, "startTime")
local currentTime = os.time()
-- ¼ì²éÊÇ·ñ³¬Ê±
if currentTime - startTime >= timeLimit then
FailTask(player, "ÈÎÎñʱ¼äÒѵ½£¬ÈÎÎñʧ°Ü£¡")
end
end
end
```
#### 6. ÈÎÎñʧ°ÜʱµÄ´¦ÀíÂß¼
```lua
-- ÈÎÎñʧ°ÜʱµÄ»Øµ÷º¯Êý
function FailTask(player, reason)
player:SendMessage("ÈÎÎñʧ°Ü£¡ÔÒò£º" .. reason)
player:RemoveTask(taskID) -- ÒÆ³ýÈÎÎñ
-- ¿ÉÒÔÌí¼ÓÆäËû³Í·£Âß¼£¬ÀýÈç¿Û³ýÔª±¦»ò¾Ñé
end
```
#### 7. Íæ¼ÒµÇ¼ʱ¼ì²éÈÎÎñ״̬
```lua
-- Íæ¼ÒµÇ¼ʱµÄ»Øµ÷º¯Êý
function OnPlayerLogin(player)
if player:HasTask(taskID) then
-- ¼ì²éÈÎÎñÊÇ·ñÒÑÍê³É
local currentKillCount = player:GetTaskProgress(taskID) or 0
if currentKillCount >= targetKillCount then
CompleteTask(player)
else
-- ¼ì²éÈÎÎñÊÇ·ñÒÑʧ°Ü
local startTime = player:GetTaskData(taskID, "startTime")
local currentTime = os.time()
if currentTime - startTime >= timeLimit then
FailTask(player, "ÈÎÎñʱ¼äÒѵ½£¬ÈÎÎñʧ°Ü£¡")
end
end
end
end
```
---
### Èý¡¢¹Ø¼üµã½âÎö
1. **ʱ¼äÏÞÖÆ**£º
- ʹÓÃ`os.time()`¼Ç¼ÈÎÎñ¿ªÊ¼Ê±¼ä£¬²¢ÔÚ¶¨Ê±¼ì²éÖÐÅжÏÊÇ·ñ³¬Ê±¡£
2. **ËÀÍö´ÎÊýÏÞÖÆ**£º
- ÔÚÍæ¼ÒËÀÍöʱ¸üÐÂËÀÍö´ÎÊý£¬²¢¼ì²éÊÇ·ñ³¬¹ýÏÞÖÆ¡£
3. **»÷ɱ´íÎóÄ¿±ê**£º
- ÔÚ`OnKillMonster`º¯ÊýÖУ¬¼ì²é»÷ɱµÄ¹ÖÎïÊÇ·ñÊÇÈÎÎñÄ¿±ê¡£
4. **ÈÎÎñʧ°Ü´¦Àí**£º
- ÔÚÈÎÎñʧ°Üʱ£¬ÒƳýÈÎÎñ²¢·¢ËÍʧ°ÜÌáʾ£¬¿ÉÒÔÌí¼Ó¶îÍâµÄ³Í·£Âß¼¡£
---
### ËÄ¡¢À©Õ¹¹¦ÄÜ
1. **ÈÎÎñʧ°Ü³Í·£**£º
- ¿ÉÒÔÉè¼ÆÈÎÎñʧ°ÜµÄ³Í·£»úÖÆ£¬ÀýÈç¿Û³ýÔª±¦¡¢¾Ñé»ò×°±¸¡£
2. **ÈÎÎñÖØÊÔ»úÖÆ**£º
- ÔÊÐíÍæ¼ÒÔÚÒ»¶¨Ìõ¼þÏÂÖØÐ½ÓÈ¡ÈÎÎñ¡£
3. **¶¯Ì¬ÈÎÎñÄѶÈ**£º
- ¸ù¾ÝÍæ¼ÒµÈ¼¶»òÈÎÎñ½ø¶È¶¯Ì¬µ÷ÕûÈÎÎñÄѶȡ£
4. **ÈÎÎñʧ°ÜÌáʾ**£º
- ÔÚÈÎÎñʧ°Üʱ£¬ÌṩÏêϸµÄʧ°ÜÔÒòºÍºóÐø²Ù×÷½¨Òé¡£
---
### Îå¡¢×ܽá
ͨ¹ýÉèÖÃÈÎÎñʧ°ÜÌõ¼þ£¬¿ÉÒÔÔö¼ÓÈÎÎñµÄÌôÕ½ÐÔºÍȤζÐÔ¡£±¾ÎÄÒÔʱ¼äÏÞÖÆºÍËÀÍö´ÎÊýÏÞÖÆÎªÀý£¬Ïêϸ½éÉÜÁËÈçºÎÔÚ´«ÆæÉ±¹ÖÈÎÎñ½Å±¾ÖÐʵÏÖÈÎÎñʧ°ÜÂß¼¡£¿ª·¢Õß¿ÉÒÔ¸ù¾Ýʵ¼ÊÐèÇ󣬽øÒ»²½À©Õ¹ÈÎÎñϵͳµÄ¹¦ÄÜ£¬ÌáÉýÓÎÏ·ÌåÑé¡£
---
### ¸½Â¼£º³£¼ûÎÊÌâÓë½â¾ö·½°¸
1. **ʱ¼äÏÞÖÆ²»×¼È·**£º
- È·±£Ê¹ÓÃ`os.time()`»ñÈ¡µÄʱ¼äµ¥Î»ÎªÃ룬²¢Ôڽű¾ÖÐͳһʱ¼äµ¥Î»¡£
2. **ËÀÍö´ÎÊýδ¸üÐÂ**£º
- ¼ì²é`OnPlayerDeath`º¯ÊýÊÇ·ñ±»ÕýÈ·´¥·¢£¬²¢È·±£ËÀÍö´ÎÊýÊý¾Ý±»ÕýÈ·´æ´¢¡£
3. **ÈÎÎñʧ°Üδ´¥·¢**£º
- ¼ì²éÈÎÎñʧ°ÜÌõ¼þµÄÅжÏÂß¼£¬È·±£Ìõ¼þÂú×ãʱµ÷ÓÃ`FailTask`º¯Êý¡£
ͨ¹ýÒÔÉÏ·½·¨£¬Äú¿ÉÒÔÇáËÉʵÏÖ´«ÆæÉ±¹ÖÈÎÎñ½Å±¾ÖеÄÈÎÎñʧ°ÜÌõ¼þÉèÖá£
ÔÚ´«ÆæÉ±¹ÖÈÎÎñ½Å±¾ÖÐÉèÖÃÈÎÎñʧ°ÜµÄÌõ¼þ£¬Äܹ»Ôö¼ÓÓÎÏ·µÄÌôÕ½ÐԺͽôÕŸС£ÒÔÏ´Ӳ»Í¬µÄ½Ç¶ÈΪÄãÏêϸ½éÉÜÉèÖÃÈÎÎñʧ°ÜÌõ¼þµÄ·½·¨£¬²¢¸ø³öÏàÓ¦µÄ½Å±¾Ê¾Àý£¨ÒÔ³£¼ûµÄ Mir2 ½Å±¾ÓïÑÔΪÀý£©¡£
### »ùÓÚʱ¼äÏÞÖÆÉèÖÃÈÎÎñʧ°ÜÌõ¼þ
ºÜ¶àɱ¹ÖÈÎÎñ»áÉ趨һ¸öʱ¼äÆÚÏÞ£¬Íæ¼ÒÐèÒªÔڹ涨ʱ¼äÄÚÍê³Éɱ¹ÖÄ¿±ê£¬Èô³¬Ê±ÔòÈÎÎñʧ°Ü¡£
#### ʵÏÖ²½Öè
1. **É趨ÈÎÎñʱ¼äÏÞÖÆ**£ºÔÚÈÎÎñ¿ªÊ¼Ê±£¬È·¶¨Íæ¼ÒÍê³ÉÈÎÎñµÄʱ¼äÉÏÏÞ¡£
2. **¼Ç¼ÈÎÎñ¿ªÊ¼Ê±¼ä**£ºµ±Íæ¼Ò½ÓÊÜÈÎÎñʱ£¬¼Ç¼µ±Ç°µÄʱ¼ä×÷ΪÈÎÎñ¿ªÊ¼Ê±¼ä¡£
3. **ʵʱ¼ì²éʱ¼ä**£ºÔÚÍæ¼Òɱ¹Ö¹ý³ÌÖУ¬³ÖÐø¼ì²éµ±Ç°Ê±¼äÓëÈÎÎñ¿ªÊ¼Ê±¼äµÄ²îÖµÊÇ·ñ³¬¹ýÁËʱ¼äÏÞÖÆ¡£
4. **Åж¨ÈÎÎñʧ°Ü**£ºÈô³¬¹ýʱ¼äÏÞÖÆÇÒÍæ¼ÒδÍê³Éɱ¹ÖÄ¿±ê£¬ÔòÅж¨ÈÎÎñʧ°Ü¡£
#### ½Å±¾Ê¾Àý
```plaintext
// ÈÎÎñ³õʼ»¯½Å±¾£¬É趨ÈÎÎñÐÅÏ¢ºÍ¿ªÊ¼Ê±¼ä
[@SetTimedKillQuest]
#IF
#ACT
// É趨ÈÎÎñÃû³Æ
SET @QuestName ÏÞʱ»÷ɱ½©Ê¬ÈÎÎñ
// É趨Ŀ±ê¹ÖÎïÃû³Æ
SET @TargetMonster ½©Ê¬
// É趨ÐèÒª»÷ɱµÄ¹ÖÎïÊýÁ¿
SET @TargetKillCount 20
// É趨ÈÎÎñʱ¼äÏÞÖÆ£¨µ¥Î»£ºÃ룩
SET @TimeLimit 600
// ¼Ç¼ÈÎÎñ¿ªÊ¼Ê±¼ä
GETDATETIME @StartTime
// ³õʼ»¯Íæ¼Òµ±Ç°»÷ɱÊýÁ¿Îª 0
SET @CurrentKillCount 0
// ÌáÊ¾Íæ¼Ò½ÓÊÜÈÎÎñ
SENDMSG 0 ÄãÒѽÓÊÜÈÎÎñ£º%s£¬ÐèÒªÔÚ %d ÃëÄÚ»÷ɱ %d Ö» %s£¡ @QuestName @TimeLimit @TargetKillCount @TargetMonster
// Íæ¼Ò»÷ɱ¹ÖÎïʱ´¥·¢µÄ½Å±¾
[@KillMonster]
#IF
EQUAL <$KILLMONSTERNAME> @TargetMonster // Åжϻ÷ɱµÄ¹ÖÎïÊÇ·ñΪĿ±ê¹ÖÎï
#ACT
// Ôö¼Óµ±Ç°»÷ɱÊýÁ¿
INC @CurrentKillCount 1
// ÌáÊ¾Íæ¼Òµ±Ç°»÷ɱ½ø¶È
SENDMSG 0 ÄãÒÑ»÷ɱ %d Ö» %s£¬»¹Ðè»÷ɱ %d Ö»Íê³ÉÈÎÎñ¡£ @CurrentKillCount @TargetMonster [@TargetKillCount - @CurrentKillCount]
// ÅжÏÊÇ·ñÍê³ÉÈÎÎñ
IF
EQUAL @CurrentKillCount @TargetKillCount
THENACT
// ÈÎÎñÍê³É£¬·¢·Å½±Àø
ADDMONEY 500 // ½±Àø 500 ½ð±Ò
SENDMSG 0 ¹§Ï²ÄãÍê³ÉÁË %s ÈÎÎñ£¬»ñµÃ 500 ½ð±Ò½±Àø£¡ @QuestName
// ÖØÖÃÈÎÎñ¼ÆÊý
SET @CurrentKillCount 0
ENDIF
// ¶¨Ê±¼ì²éÈÎÎñÊÇ·ñ³¬Ê±
[@CheckQuestTimeout]
#IF
// »ñÈ¡µ±Ç°Ê±¼ä
GETDATETIME @CurrentTime
// ¼ÆËãʱ¼ä²î£¨µ¥Î»£ºÃ룩
SUB @TimeElapsed @CurrentTime @StartTime
// ÅжÏÊÇ·ñ³¬Ê±ÇÒδÍê³ÉÈÎÎñ
GREATER @TimeElapsed @TimeLimit
NOT EQUAL @CurrentKillCount @TargetKillCount
#ACT
// ÈÎÎñʧ°ÜÌáʾ
SENDMSG 0 ºÜÒź¶£¬ÄãδÄÜÔڹ涨ʱ¼äÄÚÍê³É %s ÈÎÎñ£¬ÈÎÎñʧ°Ü£¡ @QuestName
// ÖØÖÃÈÎÎñ¼ÆÊý
SET @CurrentKillCount 0
```
### »ùÓÚÍæ¼Ò״̬ÉèÖÃÈÎÎñʧ°ÜÌõ¼þ
Íæ¼ÒÔÚÍê³Éɱ¹ÖÈÎÎñ¹ý³ÌÖУ¬Èç¹û×ÔÉíµÄijЩ״̬²»Âú×ãÒªÇó£¬Ò²¿ÉÅж¨ÈÎÎñʧ°Ü£¬±ÈÈçÍæ¼ÒËÀÍö¡¢±³°üÂúÎÞ·¨Ê°È¡ÎïÆ·µÈ¡£
#### ʵÏÖ²½Öè
1. **È·¶¨Ó°ÏìÈÎÎñµÄÍæ¼Ò״̬**£ºÃ÷È·ÄÄÐ©Íæ¼Ò״̬»áµ¼ÖÂÈÎÎñʧ°Ü£¬ÈçÉúÃüֵΪ 0¡¢±³°ü¿Õ¼ä²»×ãµÈ¡£
2. **ʵʱ¼à²âÍæ¼Ò״̬**£ºÔÚÍæ¼Òɱ¹Ö¹ý³ÌÖУ¬³ÖÐø¼ì²éÕâЩ״̬¡£
3. **Åж¨ÈÎÎñʧ°Ü**£ºµ±Íæ¼Ò״̬²»Âú×ãÒªÇóÇÒδÍê³Éɱ¹ÖÄ¿±êʱ£¬Åж¨ÈÎÎñʧ°Ü¡£
#### ½Å±¾Ê¾Àý£¨ÒÔÍæ¼ÒËÀÍöµ¼ÖÂÈÎÎñʧ°ÜΪÀý£©
```plaintext
// ÈÎÎñ³õʼ»¯½Å±¾£¬É趨ÈÎÎñÐÅÏ¢
[@SetKillQuestWithDeathFail]
#IF
#ACT
// É趨ÈÎÎñÃû³Æ
SET @QuestName ɱ¹Ö·ÀËÀÍöÈÎÎñ
// É趨Ŀ±ê¹ÖÎïÃû³Æ
SET @TargetMonster °ëÊÞÈË
// É趨ÐèÒª»÷ɱµÄ¹ÖÎïÊýÁ¿
SET @TargetKillCount 15
// ³õʼ»¯Íæ¼Òµ±Ç°»÷ɱÊýÁ¿Îª 0
SET @CurrentKillCount 0
// ÌáÊ¾Íæ¼Ò½ÓÊÜÈÎÎñ
SENDMSG 0 ÄãÒѽÓÊÜÈÎÎñ£º%s£¬ÐèÒª»÷ɱ %d Ö» %s£¬ÆÚ¼äËÀÍöÔòÈÎÎñʧ°Ü£¡ @QuestName @TargetKillCount @TargetMonster
// Íæ¼Ò»÷ɱ¹ÖÎïʱ´¥·¢µÄ½Å±¾
[@KillMonster]
#IF
EQUAL <$KILLMONSTERNAME> @TargetMonster // Åжϻ÷ɱµÄ¹ÖÎïÊÇ·ñΪĿ±ê¹ÖÎï
#ACT
// Ôö¼Óµ±Ç°»÷ɱÊýÁ¿
INC @CurrentKillCount 1
// ÌáÊ¾Íæ¼Òµ±Ç°»÷ɱ½ø¶È
SENDMSG 0 ÄãÒÑ»÷ɱ %d Ö» %s£¬»¹Ðè»÷ɱ %d Ö»Íê³ÉÈÎÎñ¡£ @CurrentKillCount @TargetMonster [@TargetKillCount - @CurrentKillCount]
// ÅжÏÊÇ·ñÍê³ÉÈÎÎñ
IF
EQUAL @CurrentKillCount @TargetKillCount
THENACT
// ÈÎÎñÍê³É£¬·¢·Å½±Àø
ADDEXP 8000 // ½±Àø 8000 ¾ÑéÖµ
SENDMSG 0 ¹§Ï²ÄãÍê³ÉÁË %s ÈÎÎñ£¬»ñµÃ 8000 ¾ÑéÖµ½±Àø£¡ @QuestName
// ÖØÖÃÈÎÎñ¼ÆÊý
SET @CurrentKillCount 0
ENDIF
// Íæ¼ÒËÀÍöʱ´¥·¢µÄ½Å±¾
[@PlayerDeath]
#IF
NOT EQUAL @CurrentKillCount @TargetKillCount // ÅжÏÈÎÎñÊÇ·ñδÍê³É
#ACT
// ÈÎÎñʧ°ÜÌáʾ
SENDMSG 0 ºÜÒź¶£¬ÄãÔÚÍê³É %s ÈÎÎñ¹ý³ÌÖÐËÀÍö£¬ÈÎÎñʧ°Ü£¡ @QuestName
// ÖØÖÃÈÎÎñ¼ÆÊý
SET @CurrentKillCount 0
```
### »ùÓÚ¹ÖÎï״̬ÉèÖÃÈÎÎñʧ°ÜÌõ¼þ
ÓÐʱºò£¬ÈÎÎñ¿ÉÄÜÒªÇóÍæ¼Ò±£»¤Ä³Ð©Ìض¨¹ÖÎï²»±»»÷ɱ£¬»òÕßÒªÇóÌØ¶¨¹ÖÎï´æ»îµ½ÈÎÎñ½áÊø£¬ÈôÕâЩ¹ÖÎïËÀÍöÔòÈÎÎñʧ°Ü¡£
#### ʵÏÖ²½Öè
1. **È·¶¨¹Ø¼ü¹ÖÎï**£ºÃ÷È·ÄÄЩ¹ÖÎïµÄ״̬»áÓ°ÏìÈÎÎñµÄ³É°Ü¡£
2. **ʵʱ¼à²â¹ÖÎï״̬**£ºÔÚÈÎÎñ¹ý³ÌÖУ¬³ÖÐø¼ì²éÕâЩ¹Ø¼ü¹ÖÎïÊÇ·ñ´æ»î¡£
3. **Åж¨ÈÎÎñʧ°Ü**£ºµ±¹Ø¼ü¹ÖÎïËÀÍöÇÒÍæ¼ÒδÍê³Éɱ¹ÖÄ¿±êʱ£¬Åж¨ÈÎÎñʧ°Ü¡£
#### ½Å±¾Ê¾Àý
```plaintext
// ÈÎÎñ³õʼ»¯½Å±¾£¬É趨ÈÎÎñÐÅÏ¢
[@SetProtectMonsterQuest]
#IF
#ACT
// É趨ÈÎÎñÃû³Æ
SET @QuestName ±£»¤¹ÖÎïɱ¹ÖÈÎÎñ
// É趨Ŀ±ê¹ÖÎïÃû³Æ
SET @TargetMonster ÷¼÷ù¼ýÊÖ
// É趨ÐèÒª»÷ɱµÄÄ¿±ê¹ÖÎïÊýÁ¿
SET @TargetKillCount 10
// É趨ÐèÒª±£»¤µÄ¹ÖÎïÃû³Æ
SET @ProtectedMonster µ¾²ÝÈËÊØÎÀ
// ³õʼ»¯Íæ¼Òµ±Ç°»÷ɱĿ±ê¹ÖÎïÊýÁ¿Îª 0
SET @CurrentKillCount 0
// ³õʼ»¯±£»¤¹ÖÎï´æ»î±ê¼ÇΪ 1£¨´æ»î£©
SET @ProtectedMonsterAlive 1
// ÌáÊ¾Íæ¼Ò½ÓÊÜÈÎÎñ
SENDMSG 0 ÄãÒѽÓÊÜÈÎÎñ£º%s£¬ÐèÒª»÷ɱ %d Ö» %s£¬Í¬Ê±±£»¤ %s ´æ»î£¡ @QuestName @TargetKillCount @TargetMonster @ProtectedMonster
// Íæ¼Ò»÷ɱĿ±ê¹ÖÎïʱ´¥·¢µÄ½Å±¾
[@KillTargetMonster]
#IF
EQUAL <$KILLMONSTERNAME> @TargetMonster // Åжϻ÷ɱµÄ¹ÖÎïÊÇ·ñΪĿ±ê¹ÖÎï
#ACT
// Ôö¼Óµ±Ç°»÷ɱÊýÁ¿
INC @CurrentKillCount 1
// ÌáÊ¾Íæ¼Òµ±Ç°»÷ɱ½ø¶È
SENDMSG 0 ÄãÒÑ»÷ɱ %d Ö» %s£¬»¹Ðè»÷ɱ %d Ö»Íê³ÉÈÎÎñ¡£ @CurrentKillCount @TargetMonster [@TargetKillCount - @CurrentKillCount]
// ÅжÏÊÇ·ñÍê³ÉÈÎÎñ
IF
EQUAL @CurrentKillCount @TargetKillCount
EQUAL @ProtectedMonsterAlive 1 // ¼ì²é±£»¤¹ÖÎïÊÇ·ñ´æ»î
THENACT
// ÈÎÎñÍê³É£¬·¢·Å½±Àø
ADDITEM ħ·¨³¤ÅÛ 1 // ½±ÀøÒ»¼þħ·¨³¤ÅÛ
SENDMSG 0 ¹§Ï²ÄãÍê³ÉÁË %s ÈÎÎñ£¬»ñµÃħ·¨³¤ÅÛÒ»¼þ£¡ @QuestName
// ÖØÖÃÈÎÎñ¼ÆÊý
SET @CurrentKillCount 0
ENDIF
// ±£»¤¹ÖÎï±»»÷ɱʱ´¥·¢µÄ½Å±¾
[@ProtectMonsterKilled]
#IF
EQUAL <$KILLMONSTERNAME> @ProtectedMonster
NOT EQUAL @CurrentKillCount @TargetKillCount // ÅжÏÈÎÎñÊÇ·ñδÍê³É
#ACT
// ÉèÖñ£»¤¹ÖÎï´æ»î±ê¼ÇΪ 0£¨ËÀÍö£©
SET @ProtectedMonsterAlive 0
// ÈÎÎñʧ°ÜÌáʾ
SENDMSG 0 ºÜÒź¶£¬%s ±»»÷ɱ£¬ÄãδÍê³É %s ÈÎÎñ£¬ÈÎÎñʧ°Ü£¡ @ProtectedMonster @QuestName
// ÖØÖÃÈÎÎñ¼ÆÊý
SET @CurrentKillCount 0
```
ÔÚʵ¼ÊÓ¦ÓÃÖУ¬Òª¸ù¾Ý´«ÆæµÄ¾ßÌåÐèÇóºÍ·þÎñ¶Ë½Å±¾ÓïÑÔµÄÌØµã£¬¶Ô½Å±¾½øÐÐÁé»îµ÷ÕûºÍÓÅ»¯£¬ÒÔÈ·±£ÈÎÎñʧ°ÜÌõ¼þµÄÅжÏÂ߼׼ȷÎÞÎó¡£
---
### Ò»¡¢ÈÎÎñʧ°ÜÌõ¼þµÄ³£¼ûÀàÐÍ
1. **ʱ¼äÏÞÖÆ**£º
- Íæ¼ÒÐèÒªÔڹ涨ʱ¼äÄÚÍê³ÉÈÎÎñ£¬·ñÔòÈÎÎñʧ°Ü¡£
- ÀýÈ磺30·ÖÖÓÄÚ»÷ɱ50Ö»“÷¼÷Ãսʿ”¡£
2. **ËÀÍö´ÎÊýÏÞÖÆ**£º
- Íæ¼ÒÔÚÈÎÎñ¹ý³ÌÖÐËÀÍö´ÎÊý³¬¹ýÒ»¶¨ÏÞÖÆ£¬ÈÎÎñʧ°Ü¡£
- ÀýÈ磺ËÀÍö´ÎÊý³¬¹ý3´Î£¬ÈÎÎñʧ°Ü¡£
3. **»÷ɱ´íÎóÄ¿±ê**£º
- Íæ¼Ò»÷ɱÁË·ÇÈÎÎñÄ¿±êµÄ¹ÖÎ¿ÉÄܵ¼ÖÂÈÎÎñʧ°Ü¡£
- ÀýÈ磺»÷ɱÁË“½©Ê¬”¶ø²»ÊÇ“÷¼÷Ãսʿ”¡£
4. **ÈÎÎñÄ¿±êδ´ï³É**£º
- Íæ¼ÒδÄÜÔڹ涨ʱ¼äÄÚ»òÌõ¼þÏÂÍê³ÉÈÎÎñÄ¿±ê¡£
- ÀýÈ磺δÄÜÔڹ涨ʱ¼äÄÚ»÷ɱ×ã¹»ÊýÁ¿µÄ¹ÖÎï¡£
---
### ¶þ¡¢ÊµÏÖÈÎÎñʧ°ÜÌõ¼þµÄ½Å±¾Ê¾Àý
ÒÔÏÂÊÇÒ»¸ö»ùÓÚLua½Å±¾µÄʵÏÖʾÀý£¬¼ÙÉèÒýÇæÖ§³ÖLua½Å±¾À©Õ¹¡£
#### 1. ¶¨ÒåÈÎÎñÄ¿±êºÍʧ°ÜÌõ¼þ
```lua
-- ÈÎÎñIDºÍÃû³Æ
local taskID = 1001
local taskName = "»÷ɱ÷¼÷ÃսʿÈÎÎñ"
-- ÈÎÎñÄ¿±ê
local targetMonster = "÷¼÷Ãսʿ" -- ÐèÒª»÷ɱµÄ¹ÖÎïÃû³Æ
local targetKillCount = 50 -- ÐèÒª»÷ɱµÄ¹ÖÎïÊýÁ¿
-- ÈÎÎñʧ°ÜÌõ¼þ
local timeLimit = 30 * 60 -- ʱ¼äÏÞÖÆ£º30·ÖÖÓ£¨µ¥Î»£ºÃ룩
local maxDeathCount = 3 -- ×î´óËÀÍö´ÎÊý£º3´Î
-- ÈÎÎñ½±Àø
local rewardYuanbao = 100 -- Íê³ÉÈÎÎñºó½±ÀøµÄÔª±¦ÊýÁ¿
```
#### 2. ³õʼ»¯ÈÎÎñ״̬
```lua
-- Íæ¼Ò½ÓÈ¡ÈÎÎñʱµÄ»Øµ÷º¯Êý
function AcceptTask(player)
if player:GetLevel() >= 10 then -- ½ÓÈ¡ÈÎÎñµÄÌõ¼þ£ºÍæ¼ÒµÈ¼¶≥10
player:SetTaskProgress(taskID, 0) -- ³õʼ»¯ÈÎÎñ½ø¶È
player:SetTaskData(taskID, "startTime", os.time()) -- ¼Ç¼ÈÎÎñ¿ªÊ¼Ê±¼ä
player:SetTaskData(taskID, "deathCount", 0) -- ³õʼ»¯ËÀÍö´ÎÊý
player:SendMessage("ÄãÒѽÓÈ¡ÈÎÎñ£º" .. taskName .. "£¬ÇëÔÚ30·ÖÖÓÄÚÍê³É¡£")
else
player:SendMessage("ÄãµÄµÈ¼¶²»×㣬ÎÞ·¨½ÓÈ¡´ËÈÎÎñ¡£")
end
end
```
#### 3. Íæ¼Ò»÷ɱ¹ÖÎïʱ¸üÐÂÈÎÎñ½ø¶È
```lua
-- Íæ¼Ò»÷ɱ¹ÖÎïʱµÄ»Øµ÷º¯Êý
function OnKillMonster(player, monster)
-- ¼ì²é»÷ɱµÄ¹ÖÎïÊÇ·ñÊÇÈÎÎñÄ¿±ê
if monster:GetName() == targetMonster then
-- »ñÈ¡Íæ¼Òµ±Ç°µÄÈÎÎñ½ø¶È
local currentKillCount = player:GetTaskProgress(taskID) or 0
-- Èç¹ûÈÎÎñδÍê³É£¬¸üнø¶È
if currentKillCount < targetKillCount then
currentKillCount = currentKillCount + 1
player:SetTaskProgress(taskID, currentKillCount) -- ¸üÐÂÈÎÎñ½ø¶È
player:SendMessage("Äã»÷ɱÁË1Ö»" .. targetMonster .. "£¬µ±Ç°½ø¶È£º" .. currentKillCount .. "/" .. targetKillCount)
-- ¼ì²éÈÎÎñÊÇ·ñÍê³É
if currentKillCount >= targetKillCount then
CompleteTask(player) -- µ÷ÓÃÈÎÎñÍê³Éº¯Êý
end
end
else
-- Èç¹û»÷ɱÁË´íÎóµÄÄ¿±ê£¬¿ÉÄܵ¼ÖÂÈÎÎñʧ°Ü
player:SendMessage("¾¯¸æ£ºÄã»÷ɱÁË´íÎóµÄÄ¿±ê£¬¿ÉÄܵ¼ÖÂÈÎÎñʧ°Ü£¡")
end
end
```
#### 4. Íæ¼ÒËÀÍöʱ¸üÐÂËÀÍö´ÎÊý
```lua
-- Íæ¼ÒËÀÍöʱµÄ»Øµ÷º¯Êý
function OnPlayerDeath(player)
if player:HasTask(taskID) then
local deathCount = player:GetTaskData(taskID, "deathCount") or 0
deathCount = deathCount + 1
player:SetTaskData(taskID, "deathCount", deathCount) -- ¸üÐÂËÀÍö´ÎÊý
-- ¼ì²éËÀÍö´ÎÊýÊÇ·ñ³¬¹ýÏÞÖÆ
if deathCount >= maxDeathCount then
FailTask(player, "ËÀÍö´ÎÊý³¬¹ýÏÞÖÆ£¬ÈÎÎñʧ°Ü£¡")
else
player:SendMessage("ÄãÒÑËÀÍö" .. deathCount .. "´Î£¬Ê£Óà´ÎÊý£º" .. (maxDeathCount - deathCount))
end
end
end
```
#### 5. ¼ì²éÈÎÎñʱ¼äÏÞÖÆ
```lua
-- ¶¨Ê±¼ì²éÈÎÎñʱ¼äÏÞÖÆ
function CheckTimeLimit(player)
if player:HasTask(taskID) then
local startTime = player:GetTaskData(taskID, "startTime")
local currentTime = os.time()
-- ¼ì²éÊÇ·ñ³¬Ê±
if currentTime - startTime >= timeLimit then
FailTask(player, "ÈÎÎñʱ¼äÒѵ½£¬ÈÎÎñʧ°Ü£¡")
end
end
end
```
#### 6. ÈÎÎñʧ°ÜʱµÄ´¦ÀíÂß¼
```lua
-- ÈÎÎñʧ°ÜʱµÄ»Øµ÷º¯Êý
function FailTask(player, reason)
player:SendMessage("ÈÎÎñʧ°Ü£¡ÔÒò£º" .. reason)
player:RemoveTask(taskID) -- ÒÆ³ýÈÎÎñ
-- ¿ÉÒÔÌí¼ÓÆäËû³Í·£Âß¼£¬ÀýÈç¿Û³ýÔª±¦»ò¾Ñé
end
```
#### 7. Íæ¼ÒµÇ¼ʱ¼ì²éÈÎÎñ״̬
```lua
-- Íæ¼ÒµÇ¼ʱµÄ»Øµ÷º¯Êý
function OnPlayerLogin(player)
if player:HasTask(taskID) then
-- ¼ì²éÈÎÎñÊÇ·ñÒÑÍê³É
local currentKillCount = player:GetTaskProgress(taskID) or 0
if currentKillCount >= targetKillCount then
CompleteTask(player)
else
-- ¼ì²éÈÎÎñÊÇ·ñÒÑʧ°Ü
local startTime = player:GetTaskData(taskID, "startTime")
local currentTime = os.time()
if currentTime - startTime >= timeLimit then
FailTask(player, "ÈÎÎñʱ¼äÒѵ½£¬ÈÎÎñʧ°Ü£¡")
end
end
end
end
```
---
### Èý¡¢¹Ø¼üµã½âÎö
1. **ʱ¼äÏÞÖÆ**£º
- ʹÓÃ`os.time()`¼Ç¼ÈÎÎñ¿ªÊ¼Ê±¼ä£¬²¢ÔÚ¶¨Ê±¼ì²éÖÐÅжÏÊÇ·ñ³¬Ê±¡£
2. **ËÀÍö´ÎÊýÏÞÖÆ**£º
- ÔÚÍæ¼ÒËÀÍöʱ¸üÐÂËÀÍö´ÎÊý£¬²¢¼ì²éÊÇ·ñ³¬¹ýÏÞÖÆ¡£
3. **»÷ɱ´íÎóÄ¿±ê**£º
- ÔÚ`OnKillMonster`º¯ÊýÖУ¬¼ì²é»÷ɱµÄ¹ÖÎïÊÇ·ñÊÇÈÎÎñÄ¿±ê¡£
4. **ÈÎÎñʧ°Ü´¦Àí**£º
- ÔÚÈÎÎñʧ°Üʱ£¬ÒƳýÈÎÎñ²¢·¢ËÍʧ°ÜÌáʾ£¬¿ÉÒÔÌí¼Ó¶îÍâµÄ³Í·£Âß¼¡£
---
### ËÄ¡¢À©Õ¹¹¦ÄÜ
1. **ÈÎÎñʧ°Ü³Í·£**£º
- ¿ÉÒÔÉè¼ÆÈÎÎñʧ°ÜµÄ³Í·£»úÖÆ£¬ÀýÈç¿Û³ýÔª±¦¡¢¾Ñé»ò×°±¸¡£
2. **ÈÎÎñÖØÊÔ»úÖÆ**£º
- ÔÊÐíÍæ¼ÒÔÚÒ»¶¨Ìõ¼þÏÂÖØÐ½ÓÈ¡ÈÎÎñ¡£
3. **¶¯Ì¬ÈÎÎñÄѶÈ**£º
- ¸ù¾ÝÍæ¼ÒµÈ¼¶»òÈÎÎñ½ø¶È¶¯Ì¬µ÷ÕûÈÎÎñÄѶȡ£
4. **ÈÎÎñʧ°ÜÌáʾ**£º
- ÔÚÈÎÎñʧ°Üʱ£¬ÌṩÏêϸµÄʧ°ÜÔÒòºÍºóÐø²Ù×÷½¨Òé¡£
---
### Îå¡¢×ܽá
ͨ¹ýÉèÖÃÈÎÎñʧ°ÜÌõ¼þ£¬¿ÉÒÔÔö¼ÓÈÎÎñµÄÌôÕ½ÐÔºÍȤζÐÔ¡£±¾ÎÄÒÔʱ¼äÏÞÖÆºÍËÀÍö´ÎÊýÏÞÖÆÎªÀý£¬Ïêϸ½éÉÜÁËÈçºÎÔÚ´«ÆæÉ±¹ÖÈÎÎñ½Å±¾ÖÐʵÏÖÈÎÎñʧ°ÜÂß¼¡£¿ª·¢Õß¿ÉÒÔ¸ù¾Ýʵ¼ÊÐèÇ󣬽øÒ»²½À©Õ¹ÈÎÎñϵͳµÄ¹¦ÄÜ£¬ÌáÉýÓÎÏ·ÌåÑé¡£
---
### ¸½Â¼£º³£¼ûÎÊÌâÓë½â¾ö·½°¸
1. **ʱ¼äÏÞÖÆ²»×¼È·**£º
- È·±£Ê¹ÓÃ`os.time()`»ñÈ¡µÄʱ¼äµ¥Î»ÎªÃ룬²¢Ôڽű¾ÖÐͳһʱ¼äµ¥Î»¡£
2. **ËÀÍö´ÎÊýδ¸üÐÂ**£º
- ¼ì²é`OnPlayerDeath`º¯ÊýÊÇ·ñ±»ÕýÈ·´¥·¢£¬²¢È·±£ËÀÍö´ÎÊýÊý¾Ý±»ÕýÈ·´æ´¢¡£
3. **ÈÎÎñʧ°Üδ´¥·¢**£º
- ¼ì²éÈÎÎñʧ°ÜÌõ¼þµÄÅжÏÂß¼£¬È·±£Ìõ¼þÂú×ãʱµ÷ÓÃ`FailTask`º¯Êý¡£
ͨ¹ýÒÔÉÏ·½·¨£¬Äú¿ÉÒÔÇáËÉʵÏÖ´«ÆæÉ±¹ÖÈÎÎñ½Å±¾ÖеÄÈÎÎñʧ°ÜÌõ¼þÉèÖá£
ÔÚ´«ÆæÉ±¹ÖÈÎÎñ½Å±¾ÖÐÉèÖÃÈÎÎñʧ°ÜµÄÌõ¼þ£¬Äܹ»Ôö¼ÓÓÎÏ·µÄÌôÕ½ÐԺͽôÕŸС£ÒÔÏ´Ӳ»Í¬µÄ½Ç¶ÈΪÄãÏêϸ½éÉÜÉèÖÃÈÎÎñʧ°ÜÌõ¼þµÄ·½·¨£¬²¢¸ø³öÏàÓ¦µÄ½Å±¾Ê¾Àý£¨ÒÔ³£¼ûµÄ Mir2 ½Å±¾ÓïÑÔΪÀý£©¡£
### »ùÓÚʱ¼äÏÞÖÆÉèÖÃÈÎÎñʧ°ÜÌõ¼þ
ºÜ¶àɱ¹ÖÈÎÎñ»áÉ趨һ¸öʱ¼äÆÚÏÞ£¬Íæ¼ÒÐèÒªÔڹ涨ʱ¼äÄÚÍê³Éɱ¹ÖÄ¿±ê£¬Èô³¬Ê±ÔòÈÎÎñʧ°Ü¡£
#### ʵÏÖ²½Öè
1. **É趨ÈÎÎñʱ¼äÏÞÖÆ**£ºÔÚÈÎÎñ¿ªÊ¼Ê±£¬È·¶¨Íæ¼ÒÍê³ÉÈÎÎñµÄʱ¼äÉÏÏÞ¡£
2. **¼Ç¼ÈÎÎñ¿ªÊ¼Ê±¼ä**£ºµ±Íæ¼Ò½ÓÊÜÈÎÎñʱ£¬¼Ç¼µ±Ç°µÄʱ¼ä×÷ΪÈÎÎñ¿ªÊ¼Ê±¼ä¡£
3. **ʵʱ¼ì²éʱ¼ä**£ºÔÚÍæ¼Òɱ¹Ö¹ý³ÌÖУ¬³ÖÐø¼ì²éµ±Ç°Ê±¼äÓëÈÎÎñ¿ªÊ¼Ê±¼äµÄ²îÖµÊÇ·ñ³¬¹ýÁËʱ¼äÏÞÖÆ¡£
4. **Åж¨ÈÎÎñʧ°Ü**£ºÈô³¬¹ýʱ¼äÏÞÖÆÇÒÍæ¼ÒδÍê³Éɱ¹ÖÄ¿±ê£¬ÔòÅж¨ÈÎÎñʧ°Ü¡£
#### ½Å±¾Ê¾Àý
```plaintext
// ÈÎÎñ³õʼ»¯½Å±¾£¬É趨ÈÎÎñÐÅÏ¢ºÍ¿ªÊ¼Ê±¼ä
[@SetTimedKillQuest]
#IF
#ACT
// É趨ÈÎÎñÃû³Æ
SET @QuestName ÏÞʱ»÷ɱ½©Ê¬ÈÎÎñ
// É趨Ŀ±ê¹ÖÎïÃû³Æ
SET @TargetMonster ½©Ê¬
// É趨ÐèÒª»÷ɱµÄ¹ÖÎïÊýÁ¿
SET @TargetKillCount 20
// É趨ÈÎÎñʱ¼äÏÞÖÆ£¨µ¥Î»£ºÃ룩
SET @TimeLimit 600
// ¼Ç¼ÈÎÎñ¿ªÊ¼Ê±¼ä
GETDATETIME @StartTime
// ³õʼ»¯Íæ¼Òµ±Ç°»÷ɱÊýÁ¿Îª 0
SET @CurrentKillCount 0
// ÌáÊ¾Íæ¼Ò½ÓÊÜÈÎÎñ
SENDMSG 0 ÄãÒѽÓÊÜÈÎÎñ£º%s£¬ÐèÒªÔÚ %d ÃëÄÚ»÷ɱ %d Ö» %s£¡ @QuestName @TimeLimit @TargetKillCount @TargetMonster
// Íæ¼Ò»÷ɱ¹ÖÎïʱ´¥·¢µÄ½Å±¾
[@KillMonster]
#IF
EQUAL <$KILLMONSTERNAME> @TargetMonster // Åжϻ÷ɱµÄ¹ÖÎïÊÇ·ñΪĿ±ê¹ÖÎï
#ACT
// Ôö¼Óµ±Ç°»÷ɱÊýÁ¿
INC @CurrentKillCount 1
// ÌáÊ¾Íæ¼Òµ±Ç°»÷ɱ½ø¶È
SENDMSG 0 ÄãÒÑ»÷ɱ %d Ö» %s£¬»¹Ðè»÷ɱ %d Ö»Íê³ÉÈÎÎñ¡£ @CurrentKillCount @TargetMonster [@TargetKillCount - @CurrentKillCount]
// ÅжÏÊÇ·ñÍê³ÉÈÎÎñ
IF
EQUAL @CurrentKillCount @TargetKillCount
THENACT
// ÈÎÎñÍê³É£¬·¢·Å½±Àø
ADDMONEY 500 // ½±Àø 500 ½ð±Ò
SENDMSG 0 ¹§Ï²ÄãÍê³ÉÁË %s ÈÎÎñ£¬»ñµÃ 500 ½ð±Ò½±Àø£¡ @QuestName
// ÖØÖÃÈÎÎñ¼ÆÊý
SET @CurrentKillCount 0
ENDIF
// ¶¨Ê±¼ì²éÈÎÎñÊÇ·ñ³¬Ê±
[@CheckQuestTimeout]
#IF
// »ñÈ¡µ±Ç°Ê±¼ä
GETDATETIME @CurrentTime
// ¼ÆËãʱ¼ä²î£¨µ¥Î»£ºÃ룩
SUB @TimeElapsed @CurrentTime @StartTime
// ÅжÏÊÇ·ñ³¬Ê±ÇÒδÍê³ÉÈÎÎñ
GREATER @TimeElapsed @TimeLimit
NOT EQUAL @CurrentKillCount @TargetKillCount
#ACT
// ÈÎÎñʧ°ÜÌáʾ
SENDMSG 0 ºÜÒź¶£¬ÄãδÄÜÔڹ涨ʱ¼äÄÚÍê³É %s ÈÎÎñ£¬ÈÎÎñʧ°Ü£¡ @QuestName
// ÖØÖÃÈÎÎñ¼ÆÊý
SET @CurrentKillCount 0
```
### »ùÓÚÍæ¼Ò״̬ÉèÖÃÈÎÎñʧ°ÜÌõ¼þ
Íæ¼ÒÔÚÍê³Éɱ¹ÖÈÎÎñ¹ý³ÌÖУ¬Èç¹û×ÔÉíµÄijЩ״̬²»Âú×ãÒªÇó£¬Ò²¿ÉÅж¨ÈÎÎñʧ°Ü£¬±ÈÈçÍæ¼ÒËÀÍö¡¢±³°üÂúÎÞ·¨Ê°È¡ÎïÆ·µÈ¡£
#### ʵÏÖ²½Öè
1. **È·¶¨Ó°ÏìÈÎÎñµÄÍæ¼Ò״̬**£ºÃ÷È·ÄÄÐ©Íæ¼Ò״̬»áµ¼ÖÂÈÎÎñʧ°Ü£¬ÈçÉúÃüֵΪ 0¡¢±³°ü¿Õ¼ä²»×ãµÈ¡£
2. **ʵʱ¼à²âÍæ¼Ò״̬**£ºÔÚÍæ¼Òɱ¹Ö¹ý³ÌÖУ¬³ÖÐø¼ì²éÕâЩ״̬¡£
3. **Åж¨ÈÎÎñʧ°Ü**£ºµ±Íæ¼Ò״̬²»Âú×ãÒªÇóÇÒδÍê³Éɱ¹ÖÄ¿±êʱ£¬Åж¨ÈÎÎñʧ°Ü¡£
#### ½Å±¾Ê¾Àý£¨ÒÔÍæ¼ÒËÀÍöµ¼ÖÂÈÎÎñʧ°ÜΪÀý£©
```plaintext
// ÈÎÎñ³õʼ»¯½Å±¾£¬É趨ÈÎÎñÐÅÏ¢
[@SetKillQuestWithDeathFail]
#IF
#ACT
// É趨ÈÎÎñÃû³Æ
SET @QuestName ɱ¹Ö·ÀËÀÍöÈÎÎñ
// É趨Ŀ±ê¹ÖÎïÃû³Æ
SET @TargetMonster °ëÊÞÈË
// É趨ÐèÒª»÷ɱµÄ¹ÖÎïÊýÁ¿
SET @TargetKillCount 15
// ³õʼ»¯Íæ¼Òµ±Ç°»÷ɱÊýÁ¿Îª 0
SET @CurrentKillCount 0
// ÌáÊ¾Íæ¼Ò½ÓÊÜÈÎÎñ
SENDMSG 0 ÄãÒѽÓÊÜÈÎÎñ£º%s£¬ÐèÒª»÷ɱ %d Ö» %s£¬ÆÚ¼äËÀÍöÔòÈÎÎñʧ°Ü£¡ @QuestName @TargetKillCount @TargetMonster
// Íæ¼Ò»÷ɱ¹ÖÎïʱ´¥·¢µÄ½Å±¾
[@KillMonster]
#IF
EQUAL <$KILLMONSTERNAME> @TargetMonster // Åжϻ÷ɱµÄ¹ÖÎïÊÇ·ñΪĿ±ê¹ÖÎï
#ACT
// Ôö¼Óµ±Ç°»÷ɱÊýÁ¿
INC @CurrentKillCount 1
// ÌáÊ¾Íæ¼Òµ±Ç°»÷ɱ½ø¶È
SENDMSG 0 ÄãÒÑ»÷ɱ %d Ö» %s£¬»¹Ðè»÷ɱ %d Ö»Íê³ÉÈÎÎñ¡£ @CurrentKillCount @TargetMonster [@TargetKillCount - @CurrentKillCount]
// ÅжÏÊÇ·ñÍê³ÉÈÎÎñ
IF
EQUAL @CurrentKillCount @TargetKillCount
THENACT
// ÈÎÎñÍê³É£¬·¢·Å½±Àø
ADDEXP 8000 // ½±Àø 8000 ¾ÑéÖµ
SENDMSG 0 ¹§Ï²ÄãÍê³ÉÁË %s ÈÎÎñ£¬»ñµÃ 8000 ¾ÑéÖµ½±Àø£¡ @QuestName
// ÖØÖÃÈÎÎñ¼ÆÊý
SET @CurrentKillCount 0
ENDIF
// Íæ¼ÒËÀÍöʱ´¥·¢µÄ½Å±¾
[@PlayerDeath]
#IF
NOT EQUAL @CurrentKillCount @TargetKillCount // ÅжÏÈÎÎñÊÇ·ñδÍê³É
#ACT
// ÈÎÎñʧ°ÜÌáʾ
SENDMSG 0 ºÜÒź¶£¬ÄãÔÚÍê³É %s ÈÎÎñ¹ý³ÌÖÐËÀÍö£¬ÈÎÎñʧ°Ü£¡ @QuestName
// ÖØÖÃÈÎÎñ¼ÆÊý
SET @CurrentKillCount 0
```
### »ùÓÚ¹ÖÎï״̬ÉèÖÃÈÎÎñʧ°ÜÌõ¼þ
ÓÐʱºò£¬ÈÎÎñ¿ÉÄÜÒªÇóÍæ¼Ò±£»¤Ä³Ð©Ìض¨¹ÖÎï²»±»»÷ɱ£¬»òÕßÒªÇóÌØ¶¨¹ÖÎï´æ»îµ½ÈÎÎñ½áÊø£¬ÈôÕâЩ¹ÖÎïËÀÍöÔòÈÎÎñʧ°Ü¡£
#### ʵÏÖ²½Öè
1. **È·¶¨¹Ø¼ü¹ÖÎï**£ºÃ÷È·ÄÄЩ¹ÖÎïµÄ״̬»áÓ°ÏìÈÎÎñµÄ³É°Ü¡£
2. **ʵʱ¼à²â¹ÖÎï״̬**£ºÔÚÈÎÎñ¹ý³ÌÖУ¬³ÖÐø¼ì²éÕâЩ¹Ø¼ü¹ÖÎïÊÇ·ñ´æ»î¡£
3. **Åж¨ÈÎÎñʧ°Ü**£ºµ±¹Ø¼ü¹ÖÎïËÀÍöÇÒÍæ¼ÒδÍê³Éɱ¹ÖÄ¿±êʱ£¬Åж¨ÈÎÎñʧ°Ü¡£
#### ½Å±¾Ê¾Àý
```plaintext
// ÈÎÎñ³õʼ»¯½Å±¾£¬É趨ÈÎÎñÐÅÏ¢
[@SetProtectMonsterQuest]
#IF
#ACT
// É趨ÈÎÎñÃû³Æ
SET @QuestName ±£»¤¹ÖÎïɱ¹ÖÈÎÎñ
// É趨Ŀ±ê¹ÖÎïÃû³Æ
SET @TargetMonster ÷¼÷ù¼ýÊÖ
// É趨ÐèÒª»÷ɱµÄÄ¿±ê¹ÖÎïÊýÁ¿
SET @TargetKillCount 10
// É趨ÐèÒª±£»¤µÄ¹ÖÎïÃû³Æ
SET @ProtectedMonster µ¾²ÝÈËÊØÎÀ
// ³õʼ»¯Íæ¼Òµ±Ç°»÷ɱĿ±ê¹ÖÎïÊýÁ¿Îª 0
SET @CurrentKillCount 0
// ³õʼ»¯±£»¤¹ÖÎï´æ»î±ê¼ÇΪ 1£¨´æ»î£©
SET @ProtectedMonsterAlive 1
// ÌáÊ¾Íæ¼Ò½ÓÊÜÈÎÎñ
SENDMSG 0 ÄãÒѽÓÊÜÈÎÎñ£º%s£¬ÐèÒª»÷ɱ %d Ö» %s£¬Í¬Ê±±£»¤ %s ´æ»î£¡ @QuestName @TargetKillCount @TargetMonster @ProtectedMonster
// Íæ¼Ò»÷ɱĿ±ê¹ÖÎïʱ´¥·¢µÄ½Å±¾
[@KillTargetMonster]
#IF
EQUAL <$KILLMONSTERNAME> @TargetMonster // Åжϻ÷ɱµÄ¹ÖÎïÊÇ·ñΪĿ±ê¹ÖÎï
#ACT
// Ôö¼Óµ±Ç°»÷ɱÊýÁ¿
INC @CurrentKillCount 1
// ÌáÊ¾Íæ¼Òµ±Ç°»÷ɱ½ø¶È
SENDMSG 0 ÄãÒÑ»÷ɱ %d Ö» %s£¬»¹Ðè»÷ɱ %d Ö»Íê³ÉÈÎÎñ¡£ @CurrentKillCount @TargetMonster [@TargetKillCount - @CurrentKillCount]
// ÅжÏÊÇ·ñÍê³ÉÈÎÎñ
IF
EQUAL @CurrentKillCount @TargetKillCount
EQUAL @ProtectedMonsterAlive 1 // ¼ì²é±£»¤¹ÖÎïÊÇ·ñ´æ»î
THENACT
// ÈÎÎñÍê³É£¬·¢·Å½±Àø
ADDITEM ħ·¨³¤ÅÛ 1 // ½±ÀøÒ»¼þħ·¨³¤ÅÛ
SENDMSG 0 ¹§Ï²ÄãÍê³ÉÁË %s ÈÎÎñ£¬»ñµÃħ·¨³¤ÅÛÒ»¼þ£¡ @QuestName
// ÖØÖÃÈÎÎñ¼ÆÊý
SET @CurrentKillCount 0
ENDIF
// ±£»¤¹ÖÎï±»»÷ɱʱ´¥·¢µÄ½Å±¾
[@ProtectMonsterKilled]
#IF
EQUAL <$KILLMONSTERNAME> @ProtectedMonster
NOT EQUAL @CurrentKillCount @TargetKillCount // ÅжÏÈÎÎñÊÇ·ñδÍê³É
#ACT
// ÉèÖñ£»¤¹ÖÎï´æ»î±ê¼ÇΪ 0£¨ËÀÍö£©
SET @ProtectedMonsterAlive 0
// ÈÎÎñʧ°ÜÌáʾ
SENDMSG 0 ºÜÒź¶£¬%s ±»»÷ɱ£¬ÄãδÍê³É %s ÈÎÎñ£¬ÈÎÎñʧ°Ü£¡ @ProtectedMonster @QuestName
// ÖØÖÃÈÎÎñ¼ÆÊý
SET @CurrentKillCount 0
```
ÔÚʵ¼ÊÓ¦ÓÃÖУ¬Òª¸ù¾Ý´«ÆæµÄ¾ßÌåÐèÇóºÍ·þÎñ¶Ë½Å±¾ÓïÑÔµÄÌØµã£¬¶Ô½Å±¾½øÐÐÁé»îµ÷ÕûºÍÓÅ»¯£¬ÒÔÈ·±£ÈÎÎñʧ°ÜÌõ¼þµÄÅжÏÂ߼׼ȷÎÞÎó¡£

