Dann muss aber die pk2 Datei auch jedes mal neu geparsed werden, sonst hast du ja auch die alten Dateien. Oder läuft das bei deinem pk2Reader anders? (Hab die Source nicht gesehen)
-
-
-
Es ging eigentlich eher darum, das man das Format der daten nicht ändern sollte. Es sind vlt. Daten beinhaltet die man nicht brauch aber wirklich groß sind die ja trotzdem nicht.
Das umwandeln ist halt einfach ein schritt mehr, der fehleranfällig ist. -
Dann muss aber die pk2 Datei auch jedes mal neu geparsed werden, sonst hast du ja auch die alten Dateien. Oder läuft das bei deinem pk2Reader anders? (Hab die Source nicht gesehen)
Jo klar, die pk2 kann sich ja durch ein update verändern. Die media.pk2 zu parsen dauert vllt eine sekunden. Mit schlechtem code in nur einem Thread. -
-
Bin nun dabei die Daten aus der pk2 auszulesen und in einer txt datei zuspeichern, nur er liest jeweils nur eine Zeile der itemdatas aus
-
Wie ließt du den kram denn aus?
So wie im pk2Reader-Thread?
-> http://www.stagetwo.eu/index.php?page=Thread&postID=1829167#post1829167Gruß
florian0 -
Wieso denn alles doppelt gemoppelt machen? Du kannst doch erstmal mit den pk2 Tools von Drew Benton die ganze .pk2 entpacken und dann mit den fertig entpackten Dateien arbeiten... wieso willst du sie unbedingt selber auslesen?
-
-
Weil ich Sie in mein Programm einbinde
Wie ließt du den kram denn aus?
So wie im pk2Reader-Thread?
-> http://www.stagetwo.eu/index.php?page=Thread…167#post1829167Gruß
florian0Code- pk2Reader reader = new pk2Reader(@"C:\Program Files\Spiele\SRO\styx\StyxClient\Media.pk2");
- string[] data = { "itemdata_5000" , "itemdata_10000" , "itemdata_15000" , "itemdata_20000" , "itemdata_25000" , "itemdata_30000" , "itemdata_35000" , "itemdata_40000" , "itemdata_45000" };
- string[] data2 = { "textdata_equip&skill", "textdata_object" };
- for (int a = 0; a < 9; a++)
- {
- byte[] chardata = reader.getFile(data[a] + ".txt");
- TextReader txtReader = new StreamReader(new MemoryStream(chardata));
- //Console.WriteLine(txtReader.ReadLine());
- StreamWriter s_Error = new StreamWriter("itemdata" + ".txt", false);
- //StreamWriter s_Error = new StreamWriter(data[a] + ".txt", false);
- s_Error.WriteLine(txtReader.ReadToEnd());
- s_Error.Close();
- }
- Console.WriteLine();
Nur weiß ich bis jetzt noch nicht, wie ich alles in eine Datei schreiben kann.
Wenn ich die itemdata.txt habe mit allen einträgen kommt die textdata dran.Nach der textdata & itemdata werde ich eine item.txt erstellen die den Aufbau der item.txt in den Post zuvor hat.
Hoffe das es dann diesmal klappt... -
Deswegen kannst du doch aber trotzdem Drew Bentons Libary benutzen... gibts doch sowohl als Konsolenanwendung als auch nur den Sourcecode, warum also das Rad neu erfinden? Ich meine ja nur...
-
Habe ja jetzt schon alle itemdatas, fehlt nur noch das Sie in eine datei kommen.
Will die txt datei klein halten daher mache ich mir eine eigene wo nur die Sachen drin stehen die ich brauche.
Like: Name,Pk2Name,Level,Race -
-
@shadowhunter Da die itemdata_XXXX bei jedem Server anders sein können. Wenn man jetzt zum Beispiel die itemdata_xxxx aus der pk2 von einem Server nimmt, kann ein anderer Server ein ganz anderes Item mit der selben ID haben. Und das könnte dazu führen dass man zum Beispiel die Characterdata Packete falsch parsed.
Will die txt datei klein halten daher mache ich mir eine eigene wo nur die Sachen drin stehen die ich brauche.
Code- byte[] data = Program.pk2reader.getFile(path);
- StreamReader reader = new StreamReader(new MemoryStream(data));
- while (!reader.EndOfStream)
- {
- string line = reader.ReadLine();
- string[] tmp = line.Split('\t');
- if (tmp.Length > 57)
- {
- itemData info = new itemData();
- info.id = uint.Parse(tmp[1]);
- info.resourceIdentificator = tmp[2];
- info.chineseName = tmp[3];
- info.resourceIdentificationPair = tmp[4];
- info.resourceIdentificationName = tmp[5];
- info.resourceIdentificationDesc = tmp[6];
- info.sellAble = int.Parse(tmp[7]);
- info.itemType = int.Parse(tmp[10]);
- info.type = int.Parse(tmp[11]);
- info.subType = int.Parse(tmp[12]);
- info.race = int.Parse(tmp[14]);
- info.itemBonus = int.Parse(tmp[15]);
- info.flags = int.Parse(tmp[19]);
- info.priceBuy = int.Parse(tmp[26]);
- info.priceSell = int.Parse(tmp[31]);
- info.stackingAmout = int.Parse(tmp[57]);
- info.ddjPath = tmp[54];
- itemInfo.Add(info);
- }
- }
EDIT: wenn zu dein Tool / Bot auf "allen" VSRO server funktionstüchtig haben willst kommst du überhaupt nicht drumrum die Media.pk2 zu parsen, da du Die DIVISIONINFO.txt und die GATEPORT.txt brauchst um überhaupt zu wissen wo du hin connecten sollst.
-
Danke euch allen erstmal.
Werde morgen weiter arbeiten.Dann auch wieder livestreamen.
Gesendet via GameBoy Color
// Update: Irgendwie schafft das Programm diese Funktion nicht.
In der textdataname(full).txt sind alle textdata's aus der Media.pk2 drin.
Nach der Funktion die ich aufrufe habe ich ein Console.WriteLine als breakpoint, diesen erreicht er aber nie.
Daher ist irgendwas an der Funktion falsch, frage mich aber grade was.
Bin schon bis zu den Klamotten aus der textdata mir breakpoints durch die funktion gejump, kein fehler gefunden.Code- class Textdata
- {
- private Dictionary<string, string> dTextDataName = new Dictionary<string, string>();
- public Textdata()
- {
- string sFilename = AppDomain.CurrentDomain.BaseDirectory + "textdataname(full).txt";
- StreamReader myFile = new StreamReader(sFilename, System.Text.Encoding.Default);
- string sContent = myFile.ReadToEnd();
- string[] sTextDataNameSingle = sContent.Split('\n');
- foreach (string sData1 in sTextDataNameSingle)
- {
- string[] tmpData = sData1.Split('\t');
- if (tmpData.Length > 4)
- {
- string Pk2Name = tmpData[1];
- if ((Pk2Name.Contains("SN_SKILL") ||
- Pk2Name.Contains("SN_MOB") ||
- Pk2Name.Contains("SN_ITEM") ||
- Pk2Name.Contains("SN_NPC") ||
- Pk2Name.Contains("SN_STORE") ||
- Pk2Name.Contains("SN_INS")
- ||
- Pk2Name.Contains("SN_COS")
- ||
- Pk2Name.Contains("SN_MOB")
- ||
- Pk2Name.Contains("SN_STRUCTURE")) && tmpData.Length > 4)
- {
- string Name = tmpData[8];
- if (Name.Length != 0)
- dTextDataName.Add(Pk2Name.Remove(0, 3), Name);
- }
- }
- }
- myFile.Close();
- }
- }
Bsp: textdataname(full).txt
-
bump, da ich immer noch keine "alten" Beiträge als "neu markieren" auswählen kann.
Habe einfach keine Checkbox, problem siehe oben -
-
Setz den bp einfach früher und step durch
-
//Update 13.September 2012 (14:45 Uhr)
Muss jetzt nur noch Avatare und Wöfle parsen dann ist CharData fertig.75% fertig gestellt beim AlchemyTool !
-
Wir wollen LiveCoding sehn, digga
-
-
Digga ich esse grade kuchen und gleich habe ich besuch.
Vll mach ich heute abend noch ein bisschenUnd die ƒucking CharData ist echt doof
Update 16:14 Uhr (14.9.12)
Neuer Screen !
Habe die Chardata mit den wölfen und avataren nach hinten verschoben, bin nun dabei das man allgemein Fusen kann -
Sind das WinForms oder WPF ?
Falls es wo steht sorry, aber hab grad keine Lust die Seiten zu lesen
Gruß
-
WPF ?
Eine winformGesendet via GameBoy Color
-
-
WPF = Windows Presentation Foundation.
Ist eine andere Form des GUI Designs. Der komplette GUI Code ist in XAML (ähnelt XML, da es darauf basiert).
WPF hat halt den Vorteil, dass es auch von der Hardwarebeschleunigun Gebrauch macht Natürlich noch andere, aber die haben mich meistens nie interessiertKuh :>
-
Update !
Muss nur noch paar kleinigkeiten fixen, dort stehe ich aber grade irgendwie auf dem Schlauch.