fix

10/13/2010 19:41 stage66#16
ich kann das spiel aber nicht startetn brauche ja die exe :D^^
wer is so lieb und schick sie mir ? wer icq oder skype hat :D? pn me bitte bekomtm thx aufjeden fall :D
10/13/2010 19:42 tim66613#17
Quote:
Originally Posted by ℓσℓ View Post
Dankeschön aber für mich wäre es lieber es selbst zu fixxen.
Code:
void PythonNetworkStream::Initialize()
{
    STORM_STATIC_ASSERT(sizeof(TPacketSafeBoxItemSet) == 40);

    uint8_t* RecvSafeBoxSetPacketAddr = reinterpret_cast<uint8_t*>(0x41E530);

    DetourClassFunc(RecvSafeBoxSetPacketAddr, reinterpret_cast<const uint8_t*>(&RecvSafeBoxSetPacket_Hook), GetAsmInstrLength(RecvSafeBoxSetPacketAddr, 8));
}
Code:
char __stdcall PythonNetworkStream::RecvSafeBoxSetPacket_Hook(PythonNetworkStream* self)
{
    TPacketSafeBoxItemSet packet;
    if (!self->Recv(&packet, sizeof(TPacketSafeBoxItemSet)))
        return 0;

    metin2_vc_client::packet_item itemData;

    itemData.itemVnum = packet.m_itemVnum;
    itemData.itemCount = packet.m_itemCount;
    memcpy(itemData.itemMetinSockets, packet.m_itemMetinSockets, sizeof(uint32_t) * 3);
    memcpy(itemData.attributes, packet.m_itemAttributes, sizeof(metin2_vc_client::packet_item_attribute) * 7);

    // NOOOOO, assembly
    void (__stdcall* CPythonSafebox__SetItemData)(uint32_t slotIndex, const void* data) = (void (__stdcall* )(uint32_t, const void*))0x467500;
    const void* safeboxSingleton = *(void **)0x61C370;
    asm("movl %0, %%ecx" : : "m" (safeboxSingleton));
    CPythonSafebox__SetItemData(packet.m_itemIndex, &itemData);

    (reinterpret_cast<uint8_t*>(self))[1322] = 1; // Refresh Safebox
    return 1;
}
Der alte Code hätte auch funktioniert ...

Kleine Dokumentation:
packet_item ist der Name der struct im Metin2 Client (laut .map)
CPythonNetworkStream ist der Name der MainStream-Klasse im Client (Char- und World-Server)
CNetworkStream ist der Name der allgemeinen Socket-Klasse im Client (diese enthält auch den Encryption/Decryption Code).

Kind Regards Tim
10/13/2010 19:42 .Zander#18
nice!
Funktioniert es mit dem Modifiziertem 2010er Client der hier pub is ( von xIvan4ikx)?
mfg
Zander
10/13/2010 19:42 Perfection-#19
ja nur es geht wirklich habe es damit gepackt und ich kann es danach mit keinem anderen entpacker mehr entpacken und auch wen das cmd fenster aufgeht steht auch das es von Tim66613 ist
10/13/2010 19:44 SOD666#20
Quote:
Originally Posted by tim66613 View Post
Code:
void PythonNetworkStream::Initialize()
{
    STORM_STATIC_ASSERT(sizeof(TPacketSafeBoxItemSet) == 40);

    uint8_t* RecvSafeBoxSetPacketAddr = reinterpret_cast<uint8_t*>(0x41E530);

    DetourClassFunc(RecvSafeBoxSetPacketAddr, reinterpret_cast<const uint8_t*>(&RecvSafeBoxSetPacket_Hook), GetAsmInstrLength(RecvSafeBoxSetPacketAddr, 8));
}
Code:
char __stdcall PythonNetworkStream::RecvSafeBoxSetPacket_Hook(PythonNetworkStream* self)
{
    TPacketSafeBoxItemSet packet;
    if (!self->Recv(&packet, sizeof(TPacketSafeBoxItemSet)))
        return 0;

    metin2_vc_client::packet_item itemData;

    itemData.itemVnum = packet.m_itemVnum;
    itemData.itemCount = packet.m_itemCount;
    memcpy(itemData.itemMetinSockets, packet.m_itemMetinSockets, sizeof(uint32_t) * 3);
    memcpy(itemData.attributes, packet.m_itemAttributes, sizeof(metin2_vc_client::packet_item_attribute) * 7);

    // NOOOOO, assembly
    void (__stdcall* CPythonSafebox__SetItemData)(uint32_t slotIndex, const void* data) = (void (__stdcall* )(DWORD, const void*))0x467500;
    const void* safeboxSingleton = *(void **)0x61C370;
    asm("movl %0, %%ecx" : : "m" (safeboxSingleton));
    CPythonSafebox__SetItemData(packet.m_itemIndex, &itemData);

    (reinterpret_cast<uint8_t*>(self))[1322] = 1; // Refresh Safebox
    return 1;
}
Der alte Code hätte auch funktioniert ...

