#pragma once #include "WeaponSoundInfoParser.h" //////////////////////////////////////////////////////////////////////////////////////////////////////////// // Form Character.h const DWORD ATTACK_ADDITIONAL_EFFECT_STUN = 0x00000001; const DWORD ATTACK_ADDITIONAL_EFFECT_KNOCKBACK = 0x00000002; const DWORD ATTACK_ADDITIONAL_EFFECT_FREEZE = 0x00000004; const DWORD ATTACK_ADDITIONAL_EFFECT_DOWN = 0x00000008; const DWORD ATTACK_ADDITIONAL_EFFECT_AIR = 0x00000010; const DWORD ATTACK_ADDITIONAL_EFFECT_TOGROUND = 0x00000020; const DWORD ATTACK_ADDITIONAL_EFFECT_REBIRTH = 0x00000040; const DWORD ATTACK_ADDITIONAL_EFFECT_CRITICAL = 0x00000080; const DWORD ATTACK_ADDITIONAL_EFFECT_DONOTPLAYANIMATION = 0x00000100; const DWORD ATTACK_ADDITIONAL_EFFECT_DOUBLE = 0x00000200; const DWORD ATTACK_ADDITIONAL_EFFECT_ETHERDEVICE_METAL = 0x00000400; const DWORD ATTACK_ADDITIONAL_EFFECT_ETHERDEVICE_ETHER = 0x00000800; const DWORD ATTACK_ADDITIONAL_EFFECT_KNOCKBACK2 = 0x00001000; const DWORD ATTACK_ADDITIONAL_EFFECT_KNOCKBACK3 = 0x00002000; //////////////////////////////////////////////////////////////////////////////////////////////////////////// enum eForceTurn { FORCE_TURN_NONE = 0, FORCE_TURN_LEFT = 1, FORCE_TURN_RIGHT = 2 }; //////////////////////////////////////////////////////////////////////////////////////////////////////////// #define MAX_DAMAGE_EFFECT_CNT 5 #define MAX_DAMAGE_EFFECT_CNT_IN_DOMINATION 3 //BP_PANTS(¹ÙÁö)±îÁö´Â ij¸¯¸ö°ü·Ã ÆÄÃ÷ÀÌ¸ç ¹«±â¹× ¾Ç¼¼»ç¸®´Â AttachÇü½ÄÀÔ´Ï´Ù. enum BodyPart { BP_BONE, BP_HAIR,// ¸Ó¸®Ä«¶ô BP_FACE,// ¾ó±¼ BP_BOOTS,// ½Å¹ß BP_ARMOR,// °¡½¿ÆÄÃ÷ BP_HELM,// Åõ±¸ BP_GLOVE,// Àå°© BP_PANTS,// ¹ÙÁö #ifdef _NA_008633_20160104_ADD_DECORATECOSTUME BP_DECORATE_COSTUME, // µ¥ÄÚ ÄÚ½ºÆ¬ #endif // _NA_008633_20160104_ADD_DECORATECOSTUME BP_WEAPON,// ¹«±â(Attach) BP_SPECIAL_ACCESSORY1,//Ư¼ö ¾Ç¼¼»ç¸® 1(Attach) BP_SPECIAL_ACCESSORY2,//Ư¼ö ¾Ç¼¼»ç¸® 2(Attach) BP_SPECIAL_ACCESSORY3,//Ư¼ö ¾Ç¼¼»ç¸® 3(Attach) BP_TEST, BP_TEST1, BP_TEST2, BP_TEST3, BP_COUNT, }; //////////////////////////////////////////////////////////////////////////////////////////////////////////// enum BodyPartNum { kBeginBodyParts = BP_BONE + 1, // Àåºñ ÆÄÃ÷ ½ÃÀÛÀ妽º kBeginAccessory = BP_SPECIAL_ACCESSORY1, // ¾Ç¼¼»ç¸® ½ÃÀÛÀ妽º kEndBodyParts = BP_WEAPON, // Àåºñ ÆÄÃ÷ °¹¼öµé }; //////////////////////////////////////////////////////////////////////////////////////////////////////////// enum eActionID { ACTION_IDLE = 0, ACTION_ATTACK = 1, ACTION_STYLE_ATTACK = 2, ACTION_SKILL = 3, ACTION_MOVE = 4, ACTION_KEYBOARDMOVE = 5, ACTION_KNOCKBACK = 6, ACTION_TOAIR = 7, ACTION_DOWN = 8, ACTION_GETUP = 9, ACTION_NPCMEET = 10, ACTION_GETITEM = 11, ACTION_JUMP = 12, ACTION_EVENTJUMP = 13, ACTION_STOP = 14, ACTION_VALKYRIESHOT = 15, ACTION_VENDORMEET = 16, ACTION_PLAYERMEET = 17, ACTION_SIT = 18, ACTION_SPECIAL_MOVE = 19, ACTION_USE_OBJECT = 20, ACTION_PLAYERFOLLOW = 21, ACTION_KEYBOARDJUMP = 22, ACTION_TELEPORT = 23, ACTION_ATTACKJUMP = 24, ACTION_RUNAWAY = 25, ACTION_WAYPOINT_MEET= 26, ACTION_TRANSFORM = 27, ACTION_FALLDOWN = 28, ACTION_KNOCKBACK2 = 29, ACTION_AIR_FALLDOWN = 30, ACTION_FIRECRACKER = 31, ACTION_COLLECTION_OBJECT = 32, ACTION_SUMMON_RIDER= 33, ACTION_RIDER_TRUN = 34, ACTION_DOMINATION_OBJECT = 35, ACTION_ETHERIA_EXTRACT = 36, ACTION_TRIGGER_ANIMATION_CONTROL = 37, ACTION_AIRSHIP_MEET = 38, //! 2011.2.28 / i4u4me / ³¯°³ ACTION_WINGS_SPREAD = 39, ACTION_WINGS_FURL = 40, ACTION_RIDER_SPREAD = 41, ACTION_RIDER_FURL = 42, #ifdef _NA_008016_20150203_SUN_RANKING_SYSTEM_STATUE ACTION_STATUE_PLAYER_MEET = 43, ACTION_STATUE_STAND = 44, #endif // _NA_008016_20150203_SUN_RANKING_SYSTEM_STATUE ACTION_INVALID }; class cAttackResultData { public: cAttackResultData() { Init(); } void Init() { m_TargetObjectKey = INVALID_OBJECT_KEY; m_CurrentPosition.wvPos = c_ZeroVector; m_CurrentPosition.wTile = -1; m_DestPosition.wvPos = c_ZeroVector; m_DestPosition.wTile = -1; m_IsHeal = FALSE; m_IsMiss = FALSE; m_IsNoDamage = FALSE; m_ForceSetLatestAttack = FALSE; m_Damage = 0; m_TargetHP = 0; m_AdditionalEffect = 0; m_ComboCount = 0; m_AirTime = 0; m_GetupTime = 0; m_EndDownTime = 0; m_fForce = 0.0f; #ifdef _NA_006638_20120415_ADD_SHIELD_INFO_IN_TARGET_INFO m_TargetSD = 0; #endif //_NA_006638_20120415_ADD_SHIELD_INFO_IN_TARGET_INFO } void SetTargetObjectKey( DWORD TargetObjectKey ) { m_TargetObjectKey = TargetObjectKey; } void SetTargetHP( DWORD TargetHP ) { m_TargetHP = TargetHP; } void SetDamage( DWORD TargetDamage ) { m_Damage = TargetDamage; } void SetMiss( BOOL IsMiss ) { m_IsMiss = IsMiss; } void SetAdditionalEffect( DWORD Effect ) { m_AdditionalEffect = Effect; } void AddAdditionalEffect( DWORD Effect ) { m_AdditionalEffect |= Effect; } BOOL CheckAdditionalEffect( DWORD Effect) { return m_AdditionalEffect & Effect ? TRUE : FALSE; } void SetHeal( BOOL IsHeal ) { m_IsHeal = IsHeal; } void SetNoDamage( BOOL IsNoDamage ) { m_IsNoDamage = IsNoDamage; } void SetComboCount( DWORD ComboCount ) { m_ComboCount = ComboCount; } void SetForceSetLastestAttack( BOOL ForceSetLastestAttack ) { m_ForceSetLatestAttack = ForceSetLastestAttack; } void SetPosition( const WzVector& CurrentPosition, const WzVector& DestPosition ) { m_CurrentPosition.wvPos = CurrentPosition; m_DestPosition.wvPos = DestPosition; m_CurrentPosition.wTile = m_DestPosition.wTile = -1; } DWORD GetTargetObjectKey() { return m_TargetObjectKey; } BOOL IsMiss() { return m_IsMiss; } BOOL IsForceSetLastestAttack() { return m_ForceSetLatestAttack; } BOOL IsHeal() { return m_IsHeal; } BOOL IsNoDamage() { return m_IsNoDamage; } BOOL IsDead() { return m_TargetHP <= 0; } BOOL IsLive() { return m_TargetHP > 0; } DWORD GetComboCount() { return m_ComboCount; } DWORD GetTargetHP() { return m_TargetHP; } DWORD GetDamage() { return m_Damage; } DWORD GetAdditionalEffect() { return m_AdditionalEffect; } const HONGPOS& GetCurrentPosition() const { return m_CurrentPosition; } const HONGPOS& GetDestPosition() const { return m_DestPosition; } // »óÅÂÀÌ»ó 󸮸¦ À§ÇÑ ±âŸ º¯¼ö DWORD GetEndDownTime() { return m_EndDownTime; } DWORD GetGetUpTime() { return m_GetupTime; } DWORD GetAirTime() { return m_AirTime; } void SetEndDownTime( DWORD EndTime ) { m_EndDownTime = EndTime; } #ifdef _NA_006638_20120415_ADD_SHIELD_INFO_IN_TARGET_INFO void SetTargetSD(DWORD TargetSD) { m_TargetSD = TargetSD; } DWORD GetTargetSD() { return m_TargetSD; } #endif //_NA_006638_20120415_ADD_SHIELD_INFO_IN_TARGET_INFO private: DWORD m_TargetObjectKey; HONGPOS m_CurrentPosition; HONGPOS m_DestPosition; BOOL m_IsHeal; BOOL m_IsMiss; BOOL m_IsNoDamage; BOOL m_ForceSetLatestAttack; DAMAGETYPE m_Damage; DWORD m_TargetHP; DWORD m_AdditionalEffect; DWORD m_ComboCount; DWORD m_AirTime; DWORD m_GetupTime; DWORD m_EndDownTime; float m_fForce; #ifdef _NA_006638_20120415_ADD_SHIELD_INFO_IN_TARGET_INFO DWORD m_TargetSD; #endif //_NA_006638_20120415_ADD_SHIELD_INFO_IN_TARGET_INFO }; //////////////////////////////////////////////////////////////////////////////////////////////////////////// class ATTACK_RESULT { DWORD m_SkillCode; DWORD m_AttackSerial; DWORD m_TimeSerial; DWORD m_GroupID; eWEAPONSOUNDKIND m_WeaponSound; cAttackResultData m_TargetData; public: ATTACK_RESULT() { m_SkillCode = INVALID_SKILL_CODE; // 0 m_AttackSerial = 0; m_TimeSerial = 0; m_GroupID = 0; m_WeaponSound = eWEAPONSOUNDKIND_MAX; } cAttackResultData& GetTargetData() { return m_TargetData; } void SetSkillCode( DWORD SkillCode ) { m_SkillCode = SkillCode; } void SetGroupID( DWORD GroupID ) { m_GroupID = GroupID; } void SetAttackSerial( DWORD AttackSerial ) { m_AttackSerial = AttackSerial; } void SetTimeSerial( DWORD TimeSerial ) {m_TimeSerial = TimeSerial; } void SetWeaponSound( eWEAPONSOUNDKIND Kind ) { m_WeaponSound = Kind; } DWORD GetSkillCode() { return m_SkillCode; } DWORD GetAttackSerial() { return m_AttackSerial; } DWORD GetTimeSerial() { return m_TimeSerial; } DWORD GetGroupID() { return m_GroupID; } eWEAPONSOUNDKIND GetWeaponSound() { return m_WeaponSound; } }; typedef STLX_LIST ATTACK_RESULT_LIST; //////////////////////////////////////////////////////////////////////////////////////////////////////////// //µ¥¹ÌÁö ÆÄ¶ó¹ÌÅÍ typedef struct _DAMAGE_PRAM { _DAMAGE_PRAM(ATTACK_RESULT* pResultPram,BOOL bRightPram,DWORD dwObjKeyPram) :pResult(pResultPram),bRight(bRightPram),dwObjKey(dwObjKeyPram) { } ATTACK_RESULT *pResult; BOOL bRight; DWORD dwObjKey; }DAMAGE_PRAM; //////////////////////////////////////////////////////////////////////////////////////////////////////////// typedef struct _HPINFO { PLAYERHP m_HP; PLAYERHP m_MaxHP; DWORD m_LV; #ifdef _NA_006638_20120415_ADD_SHIELD_INFO_IN_TARGET_INFO PLAYERSD m_SD; PLAYERSD m_MaxSD; #endif //_NA_006638_20120415_ADD_SHIELD_INFO_IN_TARGET_INFO } HPINFO; //////////////////////////////////////////////////////////////////////////////////////////////////////////// #include "StatusEffect.h" //////////////////////////////////////////////////////////////////////////////////////////////////////////// typedef struct _ATTACK_JUMP_INFO { DWORD m_dwTotalTime; // ¸ñÀûÁö±îÁö µµÂøÇϴµ¥ °É¸®´Â Àüü ½Ã°£ float m_fDestHeight; // ¸ñÀûÁö ³ôÀÌ WzVector m_vDist; // ¸ñÀûÁö ÁÂÇ¥¿Í ÇöÀç ÁÂÇ¥°£ÀÇ Â÷ÀÌ float m_fVelocity_X; // Á¡ÇÁ¸¦ ½ÃÀÛÇÒ ¶§ÀÇ Ãʱ⠼ӵµ float m_fVelocity_Y; } ATTACK_JUMP_INFO; //////////////////////////////////////////////////////////////////////////////////////////////////////////// // ³ªÁß¿¡ unionÀ¸·Î typedef struct _PLAYER_ACTION { eActionID ActionID; DWORD dwTimeSerial; union { struct { WzVector vCurPos; } IDLE; struct { BOOL bThrust; BYTE byState; HONGPOS vCurPos; HONGPOS vDestPos; } MOVE; struct { HONGPOS vKeyboardCurPos; float fKeyboardAngle; BYTE byKeyboardState; } KEYBOARDMOVE; struct { DWORD dwAttackSerial; DWORD dwAttackStyle; BYTE byAttackType; DWORD dwTargetID; BOOL bAttackMove; HONGPOS vCurPos; HONGPOS vDestPos; BOOL bForceAttack; //_NA003109_STYLE_PRESENTATION_IMPROVEMENT uint8_t style_presentation; } ATTACK; struct { DWORD dwEmoteID; WzVector vEmoteCurPos; } EMOTE; struct { DWORD dwAttackSerial; SLOTCODE dwSkillID; DWORD dwTargetID; HONGPOS vCurPos; HONGPOS vDestPos; WzVector vTargePos;//¹ß»çü Ÿ°Ù Æ÷½º BOOL bForceAttack; } SKILL; //struct //{ // float fInitialSpeed; // HONGPOS vCurPos; // HONGPOS vDestPos; // DWORD dwAttackId; // DWORD dwEndTime; // ¹Ýµå½Ã À̽ð£¾È¿¡ µ¿ÀÛÀÌ ³¡³ª¾ßÇÔ //} KNOCKBACK; struct { float fInitialSpeed; DWORD dwDelay; HONGPOS vCurPos; HONGPOS vDestPos; BOOL bFly; DWORD dwEndTime; // ¹Ýµå½Ã À̽ð£¾È¿¡ µ¿ÀÛÀÌ ³¡³ª¾ßÇÔ DWORD dwGetupTime; // À̽𣿡 ÀϾ. } DOWN; struct { float fDownForceLimit; float fGravity; float fHeightLimit; float fUpperForce; DWORD dwAirTime; // ¶°ÀÖÀ»½Ã°£ DWORD dwGetupTime; // ÀϾ½Ã°£ BOOL bForceDown; // ÃÖ´ë ³ôÀÌ ±îÁö °¡¸é °­Á¦·Î ³»¸±°ÍÀΰ¡. } TOAIR; struct { DWORD dwEndTime; } GETUP; struct { DWORD dwEndTime; } SPAWN; struct { DWORD dwNPCKey; } NPCMEET; #ifdef _NA_008016_20150203_SUN_RANKING_SYSTEM_STATUE struct { DWORD dwStatuePlayerKey; } STATUEMEET; #endif // _NA_008016_20150203_SUN_RANKING_SYSTEM_STATUE struct { DWORD dwItemKey; } GETITEM; struct { HONGPOS vCurPos; HONGPOS vDestPos; int iDestTileNum; DWORD dwStartTime; DWORD dwEndTime; } EVENT_JUMP; struct { DWORD dwAttackSerial; DWORD dwTargetID; HONGPOS vCurPos; HONGPOS vDestPos; DWORD dwStartTime; DWORD dwEndTime; } ATTACKJUMP; struct { HONGPOS vCurPos; } STOP; struct { DWORD dwTargetID; } VALKYRIESHOT; struct { DWORD dwTargetID; } VENDORMEET; struct { DWORD dwTargetID; } PLAYERMEET; struct { DWORD dwTargetID; } USEOBJECT; struct { HONGPOS vCurPos; float fAngle; BYTE bType; } SPECIALMOVE; struct { WzVector vDest; int iJumpFlag; } KEYBAORDJUMP; struct { WzVector vDest; } TELEPORT; struct { DWORD target_object; } AIRSHIP; #ifdef _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND struct { DWORD target_object; } BATTLEGROUND_RESURRECTION; #endif //_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND struct { DWORD dwTargetID; } WAYPOINTMEET; struct { RESOURCECODE rcCode; eTRANSFORM_TYPE transFormType; eTRANSFORM_PROCESS transFormProcess; BYTE appearKind; } TRANSFORM; struct { WzVector vSrcRot; WzVector vDestRot; DWORD dwRotInterporateTime; int iHp; } FALLDOWN; struct { DWORD dwItemCode; WzVector vTargetPos; } FIRECRACKER; struct { DWORD dwTargetID; } COLLECTOBJECT; struct { POSTYPE ItemPos; } RIDEROBJECT; struct { DWORD dwTargetID; } DOMINATIONOBJECT; struct { POSTYPE slot_pos; //extract item POSTYPE etherealizer_pos; //use item }ETHERIA; struct { WzID start_animation_id; // ½ÃÀÛ ¾Ö´Ï¸ÞÀ̼ÇID WzID next_animation_id; // ´ÙÀ½ ¾Ö´Ï¸ÞÀ̼ÇID BYTE start_animation_loop; // ½ÃÀÛ ¾Ö´Ï¸ÞÀ̼ÇÀÇ ·çÇÁ¿©ºÎ BYTE next_animation_loop; // ´ÙÀ½ ¾Ö´Ï¸ÞÀ̼ÇÀÇ ·çÇÁ¿©ºÎ }TRIGGERANIMATIONCONTROL; }; }PLAYER_ACTION; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// typedef struct _ITEM_EFFECT_PARAM { int iBoneIndex; WzVector vScale; HANDLE hEffect; eSKILLEFFECT_POS bPositionType; BOOL bRotateWithBone; DWORD dwItemCode; _ITEM_EFFECT_PARAM() { hEffect = INVALID_HANDLE_VALUE; } } ITEM_EFFECT_PARAM; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// enum PLAYER_VARIATION_PART { PLAYER_VARIATION_HAIR = 1, PLAYER_VARIATION_FACE = 2, PLAYER_VARIATION_MAX = 3 }; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// enum eKIND_OF_EQUIPED_SETITEM; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// struct sAttachEffectForSetItem { eKIND_OF_EQUIPED_SETITEM eSetType; HANDLE m_hEffectHandle; BYTE m_btBoneIdx; WzID m_EffectID; }; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// struct sFullSetEffectInfo { DWORD m_dwEffectID; BYTE m_btBoneIdx; }; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// struct sFullSetChangeItemInfo { BOOL m_IsFullSetItem; BOOL m_bAlreadyLoad; DWORD m_dwItemCode; RESOURCECODE m_SkinCode; RESOURCECODE m_NewSkinCode; int m_SubType; POSTYPE m_PartIndex; //m_ppRenderPartÀÇ À妽º CWzUnitDraw* m_pChangePart; }; typedef ::std::queue > PLAYER_ACTION_QUEUE;