Hallo zusammen!
Ich stehe im Moment vor einer Wand und komme absolut nicht weiter. Es geht um eine *.wdb Datei die ich auslesen möchte diese enthält Informationen zu Gegenständen aus einem Spiel allerdings muss sie wohl erst umgewandelt werden.
Auf dieser Seite gibt es Informationen zu dieser Datei
http://wowdev.org/wiki/index.php/Itemcache.wdb
Ich habe die Datei auch mal an gehangen damit mir euch einen Überblick verschaffen könnt wie ich die Informationen die dort auf der Seite stehen herausbekommen könnte. Weiß echt nicht weiter! Danke schon mal für eure Antworten.
Hallo,
ich suche ja keine kompletten Quellcode ich suche nur einen Ansatz wie ich das Ganze angehen könnte. 🙂
MfG
Andre
Hallo Andre4tw,
ich meinte auch folgenden Satz aus [Hinweis] Wie poste ich richtig? Punkt 4:
Gebt uns andersherum auch nicht euren kompletten Quellcode und fragt wo der Fehler ist.
Sehe jetzt aber jetzt erst, dass es die Daten-Datei und nicht der Quellcode ist. Trotzdem läuft deine Frage im Prinzip auf das gleiche hinaus. Du gibst uns deine Aufgabe, damit wir sie lösen (und sei es nur vom Ansatz her). Es ist hier im Forum angesagt, möglichst konkrete Fragen zu stellen. Damit erhöhst du auch die Chance einer Antwort.
Außerdem hast du doch bestimmt schon einiges probiert. Du solltest schreiben was alles und an welcher Stelle du gegen die Wand gelaufen bist.
herbivore
Hi,
ich habe bis jetzt folgendes versucht um an die Daten zu kommen.
StreamReader Reader = new StreamReader("C:\\Programme\\World of Warcraft\\Cache\\WDB\\deDE\\itemcache.wdb");
System.Text.Encoding encoding = System.Text.Encoding.Default;
byte[] WDBByte = encoding.GetBytes(Reader.ReadToEnd());
foreach (byte WDBEntrie in WDBByte)
{
string WDBINFO = WDBEntrie.ToString();
}
Aber ich erhalte nur die Zahlen als String da ist das Problem da auch auf der im ersten Beitrag gelinkten Seite steht dass das Format ins byte Format gebracht ist und die Einträge als Uint32 und string angegeben sind habe ich so Versucht zu gucken ob ich Gegenstandsnamen aus der Datei herausbekomme aber wie gesagt sind es alles Zahlen. Und ich bekomme einfach nicht an die Daten habe es auch bereits mit Convert versucht leider auch ohne Ergebnis.
Hallo,
danke für die Antwort, leider hat mich dieser Artikel nicht weiter gebracht weil dort nur die Allgemeine Verwendung von Dateien beschrieben wird. Mein Problem scheint an der Kodierung zu liegen da ich ja nur unleserlichen Text bekomme wenn ich die Datei normal öffne.
StreamReader Reader = new StreamReader("C:\\Programme\\World of Warcraft\\Cache\\WDB\\deDE\\itemcache.wdb");
Mir fehlt jetzt der Ansatz die Ausgabe zu kodieren damit ich die Infos auch auswerten kann. Das speichern der Informationen in Arrays usw ist kein Problem, das Einzigste Problem liegt an der Kodierung da hab ich wirklich nichts gefunden ab schon ewig bei Google gesucht.
Danke schon mal für jeden Tipp bzw Hinweis!
Andre
Vielleicht hilft dire der System.Text-Namespace weiter.
http://msdn2.microsoft.com/de-de/library/system.text(vs.80).aspx
Hallo,
danke für die Antwort leider hat mich das Ganze auch nicht viel weiter gebracht 🙁
Ich habe folgendes versucht:
StreamReader Reader = new StreamReader("C:\\Programme\\World of Warcraft\\Cache\\WDB\\deDE\\itemcache.wdb");
char[] chars = Reader.ReadLine().ToCharArray();
// Encode characters using an Encoding object.
Encoding encoding = Encoding.UTF7;
// Encode complete array for comparison.
Byte[] allCharactersFromEncoding = encoding.GetBytes(chars);
char[] test = encoding.GetChars(allCharactersFromEncoding);
ShowArray(test);
Console.ReadLine();
Hier die ShowArray()-Funktion
public static void ShowArray(Array theArray)
{
foreach (Object o in theArray)
{
Console.Write("{0}", o);
}
Console.WriteLine("\n");
}
Leider bekomme ich auch so nur Fragezeichen und irgendwelche Symbole raus habe das ganze mal als Bild an gehangen um es zu veranschaulichen.
Wie man sieht kann man zwar teilweise den Namen des Gegenstandes lesen aber der Rest ist ja unleserlich.
Ich vermute einmal, das es auch nicht vorgesehen ist, einen lesbaren Text aus der Datei zu holen.
Falls es sich um die Sicherung eines Spielstand handelt, weren alle Gegenstände/Stellungen/Positionen kodiert sein.
Ein Breitschwert ist dann eben kein "Breitschwert" als String sondern der Eintrag 0x073f an der Stelle 0x1234 (Beispiel)
Da hilft nur Schrittweise Spielstände zu speichern und zu sehen, was sich jeweils ändert, um so ggf. den Code zu knacken.
ggf. kannst du ja auch Bytes/Bits ändern uns sehen, was im Spiel passiert.
Wenn du Glück hast, hat sich schon jemand anderes die Arbeit gemacht und du kannst den Aufbau der Daten ergoogeln ...
Mfg Hajoseb
**"Zufall ist das Pseudonym Gottes, wenn er nicht selbst unterschreiben will.” **
Anatole France
Hallo Andre4tw,
du musst die Datei binär lesen (mittels :rtfm: BinaryReader). Was du dann erhälst sind dann Bytes und kein fertiger Text.
Wie du die Bytes zu interpretieren hast steht ja auf dieser Seite http://wowdev.org/wiki/index.php/Itemcache.wdb .
Gruß ldr
Danke für eure Antworten.
Habe es jetzt folgendermaßen versucht:
string path = "C:\\Programme\\World of Warcraft\\Cache\\WDB\\deDE\\itemcache.wdb";
FileInfo fi = new FileInfo(path);
FileStream fs = new FileStream(path, FileMode.Open);
BinaryReader br = new BinaryReader(fs);
byte[] WDBData = br.ReadBytes(Convert.ToInt32(fi.Length));
Und habe versucht die Einträge so zu interpretieren
Convert.ToChar(WDBData[0]);
Wenn ich allerdings folgendes mache:
Convert.ToUInt32(WDBData[4]);
Erhalte ich immer ganz andere Zahlen als aus der Datei. Und das andere Problem ist ich bekomme ja pro Convert-Eintrag nur einen Buchstaben und Gegenstandsnamen aus dem Spiel sind ja nicht immer Gleichlang wie könnte ich herausfinden wie lang diese sind?
Und interpretiere ich überhaupt richtig? Weil ich hab keine Ahnung vom interpretieren das mit dem Convert ist mir so eingefallen.
Gruß,
Andre
Hallo Andre4tw,
ReadIn32 oder BitConverter
herbivore
Ich rate eher zum C# Grundlagenbuch.
Das Format ist ja unter dem o.a. Link exakt definiert. Wenn man es dann nicht auslesen kann wuerde ich eben erst zu einem generellen Tutorial raten.
Nichts fuer ungut.
Pound for pound, plutonium is about as toxic as caffeine when eaten.
Hallo,
danke für die Hilfe!
Ich habe es jetzt soweit hinbekommen bis auf ein kleines Problem.
Und zwar lese ich die Gegenstandsnamen folgendermaßen aus:
Console.Write(br.ReadChar());
Console.Write(br.ReadChar());
Console.Write(br.ReadChar());
Console.Write(br.ReadChar());
Console.Write(br.ReadChar());
Halt für jeden Buchstaben eine Zeile aber die Namen sind ja nicht alle gleich lang. Gibt es da irgendwelche Möglichkeiten zu prüfen wie lang das Wort ist oder zu prüfen ob das nächste Byte ein Char ist?
Gruß,
Andre
Hallo Andre4tw,
dafür gibt es keine allgemeine Regel. An einem byte kann man natürlich so nicht sehen, wie es zu interpretieren ist. Es muss aber in deiner Beschreibung des Formats stehen, woran man erkennen kann, wann ein String zu Ende ist.
herbivore
Hallo,
sorry war mein Fehler hab in der Konsole nicht gesehen das hinter dem Namen ein Leerzeichen ist damit hat sich das Problem erledigt habe es jetzt so gelöst.
while (true)
{
if (br.PeekChar() == 0)
break;
else
Console.Write(br.ReadChar());
}
Console.Write(br.ReadChar());
Nochmal ein großes DANKE für eure Hilfe ich hoffe es klappt jetzt alles Weitere ohne Probleme.
Gruß,
Andre
Schoen das es geht.
Das ist nur kein Leerzeichen (das waere eine 32dec/20hex als Wert) sondern ein NUL.
Das steht uebrigens auch genau so in der Dokumentation zu der Datei:
The strings are null-byte terminated.
Pound for pound, plutonium is about as toxic as caffeine when eaten.
Hallo,
oh da muss ich zugeben den Satz hab ich ganz übersehen X(
Notiz an mich: Nächstes mal besser lesen 😁
Was ich dir noch empfehlen kann. Such dir doch den von Telo das Addon Lootlink raus.
Im Quellcode müßte ja enthalten sein wie die Struktur der itemcache.wdb ist.
Ansonsten wäre es interessant wozu du das machst, da es ja eigentlich genug Schnittstellen zur WoWApi gibt und LUA da der einfachere Weg ist.
Gruß Cookiie
"Hail to the King, Baby!"
Original von Cookiie
Im Quellcode müßte ja enthalten sein wie die Struktur der itemcache.wdb ist.
Aehm.. Und was ist mit dem Link auf die detaillierte Beschreibung des Formats, der zweimal oder mehr hier im Thread gepostet wurde? Da steht eigentlich alles nuetzliche drin..
Pound for pound, plutonium is about as toxic as caffeine when eaten.
Original von Cookiie
Was ich dir noch empfehlen kann. Such dir doch den von Telo das Addon Lootlink raus.
Im Quellcode müßte ja enthalten sein wie die Struktur der itemcache.wdb ist.
Ansonsten wäre es interessant wozu du das machst, da es ja eigentlich genug Schnittstellen zur WoWApi gibt und LUA da der einfachere Weg ist.Gruß Cookiie
Hi,
ja mit Lua lassen sich aber nicht so detaillierte Informationen über Gegenstände rausholen wie aus dieser Datei.
Ich programmier im Moment für meine Gilde eine Profiler Seite auf der die Charakter Informationen sichtbar sind. Und über Lua hol ich mir nur die Charakterdaten da es da keine Möglichkeit gibt so viele Informationen über Gegenstände einzuholen 😉
Gruß,
Andre
Hi,
also unser Gildenmeister hat die Gilden-HP jetzt auch erneuert und nutzt für die Charakterdarstellung die Daten die das Arsenal von Blizz bietet. Dazu speichert er die Daten lokal und aktuallisiert sie täglich. So sieht das beispielsweise im Arsenal aus, falls du dir das noch nicht angesehen hast.
Wenn du natürlich detailiertere Daten willst, musste dir das wohl wirklich selber schreiben. Ist jetzt halt so ne Sache, muss ich wirklich wissen wieviele Verbände der Char in seinen Taschen hat usw. Aber das ist ne Sache die du entscheiden musst.
Gruß Curatio
"Hail to the King, Baby!"
Hi,
das Arsenal kenne ich aber ich hab ja schon einen Upload-Client geschrieben, nur hatten wir bisher keine Item Daten auf unserer Seite nur die grundlegenden Charakter Daten wie Stufe, Volk usw.
Wir wollen uns halt jetzt was ausweiten 😉
Und für mich ist es einfach etwas Übung werde vielleicht auch noch Quest- und NPC-Daten speichern und ne richtige Datenbank machen. Ist ja alles Übung 😉
Gruß,
Andre
Dem gibt es nichts hinzuzufügen 🙂.
Wollte dir ja auch nur Hilfe geben, falls du dir nicht unnötig Arbeit machen willst.
Hogger down!!!111Elf
Cookiie
"Hail to the King, Baby!"