Page 1 of 1

Message Listener: Object Reference not set to an instance of an Object

Posted: Tue Nov 14, 2023 4:11 pm
by shortestyard57
Hey Tony,

I have been unsuccesful in troubleshooting the following error.

Message System exception sending 'ImperiumAdvanceCamp'/'Start' to Machines and Managers (GlobalVariablesAndMessageTracker): Object reference not set to an instance of an object

Here is the console message:

Code: Select all

[Error] Message System exception sending 'ImperiumAdvanceCamp'/'Start' to Machines and Managers (GlobalVariablesAndMessageTracker): Object reference not set to an instance of an object
MessageSystem.SendMessageWithTarget() at /3rdParty/Tools/Pixel Crushers/Common/Scripts/Message System/MessageSystem.cs:370
 368:      catch (System.Exception e)
 369:      {
--> 370:          Debug.LogError("Message System exception sending '" + message + "'/'" + parameter + "' to " + x.listener + ": " + e.Message);
 371:      }
 372:  }

MessageSystem.SendMessage() at /3rdParty/Tools/Pixel Crushers/Common/Scripts/Message System/MessageSystem.cs:430
 428:  public static void SendMessage(object sender, string message, string parameter, params object[] values)
 429:  {
--> 430:      SendMessageWithTarget(sender, null, message, parameter, values);
 431:  }

ImperiumAdvancedCampSceneStart/<SceneLoad>d__3.MoveNext() at /_Project/Scenes/Imperium Advanced Camp/ImperiumAdvancedCampSceneStart.cs:36
  34:      //Message to set quest active (Journal and HUD are tied to quest being active)
-->  36:      MessageSystem.SendMessage(this.gameObject, "ImperiumAdvanceCamp", "Start");
  38:  }

SetupCoroutine.InvokeMoveNext()
And here is where I add the listener:

Code: Select all

private void OnEnable()
    {
        messageList = new();
        questIDs = new();
        foreach (var quest in questDatabase.questAssets)
        {
            questIDs.Add(quest.id.ToString());
        }
        foreach (var questID in questIDs)
        {
            if (questID != null)
            {
                MessageSystem.AddListener(this, questID, string.Empty);
            }            
        }

    }
I thought the null object was the sender but after playing around with sending difference references and I get the name of the sender object to populate in the console via debug.log (I have tried class instance, gameobject, and object) I am not sure. Is there something else that could be the object in question?

Re: Message Listener: Object Reference not set to an instance of an Object

Posted: Tue Nov 14, 2023 9:35 pm
by Tony Li
Hi,

The error is in your OnMessage() method. In your code editor, add a breakpoint in your method and step through to identify which line is the culprit.

Quest Machine's Message System catches exceptions and reports them. This allows Quest Machine to continue functioning even if an OnMessage() method throws an exception. The downside is that it's a bit harder to identify which line in the OnMessage() method caused the exception.

Re: Message Listener: Object Reference not set to an instance of an Object

Posted: Wed Nov 15, 2023 5:20 pm
by shortestyard57
Makes sense and indeed that was the issue. Thanks as always.

Re: Message Listener: Object Reference not set to an instance of an Object

Posted: Wed Nov 15, 2023 6:22 pm
by Tony Li
Glad to help!