Данная квест система основанна на работе со строками и загрузкой htm-файлов в диалоги игры, к примеру как на оффициальных эмуляторах Lineage2, есть окно и есть html файлы в которых все описания квестов и их целей.
Если вы надумаете использовать данный скрипт, есть небольшая просьба, не забывайте подписывать автора (то есть меня), а то присуждение чужого плохой грех =)
Нус поехали, не для ламеров...
Определение переменных/флагов для работы системы.
[DEFNAME QUEST_FLAGS]
guestsFile scripts\SphereQuests.txt
questHtmlPath html\
questflag_greeting 00
questflag_accepted 01
questflag_success 02
questflag_failed 04
questflag_complete 08
//& #60;============================================================================
=========>
//<------------------------------------------------------------------------------------->
//<- Ultima Online: The Odyssey ->
//<- Sphere Version: 56x (56b-Nightly) ->
//<- Script Author: Breaker (Cache) ->
//<- Description: Quest System v1.2a ->
//<- ->
//<- Last edit date: 14.04.2007 ->
//<------------------------------------------------------------------------------------->
//& #60;============================================================================
=========>
//[Параметры]--------------------------------
// nil - Не чего.
// ------------------------------------------
//[Переменные]-------------------------------
// RequestQuests - Какие квесты должны быть выполнены для того чтоб взять квест
// RequestSkills - Какие скиллы должны быть у игрока для того чтоб взять квест
// RequestItems - Какие предметы должны быть у игрока для того чтоб взять квест
// RequestCTime - Какое кол-во игрового времени должны быть у игрока для того
// чтоб взять квест
// ------------------------------------------
// RequireKillNPC - Что надо убить для выполнения квеста
// GiveItemOnKill - Предметы которые будут доваться при смерти моба из списка RequireKillNPC.
// RequireItems - Что надо собрать для выполнения квеста
// Award - Список награды за выполнение квеста.
// ------------------------------------------
// HtmlGreeting - HTML-файл приветствия
// HtmlAccepted - HTML-файл уже взятого квеста, если игрок опять подошёл к
// квестологу но квест ещё не готов
// HtmlSuccess - HTML-файл успешного выполнения квеста, ну награда и всё такое
// HtmlFailed - HTML-файл неудачного выполнения квеста, пусть проходит ещё раз.
// ------------------------------------------
//<------------------------------------------------------------------------------------->
//<[ARGS - QuestID,Value]--------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
[FUNCTION GetQuestValue]
IF !(<FILE.FILEEXIST <DEF.guestsFile>>)
SERV.LOG Quest System: Quest file nof found, system cancelled.
ELSE
IF (<FILE.OPEN <DEF.guestsFile>>)
LOCAL.Lines = "<FILE.FILELINES <DEF.guestsFile>>"
FOR 1 <LOCAL.Lines>
LOCAL.Line = "<FILE.READLINE <LOCAL._FOR>>"
IF StrMatch("0","<LOCAL.Line>")
// Empty string
ELIF !StrCMPi("//","<StrSub 1 2 <LOCAL.Line>>")
// Comment string
ELIF !StrMatch("0","<QFGetQuestID <LOCAL.Line>>")
LOCAL.QFID = "<QFGetQuestID <LOCAL.Line>>"
ELIF !StrCMPi("<LOCAL.QFID>","<ARGV[0]>") && !StrMatch("0","<QFGetQuestVal <ARGV[1]>=<LOCAL.Line>>")
FILE.CLOSE
RETURN <QFGetQuestVal <ARGV[1]>=<LOCAL.Line>>
ENDIF
IF !StrCMPi("<LOCAL.QFID>","<ARGV[0]>") && StrMatch("","<StrEat <ARGS>>")
FILE.CLOSE
RETURN 1
ENDIF
ENDFOR
ENDIF
FILE.CLOSE
ENDIF
RETURN 0
//<------------------------------------------------------------------------------------->
//<[ARGS - 1: return list count, 0 - return list of quests]----------------------------->
//<------------------------------------------------------------------------------------->
[FUNCTION GetQuestsList]
IF !(<FILE.FILEEXIST <DEF.guestsFile>>)
SERV.LOG Quest System: Quest file nof found, system cancelled.
ELSE
IF (<FILE.OPEN <DEF.guestsFile>>)
LOCAL.Lines = "<FILE.FILELINES <DEF.guestsFile>>"
FOR 1 <LOCAL.Lines>
LOCAL.Line = "<FILE.READLINE <LOCAL._FOR>>"
IF StrMatch("0","<LOCAL.Line>")
// Empty string
ELIF !StrCMPi("//","<StrSub 1 2 <LOCAL.Line>>")
// Comment string
ELIF !StrMatch("0","<QFGetQuestID <LOCAL.Line>>")
LOCAL.LIST .= ",<QFGetQuestID <LOCAL.Line>>"
LOCAL.NUMS += 1
ENDIF
ENDFOR
ENDIF
FILE.CLOSE
RETURN <QVAL <ARGN>?<dLOCAL.NUMS>:<LOCAL.LIST>>
ENDIF
RETURN 0
//<------------------------------------------------------------------------------------->
[FUNCTION QFGetQuestID]
ARGS=<Explode [] ,<ARGS>>
IF !StrCMPi("<ARGV[2]>","QUEST")
RETURN <ARGV[3]>
ENDIF
RETURN 0
//<------------------------------------------------------------------------------------->
[FUNCTION QFGetQuestVal]
IF StrMatch("*=*", "<ARGS>")
ARGS=<Explode =,<ARGS>>
IF !StrCMPi("<ARGV[1]>","<ARGV[2]>")
IF StrCMPi("nil","<ARGV[3]>")
LOCAL.RESULT=<ARGV[3]>
LOCAL.IDX=4
WHILE !StrMatch("","<ARGV[<EVAL <LOCAL.IDX>>]>")
LOCAL.RESULT .= ,<ARGV[<EVAL <LOCAL.IDX>>]>
LOCAL.IDX += 1
ENDWHILE
RETURN <LOCAL.RESULT>
ENDIF
ENDIF
ENDIF
RETURN 0
//<------------------------------------------------------------------------------------->
//<[ARRV[0] - QuestHTMLFile, ARGV[1] - Page]-------------------------------------------->
//<------------------------------------------------------------------------------------->
[FUNCTION GetQuestHtml]
LOCAL.ARG1=<StrArg <ARGS>>
LOCAL.ARG2=<StrEat <ARGS>>
LOCAL.ARG2=<QVAL (<EVAL 0<LOCAL.ARG2>>)?<LOCAL.ARG2>:1>
IF (<FILE.FILEEXIST <DEF.questHtmlPath><LOCAL.ARG1>>)
IF (<FILE.OPEN <DEF.questHtmlPath><LOCAL.ARG1>>)
LOCAL.IsRead=0
FOR 1 <FILE.FILELINES <DEF.questHtmlPath><LOCAL.ARG1>>
// LOCAL.String = <StrToUpper <FILE.READLINE <LOCAL._FOR>>>
LOCAL.String = <FILE.READLINE <LOCAL._FOR>>
IF StrMatch("</PAGE>","<LOCAL.String>")
LOCAL.IsRead=0
ENDIF
IF (<LOCAL.IsRead>==<EVAL <LOCAL.ARG2>>)
IF StrMatch("0","<LOCAL.QText>")
LOCAL.QText = <FILE.READLINE <LOCAL._FOR>>
ELSE
LOCAL.QText .= <FILE.READLINE <LOCAL._FOR>>
ENDIF
ENDIF
IF StrMatch("<PAGE *","<LOCAL.String>")
LOCAL.IsRead=<StrSub 7 1 <StrTrim(<LOCAL.String>)>>
ENDIF
ENDFOR
ENDIF
FILE.CLOSE
RETURN <LOCAL.QText>
ENDIF
RETURN 0
//<------------------------------------------------------------------------------------->
//<[ARGS - QuestHTMLFile]--------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
[FUNCTION GetQuestHtmlPages]
IF (<FILE.FILEEXIST <DEF.questHtmlPath><ARGS>>)
IF (<FILE.OPEN <DEF.questHtmlPath><ARGS>>)
LOCAL.Pages=0
FOR 1 <FILE.FILELINES <DEF.questHtmlPath><ARGS>>
// LOCAL.String = <StrToUpper <FILE.READLINE <LOCAL._FOR>>>
LOCAL.String = <FILE.READLINE <LOCAL._FOR>>
IF StrMatch("<PAGE *","<LOCAL.String>")
LOCAL.Pages += 1
ENDIF
ENDFOR
ENDIF
FILE.CLOSE
RETURN <LOCAL.Pages>
ENDIF
RETURN 0
//<------------------------------------------------------------------------------------->
//<[Requests Quest Checks]-------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
[FUNCTION QRequests]
IF (<GetQuestValue <ARGS>>)
IF (<ACCOUNT.TOTALCONNECTTIME> >= <GetQuestValue <ARGS>,RequestCTime>)
IF (<QRequestQuests <ARGS>>) && (<QRequestSkills <ARGS>>) && (<QRequestItems <ARGS>>)
RETURN 1
ENDIF
ENDIF
ENDIF
RETURN 0
//<------------------------------------------------------------------------------------->
[FUNCTION QRequestQuests]
IF !StrMatch("0","<GetQuestValue <ARGS>,RequestQuests>")
ARGS="<GetQuestValue <ARGS>,RequestQuests>"
FOR 0 <EVAL <ARGV>-1>
IF !(<TAG0.<ARGV[<LOCAL._FOR>]>>&questflag_complete)
RETURN 0
ENDIF
ENDFOR
ENDIF
RETURN 1
//<------------------------------------------------------------------------------------->
[FUNCTION QRequestSkills]
IF !StrMatch("0","<GetQuestValue <ARGS>,RequestSkills>")
ARGS="<GetQuestValue <ARGS>,RequestSkills>"
FOR 0 <EVAL <ARGV>-1>
LOCAL.ARG1=<StrArg <ARGV[<LOCAL._FOR>]>>
LOCAL.ARG2=<StrEat <ARGV[<LOCAL._FOR>]>>
IF StrMatch("0","<LOCAL.ARG2>")
LOCAL.KEY=<LOCAL.ARG1>
LOCAL.VALUE=1
ELIF (<dLOCAL.ARG1>)
LOCAL.KEY=<LOCAL.ARG2>
LOCAL.VALUE=<LOCAL.ARG1>
ELIF (<dLOCAL.ARG2>)
LOCAL.KEY=<LOCAL.ARG1>
LOCAL.VALUE=<LOCAL.ARG2>
ELSE
SERV.LOG @Quest System: Error of "QRequestSkills" check in quest "<ARGS>".
RETURN 0
ENDIF
IF (<OBJ.<LOCAL.KEY>> < <LOCAL.VALUE>)
RETURN 0
ENDIF
ENDFOR
ENDIF
RETURN 1
//<------------------------------------------------------------------------------------->
[FUNCTION QRequestItems]
IF !StrMatch("0","<GetQuestValue <ARGS>,RequestItems>")
ARGS="<GetQuestValue <ARGS>,RequestItems>"
FOR 0 <EVAL <ARGV>-1>
LOCAL.ARG1=<StrArg <ARGV[<LOCAL._FOR>]>>
LOCAL.ARG2=<StrEat <ARGV[<LOCAL._FOR>]>>
IF StrMatch("0","<LOCAL.ARG2>")
LOCAL.KEY=<LOCAL.ARG1>
LOCAL.VALUE=1
ELIF (<dLOCAL.ARG1>)
LOCAL.KEY=<LOCAL.ARG2>
LOCAL.VALUE=<LOCAL.ARG1>
ELIF (<dLOCAL.ARG2>)
LOCAL.KEY=<LOCAL.ARG1>
LOCAL.VALUE=<LOCAL.ARG2>
ELSE
SERV.LOG @Quest System: Error of "QRequestItems" check in quest "<ARGS>".
RETURN 0
ENDIF
IF !(<RESTEST <dLOCAL.VALUE> <LOCAL.KEY>>)
RETURN 0
ENDIF
ENDFOR
ENDIF
RETURN 1
//<------------------------------------------------------------------------------------->
//<[Give Quest Items List]-------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
[FUNCTION QGiveQuestItems]
IF (<GetQuestValue <ARGS>>)
IF !(<GetQuestValue <ARGS>,GiveQuestItems>)
RETURN 1
ENDIF
ARGS="<GetQuestValue <ARGS>,GiveQuestItems>"
FOR 0 <EVAL <ARGV>-1>
LOCAL.ARG1=<StrArg <ARGV[<LOCAL._FOR>]>>
LOCAL.ARG2=<StrEat <ARGV[<LOCAL._FOR>]>>
IF StrMatch("0","<LOCAL.ARG2>")
LOCAL.KEY=<LOCAL.ARG1>
LOCAL.VALUE=1
ELIF (<dLOCAL.ARG1>)
LOCAL.KEY=<LOCAL.ARG2>
LOCAL.VALUE=<LOCAL.ARG1>
ELIF (<dLOCAL.ARG2>)
LOCAL.KEY=<LOCAL.ARG1>
LOCAL.VALUE=<LOCAL.ARG2>
ELSE
SERV.LOG @Quest System: error of "QGiveQuestItems" set in quest "<ARGS>".
RETURN 0
ENDIF
SERV.GiveItem <LOCAL.KEY>,<dLOCAL.VALUE>,<FINDLAYER.21.UID>
NEW.ATTR |= attr_newbie
ENDFOR
RETURN 1
ENDIF
RETURN 0
//<------------------------------------------------------------------------------------->
//<[Require kill init function]--------------------------------------------------------->
//<------------------------------------------------------------------------------------->
[FUNCTION QInitReqKills]
IF (<GetQuestValue <ARGS>>)
IF StrMatch("0","<GetQuestValue <ARGS>,RequireKillNPC>")
RETURN 1
ENDIF
LOCAL.QID=<ARGS>
ARGS="<GetQuestValue <ARGS>,RequireKillNPC>"
FOR 0 <EVAL <ARGV>-1>
LOCAL.ARG1=<StrArg <ARGV[<LOCAL._FOR>]>>
LOCAL.ARG2=<StrEat <ARGV[<LOCAL._FOR>]>>
IF StrMatch("0","<LOCAL.ARG2>")
LOCAL.KEY=<LOCAL.ARG1>
LOCAL.VALUE=1
ELIF (<dLOCAL.ARG1>)
LOCAL.KEY=<LOCAL.ARG2>
LOCAL.VALUE=<LOCAL.ARG1>
ELIF (<dLOCAL.ARG2>)
LOCAL.KEY=<LOCAL.ARG1>
LOCAL.VALUE=<LOCAL.ARG2>
ELSE
SERV.LOG @Quest System: error of "QInitReqKills" set in quest "<ARGS>".
RETURN 0
ENDIF
IF !StrMatch("0","<GetQuestValue <LOCAL.QID>,GiveItemOnKill>")
QInitItemOnKill <LOCAL.QID>,<LOCAL._FOR>,<LOCAL.KEY>
ELIF !(<TAG0.Q<LOCAL.KEY>_killed>)
TAG.Q<LOCAL.KEY>_killed = <dLOCAL.VALUE>,0
ENDIF
ENDFOR
ENDIF
RETURN 0
//<------------------------------------------------------------------------------------->
[FUNCTION QGetReqItemValue]
IF !StrMatch("0","<GetQuestValue <StrArg <ARGS>>,RequireItems>")
LOCAL.ItemID=<StrArg <StrEat <ARGS>>>
ARGS="<GetQuestValue <StrArg <ARGS>>,RequireItems>"
FOR 0 <EVAL <ARGV>-1>
LOCAL.ARG1=<StrArg <ARGV[<dLOCAL._FOR>]>>
LOCAL.ARG2=<StrEat <ARGV[<dLOCAL._FOR>]>>
IF StrMatch("0","<LOCAL.ARG2>")
LOCAL.KEY=<LOCAL.ARG1>
LOCAL.VALUE=0
ELIF (<dLOCAL.ARG1>)
LOCAL.KEY=<LOCAL.ARG2>
LOCAL.VALUE=<LOCAL.ARG1>
ELIF (<dLOCAL.ARG2>)
LOCAL.KEY=<LOCAL.ARG1>
LOCAL.VALUE=<LOCAL.ARG2>
ELSE
SERV.LOG @Quest System: error of "QGetReqItemValue" in function "QInitReqKills".
ENDIF
IF !StrCMPi("<LOCAL.ItemID>","<LOCAL.KEY>")
RETURN <dLOCAL.VALUE>
ENDIF
ENDFOR
ENDIF
RETURN 0
//<------------------------------------------------------------------------------------->
[FUNCTION QInitItemOnKill]
LOCAL.QID=<StrArg <ARGS>>
LOCAL.Count=<StrArg <StrEat <ARGS>>>
LOCAL.NpcID=<StrArg <StrEat <StrEat <ARGS>>>>
ARGS="<GetQuestValue <LOCAL.QID>,GiveItemOnKill>"
IF (<ARGV[<dLOCAL.Count>]>)
LOCAL.ARG1=<StrArg <ARGV[<dLOCAL.Count>]>>
LOCAL.ARG2=<StrEat <ARGV[<dLOCAL.Count>]>>
IF StrMatch("0","<LOCAL.ARG2>")
LOCAL.ItemID=<LOCAL.ARG1>
LOCAL.ItemCount=1
ELIF (<dLOCAL.ARG1>)
LOCAL.ItemID=<LOCAL.ARG2>
LOCAL.ItemCount=<LOCAL.ARG1>
ELIF (<dLOCAL.ARG2>)
LOCAL.ItemID=<LOCAL.ARG1>
LOCAL.ItemCount=<LOCAL.ARG2>
ELSE
SERV.LOG @Quest System: error of "QInitItemOnKill" in function "QInitReqKills".
ENDIF
TAG.Q<LOCAL.NpcID>_killed=<LOCAL.ItemID>,<dLOCAL.ItemCount>,<QGetReqItemValue <LOCAL.QID>,<LOCAL.ItemID>>
RETURN 1
ENDIF
RETURN 0
//<------------------------------------------------------------------------------------->
//<[Requires check functions]----------------------------------------------------------->
//<------------------------------------------------------------------------------------->
[FUNCTION QHaveRequires]
IF (<GetQuestValue <ARGS>>)
IF (<QHaveReqItems <ARGS>>) && (<QHaveReqKills <ARGS>>)
RETURN 1
ENDIF
ENDIF
RETURN 0
//<------------------------------------------------------------------------------------->
[FUNCTION QHaveReqItems]
IF !StrMatch("0","<GetQuestValue <ARGS>,RequireItems>")
ARGS="<GetQuestValue <ARGS>,RequireItems>"
FOR 0 <EVAL <ARGV>-1>
IF !(<RESTEST <ARGV[<dLOCAL._FOR>]>>)
RETURN 0
ENDIF
ENDFOR
ENDIF
RETURN 1
//<------------------------------------------------------------------------------------->
[FUNCTION QHaveReqKills]
IF !StrMatch("0","<GetQuestValue <ARGS>,RequireKillNPC>")
IF !StrMatch("0","<GetQuestValue <ARGS>,GiveItemOnKill>")
RETURN 1
ENDIF
ARGS="<GetQuestValue <ARGS>,RequireKillNPC>"
FOR 0 <EVAL <ARGV>-1>
LOCAL.ARG1=<StrArg <ARGV[<LOCAL._FOR>]>>
LOCAL.ARG2=<StrEat <ARGV[<LOCAL._FOR>]>>
IF StrMatch("0","<LOCAL.ARG2>")
LOCAL.KEY=<LOCAL.ARG1>
LOCAL.VALUE=1
ELIF (<dLOCAL.ARG1>)
LOCAL.KEY=<LOCAL.ARG2>
LOCAL.VALUE=<LOCAL.ARG1>
ELIF (<dLOCAL.ARG2>)
LOCAL.KEY=<LOCAL.ARG1>
LOCAL.VALUE=<LOCAL.ARG2>
ELSE
SERV.LOG @Quest System: error of "QHaveReqKills" check in quest "<ARGS>".
RETURN 0
ENDIF
LOCAL.QTAG=<StrEat <TAG0.Q<LOCAL.KEY>_killed>>
IF (<dLOCAL.QTAG> < <dLOCAL.VALUE>)
RETURN 0
ENDIF
ENDFOR
ENDIF
RETURN 1
//<------------------------------------------------------------------------------------->
//<[Requires consume function]---------------------------------------------------------->
//<------------------------------------------------------------------------------------->
[FUNCTION QConsumeRequires]
IF (<GetQuestValue <ARGS>>)
QClearRequireKillNPC <ARGS>
IF (<GetQuestValue <ARGS>,RequireItems>)
ARGS="<GetQuestValue <ARGS>,RequireItems>"
FOR 0 <EVAL <ARGV>-1>
CONSUME <ARGV[<dLOCAL._FOR>]>
ENDFOR
ENDIF
RETURN 1
ENDIF
RETURN 0
[FUNCTION QClearRequireKillNPC]
IF !StrMatch("0","<GetQuestValue <ARGS>,RequireKillNPC>")
ARGS="<GetQuestValue <ARGS>,RequireKillNPC>"
FOR 0 <EVAL <ARGV>-1>
LOCAL.ARG1=<StrArg <ARGV[<LOCAL._FOR>]>>
LOCAL.ARG2=<StrEat <ARGV[<LOCAL._FOR>]>>
IF StrMatch("0","<LOCAL.ARG2>")
LOCAL.KEY=<LOCAL.ARG1>
LOCAL.VALUE=1
ELIF (<dLOCAL.ARG1>)
LOCAL.KEY=<LOCAL.ARG2>
LOCAL.VALUE=<LOCAL.ARG1>
ELIF (<dLOCAL.ARG2>)
LOCAL.KEY=<LOCAL.ARG1>
LOCAL.VALUE=<LOCAL.ARG2>
ELSE
SERV.LOG @Quest System: error of "QClearRequireKillNPC" check in quest "<ARGS>".
RETURN 0
ENDIF
TAG.Q<LOCAL.KEY>_killed=
ENDFOR
ENDIF
RETURN 1
//<------------------------------------------------------------------------------------->
//<[Require kill counter]--------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
[FUNCTION QNeedToKill]
//SYSMESSAGE UID: <ARGS>
//SYSMESSAGE NAME: <UID.<ARGS>.NAME>
//SYSMESSAGE IsNPC: <QVAL <UID.<ARGS>.NPC>?Yes:No>
//SYSMESSAGE OBODY: <UID.<ARGS>.OBODY>
IF (<UID.<ARGS>.NPC>)
LOCAL.NAME=<UID.<ARGS>.NAME>
LOCAL.QTAG=Q<UID.<ARGS>.OBODY>_killed
IF (<TAG0.<LOCAL.QTAG>>)
ARGS=<TAG0.<LOCAL.QTAG>>
IF StrMatch("i_*","<ARGV[0]>")
IF (RAND(<ARGV[1]>)==0) && (<ARGV[2]> > <RESCOUNT <ARGV[0]>>)
SERV.GiveItem <ARGV[0]>,1,<FINDLAYER.21.UID>
NEW.ATTR |= attr_newbie
LOCAL.NAME = <NEW.NAME>
SYSMESSAGE @25, Quest: <LOCAL.NAME>'s gived - <RESCOUNT <ARGV[0]>>/<ARGV[2]>.
ENDIF
RETURN 1
ELIF (<ARGV[0]> > <ARGV[1]>)
TAG.<LOCAL.QTAG>=<ARGV[0]>,<EVAL (<ARGV[1]>+1)>
SYSMESSAGE @129, Quest: <LOCAL.NAME>s killed - <EVAL (<ARGV[1]>+1)>/<ARGV[0]>.
RETURN 1
ENDIF
ENDIF
ENDIF
RETURN 0
//<------------------------------------------------------------------------------------->
//<[Award Creator]---------------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
[FUNCTION QGiveAward]
IF (<GetQuestValue <ARGS>>)
IF !(<GetQuestValue <ARGS>,Award>)
RETURN 1
ENDIF
ARGS="<GetQuestValue <ARGS>,Award>"
FOR 0 <EVAL <ARGV>-1>
LOCAL.VALUE="<StrArg <ARGV[<LOCAL._FOR>]>>"
LOCAL.KEY = "<QVAL (<dLOCAL.VALUE>)?<StrEat <ARGV[<LOCAL._FOR>]>>:<StrArg <ARGV[<LOCAL._FOR>]>> >"
LOCAL.VALUE="<QVAL (<dLOCAL.VALUE>)?<dLOCAL.VALUE>:1>
SERV.GiveItem <LOCAL.KEY>,<dLOCAL.VALUE>,<FINDLAYER.21.UID>
ENDFOR
RETURN 1
ENDIF
RETURN 0
//<------------------------------------------------------------------------------------->
//<[Function - QuestDialog][ARGV - QuestID]--------------------------------------------->
//<------------------------------------------------------------------------------------->
[FUNCTION QuestDialog]
IF (<GetQuestValue <ARGS>>)
IF (<TAG0.<ARGS>>&questflag_success) && !(<QHaveRequires <ARGS>>)
TAG.<ARGS> &= ~questflag_success
ELIF (<TAG0.<ARGS>>&questflag_accepted) && (<QHaveRequires <ARGS>>)
TAG.<ARGS> |= questflag_success
ENDIF
// SYSMESSAGE Quest <ARGS> Flags: <TAG0.<ARGS>>
CTAG.LastQuest=<ARGS>
IF (<TAG0.<ARGS>>==questflag_greeting)
IF (<GetQuestsList 1> >= 20)
SYSMESSAGE @33, You can't take any more quests.
RETURN 1
ENDIF
SYSMESSAGE @097, QDialog: d_quest_greeting
SDIALOG d_quest_greeting
ELIF (<TAG0.<ARGS>>&questflag_complete)
SYSMESSAGE @73, This quest already completed.
ELIF (<TAG0.<ARGS>>&questflag_failed)
SYSMESSAGE @095, QDialog: d_quest_failed
SDIALOG d_quest_failed
ELIF (<TAG0.<ARGS>>&questflag_success)
SYSMESSAGE @095, QDialog: d_quest_success
SDIALOG d_quest_success
ELIF (<TAG0.<ARGS>>&questflag_accepted)
SYSMESSAGE @095, QDialog: d_quest_accepted
SDIALOG d_quest_accepted
ENDIF
ENDIF
//<------------------------------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
[DIALOG d_quest_greeting]
0,0
page 0
resizepic 200 150 5170 360 400
gumppic 220 180 92
gumppic 260 180 93
gumppic 375 180 93
gumppic 420 180 93
gumppic 515 180 94
dtext 340 152 0 Quest Log
dtext 275 185 0 <GetQuestValue <CTAG.LastQuest>,Name>
LOCAL.HTML="HtmlGreeting"
LOCAL.Pages=<EVAL <GetQuestHtmlPages <GetQuestValue <CTAG.LastQuest>,<LOCAL.HTML>>>>
FOR 1 <EVAL <LOCAL.Pages>+1>
page <EVAL <LOCAL._FOR>>
dtext 225 524 0 Page <EVAL <LOCAL._FOR>>/<EVAL <LOCAL.Pages>>
dhtmlgump 230 230 313 240 0 1 <GetQuestHtml <GetQuestValue <CTAG.LastQuest>,<LOCAL.HTML>>,<LOCAL._FOR>>
IF (<LOCAL._FOR> > 1)
dtext 235 483 0 Previous
button 295 480 9790 9791 0 <EVAL <LOCAL._FOR>-1> 0
ENDIF
IF (<LOCAL._FOR> < <EVAL <LOCAL.Pages>>)
dtext 455 483 0 Next
button 500 480 9790 9791 0 <EVAL <LOCAL._FOR>+1> 0
ELSE
dtext 455 483 0 Accept
button 500 480 9790 9791 1 0 1
ENDIF
ENDFOR
[DIALOG d_quest_greeting BUTTON]
ON=1
TAG0.<CTAG.LastQuest> |= questflag_accepted
QInitReqKills <CTAG.LastQuest>
IF (<GetQuestValue <CTAG.LastQuest>,GiveQuestItems>)
QGiveQuestItems <CTAG.LastQuest>
ENDIF
SYSMESSAGE @73, Quest "<GetQuestValue <CTAG.LastQuest>,Name>" accepted.
//<------------------------------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
[DIALOG d_quest_accepted]
0,0
page 0
resizepic 200 150 5170 360 400
gumppic 220 180 92
gumppic 260 180 93
gumppic 375 180 93
gumppic 420 180 93
gumppic 515 180 94
dtext 340 152 0 Quest Log
dtext 275 185 0 <GetQuestValue <CTAG.LastQuest>,Name>
LOCAL.HTML="HtmlAccepted"
LOCAL.Pages=<EVAL <GetQuestHtmlPages <GetQuestValue <CTAG.LastQuest>,<LOCAL.HTML>>>>
FOR 1 <EVAL <LOCAL.Pages>+1>
page <EVAL <LOCAL._FOR>>
dtext 225 524 0 Page <EVAL <LOCAL._FOR>>/<EVAL <LOCAL.Pages>>
dhtmlgump 230 230 313 240 0 1 <GetQuestHtml <GetQuestValue <CTAG.LastQuest>,<LOCAL.HTML>>,<LOCAL._FOR>>
IF (<LOCAL._FOR> > 1)
dtext 235 483 0 Previous
button 295 480 9790 9791 0 <EVAL <LOCAL._FOR>-1> 0
ENDIF
IF (<LOCAL._FOR> < <EVAL <LOCAL.Pages>>)
dtext 455 483 0 Next
button 500 480 9790 9791 0 <EVAL <LOCAL._FOR>+1> 0
ELSE
dtext 445 483 0 Process
button 500 480 9790 9791 1 0 1
ENDIF
ENDFOR
[DIALOG d_quest_accepted BUTTON]
ON=1
QInitReqKills <CTAG.LastQuest>
//SYSMESSAGE @73, Quest "<GetQuestValue <CTAG.LastQuest>,Name>" processed.
//SYSMESSAGE All Requires Complete? <QVAL <QHaveRequires <CTAG.LastQuest>>?Yes:No>
//<------------------------------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
[DIALOG d_quest_success]
0,0
page 0
resizepic 200 150 5170 360 400
gumppic 220 180 92
gumppic 260 180 93
gumppic 375 180 93
gumppic 420 180 93
gumppic 515 180 94
dtext 340 152 0 Quest Log
dtext 275 185 0 <GetQuestValue <CTAG.LastQuest>,Name>
LOCAL.HTML="HtmlSuccess"
LOCAL.Pages=<EVAL <GetQuestHtmlPages <GetQuestValue <CTAG.LastQuest>,<LOCAL.HTML>>>>
FOR 1 <EVAL <LOCAL.Pages>+1>
page <EVAL <LOCAL._FOR>>
dtext 225 524 0 Page <EVAL <LOCAL._FOR>>/<EVAL <LOCAL.Pages>>
dhtmlgump 230 230 313 240 0 1 <GetQuestHtml <GetQuestValue <CTAG.LastQuest>,<LOCAL.HTML>>,<LOCAL._FOR>>
IF (<LOCAL._FOR> > 1)
dtext 235 483 0 Previous
button 295 480 9790 9791 0 <EVAL <LOCAL._FOR>-1> 0
ENDIF
IF (<LOCAL._FOR> < <EVAL <LOCAL.Pages>>)
dtext 455 483 0 Next
button 500 480 9790 9791 0 <EVAL <LOCAL._FOR>+1> 0
ELSE
dtext 437 483 0 Complete
button 500 480 9790 9791 1 0 1
ENDIF
ENDFOR
[DIALOG d_quest_success BUTTON]
ON=1
IF (<QHaveRequires <CTAG.LastQuest>>)
QConsumeRequires <CTAG.LastQuest>
QGiveAward <CTAG.LastQuest>
TAG.<CTAG.LastQuest> |= questflag_complete
SYSMESSAGE @73, Quest "<GetQuestValue <CTAG.LastQuest>,Name>" completed.
ELSE
SYSMESSAGE You do not have required objects for complete this quest.
ENDIF
//<------------------------------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
[DIALOG d_quest_failed]
0,0
page 0
resizepic 200 150 5170 360 400
gumppic 220 180 92
gumppic 260 180 93
gumppic 375 180 93
gumppic 420 180 93
gumppic 515 180 94
dtext 340 152 0 Quest Log
dtext 275 185 0 <GetQuestValue <CTAG.LastQuest>,Name>
LOCAL.HTML="HtmlFailed"
LOCAL.Pages=<EVAL <GetQuestHtmlPages <GetQuestValue <CTAG.LastQuest>,<LOCAL.HTML>>>>
FOR 1 <EVAL <LOCAL.Pages>+1>
page <EVAL <LOCAL._FOR>>
dtext 225 524 0 Page <EVAL <LOCAL._FOR>>/<EVAL <LOCAL.Pages>>
dhtmlgump 230 230 313 240 0 1 <GetQuestHtml <GetQuestValue <CTAG.LastQuest>,<LOCAL.HTML>>,<LOCAL._FOR>>
IF (<LOCAL._FOR> > 1)
dtext 235 483 0 Previous
button 295 480 9790 9791 0 <EVAL <LOCAL._FOR>-1> 0
ENDIF
IF (<LOCAL._FOR> < <EVAL <LOCAL.Pages>>)
dtext 455 483 0 Next
button 500 480 9790 9791 0 <EVAL <LOCAL._FOR>+1> 0
ELSE
dtext 437 483 0 Complete
button 500 480 9790 9791 1 0 1
ENDIF
ENDFOR
[DIALOG d_quest_failed BUTTON]
ON=1
QConsumeRequires <CTAG.LastQuest>
TAG.<CTAG.LastQuest> =
SYSMESSAGE @33, Quest "<GetQuestValue <CTAG.LastQuest>,Name>" failed.
//& #60;============================================================================
=========>
//<------------------------------------------------------------------------------------->
//<[Quests List]------------------------------------------------------------------------>
//<------------------------------------------------------------------------------------->
//& #60;============================================================================
=========>
[DIALOG d_quests_list]
0,0
page 0
resizepic 200 150 5170 420 400
resizepic 246 206 9300 340 25
//resizepic 240 232 9350 340 294
gumppic 220 180 92
gumppic 260 180 93
gumppic 375 180 93
gumppic 455 180 93
gumppic 570 180 94
gumppic 220 180 9004
dtext 345 152 0 Current quests list
dtext 275 185 0 <NAME>
gumppic 245 529 2362
dtext 260 524 0 Not completed
gumppic 400 529 2361
dtext 415 524 0 Completed
gumppic 515 529 2360
dtext 530 524 0 Failed
LOCAL.QList="<StrEat <GetQuestsList>>"
FOR 1 <GetQuestsList 1>
LOCAL.Quest=<StrArg <LOCAL.QList>>
IF (<TAG0.<LOCAL.Quest>>)
IF (<TAG0.<LOCAL.Quest>>&questflag_complete)
LOCAL.QC += 1
ELIF (<TAG0.<LOCAL.Quest>>&questflag_success)
resizepic 235 <EVAL 225+(<LOCAL._FOR>*21)> 9300 300 22
gumppic 245 <EVAL 230+(<LOCAL._FOR>*21)> 2361
dtext 265 <EVAL 226+(<LOCAL._FOR>*21)> 0 <GetQuestValue <LOCAL.Quest>,Name>
button 540 <EVAL 230+(<LOCAL._FOR>*21)> 2181 2181 1 0 <LOCAL._FOR>
LOCAL.QC += 1
ELIF (<TAG0.<LOCAL.Quest>>&questflag_failed)
resizepic 235 <EVAL 225+(<LOCAL._FOR>*21)> 9300 300 22
gumppic 245 <EVAL 230+(<LOCAL._FOR>*21)> 2360
dtext 265 <EVAL 226+(<LOCAL._FOR>*21)> 0 <GetQuestValue <LOCAL.Quest>,Name>
button 540 <EVAL 230+(<LOCAL._FOR>*21)> 2181 2181 1 0 <LOCAL._FOR>
LOCAL.QF += 1
ELSE
resizepic 235 <EVAL 225+(<LOCAL._FOR>*21)> 9300 300 22
gumppic 245 <EVAL 230+(<LOCAL._FOR>*21)> 2362
dtext 265 <EVAL 226+(<LOCAL._FOR>*21)> 0 <GetQuestValue <LOCAL.Quest>,Name>
button 540 <EVAL 230+(<LOCAL._FOR>*21)> 2181 2181 1 0 <LOCAL._FOR>
LOCAL.QT += 1
ENDIF
ENDIF
LOCAL.QList=<StrEat <LOCAL.QList>>
ENDFOR
dtext 270 209 0 Completed: <dLOCAL.QC>
dtext 380 209 0 Failed: <dLOCAL.QF>
dtext 470 209 0 Taked <dLOCAL.QT>/20
[DIALOG d_quests_list BUTTON]
ON=1 65000
LOCAL.QList="<StrEat <GetQuestsList>>"
FOR 1 <GetQuestsList 1>
LOCAL.Quest=<StrArg <LOCAL.QList>>
LOCAL.QList=<StrEat <LOCAL.QList>>
IF (<ARGN>==<LOCAL._FOR>)
QConsumeRequires <LOCAL.Quest>
SYSMESSAGE @53, Quest "<GetQuestValue <LOCAL.Quest>,Name>" aborted.
TAG.<LOCAL.Quest>=
SDIALOG d_quests_list
RETURN 1
ENDIF
ENDFOR
SDIALOG d_quests_list
RETURN 1
//& #60;============================================================================
=========>
//<------------------------------------------------------------------------------------->
//<[Quest System EVENTs]---------------------------------------------------------------->
//<------------------------------------------------------------------------------------->
//& #60;============================================================================
=========>
[EVENTS e_quest_system]
ON=@Kill
SRC.QNeedToKill <ARGO.UID>
ON=@CharClientTooltip
IF StrMatch("c_q_*","<ACT.ID>")
ADDCLILOC 1072269
ENDIF
ON=@ItemClientTooltip
IF StrMatch("i_q_*","<ACT.BaseID>")
ADDCLILOC 1072351
ENDIF
ON=@ItemDropOn_Item
IF StrMatch("i_q_*","<ACT.BaseID>")
IF (<ARGO.BaseID>==<ACT.BaseID>)
ELIF (<ARGO.UID>!=<SRC.FINDLAYER.21.UID>)
SRC.SYSMESSAGE @33, You can't pull out a quest items.
RETURN 1
ENDIF
ENDIF
ON=@ItemDropOn_Char
IF StrMatch("i_q_*","<ACT.BaseID>")
IF (<ARGO.UID>!=<SRC.UID>)
SRC.SYSMESSAGE @33, You can't pull out a quest items.
RETURN 1
ENDIF
ENDIF
ON=@ItemDropOn_Ground
IF StrMatch("i_q_*","<ACT.BaseID>")
SRC.SYSMESSAGE @33, You can't drop a quest items.
ACT.BOUNCE
RETURN 1
ENDIF
[EOF]
[Quest Q0001]
Name=Guard Raimon: Hearings in city.
HtmlGreeting=0001_greeting.htm
HtmlAccepted=0001_accepted.htm
HtmlSuccess=0001_success.htm
HtmlFailed=nil
RequestQuests=nil
RequestSkills=nil
RequestItems=nil
RequestCTime=nil
GiveQuestItems=nil
RequireKillNPC=c_skeleton, c_slime
GiveItemOnKill=i_q_bone 1, i_q_plazma 1
RequireItems=5 i_q_bone, 10 i_q_plazma
Award=i_katana,250 i_gold
<page 1>
Страница первая
<basefont color=black>Чёрный текст<br>
<center>Центрированный текст</center>
и так далее..
</page>
<page 2>
Страница вторая и так далее...
<basefont color=black>Ohh... you fail job.<br>
<center>Текст.</center>
</page>
.....
.....
<page n>
<basefont color=black>Ohh... you fail job.<br>
<center>Bye.</center>
</page>
ON=@UserQuestButton
SRC.DIALOG d_quests_list
RETURN 1
A ja sprashival u teba etot script nedelki 2 nazad ,prishlos samamu napisat (cerez nehochu)
Ehhh...
00:35:ERROR:(questtest.scp,11)Can't resolve <FILE.FILEEXIST scripts\SphereQuests.txt>
00:35:ERROR:(questtest.scp,11)Undefined symbol ''
00:35:(questtest.scp,12)Quest System: Quest file nof found, system cancelled.
file nof found
guestsFile scripts\Freedom\Quests\questsinfo.txt
Can't resolve <FILE.FILEEXIST scripts\Freedom\Quests\questsinfo.txt>
19:25:ERROR:(SphereQuests.scp,55)Undefined symbol ''
19:25:(SphereQuests.scp,56)Quest System: Quest file nof found, system cancelled.
guestsFile scripts\Freedom\Quests\questsinfo.txt
Can't resolve <FILE.FILEEXIST scripts\Freedom\Quests\questsinfo.txt>
19:25:ERROR:(SphereQuests.scp,55)Undefined symbol ''
19:25:(SphereQuests.scp,56)Quest System: Quest file nof found, system cancelled.
[DEFNAME QUEST_FLAGS]
guestsFile scripts\SphereQuests.txt
questHtmlPath html\
questflag_greeting 00
questflag_accepted 01
questflag_success 02
questflag_failed 04
questflag_complete 08
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)