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:
2025-11-29 20:17:20 +09:00
parent 5d3cd64a25
commit dd97ddec92
11602 changed files with 1446576 additions and 0 deletions

View File

@@ -0,0 +1,271 @@
#ifndef _CMONSTER_H_
#define _CMONSTER_H_
#include <Creature/Character/Character.h>
#include <Creature/Monster/FSM/FSM.h>
#include <Map/FieldMap/Cell.h>
#include <Skill/Spell/SpellKind.h>
#include <GameEvent/GameEventMgr.h>
#include <Community/Party/Party.h>
#include "MonsterMgr.h"
const unsigned long LongRange = 45; // <20><><EFBFBD>Ÿ<EFBFBD> <20><><EFBFBD>ݿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ѿư<D1BE><C6B0><EFBFBD> <20>Ÿ<EFBFBD>.
const unsigned long OutsideSearchRange = 10; // <20><><EFBFBD><EFBFBD> <20>ۿ<EFBFBD><DBBF><EFBFBD><EFBFBD><EFBFBD> <20>þ<EFBFBD>
const unsigned long ReturnRange = 20; // <20><><EFBFBD><EFBFBD>
const unsigned long MoveRange = 15; // <20><><EFBFBD><EFBFBD> <20>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20>̵<EFBFBD><CCB5>Ÿ<EFBFBD>.
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
class CStatue;
class CMonster : public CAggresiveCreature
{
public:
enum MovingPattern { AREA = 0, FIXED, ROUTE, NONAREA };
enum _Const
{
MONSTER_SEARCH_RANGE = 8,
BOSS_SEARCH_RANGE = 15,
NAMED_SEARCH_RANGE = 15,
CHIEF_SEARCH_RANGE = 15,
MAGE_SEARCH_RANGE = 18,
ACOLYTE_SEARCH_RANGE = 18,
GUARD_SEARCH_RANGE = 15,
GOLD_INC_LEVEL_LIMIT = 20,
RUN_ANI_LIMIT_MAX = 3,
RUN_ANI_LIMIT_MIN = 1,
RATE_MOVING_AND_PLAYER = 10,
MAX_MONSTER_UID = 0xFFFF - 0x8000 - 0x4000,
MONSTER_PARTY_BIT = 0x80000000
};
struct MonsterCreateInfo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü
typedef MonsterCreateInfo *LPMonsterCreateInfo;
CMonster();
CMonster(MonsterCreateInfo& MonsterCreate, bool bAdminCmdSummon = false);
virtual ~CMonster();
// --------------------------------------------------------------------------------------------
// <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD>
bool InitMonster(Position& Pos, bool bDead = false);
virtual bool GetMotion(unsigned long MotionID, MotionInfo& Motion); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
// --------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ൿ <20><><EFBFBD><EFBFBD>
bool CheckPartyTarget(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ƽ<EFBFBD><C6BC> Ÿ<><C5B8><EFBFBD><EFBFBD> üũ<C3BC>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ°<CFB4>?
virtual void SearchPlayer(void); // <20>÷<EFBFBD><C3B7>̾<EFBFBD> <20>˻<EFBFBD>
bool IsOverlap(void); // <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD> <20><>ġ<EFBFBD>°<EFBFBD> <20>˻<EFBFBD>
bool Process(void); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ൿ ó<><C3B3> - <20><><EFBFBD>ο<EFBFBD><CEBF><EFBFBD> UpdateBehaviorȣ<72><C8A3>
void UpdateBehavior(unsigned long dwTick); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ൿ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
virtual void NormalBehavior(unsigned long dwTick); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
virtual void AttackBehavior(unsigned long dwTick); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
virtual void ReturnBehavior(unsigned long dwTick); // <20><>ȯ <20><><EFBFBD><EFBFBD>
virtual void EscapeBehavior(void); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
virtual void DeadBehavior(unsigned long dwTick); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// Action <20><><EFBFBD><EFBFBD> ó<><C3B3>
void AttackAction();
void WalkAttackAction(float fVelocity=0.1f);
void RunAction(float fDistance, float fDstX, float fDstZ);
bool IsReturn();
inline Position CalculateCoor(void); // <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ǥ <20><><EFBFBD><EFBFBD>
virtual const int CalculateFixLevelGap(CAggresiveCreature *pDefender);
virtual bool Attack(AtType attackType, unsigned char cDefenderNum,
CAggresiveCreature** ppDefenders, unsigned char* cDefenderJudges, unsigned short* wDefenderMPHeal);
inline virtual void Attacked(void); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
bool MultiAttack(void); // Ÿ<><C5B8><EFBFBD><EFBFBD> ã<><C3A3> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD>ο<EFBFBD><CEBF><EFBFBD> Attack<63>Լ<EFBFBD><D4BC><EFBFBD> ȣ<><C8A3>)
void CancelTarget(bool bSaveThreat = false); // Ÿ<><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
virtual bool Dead(CAggresiveCreature* pOffencer); // <20>׾<EFBFBD><D7BE><EFBFBD> <20><> ȣ<><C8A3><EFBFBD>Ǵ<EFBFBD> <20>Լ<EFBFBD>
virtual EnemyCheck::EnemyType IsEnemy(CCreature* lpTarget, unsigned char* cResult = NULL);
virtual void Respawn(unsigned long dwTick);
// --------------------------------------------------------------------------------------------
// <20><>Ƽ <20><><EFBFBD><EFBFBD>
void SetPID(unsigned long dwPID) { m_dwPID = dwPID; }
unsigned long GetPID(void) { return m_dwPID; }
// --------------------------------------------------------------------------------------------
// <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD>
virtual LONG SendMove(unsigned short nAniNum);
// --------------------------------------------------------------------------------------------
// <20><>Ÿ <20>Լ<EFBFBD>
virtual Item::CItem* SellToCharacter(CCharacter *lpCustomer, unsigned short wKindItem, TakeType takeType,
Item::CItem* lpRequestItem, unsigned long &dwPrice, unsigned short wCouponID, unsigned short &usError) { return NULL; }
bool HasSkill(void); // <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΰ<EFBFBD>?
int GetUseSkillNum(void); // <20><EFBFBD><EEB0A1><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ°<D6B4>?
inline unsigned char GetOptionBaseNum(Item::EquipType::OptionType eType);
unsigned long GetDropRate(unsigned char nIndex);
unsigned long GetAwardItem(int nIndex) { return m_MonsterInfo.m_aryAwardItem[nIndex]; }
inline CStatue* DowncastToStatue(void);
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ϸù<CFB7>ȣ <20><><EFBFBD><EFBFBD>
int GetSerialNumber(void) { return ((m_dwCID - Creature::MONSTER_BIT) >> 16); }
unsigned short GetKID(void) { return static_cast<unsigned short>(m_MonsterInfo.m_dwKID); }
unsigned char GetPattern(void) { return m_MonsterInfo.m_cSkillPattern; }
int GetCurrentState(void) { return m_nCurrentState; }
short GetAttackRange(void) { return m_MonsterInfo.m_wAttackRange; }
bool IsDeadSummonMonster(void);
virtual void SetGuard(bool bGuard) { return; }
virtual unsigned short ApplyDamage(AtType attackType, CAggresiveCreature* pOffencer, unsigned char &cOffencerJudge,
unsigned char &cDefenserJudge, unsigned short& wOffencerMPHeal, unsigned short& wDefenserMPHeal, unsigned short &wError);
virtual void GuardMe(CAggresiveCreature* lpTarget, unsigned short wThreat) { return; }
virtual void AttackCmd(CAggresiveCreature* lpTarget, unsigned short wThreat) { return; }
virtual bool IsPeaceMode(void) { return false; }
virtual bool IsRideArms(void) const { return false; }
virtual unsigned char GetNation() const { return m_MonsterInfo.m_cNation; }
virtual unsigned char GetRealmPoint() { return 0; }
static void LogMonsterMoveCount(void);
Broadcast2nd::CSerializeMonsterData& GetSerializeData() { return m_SerializeMonsterData; }
protected:
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum _Timing
{
FPS = 30
};
MonsterInfo m_MonsterInfo;
Position m_OriginalPosition; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD> <20><>ġ
unsigned long m_dwLastBehaviorTick; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ൿ<EFBFBD><E0B5BF> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Tick
Broadcast2nd::CSerializeMonsterData m_SerializeMonsterData;
CAggresiveCreature* m_lpTarget; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8>
long m_lCurrentFrame; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Frame<6D><65> <20><>Ÿ<EFBFBD><C5B8>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int m_nNormalMovingDelay; // <20><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD> Ÿ<>̹<EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7>̾<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int m_nLeaveMovingNum; // <20><><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><>
int m_nMovingPattern; // <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>, <20>ٹ<EFBFBD><D9B9><EFBFBD>, <20><>Ʈ, <20>񿵿<EFBFBD>)
int m_nCurrentState; // <20><><EFBFBD><EFBFBD> State
unsigned short m_wSearchRange; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>þ<EFBFBD>
unsigned short m_wDefaultSearchRange; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><20>þ<EFBFBD>
bool m_bLongRangeAttacked; // <20><><EFBFBD>Ÿ<EFBFBD> <20><><EFBFBD><EFBFBD>? (<28><><EFBFBD>Ÿ<EFBFBD> <20><><EFBFBD>ݿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>þ߸<C3BE> <20><><EFBFBD><EFBFBD> Ÿ<><C5B8><EFBFBD><EFBFBD> ã<><C3A3>)
bool m_bScout; // <20><>ī<EFBFBD><C4AB><EFBFBD><EFBFBD><EFBFBD>ΰ<EFBFBD>?
bool m_bAttacking; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ΰ<EFBFBD>?
unsigned short m_wRespawnArea; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>ɼ<EFBFBD> <20><><EFBFBD><EFBFBD>.
bool m_bAvoid; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ΰ<EFBFBD>? (<28><><EFBFBD>ϱ<EFBFBD> <20>ɼ<EFBFBD><C9BC><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
bool m_bAdminCmdSummon; // Admin <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD><C8AF> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΰ<EFBFBD>?
// <20><>Ƽ <20><><EFBFBD><EFBFBD> PID
unsigned long m_dwPID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ƽ <20><><EFBFBD>̵<EFBFBD>
static LONG ms_NormalBehaviorSendCount;
static LONG ms_AttackBehaviorSendCount;
static LONG ms_ReturnBehaviorSendCount;
static LONG ms_EscapeBehaviorSendCount;
static LONG ms_DeadBehaviorSendCount;
};
struct CMonster::MonsterCreateInfo
{
Position m_Pos;
unsigned long m_dwCID;
unsigned long m_dwPID;
int m_nKID;
int m_nMovingPattern;
bool m_bScout;
unsigned short m_wRespawnArea;
MonsterCreateInfo()
: m_dwCID(0), m_nKID(0), m_dwPID(0), m_bScout(false), m_nMovingPattern(0), m_wRespawnArea(0)
{
}
};
Position CMonster::CalculateCoor(void)
{
float fVel = (true == GetEnchantInfo().GetFlag(Skill::SpellID::Slow)) ?
m_MotionInfo.m_fVelocity / 4 : m_MotionInfo.m_fVelocity;
return Position(m_CurrentPos.m_fPointX + fVel * cosf(m_MotionInfo.m_fDirection),
m_CurrentPos.m_fPointY, m_CurrentPos.m_fPointZ + fVel * sinf(m_MotionInfo.m_fDirection));
}
void CMonster::Attacked(void)
{
m_bLongRangeAttacked = true;
if (m_nCurrentState == STATE_ID_NORMAL || m_nCurrentState == STATE_ID_RETURN)
{
m_lCurrentFrame = 0;
}
m_nCurrentState = CFSM::GetInstance().StateTransition(m_nCurrentState, INPUT_ID_ATTACKED_PLAYER);
}
unsigned char CMonster::GetOptionBaseNum(Item::EquipType::OptionType eType)
{
switch (eType)
{
case Item::EquipType::STANDARD_OPTION: return m_MonsterInfo.m_cStandardBaseNum;
case Item::EquipType::OVER_OPTION: return m_MonsterInfo.m_cOverBaseNum;
}
return 0;
}
CStatue* CMonster::DowncastToStatue(void)
{
if (0 != this &&
MonsterInfo::MIN_STATUE_KID <= m_MonsterInfo.m_dwKID &&
MonsterInfo::MAX_STATUE_KID >= m_MonsterInfo.m_dwKID)
{
return reinterpret_cast<CStatue *>(this);
}
return NULL;
}
#endif