Texteingabe während des Spiels ausführen

» Siedler Map Source Forum » Siedler DEdK Script Forum » Texteingabe während des Spiels ausführen

Seiten: 1

Peter-FS
#1
17.05.2015 15:25
Beiträge: 1086

Texteingabe während des Spiels ausführen

Hat jemand eine Idee, wie ich eine Texteingabe während des Spiels ausführen kann. Dadurch könnte man im Testmodus Korrekturen vornehmen (Entity vergessen oder ähnliches), ohne die Map neu zu starten. Es ist einfach ärgerlich, wenn man nach z.B. 4 Stunden Test feststellt man hat eine Kleinigkeit vergessen oder einen Schreibfehler.

Hier ein einfaches Beispiel
Über ChatInput "AddGold(1000)" eingeben
und die Eingabe einer Function übergeben.

function(_input)
    --hier ausführen
    _input()--???
end


Ich bin sicher, irgend jemand hat eine Lösung!

____________________
Man muss nicht alles wissen, man muss nur wissen wo es steht!

Zedeg
#2
17.05.2015 15:54
Beiträge: 428

S5Hook.Eval(string luaCode) Parses luaCode and returns a function, can be used to build a internal debugger
- ex: myFunc = S5Hook.Eval("Message('Hello world')"
myFunc()

Dürfte wohl passen.

____________________
Journalisten erkundigen sich bei Wissenschaftlern meist nicht nach Grundlagen, sondern eher nach Ergebnissen und Folgerungen. Das erklärt womöglich auch, warum sich Forschungsberichte in den Medien so häufig als feststehende Erkenntnisse lesen, nicht aber als Ideen, Entdeckungen oder Indizien, um die es sich genau genommen in den meisten Fällen handelt. -Axel Bojowski

Fire_Bird
#3
17.05.2015 16:13
Beiträge: 719

Zitat von Peter-FS:

function(_input)
    --hier ausführen
    _input()--???
end




Ohne Argumente kannst du es so machen:

function(_input)
_G[_input]()
end



Mit Argumenten auch, du musst halt vorher den Eingabestring nach Klammern durchsuchen und den Parameter herausextrahieren.

MadShadow
#4
17.05.2015 17:12
Beiträge: 372

Das kann man ja alles machen, aber mittlerweile gibt es doch den Lua-Debugger. Wenn du dein Spiel damit startest, kannst du dir alle geladenen Skripte ansehen und über eine Commandozeile bequem Befehle eingeben.

Peter-FS
#5
17.05.2015 17:46
Beiträge: 1086

Danke,
werde den Lua-Debugger mal testen.

____________________
Man muss nicht alles wissen, man muss nur wissen wo es steht!

Peter-FS
#6
17.05.2015 18:38
Beiträge: 1086

Lua Debugger

Was mache ich falsch?
Habe den LuaDebugger gestartet und in der Commandozeilte AddGold(10000) eingegeben.
Ergebnis
> AddGold(10000)
Error : Game is busy!

____________________
Man muss nicht alles wissen, man muss nur wissen wo es steht!

Kantelo
#7
18.05.2015 01:44
Beiträge: 357

Hast du die neuste Version des Debuggers?

Ich hatte nämlich bei Version 5.2 dasselbe Problem, das ist aber mittlerweile mit Version 5.3 bei mir gelöst.

Peter-FS
#8
18.05.2015 06:05
Beiträge: 1086

Ne, hab mir Version 5.1 runter geladen.

____________________
Man muss nicht alles wissen, man muss nur wissen wo es steht!

Kantelo
#9
18.05.2015 09:21
Beiträge: 357

Dann versuch es mal mit Version 5.2, vielleicht klappt es ja damit. http://b0bby.tk/debugger.html
(Ich habe mich auch geirrt: bei 5.1 hat es nicht funktioniert, ich benutze 5.2)

Play4FuN
#10
20.05.2015 11:27
Beiträge: 704

Zitat von Fire_Bird:

Ohne Argumente kannst du es so machen:

function(_input)
_G[_input]()
end


Mit Argumenten auch, du musst halt vorher den Eingabestring nach Klammern durchsuchen und den Parameter herausextrahieren.


Habe ich probiert und funzt. auch. Zumindest mit meinem Skript kann ich zwar sowas wie "AddGold(100)" eingeben und der Spieler erhält den Betrag, jedoch klappt z.B. "StartRain(60)" nicht Es müsste aber doch sicher im _G-Table sein, es kommt auch keine Fehlermeldung - das Spiel ignoriert den Befehl einfach.

Hier mein Code:

Input.KeyBindDown(Keys.Enter, "OpenChat()", 2)

function OpenChat()
XGUIEng.ShowWidget(XGUIEng.GetWidgetID("ChatInput"),1)
XGUIEng.SetWidgetPosition(XGUIEng.GetWidgetID("ChatInput"),400,100)

	GameCallback_GUI_ChatStringInputDone = function (_M)

		s = string.find(_M, "%(")
		e = string.find(_M, "%)")
		par = string.sub(_M, s + 1 , e - 1)
		command = string.sub(_M, 1, s - 1)
		
		Message("(1) Execute command: "..command.." with parameter: "..par)
		_G[command](par)
		Message("(2) Execute command: "..command.." with parameter: "..par)
		
	end
end



____________________
LG Play4FuN

Siedler DEdK Mapping + Scripting Tutorials

Peter-FS
#11
21.05.2015 07:23
Beiträge: 1086

Hast du "StartRain(60)" schon mal mit dem Lua-Debugger probiert?

____________________
Man muss nicht alles wissen, man muss nur wissen wo es steht!

Play4FuN
#12
21.05.2015 19:46
Beiträge: 704

Ja, der Befehl selbst funzt ansonsten ... :/
Mit StartWinter passiert das selbe.

____________________
LG Play4FuN

Siedler DEdK Mapping + Scripting Tutorials

Seiten: 1

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

Impressum