/* ==========================================================================
* 파    일 : Drop_Common.h
* 목    적 : 
* 작 성 자 : 박경희
* 작 성 일 : 2007-02-21
* 주의사항 :
*===========================================================================*/
#pragma once

#include "CommonNetworkMsgStruct.h"

#pragma pack(push,1)


const unsigned short EXP_DROP_RANGE = 4000;
const unsigned long	DROP_PER_FLOAT_CONVERT = 100;
const unsigned long RANDOM_MAX = 1000000;


/// 드롭 머니
struct sDropMoney
{
	unsigned long	mMonsterClassIdx;				/// 몬스터 종류
	bool			mDrop;							/// 드롭 유무
	float			mDropPercent;					/// 드롭 확률
	unsigned long	mMinMoney;						/// 드롭 최소 금액
	unsigned long	mMaxMoney;						/// 드롭 최대 금액
};


/// 드롭 아이템 N 타입 상세
struct sDropNTypeData
{
	unsigned long	mItemIdx;						/// 드롭아이템 코드
	unsigned long	mItemPer;						/// 드롭아이템 확률
	unsigned long	mItemCnt;						/// 드롭아이템 갯수
};


/// 드롭 아이템 N 타입
struct sDropNType
{
	unsigned long	mClassIdx;						/// 종류IDX(몬스터, 채집)
	float			mMoneyPercent;					/// 돈드랍 확률
	unsigned long	mMinMoney;						/// 돈 드랍 최소 금액
	unsigned long	mMaxMoney;						/// 돈 드랍 최대 금액
	float			mDropPercent;					/// 아이템 드롭 확률
	unsigned long	mDropClass1Cnt;					/// 드랍 종류 개수1
	unsigned long	mDropClass1Per;					/// 드랍 종류 개수1 확률
	unsigned long	mDropClass2Cnt;					/// 드랍 종류 개수2
	unsigned long	mDropClass2Per;					/// 드랍 종류 개수2 확률
	unsigned long	mDropClass3Cnt;					/// 드랍 종류 개수3
	unsigned long	mDropClass3Per;					/// 드랍 종류 개수3 확률

	unsigned long	mItemTotalPer;					/// 드롭아이템 확률 총합
	tArray<void*>*	mpData;							/// 드롭아이템 상세정보
};


/// 드롭 아이템 S/W 공용 타입 상세
struct sDropSWTypeData
{
	unsigned long	mIdx;							/// 특수/월드 타입 고유 번호
	unsigned long	mItemIdx;						/// 드롭아이템 코드
	float			mItemPer;						/// 드롭아이템 확률
	unsigned long	mItemCnt;						/// 드롭아이템 갯수
	unsigned long	mEnoughCnt;						/// 추가 확률
	unsigned long	mEnoughTime;					/// 시간제약
	unsigned long	mEnoughCntNow;					/// 추가확률 누적 카운트
	unsigned long	mEnoughTimeEnd;					/// 시간제약 종료시간
};


/// 드롭 아이템 S/W 공용 타입
struct sDropSWType
{
	unsigned long	mIdx;							/// 특수/월드 타입 고유 번호
	float			mDropPercent;					/// 아이템 드롭 확률

	float			mItemTotalPer;					/// 드롭아이템 확률 총합
	tArray<void*>*	mpData;							/// 드롭아이템 상세정보

	sDropSWType()
	{
		memset( this, 0, sizeof(sDropSWType) );
	}
};

struct sDropWTypeLink
{
	unsigned char	mMonsterType;
	sDropSWType*	mpWType;
};

/// 퀘스트 드롭 
struct sDropQType
{
	unsigned long	mItemIdx;		/// 드롭 아이템 인덱스
	unsigned long	mDropPer;		/// 드롭 확률
};

/// 채집 
struct sDropMoneyGather : public sDropMoney				/// 드롭 머니
{};
struct sDropNTypeDataGather : public sDropNTypeData		/// 드롭 아이템 N 타입 상세
{};
struct sDropNTypeGather : public sDropNType				/// 드롭 아이템 N 타입
{};
struct sDropSTypeDataGather : public sDropSWTypeData	/// 드롭 아이템 S 타입 상세
{};
struct sDropSTypeGather : public sDropSWType			/// 드롭 아이템 S 타입
{};
struct sDropQTypeGather : public sDropQType				/// 퀘스트 드롭
{};

/// 플레이어가 몬스터에 준 데미지
struct sPlayerDamage
{
	unsigned long	mMonsterIdx;
	unsigned long	mPlayerIdx;
	long			mDamage;
};


/// 파티원에 따른 증가치
struct sPartyExp
{
	unsigned char	mPartyMemberCnt;
	float			mExpIncrease;
	float			mSxpIncrease;
};

#pragma pack(pop)