Kind Regards Tim

Könntest du vllt. noch einen Tipp geben bei dem Itemshop-Lager aber das Itemshop-Lager selbst nonpub lassen?
10/13/2010 19:46 stage66#21
hmm will woll keiner helfen
10/13/2010 19:47 #EroX#22
WTF!

Für was haben wir dan ne Lagertruhe esrstellt -,-

Aber naja. thx<3

fg Afro
10/13/2010 19:51 Hermes2012#23
Danke tim kann dieses ganze

Verkaufen von exen/programmen/ etc die einem garnicht selbst gehören nicht leiden
10/13/2010 19:52 BL00DSTYL3#24
danke :P gute Arbeit^^
10/13/2010 19:52 stage66#25
hmm also keiner will helfen thx
10/13/2010 19:53 Bayolein#26
Quote:
Originally Posted by stage66 View Post
hmm also keiner will helfen thx
Wenn dus noch 10 mal
wiederholst gibts auch
kein besseres Ergebnis
10/13/2010 19:53 .SpecialZ##27
Quote:
Originally Posted by Hermes2012 View Post
Danke tim kann dieses ganze

Verkaufen von exen/programmen/ etc die einem garnicht selbst gehören nicht leiden
Ich denke hier geht´s weniger ums "mögen", sondern eher um den Fakt das es eine art von Diebstahl ist.

Er hat das ganze ding unter Copyright - Wenn du sein Auto stehlen würdest könnte dich exakt die selbe Strafe treffen. Pixel hin oder her.

Greetings !
10/13/2010 19:53 syηтaχ#28
Quote:
Originally Posted by tim66613 View Post
Code:
void PythonNetworkStream::Initialize()
{
    STORM_STATIC_ASSERT(sizeof(TPacketSafeBoxItemSet) == 40);

    uint8_t* RecvSafeBoxSetPacketAddr = reinterpret_cast<uint8_t*>(0x41E530);

    DetourClassFunc(RecvSafeBoxSetPacketAddr, reinterpret_cast<const uint8_t*>(&RecvSafeBoxSetPacket_Hook), GetAsmInstrLength(RecvSafeBoxSetPacketAddr, 8));
}
Code:
char __stdcall PythonNetworkStream::RecvSafeBoxSetPacket_Hook(PythonNetworkStream* self)
{
    TPacketSafeBoxItemSet packet;
    if (!self->Recv(&packet, sizeof(TPacketSafeBoxItemSet)))
        return 0;

    metin2_vc_client::packet_item itemData;

    itemData.itemVnum = packet.m_itemVnum;
    itemData.itemCount = packet.m_itemCount;
    memcpy(itemData.itemMetinSockets, packet.m_itemMetinSockets, sizeof(uint32_t) * 3);
    memcpy(itemData.attributes, packet.m_itemAttributes, sizeof(metin2_vc_client::packet_item_attribute) * 7);

    // NOOOOO, assembly
    void (__stdcall* CPythonSafebox__SetItemData)(uint32_t slotIndex, const void* data) = (void (__stdcall* )(uint32_t, const void*))0x467500;
    const void* safeboxSingleton = *(void **)0x61C370;
    asm("movl %0, %%ecx" : : "m" (safeboxSingleton));
    CPythonSafebox__SetItemData(packet.m_itemIndex, &itemData);

    (reinterpret_cast<uint8_t*>(self))[1322] = 1; // Refresh Safebox
    return 1;
}
Der alte Code hätte auch funktioniert ...

Kleine Dokumentation:
packet_item ist der Name der struct im Metin2 Client (laut .map)
CPythonNetworkStream ist der Name der MainStream-Klasse im Client (Char- und World-Server)
CNetworkStream ist der Name der allgemeinen Socket-Klasse im Client (diese enthält auch den Encryption/Decryption Code).

Kind Regards Tim
@ Tim66613

woher haste den Code Auszug würde mich intressieren ^^.

MfG -Eazy-
10/13/2010 19:53 Ownii*#29
Ich finds auch mies das andere die arbeit von tim releasen und nicht einmal tim fragen...
bei mia klappts zwar nicht der öffnet fenster nicht glaube weiß auch worans liegt aber naja ^^
10/13/2010 19:55 Megaload#30
Ich kann mich nur bei Tim entschuldigen das ich es versucht habe zu vk aber dann diverse angebote Abgelehnt habe "Einzelnde Personen können selbst befragt werden".

Es tut mir Leid Tim.

Mit freundlichen Grüßen und ein Big Sry
Megaload