client/UserInterface/PythonChatModule.cpp

521 lines
13 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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);
}