This guide was copied from the website
, by the author Angelix
Simple Quest Part I
Collect an item, able to repeat after finishing.
Collect an item, able to repeat after finishing.
Adding a small format that will be explained below.
Lets break it up into parts to explain, starting with this:
Next step, adding the quest. Straight and simple, can't do much here.
Next step, adding the triggers. Here's where it gets a bit tricky with the trigger IDs.
HTML:
DefineMission(<QUEST_ID>, <QUEST_NAME>, <MISSION_ID>)
MisBeginTalk(<MAIN_DIALOG>)
MisBeginCondition(NoMission, <MISSION_ID>)
MisBeginAction(AddMission, <MISSION_ID>)
MisBeginAction(AddTrigger, <TRIGGERID>, TE_GETITEM, <ITEMINFO_ID>, <AMOUNT_NEEDED>)
MisCancelAction(ClearMission, <MISSION_ID>)
MisNeed(MIS_NEED_ITEM, <ITEMINFO_ID>, <AMOUNT_NEEDED>, <MISSION_FLAG>, <AMOUNT_NEEDED>)
MisResultTalk(<COMPLETION_DIALOG>)
MisHelpTalk(<HELP_DIALOG>)
MisResultCondition(HasMission, <MISSION_ID>)
MisResultCondition(HasItem, <ITEMINFO_ID>, <AMOUNT_NEEDED>)
MisResultAction(TakeItem, <ITEMINFO_ID>, <AMOUNT_NEEDED>)
MisResultAction(ClearMission, <MISSION_ID>)
InitTrigger()
TriggerCondition(1, IsItem, <ITEMINFO_ID>)
TriggerAction(1, AddNextFlag, <MISSION_ID>, <MISSION_FLAG>, <AMOUNT_NEEDED>)
RegCurTrigger(<TRIGGERID>)
HTML:
DefineMission(<QUEST_ID>, <QUEST_NAME>, <MISSION_ID>)
MisBeginTalk(<MAIN_DIALOG>)
- QUEST_ID: This is a number used to define the quest and the one that'll be going into the NPC, it must be a number that's not in used by any other quest.
- QUEST_NAME: This will be the name of your quest, you can freely name your quest whatever your quest.
- MISSION_ID: This number will be used throughout the quest to make conditions, actions and triggers. It must be a number that's not in used by any other quest.
- There's an exception to this in some cases, like in story mission, where you talk to the first NPC then sends you to another NPC, both will have different quest IDs, but same mission IDs.
- MAIN_DIALOG: You can place some text here like a brief story and tell players what to do.
HTML:
MisBeginCondition(NoMission, <MISSION_ID>)
HTML:
MisBeginAction(AddMission, <MISSION_ID>)
HTML:
MisBeginAction(AddTrigger, <TRIGGERID>, TE_GETITEM, <ITEMINFO_ID>, <AMOUNT_NEEDED>)
- TRIGGERID: This is a number formed by two things: the mission ID and the trigger.
- Lets say your mission ID is 2400 and this is your first trigger, then your trigger ID would be 24001, if it was your second trigger, then it would be 24002.
- The "TE_GETITEM" is an identifier that refers to collect an item. There are several that are in the server files, but I don't know how to make use of them or make them work. The known ones are "TE_GETITEM" (to collect items) and "TE_KILL" (kill monsters).
- ITEMINFO_ID: This the ID of the item you want to collect in the quest.
- AMOUNT_NEED: The amount needed of the item to be collected.
HTML:
MisNeed(MIS_NEED_ITEM, <ITEMINFO_ID>, <AMOUNT_NEEDED>, <MISSION_FLAG>, <AMOUNT_NEEDED>)
- MIS_NEED_ITEM: This goes along with "TE_GETITEM", if you wanted to kill a monster, then this needs to be changed as well.
- ITEMINFO_ID: Already explained.
- AMOUNT_NEEDED: Already explained.
- MISSION_FLAG: This number goes by a multiple of 10. These should also be in the same order of the triggers. If it's the first flag, then it's 10, the second flag goes to 20 and so on.
- AMOUNT_NEEDED: Already explained.
HTML:
MisResultTalk(<COMPLETION_DIALOG>)
- COMPLETION_DIALOG: This is the dialog that is shown to players when they successfully finish the quest.
HTML:
MisHelpTalk(<HELP_DIALOG>)
- HELP_DIALOG: This dialog is shown to players when they open the quest box corresponding to this mission, you can place hints or something else to help them remind where to find things.
HTML:
MisResultCondition(HasMission, <MISSION_ID>)
MisResultCondition(HasItem, <ITEMINFO_ID>, <AMOUNT_NEEDED>)
- HasMission / MISSION_ID: This checks that the players still has the quest active.
- ITEMINFO_ID: Already explained.
- AMOUNT_NEEDED: Already explained.
HTML:
MisResultAction(TakeItem, <ITEMINFO_ID>, <AMOUNT_NEEDED>)
MisResultAction(ClearMission, <MISSION_ID>)
- ITEMINFO_ID: Already explained.
- AMOUNT_NEEDED: Already explained.
- ClearMission: This will clear the mission from the players' quest log.
- MISSION_ID: Already explained.
HTML:
InitTrigger()
TriggerCondition(1, IsItem, <ITEMINFO_ID>)
TriggerAction(1, AddNextFlag, <MISSION_ID>, <MISSION_FLAG>, <AMOUNT_NEEDED>)
RegCurTrigger(<TRIGGERID>)
- IsItem: This will activate whenever a player collects an item and will check it with the ID given on the quest (the one defined as "ITEMINFO_ID"), if the IDs are the same, then it will add a check on the player's log and it will show a red notice on the player's screen saying "collected ITEM_NAME X/Y".
- ITEMINFO_ID/MISSION_ID/MISSION_FLAG/AMOUNT_NEEDED/TRIGGERID: Already explained.
Simple Quest Part II
Making the players kill monster within the quest.
Making the players kill monster within the quest.
Following the same format as the one above, we'll add an additional trigger to have players kill a certain amount of monsters.
HTML:
MisBeginAction(AddTrigger, <TRIGGER_ID>, TE_KILL, <CHARACTERINFO_ID>, <AMOUNT_NEEDED>)
- TRIGGER_ID: Is the same as above, mission ID plus the number of the trigger.
- Example: If this is your first trigger and your mission ID is 2400, then this would be 24001, if it's your second trigger then it would be 24002.
- TE_KILL: For killing monsters we use "TE_KILL" since "TE_GETITEM" belongs to the collection of items.
- CHARACTER_INFO: This would be the ID of the monster according to your CharacterInfo.txt.
- AMOUNT_NEEDED: Amount of monsters needed to kill.
HTML:
MisNeed(MIS_NEED_KILL, <CHARACTERINFO_ID>, <AMOUNT_NEEDED>, <MISSION_FLAG>, <AMOUNT_NEEDED>)
- MIS_NEED_KILL: This also changes, "MIS_NEED_KILL" corresponds to killing monsters while "MIS_NEED_ITEM" corresponds to collecting items.
- CHARACTEROINFO_ID: Already explained.
- AMOUNT_NEEDED: Already explained.
- MISSION_FLAG: This number goes by a multiple of 10. These should also be in the same order of the triggers. If it's the first flag, then it's 10, the second flag goes to 20 and so on.
HTML:
MisResultCondition(HasFlag, <MISSION_ID>, <FLAG_PLUS_AMOUNT_MINUS_ONE>)
- HasFlag: This changes to "HasFlag" (collecting items uses "HasItem") since the monsters killed will be stored in the quest log.
- MISSION_ID: Already explained.
- FLAG_PLUS_AMOUNT_MINUS_ONE: This is where it gets a bit tricky. You'll have to add the flag corresponding trigger, plus the amount of monsters needed to kill, minus one.
- Example: If your flag for this trigger was 20 and you were asking to kill 5 monsters, then this number would be 24.
HTML:
InitTrigger()
TriggerCondition(1, IsMonster, <CHARACTERINFO_ID>)
TriggerAction(1, AddNextFlag, <MISSION_ID>, <MISSION_FLAG>, <AMOUNT_NEEDED>)
RegCurTrigger(<TRIGGER_ID>)
- IsMonster: This will activate whenever a player kills a monster and will check it with the ID given on the quest (the one defined as "CHARACTERINFO_ID"), if the IDs are the same, then it will add a check on the player's log and it will show a red notice on the player's screen saying "kill MONSTER_NAME X/Y".
- CHARACTERINFO_ID: Already explained.
- MISSION_ID: Already explained.
- MISSION_FLAG: Already explained.
- AMOUNT_NEEDED: Already explained.
- TRIGGER_ID: Already explained.
Simple Quest Part III
Now we will add the option to make the quest a non-repeatable one.
Now we will add the option to make the quest a non-repeatable one.
Adding a new MisBeginCondition.
Adding a new MisResultAction.
Pretty easy and simple, self explanatory as well.
HTML:
MisBeginCondition(NoRecord, <MISSION_ID>)
HTML:
MisResultAction(SetRecord, <MISSION_ID>)
Simple Quest Part IV
Make the quest available only after completing another quest.
Make the quest available only after completing another quest.
Add a new MisBeginCondition as the one below.
Pretty easy and simple, self explanatory as well.
HTML:
MisBeginCondition(HasRecord, <MISSION_ID>)
Simple Quest Part V
Make the quest available for certain levels.
Make the quest available for certain levels.
Lets start with the condition to begin the quest for certain levels, you would add this to the MisBeginCondition part of the quest.
HTML:
MisBeginCondition(LvCheck, <CONDITION>, <PLAYER_LEVEL>)
- CONDITION: You only have two choices here, either ">" (above) or "<" (below), you have to place the symbols along with the quotation marks.
- PLAYER_LEVEL: You can set the level you want with the condition placed.
HTML:
MisBeginCondition(LvCheck, "<", 50)
- Only players below level 50 can see this quest or accept it.
HTML:
MisBeginCondition(LvCheck, ">", 45)
- Only players above level 45 can see/accept this quest.
HTML:
MisBeginCondition(LvCheck, ">", 60)
MisBeginCondition(LvCheck, "<", 75)
- Only players above level 60, but below level 75, can see see/accept this quest.
Simple Quest Part VI
Make the quest available to certain classes.
Make the quest available to certain classes.
There are two types of conditions here, either make the quest available to a certain class or not available to a certain class.
Condition to make it available only to a certain class:
Condition to make it available to everyone except a certain class:
Condition to make it available only to a certain class:
HTML:
MisBeginCondition(PfEqual, <PLAYER_CLASS>)
HTML:
MisResultCondition(NoPfEqual, <PLAYER_CLASS>)
- PLAYER_CLASS: This refers to the number of a class, here are the currently used numbers for each class.
- Newbie, 0.
- Swordsman, 1.
- Hunter, 2.
- Explorer, 4.
- Herbalist, 5.
- Champion, 8.
- Crusader, 9.
- Sharpshooter, 12.
- Cleric, 13.
- Seal Master, 14.
- Voyager, 16.