Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
421 lines
17 KiB
C++
421 lines
17 KiB
C++
|
||
#include "stdafx.h"
|
||
|
||
#include <algorithm>
|
||
|
||
#include <Creature/Character/CharacterClass.h>
|
||
|
||
#include "MonsterStructure.h"
|
||
#include "GMMemory.h"
|
||
|
||
MonsterInfo::MonsterInfo()
|
||
: m_dwKID(0), m_dwRespawnTime(0), m_fSize(0), m_fAttackAngle(0), m_cSkillPattern(0), m_cSkillLevel(0),
|
||
m_cNation(Creature::STATELESS), m_cFixLevelGap(0), m_bFixLevelGap(false), m_bCollision(false),
|
||
m_bFirstAttack(false), m_bReturnPosition(false),
|
||
m_cEnchantSpellType(0), m_cChantSpellType(0), m_wSkillUseRate(0), m_fSkillEffectSize(1.0f),
|
||
m_cStatueEffectType(SE_NONE), m_cStatueEffectPercent(0), m_bStatueRespawnEnable(false)
|
||
{
|
||
std::fill_n(m_aryAwardItem, int(MAX_ORIGINAL_ITEM_NUM), 0);
|
||
std::fill_n(m_aryDropRate, int(MAX_AWARD_KIND), 0);
|
||
std::fill_n(m_strName, int(MAX_NAME_LEN), 0);
|
||
std::fill_n(m_strModelingFlag, int(MAX_MODELING_FLAG_LENGTH), 0);
|
||
std::fill_n(m_fHitBox, int(MAX_HITBOX_NUM), 0.0f);
|
||
std::fill_n(m_wSkillID, int(MAX_SKILL_PATTERN), 0);
|
||
}
|
||
|
||
|
||
MonsterInfo::MonsterPattern MonsterInfo::GetMonsterPattern(const char* szMonsterType)
|
||
{
|
||
struct TypeAndName
|
||
{
|
||
const char* m_szName;
|
||
const MonsterPattern m_MonsterPattern;
|
||
|
||
TypeAndName(const char* szName, const MonsterPattern ePattern)
|
||
: m_szName(szName), m_MonsterPattern(ePattern) { }
|
||
};
|
||
|
||
static TypeAndName monsterTypeName[MAX_PATTERN] =
|
||
{
|
||
TypeAndName("Common", PATTERN_COMMON),
|
||
TypeAndName("Warrior", PATTERN_WARRIOR),
|
||
TypeAndName("Defender", PATTERN_DEFENDER),
|
||
TypeAndName("Mage", PATTERN_MAGE),
|
||
TypeAndName("Acolyte", PATTERN_ACOLYTE),
|
||
TypeAndName("Boss", PATTERN_BOSS),
|
||
TypeAndName("BG", PATTERN_BG),
|
||
TypeAndName("Summon", PATTERN_SUMMON),
|
||
TypeAndName("Structure", PATTERN_STRUCTURE),
|
||
TypeAndName("Named", PATTERN_NAMED),
|
||
TypeAndName("Chief", PATTERN_CHIEF),
|
||
TypeAndName("Object", PATTERN_OBJECT),
|
||
TypeAndName("Guard", PATTERN_GUARD),
|
||
TypeAndName("Gather", PATTERN_GATHER)
|
||
};
|
||
|
||
TypeAndName* lpTypeNamePastEnd = monsterTypeName + MAX_PATTERN;
|
||
for (TypeAndName* lpTypeName = monsterTypeName; lpTypeName != lpTypeNamePastEnd; ++lpTypeName)
|
||
{
|
||
if (0 == strcmp(szMonsterType, lpTypeName->m_szName))
|
||
{
|
||
return lpTypeName->m_MonsterPattern;
|
||
}
|
||
}
|
||
|
||
return PATTERN_COMMON;
|
||
}
|
||
|
||
MonsterInfo::StatueEffectType MonsterInfo::GetStatueEffectType(const char* szStatueEffectType)
|
||
{
|
||
struct TypeAndName
|
||
{
|
||
const char* m_szName;
|
||
const StatueEffectType m_StatueEffectType;
|
||
|
||
TypeAndName(const char* szName, const StatueEffectType eEffectType)
|
||
: m_szName(szName), m_StatueEffectType(eEffectType) { }
|
||
};
|
||
|
||
static TypeAndName effectTypeName[MAX_EFFECT_TYPE_NUM] =
|
||
{
|
||
TypeAndName("None", SE_NONE),
|
||
TypeAndName("HP", SE_HP),
|
||
TypeAndName("MP", SE_MP),
|
||
TypeAndName("EXP", SE_EXP),
|
||
TypeAndName("DropRate", SE_DROPRATE)
|
||
};
|
||
|
||
TypeAndName* lpTypeNamePastEnd = effectTypeName + MAX_EFFECT_TYPE_NUM;
|
||
for (TypeAndName* lpTypeName = effectTypeName; lpTypeName != lpTypeNamePastEnd; ++lpTypeName)
|
||
{
|
||
if (0 == strcmp(szStatueEffectType, lpTypeName->m_szName))
|
||
{
|
||
return lpTypeName->m_StatueEffectType;
|
||
}
|
||
}
|
||
|
||
return SE_NONE;
|
||
}
|
||
|
||
unsigned short MonsterInfo::GetCompleteStatueKID(unsigned short wNowKID)
|
||
{
|
||
switch (wNowKID)
|
||
{
|
||
// 1<><31><EFBFBD><EFBFBD>
|
||
case MonsterInfo::STATUE_HUMAN_LOADING1: return MonsterInfo::STATUE_HUMAN_COMPLETE1; break;
|
||
case MonsterInfo::STATUE_AKHAN_LOADING1: return MonsterInfo::STATUE_AKHAN_COMPLETE1; break;
|
||
case MonsterInfo::BG_STATUE_HUMAN_LOADING1: return MonsterInfo::BG_STATUE_HUMAN_COMPLETE1; break;
|
||
case MonsterInfo::BG_STATUE_AKHAN_LOADING1: return MonsterInfo::BG_STATUE_AKHAN_COMPLETE1; break;
|
||
case MonsterInfo::POWER_STATUE_HUMAN_LOADING1: return MonsterInfo::POWER_STATUE_HUMAN_COMPLETE1; break;
|
||
case MonsterInfo::POWER_STATUE_AKHAN_LOADING1: return MonsterInfo::POWER_STATUE_AKHAN_COMPLETE1; break;
|
||
case MonsterInfo::INT_STATUE_HUMAN_LOADING1: return MonsterInfo::INT_STATUE_HUMAN_COMPLETE1; break;
|
||
case MonsterInfo::INT_STATUE_AKHAN_LOADING1: return MonsterInfo::INT_STATUE_AKHAN_COMPLETE1; break;
|
||
case MonsterInfo::EXP_STATUE_HUMAN_LOADING1: return MonsterInfo::EXP_STATUE_HUMAN_COMPLETE1; break;
|
||
case MonsterInfo::EXP_STATUE_AKHAN_LOADING1: return MonsterInfo::EXP_STATUE_AKHAN_COMPLETE1; break;
|
||
case MonsterInfo::WEALTH_STATUE_HUMAN_LOADING1: return MonsterInfo::WEALTH_STATUE_HUMAN_COMPLETE1; break;
|
||
case MonsterInfo::WEALTH_STATUE_AKHAN_LOADING1: return MonsterInfo::WEALTH_STATUE_AKHAN_COMPLETE1; break;
|
||
case MonsterInfo::LIFE_EXTRACT_HUMAN_LOADING1: return MonsterInfo::LIFE_EXTRACT_HUMAN_COMPLETE1; break;
|
||
case MonsterInfo::LIFE_EXTRACT_AKHAN_LOADING1: return MonsterInfo::LIFE_EXTRACT_AKHAN_COMPLETE1; break;
|
||
// 2<><32><EFBFBD><EFBFBD>
|
||
case MonsterInfo::STATUE_HUMAN_LOADING2: return MonsterInfo::STATUE_HUMAN_COMPLETE2; break;
|
||
case MonsterInfo::STATUE_AKHAN_LOADING2: return MonsterInfo::STATUE_AKHAN_COMPLETE2; break;
|
||
case MonsterInfo::BG_STATUE_HUMAN_LOADING2: return MonsterInfo::BG_STATUE_HUMAN_COMPLETE2; break;
|
||
case MonsterInfo::BG_STATUE_AKHAN_LOADING2: return MonsterInfo::BG_STATUE_AKHAN_COMPLETE2; break;
|
||
case MonsterInfo::POWER_STATUE_HUMAN_LOADING2: return MonsterInfo::POWER_STATUE_HUMAN_COMPLETE2; break;
|
||
case MonsterInfo::POWER_STATUE_AKHAN_LOADING2: return MonsterInfo::POWER_STATUE_AKHAN_COMPLETE2; break;
|
||
case MonsterInfo::INT_STATUE_HUMAN_LOADING2: return MonsterInfo::INT_STATUE_HUMAN_COMPLETE2; break;
|
||
case MonsterInfo::INT_STATUE_AKHAN_LOADING2: return MonsterInfo::INT_STATUE_AKHAN_COMPLETE2; break;
|
||
case MonsterInfo::EXP_STATUE_HUMAN_LOADING2: return MonsterInfo::EXP_STATUE_HUMAN_COMPLETE2; break;
|
||
case MonsterInfo::EXP_STATUE_AKHAN_LOADING2: return MonsterInfo::EXP_STATUE_AKHAN_COMPLETE2; break;
|
||
case MonsterInfo::WEALTH_STATUE_HUMAN_LOADING2: return MonsterInfo::WEALTH_STATUE_HUMAN_COMPLETE2; break;
|
||
case MonsterInfo::WEALTH_STATUE_AKHAN_LOADING2: return MonsterInfo::WEALTH_STATUE_AKHAN_COMPLETE2; break;
|
||
case MonsterInfo::LIFE_EXTRACT_HUMAN_LOADING2: return MonsterInfo::LIFE_EXTRACT_HUMAN_COMPLETE2; break;
|
||
case MonsterInfo::LIFE_EXTRACT_AKHAN_LOADING2: return MonsterInfo::LIFE_EXTRACT_AKHAN_COMPLETE2; break;
|
||
}
|
||
|
||
return wNowKID;
|
||
}
|
||
|
||
unsigned short MonsterInfo::GetLoadingStatueKID(unsigned char cRace, unsigned short wNowKID)
|
||
{
|
||
switch (cRace)
|
||
{
|
||
case CClass::HUMAN:
|
||
{
|
||
// 1<><31><EFBFBD><EFBFBD>
|
||
if (MonsterInfo::STATUE_NEUTRALITY1 <= wNowKID && MonsterInfo::STATUE_AKHAN_COMPLETE1 >= wNowKID)
|
||
{
|
||
return MonsterInfo::STATUE_HUMAN_LOADING1;
|
||
}
|
||
else if (MonsterInfo::BG_STATUE_NEUTRALITY1 <= wNowKID && MonsterInfo::BG_STATUE_AKHAN_COMPLETE1 >= wNowKID)
|
||
{
|
||
return MonsterInfo::BG_STATUE_HUMAN_LOADING1;
|
||
}
|
||
else if (MonsterInfo::POWER_STATUE_NEUTRALITY1 <= wNowKID && MonsterInfo::POWER_STATUE_AKHAN_COMPLETE1 >= wNowKID)
|
||
{
|
||
return MonsterInfo::POWER_STATUE_HUMAN_LOADING1;
|
||
}
|
||
else if (MonsterInfo::INT_STATUE_NEUTRALITY1 <= wNowKID && MonsterInfo::INT_STATUE_AKHAN_COMPLETE1 >= wNowKID)
|
||
{
|
||
return MonsterInfo::INT_STATUE_HUMAN_LOADING1;
|
||
}
|
||
else if (MonsterInfo::EXP_STATUE_NEUTRALITY1 <= wNowKID && MonsterInfo::EXP_STATUE_AKHAN_COMPLETE1 >= wNowKID)
|
||
{
|
||
return MonsterInfo::EXP_STATUE_HUMAN_LOADING1;
|
||
}
|
||
else if (MonsterInfo::WEALTH_STATUE_NEUTRALITY1 <= wNowKID && MonsterInfo::WEALTH_STATUE_AKHAN_COMPLETE1 >= wNowKID)
|
||
{
|
||
return MonsterInfo::WEALTH_STATUE_HUMAN_LOADING1;
|
||
}
|
||
else if (MonsterInfo::LIFE_EXTRACT_NEUTRALITY1 <= wNowKID && MonsterInfo::LIFE_EXTRACT_AKHAN_COMPLETE1 >= wNowKID)
|
||
{
|
||
return MonsterInfo::LIFE_EXTRACT_HUMAN_LOADING1;
|
||
}
|
||
// 2<><32><EFBFBD><EFBFBD>
|
||
else if (MonsterInfo::STATUE_NEUTRALITY2 <= wNowKID && MonsterInfo::STATUE_AKHAN_COMPLETE2 >= wNowKID)
|
||
{
|
||
return MonsterInfo::STATUE_HUMAN_LOADING2;
|
||
}
|
||
else if (MonsterInfo::BG_STATUE_NEUTRALITY2 <= wNowKID && MonsterInfo::BG_STATUE_AKHAN_COMPLETE2 >= wNowKID)
|
||
{
|
||
return MonsterInfo::BG_STATUE_HUMAN_LOADING2;
|
||
}
|
||
else if (MonsterInfo::POWER_STATUE_NEUTRALITY2 <= wNowKID && MonsterInfo::POWER_STATUE_AKHAN_COMPLETE2 >= wNowKID)
|
||
{
|
||
return MonsterInfo::POWER_STATUE_HUMAN_LOADING2;
|
||
}
|
||
else if (MonsterInfo::INT_STATUE_NEUTRALITY2 <= wNowKID && MonsterInfo::INT_STATUE_AKHAN_COMPLETE2 >= wNowKID)
|
||
{
|
||
return MonsterInfo::INT_STATUE_HUMAN_LOADING2;
|
||
}
|
||
else if (MonsterInfo::EXP_STATUE_NEUTRALITY2 <= wNowKID && MonsterInfo::EXP_STATUE_AKHAN_COMPLETE2 >= wNowKID)
|
||
{
|
||
return MonsterInfo::EXP_STATUE_HUMAN_LOADING2;
|
||
}
|
||
else if (MonsterInfo::WEALTH_STATUE_NEUTRALITY2 <= wNowKID && MonsterInfo::WEALTH_STATUE_AKHAN_COMPLETE2 >= wNowKID)
|
||
{
|
||
return MonsterInfo::WEALTH_STATUE_HUMAN_LOADING2;
|
||
}
|
||
else if (MonsterInfo::LIFE_EXTRACT_NEUTRALITY2 <= wNowKID && MonsterInfo::LIFE_EXTRACT_AKHAN_COMPLETE2 >= wNowKID)
|
||
{
|
||
return MonsterInfo::LIFE_EXTRACT_HUMAN_LOADING2;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case CClass::AKHAN:
|
||
{
|
||
// 1<><31><EFBFBD><EFBFBD>
|
||
if (MonsterInfo::STATUE_NEUTRALITY1 <= wNowKID && MonsterInfo::STATUE_AKHAN_COMPLETE1 >= wNowKID)
|
||
{
|
||
return MonsterInfo::STATUE_AKHAN_LOADING1;
|
||
}
|
||
else if (MonsterInfo::BG_STATUE_NEUTRALITY1 <= wNowKID && MonsterInfo::BG_STATUE_AKHAN_COMPLETE1 >= wNowKID)
|
||
{
|
||
return MonsterInfo::BG_STATUE_AKHAN_LOADING1;
|
||
}
|
||
else if (MonsterInfo::POWER_STATUE_NEUTRALITY1 <= wNowKID && MonsterInfo::POWER_STATUE_AKHAN_COMPLETE1 >= wNowKID)
|
||
{
|
||
return MonsterInfo::POWER_STATUE_AKHAN_LOADING1;
|
||
}
|
||
else if (MonsterInfo::INT_STATUE_NEUTRALITY1 <= wNowKID && MonsterInfo::INT_STATUE_AKHAN_COMPLETE1 >= wNowKID)
|
||
{
|
||
return MonsterInfo::INT_STATUE_AKHAN_LOADING1;
|
||
}
|
||
else if (MonsterInfo::EXP_STATUE_NEUTRALITY1 <= wNowKID && MonsterInfo::EXP_STATUE_AKHAN_COMPLETE1 >= wNowKID)
|
||
{
|
||
return MonsterInfo::EXP_STATUE_AKHAN_LOADING1;
|
||
}
|
||
else if (MonsterInfo::WEALTH_STATUE_NEUTRALITY1 <= wNowKID && MonsterInfo::WEALTH_STATUE_AKHAN_COMPLETE1 >= wNowKID)
|
||
{
|
||
return MonsterInfo::WEALTH_STATUE_AKHAN_LOADING1;
|
||
}
|
||
else if (MonsterInfo::LIFE_EXTRACT_NEUTRALITY1 <= wNowKID && MonsterInfo::LIFE_EXTRACT_AKHAN_COMPLETE1 >= wNowKID)
|
||
{
|
||
return MonsterInfo::LIFE_EXTRACT_AKHAN_LOADING1;
|
||
}
|
||
// 2<><32><EFBFBD><EFBFBD>
|
||
else if (MonsterInfo::STATUE_NEUTRALITY2 <= wNowKID && MonsterInfo::STATUE_AKHAN_COMPLETE2 >= wNowKID)
|
||
{
|
||
return MonsterInfo::STATUE_AKHAN_LOADING2;
|
||
}
|
||
else if (MonsterInfo::BG_STATUE_NEUTRALITY2 <= wNowKID && MonsterInfo::BG_STATUE_AKHAN_COMPLETE2 >= wNowKID)
|
||
{
|
||
return MonsterInfo::BG_STATUE_AKHAN_LOADING2;
|
||
}
|
||
else if (MonsterInfo::POWER_STATUE_NEUTRALITY2 <= wNowKID && MonsterInfo::POWER_STATUE_AKHAN_COMPLETE2 >= wNowKID)
|
||
{
|
||
return MonsterInfo::POWER_STATUE_AKHAN_LOADING2;
|
||
}
|
||
else if (MonsterInfo::INT_STATUE_NEUTRALITY2 <= wNowKID && MonsterInfo::INT_STATUE_AKHAN_COMPLETE2 >= wNowKID)
|
||
{
|
||
return MonsterInfo::INT_STATUE_AKHAN_LOADING2;
|
||
}
|
||
else if (MonsterInfo::EXP_STATUE_NEUTRALITY2 <= wNowKID && MonsterInfo::EXP_STATUE_AKHAN_COMPLETE2 >= wNowKID)
|
||
{
|
||
return MonsterInfo::EXP_STATUE_AKHAN_LOADING2;
|
||
}
|
||
else if (MonsterInfo::WEALTH_STATUE_NEUTRALITY2 <= wNowKID && MonsterInfo::WEALTH_STATUE_AKHAN_COMPLETE2 >= wNowKID)
|
||
{
|
||
return MonsterInfo::WEALTH_STATUE_AKHAN_LOADING2;
|
||
}
|
||
else if (MonsterInfo::LIFE_EXTRACT_NEUTRALITY2 <= wNowKID && MonsterInfo::LIFE_EXTRACT_AKHAN_COMPLETE2 >= wNowKID)
|
||
{
|
||
return MonsterInfo::LIFE_EXTRACT_AKHAN_LOADING2;
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
|
||
return GetDefaultStatueKID(wNowKID);
|
||
}
|
||
|
||
unsigned short MonsterInfo::GetDefaultStatueKID(unsigned short wNowKID)
|
||
{
|
||
// 1<><31><EFBFBD><EFBFBD>
|
||
if (MonsterInfo::STATUE_NEUTRALITY1 <= wNowKID && MonsterInfo::STATUE_AKHAN_COMPLETE1 >= wNowKID)
|
||
{
|
||
return MonsterInfo::STATUE_NEUTRALITY1;
|
||
}
|
||
else if (MonsterInfo::BG_STATUE_NEUTRALITY1 <= wNowKID && MonsterInfo::BG_STATUE_AKHAN_COMPLETE1 >= wNowKID)
|
||
{
|
||
return MonsterInfo::BG_STATUE_NEUTRALITY1;
|
||
}
|
||
else if (MonsterInfo::POWER_STATUE_NEUTRALITY1 <= wNowKID && MonsterInfo::POWER_STATUE_AKHAN_COMPLETE1 >= wNowKID)
|
||
{
|
||
return MonsterInfo::POWER_STATUE_NEUTRALITY1;
|
||
}
|
||
else if (MonsterInfo::INT_STATUE_NEUTRALITY1 <= wNowKID && MonsterInfo::INT_STATUE_AKHAN_COMPLETE1 >= wNowKID)
|
||
{
|
||
return MonsterInfo::INT_STATUE_NEUTRALITY1;
|
||
}
|
||
else if (MonsterInfo::EXP_STATUE_NEUTRALITY1 <= wNowKID && MonsterInfo::EXP_STATUE_AKHAN_COMPLETE1 >= wNowKID)
|
||
{
|
||
return MonsterInfo::EXP_STATUE_NEUTRALITY1;
|
||
}
|
||
else if (MonsterInfo::WEALTH_STATUE_NEUTRALITY1 <= wNowKID && MonsterInfo::WEALTH_STATUE_AKHAN_COMPLETE1 >= wNowKID)
|
||
{
|
||
return MonsterInfo::WEALTH_STATUE_NEUTRALITY1;
|
||
}
|
||
else if (MonsterInfo::LIFE_EXTRACT_NEUTRALITY1 <= wNowKID && MonsterInfo::LIFE_EXTRACT_AKHAN_COMPLETE1 >= wNowKID)
|
||
{
|
||
return MonsterInfo::LIFE_EXTRACT_NEUTRALITY1;
|
||
}
|
||
// 2<><32><EFBFBD><EFBFBD>
|
||
else if (MonsterInfo::STATUE_NEUTRALITY2 <= wNowKID && MonsterInfo::STATUE_AKHAN_COMPLETE2 >= wNowKID)
|
||
{
|
||
return MonsterInfo::STATUE_NEUTRALITY2;
|
||
}
|
||
else if (MonsterInfo::BG_STATUE_NEUTRALITY2 <= wNowKID && MonsterInfo::BG_STATUE_AKHAN_COMPLETE2 >= wNowKID)
|
||
{
|
||
return MonsterInfo::BG_STATUE_NEUTRALITY2;
|
||
}
|
||
else if (MonsterInfo::POWER_STATUE_NEUTRALITY2 <= wNowKID && MonsterInfo::POWER_STATUE_AKHAN_COMPLETE2 >= wNowKID)
|
||
{
|
||
return MonsterInfo::POWER_STATUE_NEUTRALITY2;
|
||
}
|
||
else if (MonsterInfo::INT_STATUE_NEUTRALITY2 <= wNowKID && MonsterInfo::INT_STATUE_AKHAN_COMPLETE2 >= wNowKID)
|
||
{
|
||
return MonsterInfo::INT_STATUE_NEUTRALITY2;
|
||
}
|
||
else if (MonsterInfo::EXP_STATUE_NEUTRALITY2 <= wNowKID && MonsterInfo::EXP_STATUE_AKHAN_COMPLETE2 >= wNowKID)
|
||
{
|
||
return MonsterInfo::EXP_STATUE_NEUTRALITY2;
|
||
}
|
||
else if (MonsterInfo::WEALTH_STATUE_NEUTRALITY2 <= wNowKID && MonsterInfo::WEALTH_STATUE_AKHAN_COMPLETE2 >= wNowKID)
|
||
{
|
||
return MonsterInfo::WEALTH_STATUE_NEUTRALITY2;
|
||
}
|
||
else if (MonsterInfo::LIFE_EXTRACT_NEUTRALITY2 <= wNowKID && MonsterInfo::LIFE_EXTRACT_AKHAN_COMPLETE2 >= wNowKID)
|
||
{
|
||
return MonsterInfo::LIFE_EXTRACT_NEUTRALITY2;
|
||
}
|
||
|
||
return wNowKID;
|
||
}
|
||
|
||
bool MonsterInfo::IsLoadingStatueKID(unsigned short wNowKID)
|
||
{
|
||
switch (wNowKID)
|
||
{
|
||
// 1<><31><EFBFBD><EFBFBD>
|
||
case MonsterInfo::STATUE_HUMAN_LOADING1:
|
||
case MonsterInfo::STATUE_AKHAN_LOADING1:
|
||
case MonsterInfo::BG_STATUE_HUMAN_LOADING1:
|
||
case MonsterInfo::BG_STATUE_AKHAN_LOADING1:
|
||
case MonsterInfo::POWER_STATUE_HUMAN_LOADING1:
|
||
case MonsterInfo::POWER_STATUE_AKHAN_LOADING1:
|
||
case MonsterInfo::INT_STATUE_HUMAN_LOADING1:
|
||
case MonsterInfo::INT_STATUE_AKHAN_LOADING1:
|
||
case MonsterInfo::EXP_STATUE_HUMAN_LOADING1:
|
||
case MonsterInfo::EXP_STATUE_AKHAN_LOADING1:
|
||
case MonsterInfo::WEALTH_STATUE_HUMAN_LOADING1:
|
||
case MonsterInfo::WEALTH_STATUE_AKHAN_LOADING1:
|
||
case MonsterInfo::LIFE_EXTRACT_HUMAN_LOADING1:
|
||
case MonsterInfo::LIFE_EXTRACT_AKHAN_LOADING1:
|
||
// 2<><32><EFBFBD><EFBFBD>
|
||
case MonsterInfo::STATUE_HUMAN_LOADING2:
|
||
case MonsterInfo::STATUE_AKHAN_LOADING2:
|
||
case MonsterInfo::BG_STATUE_HUMAN_LOADING2:
|
||
case MonsterInfo::BG_STATUE_AKHAN_LOADING2:
|
||
case MonsterInfo::POWER_STATUE_HUMAN_LOADING2:
|
||
case MonsterInfo::POWER_STATUE_AKHAN_LOADING2:
|
||
case MonsterInfo::INT_STATUE_HUMAN_LOADING2:
|
||
case MonsterInfo::INT_STATUE_AKHAN_LOADING2:
|
||
case MonsterInfo::EXP_STATUE_HUMAN_LOADING2:
|
||
case MonsterInfo::EXP_STATUE_AKHAN_LOADING2:
|
||
case MonsterInfo::WEALTH_STATUE_HUMAN_LOADING2:
|
||
case MonsterInfo::WEALTH_STATUE_AKHAN_LOADING2:
|
||
case MonsterInfo::LIFE_EXTRACT_HUMAN_LOADING2:
|
||
case MonsterInfo::LIFE_EXTRACT_AKHAN_LOADING2:
|
||
return true;
|
||
|
||
default:
|
||
return false;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
bool MonsterInfo::IsRaceCompleteStatueKID(unsigned short wNowKID)
|
||
{
|
||
switch (wNowKID)
|
||
{
|
||
// 1<><31><EFBFBD><EFBFBD>
|
||
case MonsterInfo::STATUE_HUMAN_COMPLETE1:
|
||
case MonsterInfo::STATUE_AKHAN_COMPLETE1:
|
||
case MonsterInfo::BG_STATUE_HUMAN_COMPLETE1:
|
||
case MonsterInfo::BG_STATUE_AKHAN_COMPLETE1:
|
||
case MonsterInfo::POWER_STATUE_HUMAN_COMPLETE1:
|
||
case MonsterInfo::POWER_STATUE_AKHAN_COMPLETE1:
|
||
case MonsterInfo::INT_STATUE_HUMAN_COMPLETE1:
|
||
case MonsterInfo::INT_STATUE_AKHAN_COMPLETE1:
|
||
case MonsterInfo::EXP_STATUE_HUMAN_COMPLETE1:
|
||
case MonsterInfo::EXP_STATUE_AKHAN_COMPLETE1:
|
||
case MonsterInfo::WEALTH_STATUE_HUMAN_COMPLETE1:
|
||
case MonsterInfo::WEALTH_STATUE_AKHAN_COMPLETE1:
|
||
case MonsterInfo::LIFE_EXTRACT_HUMAN_COMPLETE1:
|
||
case MonsterInfo::LIFE_EXTRACT_AKHAN_COMPLETE1:
|
||
// 2<><32><EFBFBD><EFBFBD>
|
||
case MonsterInfo::STATUE_HUMAN_COMPLETE2:
|
||
case MonsterInfo::STATUE_AKHAN_COMPLETE2:
|
||
case MonsterInfo::BG_STATUE_HUMAN_COMPLETE2:
|
||
case MonsterInfo::BG_STATUE_AKHAN_COMPLETE2:
|
||
case MonsterInfo::POWER_STATUE_HUMAN_COMPLETE2:
|
||
case MonsterInfo::POWER_STATUE_AKHAN_COMPLETE2:
|
||
case MonsterInfo::INT_STATUE_HUMAN_COMPLETE2:
|
||
case MonsterInfo::INT_STATUE_AKHAN_COMPLETE2:
|
||
case MonsterInfo::EXP_STATUE_HUMAN_COMPLETE2:
|
||
case MonsterInfo::EXP_STATUE_AKHAN_COMPLETE2:
|
||
case MonsterInfo::WEALTH_STATUE_HUMAN_COMPLETE2:
|
||
case MonsterInfo::WEALTH_STATUE_AKHAN_COMPLETE2:
|
||
case MonsterInfo::LIFE_EXTRACT_HUMAN_COMPLETE2:
|
||
case MonsterInfo::LIFE_EXTRACT_AKHAN_COMPLETE2:
|
||
return true;
|
||
|
||
default:
|
||
return false;
|
||
}
|
||
|
||
return false;
|
||
} |