Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 04/14/21 in all areas

  1. Shopping for the shaman: Download: [Hidden Content] Metin2 Download: here
    2 points
  2. M2 Download Center Download Here ( Internal 2.9 ) Download Here ( Last Release ) This is an archiver I've created, and it looks quite stable so far. The PackMakerLite (PML) supports type 0-1-2-3-4-5-6. As a summarize, the metin2 types are handled like this: Type 0 - only storage (no encryption/compression; it can be read fully from the .epk) Type 1 - compressed - lzo(file) Type 2 - compressed and encrypted - xtea(lzo(file)) Type 3 - encrypted with Panama - you must save an .iv key server-side in the panama/ folder. (content readable only after auth phase) The official used it only for patch2. Type 4 - encrypted with a mix of ciphers (cshybridcrypt) - you must save a .dat key server-side in the package/ folder. (content readable only after auth phase) Practically all the metin2_patch files. Type 5 - like type 4, but a server-side map/<map_name> is also provided. (content readable only after accessing the <map_name> map as a player) The official used it only for the catacomb data. Type 6 - compressed and encrypted - xtea(snappy(file)) Usage: Its settings (xtea keys, extensions, pack types to use) can be changed inside PackMakerLite.json: You can actually integrate the tool in the menu context (running the .reg files) for packing folders and unpacking .eix files: Remove "--nolog" from the .bat files if you want to see the logs again. Command-line options get overwritten by JSON config options. Last but not least: since the client handles all the filenames in lowercase, this tools automatically converts them as well. Thanks also to: blackdragonx61 / Mali - type4-5 extract code / type 6 compress code metin2team - type6 extract code By martysama0134
    1 point
  3. M2Dev Baguette Set Download Here ( Internal ) Download Here ( Mega ) Download Here ( Mega + Fix Texture) Baguette!!!
    1 point
  4. M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) Before: After:
    1 point
  5. M2 Download Center Download Here ( Internal ) root/uiRefine.py [Hidden Content] root/constInfo.py Another idea: (you don't have to use this, is just a example, can add in tooltip where you can drop items which you need, you can add a listbox+scrollbar and send drops from server and cache it in dictionary.) [Hidden Content]
    1 point
  6. 1 point
  7. GF v21.1.3.0 patch (Metin2 Download) Contents: root-meta, dumped binary, protos New chat filter GUI resources New pet, new costume(Ramadan) + Hairstyle All files unpacked in a folder Soon comes the Looting System resources. Well.. They are so geniuses.
    1 point
  8. Optimizing the packet traffic between server and client. To reduce the packet traffic generated by the ComputePoint function. Reduce UpdatePacket operation. 30packet * 20bytes = 600 bytes (total size of 30 packs) after this correction 1 pack of 400 - 500 bytes Sorry because my English is bad. Search and Adapt All (//Fixed_[C]Martin#2376_001) [Hidden Content]
    1 point
  9. Hi, In this thread I'm going to show you how to make a game-client or client-game communication with packets, instead of using the old quest-client, client-quest communication. Lets start with the game-client, in this example I will send 1 variable to the client. First start with the HEADER, open your binary source and navigate to UserInterface/Packet.h. Now you will see many headers, create a new one, but search for an empty number. I will use 57, because its not used. GC means it's used for Game -> Client packet, it's just a prefix. HEADER_GC_METIN2DEV Now add the structure for the packet, this is most important part. Structure is the "body" of the packet, it contains the HEADER as BYTE and the other optional variables. As I said I just want to send one int type to the client, so add it. typedef struct command_metin2dev_packet { BYTE bHeader; int M2int; } TPacketGCMetin2Dev; Now navigate to UserInterface/PythonNetworkStream.cpp and add your header to the CMainPacketHeaderMap class. The first parameter of the Set is the HEADER, second is the size of the structure. We will use just static size packets in this tutorial, but the third argument can be dynamic size too. Set(HEADER_GC_METIN2DEV, CNetworkPacketHeaderMap::TPacketType(sizeof(TPacketGCMetin2Dev), STATIC_SIZE_PACKET)); Now navigate to UserInterface/PythonNtworkStreamPhaseGame.cpp and add the function to the switch. case HEADER_GC_METIN2DEV: ret = RecvM2DevPacket(); break; The name of the function will be RecvM2DevPacket: Now declarate the function, navigate to UserInterface/PythonNetworkStream.h and add it as public: bool RecvM2DevPacket(); Now add the receiver part of the code. Recv "picks" out xy bytes from the buffer and the return type of it is false if there was no data in the buffer by that size otherwise true, which means it was successful. xy = size of the structure bool CPythonNetworkStream::RecvM2DevPacket() { TPacketGCMetin2Dev Metin2DevGC; if (!Recv(sizeof(TPacketGCMetin2Dev), &Metin2DevGC)) { Tracen("Recv Metin2DevGC Packet Error"); return false; } } Now we are calling the BINARY_M2DEV_Test function in game.py and passing the received data. PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_M2DEV_Test", Py_BuildValue("(i)", Metin2DevGC.M2int)); This was the client-side of the game-client communication, lets start the server-side: First of all we need to add the header again, navigate to game/packet.h and add this: And the structure: typedef struct packet_metin2dev_packet { BYTE byHeader; int M2int; } TPacketGCMetin2Dev; Now navigate to game/char.cpp and create a function which sends the packet. void CHARACTER::SendMetin2DevPacket() { } Declare it in the game/char.h: void SendMetin2DevPacket(); Now lets add the content of the function. Create a new instance of the structure, set the values of it and send it to the client. void CHARACTER::SendMetin2DevPacket() { if (!GetDesc()) { return; } TPacketGCMetin2Dev Metin2DevGC; Metin2DevGC.byHeader = HEADER_GC_METIN2DEV; Metin2DevGC.M2int = GetPlayerID(); GetDesc()->Packet(&Metin2DevGC, sizeof(TPacketGCMetin2Dev)); } Now add the last function to game.py, this will be called by the binary: def BINARY_M2DEV_Test(self, M2int): import dbg dbg.LogBox(str(M2int)) Finally, lets check how it works: If you have any question or suggestion, please just reply to this topic. Kind Regards, Sanchez
    1 point
  10. M2 Download Center Download Here ( Internal ) The characters on the icons are in standard costumes and hairstyles. Download: [Hidden Content]
    1 point
  11. Is not that easy as you think and also you need to make individual code for each function, if they've arguments and more. Here's my method, i tested it and works fine. [Hidden Content]
    1 point
  12. Good idea, the part of GetCompareIndex could be improved for better customization, by that people can add easily new types/subtypes. To: [Hidden Content] To: [Hidden Content]
    1 point
  13. M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) [Hidden Content]
    1 point
  14. Do you even have the eyes to read and compare YOUR code to MY code? Your tool even has glitches, you should at least try to fix them before attempting to say my work is a derivative of yours.
    1 point
  15. M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) Renewal Version:
    0 points
  16. Btw, instead of adding a .SetDelay() to all objects, you could do do a simple change. for all visual ani_image from screen. root/ui.py Search for: if True == value.has_key("delay"): window.SetDelay(value["delay"]) Replace with: [Hidden Content] So, you don't have to any part of python from tutorial, just this.
    0 points
  17. The idea is good, but the code is bugged and unreadable, here're the bugs: text = '1kks' ValueError: invalid literal for int() with base 10: '1000000s' text = '1kk500' 1000000500 text = '1abcd' '1abcd' If I'm the one who do this, i would do it more extendable and using a proficient way. [Hidden Content] At least, keep the copyright.
    0 points
×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.