Moin Leute,
ich bin echt am verzeweifeln.. Mir ist erst jetzt aufgefallen das bei mir eine QuestButtons angezeigt werden..
Dachte bisher ich hätte sie irgendwie immer ausgeblendet... Doch nun wollte ich paar Schreiben und bemerkte sie kommen nicht...
Python angeschaut -> Alles Ok.
Nun wunderte es mich das von der Binary nicht der Befehl (bei der Interfacemodule.py) nicht ankommt. BINARY_RecvQuest oder RecvQuest,.
Gut in dem Source nachgeschaut, gefunden und die funktion wird von der Binary auch aufgerufen allerdings landet diese nicht in Python.
Sondern wird durch andere If Abfragen (die anscheinanend sagen es sei fail) geblockt und somit kommt keine Quest in Python an.
Habe mir das nun geanuer angeschaut.
PythonEventManager.cpp
- case EVENT_TYPE_QUEST_BUTTON:
- {
- const std::string& c_rstType = GetArgumentString("icon_type", ScriptCommand.argList);
- const std::string& c_rstFile = GetArgumentString("icon_name", ScriptCommand.argList);
- int idx = atoi(GetArgument("idx", ScriptCommand.argList));
- const char * name = GetArgument("name", ScriptCommand.argList);
- // Äù½ºÆ® UI ¸®´º¾óÀÌ µÇ¸é ÇØ°á µÇ¹Ç·Î ÀÏ´Ü ¿ëÈ¥¼®¸¸ ¶«»§ by chrislee
- if (!strcmp(name, "Á¶°¢³ ¿ëÈ¥¼®?....")) {
- Tracef("EVENT_TYPE_QUEST_BUTTON1 BEGINNidx: %d name: %s name2: %s name3: %s\n", idx,name,"highlight","");
- PyCallClassMemberFunc(m_poInterface, "BINARY_RecvQuest", Py_BuildValue("(isss)", idx, name, "highlight", ""));
- Tracef("EVENT_TYPE_QUEST_BUTTON1 END: name: %s", name);
- }
- else {
- if (c_rstFile.empty())
- {
- Tracef("EVENT_TYPE_QUEST_BUTTON2 BEGINN idx: %d name: %s\n", idx,name);
- PyCallClassMemberFunc(m_poInterface, "RecvQuest", Py_BuildValue("(is)", idx, name));
- Tracef("EVENT_TYPE_QUEST_BUTTON2 END: name: %s", name);
- }
- else
- {
- Tracef("EVENT_TYPE_QUEST_BUTTON3 BEINN idx: %d name: %s name2: %s name3: %s\n", idx,name,c_rstType.c_str(),c_rstFile.c_str());
- PyCallClassMemberFunc(m_poInterface, "BINARY_RecvQuest",
- Py_BuildValue("(isss)", idx, name, c_rstType.c_str(), c_rstFile.c_str()));
- Tracef("EVENT_TYPE_QUEST_BUTTON3 END: name: %s", name);
- }
- }
- break;
- }
Das ist der Abschnitt wo dann ingame Links die QuestButtons (Send_letter von Lua) mir anzeigen soll. Das Case wird auch aufgerufen nur bei der übergabe von ->
PyCallClassMemberFunc geht es wieder weiter an die __PyCallClassMemberFunc_ByCString
Und bei __PyCallClassMemberFunc_ByCString bleibt er stehen, Mir ist ein rätsel warum..
- bool PyCallClassMemberFunc(PyObject* poClass, const char* c_szFunc, PyObject* poArgs)
- {
- PyObject* poRet;
- // NOTE : NULL üũ Ãß°¡.. - [levites]
- if (!poClass)
- {
- Tracef("PyCallClassMemberFunc!poClass PythonName: %s\n",c_szFunc);
- Py_XDECREF(poArgs);
- return false;
- }
- if (!__PyCallClassMemberFunc_ByCString(poClass, c_szFunc, poArgs, &poRet))
- Tracef("PyCallClassMemberFunc -> !__PyCallClassMemberFunc_ByCString! PythonName: %s\n",c_szFunc);
- return false;
- Py_DECREF(poRet);
- return true;
- }
- bool __PyCallClassMemberFunc_ByCString(PyObject* poClass, const char* c_szFunc, PyObject* poArgs, PyObject** ppoRet)
- {
- if (!poClass)
- {
- Tracef("__PyCallClassMemberFunc_ByCString -> !!poClass! PythonName: %s\n",c_szFunc);
- Py_XDECREF(poArgs);
- return false;
- }
- PyObject * poFunc = PyObject_GetAttrString(poClass, (char *)c_szFunc); // New Reference
- if (!poFunc)
- {
- Tracef("__PyCallClassMemberFunc_ByCString -> !!poFunc! PythonName: %s\n",c_szFunc);
- PyErr_Clear();
- Py_XDECREF(poArgs);
- return false;
- }
- if (!PyCallable_Check(poFunc))
- {
- Tracef("__PyCallClassMemberFunc_ByCString -> !!PyCallable_Check! PythonName: %s\n",c_szFunc);
- Py_DECREF(poFunc);
- Py_XDECREF(poArgs);
- return false;
- }
- PyObject * poRet = PyObject_CallObject(poFunc, poArgs); // New Reference
- if (!poRet)
- {
- if (g_pkExceptionSender)
- g_pkExceptionSender->Clear();
- PyErr_Print();
- if (g_pkExceptionSender)
- g_pkExceptionSender->Send();
- Py_DECREF(poFunc);
- Py_XDECREF(poArgs);
- return false;
- }
- *ppoRet = poRet;
- Py_DECREF(poFunc);
- Py_XDECREF(poArgs);
- return true;
- }
Habe bisher mittlerweile die python.h dateien + lib usw ausgetauscht mit sovielen anderen varianten probiert.. bei einigen ging client nimmer..
Ansonsten ist das Ergenis immer selbe. Ich weiss das am Anfang als mit dem Client gearbeitet habe noch das ging..
Hier nun noch die schöne Log.txt vom client damit man besser sieht welche if er hängen bleibt...
- 0528 14:20:26521 :: NEW EVENT CURTAIN ----------------------------------------------------------------------------0528 14:20:26521 ::
- 0528 14:20:26525 :: EVENT_TYPE_QUEST_BUTTON2 BEGINN idx: 1 name: 0Die Forschung des Biologen
- 0528 14:20:26525 :: __PyCallClassMemberFunc_ByCString -> !!poFunc! PythonName: RecvQuest
- 0528 14:20:26525 :: PyCallClassMemberFunc -> !__PyCallClassMemberFunc_ByCString! PythonName: RecvQuest
- 0528 14:20:26525 :: EVENT_TYPE_QUEST_BUTTON2 END: name: 0Die Forschung des Biologen
Mir aufgefallen das er mir nicht nur das verweigert auch
- 0528 14:20:34134 :: __PyCallClassMemberFunc_ByCString -> !!poFunc! PythonName: OnIMEKeyDown
- 0528 14:20:34135 :: __PyCallClassMemberFunc_ByCString -> !!poFunc! PythonName: OnTop
- 0528 14:20:34135 :: PyCallClassMemberFunc -> !__PyCallClassMemberFunc_ByCString! PythonName: OnTop
- 0528 14:20:35371 :: __PyCallClassMemberFunc_ByCString -> !!poFunc! PythonName: OnIMEKeyDown
- 0528 14:20:35586 :: PointWindow: TaskBar
- 0528 14:20:35635 :: PointWindow: MessengerButton
- 0528 14:20:35834 :: PointWindow: SystemButton
- 0528 14:21:36015 :: __PyCallClassMemberFunc_ByCString -> !!poFunc! PythonName: DownEvent
- 0528 14:21:36015 :: PyCallClassMemberFunc -> !__PyCallClassMemberFunc_ByCString! PythonName: DownEvent
- 0528 14:21:36097 :: __PyCallClassMemberFunc_ByCString -> !!poFunc! PythonName: OnTop
- 0528 14:21:36098 :: PyCallClassMemberFunc -> !__PyCallClassMemberFunc_ByCString! PythonName: OnTop
Weiss jetzt aktuell nicht genau was es ist aber scheint wohl wichtig zu sein..
Jemand von euch ne idee woran es liegen könnten?
Die funktionen werden von Python abgerufen irgendwie..
Lg
Risan