339 lines
9.1 KiB
C++
339 lines
9.1 KiB
C++
#include "StdAfx.h"
|
|
#include "PythonSafeBox.h"
|
|
|
|
void CPythonSafeBox::OpenSafeBox(int iSize)
|
|
{
|
|
m_dwMoney = 0;
|
|
m_ItemInstanceVector.clear();
|
|
m_ItemInstanceVector.resize(SAFEBOX_SLOT_X_COUNT * iSize);
|
|
|
|
for (DWORD i = 0; i < m_ItemInstanceVector.size(); ++i)
|
|
{
|
|
TItemData & rInstance = m_ItemInstanceVector[i];
|
|
ZeroMemory(&rInstance, sizeof(rInstance));
|
|
}
|
|
}
|
|
|
|
void CPythonSafeBox::SetItemData(DWORD dwSlotIndex, const TItemData & rItemInstance)
|
|
{
|
|
if (dwSlotIndex >= m_ItemInstanceVector.size())
|
|
{
|
|
TraceError("CPythonSafeBox::SetItemData(dwSlotIndex=%d) - Strange slot index", dwSlotIndex);
|
|
return;
|
|
}
|
|
|
|
m_ItemInstanceVector[dwSlotIndex] = rItemInstance;
|
|
}
|
|
|
|
void CPythonSafeBox::DelItemData(DWORD dwSlotIndex)
|
|
{
|
|
if (dwSlotIndex >= m_ItemInstanceVector.size())
|
|
{
|
|
TraceError("CPythonSafeBox::DelItemData(dwSlotIndex=%d) - Strange slot index", dwSlotIndex);
|
|
return;
|
|
}
|
|
|
|
TItemData & rInstance = m_ItemInstanceVector[dwSlotIndex];
|
|
ZeroMemory(&rInstance, sizeof(rInstance));
|
|
}
|
|
|
|
void CPythonSafeBox::SetMoney(DWORD dwMoney)
|
|
{
|
|
m_dwMoney = dwMoney;
|
|
}
|
|
|
|
DWORD CPythonSafeBox::GetMoney()
|
|
{
|
|
return m_dwMoney;
|
|
}
|
|
|
|
int CPythonSafeBox::GetCurrentSafeBoxSize()
|
|
{
|
|
return m_ItemInstanceVector.size();
|
|
}
|
|
|
|
BOOL CPythonSafeBox::GetSlotItemID(DWORD dwSlotIndex, DWORD* pdwItemID)
|
|
{
|
|
if (dwSlotIndex >= m_ItemInstanceVector.size())
|
|
{
|
|
TraceError("CPythonSafeBox::GetSlotItemID(dwSlotIndex=%d) - Strange slot index", dwSlotIndex);
|
|
return FALSE;
|
|
}
|
|
|
|
*pdwItemID=m_ItemInstanceVector[dwSlotIndex].vnum;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CPythonSafeBox::GetItemDataPtr(DWORD dwSlotIndex, TItemData ** ppInstance)
|
|
{
|
|
if (dwSlotIndex >= m_ItemInstanceVector.size())
|
|
{
|
|
TraceError("CPythonSafeBox::GetItemData(dwSlotIndex=%d) - Strange slot index", dwSlotIndex);
|
|
return FALSE;
|
|
}
|
|
|
|
*ppInstance = &m_ItemInstanceVector[dwSlotIndex];
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CPythonSafeBox::OpenMall(int iSize)
|
|
{
|
|
m_MallItemInstanceVector.clear();
|
|
m_MallItemInstanceVector.resize(SAFEBOX_SLOT_X_COUNT * iSize);
|
|
|
|
for (DWORD i = 0; i < m_MallItemInstanceVector.size(); ++i)
|
|
{
|
|
TItemData & rInstance = m_MallItemInstanceVector[i];
|
|
ZeroMemory(&rInstance, sizeof(rInstance));
|
|
}
|
|
}
|
|
|
|
void CPythonSafeBox::SetMallItemData(DWORD dwSlotIndex, const TItemData & rItemData)
|
|
{
|
|
if (dwSlotIndex >= m_MallItemInstanceVector.size())
|
|
{
|
|
TraceError("CPythonSafeBox::SetMallItemData(dwSlotIndex=%d) - Strange slot index", dwSlotIndex);
|
|
return;
|
|
}
|
|
|
|
m_MallItemInstanceVector[dwSlotIndex] = rItemData;
|
|
}
|
|
|
|
void CPythonSafeBox::DelMallItemData(DWORD dwSlotIndex)
|
|
{
|
|
if (dwSlotIndex >= m_MallItemInstanceVector.size())
|
|
{
|
|
TraceError("CPythonSafeBox::DelMallItemData(dwSlotIndex=%d) - Strange slot index", dwSlotIndex);
|
|
return;
|
|
}
|
|
|
|
TItemData & rInstance = m_MallItemInstanceVector[dwSlotIndex];
|
|
ZeroMemory(&rInstance, sizeof(rInstance));
|
|
}
|
|
|
|
BOOL CPythonSafeBox::GetMallItemDataPtr(DWORD dwSlotIndex, TItemData ** ppInstance)
|
|
{
|
|
if (dwSlotIndex >= m_MallItemInstanceVector.size())
|
|
{
|
|
TraceError("CPythonSafeBox::GetMallSlotItemID(dwSlotIndex=%d) - Strange slot index", dwSlotIndex);
|
|
return FALSE;
|
|
}
|
|
|
|
*ppInstance = &m_MallItemInstanceVector[dwSlotIndex];
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CPythonSafeBox::GetSlotMallItemID(DWORD dwSlotIndex, DWORD * pdwItemID)
|
|
{
|
|
if (dwSlotIndex >= m_MallItemInstanceVector.size())
|
|
{
|
|
TraceError("CPythonSafeBox::GetMallSlotItemID(dwSlotIndex=%d) - Strange slot index", dwSlotIndex);
|
|
return FALSE;
|
|
}
|
|
|
|
*pdwItemID = m_MallItemInstanceVector[dwSlotIndex].vnum;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
DWORD CPythonSafeBox::GetMallSize()
|
|
{
|
|
return m_MallItemInstanceVector.size();
|
|
}
|
|
|
|
CPythonSafeBox::CPythonSafeBox()
|
|
{
|
|
m_dwMoney = 0;
|
|
}
|
|
|
|
CPythonSafeBox::~CPythonSafeBox()
|
|
{
|
|
}
|
|
|
|
PyObject * safeboxGetCurrentSafeboxSize(PyObject * poSelf, PyObject * poArgs)
|
|
{
|
|
return Py_BuildValue("i", CPythonSafeBox::Instance().GetCurrentSafeBoxSize());
|
|
}
|
|
|
|
PyObject * safeboxGetItemID(PyObject * poSelf, PyObject * poArgs)
|
|
{
|
|
int ipos;
|
|
if (!PyTuple_GetInteger(poArgs, 0, &ipos))
|
|
return Py_BadArgument();
|
|
|
|
TItemData * pInstance;
|
|
if (!CPythonSafeBox::Instance().GetItemDataPtr(ipos, &pInstance))
|
|
return Py_BuildException();
|
|
|
|
return Py_BuildValue("i", pInstance->vnum);
|
|
}
|
|
|
|
PyObject * safeboxGetItemCount(PyObject * poSelf, PyObject * poArgs)
|
|
{
|
|
int ipos;
|
|
if (!PyTuple_GetInteger(poArgs, 0, &ipos))
|
|
return Py_BadArgument();
|
|
|
|
TItemData * pInstance;
|
|
if (!CPythonSafeBox::Instance().GetItemDataPtr(ipos, &pInstance))
|
|
return Py_BuildException();
|
|
|
|
return Py_BuildValue("i", pInstance->count);
|
|
}
|
|
|
|
PyObject * safeboxGetItemFlags(PyObject * poSelf, PyObject * poArgs)
|
|
{
|
|
int ipos;
|
|
if (!PyTuple_GetInteger(poArgs, 0, &ipos))
|
|
return Py_BadArgument();
|
|
|
|
TItemData * pInstance;
|
|
if (!CPythonSafeBox::Instance().GetItemDataPtr(ipos, &pInstance))
|
|
return Py_BuildException();
|
|
|
|
return Py_BuildValue("i", pInstance->flags);
|
|
}
|
|
|
|
PyObject * safeboxGetItemMetinSocket(PyObject * poSelf, PyObject * poArgs)
|
|
{
|
|
int iSlotIndex;
|
|
if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
|
|
return Py_BadArgument();
|
|
int iSocketIndex;
|
|
if (!PyTuple_GetInteger(poArgs, 1, &iSocketIndex))
|
|
return Py_BadArgument();
|
|
|
|
if (iSocketIndex >= ITEM_SOCKET_SLOT_MAX_NUM)
|
|
return Py_BuildException();
|
|
|
|
TItemData * pItemData;
|
|
if (!CPythonSafeBox::Instance().GetItemDataPtr(iSlotIndex, &pItemData))
|
|
return Py_BuildException();
|
|
|
|
return Py_BuildValue("i", pItemData->alSockets[iSocketIndex]);
|
|
}
|
|
|
|
PyObject * safeboxGetItemAttribute(PyObject * poSelf, PyObject * poArgs)
|
|
{
|
|
int iSlotIndex;
|
|
if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
|
|
return Py_BuildException();
|
|
int iAttrSlotIndex;
|
|
if (!PyTuple_GetInteger(poArgs, 1, &iAttrSlotIndex))
|
|
return Py_BuildException();
|
|
|
|
if (iAttrSlotIndex >= 0 && iAttrSlotIndex < ITEM_ATTRIBUTE_SLOT_MAX_NUM)
|
|
{
|
|
TItemData * pItemData;
|
|
if (CPythonSafeBox::Instance().GetItemDataPtr(iSlotIndex, &pItemData))
|
|
return Py_BuildValue("ii", pItemData->aAttr[iAttrSlotIndex].bType, pItemData->aAttr[iAttrSlotIndex].sValue);
|
|
}
|
|
|
|
return Py_BuildValue("ii", 0, 0);
|
|
}
|
|
|
|
PyObject * safeboxGetMoney(PyObject * poSelf, PyObject * poArgs)
|
|
{
|
|
return Py_BuildValue("i", CPythonSafeBox::Instance().GetMoney());
|
|
}
|
|
|
|
PyObject * safeboxGetMallItemID(PyObject * poSelf, PyObject * poArgs)
|
|
{
|
|
int ipos;
|
|
if (!PyTuple_GetInteger(poArgs, 0, &ipos))
|
|
return Py_BadArgument();
|
|
|
|
TItemData * pInstance;
|
|
if (!CPythonSafeBox::Instance().GetMallItemDataPtr(ipos, &pInstance))
|
|
return Py_BuildException();
|
|
|
|
return Py_BuildValue("i", pInstance->vnum);
|
|
}
|
|
|
|
PyObject * safeboxGetMallItemCount(PyObject * poSelf, PyObject * poArgs)
|
|
{
|
|
int ipos;
|
|
if (!PyTuple_GetInteger(poArgs, 0, &ipos))
|
|
return Py_BadArgument();
|
|
|
|
TItemData * pInstance;
|
|
if (!CPythonSafeBox::Instance().GetMallItemDataPtr(ipos, &pInstance))
|
|
return Py_BuildException();
|
|
|
|
return Py_BuildValue("i", pInstance->count);
|
|
}
|
|
|
|
PyObject * safeboxGetMallItemMetinSocket(PyObject * poSelf, PyObject * poArgs)
|
|
{
|
|
int iSlotIndex;
|
|
if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
|
|
return Py_BadArgument();
|
|
int iSocketIndex;
|
|
if (!PyTuple_GetInteger(poArgs, 1, &iSocketIndex))
|
|
return Py_BadArgument();
|
|
|
|
if (iSocketIndex >= ITEM_SOCKET_SLOT_MAX_NUM)
|
|
return Py_BuildException();
|
|
|
|
TItemData * pItemData;
|
|
if (!CPythonSafeBox::Instance().GetMallItemDataPtr(iSlotIndex, &pItemData))
|
|
return Py_BuildException();
|
|
|
|
return Py_BuildValue("i", pItemData->alSockets[iSocketIndex]);
|
|
}
|
|
|
|
PyObject * safeboxGetMallItemAttribute(PyObject * poSelf, PyObject * poArgs)
|
|
{
|
|
int iSlotIndex;
|
|
if (!PyTuple_GetInteger(poArgs, 0, &iSlotIndex))
|
|
return Py_BuildException();
|
|
int iAttrSlotIndex;
|
|
if (!PyTuple_GetInteger(poArgs, 1, &iAttrSlotIndex))
|
|
return Py_BuildException();
|
|
|
|
if (iAttrSlotIndex >= 0 && iAttrSlotIndex < ITEM_ATTRIBUTE_SLOT_MAX_NUM)
|
|
{
|
|
TItemData * pItemData;
|
|
if (CPythonSafeBox::Instance().GetMallItemDataPtr(iSlotIndex, &pItemData))
|
|
return Py_BuildValue("ii", pItemData->aAttr[iAttrSlotIndex].bType, pItemData->aAttr[iAttrSlotIndex].sValue);
|
|
}
|
|
|
|
return Py_BuildValue("ii", 0, 0);
|
|
}
|
|
|
|
PyObject * safeboxGetMallSize(PyObject * poSelf, PyObject * poArgs)
|
|
{
|
|
return Py_BuildValue("i", CPythonSafeBox::Instance().GetMallSize());
|
|
}
|
|
|
|
void initsafebox()
|
|
{
|
|
static PyMethodDef s_methods[] =
|
|
{
|
|
// SafeBox
|
|
{ "GetCurrentSafeboxSize", safeboxGetCurrentSafeboxSize, METH_VARARGS },
|
|
{ "GetItemID", safeboxGetItemID, METH_VARARGS },
|
|
{ "GetItemCount", safeboxGetItemCount, METH_VARARGS },
|
|
{ "GetItemFlags", safeboxGetItemFlags, METH_VARARGS },
|
|
{ "GetItemMetinSocket", safeboxGetItemMetinSocket, METH_VARARGS },
|
|
{ "GetItemAttribute", safeboxGetItemAttribute, METH_VARARGS },
|
|
{ "GetMoney", safeboxGetMoney, METH_VARARGS },
|
|
|
|
// Mall
|
|
{ "GetMallItemID", safeboxGetMallItemID, METH_VARARGS },
|
|
{ "GetMallItemCount", safeboxGetMallItemCount, METH_VARARGS },
|
|
{ "GetMallItemMetinSocket", safeboxGetMallItemMetinSocket, METH_VARARGS },
|
|
{ "GetMallItemAttribute", safeboxGetMallItemAttribute, METH_VARARGS },
|
|
{ "GetMallSize", safeboxGetMallSize, METH_VARARGS },
|
|
{ NULL, NULL, NULL },
|
|
};
|
|
|
|
PyObject * poModule = Py_InitModule("safebox", s_methods);
|
|
PyModule_AddIntConstant(poModule, "SAFEBOX_SLOT_X_COUNT", CPythonSafeBox::SAFEBOX_SLOT_X_COUNT);
|
|
PyModule_AddIntConstant(poModule, "SAFEBOX_SLOT_Y_COUNT", CPythonSafeBox::SAFEBOX_SLOT_Y_COUNT);
|
|
PyModule_AddIntConstant(poModule, "SAFEBOX_PAGE_SIZE", CPythonSafeBox::SAFEBOX_PAGE_SIZE);
|
|
}
|