public Quest CreateQuest()
    {
        // Create empty quest for make QuestRequire
        List <Quest> questRequire;

        if (questRequireID.Length > 0)
        {
            questRequire = new List <Quest>();
            foreach (int questID in questRequireID)
            {
                questRequire.Add(new Quest(questID));
            }
        }
        else     // no quest require
        {
            questRequire = null;
        }
        // Create QuestCondition from questConditionData
        QuestCondition qcon = new QuestCondition(questConditionData.conditionType, questConditionData.targetID, questConditionData.amount);
        // Create Conversations[]
        List <Conversation> cons = new List <Conversation>();

        foreach (ConversationData conData in conversations)
        {
            Conversation con = conData.voices.Length > 0 ? // have voice ? by checking length
                               new Conversation(conData.dialogues, conData.voices):
                               new Conversation(conData.dialogues);
            if (conData.isFadeAfterDone)
            {
                con.fade = true;
            }
            cons.Add(con);
        }
        // Create Quest
        Quest quest;

        if (qcon.type == 1)
        {
            quest = new Quest(questID, questTitle, questDetail, questPlaceDetail, questRequire == null ? null : questRequire.ToArray(), qcon, npcOwnerID, cons.ToArray(), qcon.getTarget());
        }
        else
        {
            quest = new Quest(questID, questTitle, questDetail, questPlaceDetail, questRequire == null ? null : questRequire.ToArray(), qcon, npcOwnerID, cons.ToArray());
        }
        // if have questContinue, add to quest
        if (!QuestData.ReferenceEquals(questContinue, null))
        {
            quest.questContinue = questContinue.CreateQuest();
        }
        // if have EXP Reward add to quest reward
        if (EXP > 0)
        {
            quest.rewardEXP = EXP;
        }
        return(quest);
    }