Author: EnsignFoaly
Last changed: 28.05.2012 15:08
Completion: Beta (half done)
Date of publication: bald...
User niveau: Good
Translate to english

Wichtig: Kein Szenario. Dies ist ein Clonk Entwicklertool.


ID Indiz

Das Indizierungstool für Clonk Objekte.

Download der Beta Version (0.2.1.1). Zur Verwendung wird das .Net Framework 3.5 bzw. unter Linux Mono 2.10.8 benötigt.

Bei Fehlern hier melden: Bugtracker


News:

V0.2.1.1: Temporärer Ordner von %temp%\ auf %temp%\ID_Indiz\ geändert. Vorteil: So werden beim Entpacken durch C4Group weniger Unterbrechungen verursacht.


V0.2.1.0: Aktueller Stand: Indizierung, Verwendung temprärer Ordner, Speicherung und Laden von Objektlisten, Suche, Check des Exit Codes von C4Group (Bei Fehlercode: Nachfrage zur Wiederholung)


V0.1.3.1: Jetzt kann man per Klick auf Registry-Check die C4Group Datei finden und die Schrift für IDs ist jetzt unproportional. Außerdem jetzt alles in Try-Catch Klauseln und Anzeige der Ergebnisanzahl.


Jeah V0.1.2.0! Jetzt läuft alles über Temporäre Ordner!


Juhu, die erste Verion (0.1) Hotfix (0.1.1.0) ist ferig! Download Here! WICHTIG: Die C4Group-Datei muss ausgewählt werden, ausgewählte C4D Archive werden (noch) NICHT in einen Temporären Ordner kopiert und NICHT wieder gepackt! Deshalb nur KOPIEN zum Indizieren verwenden. Speicherung noch nicht fertig.


Jetzt als neues Projekt auf CCF! Wir befinden uns noch in der Planungsphase, aber hoffenlich haben wir das Zeug in einiger Zeit im Kasten!


Idee:

Welcher Entwickler hat sich nicht schonmal gefragt: "Was ist nochmal die ID von ...?" oder ein fremdes Script angeschaut, und sich gefragt: "Zu welchem Objekt gehört diese ID?"

Meine Meinung: Damit muss Schluss sein! Wer hat denn Lust, alle verwendeten Objektordner mühevoll zu durchsuchen, um eine popelige ID rauszufinden?

Deshalb meine Idee: Ein Programm, dass Objektordner selbstständig indiziert und Suchmöglichkeiten bietet.


Screen:

Hier ein kleiner Screenshot aus Version 0.2.0.0: (Es wurde Hazard.c4d indiziert, die vorher erstellte Objektliste von Objects.c4d verwendet und nach 'Bomb' gesucht.)
Am Aussehen hat sich von 0.2.0.0 zu 0.2.1.1 nichts geändert.

-

