public static void RequestItemsFromPC(NWPlayer oPC, NWObject questOwner, int questID) { if (!oPC.IsPlayer) { return; } PCQuestStatus pcStatus = DataService.SingleOrDefault <PCQuestStatus>(x => x.PlayerID == oPC.GlobalID && x.QuestID == questID); if (pcStatus == null) { oPC.SendMessage("You have not accepted this quest yet."); return; } QuestState questState = DataService.Get <QuestState>(pcStatus.CurrentQuestStateID); var requiredKeyItems = DataService.Where <QuestRequiredKeyItem>(x => x.QuestStateID == pcStatus.CurrentQuestStateID); foreach (QuestRequiredKeyItem ki in requiredKeyItems) { if (!KeyItemService.PlayerHasKeyItem(oPC, ki.KeyItemID)) { oPC.SendMessage("You are missing a required key item."); return; } } if (questState.QuestTypeID != (int)QuestType.CollectItems) { oPC.SendMessage("The quest state you are currently on is not configured to collect items. Please inform an admin of this issue. (QuestID: " + questID + ")"); return; } Location location = oPC.Location; NWPlaceable collector = (_.CreateObject(OBJECT_TYPE_PLACEABLE, "qst_item_collect", location)); collector.SetLocalObject("QUEST_OWNER", questOwner); collector.AssignCommand(() => { _.SetFacingPoint(oPC.Position); }); collector.SetLocalInt("QUEST_ID", questID); oPC.AssignCommand(() => { _.ActionInteractObject(collector.Object); }); }
/// <summary> /// Spawns a container and forces a player to open it. They are then instructed to insert any /// quest items inside. /// </summary> /// <param name="oPC">The player we're requesting items from.</param> /// <param name="questOwner">The quest giver object</param> /// <param name="questID">The ID number of the quest</param> public static void RequestItemsFromPC(NWPlayer oPC, NWObject questOwner, int questID) { if (!oPC.IsPlayer) { return; } PCQuestStatus pcStatus = DataService.PCQuestStatus.GetByPlayerAndQuestIDOrDefault(oPC.GlobalID, questID); if (pcStatus == null) { oPC.SendMessage("You have not accepted this quest yet."); return; } var quest = GetQuestByID(questID); var questState = quest.GetState(pcStatus.QuestState); var collectKeyItemObjectives = questState.GetObjectives().Where(x => x.GetType() == typeof(CollectKeyItemObjective)).Cast <CollectKeyItemObjective>(); foreach (var ki in collectKeyItemObjectives) { if (!KeyItemService.PlayerHasKeyItem(oPC, ki.KeyItemID)) { oPC.SendMessage("You are missing a required key item."); return; } } Location location = oPC.Location; NWPlaceable collector = CreateObject(ObjectType.Placeable, "qst_item_collect", location); collector.SetLocalObject("QUEST_OWNER", questOwner); collector.AssignCommand(() => { SetFacingPoint(oPC.Position); }); collector.SetLocalInt("QUEST_ID", questID); oPC.AssignCommand(() => { ActionInteractObject(collector.Object); }); }