Marty-v58/source-client/Srcs/Client/UserInterface/PythonNonPlayerModule.cpp
2024-06-01 15:57:23 -05:00

446 lines
16 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();
}
#if defined(WJ_SHOW_MOB_INFO_EX) || defined(ENABLE_ELEMENTAL_TARGET)
PyObject * nonplayerGetVnumByVID(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);
return Py_BuildValue("i", pInstance->GetVirtualNumber());
}
PyObject* nonplayerGetMonsterRaceFlag(PyObject* poSelf, PyObject* poArgs)
{
int iVNum;
if (!PyTuple_GetInteger(poArgs, 0, &iVNum))
return Py_BuildException();
CPythonNonPlayer& rkNonPlayer = CPythonNonPlayer::Instance();
const CPythonNonPlayer::TMobTable* pkTab = rkNonPlayer.GetTable(iVNum);
return Py_BuildValue("i", pkTab->dwRaceFlag);
}
PyObject* nonplayerGetGoldMinByVID(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->dwGoldMin);
}
PyObject* nonplayerGetGoldMaxByVID(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->dwGoldMax);
}
PyObject* nonplayerGetExpByVID(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->dwExp);
}
PyObject* nonplayerGetMaxHPByVID(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->dwMaxHP);
}
PyObject* nonplayerGetDefByVID(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->wDef);
}
PyObject* nonplayerGetAIFlagByVID(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->dwAIFlag);
}
PyObject* nonplayerGetRaceFlagByVID(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->dwRaceFlag);
}
PyObject* nonplayerGetImmuneFlagByVID(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->dwImmuneFlag);
}
PyObject* nonplayerGetStrByVID(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->bStr);
}
PyObject* nonplayerGetDexByVID(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->bDex);
}
PyObject* nonplayerGetConByVID(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->bCon);
}
PyObject* nonplayerGetIntByVID(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->bInt);
}
PyObject* nonplayerGetDamageRangeMinByVID(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->dwDamageRange[0]);
}
PyObject* nonplayerGetDamageRangeMaxByVID(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->dwDamageRange[1]);
}
#endif
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 },
#if defined(WJ_SHOW_MOB_INFO_EX) || defined(ENABLE_ELEMENTAL_TARGET)
{ "GetVnumByVID", nonplayerGetVnumByVID, METH_VARARGS },
{ "GetMonsterRaceFlag", nonplayerGetMonsterRaceFlag, METH_VARARGS },
{ "GetGoldMinByVID", nonplayerGetGoldMinByVID, METH_VARARGS },
{ "GetGoldMaxByVID", nonplayerGetGoldMaxByVID, METH_VARARGS },
{ "GetExpByVID", nonplayerGetExpByVID, METH_VARARGS },
{ "GetMaxHPByVID", nonplayerGetMaxHPByVID, METH_VARARGS },
{ "GetDefByVID", nonplayerGetDefByVID, METH_VARARGS },
{ "GetAIFlagByVID", nonplayerGetAIFlagByVID, METH_VARARGS },
{ "GetRaceFlagByVID", nonplayerGetRaceFlagByVID, METH_VARARGS },
{ "GetImmuneFlagByVID", nonplayerGetImmuneFlagByVID, METH_VARARGS },
{ "GetStrByVID", nonplayerGetStrByVID, METH_VARARGS },
{ "GetDexByVID", nonplayerGetDexByVID, METH_VARARGS },
{ "GetConByVID", nonplayerGetConByVID, METH_VARARGS },
{ "GetIntByVID", nonplayerGetIntByVID, METH_VARARGS },
{ "GetDamageRangeMinByVID", nonplayerGetDamageRangeMinByVID, METH_VARARGS },
{ "GetDamageRangeMaxByVID", nonplayerGetDamageRangeMaxByVID, METH_VARARGS },
#endif
{ 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);
#if defined(WJ_SHOW_MOB_INFO_EX) || defined(ENABLE_ELEMENTAL_TARGET)
PyModule_AddIntConstant(poModule, "AIFLAG_AGGRESSIVE", CPythonNonPlayer::AIFLAG_AGGRESSIVE);
PyModule_AddIntConstant(poModule, "AIFLAG_NOMOVE", CPythonNonPlayer::AIFLAG_NOMOVE);
PyModule_AddIntConstant(poModule, "AIFLAG_COWARD", CPythonNonPlayer::AIFLAG_COWARD);
PyModule_AddIntConstant(poModule, "AIFLAG_NOATTACKSHINSU", CPythonNonPlayer::AIFLAG_NOATTACKSHINSU);
PyModule_AddIntConstant(poModule, "AIFLAG_NOATTACKJINNO", CPythonNonPlayer::AIFLAG_NOATTACKJINNO);
PyModule_AddIntConstant(poModule, "AIFLAG_NOATTACKCHUNJO", CPythonNonPlayer::AIFLAG_NOATTACKCHUNJO);
PyModule_AddIntConstant(poModule, "AIFLAG_ATTACKMOB", CPythonNonPlayer::AIFLAG_ATTACKMOB);
PyModule_AddIntConstant(poModule, "AIFLAG_BERSERK", CPythonNonPlayer::AIFLAG_BERSERK);
PyModule_AddIntConstant(poModule, "AIFLAG_STONESKIN", CPythonNonPlayer::AIFLAG_STONESKIN);
PyModule_AddIntConstant(poModule, "AIFLAG_GODSPEED", CPythonNonPlayer::AIFLAG_GODSPEED);
PyModule_AddIntConstant(poModule, "AIFLAG_DEATHBLOW", CPythonNonPlayer::AIFLAG_DEATHBLOW);
PyModule_AddIntConstant(poModule, "AIFLAG_REVIVE", CPythonNonPlayer::AIFLAG_REVIVE);
PyModule_AddIntConstant(poModule, "IMMUNE_STUN", CPythonNonPlayer::IMMUNE_STUN);
PyModule_AddIntConstant(poModule, "IMMUNE_SLOW", CPythonNonPlayer::IMMUNE_SLOW);
PyModule_AddIntConstant(poModule, "IMMUNE_FALL", CPythonNonPlayer::IMMUNE_FALL);
PyModule_AddIntConstant(poModule, "IMMUNE_CURSE", CPythonNonPlayer::IMMUNE_CURSE);
PyModule_AddIntConstant(poModule, "IMMUNE_POISON", CPythonNonPlayer::IMMUNE_POISON);
PyModule_AddIntConstant(poModule, "IMMUNE_TERROR", CPythonNonPlayer::IMMUNE_TERROR);
PyModule_AddIntConstant(poModule, "IMMUNE_REFLECT", CPythonNonPlayer::IMMUNE_REFLECT);
PyModule_AddIntConstant(poModule, "RACE_FLAG_ANIMAL", CPythonNonPlayer::RACE_FLAG_ANIMAL);
PyModule_AddIntConstant(poModule, "RACE_FLAG_UNDEAD", CPythonNonPlayer::RACE_FLAG_UNDEAD);
PyModule_AddIntConstant(poModule, "RACE_FLAG_DEVIL", CPythonNonPlayer::RACE_FLAG_DEVIL);
PyModule_AddIntConstant(poModule, "RACE_FLAG_HUMAN", CPythonNonPlayer::RACE_FLAG_HUMAN);
PyModule_AddIntConstant(poModule, "RACE_FLAG_ORC", CPythonNonPlayer::RACE_FLAG_ORC);
PyModule_AddIntConstant(poModule, "RACE_FLAG_MILGYO", CPythonNonPlayer::RACE_FLAG_MILGYO);
PyModule_AddIntConstant(poModule, "RACE_FLAG_INSECT", CPythonNonPlayer::RACE_FLAG_INSECT);
PyModule_AddIntConstant(poModule, "RACE_FLAG_FIRE", CPythonNonPlayer::RACE_FLAG_FIRE);
PyModule_AddIntConstant(poModule, "RACE_FLAG_ICE", CPythonNonPlayer::RACE_FLAG_ICE);
PyModule_AddIntConstant(poModule, "RACE_FLAG_DESERT", CPythonNonPlayer::RACE_FLAG_DESERT);
PyModule_AddIntConstant(poModule, "RACE_FLAG_TREE", CPythonNonPlayer::RACE_FLAG_TREE);
PyModule_AddIntConstant(poModule, "RACE_FLAG_ATT_ELEC", CPythonNonPlayer::RACE_FLAG_ATT_ELEC);
PyModule_AddIntConstant(poModule, "RACE_FLAG_ATT_FIRE", CPythonNonPlayer::RACE_FLAG_ATT_FIRE);
PyModule_AddIntConstant(poModule, "RACE_FLAG_ATT_ICE", CPythonNonPlayer::RACE_FLAG_ATT_ICE);
PyModule_AddIntConstant(poModule, "RACE_FLAG_ATT_WIND", CPythonNonPlayer::RACE_FLAG_ATT_WIND);
PyModule_AddIntConstant(poModule, "RACE_FLAG_ATT_EARTH", CPythonNonPlayer::RACE_FLAG_ATT_EARTH);
PyModule_AddIntConstant(poModule, "RACE_FLAG_ATT_DARK", CPythonNonPlayer::RACE_FLAG_ATT_DARK);
#endif
}
//martysama0134's 2e58d0b8baeb072acdf3afc4a5d1999f