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); }