Guide updated on 06/04/2019
This guide will show you how to create Reward style Dataquests with DOLToolbox. Some of you will be familiar with DOLToolbox already, this will be using a version from my github fork. A pre-compiled version is found here or the github fork over here
For this example, I will create the quest 'A Wizard's Aid' using player entered data found on the DAoC Allakhazam website. (Lookup this Albion quest if you want to follow along.)
When you first start DOLToolbox it will tell you you need to setup your database credentials.
Enter your MYSQL username/password and your dol database name.
Once DOLToolbox has loaded click on the 'Quest' tab. You will see the new quest tab layout for this style of dataquests. You can hover over some of the field titles to get a tooltip description of how they are used.
At this point, you should have open the quest on Allakhazam so you can see the data I will be replicating. To start, I will enter some basic fields like min/max level and max count of '1' so I can only do this quest once. Quest name is entered. I search for the start NPC using the NPC search button.
I'm looking for an NPC named 'Sage' in the Constantine's Sound. I find him on page two. (Not all NPC's will be found! Depends on your database)
Click 'Select this NPC'. His data is now entered. If there was a quest dependancy (A quest that must be completed before this one is available) I can enter or search for that here. With no dependancies, I'm just going to enter the quest 'Story' , 'Summary' and 'Finish' texts.
These quests support a few dynamic naming texts. You can put <Class> to say the players class, <Player> to say the players name, <Race> to say the players race. Use '\n' to format with a new line.
Now I will add the quest goals. This quest has a total of 4 goals. 3 goals are given at step 1 of the quest. The last goal is given at step 2. First goal at step 1 is to Gather some hops from Vartain's bushes. This is an 'Interact' goaltype with an object.
I go outside the pub in Finnan and create some objects that will be the 'hops' for the quest.
/object model 4172
/object name hops
I get the /loc of these objects to add a red quest goal dot to the players map (Must use /loc and NOT /gloc) I get the ZoneID of Constantine's Sound from the 'zone' table in the database. (ZoneID is NOT always the same as RegionID!) I put all this data in the fields for the first goal. I also create a dummy item in the 'itemtemplate' table with a plant type model. This is for the 'collect item' field. Adds some fluff to the quest as its shown in the journal when the goal is completed.
For this goal we only need to interact with the 'hops' once, so 'Repeat No' is set to '1' (TODO: Object search is not implemented just yet)
Second goal, still step 1. Another 'Interact' goaltype. Gather herbs from around Finnen. I do similar to the last goal. Create some objects, give them a name. Create another dummy itemtemplate for the 'collect item' (You dont have to create a collect item for every quest, it's just for fluff)
Third goal, still step 1. (Because the first three goals are all on step 1, they are all given to the player at step 1, and can be completed simultaneously. Goals at step 2 will not be available until all goals for step 1 are complete) This step is Kill a deer for venison. I get the deers loc and put the 'Repeat No' to '2', just for something different. This is a 'kill' goaltype
Last goal, step 2. 'InteractFinish' goaltype. (Important Note: all quests MUST end with an 'InteractFinish' goaltype, and must be the last step in the quest.) Return items to Sage in Finnen. This goal is always set to 'Repeat No' set as '1'. You don't need to enter X or Y or ZoneID's for this type of goal."
Now for the sake of the example, I will add some 'optional' and 'final' rewards. You can have up to 8 of each rewards available. For 'optional' rewards, you need to set the amount the player can choose from with the 'can choose' selector. All 'final' rewards will be given to the player. You can use the 'Master Item Search' to search for an item, and then use the 'optional' or 'final' item buttons to set it in the field. (This also works for 'collect' items.) I will also enter some 'money' and 'xp' for the player to receive. (Note: money is in copper. So 1 silver is 100 copper, 1 gold is 10000 copper)
Click 'save' and you're all done. You can see the quest in the 'dataquestrewardquest' table in the database. You can also 'load' quests from the table if you know their ID, or 'search' will show all the quest names currently in the database table.
Now lets see the quest in action. I reboot the server to load the new itemtemplates i added. If no new templates are added, you can goto the start NPC and type
to load the quest without rebooting.
Here you can see the formatted quest 'story' (Says 'Cabalist', has a new line after first paragraph). Shows the all the rewards and how many optional rewards can be chosen.
Quest accepted, here you can see in the journal the 3 goals for step 1. Along with the quest 'Summary' text at the top. On the map we have red dots indicating there is a quest goal in that area.
Lets do the goals. Because these 3 goals are all given at step 1, they can also be completed in any order.
Above you can see the dummy 'collect' itemtemplate I created with a plant model number in the journal. Again, just for fluff.
Lets go kill some deer.
One down, one to go
I kill another deer then move to find the last goal of step 1. I find the hops and my quest journal is updated. Now I'm on to the second step, the final step. You can see the blue dot on the map now indicating the location of the quest finish NPC.
Return to Sage to complete the quest and get the rewards.
I pick the gloves as my optional reward (See the highlighted yellow item) a click 'finish'
And there you have it, a very easy way to complete some simple quests. This quest system also allows for custom scripts to be called at certain steps. This can allow for some fansy or creative interactions with the player. I will go over this in another guide.
If you are interested in seeing how this quest looks in the database, I have it here on my quest github repo. If you make some quests, please contribute to this github repo!