/* ==========================================================================
* 파    일 : BaseObject_Common.h
* 목    적 : 
* 작 성 자 : 박경희
* 작 성 일 : 2006-11-27
* 주의사항 : 
*===========================================================================*/

#pragma once

#pragma pack(push,1)

class cBaseObject;

const float SYNC_MOVE_RANGE = 300.0f;
const unsigned short FIXED_OBJECT_SIZE = 20;

enum eNAME_OF_MAP
{
	MAP_NONE = 0,                       // 예약.
	MAP_01,                             // 테르미누스
	MAP_02,                             // 벌목지
	MAP_03,                             // 쉐버즈 설월
	MAP_04,                             // 장막의 계곡
	MAP_05,                             // 미궁 1층
	MAP_06,                             // 미궁 2층
	MAP_07,                             // 아네스의 눈
	MAP_08,                             // 잿더미 요새
	MAP_MIN = MAP_01,
	MAP_MAX = MAP_06,
	MAP_COUNT = MAP_MAX - MAP_MIN + 1
};

const int PVP_MAP_NO = 101;

/// 타겟의 번호는 스크립트에 영향을 줄수 있으므로 항상 아래쪽에 추가 되어야 합니다.

enum eOBJECTSTATE
{
	eOBJECT_STATE_IDLE = 0,
	eOBJECT_STATE_MOVE,
	eOBJECT_STATE_ATTACK,
	eOBJECT_STATE_DIE,
	eOBJECT_STATE_STOP,

	eOBJECT_STATE_MAX,
};

enum eOBJECTTYPE
{
	eOBJECTTYPE_NONE = 0,
	eOBJECTTYPE_HERO,
	eOBJECTTYPE_PLAYER,
	eOBJECTTYPE_MONSTER,
	eOBJECTTYPE_NPC,
	eOBJECTTYPE_ITEM,
	eOBJECTTYPE_TOTEM,
	eOBJECTTYPE_GATHERING,

	eOBJECTTYPE_DISPLAY,
};

enum eODDITYTYPE
{
	eODDITYTYPE_CANTMOVE,				/// 이동 불가
	eODDITYTYPE_CANTSKILL,				/// 스킬 사용 불가
	eODDITYTYPE_SLEEP,					/// 수면
	eODDITYTYPE_STUN,					/// 스턴
	eODDITYTYPE_DAMAGE_REFLECTION_PHY,	/// 데미지 반사(물리)
	eODDITYTYPE_DAMAGE_REFLECTION_MAG,	/// 데미지 반사(마법)
	eODDITYTYPE_DAMAGE_ABSORB_PHY,		/// 데미지 흡수(물리:보호막)
	eODDITYTYPE_DAMAGE_ABSORB_MAG,		/// 데미지 흡수(마법:보호막)
	eODDITYTYPE_INVINCIBILITY_PHY,		/// 물리 무적
	eODDITYTYPE_INVINCIBILITY_MAG,		/// 마법 무적
	eODDITYTYPE_HP_ABSORB,				/// 공격자가 타겟 데미지를 hp로흡수
	eODDITYTYPE_MP_ABSORB,				/// 공격자가 타겟 데미지를 mp로흡수
	eODDITYTYPE_STOPITEM_KIND,			/// 아이템 사용불가 (종류별)
	eODDITYTYPE_STOPITEM_IDX,			/// 아이템 사용불가 (인덱스별)

	eODDITYTYPE_MAX,
};

#ifndef _OBJ_LINK_INFO
#define _OBJ_LINK_INFO
enum eLINK
{
	eLINK_HEAD = 0,
	eLINK_BODY,
	eLINK_FOOT,
	eLINK_RHAND,
	eLINK_LHAND,
	eLINK_LARM,

	eLINK_RWEAPON = 10,
	eLINK_LWEAPON,
};

enum ePART
{
	ePART_HAIR = 0,
	ePART_FACE,
	ePART_BODY1,
	ePART_BODY2,
	ePART_HAND,
	ePART_FOOT,

	ePART_MAX,

	/// 귀 분리객체
	ePART_EAR = 100,
};
#endif

/// 객체에 대한 참조를 위해서 선언
struct sObject
{
	unsigned char	type;			/// eOBJECTTYPE
	unsigned long	index;
};


struct sMultiTarget
{
	sObject		mTarget;
	bool		mApplyHP;

	unsigned long	mDetailCnt;
	unsigned long	mDetailDamage[10];
	unsigned char	mDetailDamageKind[10];
	long			mDetailReflection[10];
	long			mDetailAttkAbsorbHP[10];
	long			mDetailAttkAbsorbMP[10];

	sMultiTarget()
	{
		memset( this, 0, sizeof(sMultiTarget) );
		mApplyHP = true;
	}
};

#pragma pack(pop)
