Help Making a Quest system

hi a while ago i been asking for some help into learning and somehow make a quest system for my mmorpg project, we already have a networked version and some things implemented, keep in mind i’m new learning about arrays, collections and classes from c#.

here bellow is my quest script.
now one of my main problems is knowing to to identify the quest that i make with the id. meaning is there a function or something saying that once you create a new quest for example:

private Quest _qt = new Quest;
but i’m missing defining it’s id somehow. well here is what i have so far.

Quest.cs

using UnityEngine;
using System.Collections;

public class Quest {
	
	//private int _id;
	private bool _known;
	private bool _completed;
	private string _name;
	private string _quest_plot;
	
	
	//this is the constructor for it
	public Quest()
	{
		_id = 0;
		_known = false;
		_completed = false;
		_name = "Give me one";
		_quest_plot = "Story goes here";
	}
	
	
	#region Properties of the Quest	
	//getters and setters (Properties)
	public int Id
	{
		get { return _id; }
		set { _id = value; }
	}
	
	public bool Known
	{
		get { return _known; }
		set { _known = value; }
	}
	
	public bool Completed
	{
		get { return _completed; }
		set { _completed = value; }
	}
	
	public string Name
	{
		get { return _name; }
		set { _name = value; }
	}
	
	public string Quest_Plot
	{
		get { return _quest_plot; }
		set { _quest_plot = value; }
	}
	#endregion
	
	
	//all my methods will go below depending on what they are

}

here is the script i use for my npc:
NPCQuester.cs

using UnityEngine;
using System.Collections;

public class NPCQuester : MonoBehaviour {
	
	
	public bool _quest_screen;
	
	public int Id;
	public bool Known;
	public bool Completed;
	public string Name;
	public string Plot;
	
	public float x = 0;
	public float y = 0;
	public float xH = 10;
	public float yW = 10;
	
	
	private Quest _qt;
	private Transform _myTransform;
	private Target2 _tar;
	
	void Awake()
	{
		_myTransform = transform;
		
		
		GameObject cam  = GameObject.FindWithTag("MainCamera");
		_tar  =  cam.GetComponent<Target2>();
	}
	
	// Use this for initialization
	void Start () 
	{
		_qt = new Quest();
		
		_qt.Id = Id;
		_qt.Known = Known;
		_qt.Completed = Completed;
		_qt.Name = Name;
		_qt.Quest_Plot = Plot;
		
		
		
		
		
		
		_quest_screen = false;
	}
	
	// Update is called once per frame
	void Update ()
	{
		if(_tar.target == _myTransform)
		{
			_quest_screen = true;
		}
		else
		{
			//_quest_screen = false;
		}
		
		
		
		
	}
	
	
	void OnGUI()
	{
		if(_quest_screen)
			GUI.Window(0,new Rect(50,250,300,400) , QuestWindow, Name);
	}
	
	
	private void QuestWindow(int windowID)
	{
		GUI.Label(new Rect(10,20,200,300), _qt.Quest_Plot.ToString());
		
		
		if(GUI.Button(new Rect(10,355,100,25), "Accept"))
		{
			Known = true;
			_quest_screen = false;
		}
		
		
		if(GUI.Button(new Rect(170,355,100,25), "Decline"))
		{
			Known = false;
			_quest_screen = false;
		}
			
	}
	
	
	
}

now the random floats variables like x,y, xh and yw are for positioning the windows and gui.

Have it check against a database, and choose the next highest ID that is not in use. Change your constructor to something like this:

public Quest()
{
	_id = questDatabase.NextID ();
	_known = false;
	_completed = false;
	_name = "Give me one";
	_quest_plot = "Story goes here";
}

I am keen on a quest being a script. Each script would have common properties and methods which tell if it is completed, or the percentage of completion or how many of something you have to kill or collect to complete it. As in WoW, you could also tell it what the names are of the creatures, so that in your GUI you could go through each quest and see if the creature is part of the quest and if so, display some extra information about it.

So they would all have the same common elements:
name
isCompleted
isFailed
plotText
completedText
failedText
justAquired // true or false. This shows if something for the quest was just gotten so that you can display information. goes with justAquiredText

connectedCreatures // this may highlight “Orcs” if they carry an object too.
connectedObjects
toCompleteText // would give back the text that would show in the info screen about the quest “1/10 Orcs slain/n3/5 Trolls slain”
justAquiredText // shows the text “1/10 Orcs slain” but not “1/10 Orcs slain/n3/5 Trolls slain” when this is called it would set justAquired to false.

I believe in this method you can completely customize your quest system and its not just plot, kill, continue. Of course you would make a base Quest class and derive everything from it.

i don’t think i phase the question right. i know how to set the properties and fields i might need for the quest class my problem is how to make it so i can say your quest id is : 1, and then some how later on say like if quest id 1 known then the player knows it, i could probably make a class about monsters and make the quest know the names that it might want to track. my main problem is defining the id meaning that once the class(object is created make it so it’s found or defined by a id).