ID:151923
 
My game has a lot of quest in it and I set up a basic system but as I put more and more quest in it Ive found my system to be cumbersome. So Im wondering what others think of doing for a quest system. Here are the requirements that I would like and also what im doing.
1. Be able to check players for which quest they have gotten,done,turned in, and havent got to mark NPCs with an appropiate mark to inform players.
2. Have a quest log so players can see all their quest (which means they can have more than one at a time)
3. Check when killing things whether its part of the quest or not.

And here is what im doing
//actually quest
obj/Tasks
Bar_Drunk1
name="A rukus in the bar"
level=2
info="That man at the bar is always here and has been harassing the customers and running away business please get him out of here"
Exp=35
Reward=5
source=/mob/tasks/Bartender

For the NPC I check if they have that object if they dont i give it to them.
For the completing it i define a variable for the object for different stages and check for which stage its on.

As for marking the NPCs that is where i think there can be a different way cause right now im keeping all the quest in the users quest list even after they complete it (just dont show it to them anymore). Its a pretty in depth system but my current one takes up a lot of code doing checks all the time when things are killed. And its really long.
See: DM Guide Chapter 18: User-defined Data Objects
See hub://Deadron.Quest
You could use datums (for both the log and the quests), and then use XML for the quests. For example, this could be a script for the quest you showed.
<quest name="A Ruckus In The Bar">
<data>
<info>A man in the bar has been harrassing customers, and scaring away business. Escort him out.</info>

<!-- This means that any bartender could possibly
give this quest. -->
<source type="path">/mob/Bartender</source>
</data>

<requirements>
<level bound="min">2</level>
<level bound="max">-1</level> <!-- Presumably, -1
means there is
no bound. -->
</requirements>

<action_list> <!-- The list of requirements for this to
work. -->
<!-- Fill it in here. This part could get rather
complicated. -->
</action_list>

<rewards>
<!-- "alter" means it would go up. You could
possibly have a quest that increases some
things and decreases others. -->
<reward stat="exp" alter="up">35</reward>
<reward stat="gold" alter="up">5</reward>
</rewards>
</quest>