public bool TryStartQuest() { if (startedQuests.Count == 0) { foreach (QuestData questData in resource.Quests.Quests) { if (!IsCompleted(questData.Id)) { if (questData.StartConditions.Check(this)) { if (MmoMessage != null) { QuestInfo quest = new QuestInfo(this, questData); quest.SetState(QuestState.not_accepted); startedQuests.Add(quest); Hashtable hash = new Hashtable { { (int)SPC.NewQuest, quest.GetInfo() }, { (int)SPC.Info, GetInfo() } }; MmoMessage.ReceiveNewQuests(CustomEventCode.NewQuestNotAccepted, hash); logger.Info($"{LOG_TAG}: New quest not accepted {quest.Id}, Counter => {quest.Counter}"); return(true); } } } } } return(false); }
public void RewardQuest(string id) { var quest = startedQuests.Find(q => q.Id == id && q.State == QuestState.ready); if (quest != null) { startedQuests.Remove(quest); completedQuests.Add(quest.Id); foreach (var reward in quest.Data.Rewards.Rewards) { RewardImpl(reward); } Hashtable hash = new Hashtable { { (int)SPC.NewQuest, quest.GetInfo() }, { (int)SPC.Info, GetInfo() } }; MmoMessage.ReceiveNewQuests(CustomEventCode.NewQuestCompleted, hash); logger.Info($"{LOG_TAG}: quest rewarded => {quest.Id}, counter => {quest.Counter}"); } /* * var quest = questsToReward.Find(q => q.Id == id); * if(quest != null ) { * questsToReward.Remove(quest); * //Make Reward * foreach(var reward in quest.Data.Rewards.Rewards) { * RewardImpl(reward); * } * }*/ }
public void SendQuestsUpdate() { Hashtable hash = new Hashtable { { (int)SPC.Info, GetInfo() } }; MmoMessage.ReceiveNewQuests(CustomEventCode.NewQuestUpdated, hash); logger.Info($"{LOG_TAG}: send quest update..."); }
public void AcceptQuest(string id) { var quest = startedQuests.Find(q => q.Id == id && q.State == QuestState.not_accepted); if (quest != null) { quest.SetState(QuestState.started); Hashtable hash = new Hashtable { { (int)SPC.NewQuest, quest.GetInfo() }, { (int)SPC.Info, GetInfo() } }; MmoMessage.ReceiveNewQuests(CustomEventCode.NewQuestStarted, hash); logger.Info($"{LOG_TAG}: quest started => {quest.Id}, counter => {quest.Counter}"); } }
public void ForceStartQuest(string questId) { if (completedQuests.Contains(questId)) { completedQuests.Remove(questId); } QuestData questData = resource.Quests.GetQuest(questId); if (questData != null) { QuestInfo quest = new QuestInfo(this, questData); startedQuests.Clear(); startedQuests.Add(quest); Hashtable hash = new Hashtable { { (int)SPC.NewQuest, quest.GetInfo() }, { (int)SPC.Info, GetInfo() } }; MmoMessage.ReceiveNewQuests(CustomEventCode.NewQuestStarted, hash); } }
public bool TryCompleteQuest(bool sendUpdate) { if (startedQuests.Count > 0) { candidatesToComplete.Clear(); bool wasUpdate = false; foreach (QuestInfo questInfo in startedQuests) { if (questInfo.State == QuestState.started) { QuestData questData = questInfo.Data; if (questData != null) { QuestConditionCollection completeConditions = null; if (questData.CompleteConditions.TryGetValue(PlayerRace, out completeConditions)) { if (completeConditions != null) { if (completeConditions.Check(this)) { questInfo.AddCounter(1); if (questInfo.Counter >= completeConditions.Repeat) { candidatesToComplete.Add(questInfo); } else { wasUpdate = true; } } } } } } } CraftedModule = null; KilledNpc = null; CreatedStructure = null; if (wasUpdate || sendUpdate) { SendQuestsUpdate(); } if (candidatesToComplete.Count > 0) { foreach (QuestInfo candidateQuest in candidatesToComplete) { QuestConditionCollection completeConditions = null; if (candidateQuest.Data.TryGetCompleteConditions(PlayerRace, out completeConditions)) { foreach (QuestCondition condition in completeConditions.Conditions) { if (condition.IsClearVariable) { condition.ResetVariable(this); } } } candidateQuest.SetState(QuestState.ready); Hashtable hash = new Hashtable { { (int)SPC.NewQuest, candidateQuest.GetInfo() }, { (int)SPC.Info, GetInfo() } }; MmoMessage.ReceiveNewQuests(CustomEventCode.NewQuestReady, hash); logger.Info($"{LOG_TAG}: Quest Ready => {candidateQuest.Id}, counter => {candidateQuest.Counter}"); } return(true); } } return(false); }