Page 1 of 2

Allow only one instance

Posted: Tue Sep 25, 2018 11:53 am
by GorkaGames
Hi,

What is referring "Allow only one instance" in the quest machine configuration settings? Thanks

Re: Allow only one instance

Posted: Tue Sep 25, 2018 1:58 pm
by Tony Li
When Allow Only One Instance is ticked and the scene already contains a Quest Machine GameObject (typically carried over from the previous scene by the Don't Destroy GameObject script), it will automatically destroy any new Quest Machine GameObjects so only one will exist. This way, you're guaranteed to always be using the same Quest Machine GameObject for all scenes.

Re: Allow only one instance

Posted: Tue Sep 25, 2018 2:34 pm
by GorkaGames
Ok, I undersand, thanks! I already had checking in to avoid conflicts.

Re: Allow only one instance

Posted: Wed Sep 26, 2018 10:03 am
by GorkaGames
Hi, I get this error when interacting the player with the quest giver:

playerQuestListContainer.DeleteQuest(quest.id); // Clear any old instance of repeatable quests first.

And sometimes the UI on the quest Dialog UI gets partially bloqued and don't let me select any quest (Neither with keyboard nor Gamepad. I'm using rewired and I already installed the rewired addon on your third party folder)

I don't know if the error is because that or by another reason....


Full error here:

NullReferenceException: Object reference not set to an instance of an object
PixelCrushers.QuestMachine.QuestGiver.ShowOfferQuest (PixelCrushers.QuestMachine.Quest quest) (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest MonoBehaviours/Quest List/QuestGiver.cs:461)
PixelCrushers.QuestMachine.QuestGiver.OnSelectQuest (PixelCrushers.QuestMachine.Quest quest) (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest MonoBehaviours/Quest List/QuestGiver.cs:480)
PixelCrushers.QuestMachine.UnityUIQuestDialogueUI+<AddQuestList>c__AnonStorey2.<>m__0 () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest UIs/Unity UI/Unity UI Quest Dialogue UI/UnityUIQuestDialogueUI.cs:238)
UnityEngine.Events.InvokableCall.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:166)
UnityEngine.Events.UnityEvent.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent_0.cs:58)
UnityEngine.UI.Button.Press () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:36)
UnityEngine.UI.Button.OnSubmit (UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:50)
UnityEngine.EventSystems.ExecuteEvents.Execute (ISubmitHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:127)
UnityEngine.EventSystems.ExecuteEvents.Execute[ISubmitHandler] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functor) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:261)
UnityEngine.EventSystems.ExecuteEvents:Execute(GameObject, BaseEventData, EventFunction`1)
Rewired.Integration.UnityUI.RewiredStandaloneInputModule:SendSubmitEventToSelectedObject() (at Assets/Rewired/Integration/UnityUI/RewiredStandaloneInputModule.cs:791)
Rewired.Integration.UnityUI.RewiredStandaloneInputModule:Process() (at Assets/Rewired/Integration/UnityUI/RewiredStandaloneInputModule.cs:646)
UnityEngine.EventSystems.EventSystem:Update()

Re: Allow only one instance

Posted: Wed Sep 26, 2018 10:41 am
by Tony Li
Hi,
GorkaGames wrote: Wed Sep 26, 2018 10:03 amHi, I get this error when interacting the player with the quest giver:

playerQuestListContainer.DeleteQuest(quest.id); // Clear any old instance of repeatable quests first.
Is this line in your script reporting an error? If so, would you please post the error that you're getting? Can you also post the code that includes this line?
GorkaGames wrote: Wed Sep 26, 2018 10:03 amAnd sometimes the UI on the quest Dialog UI gets partially bloqued and don't let me select any quest (Neither with keyboard nor Gamepad. I'm using rewired and I already installed the rewired addon on your third party folder)
If you keep the inspector on the EventSystem GameObject, it will show which UI element is currently selected:

Image

Is any UI element selected?

Can you click anything with the mouse?

At this point in runtime, what is the Input Device Manager's Input Device dropdown set to? (Note that if you move the mouse, it will automatically set the dropdown to Mouse.)

I'm trying to get an idea of the state of Unity's UI system when the issue occurs.
GorkaGames wrote: Wed Sep 26, 2018 10:03 am
Full error here:
NullReferenceException: Object reference not set to an instance of an object
PixelCrushers.QuestMachine.QuestGiver.ShowOfferQuest (PixelCrushers.QuestMachine.Quest quest) (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest MonoBehaviours/Quest List/QuestGiver.cs:461)
PixelCrushers.QuestMachine.QuestGiver.OnSelectQuest (PixelCrushers.QuestMachine.Quest quest) (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest MonoBehaviours/Quest List/QuestGiver.cs:480)
PixelCrushers.QuestMachine.UnityUIQuestDialogueUI+<AddQuestList>c__AnonStorey2.<>m__0 () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest UIs/Unity UI/Unity UI Quest Dialogue UI/UnityUIQuestDialogueUI.cs:238)
UnityEngine.Events.InvokableCall.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:166)
UnityEngine.Events.UnityEvent.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent_0.cs:58)
UnityEngine.UI.Button.Press () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:36)
UnityEngine.UI.Button.OnSubmit (UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:50)
UnityEngine.EventSystems.ExecuteEvents.Execute (ISubmitHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:127)
UnityEngine.EventSystems.ExecuteEvents.Execute[ISubmitHandler] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functor) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:261)
UnityEngine.EventSystems.ExecuteEvents:Execute(GameObject, BaseEventData, EventFunction`1)
Rewired.Integration.UnityUI.RewiredStandaloneInputModule:SendSubmitEventToSelectedObject() (at Assets/Rewired/Integration/UnityUI/RewiredStandaloneInputModule.cs:791)
Rewired.Integration.UnityUI.RewiredStandaloneInputModule:Process() (at Assets/Rewired/Integration/UnityUI/RewiredStandaloneInputModule.cs:646)
UnityEngine.EventSystems.EventSystem:Update()
When does this error occur?

