Zunächst muss betont werden, dass nur ein geringer Unterschied zwischen normalen Briefings und NPC-Briefings besteht. Da wir allerdings bei lokal definierten Variablen bleiben wollen (Savegame-Problematik) und keine Umwege bei den Entity-Positionen gehen wollen, ist es angebracht, keine richtigen Briefings in das Briefing-Table einzufügen.
Man kann leere Briefings als Briefings einfügen, die dann in ihrer finished-Funktion das richtige Briefing erstellen.
Beispiel:
function CreateNPCNeighbour() local briefing = { { --[[ eine leere Seite muss sein ]] } }; briefing.finished = function() --hier wird das richtige Briefing erstellt local briefing = {}; local AP = function(_page) table.insert(briefing, _page); return _page; end local page1 = AP{ title = "Nachbar", text = "Neu hier?", npc = { id = GetEntityId( "Neighbour" ), isObserved = true }, dialogCamera = true }; briefing.finished = function() ResolveBriefing(page1); end StartBriefing(briefing); end local npc = { name = "Neighbour", briefing = briefing }; CreateNPC(npc); end
NPCs ermöglichen das Erstellen einer Callback-Funktion. Diese hat den Vorteil, dass kein leeres Briefing erstellt werden muss. Das richtige Briefing wird dann in der Callback-Funktion erstellt.
function CreateNPCNeighbour() local callback = function() local briefing = {}; local AP = function(_page) table.insert(briefing, _page); return _page; end; local page1 = AP{ title = "Nachbar", text = "Neu hier?", npc = { id = GetEntityId( "Neighbour" ), isObserved = true }, dialogCamera = true }; briefing.finished = function() ResolveBriefing(page1); end StartBriefing(briefing); end; local npc = { name = "Neighbour", callback = callback }; CreateNPC(npc); end