Jump to content

xP3NG3Rx

Honorable Member
  • Posts

    855
  • Joined

  • Days Won

    402
  • Feedback

    100%

Everything posted by xP3NG3Rx

  1. That is the class pointer of the MainStream class. networkModule.py: introLogin.py:
  2. Probably with this? else if ("info" == TokenVector[1]) { if (5 != TokenVector.size()) { TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %s", c_szCommand); return; } long long gold = atoll(TokenVector[2].c_str()); UINT itemVnum = atoi(TokenVector[3].c_str()); UINT count = atoi(TokenVector[4].c_str()); PyObject * poArgs = PyTuple_New(3); PyTuple_SetItem(poArgs, 0, PyLong_FromLongLong(gold)); PyTuple_SetItem(poArgs, 1, PyInt_FromLong(itemVnum)); PyTuple_SetItem(poArgs, 2, PyInt_FromLong(count)); PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_Cube_UpdateInfo", poArgs); }
  3. Once I've met with this problem, the reason was a comma before the new weapon type, nothing else. It was missing from here: The weapon type of the quiver has been overflowed and got 255 as value. You can check it with this code: if app.ENABLE_QUIVER_SYSTEM: import chat chat.AppendChat(1, str((itemType, itemSubType))) if itemSubType != item.WEAPON_QUIVER: self.__AppendMetinSlotInfo(metinSlot) else: bHasRealtimeFlag = 0 for i in xrange(item.LIMIT_MAX_NUM): (limitType, limitValue) = item.GetLimit(i) if item.LIMIT_REAL_TIME == limitType: bHasRealtimeFlag = 1 if bHasRealtimeFlag == 1: self.AppendMallItemLastTime(metinSlot[0]) else: self.__AppendMetinSlotInfo(metinSlot)
  4. This isn't a bad idea, maybe I'll take it to my TODO list.
  5. I think I need a proper base-finder of process only, but I'm not good enough in hacking soo.
  6. I'm not a hero, and will not, sorry
  7. 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.
  8. #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
  9. It has syntax error somewhere in the lua file.
  10. crontab + api much more sexy
  11. I think that will never gonna happen.
  12. You can play with ui.ImageBox().SetAlpha([0.0 .. 1.0])
  13. 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
  14. No, they don't. Actually the Brazilian servers are running by ongame and not by gameforge O.o.
  15. The brazilian guys made the same mistake, or probably these actions aren't mistakes? [M2] BR Python core 15.03.18.7z
  16. 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:
  17. 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
  18. Here it is: [Hidden Content] Btw there is the filerequest thread, next time post there.
  19. You can communicate with the warehouse from the inventory through the interface.
×
×
  • 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.