Anleitung zur Benutzung der Beta Version:

  1. Pfad der C4Group Datei per '...' Button auswählen oder per Registry suchen lassen (keine Garantie ^^)
  2. Gepackte Objektordner per 'Objektordner hinzufügen' auswählen. / Objeklisten hinzufügen (im Auswahlfenster muss der Dateityp geändert werden).
  3. Nachdem alle ausgewählt sind auf 'Start' klicken. Es können sich mehrfach C4Group Fenster öffnen und schließen. Das Programm kann zeitweise nicht reagieren.
  4. Sobald im unteren Teil des Fensters eine Liste erscheint ist die Indizierung abgeschlossen. Alle Objekte sind nach ID sortiert.
  5. Zum Suchen in die Suchleiste einen Begriff eingeben und auf Suchen klicken (Auf Groß/Kleinschreibung achten.
    Zum Anzeigen aller Objekte Suchleiste leeren und auf Suchen klicken.

Technik:

Das Programm sollte ganz einfach die ausgewählten Objektordner in einen temporären Ordner zu kopieren, mit C4Group zu entpacken und dann die Defcores zu durchforsten und einzulesen.

Später sollte auch noch eine Speicherfunktion hinzukommen, damit das nicht bei jedem Programmstart durchgeführt werden muss (Bzw. eine Differenzierte Einlesung, für Pakete, die sich verändert haben).


Basieren sollte das natürlich auf einer gängigen Programmiersprache: (Habe mich jetzt für C# entschieden.)

  • Vorschlagen würde ich VB.Net oder C#, da ich mich mit beiden gut auskenne. Leider kann ich keine Datenbanken verwenden, kenne mich aber gut mir Dateien aus, und könnte einfache Listenspeicherung verwenden.
  • C und C++ muss ich leider ablehnen, da ich nix davon beherrsche.
  • Java wäre für mich auch nicht das Beste. Zwar kenne ich mich mit der Programmierstruktur und dem Grundlegenden aus, kann allerding User Interfaces nur für Android schreiben. Da müsste das jemand für mich übernehmen.

Unter der Haube:

Hab mir da schon einige Gedanken gemacht (sonst würd ich's nicht hier her stellen ;) ).


Indizierung: (jetzt mal allgemein formuliert)

void OrdnerEinlesen (string Path)

{

  if(HatUnterordner(Path))

    for(string Unterordner of AlleUnterordner(Path))

      OrdnerEinlesen(Unterordner);

  if(DateiExistiert(DefCore.txt))

  {

    FileStream f = new Filestream(DefCore.txt);

    Einlesen, Bla bla bla...

  }

}


Ja, ich hab absichtlich teilweise Relative Pfade verwendet, um es Übersichtlich zu halten.

Nun... So In etwa stelle ich mir das vor. Hoffe ich bekomme Rückmeldung, evtl. einige motivierte Tester und viele Abnehmer.

19.08.2012 19:56, EnsignAlx voted +, Influence 1
Die Idee ist gut, gefällt mir!
02.07.2012 11:47, CaptainMaddino voted o, Influence 1
Ich vote erst einmal o, da ich denn Sinn dieses Tools nicht ganz sehe.

Klar, es soll IDs herausfinden. Doch ich habe nie länger als ein paar Sekunden gebraucht, eine ID herauszufinden. Auch kenne ich mittlerweile viele auswendig.

Vlt. ändert sich mein Vote noch zu + wenn es fertig und wirklich gut zu gebrauchen ist. Aber erstmal ist mir die Idee nicht gut genug.
30.05.2012 14:41, Lieutenant Colonelconstantin voted +, Influence 1
Finde ich eine sehr gute Idee und hoffe, dass diese auch sehr bald umgesetzt wird.



Showing 1-10 comments out of 40

11.06.2012 12:08 from LieutenantxXxStormhunter20xXx  
Diese Projektseite mag unübersichtlich sein, aber es erfüllt ihren Zweck ^^
Ich teile constantins meinung^^

04.06.2012 14:15 from CaptainMaddino  
Die Projektseite ist ein bisschen unübersichtlich :/

04.06.2012 01:52 from Lieutenant ColonelKanibal  
Die Dinger kannst du wie ein gzip-Archiv in C# lesen:


String filename = "foo.c4d";
// Datei öffnen
System.IO.FileStream fs = new System.IO.FileStream(filename, System.IO.FileMode.Open, System.IO.FileAccess.Read);
// BinaryReader platzieren      
System.IO.BinaryReader br = new System.IO.BinaryReader(fs);

// FileSize?
long length = new System.IO.FileInfo(filename).Length;
// Datei in buffer einlesen
byte buffer[] = br.ReadBytes((Int32)length);

// aufräumen
fs.Close();
fs.Dispose();
br.Close();

// c4g-header magic!
MemScramble(buffer);

// GZipStream platzieren und einlesen
GZipStream gs = new GZipStream(new MemoryStream(buffer), CompressionMode.Decompress);
// GZipStream in MemoryStream kopieren
System.IO.MemoryStream ms = new System.IO.MemoryStream();
gs.CopyTo(ms);

// ms ist der MemoryStream zur entpackten c4group
// Die kannst du nun, entsprechend der Dokumentation, einlesen

// Beispiel:
byte[] bAuthor = new byte[32];
ms.Read(bAuthor, 40, 32);
System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
String author = enc.GetString(bAuthor);


(Syntax-Highlighting hier)
Aber Achtung - ungetesteter Code! Ich würde mir vorher eine Kopie der Gruppe anlegen.
Last change: 04.06.2012 01:55

04.06.2012 00:37 from CaptainDMan  
Kann bitte jemand ein Musterbeispiel für z.B. Stein einfügen?
also /script ...

01.06.2012 07:19 from EnsignFoaly  
Wenn ich das richtig Verstehe hab ich dann einen entschlüsselten Header? Und dann?
Ich kann höchstens noch das Inhaltsverzeichnis lesen... Ich lad mir mal den CR sourcecode runter und schau mir das an...
PS. Habs mir runtergeladen... Hab auch dieses MemScramble Dings gefunden und im Quellcode gibts jede Menge Methoden wie FileExtract, ExplodeDirectory und so...
aber ich weiß nicht genau was ich damit anfangen soll ;)
Muss ich das ganze Zeug in meinen Quellcode einfügen? Wie verwende ich das?
Last change: 01.06.2012 09:13

31.05.2012 23:07 from Lieutenant ColonelKanibal  
Wenn Du c4group selbst implementierst und die Gruppen in einen MemoryStream liest? Dürfte wesentlich performanter sein und erspart die diese nervigen temporären Dateien.

26.05.2012 15:34 from CCF TesterLuchs  
this braucht keine Klammern, das bewahrt auch vor der Idee, da was reinzuschreiben. Abgesehen davon ist this in den meisten Fällen optional.
Last change: 26.05.2012 15:35

26.05.2012 14:56 from CaptainDMan  
CreateObject(GetID(this()))

z.B. /script CreateObject(GetID(this(Feuerstein)))?

25.05.2012 02:29 from ColonelCmdr. Adler  

24.05.2012 22:54 from ColonelClonkGeist  
>Edit: Wie haste FLNT so geschrieben?
[tt]-Tag.

@ den Rest, den du geschrieben hast: Ernsthaft? Vielleicht solltest du das nochmal nachprüfen .
Last change: 24.05.2012 22:54