Briefings mit mehrfacher Auswahlmöglichkeit ( Multiple Choice )
Tenji\\
Dies ist ein komplexeres Beispiel zur Multiple Choice.
Falls man dieses Thema zum ersten mal angeht, sollte man zuerst das Thema briefings mit auswahlmöglichkeit lesen! \\
Hier sind fünf Abfragen in einem Briefing. In 3 von der 5 Abfragen kann man das Briefing ohne Aktion verlassen,
das Briefing wird dann neu erzeugt, damit man den Npc später nochmals ansprechen kann und doch noch einen Helden bekommt. \\
Dieses Beispiel wurde von mir etwas verbessert und in die neue Schreibweise umgesetzt.
Einen Ablaufplan des Briefings gibt es hier ! Dort kann man auch noch die alte Schreibweise anhand des Original-Codes von Ritter Lanzelot ansehen. \\
Die Beispielmap mit neuer Schreibweise gibt es hier! \\
Dies ist das komplette Briefing:
function CreateBriefingKauf() -- Das lokale Briefing local briefing = {} -- AddPage Funktion local AP = function( _page ) table.insert( briefing, _page ); return _page; end -- Variable auf false setzen, um festzulegen, dass der Spieler genügend Resourcen hat: gvMission.nichtGenugResourcen = false --( false = hat genug [ wird bei Seite2 durch "OnFirstSelected" überprüft]) -- Seite 1 AP{ title = "Leonardo", text = "Ich grüße Euch, @cr mein Herr!", position = GetPosition("leo"), dialogCamera = true, } -- Seite 2 local choicePageHelp = AP{ -- Auswahlseite für die Auswertung merken mc = { -- Multiple Choice title = "Leonardo", text = "Ihr könnt Euch bei mir Unterstützung erkaufen, @cr allerdings ... @cr kostet Euch das eine Kleinigkeit!", firstText = "Hilfe annehmen", secondText = "Doch nicht", firstSelectedCallback = OnFirstSelected, -- ja -> Seite gemaess OnFirstSelected() secondSelected = 8, -- nein -> Seite 8 }, } --gvMission -- Seite 3 ( ist Gold und Eisen vorhanden ) local choicePage1 = AP{ -- Auswahlseite für die Auswertung merken mc = { -- Multiple Choice title = "Leonardo", text = "Bezahlt Ihr die 1000 Gold @cr oder.... @cr 2000 Eisen?", firstText = "1000 Gold", secondText = "2000 Eisen", firstSelected = 10, -- Heldenauswahl -> Seite 10 secondSelected = 10, -- Heldenauswahl -> Seite 10 }, } -- Seite 4 ( nur genug Gold ) local choicePage2 = AP{ -- Auswahlseite für die Auswertung merken mc = { -- Multiple Choice title = "Leonardo", text = "Ihr besitzt leider nicht genug Eisen, @cr aber ich gebe mich auch mit Gold zufrieden! @cr Wie entscheidet Ihr Euch?", firstText = "1000 Gold @cr bezahlen", secondText = "Nein danke, @cr ich warte noch", firstSelected = 10, -- Heldenauswahl -> Seite 10 secondSelected = 8, -- Doch nicht -> Seite 8 }, } -- Seite 5 ( nur genug Eisen ) local choicePage3 = AP{ -- Auswahlseite für die Auswertung merken mc = { -- Multiple Choice title = "Leonardo", text = "Ihr besitzt leider nicht genug Gold, @cr aber ich gebe mich auch mit Eisen zufrieden! @cr Wie entscheidet Ihr Euch?", firstText = "2000 Eisen @cr bezahlen", secondText = "Nein danke, @cr ich warte noch", firstSelected = 10, -- Heldenauswahl -> Seite 10 secondSelected = 8, -- Doch nicht -> Seite 8 }, } -- Seite 6 ( nix da ) AP{ title = "Leonardo", text = "Ihr solltet wieder kommen, wenn Ihr mich bezahlen könnt!", } -- Seite 7 AP() -- Nach jeder Seite, bei der das Briefing zu ende sein könnte muss mindestens eine "Leerseite" liegen. -- Seite 8 ( nein danke ) AP{ title = "Leonardo", text = "Also gut, dann eben nicht ...", } -- Seite 9 AP() -- Leerseite -- Seite 10 ( Held auswähen ) local choicePageHero = AP{ -- Auswahlseite für die Auswertung merken mc = { -- Multiple Choice title = "Leonardo", text = "Sehr gut! @cr @cr Welchen Helfer soll ich Euch schicken?", firstText = "Erec", secondText = "Pilgrim", firstSelected = 11, -- Erec -> Seite 11 secondSelected = 13, -- Pilgrim -> Seite 13 }, } -- Seite 11 ( Erec ) AP{ title = "Erec", text = "Ich grüße Euch, mein Freund!", } -- Seite 12 AP() -- Leerseite -- Seite 13 ( Pilgrim ) AP{ title = "Pilgrim", text = "Sehr gute Wahl, mein Herr!", } -- Hinter der letzten Seite muss natürlich keine Leerseite mehr sein - hier ist das Briefing je sowieso zu ende! -- Die finished Funktion: briefing.finished = function() -- Erste Abfrage Seite 2: Hilfe ja oder nein - nein gewählt if (GetSelectedBriefingMCButton( choicePageHelp ) == 2) or -- dritte Abfrage Seite 4: Gold oder Abbruch - Abbruch gewählt (GetSelectedBriefingMCButton( choicePage2 ) == 2) or -- vierte Abfrage Seite 5: Eisen oder Abbruch - Abbruch gewählt (GetSelectedBriefingMCButton( choicePage3 ) == 2) or -- keine Kohle und kein Eisen gvMission.nichtGenugResourcen then -- dann dieses Briefing nochmals erstellen CreateBriefingKauf() else -- zweite Abfrage Seite 3: Gold oder Eisen - Gold gewählt if GetSelectedBriefingMCButton( choicePage1 ) == 1 then AddGold(1,-1000) else -- oder Eisen gewählt AddIron(1,-2000) end -- dritte Abfrage Seite 4: Gold oder Abbruch - Gold gewählt if GetSelectedBriefingMCButton( choicePage2 ) == 1 then AddGold(1,-1000) end -- vierte Abfrage Seite 5: Eisen oder Abbruch - Eisen gewählt if GetSelectedBriefingMCButton( choicePage3 ) == 1 then AddIron(1,-2000) end -- fünfte Abfrage Seite 10: Erec oder Pilgrim - Erec gewählt if GetSelectedBriefingMCButton( choicePageHero ) == 1 then ChangePlayer ("erec",1); Move("pilgrim","npcVanishPos"); Move("leo","npcVanishPos"); else -- oder Pilgrim gewählt ChangePlayer ("pilgrim",1); Move("erec","npcVanishPos"); Move("leo","npcVanishPos"); end end end -- setup table for npc local npc = { name = "leo", briefing = briefing, } -- create npc CreateNPC( npc ) end
Da oben bei Seite 2 mit der Zeile
firstSelectedCallback = OnFirstSelected, -- ja -> Seite gemaess OnFirstSelected()
eine Funktion aufgerufen wird, muss diese auch in eurem Skript sein:
function OnFirstSelected() if ( GetGold(1) > 999 ) and ( GetIron(1) > 1999 ) then return 3; elseif ( GetGold(1) > 999 ) and ( GetIron(1) < 2000 ) then return 4; elseif ( GetGold(1) < 1000 ) and ( GetIron(1) > 1999 ) then return 5; else -- es ist wahr, dass der Spieler nicht genügend Resourcen hat (wird im gvMission-Table aktualisiert) gvMission.nichtGenugResourcen = true --( true = hat nicht genug [ wird in der Briefing-finished-funktion abgefragt]) return 6; -- die Sprungmarke für die Seite end end
Hier werden die Rohstoffbestände des Spielers abgefragt, um das Briefing bei Seite 2 auf die folgende Sprungseite zu verweisen. Wie man sieht, sind das entweder die Seite 3,4,5 oder 6.
Falls der Spieler von keiner der bieden Resourcen (Gold und Eisen) genügend zur Verfügung hat, wird die globale Variable „NichtGenugResourcen“ auf true gesetzt. Das sagt der finished-Funktion des Briefings dann, dass es erneut erstellt werden soll!\\
Zusätzlich benötigte Code: \\
Ihr solltet noch die ActivateBriefingsExpansion() Funktion von Old McDonald bei euch einfügen,
denn sonst werden die angeklickten Buttons gräulich „abgehackt“, was in einem Briefing mit mehreren Abfragen nicht besonders schön aussieht!
Siehe auch