port: P3-c PythonExchange + exchange module (1:1 40250)
Copy PythonExchange.cpp/PythonExchangeModule.cpp verbatim, drop the pending stand-in and the exchange module stub, register initTrade() after initNonPlayer(). The fake server answers CG_EXCHANGE START with the partner's item + gold and CANCEL with END; port.login_flow drives the exchange round-trip through the Python exchange/net modules and uiexchange. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
9298500df9
commit
72b19b677d
@@ -0,0 +1,248 @@
|
||||
#include "StdAfx.h"
|
||||
#include "PythonExchange.h"
|
||||
|
||||
void CPythonExchange::SetSelfName(const char *name)
|
||||
{
|
||||
strncpy(m_self.name, name, CHARACTER_NAME_MAX_LEN);
|
||||
}
|
||||
|
||||
void CPythonExchange::SetTargetName(const char *name)
|
||||
{
|
||||
strncpy(m_victim.name, name, CHARACTER_NAME_MAX_LEN);
|
||||
}
|
||||
|
||||
char * CPythonExchange::GetNameFromSelf()
|
||||
{
|
||||
return m_self.name;
|
||||
}
|
||||
|
||||
char * CPythonExchange::GetNameFromTarget()
|
||||
{
|
||||
return m_victim.name;
|
||||
}
|
||||
|
||||
void CPythonExchange::SetElkToTarget(DWORD elk)
|
||||
{
|
||||
m_victim.elk = elk;
|
||||
}
|
||||
|
||||
void CPythonExchange::SetElkToSelf(DWORD elk)
|
||||
{
|
||||
m_self.elk = elk;
|
||||
}
|
||||
|
||||
DWORD CPythonExchange::GetElkFromTarget()
|
||||
{
|
||||
return m_victim.elk;
|
||||
}
|
||||
|
||||
DWORD CPythonExchange::GetElkFromSelf()
|
||||
{
|
||||
return m_self.elk;
|
||||
}
|
||||
|
||||
void CPythonExchange::SetItemToTarget(DWORD pos, DWORD vnum, BYTE count)
|
||||
{
|
||||
if (pos >= EXCHANGE_ITEM_MAX_NUM)
|
||||
return;
|
||||
|
||||
m_victim.item_vnum[pos] = vnum;
|
||||
m_victim.item_count[pos] = count;
|
||||
}
|
||||
|
||||
void CPythonExchange::SetItemToSelf(DWORD pos, DWORD vnum, BYTE count)
|
||||
{
|
||||
if (pos >= EXCHANGE_ITEM_MAX_NUM)
|
||||
return;
|
||||
|
||||
m_self.item_vnum[pos] = vnum;
|
||||
m_self.item_count[pos] = count;
|
||||
}
|
||||
|
||||
void CPythonExchange::SetItemMetinSocketToTarget(int pos, int imetinpos, DWORD vnum)
|
||||
{
|
||||
if (pos >= EXCHANGE_ITEM_MAX_NUM)
|
||||
return;
|
||||
|
||||
m_victim.item_metin[pos][imetinpos] = vnum;
|
||||
}
|
||||
|
||||
void CPythonExchange::SetItemMetinSocketToSelf(int pos, int imetinpos, DWORD vnum)
|
||||
{
|
||||
if (pos >= EXCHANGE_ITEM_MAX_NUM)
|
||||
return;
|
||||
|
||||
m_self.item_metin[pos][imetinpos] = vnum;
|
||||
}
|
||||
|
||||
void CPythonExchange::SetItemAttributeToTarget(int pos, int iattrpos, BYTE byType, short sValue)
|
||||
{
|
||||
if (pos >= EXCHANGE_ITEM_MAX_NUM)
|
||||
return;
|
||||
|
||||
m_victim.item_attr[pos][iattrpos].bType = byType;
|
||||
m_victim.item_attr[pos][iattrpos].sValue = sValue;
|
||||
}
|
||||
|
||||
void CPythonExchange::SetItemAttributeToSelf(int pos, int iattrpos, BYTE byType, short sValue)
|
||||
{
|
||||
if (pos >= EXCHANGE_ITEM_MAX_NUM)
|
||||
return;
|
||||
|
||||
m_self.item_attr[pos][iattrpos].bType = byType;
|
||||
m_self.item_attr[pos][iattrpos].sValue = sValue;
|
||||
}
|
||||
|
||||
void CPythonExchange::DelItemOfTarget(BYTE pos)
|
||||
{
|
||||
if (pos >= EXCHANGE_ITEM_MAX_NUM)
|
||||
return;
|
||||
|
||||
m_victim.item_vnum[pos] = 0;
|
||||
m_victim.item_count[pos] = 0;
|
||||
}
|
||||
|
||||
void CPythonExchange::DelItemOfSelf(BYTE pos)
|
||||
{
|
||||
if (pos >= EXCHANGE_ITEM_MAX_NUM)
|
||||
return;
|
||||
|
||||
m_self.item_vnum[pos] = 0;
|
||||
m_self.item_count[pos] = 0;
|
||||
}
|
||||
|
||||
DWORD CPythonExchange::GetItemVnumFromTarget(BYTE pos)
|
||||
{
|
||||
if (pos >= EXCHANGE_ITEM_MAX_NUM)
|
||||
return 0;
|
||||
|
||||
return m_victim.item_vnum[pos];
|
||||
}
|
||||
|
||||
DWORD CPythonExchange::GetItemVnumFromSelf(BYTE pos)
|
||||
{
|
||||
if (pos >= EXCHANGE_ITEM_MAX_NUM)
|
||||
return 0;
|
||||
|
||||
return m_self.item_vnum[pos];
|
||||
}
|
||||
|
||||
BYTE CPythonExchange::GetItemCountFromTarget(BYTE pos)
|
||||
{
|
||||
if (pos >= EXCHANGE_ITEM_MAX_NUM)
|
||||
return 0;
|
||||
|
||||
return m_victim.item_count[pos];
|
||||
}
|
||||
|
||||
BYTE CPythonExchange::GetItemCountFromSelf(BYTE pos)
|
||||
{
|
||||
if (pos >= EXCHANGE_ITEM_MAX_NUM)
|
||||
return 0;
|
||||
|
||||
return m_self.item_count[pos];
|
||||
}
|
||||
|
||||
DWORD CPythonExchange::GetItemMetinSocketFromTarget(BYTE pos, int iMetinSocketPos)
|
||||
{
|
||||
if (pos >= EXCHANGE_ITEM_MAX_NUM)
|
||||
return 0;
|
||||
|
||||
return m_victim.item_metin[pos][iMetinSocketPos];
|
||||
}
|
||||
|
||||
DWORD CPythonExchange::GetItemMetinSocketFromSelf(BYTE pos, int iMetinSocketPos)
|
||||
{
|
||||
if (pos >= EXCHANGE_ITEM_MAX_NUM)
|
||||
return 0;
|
||||
|
||||
return m_self.item_metin[pos][iMetinSocketPos];
|
||||
}
|
||||
|
||||
void CPythonExchange::GetItemAttributeFromTarget(BYTE pos, int iAttrPos, BYTE * pbyType, short * psValue)
|
||||
{
|
||||
if (pos >= EXCHANGE_ITEM_MAX_NUM)
|
||||
return;
|
||||
|
||||
*pbyType = m_victim.item_attr[pos][iAttrPos].bType;
|
||||
*psValue = m_victim.item_attr[pos][iAttrPos].sValue;
|
||||
}
|
||||
|
||||
void CPythonExchange::GetItemAttributeFromSelf(BYTE pos, int iAttrPos, BYTE * pbyType, short * psValue)
|
||||
{
|
||||
if (pos >= EXCHANGE_ITEM_MAX_NUM)
|
||||
return;
|
||||
|
||||
*pbyType = m_self.item_attr[pos][iAttrPos].bType;
|
||||
*psValue = m_self.item_attr[pos][iAttrPos].sValue;
|
||||
}
|
||||
|
||||
void CPythonExchange::SetAcceptToTarget(BYTE Accept)
|
||||
{
|
||||
m_victim.accept = Accept ? true : false;
|
||||
}
|
||||
|
||||
void CPythonExchange::SetAcceptToSelf(BYTE Accept)
|
||||
{
|
||||
m_self.accept = Accept ? true : false;
|
||||
}
|
||||
|
||||
bool CPythonExchange::GetAcceptFromTarget()
|
||||
{
|
||||
return m_victim.accept ? true : false;
|
||||
}
|
||||
|
||||
bool CPythonExchange::GetAcceptFromSelf()
|
||||
{
|
||||
return m_self.accept ? true : false;
|
||||
}
|
||||
|
||||
bool CPythonExchange::GetElkMode()
|
||||
{
|
||||
return m_elk_mode;
|
||||
}
|
||||
|
||||
void CPythonExchange::SetElkMode(bool value)
|
||||
{
|
||||
m_elk_mode = value;
|
||||
}
|
||||
|
||||
void CPythonExchange::Start()
|
||||
{
|
||||
m_isTrading = true;
|
||||
}
|
||||
|
||||
void CPythonExchange::End()
|
||||
{
|
||||
m_isTrading = false;
|
||||
}
|
||||
|
||||
bool CPythonExchange::isTrading()
|
||||
{
|
||||
return m_isTrading;
|
||||
}
|
||||
|
||||
void CPythonExchange::Clear()
|
||||
{
|
||||
memset(&m_self, 0, sizeof(m_self));
|
||||
memset(&m_victim, 0, sizeof(m_victim));
|
||||
/*
|
||||
m_self.item_vnum[0] = 30;
|
||||
m_victim.item_vnum[0] = 30;
|
||||
m_victim.item_vnum[1] = 40;
|
||||
m_victim.item_vnum[2] = 50;
|
||||
*/
|
||||
}
|
||||
|
||||
CPythonExchange::CPythonExchange()
|
||||
{
|
||||
Clear();
|
||||
m_isTrading = false;
|
||||
m_elk_mode = false;
|
||||
// Clear로 옴겨놓으면 안됨.
|
||||
// trade_start 페킷이 오면 Clear를 실행하는데
|
||||
// m_elk_mode는 클리어 되선 안됨.;
|
||||
}
|
||||
CPythonExchange::~CPythonExchange()
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
#include "StdAfx.h"
|
||||
#include "PythonExchange.h"
|
||||
|
||||
PyObject * exchangeInitTrading(PyObject * poSelf, PyObject * poArgs)
|
||||
{
|
||||
CPythonExchange::Instance().End();
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * exchangeisTrading(PyObject * poSelf, PyObject * poArgs)
|
||||
{
|
||||
return Py_BuildValue("i", CPythonExchange::Instance().isTrading());
|
||||
}
|
||||
|
||||
PyObject * exchangeGetElkFromSelf(PyObject * poSelf, PyObject * poArgs)
|
||||
{
|
||||
return Py_BuildValue("i", CPythonExchange::Instance().GetElkFromSelf());
|
||||
}
|
||||
|
||||
PyObject * exchangeGetElkFromTarget(PyObject * poSelf, PyObject * poArgs)
|
||||
{
|
||||
return Py_BuildValue("i", CPythonExchange::Instance().GetElkFromTarget());
|
||||
}
|
||||
|
||||
PyObject * exchangeGetAcceptFromSelf(PyObject * poSelf, PyObject * poArgs)
|
||||
{
|
||||
return Py_BuildValue("i", CPythonExchange::Instance().GetAcceptFromSelf());
|
||||
}
|
||||
|
||||
PyObject * exchangeGetAcceptFromTarget(PyObject * poSelf, PyObject * poArgs)
|
||||
{
|
||||
return Py_BuildValue("i", CPythonExchange::Instance().GetAcceptFromTarget());
|
||||
}
|
||||
|
||||
PyObject * exchangeGetItemVnumFromSelf(PyObject * poSelf, PyObject * poArgs)
|
||||
{
|
||||
int pos;
|
||||
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &pos))
|
||||
return Py_BuildException();
|
||||
|
||||
return Py_BuildValue("i", CPythonExchange::Instance().GetItemVnumFromSelf((char) pos));
|
||||
}
|
||||
|
||||
PyObject * exchangeGetItemVnumFromTarget(PyObject * poTarget, PyObject * poArgs)
|
||||
{
|
||||
int pos;
|
||||
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &pos))
|
||||
return Py_BuildException();
|
||||
|
||||
return Py_BuildValue("i", CPythonExchange::Instance().GetItemVnumFromTarget((char) pos));
|
||||
}
|
||||
|
||||
PyObject * exchangeGetItemCountFromSelf(PyObject * poSelf, PyObject * poArgs)
|
||||
{
|
||||
int pos;
|
||||
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &pos))
|
||||
return Py_BuildException();
|
||||
|
||||
return Py_BuildValue("i", CPythonExchange::Instance().GetItemCountFromSelf((char) pos));
|
||||
}
|
||||
|
||||
PyObject * exchangeGetItemCountFromTarget(PyObject * poTarget, PyObject * poArgs)
|
||||
{
|
||||
int pos;
|
||||
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &pos))
|
||||
return Py_BuildException();
|
||||
|
||||
return Py_BuildValue("i", CPythonExchange::Instance().GetItemCountFromTarget((char) pos));
|
||||
}
|
||||
|
||||
PyObject * exchangeGetNameFromSelf(PyObject * poTarget, PyObject * poArgs)
|
||||
{
|
||||
return Py_BuildValue("s", CPythonExchange::Instance().GetNameFromSelf());
|
||||
}
|
||||
|
||||
PyObject * exchangeGetNameFromTarget(PyObject * poTarget, PyObject * poArgs)
|
||||
{
|
||||
return Py_BuildValue("s", CPythonExchange::Instance().GetNameFromTarget());
|
||||
}
|
||||
|
||||
PyObject * exchangeGetItemMetinSocketFromTarget(PyObject * poTarget, PyObject * poArgs)
|
||||
{
|
||||
int pos;
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &pos))
|
||||
return Py_BuildException();
|
||||
int iMetinSocketPos;
|
||||
if (!PyTuple_GetInteger(poArgs, 1, &iMetinSocketPos))
|
||||
return Py_BuildException();
|
||||
return Py_BuildValue("i", CPythonExchange::Instance().GetItemMetinSocketFromTarget(pos, iMetinSocketPos));
|
||||
}
|
||||
|
||||
PyObject * exchangeGetItemMetinSocketFromSelf(PyObject * poTarget, PyObject * poArgs)
|
||||
{
|
||||
int pos;
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &pos))
|
||||
return Py_BuildException();
|
||||
int iMetinSocketPos;
|
||||
if (!PyTuple_GetInteger(poArgs, 1, &iMetinSocketPos))
|
||||
return Py_BuildException();
|
||||
return Py_BuildValue("i", CPythonExchange::Instance().GetItemMetinSocketFromSelf(pos, iMetinSocketPos));
|
||||
}
|
||||
|
||||
PyObject * exchangeGetItemAttributeFromTarget(PyObject * poTarget, PyObject * poArgs)
|
||||
{
|
||||
int pos;
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &pos))
|
||||
return Py_BuildException();
|
||||
int iAttrSlotPos;
|
||||
if (!PyTuple_GetInteger(poArgs, 1, &iAttrSlotPos))
|
||||
return Py_BuildException();
|
||||
|
||||
BYTE byType;
|
||||
short sValue;
|
||||
CPythonExchange::Instance().GetItemAttributeFromTarget(pos, iAttrSlotPos, &byType, &sValue);
|
||||
|
||||
return Py_BuildValue("ii", byType, sValue);
|
||||
}
|
||||
|
||||
PyObject * exchangeGetItemAttributeFromSelf(PyObject * poTarget, PyObject * poArgs)
|
||||
{
|
||||
int pos;
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &pos))
|
||||
return Py_BuildException();
|
||||
int iAttrSlotPos;
|
||||
if (!PyTuple_GetInteger(poArgs, 1, &iAttrSlotPos))
|
||||
return Py_BuildException();
|
||||
|
||||
BYTE byType;
|
||||
short sValue;
|
||||
CPythonExchange::Instance().GetItemAttributeFromSelf(pos, iAttrSlotPos, &byType, &sValue);
|
||||
|
||||
return Py_BuildValue("ii", byType, sValue);
|
||||
}
|
||||
|
||||
PyObject * exchangeGetElkMode(PyObject * poTarget, PyObject * poArgs)
|
||||
{
|
||||
return Py_BuildValue("b", CPythonExchange::Instance().GetElkMode());
|
||||
}
|
||||
|
||||
PyObject * exchangeSetElkMode(PyObject * poTarget, PyObject * poArgs)
|
||||
{
|
||||
int elk_mode;
|
||||
|
||||
if (!PyTuple_GetInteger(poArgs, 0, &elk_mode))
|
||||
return Py_BuildException();
|
||||
|
||||
CPythonExchange::Instance().SetElkMode(elk_mode ? true : false);
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
void initTrade()
|
||||
{
|
||||
static PyMethodDef s_methods[] =
|
||||
{
|
||||
{"InitTrading", exchangeInitTrading, METH_VARARGS},
|
||||
{"isTrading", exchangeisTrading, METH_VARARGS},
|
||||
|
||||
{"GetElkFromSelf", exchangeGetElkFromSelf, METH_VARARGS},
|
||||
{"GetElkFromTarget", exchangeGetElkFromTarget, METH_VARARGS},
|
||||
|
||||
{"GetItemVnumFromSelf", exchangeGetItemVnumFromSelf, METH_VARARGS},
|
||||
{"GetItemVnumFromTarget", exchangeGetItemVnumFromTarget, METH_VARARGS},
|
||||
|
||||
{"GetItemCountFromSelf", exchangeGetItemCountFromSelf, METH_VARARGS},
|
||||
{"GetItemCountFromTarget", exchangeGetItemCountFromTarget, METH_VARARGS},
|
||||
|
||||
{"GetAcceptFromSelf", exchangeGetAcceptFromSelf, METH_VARARGS},
|
||||
{"GetAcceptFromTarget", exchangeGetAcceptFromTarget, METH_VARARGS},
|
||||
|
||||
{"GetNameFromSelf", exchangeGetNameFromSelf, METH_VARARGS},
|
||||
{"GetNameFromTarget", exchangeGetNameFromTarget, METH_VARARGS},
|
||||
|
||||
{"GetItemMetinSocketFromTarget", exchangeGetItemMetinSocketFromTarget, METH_VARARGS},
|
||||
{"GetItemMetinSocketFromSelf", exchangeGetItemMetinSocketFromSelf, METH_VARARGS},
|
||||
|
||||
{"GetItemAttributeFromTarget", exchangeGetItemAttributeFromTarget, METH_VARARGS},
|
||||
{"GetItemAttributeFromSelf", exchangeGetItemAttributeFromSelf, METH_VARARGS},
|
||||
|
||||
{"GetElkMode", exchangeGetElkMode, METH_VARARGS},
|
||||
{"SetElkMode", exchangeSetElkMode, METH_VARARGS},
|
||||
|
||||
{NULL, NULL},
|
||||
};
|
||||
|
||||
PyObject * poModule = Py_InitModule("exchange", s_methods);
|
||||
PyModule_AddIntConstant(poModule, "EXCHANGE_ITEM_MAX_NUM", CPythonExchange::EXCHANGE_ITEM_MAX_NUM);
|
||||
}
|
||||
@@ -49,6 +49,7 @@ void initchrmgr();
|
||||
void initPlayer();
|
||||
void initItem();
|
||||
void initNonPlayer();
|
||||
void initTrade();
|
||||
void initChat();
|
||||
void initnet();
|
||||
void initeffect();
|
||||
|
||||
Reference in New Issue
Block a user