Solution refactoring and restructuring, removed Boost dependency, removed unused tools
This commit is contained in:
520
src/UserInterface/PythonChatModule.cpp
Normal file
520
src/UserInterface/PythonChatModule.cpp
Normal file
@ -0,0 +1,520 @@
|
||||
#include "StdAfx.h"
|
||||
#include "PythonChat.h"
|
||||
#include "PythonItem.h"
|
||||
#include "../gamelib/ItemManager.h"
|
||||
|
||||
PyObject * chatSetChatColor(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
int iType;
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &iType))
|
||||
return Py_BuildException();
|
||||
|
||||
int r;
|
||||
if (!PyTuple_GetInteger(poArgs, 1, &r))
|
||||
return Py_BuildException();
|
||||
|
||||
int g;
|
||||
if (!PyTuple_GetInteger(poArgs, 2, &g))
|
||||
return Py_BuildException();
|
||||
|
||||
int b;
|
||||
if (!PyTuple_GetInteger(poArgs, 3, &b))
|
||||
return Py_BuildException();
|
||||
|
||||
CPythonChat::Instance().SetChatColor(iType, r, g, b);
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatClear(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
CPythonChat::Instance().Destroy();
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatClose(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
CPythonChat::Instance().Close();
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatCreateChatSet(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
int iID;
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||
return Py_BuildException();
|
||||
|
||||
return Py_BuildValue("i", CPythonChat::Instance().CreateChatSet(iID));
|
||||
}
|
||||
|
||||
PyObject * chatUpdate(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
int iID;
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||
return Py_BuildException();
|
||||
|
||||
CPythonChat::Instance().Update(iID);
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatRender(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
int iID;
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||
return Py_BuildException();
|
||||
|
||||
CPythonChat::Instance().Render(iID);
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatSetBoardState(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
int iID;
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||
return Py_BuildException();
|
||||
int iState;
|
||||
if (!PyTuple_GetInteger(poArgs, 1, &iState))
|
||||
return Py_BuildException();
|
||||
|
||||
CPythonChat::Instance().SetBoardState(iID, iState);
|
||||
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatSetPosition(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
int iID;
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||
return Py_BuildException();
|
||||
int ix;
|
||||
if (!PyTuple_GetInteger(poArgs, 1, &ix))
|
||||
return Py_BuildException();
|
||||
int iy;
|
||||
if (!PyTuple_GetInteger(poArgs, 2, &iy))
|
||||
return Py_BuildException();
|
||||
|
||||
CPythonChat::Instance().SetPosition(iID, ix, iy);
|
||||
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatSetHeight(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
int iID;
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||
return Py_BuildException();
|
||||
int iHeight;
|
||||
if (!PyTuple_GetInteger(poArgs, 1, &iHeight))
|
||||
return Py_BuildException();
|
||||
|
||||
CPythonChat::Instance().SetHeight(iID, iHeight);
|
||||
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatSetStep(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
int iID;
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||
return Py_BuildException();
|
||||
int iStep;
|
||||
if (!PyTuple_GetInteger(poArgs, 1, &iStep))
|
||||
return Py_BuildException();
|
||||
|
||||
CPythonChat::Instance().SetStep(iID, iStep);
|
||||
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatToggleChatMode(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
int iID;
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||
return Py_BuildException();
|
||||
int iType;
|
||||
if (!PyTuple_GetInteger(poArgs, 1, &iType))
|
||||
return Py_BuildException();
|
||||
|
||||
CPythonChat::Instance().ToggleChatMode(iID, iType);
|
||||
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatEnableChatMode(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
int iID;
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||
return Py_BuildException();
|
||||
int iType;
|
||||
if (!PyTuple_GetInteger(poArgs, 1, &iType))
|
||||
return Py_BuildException();
|
||||
|
||||
CPythonChat::Instance().EnableChatMode(iID, iType);
|
||||
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatDisableChatMode(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
int iID;
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||
return Py_BuildException();
|
||||
int iType;
|
||||
if (!PyTuple_GetInteger(poArgs, 1, &iType))
|
||||
return Py_BuildException();
|
||||
|
||||
CPythonChat::Instance().DisableChatMode(iID, iType);
|
||||
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatSetEndPos(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
int iID;
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||
return Py_BuildException();
|
||||
float fPos;
|
||||
if (!PyTuple_GetFloat(poArgs, 1, &fPos))
|
||||
return Py_BuildException();
|
||||
|
||||
CPythonChat::Instance().SetEndPos(iID, fPos);
|
||||
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatGetLineCount(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
int iID;
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||
return Py_BuildException();
|
||||
|
||||
return Py_BuildValue("i", CPythonChat::Instance().GetLineCount(iID));
|
||||
}
|
||||
|
||||
PyObject * chatGetVisibleLineCount(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
int iID;
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||
return Py_BuildException();
|
||||
|
||||
return Py_BuildValue("i", CPythonChat::Instance().GetVisibleLineCount(iID));
|
||||
}
|
||||
|
||||
PyObject * chatGetLineStep(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
int iID;
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||
return Py_BuildException();
|
||||
|
||||
return Py_BuildValue("i", CPythonChat::Instance().GetLineStep(iID));
|
||||
}
|
||||
|
||||
PyObject * chatAppendChat(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
int iType;
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &iType))
|
||||
return Py_BuildException();
|
||||
|
||||
char * szChat;
|
||||
if (!PyTuple_GetString(poArgs, 1, &szChat))
|
||||
return Py_BuildException();
|
||||
|
||||
CPythonChat::Instance().AppendChat(iType, szChat);
|
||||
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatAppendChatWithDelay(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
int iType;
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &iType))
|
||||
return Py_BuildException();
|
||||
|
||||
char * szChat;
|
||||
if (!PyTuple_GetString(poArgs, 1, &szChat))
|
||||
return Py_BuildException();
|
||||
|
||||
int iDelay;
|
||||
if (!PyTuple_GetInteger(poArgs, 2, &iDelay))
|
||||
return Py_BuildException();
|
||||
|
||||
CPythonChat::Instance().AppendChatWithDelay(iType, szChat, iDelay);
|
||||
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatArrangeShowingChat(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
int iID;
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &iID))
|
||||
return Py_BuildException();
|
||||
|
||||
CPythonChat::Instance().ArrangeShowingChat(iID);
|
||||
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatIgnoreCharacter(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
char * szName;
|
||||
if (!PyTuple_GetString(poArgs, 0, &szName))
|
||||
return Py_BuildException();
|
||||
|
||||
CPythonChat::Instance().IgnoreCharacter(szName);
|
||||
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatIsIgnoreCharacter(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
char * szName;
|
||||
if (!PyTuple_GetString(poArgs, 0, &szName))
|
||||
return Py_BuildException();
|
||||
|
||||
CPythonChat::Instance().IsIgnoreCharacter(szName);
|
||||
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatCreateWhisper(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
char * szName;
|
||||
if (!PyTuple_GetString(poArgs, 0, &szName))
|
||||
return Py_BuildException();
|
||||
|
||||
CPythonChat::Instance().CreateWhisper(szName);
|
||||
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatAppendWhisper(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
int iType;
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &iType))
|
||||
return Py_BuildException();
|
||||
|
||||
char * szName;
|
||||
if (!PyTuple_GetString(poArgs, 1, &szName))
|
||||
return Py_BuildException();
|
||||
|
||||
char * szChat;
|
||||
if (!PyTuple_GetString(poArgs, 2, &szChat))
|
||||
return Py_BuildException();
|
||||
|
||||
CPythonChat::Instance().AppendWhisper(iType, szName, szChat);
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatRenderWhisper(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
char * szName;
|
||||
if (!PyTuple_GetString(poArgs, 0, &szName))
|
||||
return Py_BuildException();
|
||||
|
||||
float fx;
|
||||
if (!PyTuple_GetFloat(poArgs, 1, &fx))
|
||||
return Py_BuildException();
|
||||
|
||||
float fy;
|
||||
if (!PyTuple_GetFloat(poArgs, 2, &fy))
|
||||
return Py_BuildException();
|
||||
|
||||
CWhisper * pWhisper;
|
||||
if (CPythonChat::Instance().GetWhisper(szName, &pWhisper))
|
||||
{
|
||||
pWhisper->Render(fx, fy);
|
||||
}
|
||||
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatSetWhisperBoxSize(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
char * szName;
|
||||
if (!PyTuple_GetString(poArgs, 0, &szName))
|
||||
return Py_BuildException();
|
||||
|
||||
float fWidth;
|
||||
if (!PyTuple_GetFloat(poArgs, 1, &fWidth))
|
||||
return Py_BuildException();
|
||||
|
||||
float fHeight;
|
||||
if (!PyTuple_GetFloat(poArgs, 2, &fHeight))
|
||||
return Py_BuildException();
|
||||
|
||||
CWhisper * pWhisper;
|
||||
if (CPythonChat::Instance().GetWhisper(szName, &pWhisper))
|
||||
{
|
||||
pWhisper->SetBoxSize(fWidth, fHeight);
|
||||
}
|
||||
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatSetWhisperPosition(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
char * szName;
|
||||
if (!PyTuple_GetString(poArgs, 0, &szName))
|
||||
return Py_BuildException();
|
||||
|
||||
float fPosition;
|
||||
if (!PyTuple_GetFloat(poArgs, 1, &fPosition))
|
||||
return Py_BuildException();
|
||||
|
||||
CWhisper * pWhisper;
|
||||
if (CPythonChat::Instance().GetWhisper(szName, &pWhisper))
|
||||
{
|
||||
pWhisper->SetPosition(fPosition);
|
||||
}
|
||||
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatClearWhisper(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
char * szName;
|
||||
if (!PyTuple_GetString(poArgs, 0, &szName))
|
||||
return Py_BuildException();
|
||||
|
||||
CPythonChat::Instance().ClearWhisper(szName);
|
||||
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatInitWhisper(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
PyObject * poInterface;
|
||||
if (!PyTuple_GetObject(poArgs, 0, &poInterface))
|
||||
return Py_BuildException();
|
||||
|
||||
CPythonChat::Instance().InitWhisper(poInterface);
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * chatGetLinkFromHyperlink(PyObject * poSelf, PyObject * poArgs)
|
||||
{
|
||||
char * szHyperlink;
|
||||
|
||||
if (!PyTuple_GetString(poArgs, 0, &szHyperlink))
|
||||
return Py_BuildException();
|
||||
|
||||
std::string stHyperlink(szHyperlink);
|
||||
std::vector<std::string> results;
|
||||
|
||||
split_string(stHyperlink, ":", results, false);
|
||||
|
||||
// item:vnum:flag:socket0:socket1:socket2
|
||||
if (0 == results[0].compare("item"))
|
||||
{
|
||||
if (results.size() < 6)
|
||||
return Py_BuildValue("s", "");
|
||||
|
||||
CItemData * pItemData = NULL;
|
||||
|
||||
if (CItemManager::Instance().GetItemDataPointer(htoi(results[1].c_str()), &pItemData))
|
||||
{
|
||||
char buf[1024] = { 0 };
|
||||
char itemlink[256];
|
||||
int len;
|
||||
bool isAttr = false;
|
||||
|
||||
len = snprintf(itemlink, sizeof(itemlink), "item:%x:%x:%x:%x:%x",
|
||||
htoi(results[1].c_str()),
|
||||
htoi(results[2].c_str()),
|
||||
htoi(results[3].c_str()),
|
||||
htoi(results[4].c_str()),
|
||||
htoi(results[5].c_str()));
|
||||
|
||||
if (results.size() >= 8)
|
||||
{
|
||||
for (int i = 6; i < results.size(); i += 2)
|
||||
{
|
||||
len += snprintf(itemlink + len, sizeof(itemlink) - len, ":%x:%d",
|
||||
htoi(results[i].c_str()),
|
||||
atoi(results[i+1].c_str()));
|
||||
isAttr = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (isAttr)
|
||||
//"item:<3A><>ȣ:<3A>÷<EFBFBD><C3B7><EFBFBD>:<3A><><EFBFBD><EFBFBD>0:<3A><><EFBFBD><EFBFBD>1:<3A><><EFBFBD><EFBFBD>2"
|
||||
snprintf(buf, sizeof(buf), "|cffffc700|H%s|h[%s]|h|r", itemlink, pItemData->GetName());
|
||||
else
|
||||
snprintf(buf, sizeof(buf), "|cfff1e6c0|H%s|h[%s]|h|r", itemlink, pItemData->GetName());
|
||||
|
||||
return Py_BuildValue("s", buf);
|
||||
}
|
||||
}
|
||||
|
||||
return Py_BuildValue("s", "");
|
||||
}
|
||||
|
||||
void initChat()
|
||||
{
|
||||
static PyMethodDef s_methods[] =
|
||||
{
|
||||
{ "SetChatColor", chatSetChatColor, METH_VARARGS },
|
||||
{ "Clear", chatClear, METH_VARARGS },
|
||||
{ "Close", chatClose, METH_VARARGS },
|
||||
|
||||
{ "CreateChatSet", chatCreateChatSet, METH_VARARGS },
|
||||
{ "Update", chatUpdate, METH_VARARGS },
|
||||
{ "Render", chatRender, METH_VARARGS },
|
||||
|
||||
{ "SetBoardState", chatSetBoardState, METH_VARARGS },
|
||||
{ "SetPosition", chatSetPosition, METH_VARARGS },
|
||||
{ "SetHeight", chatSetHeight, METH_VARARGS },
|
||||
{ "SetStep", chatSetStep, METH_VARARGS },
|
||||
{ "ToggleChatMode", chatToggleChatMode, METH_VARARGS },
|
||||
{ "EnableChatMode", chatEnableChatMode, METH_VARARGS },
|
||||
{ "DisableChatMode", chatDisableChatMode, METH_VARARGS },
|
||||
{ "SetEndPos", chatSetEndPos, METH_VARARGS },
|
||||
|
||||
{ "GetLineCount", chatGetLineCount, METH_VARARGS },
|
||||
{ "GetVisibleLineCount", chatGetVisibleLineCount, METH_VARARGS },
|
||||
{ "GetLineStep", chatGetLineStep, METH_VARARGS },
|
||||
|
||||
// Chat
|
||||
{ "AppendChat", chatAppendChat, METH_VARARGS },
|
||||
{ "AppendChatWithDelay", chatAppendChatWithDelay, METH_VARARGS },
|
||||
{ "ArrangeShowingChat", chatArrangeShowingChat, METH_VARARGS },
|
||||
|
||||
// Ignore
|
||||
{ "IgnoreCharacter", chatIgnoreCharacter, METH_VARARGS },
|
||||
{ "IsIgnoreCharacter", chatIsIgnoreCharacter, METH_VARARGS },
|
||||
|
||||
// Whisper
|
||||
{ "CreateWhisper", chatCreateWhisper, METH_VARARGS },
|
||||
{ "AppendWhisper", chatAppendWhisper, METH_VARARGS },
|
||||
{ "RenderWhisper", chatRenderWhisper, METH_VARARGS },
|
||||
{ "SetWhisperBoxSize", chatSetWhisperBoxSize, METH_VARARGS },
|
||||
{ "SetWhisperPosition", chatSetWhisperPosition, METH_VARARGS },
|
||||
{ "ClearWhisper", chatClearWhisper, METH_VARARGS },
|
||||
{ "InitWhisper", chatInitWhisper, METH_VARARGS },
|
||||
|
||||
// Link
|
||||
{ "GetLinkFromHyperlink", chatGetLinkFromHyperlink, METH_VARARGS },
|
||||
|
||||
{ NULL, NULL, NULL },
|
||||
};
|
||||
|
||||
PyObject * poModule = Py_InitModule("chat", s_methods);
|
||||
|
||||
PyModule_AddIntConstant(poModule, "CHAT_TYPE_TALKING", CHAT_TYPE_TALKING);
|
||||
PyModule_AddIntConstant(poModule, "CHAT_TYPE_INFO", CHAT_TYPE_INFO);
|
||||
PyModule_AddIntConstant(poModule, "CHAT_TYPE_NOTICE", CHAT_TYPE_NOTICE);
|
||||
PyModule_AddIntConstant(poModule, "CHAT_TYPE_PARTY", CHAT_TYPE_PARTY);
|
||||
PyModule_AddIntConstant(poModule, "CHAT_TYPE_GUILD", CHAT_TYPE_GUILD);
|
||||
PyModule_AddIntConstant(poModule, "CHAT_TYPE_COMMAND", CHAT_TYPE_COMMAND);
|
||||
PyModule_AddIntConstant(poModule, "CHAT_TYPE_SHOUT", CHAT_TYPE_SHOUT);
|
||||
PyModule_AddIntConstant(poModule, "CHAT_TYPE_WHISPER", CHAT_TYPE_WHISPER);
|
||||
PyModule_AddIntConstant(poModule, "WHISPER_TYPE_CHAT", CPythonChat::WHISPER_TYPE_CHAT);
|
||||
PyModule_AddIntConstant(poModule, "WHISPER_TYPE_SYSTEM", CPythonChat::WHISPER_TYPE_SYSTEM);
|
||||
PyModule_AddIntConstant(poModule, "WHISPER_TYPE_GM", CPythonChat::WHISPER_TYPE_GM);
|
||||
|
||||
PyModule_AddIntConstant(poModule, "BOARD_STATE_VIEW", CPythonChat::BOARD_STATE_VIEW);
|
||||
PyModule_AddIntConstant(poModule, "BOARD_STATE_EDIT", CPythonChat::BOARD_STATE_EDIT);
|
||||
PyModule_AddIntConstant(poModule, "BOARD_STATE_LOG", CPythonChat::BOARD_STATE_LOG);
|
||||
|
||||
PyModule_AddIntConstant(poModule, "CHAT_SET_CHAT_WINDOW", 0);
|
||||
PyModule_AddIntConstant(poModule, "CHAT_SET_LOG_WINDOW", 1);
|
||||
}
|
Reference in New Issue
Block a user