[jTool] Alle Befehle auslesen
Hallo,
ich veröffentliche hiermit ein kleines aber effizientes Tool, welches alle verwendbaren Befehle aus einem Filterscript bzw. einem Gamemode auslesen und ausgeben kann, das spart durchaus mehrere Stunden Sucharbeit im Code. Die Idee stammt aus diesem Thread: Frage zu OCMD
Verzichtserklärung:
Der Code wird veröffentlicht "wie er ist". Es wird dringendst empfohlen vor Benutzung ein Backup der Serverfiles zu machen. Für Schäden jeglicher Art übernehme ich keine Haftung, die Benutzung erfolgt auf eigene Verantwortung.
Der Code darf jederzeit von jedem verändert werden, solange die Namensnennung nicht aus dem Code entfernt wird.
Der Code darf nicht unter eigenem Name veröffentlicht werden, weder frei noch kommerziell.
Vorführung
Das Tool ist nicht mehr als eine kleine ausführbare Datei bzw. ein Visual Basic Code (.vbs) um es beim Namen zu nennen. Im richtigen Verzeichnis abgelegt und gestartet macht der Code in Sekundenschnelle die Arbeit für die man selbst mehrere Stunden bräuchte.
Anleitung
Die folgenden Schritte sollen zeigen wie der Code verwendet werden kann, um die Befehle aus der jeweiligen .pwn Datei auszulesen.
Ich weise nochmals darauf hin, vor Benutzung ein Backup des Servers, bzw. der Dateien darin, anzulegen. Der Code wurde nach bestem Wissen und Gewissen getestet, dennoch können unvorhergesehene Ereignisse (z.B. Stromausfall) möglicherweise zu Fehlern führen. Ebenfalls weise ich nochmals darauf hin, dass die Benutzung auf eigene Gefahr geschieht.
1. Code herunterladen
Um den Code auf den Rechner zu bekommen gibt es zwei Möglichkeiten:
- Die erste und einfachste Variante ist der direkte Download. Im Anhang befindet sich ein ZIP-Ordner der die ausführbare Datei enthält.
1) ZIP Ordner auf den Windows-PC herunterladen
2) Datei entpacken - Die zweite Variante ist die manuelle Erstellung der Datei:
1) Kopiere folgenden Quellcode:C
Alles anzeigen'-------------------------------------------------------------------------' ' ' ' [jTool] - Alle Befehle auslesen ' ' j_cmdsAusgeben.vbs ' ' ' ' Version 1.1 - 11.12.2014 ' ' ' ' © Jeffry ' ' ' '-------------------------------------------------------------------------' Set fs = CreateObject("Scripting.FileSystemObject") pfad = fs.GetParentFolderName(Wscript.ScriptFullName) If(fs.FileExists(pfad & "\AlleBefehle.txt")) Then Set wFile = fs.OpenTextFile(pfad & "\AlleBefehle.txt", 8) wFile.WriteLine "" wFile.WriteLine "" Else Set wFile = fs.CreateTextFile(pfad & "\AlleBefehle.txt", True) End If wFile.WriteLine "----" & CStr(Now) & "----" cmds = 0 Set sDir = fs.getfolder(pfad) For Each file In sDir.Files If(LCase(Right(file.path, 4)) = ".pwn") Then Set rFile = fs.OpenTextFile(file.path, 1) blockcomment = false Do While rFile.AtEndOfStream <> true str = "" str = rFile.ReadLine If(InStr(str, "*/") And blockcomment = true) Then blockcomment = false If(blockcomment = false) Then comment = InStr(str, "//") bcomment = InStr(str, "/*") ccomment = InStr(str, "*/") If(bcomment <> 0 And ccomment = 0) Then comment = bcomment tmp = InStr(str, "dcmd_") If(tmp And (comment > tmp Or comment = 0) And (ccomment < tmp Or bcomment > tmp) And (bcomment > tmp Or bcomment = 0)) Then If(InStr(tmp, str, "),") = 0 And InStr(tmp, str, ");") = 0 And InStr(str, "#define") = 0) Then tmpstr = Mid(str, tmp+5, InStr(tmp, str, "(")-(tmp+5)) wFile.WriteLine "/" & tmpstr cmds = cmds + 1 End If End If tmp = InStr(str, "ocmd:") If(tmp And (comment > tmp Or comment = 0) And (ccomment < tmp Or bcomment > tmp) And (bcomment > tmp Or bcomment = 0)) Then tmpstr = Mid(str, tmp+5, InStr(tmp, str, "(")-(tmp+5)) wFile.WriteLine "/" & tmpstr cmds = cmds + 1 End If tmp = InStr(str, "ocmd@") If(tmp And InStr(tmp+1, str, ":") = (tmp+6)) Then again = true start = InStr(tmp+1, str, ":") Do While again <> false again = false If(tmp And (comment > tmp Or comment = 0) And (ccomment < tmp Or bcomment > tmp) And (bcomment > tmp Or bcomment = 0)) Then If(start And InStr(start+1, str, ",") < InStr(start+1, str, "(")) Then tmpstr = Mid(str, start+1, InStr(start+1, str, ",")-(start+1)) wFile.WriteLine "/" & tmpstr cmds = cmds + 1 again = true Else If(start) Then tmpstr = Mid(str, start+1, InStr(start+1, str, "(")-(start+1)) wFile.WriteLine "/" & tmpstr cmds = cmds + 1 End If End If End If start = InStr(start+1, str, ",") Loop End If tmp = InStr(str, "YCMD:") If(tmp And (comment > tmp Or comment = 0) And (ccomment < tmp Or bcomment > tmp) And (bcomment > tmp Or bcomment = 0)) Then tmpstr = Mid(str, tmp+5, InStr(tmp, str, "(")-(tmp+5)) wFile.WriteLine "/" & tmpstr cmds = cmds + 1 End If if(tmp = 0) Then tmp = InStr(str, "CMD:") Else tmp = 0 End If If(tmp And (comment > tmp Or comment = 0) And (ccomment < tmp Or bcomment > tmp) And (bcomment > tmp Or bcomment = 0)) Then tmpstr = Mid(str, tmp+4, InStr(tmp, str, "(")-(tmp+4)) wFile.WriteLine "/" & tmpstr cmds = cmds + 1 End If tmp = 0 again = true Do While again <> false tmp = InStr(tmp+1, str, "strcmp(cmd") If(tmp) Then start = InStr(tmp, str, """") again = false If(tmp And (comment > tmp Or comment = 0) And (ccomment < tmp Or bcomment > tmp) And (bcomment > tmp Or bcomment = 0)) Then If(InStr(tmp, str, "/") = (start+1)) Then tmpstr = Mid(str, start+2, InStr(start+1, str, """")-(start+2)) wFile.WriteLine "/" & tmpstr cmds = cmds + 1 again = true End If End If Loop tmp = 0 again = true Do While again <> false tmp = InStr(tmp+1, str, "strcmp(""/") If(tmp And InStr(tmp+1, str, "cmd")) Then start = InStr(tmp, str, """") again = false If(tmp And (comment > tmp Or comment = 0) And (ccomment < tmp Or bcomment > tmp) And (bcomment > tmp Or bcomment = 0)) Then If(InStr(tmp, str, "/") = (start+1)) Then tmpstr = Mid(str, start+2, InStr(start+1, str, """")-(start+2)) wFile.WriteLine "/" & tmpstr cmds = cmds + 1 again = true End If End If Loop If(InStr(str, "/*") And InStr(str, "*/") = 0 And blockcomment = false) Then blockcomment = true End If Loop rFile.Close() End If Next wFile.close() If(cmds > 0) Then MsgBox "Es wurden " & cmds & " Befehle gefunden und gespeichert." Else MsgBox "Es wurden keine Befehle gefunden." End If
2) Erstelle eine leere Textdatei (.txt) und öffne diese mit einem Editor.
3) Füge den kopierten Code ein.
4) Speichere die Datei mit "Speichern unter..." als "j_cmdsAuslesen.vbs"
2. Code ausführen
Der Code durchsucht das gesamte Verzeichnis (den gesamten Ordner) in dem die Datei liegt. Die "j_cmdsAuslesen.vbs" muss nun in das entsprechende Verzeichnis gelegt werden.
1) Verschiebe die Datei in den "gamemodes" Ordner deines Servers wenn Du die Befehle aus Deinem Gamemode auslesen willst, in den "filterscripts" Ordner, wenn Du die Befehle aus allen Filterscripts auslesen willst.
2) Klicke doppelt auf die Datei "j_cmdsAuslesen.vbs" und warte. Je nach Größe der pwn-Codes und Prozessorgeschwindigkeit kann der Vorgang einige Minuten dauern.
3) Sobald der Prozess zu Ende ist, bekommst Du eine Ergebnismeldung.
3. Ergebnis ansehen
In dem Verzeichnis in welchem die "j_cmdsAuslesen.vbs" Datei liegt wurde eine Textdatei erstellt, die alle Befehle beinhaltet, die gefunden worden sind.
1) Öffne die Textdatei mit einem Editor.
2) Nun siehst Du alle Befehle, die gefunden worden sind.
Kompatibilität
In der aktuellen Version (v1.1) werden folgende Command-Prozessoren erkannt und ausgegeben:
- strcmp [strcmp]
- dcmd [dcmd_]
- ocmd [ocmd:]
- ycmd [YCMD:]
- zcmd [CMD:]
Sollten weitere Command-Prozessoren gewünscht sein, können diese mir gerne bekannt gegeben werden, diese können dann in einer neueren Veröffentlichung aufgenommen werden.
Fragen/Probleme/Anregungen/Rückmeldungen
Bei Fragen und Problemen jeglicher Art bitte ich um die Benutzung der "Antworten" Funktion. Sollte ich binnen 48 Stunden nicht geantwortet haben, kann mir gerne eine Private Nachricht (PN) geschickt werden.
Für Anregungen betreffend Vorschlägen oder Verbesserungen bin ich jederzeit offen. Ich bitte darum, diese ebenfalls über die "Antworten" Funktion zu posten.
Über Rückmeldungen würde ich mich freuen.
Changelog
- 11.09.2014: [v1.0] Erste Veröffentlichung
- 14.09.2014: [v1.0.1] Bug behoben: Der define von dcmd wurde als Befehl erkannt.
- 11.12.2014: [v1.1] ocmd wird nun auch mit mehreren Befehlen erkannt & strcmp wird nun auch in umgekehrter Reihenfolge erkannt.
- 18.04.2015: [v1.1] Tippfehler im Thread behoben.
- 22.06.2015: [v1.1] Download-Bilder repariert
- 08.11.2015: [v1.1] Code-Formatierung an WBB4 angepasst
Download
Viel Spaß mit dem Tool, ich hoffe es erspart dem einen oder anderen etwas Zeit.
Beste Grüße,
Jeffry