Exemplo n.º 1
0
 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);
 }
Exemplo n.º 2
0
        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);
             *  }
             * }*/
        }
Exemplo n.º 3
0
        public void SendQuestsUpdate()
        {
            Hashtable hash = new Hashtable {
                { (int)SPC.Info, GetInfo() }
            };

            MmoMessage.ReceiveNewQuests(CustomEventCode.NewQuestUpdated, hash);
            logger.Info($"{LOG_TAG}: send quest update...");
        }
Exemplo n.º 4
0
        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}");
            }
        }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 6
0
        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);
        }