/* ==========================================================================
* 파    일 : Status_Common.h
* 목    적 : 스테이터스 계산 데이타
* 작 성 자 : 박경희
* 작 성 일 : 2007-01-12
* 주의사항 :
*===========================================================================*/
#pragma once

#include "CommonNetworkMsgStruct.h"
#include "Player_Common.h"

#pragma pack(push,1)


/// 스텟 증가 항목 정의
enum eSTATUS_PLUS
{	
	eSTATUSPLUS_STR_PLUS = 1,	/// 힘(+)
	eSTATUSPLUS_DEX_PLUS,		/// 민첩(+)
	eSTATUSPLUS_CON_PLUS,		/// 체력(+)
	eSTATUSPLUS_INT_PLUS,		/// 지능(+)
	eSTATUSPLUS_WIS_PLUS,		/// 지혜(+)

	eSTATUSPLUS_BASE_MAX,


	eSTATUSPLUS_ATK_PLUS = 101,	/// 물리근접공격(+)
	eSTATUSPLUS_RATK_PLUS,		/// 물리원거리공격(+)
	eSTATUSPLUS_DEF_PLUS,		/// 물리 방어력(+)
	eSTATUSPLUS_MATK_PLUS,		/// 마법 공격력(+)
	eSTATUSPLUS_MDEF_PLUS,		/// 마법 방어력(+)

	eSTATUSPLUS_CRI_PLUS,		/// 물리공격크리(+)
	eSTATUSPLUS_MCRI_PLUS,		/// 마법공격크리(+)
	eSTATUSPLUS_HP_PLUS,		/// HP(+)
	eSTATUSPLUS_MP_PLUS,		/// MP(+)
	eSTATUSPLUS_RECOVHP_PLUS,	/// HP회복속도(+)	

	eSTATUSPLUS_RECOVMP_PLUS,	/// MP회복속도(+)
	eSTATUSPLUS_HIT_PLUS,		/// 물리명중률(+)
	eSTATUSPLUS_MHIT_PLUS,		/// 마법명중률(+)
	eSTATUSPLUS_AVOID_PLUS,		/// 회피율(+)
	eSTATUSPLUS_WEIGHT_PLUS,	/// 무게(+)

	eSTATUSPLUS_ASPD_PLUS,		/// 일반공격속도(+)
	eSTATUSPLUS_COOLTIME_PLUS,	/// 스킬쿨타임속도(+)
	eSTATUSPLUS_RANGE_PLUS,		/// 근거리사정거리(+)
	eSTATUSPLUS_RRANGE_PLUS,	/// 원거리(+마법)사정거리
	eSTATUSPLUS_SPD_PLUS,		/// 이동속도(+)	

	/// 힐회복량은 기본 값이 없어 plus값을 따로 저장 하고 있다.
	eSTATUSPLUS_SKILL_HP_PLUS_PLUS,	/// 힐회복량(+)	= eSTATUSPLUS_EXT_PLUS_MAX,
	eSTATUSPLUS_ATKTOTAL_PLUS,	/// 공격력 전체(+)
	eSTATUSPLUS_DEFTOTAL_PLUS,	/// 방어력 전체(+)


	eSTATUSPLUS_ATK_PER = 201,	/// 물리근접공격(%)
	eSTATUSPLUS_RATK_PER,		/// 물리원거리공격(%)
	eSTATUSPLUS_DEF_PER,		/// 물리 방어력(%)
	eSTATUSPLUS_MATK_PER,		/// 마법 공격력(%)
	eSTATUSPLUS_MDEF_PER,		/// 마법 방어력(%)

	eSTATUSPLUS_CRI_PER,		/// 물리공격크리(%)
	eSTATUSPLUS_MCRI_PER,		/// 마법공격크리(%)
	eSTATUSPLUS_HP_PER,			/// HP(%)
	eSTATUSPLUS_MP_PER,			/// MP(%)
	eSTATUSPLUS_RECOVHP_PER,	/// HP회복속도(%)

	eSTATUSPLUS_RECOVMP_PER,	/// MP회복속도(%)
	eSTATUSPLUS_HIT_PER,		/// 물리명중률(%)
	eSTATUSPLUS_MHIT_PER,		/// 마법명중률(%)
	eSTATUSPLUS_AVOID_PER,		/// 회피율(%)
	eSTATUSPLUS_WEIGHT_PER,		/// 무게(%)	

	eSTATUSPLUS_ASPD_PER,		/// 일반공격속도(%)
	eSTATUSPLUS_COOLTIME_PER,	/// 스킬쿨타임속도(%)
	eSTATUSPLUS_RANGE_PER,		/// 근거리사정거리(%)
	eSTATUSPLUS_RRANGE_PER,		/// 원거리(%마법)사정거리
	eSTATUSPLUS_SPD_PER,		/// 이동속도(%)

