Silkroad Packete (allgemein)

  • Hallo stagetwo,


    zwar bin ich dabei alle Packete erstmal zuverarbeiten, dabei komme ich bei solchen Packeten an meine grenze.


    Gibt es da Seiten wo die Packete schon beschriftet sind ?
    Oder irgendwelche tools die schon auslesen ob es Uint64 oder Uint16 ist.


    Danke schonmal für antworten :)



    Dabei sind die Packete alle direkt nacheinander.
    Habe es so ausgelesen, da ist aber irgendwo ein Fehler.



    So wird es dann ausgegeben:

  • Ich habe dir den source code vom public kBot.
    Daraus informiere ich mich wie Sie aufgebaut sind.
    Dort ist auch kein dword, desweiteren weiß ich nicht wie ich in C# ein dword auslesen soll.


    Auch andere Packete mit dword kann ich mit byte auslesen und es klappt (:

  • Ein dword besteht aus 4 Bytes. Bei diesem Packet bin ich mir allerdings nicht ganz sicher ob die 4 Bytes zusammen hängen oder nicht, aber sie sind noch vor der Typ ID. Du kannst es also mit ReadUInt32() oder mit ReadUInt8Array(4) auslesen. Die Typ ID wäre dann 74 07 00 00 ( = 1908 / CHAR_CH_MAN_BOGY).

  • Klappt nun wunderbar :)
    Ich lasse den Thread mal offen, habe bestimmt nachher noch paar mehr fragen.


  • Danke Dipointed.


    Neue Frage, zwar muss ich nun irgendwie ItemListen , SkillListen etc. in mein Programm patchen.
    In Zeile 70 uint invObjectTypeID = packet.ReadUInt32(); wird das Item an sich ausgelesen.
    Danach kommt die If abfrage, die eigentlich überorüfen soll ob das Item ein ITEM_EU oder ITEM_CH ist, sofern nicht kommt das Else und es wird nur UInt16 ausgelesen.


    Hier mal mein Code in C#


    In VB wurde dies so gemacht (VB kann ich garnicht, will lieber C# lernen)

    Code
    1. If gVar.fixdata.itemDataList(item.objectTypID).typname.StartsWith("ITEM_CH") Or _
    2. gVar.fixdata.itemDataList(item.objectTypID).typname.StartsWith("ITEM_EU") _
    3. Then


    Die item.csv schaut so aus:

    Code
    1. 0001;ITEM_ETC_GOLD_01;Gold Small;0;0;0
    2. 0002;ITEM_ETC_GOLD_02;Gold Medium;0;0;0
    3. 0003;ITEM_ETC_GOLD_03;Gold Large;0;0;0
    4. 0004;ITEM_ETC_HP_POTION_01;HP Recovery Herb ;21;50;0
    5. 0005;ITEM_ETC_HP_POTION_02;HP Recovery Potion (Small) ;39;50;0
    6. 0006;ITEM_ETC_HP_POTION_03;HP Recovery Potion (Medium) ;70;50;0
    7. 0007;ITEM_ETC_HP_POTION_04;HP Recovery Potion (Large) ;140;50;0
    8. 0008;ITEM_ETC_HP_POTION_05;HP Recovery Potion (X-Large);315;50;0
    9. 0009;ITEM_ETC_HP_SPOTION_01;HP Recovery Grain (Small);210;50;0
  • Die ganzen Textdateien zu den Items, Skills, Npc's, etc. findest du in der Media.pk2. Die ID's sind in den ...data_x.txt und die Namen dazu in textdata_object.txt und textdata_equip&skill.txt. Ich habe mir dafür ein Programm gemacht, dass die Sachen die ich gebraucht habe in eine Textdatei schreibt. Wenn du willst, kann ich die Programme hochladen.

  • Ich habe schon die sachen schon in listen.
    natürlich alles bis 140


    Skills

    Code
    1. 0000;Nothing;Nothing;0;0;0;0;0;0;0;0;0;0;0;0;0;0
    2. 0001;SKILL_PUNCH_01;SKILL_PUNCH_01;0;0;0;1500;1500;5;172;0;1;0;2;1;1;0
    3. 0002;SKILL_CH_SWORD_BASE_01;SKILL_CH_SWORD_BASE_01;0;0;0;1200;1200;5;173;0;1;257;2;1;1;0
    4. 0003;SKILL_CH_SWORD_SMASH_A_01;Strike n' Smash;5;0;411;1022;3000;5;174;0;1;257;2;1;1;19
    5. 0004;SKILL_CH_SWORD_SMASH_B_01;Stab n' Smash;27;0;500;1100;3000;5;175;174;1;257;2;1;1;91
    6. 0005;SKILL_CH_SWORD_SMASH_C_01;Crosswise Smash ;49;0;657;500;3000;5;176;175;1;257;2;1;1;290


    Mobs

    Code
    1. 0000;NULL;Empty;0;1;0
    2. 0773;CHAR_CH_MAN_ADVENTURER;CHAR_CH_MAN_ADVENTURER;0;1;0
    3. 0774;CHAR_CH_MAN_BOGY;CHAR_CH_MAN_BOGY;0;1;0
    4. 0775;CHAR_CH_MAN_FIGHTER;CHAR_CH_MAN_FIGHTER;0;1;0
    5. 0776;CHAR_CH_MAN_MERCHANT;CHAR_CH_MAN_MERCHANT;0;1;0
    6. 0777;CHAR_CH_MAN_MONK;CHAR_CH_MAN_MONK;0;1;0


    Leveldata

    Code
    1. 1;118;1;24
    2. 2;470;1;47
    3. 3;1058;1;71
    4. 4;1880;2;94
    5. 5;2938;2;118
    6. 6;5640;4;141
    7. 7;9048;5;165
    8. 8;13160;6;188


    Items

    Code
    1. 0001;ITEM_ETC_GOLD_01;Gold Small;0;0;0
    2. 0002;ITEM_ETC_GOLD_02;Gold Medium;0;0;0
    3. 0003;ITEM_ETC_GOLD_03;Gold Large;0;0;0
    4. 0004;ITEM_ETC_HP_POTION_01;HP Recovery Herb ;21;50;0
    5. 0005;ITEM_ETC_HP_POTION_02;HP Recovery Potion (Small) ;39;50;0


    Bluestats


    Ich müsste nun wissen, wie ich mit einer C# funktion prüfen kann ob es ein ITEM_EU_ ; ITEM_CH_ oder was ganz anderes ist.

  • Achso, sind die Listen denn auch von dem Silkroad, für das du sie brauchst? Denn die sind manchmal etwas unterschiedlich.
    Naja, also ich hab es so gemacht, dass ich die Listen erst mal mit einem StreamReader geöffnet haben und dann mit StreamReader.ReadToEnd().Split('\n') in einem String Array gespeichert habe. Wenn du dann eine Item ID hast bei der überprüft werden soll, ob es ein ITEM_CH/EU ist, kann man in einer foreach Schleife jeden String nochmal mit ';' splitten und dann prüfen ob der erste Teil gleich deiner ID.ToString() ist.


    Oder du benutzt diese Funktionen die ich hier letztens irgendwo so ähnlich gefunden habe:


  • Das sieht doch nice aus, danke.
    Werde es nachher wenn ich am pc bin testen :)


    Send it from my iPod via tapatalk.


    ---
    Habe es nun so erstmal geregelt.

    Code
    1. var file = new StreamReader("Data/item.csv").ReadToEnd(); // big string
    2. string[] jedeZeile = file.Split(new char[] { '\n' }); // big array
    3. Meldung("" + jedeZeile[4]);


    Kann auch wunderbar jedeZeile[1] das erste Item auslesen.
    Sofern ich aber diese Funktion nehmen will, sagt er mir
    Der Name "jedeZeile" ist im aktuellen Kontext nicht vorhanden.

    Code
    1. string findObject(int objectID)
    2. {
    3. foreach (string s in jedeZeile) //itemData ist das String Array, das die Liste beinhaltet
    4. {
    5. if (s.Split(',')[0] == objectID.ToString())
    6. return s.Split(',')[1];
    7. }
    8. return "";
    9. }



    Update:
    Habe nun das oben hingeschrieben:

    Code
    1. static string jedeZeile;


    jetzt klappt es immer noch nicht.

    Zitat

    Eine Konvertierung vom Typ "char" in "string" ist nicht möglich.


    Habe gesehen, dass

    Code
    1. string[] jedeZeile = file.Split(new char[] { '\n' }); // big array


    new char[] enthält, aber wenn ich new string[] mache kommen 4neue fehler ^^.

  • Hm, ich glaube es liegt daran, dass du die Variable jedeZeile zwei mal deklariert hast und die eine Variable ein normaler string ist und kein Array.


    Also:

    Code
    1. static string[] jedeZeile;


    Und dann nicht vergessen das "string[]" vor der Zuweisung weg zu machen.