// Creature.h: interface for the CCreature class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_CREATURE_H__0C16A3E3_6308_4E72_AFF8_1CFE85324B6D__INCLUDED_) #define AFX_CREATURE_H__0C16A3E3_6308_4E72_AFF8_1CFE85324B6D__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "Z3DGeneralChrModel.h" #include "List.h" #include "SceneManager.h" using namespace std; const unsigned long CA_WAIT = 0; const unsigned long CA_RUN = 1; const unsigned long CA_ATTACK = 2; const unsigned long CA_MOVEATTACK = 3; const unsigned long CA_WALKBACK = 4; const unsigned long CA_WALKLEFT = 5; const unsigned long CA_WALKRIGHT = 6; const unsigned long CA_BASH = 7; const unsigned long CA_WALK = 8; const unsigned long CA_FALLDOWN = 9; const unsigned long CA_REST = 10; const unsigned long CA_SITDOWN = 11; const unsigned long CA_STANDUP = 12; const unsigned long CA_ATTACKADVANCE = 13; const unsigned long CA_ATTACKLEFT = 14; const unsigned long CA_ATTACKRIGHT = 15; const unsigned long CA_ATTACKRETREAT = 16; const unsigned long CA_ATTACK2 = 17; const unsigned long CA_ATTACK3 = 18; const unsigned long CA_ATTACK4 = 19; const unsigned long CA_RESPAWN = 20; const unsigned long CA_JUMP = 21; const unsigned long CA_LEFTDASH = 22; const unsigned long CA_RIGHTDASH = 23; const unsigned long CA_CASTING = 24; const unsigned long CA_FIRE1 = 25; const unsigned long CA_FIRE2 = 26; const unsigned long CA_COMBINATIONBLOW = 27; const unsigned long CA_BACKSTAB = 28; const unsigned long CA_AIMEDSHOT2 = 29; const unsigned long CA_ATTACK5 = 30; const unsigned long CA_ATTACK6 = 31; const unsigned long CA_BACKDASH = 32; const unsigned long CA_AIMEDSHOT1 = 33; const unsigned long CA_JUMPATTACK = 34; const unsigned long CA_JUMPATTACK2 = 35; const unsigned long CA_FRONTDASH = 36; const unsigned long CA_LAND = 37; const unsigned long CA_FORWARDJUMP = 38; const unsigned long CA_BACKJUMP = 40; const unsigned long CA_SHOT = 41; const unsigned long CA_JUMPSHOT = 42; const unsigned long CA_OVERBASH1 = 43; const unsigned long CA_OVERBASH2 = 44; const unsigned long CA_OVERBASH3 = 45; const unsigned long CA_OVERBASH4 = 46; const unsigned long CA_OVERBASH5 = 47; const unsigned long CA_POWERDRAIN = 48; const unsigned long CA_TURNPUNCH1 = 49; const unsigned long CA_TURNPUNCH2 = 50; const unsigned long CA_TURNPUNCH3 = 51; const unsigned long CA_JUMPATTACK3 = 52; const unsigned long CA_AIMEDSHOT3 = 53; const unsigned long CA_STUN = 54; const unsigned long CA_ROUNDSWING = 55; const unsigned long CA_SWIM = 100; const float RUN_INTERVAL = 255.0f; const long PACKET_LIFETIME = 10000; typedef struct ChrActionNode { unsigned long m_dwLowerChrAction; unsigned long m_dwUpperChrAction; float m_fDirection; vector3 m_vecNextPosition; float m_fVec; unsigned short m_wAniNum; unsigned short m_wAniNumCount; unsigned long m_dwFrame; } ChrActionNode; typedef struct stDamage { short sLifeTime; long lValue; unsigned short wMode; float fScale; } stDamage; class CCreature { public: int GetChrTitle( int nClass, int nMerits ); void SetChantEffect(unsigned long dwChant, BOOL bToggle, BOOL bSelf); void SetChantEffect(unsigned long dwChant, BOOL bSelf); BOOL GetSkillMotion(void); class CCreatureArrow { public: CEffScript *m_ArrowEsf; char m_PivotName[256]; CCreatureArrow() { m_ArrowEsf = NULL; memset(m_PivotName,0,sizeof(char) * 256); } ~CCreatureArrow() { if(m_ArrowEsf != NULL) { if(!CSceneManager::m_EffectManager.CheckNullScript(m_ArrowEsf)) { CSceneManager::m_EffectManager.DeleteEndScript(m_ArrowEsf); } } } }; class CCreatureEffect { //creature ¸ö¿¡ ºÙ´Â effect class public: CEffScript *m_Effect; // esf bool m_bPivotRot; int m_PivotIndex; char m_PivotName[50]; char m_EffName[50]; bool m_EffValue; unsigned long m_EffId; D3DXVECTOR3 m_EffPos; CCreatureEffect() { m_Effect = NULL; m_bPivotRot = false; m_PivotIndex= -1; memset(m_PivotName,0,sizeof(char) * 50); memset(m_EffName,0,sizeof(char) * 50); m_EffValue = false; m_EffPos.x = m_EffPos.y = m_EffPos.z = 0.0f; m_EffId = 0; } ~CCreatureEffect() { if(m_Effect != NULL) { if(!CSceneManager::m_EffectManager.CheckNullScript(m_Effect)) { m_Effect->SetAllLoopOff(); m_Effect->SetVisibility(false); //CSceneManager::m_EffectManager.DeleteEndScript(m_Effect); m_Effect = NULL; } } } }; class CWeaponEffect { //Weapon¿¡ ºÙ´Â effect public: int m_nWeaponEffectNum; //effectÀÇ °¹¼ö int m_nWeaponPosNum; //effectÀÇ °¹¼öÁß¿¡ Çö effect ³ëµåÀÇ À§Ä¡ char m_strEffect[50]; CEffScript *m_pEffect; CWeaponEffect() { m_nWeaponEffectNum = 0; m_nWeaponPosNum = 0; memset(m_strEffect,sizeof(int),50); m_pEffect = NULL; } ~CWeaponEffect() { if(m_pEffect != NULL) { if(!CSceneManager::m_EffectManager.CheckNullScript(m_pEffect)) { //CSceneManager::m_EffectManager.DeleteEndScript(m_pEffect); m_pEffect->SetAllLoopOff(); m_pEffect->SetVisibility(false); m_pEffect = NULL; } } } }; class CWeaponLine { // Weapon Line Setting Class public: LPDIRECT3DTEXTURE8 m_lpLineTexture; // Texture int m_iColor[3]; // Color int m_iBlend; // Blend Mode CWeaponLine() { m_lpLineTexture = NULL; m_iColor[0] = m_iColor[1] = m_iColor[2] = 255; m_iBlend = 0; } ~CWeaponLine() { if(m_lpLineTexture != NULL) { m_lpLineTexture->Release(); m_lpLineTexture = NULL; } } }; BOOL Casting(unsigned long dwUpperAni = 0xFFFFFFFF, unsigned long dwLowerAni = 0xFFFFFFFF); void CancelSkill(void); void InitWeapon(unsigned long dwEquip); DWORD m_dwLastUpdateActionTimer; /* char m_strWeaponType[256]; static void LoadMotionSheet(char *strFilename); static char m_strWeaponMotionSheet[MAX_WEAPONTABLE][256]; static char m_strWeapon[MAX_WEAPONTABLE][256];*/ float m_fScale; void EndSkill(char *strMotion); void BeginCast(char *strMotion); BOOL Dash(int nDir); BOOL Jump(); void SkillAttack(unsigned long dwUpperAni, unsigned int dwLowerAni); void SetShape(char strShape[15][256]); void Respawn(void); void InitChrAction(void); BOOL IsCancelAction(unsigned long dwPart); void SetMotionString(unsigned long *dwAction, char *strAction); void SetMotionString(unsigned long dwAction, char *strAction); BOOL Attack(unsigned long dwUpperAni = 0xFFFFFFFF, unsigned long dwLowerAni = 0xFFFFFFFF); void Dead(void); void Wait(void); BOOL SetAction(char *strUpperAction, char *strLowerAction); BOOL SetAction(unsigned long dwUpperAni, unsigned long dwLowerAni); void CrouchAndStandup(void); void WalkBack(void); void WalkRight(void); void WalkLeft(void); void Run(float fRunFactor); CZ3DGeneralChrModel *m_lpChrModel; char m_strGCMDSName[MAX_PATH]; char m_strFaceType[MAX_PATH]; char m_strHairStyle[MAX_PATH]; unsigned short m_wShape[15]; char m_strShape[15][256]; // ³ªÁß¿¡ Á¦°ÅÇÒ º¯¼ö unsigned char m_cSex; unsigned char m_cNation; unsigned char m_cLevel; unsigned short m_wClass; unsigned long m_dwPartyID; unsigned long m_dwWeaponPos; short m_sDamage; long m_sCurrHP; long m_sCurrMP; unsigned short m_wMaxHP; unsigned short m_wMaxMP; float m_fDeadTimer; unsigned long m_dwAttackCombo; unsigned long m_dwSkillComboCount; BOOL m_bSkillCombo; vector3 m_vecPos; float m_fDirection; unsigned long m_dwChrID; float m_fSelfChrLens; int m_ChrNodeID; float m_fRunFactor; char m_strName[MAX_PATH]; BOOL m_bSitMode; BOOL m_bUsed; BOOL m_bFlying; BOOL m_bFlyFirstCheck; BOOL m_bStillCasting; BOOL m_bNoneComboAttackMode; BOOL m_bFirstPositionSend; vector3 m_vecJumpAttackVector; unsigned long m_dwChant; char m_strStreetStallName[32]; bool m_bPeaceMode; unsigned long m_dwSpendTime[6]; ChrActionNode m_ChrAction; float m_fFixAngle; List m_lstActionData; List m_lstDamageNumber; char m_strChatMessage[MAX_PATH]; float m_fChatTimer; BOOL m_bCharDead; BOOL m_bUpperAble; BOOL m_bLowerAble; unsigned long m_dwLowerChrAction; unsigned long m_dwUpperChrAction; BOOL m_bUpperAnimating; BOOL m_bLowerAnimating; //arrow vector m_Arrow; bool m_bArrowExist; //body effect vector m_BodyEffect; bool m_bBodyEffect; //Weapon effect vector m_WeaponEffect; bool m_bWeaponEffect; // slide character °ü·Ã CEffScript::CEffExt6 m_SlideValue; bool m_bSlide; CWeaponLine *m_pWeaponLine; bool m_bWeaponLine; DWORD m_dwTargetId; // Target Id (¸ó½ºÅÍ ÀÌÆÑÆ® °ü·Ã ó¸®) void SetSlideValue(CEffScript::CEffExt6 ); void PlaySlide(); void RenderSlide(float bx,float by,float bz,float nx,float ny,float nz,float unitsize); // CCreature(); virtual ~CCreature(); void ArrowUpdate(); void ArrowUpdate(int ); void AddArrow(char *pivot_name,D3DXQUATERNION rot,int div = 0); void DeleteArrow(int ); // WeaponLine void SetWeaponLine(LPDIRECT3DTEXTURE8 lpTexture,int iColor[3],int iBlend); void DeleteWeaponLine(); void WeaponLineUpdate(); ///////////body effect/////////// // ij¸¯ pos ¿¡ effect ºÙÀϰæ¿ì void AddBodyEffect(char *esfname,unsigned long effid = 0,bool mine = true,bool bVisibility = true); // pivot Áß¿¡ ·»´ý ÇÏ°Ô num °¹¼ö ¸¸Å­ effect ºÙÀÓ (num °ªÀÌ -1À̸é Àü pivot ¿¡ ´Ù ºÙÀÓ) void AddBodyEffect(char *file = NULL,bool rot = false,unsigned long effid = 0,int num = -1); // pivot Çϳª¿¡ effect ºÙÀÓ void AddBodyEffect(char *file = NULL,char *pivot = NULL,bool rot = false,unsigned long effid = 0); void AddBodyEffect(char *file = NULL,int pivotindex = -1,bool rot = false,unsigned long effid = 0); //ÇöÀç body effect list¾È¿¡ ÀÌ ÀÌÆÑÆ®°¡ Á¸Àç ÇÏ´ÂÁö °Ë»ç bool CheckInBodyEffect(char *file); void RenderSnap(float bx,float by,float bz,float nx,float ny,float nz,float unitsize,char *effname); void DeleteBodyEffect(); // Àü effect delete void DeleteBodyEffect(char *pivot); // ÇÑ pivot¿¡ ºÙÀº effect delete void DeleteBodyEffectName(char *effectname); //effect script À̸§¿¡ µû¶ó delete void DeleteBodyEffect(unsigned long id); //effect id·Î delete void BodyEffectUpdate(int index); void BodyEffectUpdate(); void SetEffect(); // monster °ü·Ã GCMDS¿¡¼­ effect ºÒ·¯ ºÙÀÌ´Â ÄÚµå //////////Weapon Effect//////// void AddWeaponEffect(char *esfname,int effectnum); void DeleteWeaponEffect(); //Àü weapon effect delete void DeleteWeaponEffect(char *esfname,int iEffNum); //esfnameÀ» °¡Áö´Â effect delete void WeaponEffectUpdate(); //////////////////////////////// // Visibility °ü·Ã // //////////////////////////////// void SetEffectVisibility(bool vis); void SetPosition(float fPosX, float fPosY, float fPosZ) { m_vecPos.x = fPosX; m_vecPos.y = fPosY; m_vecPos.z = fPosZ; if(m_lpChrModel) m_lpChrModel->SetPosition(m_vecPos.x, m_vecPos.y, m_vecPos.z); } void SetPosition(vector3 &vecPos) { m_vecPos = vecPos; if(m_lpChrModel) m_lpChrModel->SetPosition(m_vecPos.x, m_vecPos.y, m_vecPos.z); } vector3 *GetPosition(void) { if(m_lpChrModel) m_lpChrModel->GetPosition(m_vecPos); return &m_vecPos; } void SetDirection(float fDirection) { m_fDirection=fDirection; if(m_lpChrModel) m_lpChrModel->SetDirection(fDirection); } float GetDirection(void) { if(m_lpChrModel) m_fDirection=m_lpChrModel->GetDirection(); return m_fDirection; } void SetAlphaLevel(float fAlphaFactor) { m_lpChrModel->SetAlphaLevel(fAlphaFactor); } BOOL GetChantFlag(unsigned long dwChantKind) { if(0 < dwChantKind && dwChantKind < 33) { if(m_dwChant & (0x00000001 << (dwChantKind - 1))) return TRUE; else return FALSE; } return FALSE; } }; #endif // !defined(AFX_CREATURE_H__0C16A3E3_6308_4E72_AFF8_1CFE85324B6D__INCLUDED_)