631 lines
16 KiB
C++
631 lines
16 KiB
C++
#pragma once
|
|
// #define ENABLE_NEW_MOB_PROTO_STRUCT_20141125 // bleeding resistance 2014/11/25
|
|
// #define ENABLE_NEW_MOB_PROTO_STRUCT_20151020 // claw resistance 2015/10/20
|
|
|
|
class CPythonNonPlayer : public CSingleton<CPythonNonPlayer>
|
|
{
|
|
public:
|
|
enum EClickEvent
|
|
{
|
|
ON_CLICK_EVENT_NONE = 0,
|
|
ON_CLICK_EVENT_BATTLE = 1,
|
|
ON_CLICK_EVENT_SHOP = 2,
|
|
ON_CLICK_EVENT_TALK = 3,
|
|
ON_CLICK_EVENT_VEHICLE = 4,
|
|
|
|
ON_CLICK_EVENT_MAX_NUM,
|
|
};
|
|
|
|
#ifdef WJ_SHOW_MOB_INFO
|
|
enum EAIFlags
|
|
{
|
|
AIFLAG_AGGRESSIVE = (1 << 0),
|
|
AIFLAG_NOMOVE = (1 << 1),
|
|
AIFLAG_COWARD = (1 << 2),
|
|
AIFLAG_NOATTACKSHINSU = (1 << 3),
|
|
AIFLAG_NOATTACKJINNO = (1 << 4),
|
|
AIFLAG_NOATTACKCHUNJO = (1 << 5),
|
|
AIFLAG_ATTACKMOB = (1 << 6 ),
|
|
AIFLAG_BERSERK = (1 << 7),
|
|
AIFLAG_STONESKIN = (1 << 8),
|
|
AIFLAG_GODSPEED = (1 << 9),
|
|
AIFLAG_DEATHBLOW = (1 << 10),
|
|
AIFLAG_REVIVE = (1 << 11),
|
|
};
|
|
#endif
|
|
|
|
#ifdef WJ_SHOW_MOB_INFO_EX
|
|
enum EImmuneFlags
|
|
{
|
|
IMMUNE_STUN = (1 << 0),
|
|
IMMUNE_SLOW = (1 << 1),
|
|
IMMUNE_FALL = (1 << 2),
|
|
IMMUNE_CURSE = (1 << 3),
|
|
IMMUNE_POISON = (1 << 4),
|
|
IMMUNE_TERROR = (1 << 5),
|
|
IMMUNE_REFLECT = (1 << 6),
|
|
};
|
|
|
|
enum ERaceFlags
|
|
{
|
|
RACE_FLAG_ANIMAL = (1 << 0),
|
|
RACE_FLAG_UNDEAD = (1 << 1),
|
|
RACE_FLAG_DEVIL = (1 << 2),
|
|
RACE_FLAG_HUMAN = (1 << 3),
|
|
RACE_FLAG_ORC = (1 << 4),
|
|
RACE_FLAG_MILGYO = (1 << 5),
|
|
RACE_FLAG_INSECT = (1 << 6),
|
|
RACE_FLAG_FIRE = (1 << 7),
|
|
RACE_FLAG_ICE = (1 << 8),
|
|
RACE_FLAG_DESERT = (1 << 9),
|
|
RACE_FLAG_TREE = (1 << 10),
|
|
RACE_FLAG_ATT_ELEC = (1 << 11),
|
|
RACE_FLAG_ATT_FIRE = (1 << 12),
|
|
RACE_FLAG_ATT_ICE = (1 << 13),
|
|
RACE_FLAG_ATT_WIND = (1 << 14),
|
|
RACE_FLAG_ATT_EARTH = (1 << 15),
|
|
RACE_FLAG_ATT_DARK = (1 << 16),
|
|
RACE_FLAG_MAX_NUM = 17,
|
|
};
|
|
#endif
|
|
|
|
enum EMobEnchants
|
|
{
|
|
MOB_ENCHANT_CURSE,
|
|
MOB_ENCHANT_SLOW,
|
|
MOB_ENCHANT_POISON,
|
|
MOB_ENCHANT_STUN,
|
|
MOB_ENCHANT_CRITICAL,
|
|
MOB_ENCHANT_PENETRATE,
|
|
MOB_ENCHANTS_MAX_NUM
|
|
};
|
|
enum EMobResists
|
|
{
|
|
MOB_RESIST_SWORD,
|
|
MOB_RESIST_TWOHAND,
|
|
MOB_RESIST_DAGGER,
|
|
MOB_RESIST_BELL,
|
|
MOB_RESIST_FAN,
|
|
MOB_RESIST_BOW,
|
|
MOB_RESIST_FIRE,
|
|
MOB_RESIST_ELECT,
|
|
MOB_RESIST_MAGIC,
|
|
MOB_RESIST_WIND,
|
|
MOB_RESIST_POISON,
|
|
MOB_RESISTS_MAX_NUM
|
|
};
|
|
|
|
enum EMobMaxNum
|
|
{
|
|
MOB_ATTRIBUTE_MAX_NUM = 12,
|
|
MOB_SKILL_MAX_NUM = 5,
|
|
};
|
|
|
|
#pragma pack(push)
|
|
#pragma pack(1)
|
|
typedef struct SMobSkillLevel
|
|
{
|
|
DWORD dwVnum;
|
|
BYTE bLevel;
|
|
} TMobSkillLevel;
|
|
|
|
typedef struct SMobTable_r235
|
|
{
|
|
enum EMobMaxNum
|
|
{
|
|
MOB_ATTRIBUTE_MAX_NUM = 12,
|
|
MOB_SKILL_MAX_NUM = 1,//r1
|
|
};
|
|
|
|
DWORD dwVnum;
|
|
char szName[CHARACTER_NAME_MAX_LEN + 1];
|
|
char szLocaleName[CHARACTER_NAME_MAX_LEN + 1];
|
|
|
|
BYTE bType; // Monster, NPC
|
|
BYTE bRank; // PAWN, KNIGHT, KING
|
|
BYTE bBattleType; // MELEE, etc..
|
|
BYTE bLevel; // Level
|
|
BYTE bSize;
|
|
|
|
DWORD dwGoldMin;
|
|
DWORD dwGoldMax;
|
|
DWORD dwExp;
|
|
DWORD dwMaxHP;
|
|
BYTE bRegenCycle;
|
|
BYTE bRegenPercent;
|
|
WORD wDef;
|
|
|
|
DWORD dwAIFlag;
|
|
DWORD dwRaceFlag;
|
|
DWORD dwImmuneFlag;
|
|
|
|
BYTE bStr, bDex, bCon, bInt;
|
|
DWORD dwDamageRange[2];
|
|
|
|
short sAttackSpeed;
|
|
short sMovingSpeed;
|
|
BYTE bAggresiveHPPct;
|
|
WORD wAggressiveSight;
|
|
WORD wAttackRange;
|
|
|
|
char cEnchants[MOB_ENCHANTS_MAX_NUM];
|
|
char cResists[MOB_RESISTS_MAX_NUM];
|
|
|
|
DWORD dwResurrectionVnum;
|
|
DWORD dwDropItemVnum;
|
|
|
|
BYTE bMountCapacity;
|
|
BYTE bOnClickType;
|
|
|
|
BYTE bEmpire;
|
|
char szFolder[64 + 1];
|
|
float fDamMultiply;
|
|
DWORD dwSummonVnum;
|
|
DWORD dwDrainSP;
|
|
DWORD dwMonsterColor;
|
|
DWORD dwPolymorphItemVnum;
|
|
|
|
TMobSkillLevel Skills[SMobTable_r235::MOB_SKILL_MAX_NUM];
|
|
|
|
BYTE bBerserkPoint;
|
|
BYTE bStoneSkinPoint;
|
|
BYTE bGodSpeedPoint;
|
|
BYTE bDeathBlowPoint;
|
|
BYTE bRevivePoint;
|
|
} TMobTable_r235;
|
|
|
|
typedef struct SMobTable_r255
|
|
{
|
|
DWORD dwVnum;
|
|
char szName[CHARACTER_NAME_MAX_LEN + 1];
|
|
char szLocaleName[CHARACTER_NAME_MAX_LEN + 1];
|
|
|
|
BYTE bType; // Monster, NPC
|
|
BYTE bRank; // PAWN, KNIGHT, KING
|
|
BYTE bBattleType; // MELEE, etc..
|
|
BYTE bLevel; // Level
|
|
BYTE bSize;
|
|
|
|
DWORD dwGoldMin;
|
|
DWORD dwGoldMax;
|
|
DWORD dwExp;
|
|
DWORD dwMaxHP;
|
|
BYTE bRegenCycle;
|
|
BYTE bRegenPercent;
|
|
WORD wDef;
|
|
|
|
DWORD dwAIFlag;
|
|
DWORD dwRaceFlag;
|
|
DWORD dwImmuneFlag;
|
|
|
|
BYTE bStr, bDex, bCon, bInt;
|
|
DWORD dwDamageRange[2];
|
|
|
|
short sAttackSpeed;
|
|
short sMovingSpeed;
|
|
BYTE bAggresiveHPPct;
|
|
WORD wAggressiveSight;
|
|
WORD wAttackRange;
|
|
|
|
char cEnchants[MOB_ENCHANTS_MAX_NUM];
|
|
char cResists[MOB_RESISTS_MAX_NUM];
|
|
|
|
DWORD dwResurrectionVnum;
|
|
DWORD dwDropItemVnum;
|
|
|
|
BYTE bMountCapacity;
|
|
BYTE bOnClickType;
|
|
|
|
BYTE bEmpire;
|
|
char szFolder[64 + 1];
|
|
float fDamMultiply;
|
|
DWORD dwSummonVnum;
|
|
DWORD dwDrainSP;
|
|
DWORD dwMonsterColor;
|
|
DWORD dwPolymorphItemVnum;
|
|
|
|
TMobSkillLevel Skills[MOB_SKILL_MAX_NUM];
|
|
|
|
BYTE bBerserkPoint;
|
|
BYTE bStoneSkinPoint;
|
|
BYTE bGodSpeedPoint;
|
|
BYTE bDeathBlowPoint;
|
|
BYTE bRevivePoint;
|
|
} TMobTable_r255;
|
|
|
|
typedef struct SMobTable_r256
|
|
{
|
|
enum EMobResists_r3
|
|
{
|
|
MOB_RESIST_SWORD,
|
|
MOB_RESIST_TWOHAND,
|
|
MOB_RESIST_DAGGER,
|
|
MOB_RESIST_BELL,
|
|
MOB_RESIST_FAN,
|
|
MOB_RESIST_BOW,
|
|
MOB_RESIST_FIRE,
|
|
MOB_RESIST_ELECT,
|
|
MOB_RESIST_MAGIC,
|
|
MOB_RESIST_WIND,
|
|
MOB_RESIST_POISON,
|
|
MOB_RESIST_BLEEDING,//r3
|
|
MOB_RESISTS_MAX_NUM
|
|
};
|
|
|
|
DWORD dwVnum;
|
|
char szName[CHARACTER_NAME_MAX_LEN + 1];
|
|
char szLocaleName[CHARACTER_NAME_MAX_LEN + 1];
|
|
|
|
BYTE bType; // Monster, NPC
|
|
BYTE bRank; // PAWN, KNIGHT, KING
|
|
BYTE bBattleType; // MELEE, etc..
|
|
BYTE bLevel; // Level
|
|
BYTE bSize;
|
|
|
|
DWORD dwGoldMin;
|
|
DWORD dwGoldMax;
|
|
DWORD dwExp;
|
|
DWORD dwMaxHP;
|
|
BYTE bRegenCycle;
|
|
BYTE bRegenPercent;
|
|
WORD wDef;
|
|
|
|
DWORD dwAIFlag;
|
|
DWORD dwRaceFlag;
|
|
DWORD dwImmuneFlag;
|
|
|
|
BYTE bStr, bDex, bCon, bInt;
|
|
DWORD dwDamageRange[2];
|
|
|
|
short sAttackSpeed;
|
|
short sMovingSpeed;
|
|
BYTE bAggresiveHPPct;
|
|
WORD wAggressiveSight;
|
|
WORD wAttackRange;
|
|
|
|
char cEnchants[MOB_ENCHANTS_MAX_NUM];
|
|
char cResists[SMobTable_r256::MOB_RESISTS_MAX_NUM];
|
|
|
|
DWORD dwResurrectionVnum;
|
|
DWORD dwDropItemVnum;
|
|
|
|
BYTE bMountCapacity;
|
|
BYTE bOnClickType;
|
|
|
|
BYTE bEmpire;
|
|
char szFolder[64 + 1];
|
|
float fDamMultiply;
|
|
DWORD dwSummonVnum;
|
|
DWORD dwDrainSP;
|
|
DWORD dwMonsterColor;
|
|
DWORD dwPolymorphItemVnum;
|
|
|
|
TMobSkillLevel Skills[MOB_SKILL_MAX_NUM];
|
|
|
|
BYTE bBerserkPoint;
|
|
BYTE bStoneSkinPoint;
|
|
BYTE bGodSpeedPoint;
|
|
BYTE bDeathBlowPoint;
|
|
BYTE bRevivePoint;
|
|
} TMobTable_r256;
|
|
|
|
typedef struct SMobTable_r262
|
|
{
|
|
enum EMobResists_r4
|
|
{
|
|
MOB_RESIST_SWORD,
|
|
MOB_RESIST_TWOHAND,
|
|
MOB_RESIST_DAGGER,
|
|
MOB_RESIST_BELL,
|
|
MOB_RESIST_FAN,
|
|
MOB_RESIST_BOW,
|
|
MOB_RESIST_CLAW,//r4
|
|
MOB_RESIST_FIRE,
|
|
MOB_RESIST_ELECT,
|
|
MOB_RESIST_MAGIC,
|
|
MOB_RESIST_WIND,
|
|
MOB_RESIST_POISON,
|
|
MOB_RESIST_BLEEDING,//r3
|
|
MOB_RESISTS_MAX_NUM
|
|
};
|
|
|
|
DWORD dwVnum;
|
|
char szName[CHARACTER_NAME_MAX_LEN + 1];
|
|
char szLocaleName[CHARACTER_NAME_MAX_LEN + 1];
|
|
|
|
BYTE bType; // Monster, NPC
|
|
BYTE bRank; // PAWN, KNIGHT, KING
|
|
BYTE bBattleType; // MELEE, etc..
|
|
BYTE bLevel; // Level
|
|
BYTE bLvlPct;
|
|
BYTE bSize;//r4
|
|
|
|
DWORD dwGoldMin;
|
|
DWORD dwGoldMax;
|
|
DWORD dwExp;
|
|
DWORD dwMaxHP;
|
|
BYTE bRegenCycle;
|
|
BYTE bRegenPercent;
|
|
WORD wDef;
|
|
|
|
DWORD dwAIFlag;
|
|
DWORD dwRaceFlag;
|
|
DWORD dwImmuneFlag;
|
|
|
|
BYTE bStr, bDex, bCon, bInt;
|
|
DWORD dwDamageRange[2];
|
|
|
|
short sAttackSpeed;
|
|
short sMovingSpeed;
|
|
BYTE bAggresiveHPPct;
|
|
WORD wAggressiveSight;
|
|
WORD wAttackRange;
|
|
|
|
char cEnchants[MOB_ENCHANTS_MAX_NUM];
|
|
char cResists[SMobTable_r262::MOB_RESISTS_MAX_NUM];
|
|
|
|
DWORD dwResurrectionVnum;
|
|
DWORD dwDropItemVnum;
|
|
|
|
BYTE bMountCapacity;
|
|
BYTE bOnClickType;
|
|
|
|
BYTE bEmpire;
|
|
char szFolder[64 + 1];
|
|
float fDamMultiply;
|
|
DWORD dwSummonVnum;
|
|
DWORD dwDrainSP;
|
|
DWORD dwMonsterColor;
|
|
DWORD dwPolymorphItemVnum;
|
|
|
|
TMobSkillLevel Skills[MOB_SKILL_MAX_NUM];
|
|
|
|
BYTE bBerserkPoint;
|
|
BYTE bStoneSkinPoint;
|
|
BYTE bGodSpeedPoint;
|
|
BYTE bDeathBlowPoint;
|
|
BYTE bRevivePoint;
|
|
|
|
DWORD dwHealerPoint;//r4
|
|
} TMobTable_r262;
|
|
|
|
typedef struct SMobTable_r263
|
|
{
|
|
enum EMobResists_r5
|
|
{
|
|
MOB_RESIST_SWORD,
|
|
MOB_RESIST_TWOHAND,
|
|
MOB_RESIST_DAGGER,
|
|
MOB_RESIST_BELL,
|
|
MOB_RESIST_FAN,
|
|
MOB_RESIST_BOW,
|
|
MOB_RESIST_CLAW,//r4
|
|
MOB_RESIST_FIRE,
|
|
MOB_RESIST_ELECT,
|
|
MOB_RESIST_MAGIC,
|
|
MOB_RESIST_WIND,
|
|
MOB_RESIST_POISON,
|
|
MOB_RESIST_BLEEDING,//r3
|
|
MOB_RESISTS_MAX_NUM
|
|
};
|
|
|
|
DWORD dwVnum;
|
|
char szName[CHARACTER_NAME_MAX_LEN + 1];
|
|
char szLocaleName[CHARACTER_NAME_MAX_LEN + 1];
|
|
|
|
BYTE bType; // Monster, NPC
|
|
BYTE bRank; // PAWN, KNIGHT, KING
|
|
BYTE bBattleType; // MELEE, etc..
|
|
BYTE bLevel; // Level
|
|
BYTE bLvlPct;
|
|
BYTE bSize;//r4
|
|
|
|
DWORD dwGoldMin;
|
|
DWORD dwGoldMax;
|
|
DWORD dwExp;
|
|
DWORD dwMaxHP;
|
|
BYTE bRegenCycle;
|
|
BYTE bRegenPercent;
|
|
WORD wDef;
|
|
|
|
DWORD dwAIFlag;
|
|
DWORD dwRaceFlag;
|
|
DWORD dwImmuneFlag;
|
|
|
|
BYTE bStr, bDex, bCon, bInt;
|
|
DWORD dwDamageRange[2];
|
|
|
|
short sAttackSpeed;
|
|
short sMovingSpeed;
|
|
BYTE bAggresiveHPPct;
|
|
WORD wAggressiveSight;
|
|
WORD wAttackRange;
|
|
|
|
char cEnchants[MOB_ENCHANTS_MAX_NUM];
|
|
char cResists[SMobTable_r263::MOB_RESISTS_MAX_NUM];
|
|
|
|
DWORD dwResurrectionVnum;
|
|
DWORD dwDropItemVnum;
|
|
|
|
BYTE bMountCapacity;
|
|
BYTE bOnClickType;
|
|
|
|
BYTE bEmpire;
|
|
char szFolder[64 + 1];
|
|
float fDamMultiply;
|
|
DWORD dwSummonVnum;
|
|
DWORD dwDrainSP;
|
|
DWORD dwMonsterColor;
|
|
DWORD dwPolymorphItemVnum;
|
|
|
|
TMobSkillLevel Skills[MOB_SKILL_MAX_NUM];
|
|
|
|
BYTE bBerserkPoint;
|
|
BYTE bStoneSkinPoint;
|
|
BYTE bGodSpeedPoint;
|
|
BYTE bDeathBlowPoint;
|
|
BYTE bRevivePoint;
|
|
|
|
DWORD dwHealerPoint;//r5
|
|
BYTE bUnk263;//r5
|
|
} TMobTable_r263; //brazilian only 2016/08
|
|
|
|
typedef TMobTable_r255 SMobTable, TMobTable;
|
|
|
|
#ifdef ENABLE_PROTOSTRUCT_AUTODETECT
|
|
typedef struct SMobTableAll
|
|
{
|
|
static bool IsValidStruct(DWORD structSize)
|
|
{
|
|
switch (structSize)
|
|
{
|
|
case sizeof(TMobTable_r235):
|
|
case sizeof(TMobTable_r255):
|
|
case sizeof(TMobTable_r256):
|
|
case sizeof(TMobTable_r262):
|
|
case sizeof(TMobTable_r263):
|
|
return true;
|
|
break;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
static void Process(void* obj, DWORD structSize, DWORD i, CPythonNonPlayer::TMobTable& t)
|
|
{
|
|
#define MTABLE_COPY_STR(x) strncpy_s(t.##x##, sizeof(t.##x##), r.##x##, _TRUNCATE)
|
|
#define MTABLE_COPY_INT(x) t.##x## = r.##x
|
|
#define MTABLE_COPY_FLT(x) t.##x## = r.##x
|
|
#define MTABLE_COUNT(x) _countof(t.##x##)
|
|
#define MTABLE_PROCESS(len)\
|
|
CPythonNonPlayer::TMobTable_r##len## & r = *((CPythonNonPlayer::TMobTable_r##len## *) obj + i);\
|
|
MTABLE_COPY_INT(dwVnum);\
|
|
MTABLE_COPY_STR(szName);\
|
|
MTABLE_COPY_STR(szLocaleName);\
|
|
MTABLE_COPY_INT(bType);\
|
|
MTABLE_COPY_INT(bRank);\
|
|
MTABLE_COPY_INT(bBattleType);\
|
|
MTABLE_COPY_INT(bLevel);\
|
|
MTABLE_COPY_INT(bSize);\
|
|
MTABLE_COPY_INT(dwGoldMin);\
|
|
MTABLE_COPY_INT(dwGoldMax);\
|
|
MTABLE_COPY_INT(dwExp);\
|
|
MTABLE_COPY_INT(dwMaxHP);\
|
|
MTABLE_COPY_INT(bRegenCycle);\
|
|
MTABLE_COPY_INT(bRegenPercent);\
|
|
MTABLE_COPY_INT(wDef);\
|
|
MTABLE_COPY_INT(dwAIFlag);\
|
|
MTABLE_COPY_INT(dwRaceFlag);\
|
|
MTABLE_COPY_INT(dwImmuneFlag);\
|
|
MTABLE_COPY_INT(bStr);\
|
|
MTABLE_COPY_INT(bDex);\
|
|
MTABLE_COPY_INT(bCon);\
|
|
MTABLE_COPY_INT(bInt);\
|
|
for (size_t i=0; i<MTABLE_COUNT(dwDamageRange); ++i)\
|
|
{\
|
|
MTABLE_COPY_INT(dwDamageRange[i]);\
|
|
}\
|
|
MTABLE_COPY_INT(sAttackSpeed);\
|
|
MTABLE_COPY_INT(sMovingSpeed);\
|
|
MTABLE_COPY_INT(bAggresiveHPPct);\
|
|
MTABLE_COPY_INT(wAggressiveSight);\
|
|
MTABLE_COPY_INT(wAttackRange);\
|
|
for (size_t i=0; i<MTABLE_COUNT(cEnchants); ++i)\
|
|
{\
|
|
MTABLE_COPY_INT(cEnchants[i]);\
|
|
}\
|
|
for (size_t i=0; i<MTABLE_COUNT(cResists); ++i)\
|
|
{\
|
|
MTABLE_COPY_INT(cResists[i]);\
|
|
}\
|
|
MTABLE_COPY_INT(dwResurrectionVnum);\
|
|
MTABLE_COPY_INT(dwDropItemVnum);\
|
|
MTABLE_COPY_INT(bMountCapacity);\
|
|
MTABLE_COPY_INT(bOnClickType);\
|
|
MTABLE_COPY_INT(bEmpire);\
|
|
MTABLE_COPY_STR(szFolder);\
|
|
MTABLE_COPY_FLT(fDamMultiply);\
|
|
MTABLE_COPY_INT(dwSummonVnum);\
|
|
MTABLE_COPY_INT(dwDrainSP);\
|
|
MTABLE_COPY_INT(dwMonsterColor);\
|
|
MTABLE_COPY_INT(dwPolymorphItemVnum);\
|
|
for (size_t i=0; i<MTABLE_COUNT(Skills); ++i)\
|
|
{\
|
|
MTABLE_COPY_INT(Skills[i].dwVnum);\
|
|
MTABLE_COPY_INT(Skills[i].bLevel);\
|
|
}\
|
|
MTABLE_COPY_INT(bBerserkPoint);\
|
|
MTABLE_COPY_INT(bStoneSkinPoint);\
|
|
MTABLE_COPY_INT(bGodSpeedPoint);\
|
|
MTABLE_COPY_INT(bDeathBlowPoint);\
|
|
MTABLE_COPY_INT(bRevivePoint);
|
|
|
|
switch (structSize)
|
|
{
|
|
case sizeof(TMobTable_r235):
|
|
{
|
|
MTABLE_PROCESS(235);
|
|
}
|
|
break;
|
|
case sizeof(TMobTable_r255):
|
|
{
|
|
MTABLE_PROCESS(255);
|
|
}
|
|
break;
|
|
case sizeof(TMobTable_r256):
|
|
{
|
|
MTABLE_PROCESS(256);
|
|
}
|
|
break;
|
|
case sizeof(TMobTable_r262):
|
|
{
|
|
MTABLE_PROCESS(262);
|
|
}
|
|
break;
|
|
case sizeof(TMobTable_r263):
|
|
{
|
|
MTABLE_PROCESS(263);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
} TMobTableAll;
|
|
#endif //ENABLE_PROTOSTRUCT_AUTODETECT
|
|
|
|
#pragma pack(pop)
|
|
|
|
typedef std::list<TMobTable *> TMobTableList;
|
|
typedef std::map<DWORD, TMobTable *> TNonPlayerDataMap;
|
|
|
|
public:
|
|
CPythonNonPlayer(void);
|
|
virtual ~CPythonNonPlayer(void);
|
|
|
|
void Clear();
|
|
void Destroy();
|
|
|
|
bool LoadNonPlayerData(const char * c_szFileName);
|
|
|
|
const TMobTable * GetTable(DWORD dwVnum);
|
|
bool GetName(DWORD dwVnum, const char ** c_pszName);
|
|
bool GetInstanceType(DWORD dwVnum, BYTE* pbType);
|
|
BYTE GetEventType(DWORD dwVnum);
|
|
BYTE GetEventTypeByVID(DWORD dwVID);
|
|
DWORD GetMonsterColor(DWORD dwVnum);
|
|
const char* GetMonsterName(DWORD dwVnum);
|
|
|
|
DWORD GetMonsterType(DWORD dwVnum);
|
|
DWORD GetMonsterRank(DWORD dwVnum);
|
|
|
|
#ifdef WJ_SHOW_MOB_INFO
|
|
DWORD GetMonsterLevel(DWORD dwVnum);
|
|
bool IsAggressive(DWORD dwVnum);
|
|
#endif
|
|
|
|
// Function for outer
|
|
void GetMatchableMobList(int iLevel, int iInterval, TMobTableList * pMobTableList);
|
|
|
|
protected:
|
|
TNonPlayerDataMap m_NonPlayerDataMap;
|
|
};
|
|
//martysama0134's 2e58d0b8baeb072acdf3afc4a5d1999f
|