Ejemplo n.º 1
0
        public void AcceptQuest(NWPlayer player, NWObject questOwner, int questID)
        {
            if (!player.IsPlayer)
            {
                return;
            }

            Quest quest = _data.Single <Quest>(x => x.ID == questID);

            if (!CanAcceptQuest(player, quest, true))
            {
                return;
            }

            var questState = _data.Single <QuestState>(x => x.QuestID == questID && x.Sequence == 1);
            var status     = new PCQuestStatus
            {
                CurrentQuestStateID = questState.ID
            };

            // Give temporary key item at start of quest.
            if (quest.StartKeyItemID != null)
            {
                _keyItem.GivePlayerKeyItem(player, (int)quest.StartKeyItemID);
            }

            if (!string.IsNullOrWhiteSpace(quest.MapNoteTag))
            {
                _mapPin.AddWaypointMapPin(player, quest.MapNoteTag, quest.Name, "QST_MAP_NOTE_" + questID);
            }

            status.QuestID  = quest.ID;
            status.PlayerID = player.GlobalID;
            _data.SubmitDataChange(status, DatabaseActionType.Insert);
            CreateExtendedQuestDataEntries(status);

            _.AddJournalQuestEntry(quest.JournalTag, 1, player.Object, FALSE);
            player.SendMessage("Quest '" + quest.Name + "' accepted. Refer to your journal for more information on this quest.");


            if (!string.IsNullOrWhiteSpace(quest.OnAcceptRule) && questOwner != null)
            {
                App.ResolveByInterface <IQuestRule>("QuestRule." + quest.OnAcceptRule, rule =>
                {
                    string[] args = null;
                    if (!string.IsNullOrWhiteSpace(quest.OnAcceptArgs))
                    {
                        args = quest.OnAcceptArgs.Split(',');
                    }
                    rule.Run(player, questOwner, questID, args);
                });
            }
        }
Ejemplo n.º 2
0
        public void AcceptQuest(NWPlayer oPC, int questID)
        {
            if (!oPC.IsPlayer)
            {
                return;
            }

            PCQuestStatus status = _db.PCQuestStatus.Single(x => x.PlayerID == oPC.GlobalID && x.QuestID == questID);

            if (status != null)
            {
                if (status.CompletionDate != null)
                {
                    oPC.SendMessage("You have already completed this quest.");
                    return;
                }
                else
                {
                    oPC.SendMessage("You have already accepted this quest.");
                    return;
                }
            }


            Quest quest = _db.Quests.Single(x => x.QuestID == questID);

            if (!DoesPlayerMeetPrerequisites(oPC, quest.QuestPrerequisites))
            {
                oPC.SendMessage("You do not meet the prerequisites necessary to accept this quest.");
                return;
            }

            if (!DoesPlayerHaveRequiredKeyItems(oPC, quest.QuestStates.ElementAt(0).QuestRequiredKeyItemLists))
            {
                oPC.SendMessage("You do not have the required key items to accept this quest.");
                return;
            }

            PCRegionalFame fame = _db.PCRegionalFames.Single(x => x.PlayerID == oPC.GlobalID && x.FameRegionID == quest.FameRegionID);

            if (fame.Amount < quest.RequiredFameAmount)
            {
                oPC.SendMessage("You do not have enough fame to accept this quest.");
                return;
            }

            status = new PCQuestStatus();
            foreach (QuestState state in quest.QuestStates)
            {
                if (state.Sequence == 1)
                {
                    status.CurrentQuestStateID = state.QuestStateID;
                    break;
                }
            }

            if (status.CurrentQuestState == null)
            {
                oPC.SendMessage("There was an error accepting the quest '" + quest.Name + "'. Please inform an admin this quest is bugged. (QuestID: " + questID + ")");
                return;
            }

            // Give temporary key item at start of quest.
            if (quest.StartKeyItemID != null)
            {
                _keyItem.GivePlayerKeyItem(oPC, (int)quest.StartKeyItemID);
            }

            if (!string.IsNullOrWhiteSpace(quest.MapNoteTag))
            {
                _mapPin.AddWaypointMapPin(oPC, quest.MapNoteTag, quest.Name, "QST_MAP_NOTE_" + questID);
            }

            status.QuestID  = quest.QuestID;
            status.PlayerID = oPC.GlobalID;
            _db.PCQuestStatus.Add(status);
            _db.SaveChanges();

            CreateExtendedQuestDataEntries(status, questID, 1);

            _.AddJournalQuestEntry(quest.JournalTag, 1, oPC.Object, FALSE);
            oPC.SendMessage("Quest '" + quest.Name + "' accepted. Refer to your journal for more information on this quest.");
        }