Jump to content

xP3NG3Rx

Honorable Member
  • Posts

    839
  • Joined

  • Days Won

    393
  • Feedback

    100%

Posts posted by xP3NG3Rx

  1. Of course every each clients contain the python files under the gameforge. Globally patchserver, same files, excluded the locale files.
    But you know, if you are making a new patch you have to check everything before you put it on the servers to make it available for everyone. If you are taking only one look on the root pack, you must see something is not correct there... In this case the size of the packed root file. This is totally incomprehensible to me right now, I'm just laughing on them :D

  2. Probably you can extend this for the FindVictim as well. I mean if an aggressive monster looks for a potential victim, it will skip the safe zone.

    Trigger.cpp --> FuncFindMobVictim
     

    Spoiler

    31cc6311e2.png

    Actually I am using this in the CHARACTER::Follow and works pretty well:

    Spoiler

    132569316f.png

     

    • Love 4
  3. The blinking method has been called when the whisper dialog is closed or minimized, I think you have to implement a new function like a kind of "seen" stuff, when a message arrives it starts to blinking and when you click on the dialog it stops. It sucks when you already "in" the board, because if a message arrives it would start to blink and you have to click out and click in again to stop it. Btw there is the "OnTop" function for to begin.

    I know it isn't impossible but these things are too little to take it too serious :)

  4. Spoiler

     

    I know, I know. I do not know why the temperatures going up to the skies. I have under my laptop a Klim Cyclone and on the side a Klim Tornado.
    If the fanboost is on max level and every cooler is on the avg. temps is 45°C on CPU and GPU also. (During game it's 85-90)
    And this shit is just 1 year old.

    fcb59251a5.png

     

     

  5. Hello.

    I was looking inside the official python files and I found a little fix for this:

    Let me explain a bit the problem. If you leave open the inventory/dragon soul inventory/expanded taskbar or the affected objects and then you are using quest for teleportation, the windows what you left open will be closed because of the quest and when the quest executed those windows what you left open before would be opened again, but the warp is killing this procedure and that happens what you can see in the video, the windows are there but you cannot see them. Btw you can close them with escape key.

    The fix is coming from webzen:
    Simple, just execute a .Hide() function before the Destroy function has been called on that object what is stuck on the main window after teleport and that's it.

    For example:

    interfaceModule.py -> Interface class -> Close function:

    		if self.wndInventory:
    			self.wndInventory.Hide()#fix
    			self.wndInventory.Destroy()
    		if self.wndDragonSoul:
    			self.wndDragonSoul.Hide()#fix
    			self.wndDragonSoul.Destroy()
    • Metin2 Dev 1
    • Love 23
  6. 15 hours ago, Baumi said:

    If not you still should be able to do some stuff because well you have the correct function signatures and some more stuff.

    No, I've tried 100 times to find a couple of functions what have never been changed and the patternfinder doesn't give back any valuable result. This is the reason why I stuck. And the offset of the functions always changed after every start so I can't tell to my tool that this function is on this offset hook it, because at the second start the function is on another offset already. Oh yeah, and I've tried the searching on the .BR binary as well and every single try was successful. So the lueco shell is sucks.

    Btw should be enough to modify only one byte in the memory and you'll be able to unpack via python.

    int __cdecl sub_5161660(int a1, int a2)
    {
      int v3; // ST14_4
      char v4; // [esp+Ch] [ebp-164h]
      int v5; // [esp+15Ch] [ebp-14h]
      int v6; // [esp+160h] [ebp-10h]
      int v7; // [esp+16Ch] [ebp-4h]
    
      if ( !PyTuple_GetString(a2, 0, &v6) )
        return Py_BuildException(0);
      if ( packExists(v6) )
      {
        sub_53DA140(&v4);
        v7 = 0;
        v5 = 0;
        if ( sub_5441430(0, (int)&v4, v6, (int)&v5) )
        {
          sub_53DA3D0(&v4);
          v3 = python27_Py_BuildValue("s#");
          v7 = -1;
          sub_53DA580(&v4);
          return v3;
        }
        v7 = -1;
        sub_53DA580(&v4);
      }
      return Py_BuildException(0);
    }
    int __cdecl sub_5161660(int a1, int a2)
    {
      int result; // eax
      int v3; // ST14_4
      char v4; // [esp+Ch] [ebp-164h]
      int v5; // [esp+15Ch] [ebp-14h]
      int v6; // [esp+160h] [ebp-10h]
      int v7; // [esp+16Ch] [ebp-4h]
    
      if ( !PyTuple_GetString(a2, 0, &v6) )
        return Py_BuildException(0);
      sub_53DA140(&v4);
      v7 = 0;
      v5 = 0;
      if ( sub_5441430(0, (int)&v4, v6, (int)&v5) )
      {
        sub_53DA3D0(&v4);
        v3 = python27_Py_BuildValue("s#");
        v7 = -1;
        sub_53DA580(&v4);
        result = v3;
      }
      else
      {
        v7 = -1;
        sub_53DA580(&v4);
        result = Py_BuildException(0);
      }
      return result;
    }
    metin2client.exe:051616A0 test    edx, edx
    metin2client.exe:051616A2 jnz     short loc_51616CA
    metin2client.exe:051616A4 push    0
    metin2client.exe:051616A6 call    Py_BuildException
    metin2client.exe:051616AB add     esp, 4
    metin2client.exe:051616AE jmp     loc_516176A
    metin2client.exe:051616B3 ; ---------------------------------------------------------------------------
    metin2client.exe:051616B3 mov     eax, [ebp+var_10]
    metin2client.exe:051616B6 push    eax
    metin2client.exe:051616B7 call    packExists
    metin2client.exe:051616BC add     esp, 4


    FROM:
    85 D2 75 0F 6A 00 E8 45 58 28 00 83 C4 04 E9 B7 00 00 00 8B 45 F0 50 E8 D4 FE FF FF 83 C4 04
    TO:
    85 D2 75 26 6A 00 E8 45 58 28 00 83 C4 04 E9 B7 00 00 00 8B 45 F0 50 E8 D4 FE FF FF 83 C4 04

    "75 0F" is a short jump at 0x51616A2
    Sig:
    (85 D2 75 0F 6A 00 E8 ?? ?? ?? ?? 83 C4 04 E9 ?? ?? ?? ?? 8B 45 F0 50 E8 ?? ?? ?? ?? 83 C4 04) + 3

    The 26 instead of 0F will skip the dot and the extension check if-statement. So after the patch the packGet would looks like this:
     

    PyObject * packGet(PyObject * poSelf, PyObject * poArgs)
    {
    	char * strFileName;
    	if (!PyTuple_GetString(poArgs, 0, &strFileName))
    		return Py_BuildException();
    
    	CMappedFile file;
    	const void * pData = NULL;
    	if (CEterPackManager::Instance().Get(file, strFileName, &pData))
    		return Py_BuildValue("s#", pData, file.Size());
    
    	return Py_BuildException();
    }

     

    • Love 1
×
×
  • 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.