ÔÚ´«ÆæÖУ¬ÈÎÎñʧ°ÜºóÔÊÐíÍæ¼ÒÖØÐ½ÓÊÜÈÎÎñÊÇÌáÉýÓÎÏ·ÌåÑéµÄÖØÒª¹¦ÄÜ¡£ÎªÁËʵÏÖÕâÒ»¹¦ÄÜ£¬ÐèÒªÔڽű¾ÖÐÉè¼ÆÈÎÎñʧ°ÜºóµÄÖØÖÃÂß¼£¬²¢È·±£Íæ¼Ò¿ÉÒÔÖØÐ½ÓÈ¡ÈÎÎñ¡£ÒÔÏÂÊÇÏêϸµÄÉè¼ÆË¼Â·ºÍʵÏÖ·½·¨¡£
---
### Ò»¡¢ÈÎÎñʧ°ÜºóÖØÐ½ÓÊÜÈÎÎñµÄÉè¼ÆË¼Â·
1. **ÈÎÎñʧ°Ü´¦Àí**£º
- µ±ÈÎÎñʧ°Üʱ£¬Çå³ýÍæ¼ÒµÄÈÎÎñ½ø¶ÈºÍÏà¹ØÊý¾Ý¡£
- ·¢ËÍÈÎÎñʧ°ÜÌáʾ£¬²¢¸æÖªÍæ¼Ò¿ÉÒÔÖØÐ½ÓÈ¡ÈÎÎñ¡£
2. **ÈÎÎñÖØÖÃÂß¼**£º
- ÔÚÈÎÎñʧ°Üºó£¬½«ÈÎÎñ×´Ì¬ÖØÖÃΪ³õʼ״̬¡£
- ÔÊÐíÍæ¼ÒÖØÐ½ÓÈ¡ÈÎÎñ£¬²»ÊÜʧ°Ü¼Ç¼µÄÓ°Ïì¡£
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 -- Íê³ÉÈÎÎñºó½±ÀøµÄÔª±¦ÊýÁ¿
-- ÈÎÎñÀäȴʱ¼ä£¨µ¥Î»£ºÃ룩
local taskCooldown = 60 * 5 -- 5·ÖÖÓÀäȴʱ¼ä
```
#### 2. ³õʼ»¯ÈÎÎñ״̬
```lua
-- Íæ¼Ò½ÓÈ¡ÈÎÎñʱµÄ»Øµ÷º¯Êý
function AcceptTask(player)
-- ¼ì²éÈÎÎñÀäȴʱ¼ä
local lastFailTime = player:GetTaskData(taskID, "lastFailTime") or 0
local currentTime = os.time()
if currentTime - lastFailTime < taskCooldown then
player:SendMessage("ÈÎÎñÀäÈ´ÖУ¬ÇëµÈ´ý" .. (taskCooldown - (currentTime - lastFailTime)) .. "ÃëºóÔÙ½ÓÈ¡¡£")
return
end
-- ¼ì²éÍæ¼ÒµÈ¼¶
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 FailTask(player, reason)
-- ¼Ç¼ÈÎÎñʧ°Üʱ¼ä
player:SetTaskData(taskID, "lastFailTime", os.time())
-- Çå³ýÈÎÎñ½ø¶ÈºÍÊý¾Ý
player:RemoveTask(taskID)
player:SendMessage("ÈÎÎñʧ°Ü£¡ÔÒò£º" .. reason)
player:SendMessage("Äã¿ÉÒԵȴý" .. taskCooldown .. "ÃëºóÖØÐ½ÓÈ¡ÈÎÎñ¡£")
end
```
#### 4. Íæ¼Ò»÷ɱ¹ÖÎïʱ¸üÐÂÈÎÎñ½ø¶È
```lua
-- Íæ¼Ò»÷ɱ¹ÖÎïʱµÄ»Øµ÷º¯Êý
function OnKillMonster(player, monster)
if player:HasTask(taskID) then
-- ¼ì²é»÷ɱµÄ¹ÖÎïÊÇ·ñÊÇÈÎÎñÄ¿±ê
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
end
end
end
```
#### 5. Íæ¼ÒËÀÍöʱ¸üÐÂËÀÍö´ÎÊý
```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
```
#### 6. ¼ì²éÈÎÎñʱ¼äÏÞÖÆ
```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
```
#### 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. **ÈÎÎñÖØÖÃÂß¼**£º
- ÈÎÎñʧ°Üºó£¬Íæ¼Ò¿ÉÒÔÖØÐ½ÓÈ¡ÈÎÎñ£¬²»ÊÜʧ°Ü¼Ç¼µÄÓ°Ïì¡£
4. **ÈÎÎñ½ÓÈ¡Ìõ¼þ**£º
- ÔÚ½ÓÈ¡ÈÎÎñʱ£¬¼ì²éÍæ¼ÒµÈ¼¶ºÍÀäȴʱ¼ä¡£
---
### ËÄ¡¢À©Õ¹¹¦ÄÜ
1. **ÈÎÎñʧ°Ü³Í·£**£º
- ¿ÉÒÔÉè¼ÆÈÎÎñʧ°ÜµÄ³Í·£»úÖÆ£¬ÀýÈç¿Û³ýÔª±¦¡¢¾Ñé»ò×°±¸¡£
2. **ÈÎÎñÖØÊÔ´ÎÊýÏÞÖÆ**£º
- ÏÞÖÆÍæ¼ÒÖØÐ½ÓÈ¡ÈÎÎñµÄ´ÎÊý£¬ÀýÈçÿÌì×î¶àÖØÊÔ3´Î¡£
3. **¶¯Ì¬ÈÎÎñÄѶÈ**£º
- ¸ù¾ÝÍæ¼ÒµÈ¼¶»òÈÎÎñ½ø¶È¶¯Ì¬µ÷ÕûÈÎÎñÄѶȡ£
4. **ÈÎÎñʧ°ÜÌáʾ**£º
- ÔÚÈÎÎñʧ°Üʱ£¬ÌṩÏêϸµÄʧ°ÜÔÒòºÍºóÐø²Ù×÷½¨Òé¡£
---
### Îå¡¢×ܽá
ͨ¹ýʵÏÖÈÎÎñʧ°ÜºóÖØÐ½ÓÊÜÈÎÎñµÄ¹¦ÄÜ£¬¿ÉÒÔÌáÉýÍæ¼ÒµÄÓÎÏ·ÌåÑéºÍ²ÎÓë¸Ð¡£±¾ÎÄÒÔʱ¼äÏÞÖÆºÍËÀÍö´ÎÊýÏÞÖÆÎªÀý£¬Ïêϸ½éÉÜÁËÈçºÎÔÚ´«ÆæÉ±¹ÖÈÎÎñ½Å±¾ÖÐʵÏÖÈÎÎñʧ°ÜºóµÄÖØÖÃÂß¼¡£¿ª·¢Õß¿ÉÒÔ¸ù¾Ýʵ¼ÊÐèÇ󣬽øÒ»²½À©Õ¹ÈÎÎñϵͳµÄ¹¦ÄÜ£¬´òÔì¸ü¼Ó·á¸»¶àÑùµÄÓÎÏ·ÌåÑé¡£
---
### ¸½Â¼£º³£¼ûÎÊÌâÓë½â¾ö·½°¸
1. **ÈÎÎñÀäȴʱ¼ä²»×¼È·**£º
- È·±£Ê¹ÓÃ`os.time()`»ñÈ¡µÄʱ¼äµ¥Î»ÎªÃ룬²¢Ôڽű¾ÖÐͳһʱ¼äµ¥Î»¡£
2. **ÈÎÎñʧ°Üδ´¥·¢**£º
- ¼ì²éÈÎÎñʧ°ÜÌõ¼þµÄÅжÏÂß¼£¬È·±£Ìõ¼þÂú×ãʱµ÷ÓÃ`FailTask`º¯Êý¡£
3. **ÈÎÎñÖØÖÃÂß¼´íÎó**£º
- È·±£ÈÎÎñʧ°ÜºóÇå³ýËùÓÐÏà¹ØÊý¾Ý£¬²¢ÔÊÐíÍæ¼ÒÖØÐ½ÓÈ¡ÈÎÎñ¡£
ͨ¹ýÒÔÉÏ·½·¨£¬Äú¿ÉÒÔÇáËÉʵÏÖ´«ÆæÉ±¹ÖÈÎÎñ½Å±¾ÖеÄÈÎÎñʧ°ÜºóÖØÐ½ÓÊÜÈÎÎñ¹¦ÄÜ¡£
ÔÚ´«Ææ½Å±¾ÖÐʵÏÖÍæ¼ÒÈÎÎñʧ°ÜºóÖØÐ½ÓÊÜÈÎÎñ£¬ÐèÒªÔÚÈÎÎñʧ°ÜµÄÂß¼ÀïÌí¼ÓÏàÓ¦´¦Àí£¬Í¬Ê±¶ÔÈÎÎñÏà¹ØµÄ±äÁ¿ºÍ״̬½øÐÐÖØÖã¬ÒÔ±ãÍæ¼ÒÄܹ»ÔٴοªÆôÈÎÎñ¡£ÒÔϽáºÏ²»Í¬µÄÈÎÎñʧ°ÜÌõ¼þ£¬Ïêϸ²ûÊöʵÏÖ·½·¨²¢¸ø³öʾÀý½Å±¾£¨ÒÔ³£¼ûµÄ Mir2 ½Å±¾ÓïÑÔΪÀý£©¡£
### »ùÓÚʱ¼äÏÞÖÆÈÎÎñʧ°ÜºóÖØÐ½ÓÊÜÈÎÎñ
#### ½Å±¾Ë¼Â·
µ±Íæ¼ÒÔÚÏÞʱɱ¹ÖÈÎÎñÖÐδÄÜÔڹ涨ʱ¼äÄÚÍê³ÉÈÎÎñʱ£¬Åж¨ÈÎÎñʧ°Ü£¬´ËÊ±ÖØÖÃÈÎÎñÏà¹Ø±äÁ¿£¬Íæ¼Ò¿ÉÔٴνÓÊÜÈÎÎñ¡£
#### ʾÀý½Å±¾
```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
// ÔÊÐíÍæ¼ÒÔٴνÓÊÜÈÎÎñ£¬ÌáÊ¾Íæ¼Ò¿ÉÔٴνÓÈ¡
SENDMSG 0 Äã¿ÉÒÔÔٴκÍÎÒ¶Ô»°½ÓÊÜ %s ÈÎÎñ¡£ @QuestName
```
### »ùÓÚÍæ¼ÒËÀÍöÈÎÎñʧ°ÜºóÖØÐ½ÓÊÜÈÎÎñ
#### ½Å±¾Ë¼Â·
ÈôÍæ¼ÒÔÚɱ¹ÖÈÎÎñÖÐËÀÍöÇÒÈÎÎñδÍê³É£¬Åж¨ÈÎÎñʧ°Ü£¬ÖØÖÃÈÎÎñ±äÁ¿£¬ÈÃÍæ¼ÒÄܹ»ÔٴνÓÊÜÈÎÎñ¡£
#### ʾÀý½Å±¾
```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
// ÔÊÐíÍæ¼ÒÔٴνÓÊÜÈÎÎñ£¬ÌáÊ¾Íæ¼Ò¿ÉÔٴνÓÈ¡
SENDMSG 0 Äã¿ÉÒÔÔٴκÍÎÒ¶Ô»°½ÓÊÜ %s ÈÎÎñ¡£ @QuestName
```
### »ùÓÚ±£»¤¹ÖÎïËÀÍöÈÎÎñʧ°ÜºóÖØÐ½ÓÊÜÈÎÎñ
#### ½Å±¾Ë¼Â·
µ±ÐèÒª±£»¤µÄ¹ÖÎï±»»÷ɱÇÒÈÎÎñδÍê³Éʱ£¬Åж¨ÈÎÎñʧ°Ü£¬ÖØÖÃÈÎÎñ±äÁ¿£¬Ê¹Íæ¼ÒÄÜÖØÐ½ÓÊÜÈÎÎñ¡£
#### ʾÀý½Å±¾
```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
SET @ProtectedMonsterAlive 1
// ÔÊÐíÍæ¼ÒÔٴνÓÊÜÈÎÎñ£¬ÌáÊ¾Íæ¼Ò¿ÉÔٴνÓÈ¡
SENDMSG 0 Äã¿ÉÒÔÔٴκÍÎÒ¶Ô»°½ÓÊÜ %s ÈÎÎñ¡£ @QuestName
```
### ͨÓÃ×¢ÒâÊÂÏî
- **±äÁ¿ÖØÖÃ**£ºÔÚÈÎÎñʧ°Üʱ£¬ÒªÈ·±£½«ËùÓÐÓëÈÎÎñÏà¹ØµÄ±äÁ¿£¨Èç»÷ɱÊýÁ¿¡¢Ê±¼ä¼Ç¼¡¢´æ»î±ê¼ÇµÈ£©ÖØÖÃΪ³õʼֵ£¬ÒÔ±ãÍæ¼ÒÖØÐ½ÓÊÜÈÎÎñʱÈÎÎñÄÜÕý³£¿ªÊ¼¡£
- **ÈÎÎñÌáʾ**£ºÔÚÈÎÎñʧ°Üºó£¬¼°Ê±ÏòÍæ¼Ò·¢ËÍÌáʾÐÅÏ¢£¬¸æÖªÆäÈÎÎñʧ°Ü£¬²¢ËµÃ÷¿ÉÒÔÔٴνÓÊÜÈÎÎñ£¬·½±ãÍæ¼ÒÁ˽âºóÐø²Ù×÷¡£
- **½Å±¾Î»ÖÃ**£º½«ÉÏÊö½Å±¾Ìí¼Óµ½¶ÔÓ¦µÄÈÎÎñ´¥·¢½Å±¾ÎļþÖУ¬Èç `QManage.txt` »ò `Quest.txt` µÈ£¬¾ßÌåÎļþ·¾¶¸ù¾Ý·þÎñ¶ËµÄÉèÖöø¶¨¡£Ìí¼Óºó±£´æÎļþ²¢ÖØÆô·þÎñ¶Ë£¬Ê¹Ð½ű¾ÉúЧ¡£
---
### Ò»¡¢ÈÎÎñʧ°ÜºóÖØÐ½ÓÊÜÈÎÎñµÄÉè¼ÆË¼Â·
1. **ÈÎÎñʧ°Ü´¦Àí**£º
- µ±ÈÎÎñʧ°Üʱ£¬Çå³ýÍæ¼ÒµÄÈÎÎñ½ø¶ÈºÍÏà¹ØÊý¾Ý¡£
- ·¢ËÍÈÎÎñʧ°ÜÌáʾ£¬²¢¸æÖªÍæ¼Ò¿ÉÒÔÖØÐ½ÓÈ¡ÈÎÎñ¡£
2. **ÈÎÎñÖØÖÃÂß¼**£º
- ÔÚÈÎÎñʧ°Üºó£¬½«ÈÎÎñ×´Ì¬ÖØÖÃΪ³õʼ״̬¡£
- ÔÊÐíÍæ¼ÒÖØÐ½ÓÈ¡ÈÎÎñ£¬²»ÊÜʧ°Ü¼Ç¼µÄÓ°Ïì¡£
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 -- Íê³ÉÈÎÎñºó½±ÀøµÄÔª±¦ÊýÁ¿
-- ÈÎÎñÀäȴʱ¼ä£¨µ¥Î»£ºÃ룩
local taskCooldown = 60 * 5 -- 5·ÖÖÓÀäȴʱ¼ä
```
#### 2. ³õʼ»¯ÈÎÎñ״̬
```lua
-- Íæ¼Ò½ÓÈ¡ÈÎÎñʱµÄ»Øµ÷º¯Êý
function AcceptTask(player)
-- ¼ì²éÈÎÎñÀäȴʱ¼ä
local lastFailTime = player:GetTaskData(taskID, "lastFailTime") or 0
local currentTime = os.time()
if currentTime - lastFailTime < taskCooldown then
player:SendMessage("ÈÎÎñÀäÈ´ÖУ¬ÇëµÈ´ý" .. (taskCooldown - (currentTime - lastFailTime)) .. "ÃëºóÔÙ½ÓÈ¡¡£")
return
end
-- ¼ì²éÍæ¼ÒµÈ¼¶
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 FailTask(player, reason)
-- ¼Ç¼ÈÎÎñʧ°Üʱ¼ä
player:SetTaskData(taskID, "lastFailTime", os.time())
-- Çå³ýÈÎÎñ½ø¶ÈºÍÊý¾Ý
player:RemoveTask(taskID)
player:SendMessage("ÈÎÎñʧ°Ü£¡ÔÒò£º" .. reason)
player:SendMessage("Äã¿ÉÒԵȴý" .. taskCooldown .. "ÃëºóÖØÐ½ÓÈ¡ÈÎÎñ¡£")
end
```
#### 4. Íæ¼Ò»÷ɱ¹ÖÎïʱ¸üÐÂÈÎÎñ½ø¶È
```lua
-- Íæ¼Ò»÷ɱ¹ÖÎïʱµÄ»Øµ÷º¯Êý
function OnKillMonster(player, monster)
if player:HasTask(taskID) then
-- ¼ì²é»÷ɱµÄ¹ÖÎïÊÇ·ñÊÇÈÎÎñÄ¿±ê
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
end
end
end
```
#### 5. Íæ¼ÒËÀÍöʱ¸üÐÂËÀÍö´ÎÊý
```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
```
#### 6. ¼ì²éÈÎÎñʱ¼äÏÞÖÆ
```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
```
#### 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. **ÈÎÎñÖØÖÃÂß¼**£º
- ÈÎÎñʧ°Üºó£¬Íæ¼Ò¿ÉÒÔÖØÐ½ÓÈ¡ÈÎÎñ£¬²»ÊÜʧ°Ü¼Ç¼µÄÓ°Ïì¡£
4. **ÈÎÎñ½ÓÈ¡Ìõ¼þ**£º
- ÔÚ½ÓÈ¡ÈÎÎñʱ£¬¼ì²éÍæ¼ÒµÈ¼¶ºÍÀäȴʱ¼ä¡£
---
### ËÄ¡¢À©Õ¹¹¦ÄÜ
1. **ÈÎÎñʧ°Ü³Í·£**£º
- ¿ÉÒÔÉè¼ÆÈÎÎñʧ°ÜµÄ³Í·£»úÖÆ£¬ÀýÈç¿Û³ýÔª±¦¡¢¾Ñé»ò×°±¸¡£
2. **ÈÎÎñÖØÊÔ´ÎÊýÏÞÖÆ**£º
- ÏÞÖÆÍæ¼ÒÖØÐ½ÓÈ¡ÈÎÎñµÄ´ÎÊý£¬ÀýÈçÿÌì×î¶àÖØÊÔ3´Î¡£
3. **¶¯Ì¬ÈÎÎñÄѶÈ**£º
- ¸ù¾ÝÍæ¼ÒµÈ¼¶»òÈÎÎñ½ø¶È¶¯Ì¬µ÷ÕûÈÎÎñÄѶȡ£
4. **ÈÎÎñʧ°ÜÌáʾ**£º
- ÔÚÈÎÎñʧ°Üʱ£¬ÌṩÏêϸµÄʧ°ÜÔÒòºÍºóÐø²Ù×÷½¨Òé¡£
---
### Îå¡¢×ܽá
ͨ¹ýʵÏÖÈÎÎñʧ°ÜºóÖØÐ½ÓÊÜÈÎÎñµÄ¹¦ÄÜ£¬¿ÉÒÔÌáÉýÍæ¼ÒµÄÓÎÏ·ÌåÑéºÍ²ÎÓë¸Ð¡£±¾ÎÄÒÔʱ¼äÏÞÖÆºÍËÀÍö´ÎÊýÏÞÖÆÎªÀý£¬Ïêϸ½éÉÜÁËÈçºÎÔÚ´«ÆæÉ±¹ÖÈÎÎñ½Å±¾ÖÐʵÏÖÈÎÎñʧ°ÜºóµÄÖØÖÃÂß¼¡£¿ª·¢Õß¿ÉÒÔ¸ù¾Ýʵ¼ÊÐèÇ󣬽øÒ»²½À©Õ¹ÈÎÎñϵͳµÄ¹¦ÄÜ£¬´òÔì¸ü¼Ó·á¸»¶àÑùµÄÓÎÏ·ÌåÑé¡£
---
### ¸½Â¼£º³£¼ûÎÊÌâÓë½â¾ö·½°¸
1. **ÈÎÎñÀäȴʱ¼ä²»×¼È·**£º
- È·±£Ê¹ÓÃ`os.time()`»ñÈ¡µÄʱ¼äµ¥Î»ÎªÃ룬²¢Ôڽű¾ÖÐͳһʱ¼äµ¥Î»¡£
2. **ÈÎÎñʧ°Üδ´¥·¢**£º
- ¼ì²éÈÎÎñʧ°ÜÌõ¼þµÄÅжÏÂß¼£¬È·±£Ìõ¼þÂú×ãʱµ÷ÓÃ`FailTask`º¯Êý¡£
3. **ÈÎÎñÖØÖÃÂß¼´íÎó**£º
- È·±£ÈÎÎñʧ°ÜºóÇå³ýËùÓÐÏà¹ØÊý¾Ý£¬²¢ÔÊÐíÍæ¼ÒÖØÐ½ÓÈ¡ÈÎÎñ¡£
ͨ¹ýÒÔÉÏ·½·¨£¬Äú¿ÉÒÔÇáËÉʵÏÖ´«ÆæÉ±¹ÖÈÎÎñ½Å±¾ÖеÄÈÎÎñʧ°ÜºóÖØÐ½ÓÊÜÈÎÎñ¹¦ÄÜ¡£
ÔÚ´«Ææ½Å±¾ÖÐʵÏÖÍæ¼ÒÈÎÎñʧ°ÜºóÖØÐ½ÓÊÜÈÎÎñ£¬ÐèÒªÔÚÈÎÎñʧ°ÜµÄÂß¼ÀïÌí¼ÓÏàÓ¦´¦Àí£¬Í¬Ê±¶ÔÈÎÎñÏà¹ØµÄ±äÁ¿ºÍ״̬½øÐÐÖØÖã¬ÒÔ±ãÍæ¼ÒÄܹ»ÔٴοªÆôÈÎÎñ¡£ÒÔϽáºÏ²»Í¬µÄÈÎÎñʧ°ÜÌõ¼þ£¬Ïêϸ²ûÊöʵÏÖ·½·¨²¢¸ø³öʾÀý½Å±¾£¨ÒÔ³£¼ûµÄ Mir2 ½Å±¾ÓïÑÔΪÀý£©¡£
### »ùÓÚʱ¼äÏÞÖÆÈÎÎñʧ°ÜºóÖØÐ½ÓÊÜÈÎÎñ
#### ½Å±¾Ë¼Â·
µ±Íæ¼ÒÔÚÏÞʱɱ¹ÖÈÎÎñÖÐδÄÜÔڹ涨ʱ¼äÄÚÍê³ÉÈÎÎñʱ£¬Åж¨ÈÎÎñʧ°Ü£¬´ËÊ±ÖØÖÃÈÎÎñÏà¹Ø±äÁ¿£¬Íæ¼Ò¿ÉÔٴνÓÊÜÈÎÎñ¡£
#### ʾÀý½Å±¾
```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
// ÔÊÐíÍæ¼ÒÔٴνÓÊÜÈÎÎñ£¬ÌáÊ¾Íæ¼Ò¿ÉÔٴνÓÈ¡
SENDMSG 0 Äã¿ÉÒÔÔٴκÍÎÒ¶Ô»°½ÓÊÜ %s ÈÎÎñ¡£ @QuestName
```
### »ùÓÚÍæ¼ÒËÀÍöÈÎÎñʧ°ÜºóÖØÐ½ÓÊÜÈÎÎñ
#### ½Å±¾Ë¼Â·
ÈôÍæ¼ÒÔÚɱ¹ÖÈÎÎñÖÐËÀÍöÇÒÈÎÎñδÍê³É£¬Åж¨ÈÎÎñʧ°Ü£¬ÖØÖÃÈÎÎñ±äÁ¿£¬ÈÃÍæ¼ÒÄܹ»ÔٴνÓÊÜÈÎÎñ¡£
#### ʾÀý½Å±¾
```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
// ÔÊÐíÍæ¼ÒÔٴνÓÊÜÈÎÎñ£¬ÌáÊ¾Íæ¼Ò¿ÉÔٴνÓÈ¡
SENDMSG 0 Äã¿ÉÒÔÔٴκÍÎÒ¶Ô»°½ÓÊÜ %s ÈÎÎñ¡£ @QuestName
```
### »ùÓÚ±£»¤¹ÖÎïËÀÍöÈÎÎñʧ°ÜºóÖØÐ½ÓÊÜÈÎÎñ
#### ½Å±¾Ë¼Â·
µ±ÐèÒª±£»¤µÄ¹ÖÎï±»»÷ɱÇÒÈÎÎñδÍê³Éʱ£¬Åж¨ÈÎÎñʧ°Ü£¬ÖØÖÃÈÎÎñ±äÁ¿£¬Ê¹Íæ¼ÒÄÜÖØÐ½ÓÊÜÈÎÎñ¡£
#### ʾÀý½Å±¾
```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
SET @ProtectedMonsterAlive 1
// ÔÊÐíÍæ¼ÒÔٴνÓÊÜÈÎÎñ£¬ÌáÊ¾Íæ¼Ò¿ÉÔٴνÓÈ¡
SENDMSG 0 Äã¿ÉÒÔÔٴκÍÎÒ¶Ô»°½ÓÊÜ %s ÈÎÎñ¡£ @QuestName
```
### ͨÓÃ×¢ÒâÊÂÏî
- **±äÁ¿ÖØÖÃ**£ºÔÚÈÎÎñʧ°Üʱ£¬ÒªÈ·±£½«ËùÓÐÓëÈÎÎñÏà¹ØµÄ±äÁ¿£¨Èç»÷ɱÊýÁ¿¡¢Ê±¼ä¼Ç¼¡¢´æ»î±ê¼ÇµÈ£©ÖØÖÃΪ³õʼֵ£¬ÒÔ±ãÍæ¼ÒÖØÐ½ÓÊÜÈÎÎñʱÈÎÎñÄÜÕý³£¿ªÊ¼¡£
- **ÈÎÎñÌáʾ**£ºÔÚÈÎÎñʧ°Üºó£¬¼°Ê±ÏòÍæ¼Ò·¢ËÍÌáʾÐÅÏ¢£¬¸æÖªÆäÈÎÎñʧ°Ü£¬²¢ËµÃ÷¿ÉÒÔÔٴνÓÊÜÈÎÎñ£¬·½±ãÍæ¼ÒÁ˽âºóÐø²Ù×÷¡£
- **½Å±¾Î»ÖÃ**£º½«ÉÏÊö½Å±¾Ìí¼Óµ½¶ÔÓ¦µÄÈÎÎñ´¥·¢½Å±¾ÎļþÖУ¬Èç `QManage.txt` »ò `Quest.txt` µÈ£¬¾ßÌåÎļþ·¾¶¸ù¾Ý·þÎñ¶ËµÄÉèÖöø¶¨¡£Ìí¼Óºó±£´æÎļþ²¢ÖØÆô·þÎñ¶Ë£¬Ê¹Ð½ű¾ÉúЧ¡£

