www.pudn.com > mir112347628.rar > Actor.h
#ifndef _CACTOR_H
#define _CACTOR_H
/******************************************************************************************************************
CActor Class
*******************************************************************************************************************/
#pragma pack(1)
typedef struct tagMESSAGEBODYWL
{
LONG lParam1;
LONG lParam2;
LONG nTag1; // ¶§¸°³ð ID.(SM_STRUCKÀ϶§).
LONG nTag2;
}MESSAGEBODYWL, *LPMESSAGEBODYWL;
typedef struct tagMESSAGEBODYW
{
WORD wParam1;
WORD wParam2;
WORD wTag1; // ¶§¸°³ð ID.(SM_STRUCKÀ϶§).
WORD wTag2;
}MESSAGEBODYW, *LPMESSAGEBODYW;
typedef struct tagCHARDESC
{
LONG nFeature;
LONG nStatus;
}CHARDESC, *LPCHARDESC;
typedef struct tagFEATURE
{
BYTE bGender;
BYTE bWeapon;
BYTE bDress;
BYTE bHair;
}FEATURE, *LPFEATURE;
#pragma pack(8)
class CActor
{
private:
public:
DWORD m_dwIdentity; // ID Index From Server.
CHAR m_szName[64]; // ij¸¯Åͳª ¸ó½ºÅÍÀÇ À̸§.
CHAR m_szGuildName[64];
FEATURE m_stFeature; // ij¸¯ÅÍÀÇ ¿ÜÇüÀ» °áÁ¤Áþ´Â´Ù.
BYTE m_bActorImgIdx; // ÇöÀç Actor°¡ °¡Áú À̹ÌÁö±¸Á¶Ã¼ÀÇ ¹øÈ£.
BYTE m_bEffectImgIdx; // ÇöÀç Actor°¡ °¡Áú À̹ÌÁö±¸Á¶Ã¼ÀÇ ¹øÈ£.
CWHWilImageData* m_pxActorImage; // À̹ÌÁö¸¦ ¾ò¾î¿Ã Æ÷ÀÎÅ͵é.
RECT m_rcActor; // ÇöÀç ½ºÅ©¸°»óÀÇActorÀÇ »ç°¢ ¿µ¿ª.
RECT m_rcTargetRgn; // ÇöÀç ActorÀÇ Å¸°Ù¿µ¿ª.
DWORD m_dwFstFrame; // ÇöÀç µ¿ÀÛÀÇ ½ÃÀÛ ÇÁ·¹ÀÓ.
DWORD m_dwEndFrame; // ÇöÀç µ¿ÀÛÀÇ ¸¶Áö¸·ÇÁ·¹ÀÓ.
WORD m_wDelay; // ÇöÀç µ¿ÀÛ¿¡ ´ëÇÑ Áö¿¬½Ã°£.
BYTE m_bCurrMtn; // ÇöÀç µ¿ÀÛ.
BYTE m_bCurrDir; // ÇöÀç ¹æÇâ.
BYTE m_bMoveDir; // ÇöÀç ¹æÇâ.
DWORD m_dwCurrFrame; // ÇöÀç ÇÁ·¹ÀÓ.
WORD m_wCurrDelay; // ÇöÀç Áö¿¬½Ã°£.
WORD m_wOldPosX; // ÇöÀç ÇൿÀÌ ÀÖ±âÀüÀÇ Å¸ÀÏXÁÂÇ¥.
WORD m_wOldPosY;
BYTE m_bOldDir; // ÇöÀç ÇൿÀÌ ÀÖ±âÀüÀÇ ¹æÇâ.
WORD m_wPosX; // ŸÀÏ XÁÂÇ¥.
WORD m_wPosY; // ŸÀÏ YÁÂÇ¥.
SHORT m_shShiftPixelX; // ÇöÀç ÀÚ½ÅÀÇ Å¸ÀÏ¿¡¼ XÃุŠÀ̵¿ÇÑ Çȼ¿ÀÇ °Å¸®.
SHORT m_shShiftPixelY; // ÇöÀç ÀÚ½ÅÀÇ Å¸ÀÏ¿¡¼ YÃุŠÀ̵¿ÇÑ Çȼ¿ÀÇ °Å¸®.
SHORT m_shShiftTileX; // ÇöÀç ÀÚ½ÅÀÇ Å¸ÀÏ¿¡¼ XÃุŠÀ̵¿ÇÑ Å¸ÀÏÀÇ °Å¸®.
SHORT m_shShiftTileY; // ÇöÀç ÀÚ½ÅÀÇ Å¸ÀÏ¿¡¼ YÃุŠÀ̵¿ÇÑ Å¸ÀÏÀÇ °Å¸®.
SHORT m_shScrnPosX; // Áß½ÉÁ¡À» °í·ÁÇÏÁö ¾ÊÀº ȸé»óÀÇ XÁÂÇ¥.
SHORT m_shScrnPosY; // Áß½ÉÁ¡À» °í·ÁÇÏÁö ¾ÊÀº ȸé»óÀÇ YÁÂÇ¥.
BYTE m_bMoveSpeed; // À̵¿¼Óµµ.
CWHQueue m_xPacketQueue; // Actor°¡ ó¸®ÇØ¾ßµÉ ¸Þ½ÃÁö¸¦ ÀúÀåÇϰí Àִ ť.
BOOL m_bMsgHurryCheck; // ¸Þ½ÃÁö°¡ 2°³ÀÌ»ó ½×¿©ÀÖÀ»¶§´Â ÇÁ·¹ÀÓÀ» 1ÇÁ·¹ÀÓ¾¿À» °Ç³Ê¶Ú´Ù.
BYTE m_bBackStepFrame;
BYTE m_bBackStepFrameCnt;
DWORD m_dwCurrEffectFrame; // ij¸¯ÅÍ EffectÇöÀç ÇÁ·¹ÀÓ.
DWORD m_dwFstEffectFrame; // ij¸¯ÅÍ EffectóÀ½ ÇÁ·¹ÀÓ.
DWORD m_dwEndEffectFrame; // ij¸¯ÅÍ Effect¸¶Áö¸· ÇÁ·¹ÀÓ.
BYTE m_bEffectFrame;
BYTE m_bEffectFrameCnt;
BYTE m_bLightRadius[2]; // ±¤¿ø ³Êºñ.
BYTE m_bLightColor [2][3]; // ±¤¿ø »ö.
BOOL m_bUseEffect; // ÀÌÆåÆ®ÇÁ·¹ÀÓÀ» »ç¿ë.
BOOL m_bUseSwordEffect; // °Ë¹ýÈ¿°ú »ç¿ë.
BOOL m_bWarMode;
DWORD m_dwWarModeTime;
BYTE m_bHPPercent;
WORD m_wMAXHP;
WORD m_wHP;
WORD m_wMP;
BOOL m_bOpenHealth;
BYTE m_bLightSize; // ActorÁÖº¯ÀÇ ±¤¿øÅ©±â.
D3DVERTEX m_avBoard[4];
WORD m_wABlendDelay;
WORD m_wABlendCurrDelay;
BOOL m_bABlendRev;
BOOL m_bReverse;
INT m_nState;
WORD m_wStateClr;
DWORD m_dwNameClr;
BOOL m_bIsDead;
FEATURE m_stHitter;
BYTE m_bAppearState;
BYTE m_bMoveNextFrmCnt;
BOOL m_bIsMoved;
BOOL m_bFstSoundPlayed;
INT m_nDividedChatLine;
DWORD m_wCurrChatDelay;
CHAR m_szChatMsg[MAX_PATH]; // äÆÃ¸Þ½ÃÁö.
CHAR m_szChatMsgArg[5][MAX_PATH]; // äÆÃ¸Þ½ÃÁö¸¦ 5°³ÀÇ ½ºÆ®¸µÀ¸·Î ±¸ºÐÇѰÍ.
public:
//---------------------------------------------------------------------------------------------------------------//
// »ý¼ºÀÚ ¹× ¼Ò¸êÀÚ.
CActor();
~CActor();
virtual VOID InitActor();
virtual VOID DestroyActor();
//---------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------//
// »ý¼º.
virtual BOOL Create(CImageHandler* pxImgHandler, FEATURE* pstFeature, BYTE bMtn, WORD bDir, WORD wPosX, WORD wPosY);
//---------------------------------------------------------------------------------------------------------------//
BOOL LoadEffect(CImageHandler* pxImgHandler, WORD wEffectNum, BYTE bDir = 0);
VOID DrawWithEffected(INT nx, INT nY, INT nXSize, INT nYSize, WORD* pwSrc, WORD wChooseColor1 = 0XFFFF, WORD wChooseColor2 = 0XFFFF, BOOL bFocused = FALSE, BYTE bOpa = 50, WORD wState = _STATE_NOTUSED);
//---------------------------------------------------------------------------------------------------------------//
// ÇÁ·¹ÀÓ ¼³Á¤°ü·Ã.
BOOL CheckFeatureValidate(FEATURE stFeature);
BOOL ChangeFeature(FEATURE stFeature);
virtual BOOL SetMotionFrame(BYTE bMtn, BYTE bDir);
//---------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------//
// ij¸¯ÅÍ À̵¿.
VOID SetMoving();
VOID SetBackStepMoving();
VOID SetMoved();
WORD GetCharState();
//---------------------------------------------------------------------------------------------------------------//
VOID ChatMsgAdd();
VOID ShowMessage(INT nLoopTime);
VOID StruckMsgReassign();
virtual VOID PlayActSound();
//---------------------------------------------------------------------------------------------------------------//
// µ¿ÀÛ ÁøÇà.
virtual BOOL UpdatePacketState();
virtual VOID UpdateMotionState(INT nLoopTime, BOOL bIsMoveTime);
virtual BOOL UpdateMove(BOOL bIsMoveTime);
// À¯Çüº° ÆÐŶ»óÅÂÀû¿ë.
virtual VOID OnCharDescPacket(LPPACKETMSG lpPacketMsg);
virtual VOID OnUserName(LPPACKETMSG lpPacketMsg);
virtual VOID OnChangeNameClr(LPPACKETMSG lpPacketMsg);
virtual VOID OnChangeLight(LPPACKETMSG lpPacketMsg);
virtual VOID OnOpenHealth(LPPACKETMSG lpPacketMsg);
virtual VOID OnCloseHealth(LPPACKETMSG lpPacketMsg);
virtual VOID OnFeatureChanged(LPPACKETMSG lpPacketMsg);
virtual VOID OnHealthSpellChanged(LPPACKETMSG lpPacketMsg);
virtual VOID OnWalk(LPPACKETMSG lpPacketMsg);
virtual VOID OnTurn(LPPACKETMSG lpPacketMsg);
virtual VOID OnDigup(LPPACKETMSG lpPacketMsg);
virtual VOID OnDigDown(LPPACKETMSG lpPacketMsg);
virtual VOID OnDeath(LPPACKETMSG lpPacketMsg);
virtual VOID OnBackStep(LPPACKETMSG lpPacketMsg);
virtual VOID OnStruck(LPPACKETMSG lpPacketMsg);
virtual VOID OnHit(LPPACKETMSG lpPacketMsg);
virtual VOID OnFlyAxe(LPPACKETMSG lpPacketMsg);
virtual VOID OnLighting(LPPACKETMSG lpPacketMsg);
//---------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------//
// Rendering.
virtual BOOL DrawActor(CMapHandler* pxMap, BOOL bFocused = FALSE, BOOL bShadowAblended = FALSE,
BOOL bUseScrnPos = TRUE, BOOL bDrawShadow = TRUE);
virtual VOID DrawHPBar();
virtual VOID DrawName();
BOOL DrawEffect();
//---------------------------------------------------------------------------------------------------------------//
protected:
public:
};
/******************************************************************************************************************
CNPC Class
*******************************************************************************************************************/
class CNPC : public CActor
{
private:
private:
public:
virtual VOID OnHit(LPPACKETMSG lpPacketMsg);
virtual VOID OnTurn(LPPACKETMSG lpPacketMsg);
virtual BOOL UpdatePacketState();
virtual VOID UpdateMotionState(INT nLoopTime, BOOL bIsMoveTime);
virtual BOOL DrawActor(CMapHandler* pxMap, BOOL bFocused = FALSE, BOOL bShadowAblended = FALSE,
BOOL bUseScrnPos = TRUE, BOOL bDrawShadow = TRUE);
};
/******************************************************************************************************************
CHero Class
*******************************************************************************************************************/
#pragma pack(1)
typedef struct tagFEATUREEX
{
BYTE bHorse;
BYTE wHairColor;
BYTE wDressColor;
}FEATUREEX, *LPFEATUREEX;
#pragma pack(8)
class CHero : public CActor
{
private:
public:
FEATUREEX m_stFeatureEx;
BYTE m_bWeaponImgIdx; // ÇöÀç Actor ¹«±â°¡ °¡Áú À̹ÌÁö±¸Á¶Ã¼ÀÇ ¹øÈ£.
BYTE m_bHairImgIdx; // ÇöÀç Actor ¸Ó¸®°¡ °¡Áú À̹ÌÁö±¸Á¶Ã¼ÀÇ ¹øÈ£.
BYTE m_bHorseImgIdx; // ÇöÀç Actor ¸»ÀÌ °¡Áú À̹ÌÁö±¸Á¶Ã¼ÀÇ ¹øÈ£.
BYTE m_bYedoCnt;
BYTE m_bFireHitCnt;
BOOL m_bUseBanwol;
BOOL m_bUseErgum;
RECT m_rcHair;
RECT m_rcWeapon;
RECT m_rcHorse;
CWHWilImageData* m_pxHairImage;
CWHWilImageData* m_pxWeaponImage;
CWHWilImageData* m_pxHorseImage;
DWORD m_dwCurrHairFrame;
DWORD m_dwCurrWeaponFrame;
DWORD m_dwCurrHorseFrame;
BYTE m_bShieldCurrFrm;
WORD m_wShieldCurrDelay;
SHORT m_shHitSpeed;
BOOL m_bIsMon;
SHORT m_shCurrMagicID;
protected:
public:
CHero();
~CHero();
virtual VOID InitActor();
virtual VOID DestroyActor();
VOID ShowShield();
VOID PlayMoveSound();
virtual VOID PlayActSound();
virtual BOOL ChangeFeature(FEATURE stFeature, FEATUREEX stFeatureEx);
virtual BOOL Create(CImageHandler* pxImgHandler, BYTE bMtn, BYTE bDir, WORD wPosX, WORD wPosY, FEATURE* pstFeature, FEATUREEX* pstFeatureEx);
virtual BOOL UpdatePacketState();
virtual VOID UpdateMotionState(INT nLoopTime, BOOL bIsMoveTime);
virtual BOOL UpdateMove(BOOL bIsMoveTime);
virtual VOID OnRun(LPPACKETMSG lpPacketMsg);
virtual VOID OnRush(LPPACKETMSG lpPacketMsg);
virtual VOID OnMagicFire(LPPACKETMSG lpPacketMsg);
virtual VOID OnSpell(LPPACKETMSG lpPacketMsg);
virtual VOID OnCharDescPacket(LPPACKETMSG lpPacketMsg);
virtual VOID OnFeatureChanged(LPPACKETMSG lpPacketMsg);
virtual VOID OnCharStatusChanged(LPPACKETMSG lpPacketMsg);
virtual VOID OnBackStep(LPPACKETMSG lpPacketMsg);
virtual VOID OnDeath(LPPACKETMSG lpPacketMsg);
virtual VOID OnWalk(LPPACKETMSG lpPacketMsg);
virtual VOID OnTurn(LPPACKETMSG lpPacketMsg);
virtual VOID OnStruck(LPPACKETMSG lpPacketMsg);
virtual VOID OnHit(LPPACKETMSG lpPacketMsg);
virtual VOID OnButch(LPPACKETMSG lpPacketMsg);
virtual BOOL DrawActor(CMapHandler* pxMap, BOOL bFocused = FALSE, BOOL bShadowAblended = FALSE,
BOOL bUseScrnPos = TRUE, BOOL bDrawShadow = TRUE);
};
/******************************************************************************************************************
CMyHero Class
*******************************************************************************************************************/
#pragma pack(1)
typedef struct tagACTORABILITY
{
WORD wAC;
WORD wMAC;
WORD wDC;
WORD wMC;
WORD wSC;
WORD wHP;
WORD wMP;
WORD wMaxHP;
WORD wMaxMP;
WORD wWeight;
BYTE bExpCount;
BYTE bExpMaxCount;
BYTE bLevel;
BYTE bReserved1;
BYTE bWearWeight;
BYTE bMaxWearWeight;
BYTE bHandWeight;
BYTE bMaxHandWeight;
DWORD dwExp;
DWORD dwMaxExp;
WORD wMaxWeight;
}ACTORABILITY, *LPACTORABILITY;
typedef struct tagACTORSUBABILITY
{
WORD wAntiMagic; // ¸¶¹ýȸÇÇ.
BYTE bHitPoint; // Á¤È®.
BYTE bSpeedPoint; // ¹Îø.
BYTE bAntiPoison; // Áßµ¶È¸ÇÇ.
BYTE bPoisonRecover; // Áßµ¶È¸º¹.
BYTE bHealthRecover; // ü·Âȸº¹.
BYTE bSpellRecover; // ¸¶·Âȸº¹.
}ACTORSUBABILITY, *LPACTORSUBABILITY;
#pragma pack(8)
class CMyHero : public CHero
{
private:
public:
//---------------------------------------------------------------------------------------------------------------//
// ij¸¯ÅÍ º¸Á¤¿ë º¯¼ö.
DWORD m_dwMotionLockTime;
BOOL m_bInputLock; // ij¸¯ÅͰ¡ µ¿ÀÛµÇ¸é ¾î¶²ÀԷµµ ¹ÞÁö ¾Ê´Â´Ù.
BOOL m_bMotionLock; // ij¸¯ÅÍÀÇ µ¿ÀÛÀÌ ¼¼ÆÃµÇ¸é ¼¹ö¿¡¼ µ¿ÀÛ½ÂÀÎÀÌ ¿À±âÀü±îÁø ¾î¶²µ¿ÀÛµµ ¹ÞÁö ¾Ê´Â´Ù.
//---------------------------------------------------------------------------------------------------------------//
CMapHandler* m_pxMap;
BOOL m_bCanRun;
BYTE m_bAttackMode;
ACTORABILITY m_stAbility;
ACTORSUBABILITY m_stSubAbility;
BYTE m_bJob;
UINT m_nGlod;
CWHQueue m_xPriorPacketQueue; // Actor°¡ ó¸®ÇØ¾ßµÉ ¸Þ½ÃÁö¸¦ ÀúÀåÇϰí Àִ ť.
//---------------------------------------------------------------------------------------------------------------//
// ij¸¯ÅÍ Delay°ü·Ã º¯¼ö.
DWORD m_dwLastHitTime; // Ä®ÁúÀÌ µé¾î°¬À»¶§ÀÇ Æ½ º¸°ü°ª.
DWORD m_dwLastSpellTime; // ¸¶¹ýÀÌ µé¾î°¬À»¶§ÀÇ Æ½ º¸°ü°ª.
DWORD m_dwLastMagicTime; // ¿°È°á ½ÃÀüÈÄÀÇ Æ½º¸°ü°ª.
DWORD m_dwLastStruckTime; // ¸Â¾ÒÀ»¶§ÀÇ Æ½ º¸°ü°ª.
DWORD m_dwLastPKStruckTime;
DWORD m_dwLastRushTime; // ¹«Åº¸ ½ÃÀüÈÄÀÇ Æ½º¸°ü°ª.
DWORD m_dwLastFireHitTime; // ¿°È°á ½ÃÀüÈÄÀÇ Æ½º¸°ü°ª.
WORD m_wMagicPKDelayTime; // ¸¶¹ýÀ¸·Î »ç¶÷À» °ø°ÝÇßÀ»¶§ÀÇ ÆÐ³ÎƼDelay.(°È±â¿Í ¶Ù±â¿¡ Àû¿ëµÈ´Ù.)
WORD m_wMagicDelayTime; // ¸¶¹ýÀ»¾²°í ³ÈÄ ´ÙÀ½¸¶¹ýÀÌ µé¾î°¥¶§±îÁöÀÇ Delay.
//---------------------------------------------------------------------------------------------------------------//
protected:
public:
CMyHero();
~CMyHero();
virtual VOID InitActor();
virtual VOID DestroyActor();
VOID SetMotionState(BYTE bMtn, BYTE bDir, INT nMouseTargetID = NULL, BOOL bIsDead = FALSE, LPPOINT lpptPos = NULL, SHORT shSkill = -1);
VOID SetMapHandler(CMapHandler* pxMap);
VOID SetMagic(LPCLIENTMAGICRCD pstMagic, BYTE bKeyNum, BYTE bDir, INT nTargetID, FEATURE stTargetFeature, POINT ptTargetPos);
BOOL SetOldPosition();
BOOL CheckMyPostion();
VOID AdjustMyPostion();
BYTE CalcDirection(INT nTargetTileX, INT nTargetTileY);
POINT GetPosMouseToTile(INT nXPos, INT nYPos);
virtual BOOL Create(CImageHandler* pxImgHandler, BYTE bMtn, BYTE bDir, WORD wPosX, WORD wPosY, FEATURE* pstFeature, FEATUREEX* pstFeatureEx);
virtual VOID OnHealthSpellChanged(LPPACKETMSG lpPacketMsg);
virtual BOOL UpdatePacketState();
virtual VOID UpdateMotionState(INT nLoopTime, BOOL bIsMoveTime);
virtual BOOL UpdateMove(BOOL bIsMoveTime);
virtual BOOL DrawActor(BOOL bFocused = FALSE, BOOL bShadowAblended = FALSE,
BOOL bUseScrnPos = FALSE, BOOL bDrawShadow = TRUE);
__inline virtual BOOL ChangeFeature(FEATURE stFeature, FEATUREEX stFeatureEx)
{
if ( m_bIsMon )
{
if ( CActor::ChangeFeature(stFeature) ) return TRUE;
}
else
{
if ( CHero::ChangeFeature(stFeature, stFeatureEx) ) return TRUE;
}
return FALSE;
}
//---------------------------------------------------------------------------------------------------------------//
// ij¸¯ÅÍ Delay°ü·Ã ÇÔ¼ö.
BOOL CanNextHit(); // Áö±Ý Ä®ÁúÇÒ¼ö ÀÖ³ªÀÇ ¿©ºÎ. ·¹º§°ú Âø¿ë¹«°Ô¿¡ µû¶ó ´Þ¶óÁø´Ù.
BOOL CanWalk(); // Delay¿Í °ü·ÃÁö¾î¼ ij¸¯ÅͰ¡ ¿òÁ÷Àϼö ÀÖ´ÂÁöÀÇ ¿©ºÎ.
BOOL CanRun(); // Delay¿Í °ü·ÃÁö¾î¼ ij¸¯ÅͰ¡ ¿òÁ÷Àϼö ÀÖ´ÂÁöÀÇ ¿©ºÎ.
//---------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------//
// À¯Àú ÀÔ·ÂÇÔ¼ö.
BOOL OnLButtonDown(POINT ptMouse, INT nTargetID = -1, BOOL bIsDead = FALSE, POINT* lpptTargetPos = NULL);
BOOL OnRButtonDown(POINT ptMouse);
BOOL OnKeyDown(WPARAM wParam, LPARAM lParam, POINT ptMouse, POINT ptTargetPos, INT nMosueTargetID, FEATURE stTargetFeature);
//---------------------------------------------------------------------------------------------------------------//
};
#endif // _CACTOR_H