Texteingabe
» Siedler Map Source Forum » Siedler DEdK Script Forum » Texteingabe
Seiten: 1
Settlerman
|
#1 09.04.2016 08:57 Beiträge: 238 |
Texteingabe
Hallo zusammen,
Hab jetzt in mehreren Maps gesehen, dass man jetzt um z.B. ein Tor zu öffnen, einen Code eingeben muss. Hab mich hier im Forum schon umgeschaut und hab auch im dedk script wiki nach geschaut. Beides aber ohne Erfolg. Weiß hier einer wie man das mit der Eingabe macht?
Oder (sollte es einen Eintrag im wiki geben) einen Link schicken?
lg
Settlerman
Fire_Bird
|
#2 09.04.2016 10:21 Beiträge: 719 |
Aus dem Multiplayer kennst du vielleicht den Chat. Dabei wird eine Zeile angezeigt, in die man seine Nachricht eintippen kann (im Spiel).
Dieses Widget wird in den Usermaps für Passwörter etc. verwendet, was relativ einfach geht.
Zuerst blendest du das Widget an entsprechender Stelle ein:
XGUIEng.ShowWidget("ChatInput",1)
Nun erscheint die Eingabezeile auf dem Bildschirm und der Spieler kann was eingeben. Diesen eingegebenen Text kannst du abfragen, indem du die Callback-Funktion von dieser Chatfunktion abfängst und überschreibst. Du brauchst die originale Funktion nicht sichern, da im Singleplayer ja sowieso nicht gechattet wird.
GameCallback_GUI_ChatStringInputDone = function(input) -- hier dann der weitere Code und die Abfrage end
Der eingegebene Text wird dann (hier) in der Variablen input gespeichert und du kannst ihn abfragen. (aber nur innerhalb dieser Funktion)
Soweit verstanden?
Settlerman
|
#3 09.04.2016 14:45 Beiträge: 238 |
Leider nicht.
Hab noch nie was mit GUI gemacht. Hab das
XGUIEng.ShowWidget("ChatInput",1)
jetzt in die briefing.function = finished rein gepackt und
das
GameCallback_GUI_ChatStringInputDone = function(input) end
nach dem briefing als normale Fuktion rein geschrieben.
Passiert aber ncihts.
lg
Settlerman
Fire_Bird
|
#4 09.04.2016 14:57 Beiträge: 719 |
In dem Fall musst du die überschriebene Funktion auch in deine finished-Funktion packen. Gleich nach XGUIEng.ShowWidget
Ludwig
|
#6 09.04.2016 15:04 Beiträge: 440 |
Na ganz so einfach ist das auch nicht. Die Abfrage gehört in ein Briefing oder Funktion.
Du solltest Dir mal ein Script ansehen wo so etwas vorkommt. Dabei lernt man immer am besten (z.B. bei Hilfe für Ari etwa ab Zeile 1623).
LG
Ludwig
Peter-FS
|
#7 11.04.2016 09:09 Beiträge: 1086 |
ChatInput
Für einen Anfänger ist das relativ schwer, deshalb hier mal ein einfaches Beispiel. Du startest das Ganze mit dem Briefing. Sobald du dich mit dem Hero oder einer anderen Entity dem Tor näherst, wird die Codeeingabe gestartet.
Im Code zu ändern.
- Der Name des Hero's, der das Tor öffnen soll (im Beispiel: "Name_deines_Hero" )
- evtl. der Name des Tores (im Beispiel: "tor1" )
Einfach mal ausprobieren und deinen Wünschen anpassen.
Viel Spaß damit
Peter
function Briefing_Tor() local briefing = {} local AP, ASP = AddPages(briefing); ASP("tor1","Mentor","Du musst den Code für das Schloss eingeben.", true) StartBriefing( briefing) briefing.finished = function() QuestTor1Id = GetQuestId() Logic.AddQuest(1, QuestTor1Id, "SUBQUEST_OPEN", "Code", "Um das Tor zu öffnen benötigst du den richtigen Code!",1) HeroAtTor1_Id = StartSimpleJob("HeroAtTor1") end end function HeroAtTor1() if IsNear(GetEntityId("Name_deines_Hero"),GetEntityId("tor1"),350) and _hero_was_at_tor1 == nil then _hero_was_at_tor1 = true Eingabe_code() elseif not IsNear(GetEntityId("Name_deines_Hero"),GetEntityId("tor1"),600) and _hero_was_at_tor1 == true then --wenn weg, Chat schliessen XGUIEng.ShowWidget( XGUIEng.GetWidgetID( "ChatInput" ), 0 ) _hero_was_at_tor1 = nil end end function Eingabe_code() if _falscheEingabe == nil then _falscheEingabe=0 end Message("Wie lautet der Code für das Schloss?") -- das nur optional, damit der Spieler nach z.B. 7 Falscheingaben die Lösung bekommt if _falscheEingabe == 2 then Message("Die erste Zahl ist 1XXX @cr Der erste Tip ist noch kostenlos.") elseif _falscheEingabe == 3 then Message("Die ersten zwei Zahlen lauten 12XX. @cr - Das kostet dich 1000 Taler!") AddGold(-1000) elseif _falscheEingabe == 5 then Message("Die ersten drei Zahlen lauten 123X. @cr Das kostet dich jetzt 3000 Taler!") AddGold(-3000) elseif _falscheEingabe == 7 then Message("Der Code lautet 1234, nicht aufgepasst? @cr Das kostet dich weitere 5000 Taler!") AddGold(-5000) end --^^^^^^^^^^^^^^^^^^^^ optional, bei 7 x falsch XGUIEng.ShowWidget( XGUIEng.GetWidgetID( "ChatInput" ), 1 ) GameCallback_GUI_ChatStringInputDone = function (_M) if _M == "1234" then--vergleich, ob die eingabe stimmt (1234 wäre in dem Fall der Code) Message("Der Code ist richtig, das Tor wird geöffnet") ReplaceEntity("tor1", Entities.XD_WallStraightGate)--hier das Tor öffnen EndJob(HeroAtTor1_Id)--SimpleJob beenden Logic.RemoveQuest(1, QuestTor1Id)-- quest löschen else Message("Deine Eingabe war falsch! @cr Geh ein paar Schritte zurück und probiere es erneut.") _falscheEingabe = _falscheEingabe+1 end end end
____________________
Man muss nicht alles wissen, man muss nur wissen wo es steht!
Seiten: 1