Jump to content
metin2dev

xP3NG3Rx

Developer
  • Content count

    464
  • Joined

  • Last visited

Everything posted by xP3NG3Rx

  1. Hello devs. I think that webzen already fixxed this, because I can't reverse the CSlotWindow::OnMouseOver it may be virtualized :sob: The problem is that, when you are trying to make conditions for the slot with runtime mouse overin, the slot doesn't handle the overin event until now. Here is a demonstration video to show the fixxed problem. Without this fix the MouseOverIn event was running down if your cursor came to the slotboard which is the board of the slots :| instead of the slot. It's difficult to explain. Before you start to implement it, make safety backup of your files! 1.) Define the new OverIn event into the SlotWindow class in the ui.py file: 2.) Define new functions and a helper variable into the eterPythonLib\PythonSlotWindow.h. 3.) Make fit, and add the new functions into the eterPythonLib\PythonSlotWindow.cpp. Example usage: def LoadObj(self): self.wndItem = self.GetChild("ItemSlot") self.wndItem.SetOverInEvent(ui.__mem_func__(self.OverIn)) self.wndItem.SetOverOutEvent(ui.__mem_func__(self.OverOut)) def OverIn(self, selectedSlotPos): chat.AppendChat(chat.CHAT_TYPE_INFO, "OverIn %d", selectedSlotPos) def OverOut(self): chat.AppendChat(chat.CHAT_TYPE_INFO, "OverOut")
  2. c++ Chat history update

    Hello everyone. Here is a little snippet for the chat history. I made this to turn back the "All" state if you turn off every each button.
  3. This isn't a bad idea, maybe I'll take it to my TODO list.
  4. Hello everyone. It's a good day to share an old code with you. First of all you need to know: I don't help to install it. Don't even take the contact with me about it. The whole code is written by me, and reversed from official binaries. At the beginning do a backup for your files(srcs+pys) and READ CAREFULLY the readme. W/o brain.exe please close this tab, or your browser, thank you for your understanding. Preview: Download.exe Enjoy & #h4v3fun, pngr
  5. Via antiflag.
  6. Hello, This little thing is marks your pet seal into your inventory like the autopotion. This arrives with the v17.5 patch. Open PetSystem.cpp and replace or make it fit for you: void CPetActor::SetSummonItem(LPITEM pItem) { if (NULL == pItem) { LPITEM pSummonItem = ITEM_MANAGER::instance().FindByVID(m_dwSummonItemVID); if (NULL != pSummonItem) pSummonItem->SetSocket(1, FALSE); m_dwSummonItemVID = 0; m_dwSummonItemVnum = 0; return; } pItem->SetSocket(1, TRUE); m_dwSummonItemVID = pItem->GetVID(); m_dwSummonItemVnum = pItem->GetVnum(); } After that open the uiInventory.py and paste this code below the autopotion if-statement in the RefreshBagSlotWindow function. elif itemVnum >= 53001 and itemVnum <= 53256: metinSocket = [player.GetItemMetinSocket(globalSlotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]# <!> globalSlotNumber may be different <!> isActivated = 0 != metinSocket[1] if isActivated: self.wndItem.ActivateSlot(i) else: self.wndItem.DeactivateSlot(i)
  7. c++ New Item Type = ITEM_GACHA

    Thanks for it.
  8. open Easter Present?

    I think I need a proper base-finder of process only, but I'm not good enough in hacking soo.
  9. open Easter Present?

    I'm not a hero, and will not, sorry
  10. Actually this is the same as the normal just with scale, I cannot understand ymir why did it this way. I mean if you don't change the scale, it is in standard case 1.0 so basically the new functions are not necessary. Just enough to multiply the sizes with the scales.
  11. #ui.py def SetPercentageWithScale(self, curValue, maxValue): wndMgr.SetRenderingRectWithScale(self.hWnd, 0.0, 0.0, -1.0 + float(curValue) / float(maxValue), 0.0) // EterPythonLib/PythonWindowManagerModule.cpp PyObject * wndImageSetRenderingRectWithScale(PyObject * poSelf, PyObject * poArgs) { UI::CWindow * pWindow; if (!PyTuple_GetWindow(poArgs, 0, &pWindow)) return Py_BuildException(); float fLeft; if (!PyTuple_GetFloat(poArgs, 1, &fLeft)) return Py_BuildException(); float fTop; if (!PyTuple_GetFloat(poArgs, 2, &fTop)) return Py_BuildException(); float fRight; if (!PyTuple_GetFloat(poArgs, 3, &fRight)) return Py_BuildException(); float fBottom; if (!PyTuple_GetFloat(poArgs, 4, &fBottom)) return Py_BuildException(); if (pWindow->IsType(UI::CExpandedImageBox::Type())) ((UI::CExpandedImageBox*)pWindow)->SetRenderingRectWithScale(fLeft, fTop, fRight, fBottom); else if (pWindow->IsType(UI::CAniImageBox::Type())) ((UI::CAniImageBox*)pWindow)->SetRenderingRectWithScale(fLeft, fTop, fRight, fBottom); return Py_BuildNone(); } // Bottom of the file where is the functionlist: { "SetRenderingRectWithScale", wndImageSetRenderingRectWithScale, METH_VARARGS }, // EterPythonLib/PythonWindow.h // class CExpandedImageBox --> Public function definition: void SetRenderingRectWithScale(float fLeft, float fTop, float fRight, float fBottom); // class CAniImageBox --> Public function definition: void SetRenderingRectWithScale(float fLeft, float fTop, float fRight, float fBottom); // EterPythonLib/PythonWindow.cpp // Add this near to the CExcpandedImageBox functions void CExpandedImageBox::SetRenderingRectWithScale(float fLeft, float fTop, float fRight, float fBottom) { if (!m_pImageInstance) return; ((CGraphicExpandedImageInstance*)m_pImageInstance)->SetRenderingRectWithScale(fLeft, fTop, fRight, fBottom); } // Add this near to the CAniImageBox functions struct FSetRenderingRectWithScale { float fLeft, fTop, fRight, fBottom; void operator () (CGraphicExpandedImageInstance * pInstance) { pInstance->SetRenderingRectWithScale(fLeft, fTop, fRight, fBottom); } }; void CAniImageBox::SetRenderingRectWithScale(float fLeft, float fTop, float fRight, float fBottom) { FSetRenderingRectWithScale setRenderingRect; setRenderingRect.fLeft = fLeft; setRenderingRect.fTop = fTop; setRenderingRect.fRight = fRight; setRenderingRect.fBottom = fBottom; for_each(m_ImageVector.begin(), m_ImageVector.end(), setRenderingRect); } // EterLib/GrpExpandedImageInstance.h // class CGraphicExpandedImageInstance --> Public function definition: void SetRenderingRectWithScale(float fLeft, float fTop, float fRight, float fBottom); // EterLib/GrpExpandedImageInstance.cpp void CGraphicExpandedImageInstance::SetRenderingRectWithScale(float fLeft, float fTop, float fRight, float fBottom) { if (IsEmpty()) return; float fWidth = float(GetWidth() * m_v2Scale.x); float fHeight = float(GetHeight() * m_v2Scale.y); m_RenderingRect.left = fWidth * fLeft; m_RenderingRect.top = fHeight * fTop; m_RenderingRect.right = fWidth * fRight; m_RenderingRect.bottom = fHeight * fBottom; } A couple of minutes of RE
  12. solved LOAD_SETTINS_FAILURE

    It has syntax error somewhere in the lua file.
  13. c++ Notice System With Timer

    crontab + api much more sexy
  14. python [Py] Root 02.02.2018

    I think that will never gonna happen.
  15. open Request TGA Fade in fade out effect

    You can play with ui.ImageBox().SetAlpha([0.0 .. 1.0])
  16. python [Py] Root 02.02.2018

    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
  17. python [Py] Root 02.02.2018

    No, they don't. Actually the Brazilian servers are running by ongame and not by gameforge O.o.
  18. python [Py] Root 02.02.2018

    The brazilian guys made the same mistake, or probably these actions aren't mistakes? [M2] BR Python core 15.03.18.7z
  19. New system idea

    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 Actually I am using this in the CHARACTER::Follow and works pretty well:
  20. [C++] Blink/Alert in Taskbar

    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
  21. python [Fix] Ghost GUI

    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()
  22. open Request MoveImageBox

    Here it is: https://puu.sh/zxqLC/21b9709d4d.rar Btw there is the filerequest thread, next time post there.
  23. You can communicate with the warehouse from the inventory through the interface.
  24. open Error item.remove

    Don't you see the problem?
×