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!


Zur Tutorial-Übersicht

Siehe auch