Das ist schon bei Maniac Mansion Deluxe so schlampig programmiert gewesen, war aber kein Problem, da Charaktere nur das any_click-Event hatten.
Und da das Gib-Verb ein Spezialfall war, der separat behandelt wurde, wurde die entsprechende Zeile immer unmittelbar nach dem Klick auf den Charakter aufgerufen, d.h. man musste die Maus schon extrem schnell wegbewegen, um den null pointer error zu erzeugen.
Die alten Starterpacks aber sind so umgeschrieben, das Gib und Benutze UseInv aufrufen. Danach wird allerdings trotzdem any_click aufgerufen (das wird von AGS so gehandhabt und lässt sich nicht abstellen).
Wenn also UseInv eine Reaktion erzeugt, z.B. einen kurzen Dialog, dann ist die Maus danach natürlich längst sonstwo gelandet, und am ende von any_click wird dann schön brav Unhandled() aufgerufen, das jedoch den aktuell unter der Maus befindlichen Charakter verwenden möchte. Da ist jedoch in der Regel keiner mehr, und so entsteht der berühmt-berüchtigte Fehler.
Eine vernünftige Lösung muss somit verhindern, dass Unhandled ausgeführt wird, wenn die Aktion sehr wohl "gehandled" wurde, nämlich von UseInv.
Alternativ kann man Benutze und Gib auch wieder in any_click "handlen", dann fällt der Fehler ebenfalls weg.
Neuere Starterpacks haben vermutlich eine dieser Varianten bereits umgesetzt; das Problem hier ist auch, dass Du mit uraltem Code und wahrscheinlich entsprechend einem völlig veralteten AGS und Starterpack arbeitest.
Zum direkten Vergleich:
Alt:
[ags] DisplaySpeech(GetPlayerCharacter(),"Das brauch ich noch.");[/ags]
Neu:[ags] player.Say("Das brauch ich noch.");[/ags]
Das geht übrigens schon ab 2.7, d.h. Du musst Dich nicht an den neuen Editor gewöhnen; wenn Du bereits (hoffentlich) mit 2.72 arbeitest, dann würde ich Dir sehr empfehlen, auf neuen Code umzusteigen.