elitepvpers

elitepvpers (https://www.elitepvpers.com/forum/)
-   Metin2 PServer Guides & Strategies (https://www.elitepvpers.com/forum/metin2-pserver-guides-strategies/)
-   -   fix (https://www.elitepvpers.com/forum/metin2-pserver-guides-strategies/784483-fix.html)

stage66 10/13/2010 19:41

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

tim66613 10/13/2010 19:42

Quote:

Originally Posted by ℓσℓ (Post 7219596)
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

.Zander 10/13/2010 19:42

nice!
Funktioniert es mit dem Modifiziertem 2010er Client der hier pub is ( von xIvan4ikx)?
mfg
Zander

Perfection- 10/13/2010 19:42

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

SOD666 10/13/2010 19:44

Quote:

Originally Posted by tim66613 (Post 7219674)
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?

stage66 10/13/2010 19:46

hmm will woll keiner helfen

#EroX 10/13/2010 19:47

WTF!

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

Aber naja. thx<3

fg Afro

Hermes2012 10/13/2010 19:51

Danke tim kann dieses ganze

Verkaufen von exen/programmen/ etc die einem garnicht selbst gehören nicht leiden

BL00DSTYL3 10/13/2010 19:52

danke :P gute Arbeit^^

stage66 10/13/2010 19:52

hmm also keiner will helfen thx

Bayolein 10/13/2010 19:53

Quote:

Originally Posted by stage66 (Post 7219812)
hmm also keiner will helfen thx

Wenn dus noch 10 mal
wiederholst gibts auch
kein besseres Ergebnis

.SpecialZ# 10/13/2010 19:53

Quote:

Originally Posted by Hermes2012 (Post 7219797)
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 !

syηтaχ 10/13/2010 19:53

Quote:

Originally Posted by tim66613 (Post 7219674)
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-

Ownii* 10/13/2010 19:53

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 ^^

Megaload 10/13/2010 19:55

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


All times are GMT +2. The time now is 23:17.

Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.