//Fill the missing fields private void FillQuestProgress(List <QuestProgress> qpList) { foreach (QuestProgress qp in qpList) { QuestData qd = CurrentQuestList.FindQuestDataByID(qp.quest_id); qp.viewed = Utils.IsViewedQuest(qp.quest_id); int index = 0; foreach (QuestTargetProgress qtp in qp.target_progress_list) { if (index < qd.target_list.Count) { qtp.required_amount = qd.target_list[index].target_count; qtp.target_id = qd.target_list[index].target_id; qtp.target_type = qd.target_list[index].target_type; qtp.target_var1 = qd.target_list[index].target_var1; } else { qp.target_progress_list.Remove(qtp); break; } index++; } } }
private void ApplyActiveQuestList(List <int> questIDList, List <QuestProgress> questProgressList) { Debug.Log(string.Format("======== Applying active quest... Active quest count: {0}\t\tQuest progress count: {1}", questIDList.Count, questProgressList.Count)); //search for removed quests List <QuestProgress> removeList = new List <QuestProgress>(); foreach (QuestProgress qp in questProgressList) { if (questIDList.IndexOf(qp.quest_id) < 0) //this quest has been removed on server { removeList.Add(qp); } } foreach (QuestProgress qp in removeList) { questProgressList.Remove(qp); } if (removeList.Count > 0) { Debug.Log(string.Format("\t\tOut of date quests found and removed: {0}", removeList.Count)); } //search for new quests int newQuestCount = 0; foreach (int questID in questIDList) { QuestProgress questProgress = questProgressList.Find(delegate(QuestProgress qp) { return(qp.quest_id == questID); }); if (questProgress == null) //a new quest is found { QuestData qd = CurrentQuestList.FindQuestDataByID(questID); questProgress = new QuestProgress(); questProgress.quest_id = qd.quest_id; questProgress.viewed = false; List <QuestTargetProgress> qtpList = new List <QuestTargetProgress>(); foreach (QuestTarget target in qd.target_list) { QuestTargetProgress qtp = new QuestTargetProgress(); qtp.target_type = target.target_type; qtp.target_id = target.target_id; qtp.actual_amount = 0; qtp.required_amount = target.target_count; qtp.target_var1 = target.target_var1; qtpList.Add(qtp); } questProgress.target_progress_list = qtpList; questProgressList.Add(questProgress); Debug.Log(string.Format("\t\tNew quest added: {0}", questProgress.quest_id)); newQuestCount++; } } UpdateQuests(QuestTargetType.level_up, null, 0); if (newQuestCount > 0) { Debug.Log(string.Format("\t\tNumber of newly added quests: {0}", newQuestCount)); } Debug.Log(string.Format("======== Active quests applied. Active quest count: {0}\t\tQuest progress count: {1}", questIDList.Count, questProgressList.Count)); }