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

Settlerman
#5
09.04.2016 15:04
Beiträge: 238

Ah! Danke!
lg
Settlerman

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!

Settlerman
#8
12.04.2016 14:32
Beiträge: 238

Danke
lg
Settlerman

Seiten: 1

SiteEngine v1.5.0 by nevermind, ©2005-2007
Design by SpiderFive (www.siedler-games.de) - English translation by juja

Impressum