	/// 힐회복량은 기본 값이 없어 plus값을 따로 저장 하고 있다.
	eSTATUSPLUS_SKILL_HP_PLUS_PER,	/// 힐회복량(%)	= eSTATUSPLUS_EXT_PER_MAX,
	eSTATUSPLUS_ATKTOTAL_PER,	/// 공격력 전체(%)
	eSTATUSPLUS_DEFTOTAL_PER,	/// 방어력 전체(%)


	eSTATUSPLUS_EXPADDPER = 301,			/// 경험치 획득 증가(%)
	eSTATUSPLUS_EXPADDPLUS,					/// 경험치 획득 증가(+)
	eSTATUSPLUS_SXPADDPER,					/// 스킬경험치 획득 증가(%)
	eSTATUSPLUS_SXPADDPLUS,					/// 스킬경험치 획득 증가(+)

	eSTATUSPLUS_BUFF_ETC_MAX,


	eSTATUSPLUS_INSTANTPERHIT = 401,		/// 공격 성공 확률 - %순간 효과
	eSTATUSPLUS_INSTANTPLUSHIT,				/// 공격 성공 확률 - 순간 효과
	eSTATUSPLUS_PHYINSTANTPERCRI,			/// 크리티컬 발생 확률(물리) - %순간 효과
	eSTATUSPLUS_PHYINSTANTPLUSCRI,			/// 크리티컬 발생 확률(물리) - 순간 효과
	eSTATUSPLUS_MAGICINSTANTPERCRI,			/// 크리티컬 발생 확률(마법) - %순간 효과
	eSTATUSPLUS_MAGICINSTANTPLUSCRI,		/// 크리티컬 발생 확률(마법) - 순간 효과
	eSTATUSPLUS_PHYINSTANTPERATTACK,		/// 공격력(물리) - %순간 효과
	eSTATUSPLUS_PHYINSTANTPLUSATTACK,		/// 공격력(물리) - 순간 효과
	eSTATUSPLUS_MAGICINSTANTPERATTACK,		/// 공격력(마법) - %순간 효과
	eSTATUSPLUS_MAGICINSTANTPLUSATTACK,		/// 공격력(마법) - 순간 효과
	eSTATUSPLUS_INSTANTPERFINAL,			/// 최종 데미지 - %순간 효과
	eSTATUSPLUS_INSTANTPLUSFINAL,			/// 최종 데미지 - 순간 효과

	eSTATUSPLUS_DELETE_TARGETING,			/// 타겟팅 제거

	eSTATUSPLUS_DAMAGECALC_MAX = eSTATUSPLUS_DELETE_TARGETING,

	eSTATUSPLUS_DISPEL = 501,				/// 디스펠
	eSTATUSPLUS_RESURRECTION_HP_PLUS,		/// 부활+HP(+)
	eSTATUSPLUS_RESURRECTION_HP_PER,		/// 부활+HP(%)
	eSTATUSPLUS_RESURRECTION_MP_PLUS,		/// 부활+MP(+)
	eSTATUSPLUS_RESURRECTION_MP_PER,		/// 부활+MP(%)
	eSTATUSPLUS_BLINK,						/// 순간 위치이동
	eSTATUSPLUS_DISPEL_ALL,					/// 전체 디스펠
	eSTATUSPLUS_HP_ABSORB_INS,				/// 공격자가 HP 순간 흡수
	eSTATUSPLUS_MP_ABSORB_INS,				/// 공격자가 MP 순간 흡수
	eSTATUSPLUS_MONSTER_ESCAPE,				/// 몬스터 도망상태로 변경

	eSTATUSPLUS_STOPMOVE = 551,				/// 이동 불가
	eSTATUSPLUS_STOPSKILL,					/// 스킬 사용 불가
	eSTATUSPLUS_ATTACKERTARGETING,			/// 본인 타겟팅
	eSTATUSPLUS_SLEEP,						/// 수면
	eSTATUSPLUS_STUN,						/// 스턴
	eSTATUSPLUS_INVINCIBILITY_PHY,			/// 무적 - 물리
	eSTATUSPLUS_INVINCIBILITY_MAG,			/// 무적 - 마법
	eSTATUSPLUS_HP_ABSORB_LONG,				/// 공격자가 HP 흡수 지속
	eSTATUSPLUS_MP_ABSORB_LONG,				/// 공격자가 MP 흡수 지속
	eSTATUSPLUS_STOPITEM_KIND,				/// 아이템 사용 불가 - 종류별
	eSTATUSPLUS_STOPITEM_IDX,				/// 아이템 사용 불가 - 아이템인덱스별
	eSTATUSPLUS_DAMAGE_ABSORB_PHY,			/// 데미지 흡수(물리:보호막)
	eSTATUSPLUS_DAMAGE_ABSORB_MAG,			/// 데미지 흡수(마법:보호막)
	eSTATUSPLUS_DAMAGE_REFLECT_PHY,			/// 데미지 반사(물리)
	eSTATUSPLUS_DAMAGE_REFLECT_MAG,			/// 데미지 반사(마법)

	eSTATUSPLUS_CONDITIONINDISPOSITION_MAX,


