Hallo,
es liegt folgendes problem vor.
ich habe einen server für ein spiel,
den ich per batch datei starte, damit ich ihm mehr ram zuweisen kann.
=> ein cmd fenster öffnet sich und bleibt offen
gibt man ingame einen befehl per chat ein,
so wird dieser nicht nur im ingame chat angezeigt, sondern auch im cmd fenster.
dort steht dann z.b. /give SpielerName ItemID
nun möchte ich dauerhaft das cmd fenster auslesen und abfragen ob ein bestimmter befehl ausgeführt wurde,
damit ich bestimmte befehle sperren kann.
wird z.b. ein bestimmter befehl eingegeben so soll in das cmd fenster "/kick SpielerName" geschrieben werden,
um den spieler zu kicken.
ich weiß, dass man abfangen kann was cmd zurückgibt wenn man beispielsweise ipconfig eingibt,
wie geht es jedoch in diesem fall?
CMD + Autoit
-
- [ gelöst ]
-
Nathax -
26. Januar 2011 um 13:57 -
Geschlossen -
Erledigt
-
-
[autoit]
StdoutRead
[/autoit]
StderrRead -
Der befehl kommt mir von Minecraft bekannt vor.
Wenn es sich um Minecraft handel kannst du auch einfach die Items verbieten -
Ja, es ist Minecraft
aber wie soll ich die Items verbieten?
Habe einen Hamachi Server.Und was muss ich jetzt als erster Paramater bei Run reinschreiben, wenn ich eine Batch-Datei
Inhalt: ( java -Xmx2048M -Xms2048M -jar minecraft_server.jar )
starten will -
@echo off
java -Xms1024M -Xmx1024M -jar minecraft_server.jar nogui
pauseUnd einfach eine datei machen server.PROPERTIES (PROPERTIES-Datei) die ungefähr so ausschaut
Code
Alles anzeigen#Fri Jan 21 20:27:48 CET 2011 plugins= reservelist-txt-location=reservelist.txt server-name=Name spawn-protection-size=16 admintxtlocation=users.txt disalloweditems=46,52,51 natural-animals=Sheep,Pig,Chicken,Cow whitelist.txt-location=whitelist.txt enable-health=true itemstxtlocation=items.txt natural-spawn-rate=2 spawn-monsters=true itemspawnblacklist=46,52,51 pvp=true data-source=flatfile max-players=8 server-port=25535 logging=false homelocation=homes.txt server-ip= natural-monsters=Spider,Zombie,Skeleton,Creeper level-name=world alloweditems= hellworld=false spawn-animals=true whitelist=false show-unknown-command=false online-mode=false auto-heal=default group-txt-location=groups.txt
-
Schon Klar mit der Properties File kenn ich mich aus, allerdings
meine ich dies schonmal getestet zu haben.
Ich versuchs nochmal.
Edit:
Hast du nen Hamachi Server? -
Hast du nen Hamchi Server??
-
Nein einen Server der monatlich kostet
-
Ja, bei so einem Server geht das, ist ja ein root Server.
Bei Hamachi Servern gehen nur bestimme Properties Befehle.
Naja ich kanns ja mal mit Autoit versuchen.Edit:
So habe jetzt etwas mit StdoutRead() herumgespielt.
Beim Zweiten mal der While-Schleife gibt er die erste Zeile zurück,
danach hört er auf weil error = 1 ist. aber wieso kann er die zeilen danach nicht einlesen? -
aber wieso kann er die zeilen danach nicht einlesen?
Er setzt nur @error wenn der Prozess sich geschlossen hat. -
Wieso schließt sich denn der Prozess,
wenn man ihn startet, aber nicht beendet? -
Ok, dann erneuer ich jetzt die Frage:
Wie verhindere ich, dass sich der Prozess schließt
und wie kann ich die darauf folgenden Zeilen einlesen,
ohne dass eine Fehlermeldung ausgegeben wird??? -
ok, das auslesen klappt soweit jedoch kommt der fehler, dass er eine datei nicht finden kann, die in der bat gestartet wird.
starte ich die bat jedoch manuell wird die datei gestartet -
Zeig doch mal dein Code , vll kann ich dir dann weiter helfen
Der Code steht nicht in deinen Sätzen xD -
Meine Vermutung: Die .bat liegt nicht im Skriptverzeichnis, der Aufruf der zu startenden Datei in der Bat enthält nicht den kompletten Pfad -> es wird das aktuelle Arbeitsverzeichnis verwendet, was jedoch nicht das Verzeichnis der .bat ist. Abhilfe schafft
[autoit]EnvSet()
[/autoit] -
wie genau soll ich den diesen befehl anwenden,
[autoit]
und noch was: die .bat, die .jar ,die die .bat startet und das autoit-skript liegen im selben ordner.
und hier der quellcode#include <Constants.au3>
[/autoit][autoit][/autoit][autoit]Local $foo = Run("C:\Users\Nathan\Desktop\Minecraft\Run.bat", "C:\Users\Nathan\Desktop\Minecraft\", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
[/autoit][autoit][/autoit][autoit]
Local $line
While 1
$line = StdoutRead($foo)
If @error Then ExitLoop
MsgBox(0, "STDOUT read:", $line)
WendWhile 1
[/autoit][autoit][/autoit][autoit]
$line = StderrRead($foo)
If @error Then ExitLoop
MsgBox(0, "STDERR read:", $line)
WendMsgBox(0, "Debug", "Exiting...")
[/autoit]hier die .bat:
[autoit]java -Xmx2048M -Xms2048M -jar C:\Users\Nathan\Desktop\Minecraft\minecraft_server.jar
[/autoit] -
Es kann immer nur eine Endlosschleife laufen -.-
Evtl kannste dir das mal ansehn, da wird sowas erklärt:
http://www.youtube.com/watch?v=N04WrgHpb-0Spoiler anzeigen
[autoit]#include <Constants.au3>
[/autoit] [autoit][/autoit] [autoit]Local $foo = Run("C:\Users\Nathan\Desktop\Minecraft\Run.bat", "C:\Users\Nathan\Desktop\Minecraft\", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
[/autoit] [autoit][/autoit] [autoit]
Local $line
While 1
$line = StdoutRead($foo)
If @error Then ExitLoop
MsgBox(0, "STDOUT read:", $line)
$line = StderrRead($foo)
If @error Then ExitLoop
MsgBox(0, "STDERR read:", $line)
WendMsgBox(0, "Debug", "Exiting...")
[/autoit] -
Danke, jetzt funzts
Eins solltest du allerdings wissen:
ich bin kein autoit-anfänger..(Es kann immer nur eine Endlosschleife laufen -.-)
das war ein beispielskript aus der helpfile