[[http://www.siedler-games.de|{{:sg-link.jpg|}}]]
=====Briefings mit mehrfacher Auswahlmöglichkeit ( Multiple Choice )=====
[[http://www.siedler-portal.de/vb3/member.php?u=2109|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 [[http://www.siedler-portal.de/vb3/showpost.php?p=26815&postcount=3|hier]] ! Dort kann man auch noch die alte Schreibweise anhand des Original-Codes von Ritter Lanzelot ansehen. \\\\
Die Beispielmap mit neuer Schreibweise gibt es {{utilmaps:schachtelbriefing.7z|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!
----
[[index|Zur Tutorial-Übersicht]]
Siehe auch
* [[reference:briefing]]
* [[normale briefings]]
* [[briefings mit auswahlmöglichkeit]]