Exemple #1
0
        public async Task Handle(QuestTriggerEvent message, CancellationToken cancellationToken)
        {
            var player           = message.Player;
            var questTriggerType = message.QuestTriggerType;

            //已经领取的所有任务
            var myQuests = (await _playerQuestDomainService.GetPlayerQuests(player.Id));
            //正在进行的任务
            var myQuestsNotComplete = myQuests.Where(x => x.Status == QuestStateEnum.已领取进行中);
            //所有未完成任务
            var quests = (await _questDomainService.GetAll()).Where(x => myQuestsNotComplete.Select(y => y.QuestId).Contains(x.Id));


            foreach (var quest in quests)
            {
                List <QuestTarget> questTargets = new List <QuestTarget>();
                try
                {
                    questTargets = JsonConvert.DeserializeObject <List <QuestTarget> >(quest.Target);
                }
                catch (Exception ex)
                {
                    _logger.LogError($"Convert QuestTarget:{ex}");
                }

                if (questTargets == null || questTargets.Count == 0)
                {
                    continue;
                }

                if (!questTargets.Exists(x => x.Target == questTriggerType.ToString()))
                {
                    continue;
                }

                foreach (var questTarget in questTargets)
                {
                    var npcId   = questTarget.Attrs.FirstOrDefault(x => x.Attr == "NpcId")?.Val;
                    var questId = questTarget.Attrs.FirstOrDefault(x => x.Attr == "QuestId")?.Val;
                    int.TryParse(questTarget.Attrs.FirstOrDefault(x => x.Attr == "RoomId")?.Val, out int roomId);

                    var targetEnum = (QuestTargetEnum)Enum.Parse(typeof(QuestTargetEnum), questTarget.Target, true);
                    switch (targetEnum)
                    {
                    case QuestTargetEnum.与某个Npc对话:

                        break;

                    case QuestTargetEnum.所在房间:
                        if (player.RoomId != roomId)
                        {
                            continue;
                        }


                        break;
                    }
                }
            }
        }
Exemple #2
0
 public Quest(int questid)
 {
     mVO = DataManager.QuestTable[questid] as QuestTableItem;
     if (mVO == null)
     {
         GameDebug.LogError("无效的任务id");
         return;
     }
     mTrigger = QuestTriggerEvent.Parse(mVO.triggerEvent);
     mId      = mVO.id;
     mType    = mVO.questType;
     mState   = QuestState.Accepted;
     mProcess = 0;
 }