192 lines
4.9 KiB
C++
192 lines
4.9 KiB
C++
#include "StdAfx.h"
|
|
|
|
#ifdef ENABLE_ACCE_COSTUME_SYSTEM
|
|
#include "PythonAcce.h"
|
|
#include "PythonNetworkStream.h"
|
|
|
|
CPythonAcce::CPythonAcce()
|
|
{
|
|
Clear();
|
|
}
|
|
|
|
CPythonAcce::~CPythonAcce()
|
|
{
|
|
Clear();
|
|
}
|
|
|
|
void CPythonAcce::Clear()
|
|
{
|
|
dwPrice = 0;
|
|
|
|
ZeroMemory(&m_vAcceResult, sizeof(m_vAcceResult));
|
|
|
|
m_vAcceMaterials.clear();
|
|
m_vAcceMaterials.resize(ACCE_WINDOW_MAX_MATERIALS);
|
|
|
|
ZeroMemory(m_vAcceMaterials.data() , m_vAcceMaterials.size() * sizeof(m_vAcceMaterials[0]));
|
|
}
|
|
|
|
void CPythonAcce::AddMaterial(DWORD dwRefPrice, BYTE bPos, TItemPos tPos)
|
|
{
|
|
if (bPos >= ACCE_WINDOW_MAX_MATERIALS)
|
|
return;
|
|
|
|
if (bPos == 0)
|
|
dwPrice = dwRefPrice;
|
|
|
|
TAcceMaterial& tMaterial=m_vAcceMaterials[bPos];
|
|
tMaterial.bHere = 1;
|
|
tMaterial.wCell = tPos.cell;
|
|
}
|
|
|
|
void CPythonAcce::AddResult(DWORD dwItemVnum, DWORD dwMinAbs, DWORD dwMaxAbs)
|
|
{
|
|
TAcceResult& tResult = m_vAcceResult;
|
|
tResult.dwItemVnum = dwItemVnum;
|
|
tResult.dwMinAbs = dwMinAbs;
|
|
tResult.dwMaxAbs = dwMaxAbs;
|
|
}
|
|
|
|
void CPythonAcce::RemoveMaterial(DWORD dwRefPrice, BYTE bPos)
|
|
{
|
|
if (bPos >= ACCE_WINDOW_MAX_MATERIALS)
|
|
return;
|
|
|
|
if (bPos == 1)
|
|
dwPrice = dwRefPrice;
|
|
|
|
memset(&m_vAcceMaterials[bPos], 0, sizeof(TAcceMaterial));
|
|
}
|
|
|
|
bool CPythonAcce::GetAttachedItem(BYTE bPos, BYTE & bHere, WORD & wCell)
|
|
{
|
|
if (bPos >= ACCE_WINDOW_MAX_MATERIALS)
|
|
return false;
|
|
|
|
bHere = m_vAcceMaterials[bPos].bHere;
|
|
wCell = m_vAcceMaterials[bPos].wCell;
|
|
return true;
|
|
}
|
|
|
|
void CPythonAcce::GetResultItem(DWORD & dwItemVnum, DWORD & dwMinAbs, DWORD & dwMaxAbs)
|
|
{
|
|
dwItemVnum = m_vAcceResult.dwItemVnum;
|
|
dwMinAbs = m_vAcceResult.dwMinAbs;
|
|
dwMaxAbs = m_vAcceResult.dwMaxAbs;
|
|
}
|
|
|
|
PyObject * SendAcceCloseRequest(PyObject * poSelf, PyObject * poArgs)
|
|
{
|
|
CPythonNetworkStream & rkNetStream = CPythonNetworkStream::Instance();
|
|
rkNetStream.SendAcceClosePacket();
|
|
return Py_BuildNone();
|
|
}
|
|
|
|
PyObject * AcceClear(PyObject * poSelf, PyObject * poArgs)
|
|
{
|
|
CPythonAcce::Instance().Clear();
|
|
return Py_BuildNone();
|
|
}
|
|
|
|
PyObject * SendAcceAdd(PyObject * poSelf, PyObject * poArgs)
|
|
{
|
|
BYTE bPos=0;
|
|
TItemPos tPos;
|
|
if (!PyTuple_GetInteger(poArgs, 0, &tPos.window_type))
|
|
return Py_BuildException();
|
|
else if (!PyTuple_GetInteger(poArgs, 1, &tPos.cell))
|
|
return Py_BuildException();
|
|
else if (!PyTuple_GetInteger(poArgs, 2, &bPos))
|
|
return Py_BuildException();
|
|
|
|
CPythonNetworkStream & rkNetStream = CPythonNetworkStream::Instance();
|
|
rkNetStream.SendAcceAddPacket(tPos, bPos);
|
|
return Py_BuildNone();
|
|
}
|
|
|
|
PyObject * SendAcceRemove(PyObject * poSelf, PyObject * poArgs)
|
|
{
|
|
BYTE bPos;
|
|
if (!PyTuple_GetInteger(poArgs, 0, &bPos))
|
|
return Py_BuildException();
|
|
|
|
CPythonNetworkStream & rkNetStream = CPythonNetworkStream::Instance();
|
|
rkNetStream.SendAcceRemovePacket(bPos);
|
|
return Py_BuildNone();
|
|
}
|
|
|
|
PyObject * GetAccePrice(PyObject * poSelf, PyObject * poArgs)
|
|
{
|
|
return Py_BuildValue("i", CPythonAcce::Instance().GetPrice());
|
|
}
|
|
|
|
PyObject * GetAcceAttachedItem(PyObject * poSelf, PyObject * poArgs)
|
|
{
|
|
BYTE bPos;
|
|
if (!PyTuple_GetInteger(poArgs, 0, &bPos))
|
|
return Py_BuildException();
|
|
|
|
BYTE bHere;
|
|
WORD wCell;
|
|
bool bGet = CPythonAcce::Instance().GetAttachedItem(bPos, bHere, wCell);
|
|
if (!bGet)
|
|
{
|
|
bHere = 0;
|
|
wCell = 0;
|
|
}
|
|
|
|
return Py_BuildValue("ii", bHere, wCell);
|
|
}
|
|
|
|
PyObject * GetAcceResultItem(PyObject * poSelf, PyObject * poArgs)
|
|
{
|
|
DWORD dwItemVnum, dwMinAbs, dwMaxAbs;
|
|
CPythonAcce::Instance().GetResultItem(dwItemVnum, dwMinAbs, dwMaxAbs);
|
|
return Py_BuildValue("iii", dwItemVnum, dwMinAbs, dwMaxAbs);
|
|
}
|
|
|
|
PyObject * SendAcceRefineRequest(PyObject * poSelf, PyObject * poArgs)
|
|
{
|
|
BYTE bHere;
|
|
WORD wCell;
|
|
bool bGet = CPythonAcce::Instance().GetAttachedItem(1, bHere, wCell);
|
|
if (bGet)
|
|
{
|
|
if (bHere)
|
|
{
|
|
CPythonNetworkStream & rkNetStream = CPythonNetworkStream::Instance();
|
|
rkNetStream.SendAcceRefinePacket();
|
|
}
|
|
}
|
|
|
|
return Py_BuildNone();
|
|
}
|
|
|
|
void initAcce()
|
|
{
|
|
static PyMethodDef functions[] = {
|
|
{"Clear", AcceClear, METH_VARARGS},
|
|
{"SendCloseRequest", SendAcceCloseRequest, METH_VARARGS},
|
|
{"Add", SendAcceAdd, METH_VARARGS},
|
|
{"Remove", SendAcceRemove, METH_VARARGS},
|
|
{"GetPrice", GetAccePrice, METH_VARARGS},
|
|
{"GetAttachedItem", GetAcceAttachedItem, METH_VARARGS},
|
|
{"GetResultItem", GetAcceResultItem, METH_VARARGS},
|
|
{"SendRefineRequest", SendAcceRefineRequest, METH_VARARGS},
|
|
|
|
{NULL, NULL, NULL},
|
|
};
|
|
|
|
PyObject* pModule = Py_InitModule("acce", functions);
|
|
PyModule_AddIntConstant(pModule, "ABSORPTION_SOCKET", ACCE_ABSORPTION_SOCKET);
|
|
PyModule_AddIntConstant(pModule, "ABSORBED_SOCKET", ACCE_ABSORBED_SOCKET);
|
|
PyModule_AddIntConstant(pModule, "CLEAN_ATTR_VALUE0", ACCE_CLEAN_ATTR_VALUE0);
|
|
PyModule_AddIntConstant(pModule, "WINDOW_MAX_MATERIALS", ACCE_WINDOW_MAX_MATERIALS);
|
|
PyModule_AddIntConstant(pModule, "CLEAN_ATTR_VALUE_FIELD", 0);
|
|
PyModule_AddIntConstant(pModule, "LIMIT_RANGE", 1000);
|
|
PyModule_AddIntConstant(pModule, "ACCE_REVERSAL_VNUM_1", ACCE_REVERSAL_VNUM_1);
|
|
PyModule_AddIntConstant(pModule, "ACCE_REVERSAL_VNUM_2", ACCE_REVERSAL_VNUM_2);
|
|
}
|
|
#endif
|
|
//martysama0134's 2e58d0b8baeb072acdf3afc4a5d1999f
|