Restructure repository to include all source folders
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>
This commit is contained in:
@@ -0,0 +1,536 @@
|
||||
#ifndef _CREATURE_STRUCTURE_H_
|
||||
#define _CREATURE_STRUCTURE_H_
|
||||
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
#include <cmath>
|
||||
|
||||
#include <DB/DBDefine.h>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
struct CreatureStatus;
|
||||
struct CharacterStatus;
|
||||
struct SKILL;
|
||||
|
||||
namespace Item
|
||||
{
|
||||
class CItem;
|
||||
class CEquipment;
|
||||
|
||||
namespace EquipType
|
||||
{
|
||||
enum DoubleSwordType;
|
||||
}
|
||||
}
|
||||
|
||||
namespace BattleInclination
|
||||
{
|
||||
enum Const
|
||||
{
|
||||
IS_PEACEMODE = ( 1 << 0 ), // <20><>ȭ<EFBFBD><C8AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
IS_SAFETY_ZONE = ( 1 << 1 ), // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ <20><> <20><><EFBFBD>ο<EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
HAS_CAMP = ( 1 << 2 ), // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>忡 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
HAS_DEVELOPING_CAMP = ( 1 << 3 ), // <20>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>忡 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
IS_CASTLE_OBJECT = ( 1 << 4 ), // <20><><EFBFBD><EFBFBD> Object<63≯鼭 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>츸 <20><><EFBFBD><EFBFBD>
|
||||
IS_CASTLE_NPC = ( 1 << 5 ), // <20><><EFBFBD><EFBFBD> Object<63≯鼭 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> NPC <20><> <20><EFBFBD> NPC
|
||||
IS_GOD_MODE = ( 1 << 6 ), // G<><47><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
IS_TEAM_BATTLE = ( 1 << 7 ), // <20><><EFBFBD><EFBFBD>Ʋ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
enum VSType
|
||||
{
|
||||
VS_CHARACTER = ( 1 << 0 ), // PvP
|
||||
VS_PARTY = ( 1 << 1 ), // <20><>Ƽ<EFBFBD><C6BC> <20><>Ʋ
|
||||
VS_GUILD = ( 1 << 2 ), // <20><><EFBFBD>尣 <20><>Ʋ
|
||||
};
|
||||
|
||||
// <20>Ǿƽĺ<C6BD><C4BA><EFBFBD> <20><>ü<EFBFBD><C3BC> <20>Ǵ<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>⼭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0>ϰų<CFB0> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD>,
|
||||
// <20><><EFBFBD>ε<EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD> <20><>, ä<>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>κе<CEBA> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE>Ѵ<EFBFBD>.
|
||||
struct CharData
|
||||
{
|
||||
bool IsPeaceMode(void) const { return 0 != (m_cFlags & IS_PEACEMODE); } // <20><>ȭ<EFBFBD><C8AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
bool IsSafetyZone(void) const { return 0 != (m_cFlags & IS_SAFETY_ZONE); } // <20><><EFBFBD><EFBFBD> Safety<74><79> <20><><EFBFBD>ο<EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD>
|
||||
bool HasCamp(void) const { return 0 != (m_cFlags & HAS_CAMP); } // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>尡 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD>...
|
||||
bool HasDevelopingCamp(void) const { return 0 != (m_cFlags & HAS_DEVELOPING_CAMP); } // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>尡 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||||
bool IsCastleObject(void) const { return 0 != (m_cFlags & IS_CASTLE_OBJECT); } // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||||
bool IsCastleNPC(void) const { return 0 != (m_cFlags & IS_CASTLE_NPC); } // <20><><EFBFBD><EFBFBD> NPC <20><> <20><><EFBFBD><EFBFBD>
|
||||
bool IsGODMode(void) const { return 0 != (m_cFlags & IS_GOD_MODE); } // G<><47><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
bool IsTeamBattle(void) const { return 0 != (m_cFlags & IS_TEAM_BATTLE); } // <20><><EFBFBD><EFBFBD>Ʋ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
void SetPeaceMode(bool bPeaceMode) { m_cFlags |= bPeaceMode ? IS_PEACEMODE : 0; }
|
||||
void SetSafetyZone(bool bInSafetyZone) { m_cFlags |= bInSafetyZone ? IS_SAFETY_ZONE : 0; }
|
||||
void SetHasCamp(bool bHasCamp) { m_cFlags |= bHasCamp ? HAS_CAMP : 0; }
|
||||
void SetHasDevelopingCamp(bool bHasDevelopingCamp) { m_cFlags |= bHasDevelopingCamp ? HAS_DEVELOPING_CAMP : 0; }
|
||||
void SetCastleObject(bool bCastleObject) { m_cFlags |= bCastleObject ? IS_CASTLE_OBJECT : 0; }
|
||||
void SetCastleNPC(bool bCastleNPC) { m_cFlags |= bCastleNPC ? IS_CASTLE_NPC : 0; }
|
||||
void SetGODMode(bool bGODMode) { m_cFlags |= bGODMode ? IS_GOD_MODE : 0; }
|
||||
void SetTeamBattle(bool bTeamBattle) { m_cFlags |= bTeamBattle ? IS_TEAM_BATTLE : 0; }
|
||||
|
||||
unsigned long m_dwCID; // ij<><C4B3><EFBFBD><EFBFBD> CID
|
||||
unsigned long m_dwGID; // ij<><C4B3><EFBFBD><EFBFBD> GID
|
||||
unsigned long m_dwCastleID; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ID<49><44> <20>ִ´<D6B4>.
|
||||
|
||||
unsigned char m_cSiegeState; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>¸<EFBFBD> <20>ִ´<D6B4>.
|
||||
unsigned char m_cNation; // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
unsigned char m_cAdminLevel; // <20><EFBFBD><EEBFB5> <20><><EFBFBD><EFBFBD>
|
||||
unsigned char m_cFlags; // <20><>Ÿ <20><><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned long m_dwPID; // ij<><C4B3><EFBFBD>Ϳ<EFBFBD> <20><>Ƽ <20><><EFBFBD><EFBFBD>
|
||||
unsigned char m_cTacticsFlag; // ij<><C4B3><EFBFBD>Ϳ<EFBFBD> <20>뺴 <20><><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned char m_cRealmWarFlag;
|
||||
unsigned char m_cGuildWarFlag;
|
||||
|
||||
unsigned char m_cCreatureType; // ũ<><C5A9><EFBFBD><EFBFBD> Ÿ<><C5B8>
|
||||
unsigned short m_wObjectType; // <20><>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
unsigned short m_wKind; // <20><>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
unsigned char m_cRide; // <20><><EFBFBD> ž<><C5BE> <20><><EFBFBD><EFBFBD>.
|
||||
};
|
||||
|
||||
// <20>Ǿƽĺ<C6BD><C4BA><EFBFBD> <20><><EFBFBD>̴<EFBFBD> ij<><C4B3><EFBFBD>Ͱ<EFBFBD><CDB0><EFBFBD> <20><><EFBFBD><EFBFBD> (<28>ϴ<EFBFBD><CFB4><EFBFBD> ä<><C3A4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
struct RelationData
|
||||
{
|
||||
unsigned char m_cVSFlag; // PvP, <20><><EFBFBD><EFBFBD>Ʋ <20><><EFBFBD><EFBFBD>
|
||||
bool m_bHostileGuild; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ΰ<EFBFBD>?
|
||||
};
|
||||
};
|
||||
|
||||
namespace Creature
|
||||
{
|
||||
enum Const
|
||||
{
|
||||
PC_MAX_LEVEL = 100, // ij<><C4B3><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
MONSTER_MAX_LEVEL = 150, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
// edith 2008.02.27 <20><><EFBFBD>尡<EFBFBD><E5B0A1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
LEVEL_ABLE_WAR = 1 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
};
|
||||
|
||||
enum IdentifyCIDBit
|
||||
{
|
||||
MONSTER_KIND_BIT = 0x0000FFFF,
|
||||
|
||||
MONSTER_BIT = 0x80000000,
|
||||
NPC_BIT = 0x40000000,
|
||||
SIEGE_OBJECT_BIT = 0x10000000,
|
||||
SUMMON_MONSTER_BIT = 0xA0000000, // MONSTER_BIT (0x80000000) + 0x20000000
|
||||
NPC_LINK_BIT = 0x50000000, // <20><>ȯ <20>Ϸ<EFBFBD><CFB7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><>Ʈ<EFBFBD><C6AE> <20><>Ʈ<EFBFBD><C6AE> NPC<50><43> <20><>ũ<EFBFBD>Ǿ<EFBFBD> <20><DEB4><DEBB><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
// NPC_BIT (0x40000000) + 0x10000000
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> KID (MonsterStructure.h <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ǵǾ<C7B5> <20><><EFBFBD><EFBFBD>)
|
||||
MIN_STATUE_KID = 4001,
|
||||
MAX_STATUE_KID = 4070
|
||||
};
|
||||
|
||||
enum CreatureType
|
||||
{
|
||||
CT_PC = 0,
|
||||
CT_NPC = 1,
|
||||
CT_MONSTER = 2,
|
||||
CT_SUMMON = 3,
|
||||
CT_STRUCT = 4,
|
||||
CT_SIEGE_OBJECT = 5,
|
||||
CT_NONE_TYPE = 99
|
||||
};
|
||||
|
||||
enum Nation
|
||||
{
|
||||
STATELESS = 0, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, NPC)
|
||||
KARTERANT = 1, // ī<><C4AB><EFBFBD><EFBFBD>Ʈ
|
||||
MERKADIA = 2, // <20><EFBFBD>ī<EFBFBD><C4AB><EFBFBD><EFBFBD>
|
||||
ALMIGHTY_PIRATE = 3, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
MAX_NATION = 4
|
||||
};
|
||||
|
||||
enum WarFlag
|
||||
{
|
||||
WAR_OFF = 0, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
WAR_ON = 1, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
WAR_INSTANCE = 2 // <20>ν<EFBFBD><CEBD>Ͻ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
enum StatusType
|
||||
{
|
||||
RIGHT_PASSIVE_TYPE = 0, // <20>нú<D0BD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28>⺻<EFBFBD><E2BABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CreatureStatus<75><73> <20>ٷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>.)
|
||||
LEFT_PASSIVE_TYPE = 1, // <20>нú<D0BD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28>̵<EFBFBD><CCB5><EFBFBD>)
|
||||
RIGHT_NON_PASSIVE_TYPE = 2, // <20>нú<D0BD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⸦ <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><>ų)
|
||||
LEFT_NON_PASSIVE_TYPE = 3, // <20>нú<D0BD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><>ų<EFBFBD><C5B3>)<29><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><>ų)
|
||||
|
||||
MAX_STATUS_TYPE = 4
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> Creature <20>Ǻ<EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD>
|
||||
// Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CRYLGameData::GetClientIdentity() <20>Լ<EFBFBD> <20><><EFBFBD><EFBFBD>!!
|
||||
static bool IsSummonMonster(unsigned long dwCID)
|
||||
{
|
||||
return (Creature::SUMMON_MONSTER_BIT == (dwCID & Creature::SUMMON_MONSTER_BIT));
|
||||
}
|
||||
|
||||
static bool IsStruct(unsigned long dwCID)
|
||||
{
|
||||
unsigned short wKID = static_cast<unsigned short>(dwCID & Creature::MONSTER_KIND_BIT);
|
||||
return (wKID >= MIN_STATUE_KID && wKID <= MAX_STATUE_KID);
|
||||
}
|
||||
|
||||
static bool IsLinkedNPC(unsigned long dwCID)
|
||||
{
|
||||
return (Creature::NPC_LINK_BIT == (dwCID & Creature::NPC_LINK_BIT));
|
||||
}
|
||||
|
||||
static CreatureType GetCreatureType(unsigned long dwCID)
|
||||
{
|
||||
if (dwCID & Creature::MONSTER_BIT)
|
||||
{
|
||||
if (IsSummonMonster(dwCID)) return Creature::CT_SUMMON;
|
||||
else if (IsStruct(dwCID)) return Creature::CT_STRUCT;
|
||||
|
||||
return Creature::CT_MONSTER;
|
||||
}
|
||||
else if (dwCID & Creature::NPC_BIT) return Creature::CT_NPC;
|
||||
else if (dwCID & Creature::SIEGE_OBJECT_BIT) return Creature::CT_SIEGE_OBJECT;
|
||||
|
||||
return Creature::CT_PC;
|
||||
}
|
||||
|
||||
inline static const char* GetNationName(unsigned char cNation)
|
||||
{
|
||||
switch(cNation)
|
||||
{
|
||||
case KARTERANT: return "KARTERANT";
|
||||
case MERKADIA: return "MERKADIA";
|
||||
case ALMIGHTY_PIRATE: return "ALMIGHTY_PIRATE";
|
||||
}
|
||||
|
||||
return "STATELESS";
|
||||
}
|
||||
|
||||
inline static const char* GetShortNationName(unsigned char cNation)
|
||||
{
|
||||
switch(cNation)
|
||||
{
|
||||
case KARTERANT: return "KR";
|
||||
case MERKADIA: return "ME";
|
||||
case ALMIGHTY_PIRATE: return "AP";
|
||||
}
|
||||
|
||||
return "ST";
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>ʽ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
namespace EliteBonus
|
||||
{
|
||||
enum Const
|
||||
{
|
||||
MAX_BONUS_LEVEL = 10,
|
||||
MAX_BONUS_DROP_ITEM = 3
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ġ/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD> <20><><EFBFBD>ŵǾ<C5B5><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>. (2004-09-17 by <20>ε<EFBFBD>)
|
||||
static short usBonusExp[MAX_BONUS_LEVEL] = {
|
||||
100 + 0,
|
||||
100 + 0,
|
||||
100 + 0,
|
||||
100 + 0,
|
||||
100 + 0,
|
||||
100 + 0,
|
||||
100 + 0,
|
||||
100 + 0,
|
||||
100 + 0,
|
||||
100 + 0
|
||||
};
|
||||
|
||||
static unsigned char usBonusItemDropRate[MAX_BONUS_LEVEL][MAX_BONUS_DROP_ITEM] = {
|
||||
{ 0, 0, 0 },
|
||||
{ 0, 0, 0 },
|
||||
{ 0, 0, 0 },
|
||||
{ 0, 0, 0 },
|
||||
{ 0, 0, 0 },
|
||||
{ 0, 0, 0 },
|
||||
{ 0, 0, 0 },
|
||||
{ 0, 0, 0 },
|
||||
{ 0, 0, 0 },
|
||||
{ 0, 0, 0 }
|
||||
};
|
||||
|
||||
struct EliteBonusData
|
||||
{
|
||||
char m_cNation;
|
||||
unsigned char m_cLevel;
|
||||
|
||||
EliteBonusData();
|
||||
EliteBonusData(char cNation, unsigned char cLevel);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
// <20><> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
struct Position
|
||||
{
|
||||
float m_fPointX; // Point X <20><>ǥ
|
||||
float m_fPointY; // Point Y <20><>ǥ
|
||||
float m_fPointZ; // Point Z <20><>ǥ
|
||||
|
||||
inline Position();
|
||||
inline Position(const POS& Pos);
|
||||
inline Position(const Position& Pos);
|
||||
inline Position(float fPointX, float fPointY, float fPointZ);
|
||||
|
||||
inline POS PositionToPOS() const;
|
||||
|
||||
inline unsigned long GetDistance(const Position& rhs) const
|
||||
{
|
||||
return static_cast<unsigned long>(sqrt(
|
||||
(m_fPointX - rhs.m_fPointX) * (m_fPointX - rhs.m_fPointX) +
|
||||
(m_fPointY - rhs.m_fPointY) * (m_fPointY - rhs.m_fPointY) +
|
||||
(m_fPointZ - rhs.m_fPointZ) * (m_fPointZ - rhs.m_fPointZ)));
|
||||
}
|
||||
|
||||
inline unsigned long GetSquaredDistance(const Position& rhs) const
|
||||
{
|
||||
return static_cast<unsigned long>(
|
||||
(m_fPointX - rhs.m_fPointX) * (m_fPointX - rhs.m_fPointX) +
|
||||
(m_fPointY - rhs.m_fPointY) * (m_fPointY - rhs.m_fPointY) +
|
||||
(m_fPointZ - rhs.m_fPointZ) * (m_fPointZ - rhs.m_fPointZ));
|
||||
}
|
||||
|
||||
inline bool operator == (const Position& rhs) const
|
||||
{
|
||||
if ( m_fPointX == rhs.m_fPointX && m_fPointY == rhs.m_fPointY && m_fPointZ == rhs.m_fPointZ )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
inline bool operator != (const Position& rhs) const
|
||||
{
|
||||
if ( m_fPointX != rhs.m_fPointX || m_fPointY != rhs.m_fPointY || m_fPointZ != rhs.m_fPointZ )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
inline void operator () (const Position& rhs)
|
||||
{
|
||||
m_fPointX = rhs.m_fPointX;
|
||||
m_fPointY = rhs.m_fPointY;
|
||||
m_fPointZ = rhs.m_fPointZ;
|
||||
}
|
||||
};
|
||||
|
||||
inline Position::Position()
|
||||
: m_fPointX(0.0f), m_fPointY(0.0f), m_fPointZ(0.0f) { }
|
||||
|
||||
inline Position::Position(const POS& Pos)
|
||||
: m_fPointX(Pos.fPointX), m_fPointY(Pos.fPointY), m_fPointZ(Pos.fPointZ) { }
|
||||
|
||||
inline Position::Position(const Position& Pos)
|
||||
: m_fPointX(Pos.m_fPointX), m_fPointY(Pos.m_fPointY), m_fPointZ(Pos.m_fPointZ) { }
|
||||
|
||||
inline Position::Position(float fPointX, float fPointY, float fPointZ)
|
||||
: m_fPointX(fPointX), m_fPointY(fPointY), m_fPointZ(fPointZ) { }
|
||||
|
||||
inline POS Position::PositionToPOS() const
|
||||
{
|
||||
POS stPos;
|
||||
stPos.fPointX = m_fPointX;
|
||||
stPos.fPointY = m_fPointY;
|
||||
stPos.fPointZ = m_fPointZ;
|
||||
|
||||
return stPos;
|
||||
}
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
struct MotionInfo
|
||||
{
|
||||
float m_fDirection; // <20>ٶ<D9B6> <20><><EFBFBD><EFBFBD>
|
||||
float m_fVelocity; // <20>ӵ<EFBFBD>
|
||||
unsigned short m_wAction; // <20><><EFBFBD>ϴ<EFBFBD> <20>ൿ
|
||||
unsigned long m_dwFrame; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, NPC<50><43> <20><><EFBFBD><EFBFBD> )
|
||||
|
||||
MotionInfo();
|
||||
};
|
||||
|
||||
|
||||
// <20><>æƮ <20><><EFBFBD><EFBFBD>
|
||||
struct EnchantInfo
|
||||
{
|
||||
enum
|
||||
{
|
||||
ULONG_BIT = 32, // unsigned long (32<33><32><EFBFBD><EFBFBD>Ʈ)
|
||||
MAX_ARRAY = 4 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UCHAR_BIT * MAX_ARRAY
|
||||
};
|
||||
|
||||
unsigned long m_dwStatusFlag[MAX_ARRAY]; // æƮ/<2F><>æƮ <20>÷<EFBFBD><C3B7><EFBFBD>
|
||||
|
||||
EnchantInfo();
|
||||
EnchantInfo( const EnchantInfo& Info ) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
for( int i = 0 ; i < MAX_ARRAY ; ++i )
|
||||
{
|
||||
m_dwStatusFlag[ i ] = Info.m_dwStatusFlag[ i ];
|
||||
}
|
||||
}
|
||||
|
||||
void SetFlag(unsigned char cSpellKind);
|
||||
void ResetFlag(unsigned char cSpellKind);
|
||||
void ClearFlag(void);
|
||||
|
||||
bool GetFlag(unsigned char cSpellKind) const;
|
||||
};
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD> ȿ<><C8BF> <20><><EFBFBD><EFBFBD>
|
||||
struct CalculateDamageInfo
|
||||
{
|
||||
bool m_bForceDRC; // '<27><>'<27≯<EFBFBD> <20>⺻ DRC<52><43> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>߰<EFBFBD> DRC<52><43> <20><>ü
|
||||
|
||||
float m_fDRC; // <20>߰<EFBFBD> DRC
|
||||
short m_nOffenceRevision; // <20>߰<EFBFBD> <20><><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD>
|
||||
short m_nMinDamage; // <20>߰<EFBFBD> <20>ּҵ<D6BC><D2B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
short m_nMaxDamage; // <20>߰<EFBFBD> <20>ִ뵥<D6B4><EBB5A5><EFBFBD><EFBFBD>
|
||||
|
||||
CalculateDamageInfo()
|
||||
: m_bForceDRC(false), m_fDRC(0.0f), m_nOffenceRevision(0), m_nMinDamage(0), m_nMaxDamage(0)
|
||||
{ }
|
||||
|
||||
CalculateDamageInfo(bool bForceDRC, float fDRC, short nOffenceRevision, short nMinDamage, short nMaxDamage)
|
||||
: m_bForceDRC(bForceDRC), m_fDRC(fDRC),
|
||||
m_nOffenceRevision(nOffenceRevision), m_nMinDamage(nMinDamage), m_nMaxDamage(nMaxDamage)
|
||||
{ }
|
||||
};
|
||||
typedef CalculateDamageInfo* LPCalculateDamageInfo;
|
||||
|
||||
|
||||
// ij<><C4B3><EFBFBD>Ϳ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD>
|
||||
struct CharacterStatus
|
||||
{
|
||||
short m_nSTR; // ij<><C4B3><EFBFBD><EFBFBD> STR
|
||||
short m_nDEX; // ij<><C4B3><EFBFBD><EFBFBD> DEX
|
||||
short m_nCON; // ij<><C4B3><EFBFBD><EFBFBD> CON
|
||||
short m_nINT; // ij<><C4B3><EFBFBD><EFBFBD> INT
|
||||
short m_nWIS; // ij<><C4B3><EFBFBD><EFBFBD> WIS
|
||||
|
||||
CharacterStatus();
|
||||
CharacterStatus(CHAR_INFOST& characterDBData);
|
||||
void Init(CHAR_INFOST& characterDBData);
|
||||
};
|
||||
typedef CharacterStatus* LPCharacterStatus;
|
||||
|
||||
|
||||
struct FightStatus
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28>ߺ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
enum CalculateState
|
||||
{
|
||||
CS_NONE = 0, // <20>ʱ<EFBFBD>ȭ
|
||||
CS_BASE_INFO = 1, // <20>⺻ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD><CFB7><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
CS_EQUIP_INFO = 2, // <20><><EFBFBD><EFBFBD> ȿ<><C8BF><EFBFBD><EFBFBD> <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
CS_ENCHANT_INFO = 3 // <20><>æƮ ȿ<><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
enum Const
|
||||
{
|
||||
MAX_INCHANT_HP = 15000,
|
||||
MAX_INCHANT_MP = 15000
|
||||
};
|
||||
|
||||
long m_lMinDamage; // <20>ּҵ<D6BC><D2B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
long m_lMaxDamage; // <20>ִ뵥<D6B4><EBB5A5><EFBFBD><EFBFBD>
|
||||
short m_wArmor; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
short m_wHitRate; // <20><><EFBFBD><EFBFBD>
|
||||
short m_wEvade; // ȸ<><C8B8>
|
||||
|
||||
unsigned short m_nMaxHP; // HP <20>ִ밪
|
||||
short m_wHPRegen; // HP ȸ<><C8B8>
|
||||
unsigned short m_nMaxMP; // MP <20>ִ밪
|
||||
short m_wMPRegen; // MP ȸ<><C8B8>
|
||||
|
||||
short m_wCritical; // ũ<><C5A9>Ƽ<EFBFBD><C6BC>
|
||||
short m_wBlock; // <20><><EFBFBD><EFBFBD>
|
||||
short m_wSpeed; // <20>ӵ<EFBFBD>
|
||||
short m_wCoolDownRevision; // <20><><EFBFBD>ٿ<D9BF><EEBAB8>
|
||||
short m_wSkillPoint; // <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD>Ʈ
|
||||
|
||||
short m_wMagicPower; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
short m_wMagicResist; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
int m_wLuck; // <20><><EFBFBD>
|
||||
|
||||
//--// start..
|
||||
short m_wFrost; // <20>ñ<EFBFBD>/<2F><><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD>
|
||||
short m_wFire; // <20><>/<2F><> <20>Ӽ<EFBFBD>
|
||||
short m_wElectro; // <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD>
|
||||
short m_wDarkness; // <20><><EFBFBD><EFBFBD>/<2F><> <20>Ӽ<EFBFBD>
|
||||
//--// end..
|
||||
|
||||
float m_fDefenceRate; // <20><><EFBFBD><EFBFBD>%
|
||||
float m_fCriticalMagnification; // ũ<><C5A9>Ƽ<EFBFBD>ù<EFBFBD><C3B9><EFBFBD>
|
||||
float m_fCriticalRate; // ũ<><C5A9>Ƽ<EFBFBD><C6BC>%
|
||||
float m_fBlockRate; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%
|
||||
float m_fSpeedRate; // <20>ӵ<EFBFBD>%
|
||||
float m_fCoolDownRevisionRate; // <20><><EFBFBD>ٿ<D9BF><EEBAB8>%
|
||||
float m_fMagicResistRate; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%
|
||||
|
||||
float m_fLuckResistRate; // <20><>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD>%
|
||||
|
||||
float m_fLevelExplosion; // <20><><EFBFBD><EFBFBD> <20>ͽ<EFBFBD><CDBD>÷<EFBFBD><C3B7><EFBFBD>
|
||||
|
||||
unsigned char m_cCriticalType; // ũ<><C5A9>Ƽ<EFBFBD><C6BC> Ÿ<><C5B8>
|
||||
unsigned char m_cComboCount; // <20><><EFBFBD><EFBFBD> <20><EFBFBD> Ƚ<><C8BD>
|
||||
|
||||
unsigned char m_cCalculateState; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
FightStatus();
|
||||
|
||||
bool CalculateBaseInfo(const CharacterStatus& characterStatus, const unsigned short wLevel, const unsigned char cClass);
|
||||
|
||||
bool CalculateEquipInfo(const Item::CEquipment** ppEquip, const bool bFirstWeaponSlot, const bool bRightHand, const bool bRideFlag,
|
||||
const SKILL& skill, const unsigned char cLevel, const unsigned short wRiderAbility, const unsigned short wLuckAbility, const unsigned short wLevelAbility,
|
||||
const CharacterStatus& characterStatus, const unsigned char cClass, FightStatus& resultStatus) const;
|
||||
|
||||
bool CalculateEnchantInfo(const unsigned short* aryEnchantLevel, FightStatus& resultStatus) const;
|
||||
|
||||
|
||||
void CalculateSubStatus(void);
|
||||
|
||||
static bool CheckEquipable(const Item::CEquipment* lpEquip, const CharacterStatus& characterStatus,
|
||||
const unsigned char cClass, const unsigned char cLevel, const unsigned short wLevelAbility); //--//
|
||||
};
|
||||
|
||||
|
||||
#pragma pack(8)
|
||||
|
||||
//------------------------------------------------------------------------------------
|
||||
// TODO : memory alignment <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>.
|
||||
// : 4byte<74><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD> alignment <20><> <20>ǵ<EFBFBD><C7B5><EFBFBD> <20><> <20><>.
|
||||
// : <20><EFBFBD><DEB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD> ũ<>Ⱑ <20><><EFBFBD><EFBFBD> <20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> short<72><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>.
|
||||
|
||||
// <20><><EFBFBD>⳪ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ɷ<EFBFBD>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD>ӻ<D3BB> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̰<EFBFBD><CCB0><EFBFBD><EFBFBD><EFBFBD> <20><>)
|
||||
struct CreatureStatus
|
||||
{
|
||||
__int64 m_nExp; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڽ<EFBFBD><DABD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int m_nLevel; // <20><><EFBFBD><EFBFBD>
|
||||
unsigned short m_nNowHP; // <20><><EFBFBD><EFBFBD> HP
|
||||
unsigned short m_nNowMP; // <20><><EFBFBD><EFBFBD> MP (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ밪<D6B4><EBB0AA><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ)
|
||||
|
||||
FightStatus m_StatusInfo; // <20><><EFBFBD>κ<EFBFBD><CEBA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̰<EFBFBD><CCB0><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
CreatureStatus();
|
||||
CreatureStatus(CHAR_INFOST& characterDBData);
|
||||
void Init(CHAR_INFOST& characterDBData);
|
||||
};
|
||||
typedef CreatureStatus* LPCreatureStatus;
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user