public void Add(uint questId) { if (Quests.ContainsKey(questId)) { _log.Warn("Duplicate add quest {0}", questId); return; } var template = QuestManager.Instance.GetTemplate(questId); if (template == null) { return; } var quest = new Quest(template); quest.Id = Quests.Count + 1; // TODO временно, переделать quest.Status = QuestStatus.Progress; quest.Owner = Owner; Quests.Add(quest.TemplateId, quest); var res = quest.Start(); if (res == 0) { Quests.Remove(quest.TemplateId); } else { Owner.SendPacket(new SCQuestContextStartedPacket(quest, res)); } }
public override void LoadFromResponse(string apiname, dynamic data) { base.LoadFromResponse(apiname, (object)data); var progress = KCDatabase.Instance.QuestProgress; //周期任務削除 if (DateTimeHelper.IsCrossedDay(progress.LastUpdateTime, 5, 0, 0)) { progress.Progresses.RemoveAll(p => (p.QuestType == 1 || p.QuestID == 211 /* 空母3 */ || p.QuestID == 212 /* 輸送5 */ || p.QuestID == 311 /* 演習勝利7 */)); Quests.RemoveAll(q => q.Type == 1 || q.QuestID == 211 /* 空母3 */ || q.QuestID == 212 /* 輸送5 */ || q.QuestID == 311 /* 演習勝利7 */); } if (DateTimeHelper.IsCrossedWeek(progress.LastUpdateTime, DayOfWeek.Monday, 5, 0, 0)) { progress.Progresses.RemoveAll(p => p.QuestType == 2); Quests.RemoveAll(q => q.Type == 2); } if (DateTimeHelper.IsCrossedMonth(progress.LastUpdateTime, 1, 5, 0, 0)) { progress.Progresses.RemoveAll(p => p.QuestType == 3); Quests.RemoveAll(q => q.Type == 3); } if (DateTimeHelper.IsCrossedQuarter(progress.LastUpdateTime, 0, 1, 5, 0, 0)) { // "沖ノ島海域迎撃戦", "戦果拡張任務!「Z作戦」前段作戦" に限る progress.Progresses.RemoveAll(p => p.QuestID == 822 || p.QuestID == 854); Quests.RemoveAll(q => q.QuestID == 822 || q.QuestID == 854); } Count = (int)RawData.api_count; if (RawData.api_list != null) //任務完遂時orページ遷移時 null になる { foreach (dynamic elem in RawData.api_list) { if (!(elem is double)) //空欄は -1 になるため。 { int id = (int)elem.api_no; if (!Quests.ContainsKey(id)) { var q = new QuestData(); q.LoadFromResponse(apiname, elem); Quests.Add(q); } else { Quests[id].LoadFromResponse(apiname, elem); } } } } IsLoaded = true; }
public void OnItemGather(Item item, int count) { if (!Quests.ContainsKey(item.Template.LootQuestId)) { return; } var quest = Quests[item.Template.LootQuestId]; quest.OnItemGather(item, count); }
public void SetQuestData(int QuestID, string pData, bool pSendPacket = true) { if (!Quests.ContainsKey(QuestID)) { return; } Quests[QuestID].Data = pData; QuestPacket.SendQuestDataUpdate(Character, QuestID, pData); }
public override void LoadFromResponse(string apiname, dynamic data) { base.LoadFromResponse(apiname, (object)data); var progress = KCDatabase.Instance.QuestProgress; //周期任務削除 if (DateTimeHelper.IsCrossedDay(progress.LastUpdateTime, 5, 0, 0)) { // 注: 311 = 精鋭艦隊演習; マンスリーだがデイリーで進捗リセット progress.Progresses.RemoveAll(p => (p.QuestType == 1 || p.QuestType == 5 || p.QuestID == 311)); Quests.RemoveAll(q => q.Type == 1 || q.Type == 5 || q.QuestID == 311); } if (DateTimeHelper.IsCrossedWeek(progress.LastUpdateTime, DayOfWeek.Monday, 5, 0, 0)) { progress.Progresses.RemoveAll(p => p.QuestType == 2); Quests.RemoveAll(q => q.Type == 2); } if (DateTimeHelper.IsCrossedMonth(progress.LastUpdateTime, 1, 5, 0, 0)) { progress.Progresses.RemoveAll(p => p.QuestType == 3); Quests.RemoveAll(q => q.Type == 3); } Count = (int)RawData.api_count; if (RawData.api_list != null) //任務完遂時orページ遷移時 null になる { foreach (dynamic elem in RawData.api_list) { if (!(elem is double)) //空欄は -1 になるため。 { int id = (int)elem.api_no; if (!Quests.ContainsKey(id)) { var q = new QuestData(); q.LoadFromResponse(apiname, elem); Quests.Add(q); } else { Quests[id].LoadFromResponse(apiname, elem); } } } } IsLoaded = true; }
public void Drop(uint questId) { if (!Quests.ContainsKey(questId)) { return; } var quest = Quests[questId]; quest.Drop(); Quests.Remove(questId); }
public override void LoadFromResponse(string apiname, dynamic data) { base.LoadFromResponse(apiname, (object)data); //周期任務削除 if (DateTimeHelper.IsCrossedDay(_prevTime, 5, 0, 0)) { Quests.RemoveAll(q => q.Type == 2 || q.Type == 4 || q.Type == 5); } if (DateTimeHelper.IsCrossedWeek(_prevTime, DayOfWeek.Monday, 5, 0, 0)) { Quests.RemoveAll(q => q.Type == 3); } if (DateTimeHelper.IsCrossedMonth(_prevTime, 1, 5, 0, 0)) { Quests.RemoveAll(q => q.Type == 6); } Count = (int)RawData.api_count; if (RawData.api_list != null) //任務完遂時orページ遷移時 null になる { foreach (dynamic elem in RawData.api_list) { if (!(elem is double)) //空欄は -1 になるため。 { int id = (int)elem.api_no; if (!Quests.ContainsKey(id)) { var q = new QuestData(); q.LoadFromResponse(apiname, elem); Quests.Add(q); } else { Quests[id].LoadFromResponse(apiname, elem); } } } } IsLoaded = true; _prevTime = DateTime.Now; }
public void Complete(uint questId, int selected, bool supply = true) { if (!Quests.ContainsKey(questId)) { _log.Warn("Complete not exist quest {0}", questId); return; } var quest = Quests[questId]; var res = quest.Complete(selected); if (res != 0) { if (supply) { var supplies = QuestManager.Instance.GetSupplies(quest.Template.Level); if (supplies != null) { Owner.AddExp(supplies.Exp, true); Owner.Money += supplies.Copper; Owner.SendPacket( new SCItemTaskSuccessPacket( ItemTaskType.QuestComplete, new List <ItemTask> { new MoneyChange(supplies.Copper) }, new List <ulong>()) ); } } var completeId = (ushort)(quest.TemplateId / 64); if (!CompletedQuests.ContainsKey(completeId)) { CompletedQuests.Add(completeId, new CompletedQuest(completeId)); } var complete = CompletedQuests[completeId]; complete.Body.Set((int)(quest.TemplateId - completeId * 64), true); var body = new byte[8]; complete.Body.CopyTo(body, 0); Owner.SendPacket(new SCQuestContextCompletedPacket(quest.TemplateId, body, res)); Quests.Remove(questId); _removed.Add(questId); OnQuestComplete(questId); } }
public bool AddNewQuest(int QuestID, string Data = "") { if (Quests.ContainsKey(QuestID)) { return(false); } Server.Instance.CharacterDatabase.RunQuery("INSERT INTO character_quests (id, charid, questid, data) VALUES (NULL, " + Character.ID.ToString() + ", " + QuestID + ", '" + MySqlHelper.EscapeString(Data) + "')"); int ID = Server.Instance.CharacterDatabase.GetLastInsertId(); Quests[QuestID] = new QuestData { ID = ID, Data = Data, QuestID = QuestID }; QuestPacket.SendQuestDataUpdate(Character, QuestID, Data); return(true); }
public string GetQuestData(int QuestID) { return(Quests.ContainsKey(QuestID) ? Quests[QuestID].Data : ""); }
public bool HasQuest(int QuestID) { return(Quests.ContainsKey(QuestID)); }