	eSTATUSPLUS_DOT_HPCHANGE_PLUS = 601,	///	(효과) 지속 HP +
	eSTATUSPLUS_DOT_HPCHANGE_PER,			/// 지속 HP %
	eSTATUSPLUS_DOT_MPCHANGE_PLUS,			/// 지속 MP +
	eSTATUSPLUS_DOT_MPCHANGE_PER,			/// 지속 MP %

	eSTATUSPLUS_DOT_HPCHANGE_CALC_PLUS,		/// 지속 HP +(계산식사용)
	eSTATUSPLUS_DOT_MPCHANGE_CALC_PLUS,		/// 지속 MP +(계산식사용)

	eSTATUSPLUS_DOT_MAX,


	eSTATUSPLUS_NONSKILL_HPCHANGE_PLUS = 701,	/// (스킬이 아닌) 순간 hp +
	eSTATUSPLUS_NONSKILL_HPCHANGE_PER,			/// 순간 hp %
	eSTATUSPLUS_NONSKILL_MPCHANGE_PLUS,			/// 순간 mp +
	eSTATUSPLUS_NONSKILL_MPCHANGE_PER,			/// 순간 mp %

	eSTATUSPLUS_NONSKILL_MAX,


	eSTATUSPLUS_CHAR_SIZE = 1001,		/// 캐릭터 크기변화
	eSTATUSPLUS_CHANGE_MONSTER,			/// 몬스터로 외형변신
	eSTATUSPLUS_VEHICLE,				/// 탈것 

	eSTATUSPLUS_MAPCHANGE = 2000,			/// 맵이동


	eSTATUSPLUS_TAROT_MAX,
};



enum eDAMAGE_KIND 
{
	/// 정의안함
	eDAMAGE_NONE = 0,
	/// 일반공격
	eDAMAGE_NORMAL,
	/// 크리티컬
	eDAMAGE_CRITICAL,
	/// 미스-회피
	eDAMAGE_MISS,
};


enum eEXT_MULTIPL
{
	eEXT_MULTIPL_ATK_FIGHTER = 0,		/// 전사물리근접공격력
	eEXT_MULTIPL_ATK_RANGER,			/// 레인져물리근접공격력
	eEXT_MULTIPL_ATK_MAGIC,				/// 법사물리근접공격력 
	eEXT_MULTIPL_RATK_FIGHTER,			/// 전사물리원거리공격력
	eEXT_MULTIPL_RATK_RANGER,			/// 레인져물리원거리공격력
	eEXT_MULTIPL_RATK_MAGIC,			/// 법사물리원거리공격력 
	eEXT_MULTIPL_MATK_FIGHTER,			/// 전사마법공격력
	eEXT_MULTIPL_MATK_RANGER,			/// 레인져마법공격력
	eEXT_MULTIPL_MATK_MIGHC,			/// 법사마법공격력 
	eEXT_MULTIPL_DEF,					/// 물리 방어력
	eEXT_MULTIPL_MDEF,					/// 마법 방어력
	eEXT_MULTIPL_CRI,					/// 물리 크리티컬 수치
	eEXT_MULTIPL_MCRI,					/// 마법 크리티컬 수치
	eEXT_MULTIPL_MAXHP,					/// HP
	eEXT_MULTIPL_MAXMP,					/// MP
	eEXT_MULTIPL_RECOVHP,				/// HP 회복 속도
	eEXT_MULTIPL_RECOVMP,				/// MP 회복 속도
	eEXT_MULTIPL_HIT,					/// 명중 수치
	eEXT_MULTIPL_MHIT,					/// 마법 명중
	eEXT_MULTIPL_AVOID,					/// 회피 수치
	eEXT_MULTIPL_WEIGHT,				/// 무게 
	eEXT_MULTIPL_RANGE,					/// 사정거리
	eEXT_MULTIPL_RRANGE,				/// 방출혈사정거리
	eEXT_MULTIPL_COOLTIME,				/// 쿨타임
	eEXT_MULTIPL_SPD,					/// 이동속도
	eEXT_MULTIPL_ASPD,					/// 공격 속도

	eEXT_MULTIPL_MAX = ULONG_MAX,
};


/// 스텟 기본 값
struct sStatusBaseScript
{
	/// 직업 코드
	ePLAYER_JOB			mJobIndex;
	/// 직업 이름
	char				mName[255];
	/// 기본스텟 항목 5개
	float				mBaseStatus[ePLAYER_STATUS_WIS+1];
};



/// 스텟 증가 수치
struct sStatusMultiplScript
{
	/// 직업 코드
	ePLAYER_JOB			mJobIndex;
	/// 직업 이름
	char				mName[255];
	/// 기본스텟 항목 5개
	float				mBaseStatus[ePLAYER_STATUS_WIS+1];
};



struct sDamageCalcNumerical
{
	/// 번호
	unsigned short		mNum;
	/// 값
	float				mValue;
};


#pragma pack(pop)
