I would like to assign a quest and have it active when a level is started, without a quest giver. Basically something like "Kill every damn thing in this level" I'd also like to add a quest on a unity trigger object. So when the player walks in a door they automatically get assigned a quest like "Steal the jewel from the idol" My game is all procedural. So the quests can be scripted, but only added on the event or thing being added. At the end of the level I want to count up the finished quests and assign points or such. Not turn them in to a quest giver. This is the thing I am having issue with, skipping the whole quest giver and acceptance etc.
I have to admit even though I have had this package for some time I am not that familiar with it...
If you can give me an idea how to get this started. I was thinking I'd build the quest using the quest builder,
Automatic quests or quests on triggers
Re: Automatic quests or quests on triggers
Hi,
1. Add the quest to the player's Quest Journal, and set it active. Example:
Side note: If 'quest' is a hand-written quest asset in your project, don't add it directly. Clone it, and use the clone:
2. Or create an empty GameObject with a Quest Giver component. Add the quest to the Quest Giver's list. Also add a Timed Event component. Tick Activate On Start. Configure the OnTimeReached() event to call QuestGiver.GiveAllQuestsToQuester(player). In this case, the Quest Giver GameObject isn't an NPC, it's just a container that holds quests to give the player.
Did you want to use Quest Machine's procedural quest generator? Or will you write your own code that builds quests using QuestBuilder? If you plan to write your own code, perhaps as part of the level generation process, then these are the general steps:
1. Create a player in the scene.
2. Add a Quest Journal component to the player.
3. Build a quest.
4. Call QuestMachine.RegisterQuestInstance(quest) to tell Quest Machine about the quest.
5. Use one of the methods above to add it to the player.
6. Repeat steps 3-5 for as many quests as you want.
There are two ways to do this:
1. Add the quest to the player's Quest Journal, and set it active. Example:
Code: Select all
questJournal.AddQuest(quest);
quest.SetState(QuestState.Active);
QuestMachineMessages.RefreshIndicators(quest);
Code: Select all
var instance = quest.Clone();
questJournal.AddQuest(instance); //etc...
Just like #2 above, except add a Trigger Event instead of a Timed Event.
That's no problem with Quest Machine. Since Quest Machine has an extensive API, I'm sure you'll have questions, so ask any time.
Here's the API: QuestBuilder.
Did you want to use Quest Machine's procedural quest generator? Or will you write your own code that builds quests using QuestBuilder? If you plan to write your own code, perhaps as part of the level generation process, then these are the general steps:
1. Create a player in the scene.
2. Add a Quest Journal component to the player.
3. Build a quest.
4. Call QuestMachine.RegisterQuestInstance(quest) to tell Quest Machine about the quest.
5. Use one of the methods above to add it to the player.
6. Repeat steps 3-5 for as many quests as you want.
Re: Automatic quests or quests on triggers
Thanks so much. That works great.
The issue I have at the moment with generated quests, or in my case they are more like tasks or challenges. The issue I have is creating the areas. Since my game is pretty much procedural I'd have to create some code to define the areas or basically have areas predefined on the pieces I drop in. as opposed to creating an area on a prebuilt space I am going to have the triggers.
The issue I have at the moment with generated quests, or in my case they are more like tasks or challenges. The issue I have is creating the areas. Since my game is pretty much procedural I'd have to create some code to define the areas or basically have areas predefined on the pieces I drop in. as opposed to creating an area on a prebuilt space I am going to have the triggers.
Re: Automatic quests or quests on triggers
If it's OK for your quest giver to know about all entities in the scene, then you can just create one huge trigger collider that encompasses the whole scene. Set it up as a quest domain, and assign it to the quest giver. That's certainly the easiest solution.
If you want the quest giver to only know about entities in certain areas -- for example, at most 20 units away -- you could build your quest giver with a 20-radius trigger collider and quest domain centered on it, like as a child GameObject.
I'm just tossing those out as ideas. If you want to provide more specifics, I might be able to suggest some other approaches.
If you want the quest giver to only know about entities in certain areas -- for example, at most 20 units away -- you could build your quest giver with a 20-radius trigger collider and quest domain centered on it, like as a child GameObject.
I'm just tossing those out as ideas. If you want to provide more specifics, I might be able to suggest some other approaches.