Is a quest dialogue UI assigned to the Quest Giver's UI Settings? It's easier if it's not assigned. In this case, the Quest Giver will use the quest dialogue UI that's assigned to the Quest Machine GameObject.

Re: Allow only one instance

Posted: Wed Sep 26, 2018 11:21 am
by GorkaGames
Its in your code QuestGiverCs:

protected virtual void ShowOfferQuest(Quest quest)
{
QuestMachineMessages.DiscussQuest(player, this, id, quest.id);
playerQuestListContainer.DeleteQuest(quest.id); // Clear any old instance of repeatable quests first.
questDialogueUI.ShowOfferQuest(myQuestGiverTextInfo, quest, OnAcceptQuest, OnQuestBackButton);
QuestMachineMessages.DiscussedQuest(player, this, id, quest.id);
}

And the error:

NullReferenceException: Object reference not set to an instance of an object
PixelCrushers.QuestMachine.QuestGiver.ShowOfferQuest (PixelCrushers.QuestMachine.Quest quest) (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest MonoBehaviours/Quest List/QuestGiver.cs:461)
PixelCrushers.QuestMachine.QuestGiver.OnSelectQuest (PixelCrushers.QuestMachine.Quest quest) (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest MonoBehaviours/Quest List/QuestGiver.cs:480)
PixelCrushers.QuestMachine.UnityUIQuestDialogueUI+<AddQuestList>c__AnonStorey2.<>m__0 () (at Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest UIs/Unity UI/Unity UI Quest Dialogue UI/UnityUIQuestDialogueUI.cs:238)
UnityEngine.Events.InvokableCall.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:166)
UnityEngine.Events.UnityEvent.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent_0.cs:58)
UnityEngine.UI.Button.Press () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:36)
UnityEngine.UI.Button.OnSubmit (UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:50)
UnityEngine.EventSystems.ExecuteEvents.Execute (ISubmitHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:127)
UnityEngine.EventSystems.ExecuteEvents.Execute[ISubmitHandler] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functor) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:261)
UnityEngine.EventSystems.ExecuteEvents:Execute(GameObject, BaseEventData, EventFunction`1)
Rewired.Integration.UnityUI.RewiredStandaloneInputModule:SendSubmitEventToSelectedObject() (at Assets/Rewired/Integration/UnityUI/RewiredStandaloneInputModule.cs:791)
Rewired.Integration.UnityUI.RewiredStandaloneInputModule:Process() (at Assets/Rewired/Integration/UnityUI/RewiredStandaloneInputModule.cs:646)
UnityEngine.EventSystems.EventSystem:Update()


It happens when the dialog box show up and I try to activate one of the quests. It doesn't activate any quest and it gives this error

Re: Allow only one instance

Posted: Wed Sep 26, 2018 11:22 am
by GorkaGames
Quest Dialogue UI is none on the quest Giver, as you mentioned its better.

Re: Allow only one instance

Posted: Wed Sep 26, 2018 11:41 am
by Tony Li
Thank you for the info. I will investigate this and try to send you a fix by the end of the day.

Re: Allow only one instance

Posted: Wed Sep 26, 2018 12:18 pm
by GorkaGames
Thanks, just remember you that I'm with the rewired addon installed and with your Input Device Manager deactivated, just in case.

Re: Allow only one instance

Posted: Wed Sep 26, 2018 10:02 pm
by Tony Li
Hi,

I just PM'ed you the download for patch 1.0.7 20180926.

I couldn't reproduce the issue, but I tested it and added more error checking and reporting. If you still get the error, please post the error messages since they should be more helpful now.

For Rewired, keep the Input Device Manager, and add an Input Device Manager Rewired component to it. The Input Device Manager is what auto-focuses the first button when a UI window opens. If no button is focused, Unity UI can't navigate using keyboard or gamepad. (The Input Device Manager isn't strictly required, but if you remove it you must write a script to manually focus some UI button whenever a window opens.) The Input Device Manager Rewired component is an add-on that tells the Input Device Manager to read input from Rewired instead of standard Unity input.

To automatically set unique keys for Saver components, use the menu item: Tools > Pixel Crushers > Common > Save System > Assign Unique Keys....