client/UserInterface/PythonNonPlayerModule.cpp

119 lines
3.8 KiB
C++

#include "StdAfx.h"
#include "PythonNonPlayer.h"
#include "InstanceBase.h"
#include "PythonCharacterManager.h"
PyObject * nonplayerGetEventType(PyObject * poSelf, PyObject * poArgs)
{
int iVirtualNumber;
if (!PyTuple_GetInteger(poArgs, 0, &iVirtualNumber))
return Py_BuildException();
BYTE iType = CPythonNonPlayer::Instance().GetEventType(iVirtualNumber);
return Py_BuildValue("i", iType);
}
PyObject * nonplayerGetEventTypeByVID(PyObject * poSelf, PyObject * poArgs)
{
int iVirtualID;
if (!PyTuple_GetInteger(poArgs, 0, &iVirtualID))
return Py_BuildException();
BYTE iType = CPythonNonPlayer::Instance().GetEventTypeByVID(iVirtualID);
return Py_BuildValue("i", iType);
}
PyObject * nonplayerGetLevelByVID(PyObject * poSelf, PyObject * poArgs)
{
int iVirtualID;
if (!PyTuple_GetInteger(poArgs, 0, &iVirtualID))
return Py_BuildException();
CInstanceBase * pInstance = CPythonCharacterManager::Instance().GetInstancePtr(iVirtualID);
if (!pInstance)
return Py_BuildValue("i", -1);
const CPythonNonPlayer::TMobTable * pMobTable = CPythonNonPlayer::Instance().GetTable(pInstance->GetVirtualNumber());
if (!pMobTable)
return Py_BuildValue("i", -1);
float fAverageLevel = pMobTable->bLevel;//(float(pMobTable->abLevelRange[0]) + float(pMobTable->abLevelRange[1])) / 2.0f;
fAverageLevel = floor(fAverageLevel + 0.5f);
return Py_BuildValue("i", int(fAverageLevel));
}
PyObject * nonplayerGetGradeByVID(PyObject * poSelf, PyObject * poArgs)
{
int iVirtualID;
if (!PyTuple_GetInteger(poArgs, 0, &iVirtualID))
return Py_BuildException();
CInstanceBase * pInstance = CPythonCharacterManager::Instance().GetInstancePtr(iVirtualID);
if (!pInstance)
return Py_BuildValue("i", -1);
const CPythonNonPlayer::TMobTable * pMobTable = CPythonNonPlayer::Instance().GetTable(pInstance->GetVirtualNumber());
if (!pMobTable)
return Py_BuildValue("i", -1);
return Py_BuildValue("i", pMobTable->bRank);
}
PyObject * nonplayerGetMonsterName(PyObject * poSelf, PyObject * poArgs)
{
int iVNum;
if (!PyTuple_GetInteger(poArgs, 0, &iVNum))
return Py_BuildException();
CPythonNonPlayer& rkNonPlayer=CPythonNonPlayer::Instance();
return Py_BuildValue("s", rkNonPlayer.GetMonsterName(iVNum));
}
PyObject * nonplayerLoadNonPlayerData(PyObject * poSelf, PyObject * poArgs)
{
char * szFileName;
if(!PyTuple_GetString(poArgs, 0, &szFileName))
return Py_BuildException();
CPythonNonPlayer::Instance().LoadNonPlayerData(szFileName);
return Py_BuildNone();
}
void initNonPlayer()
{
static PyMethodDef s_methods[] =
{
{ "GetEventType", nonplayerGetEventType, METH_VARARGS },
{ "GetEventTypeByVID", nonplayerGetEventTypeByVID, METH_VARARGS },
{ "GetLevelByVID", nonplayerGetLevelByVID, METH_VARARGS },
{ "GetGradeByVID", nonplayerGetGradeByVID, METH_VARARGS },
{ "GetMonsterName", nonplayerGetMonsterName, METH_VARARGS },
{ "LoadNonPlayerData", nonplayerLoadNonPlayerData, METH_VARARGS },
{ NULL, NULL, NULL },
};
PyObject * poModule = Py_InitModule("nonplayer", s_methods);
PyModule_AddIntConstant(poModule, "ON_CLICK_EVENT_NONE", CPythonNonPlayer::ON_CLICK_EVENT_NONE);
PyModule_AddIntConstant(poModule, "ON_CLICK_EVENT_BATTLE", CPythonNonPlayer::ON_CLICK_EVENT_BATTLE);
PyModule_AddIntConstant(poModule, "ON_CLICK_EVENT_SHOP", CPythonNonPlayer::ON_CLICK_EVENT_SHOP);
PyModule_AddIntConstant(poModule, "ON_CLICK_EVENT_TALK", CPythonNonPlayer::ON_CLICK_EVENT_TALK);
PyModule_AddIntConstant(poModule, "ON_CLICK_EVENT_VEHICLE", CPythonNonPlayer::ON_CLICK_EVENT_VEHICLE);
PyModule_AddIntConstant(poModule, "PAWN", 0);
PyModule_AddIntConstant(poModule, "S_PAWN", 1);
PyModule_AddIntConstant(poModule, "KNIGHT", 2);
PyModule_AddIntConstant(poModule, "S_KNIGHT", 3);
PyModule_AddIntConstant(poModule, "BOSS", 4);
PyModule_AddIntConstant(poModule, "KING", 5);
}