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; } } } }
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; }