/* ========================================================================== * ÆÄ ÀÏ : Drop.h * ¸ñ Àû : µå¶ø ½Ã½ºÅÛ * ÀÛ ¼º ÀÚ : ¹Ú°æÈñ * ÀÛ ¼º ÀÏ : 2007-02-20 * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once #include #include "RangeCheck.h" #include "Drop_Common.h" class cDropScript; class cMonster; class cPlayer; class cGathering; struct sDropNType; struct sDropSWType; struct sPlayerDamage; struct sDropNTypeGather; const unsigned long DROP_LOG_WRITE_NORMAL = 10 * MINUTE; /// Á¤»óÀûÀÎ ·Î±× ±â·Ï½Ã°£ const unsigned long DROP_LOG_WRITE_CONTINUE = 1 * MINUTE; /// ·Î±×¾çÀÌ ¸¹¾Æ Çѹø¿¡ ±â·Ï¾ÈµÈ°æ¿ì ´ÙÀ½ ÀúÀå½Ã°£ const unsigned long DROP_LOG_WRITE_PROCESS_CNT = 400; /// ÇÑÇÁ·Î¼¼½º¿¡¼­ db¿¡ ±â·ÏÇÒ ·Î±× ÃÖ´ë±âÁØ·® - ³Ñ´Â¾ç±îÁö °í·ÁÇØ¼­ ¼³Á¤ struct sDropItemLog { unsigned long mMonIdx; unsigned long mMonDieCnt; unsigned long mMonMoneyCnt; tHashMap mItemMap; tHashMap mItemNoDropMap; sDropItemLog() { mMonIdx = 0; mMonDieCnt = 0; mMonMoneyCnt = 0; } }; class cDrop { public: static cDrop* mpDrop; cDrop(void); ~cDrop(void); bool Init(); void Release(); void ProcessDrop( unsigned long elapsedTime, unsigned long accumTime ); /// ¸ó½ºÅÍ void MonsterDrop( unsigned long monsterIdx, unsigned long playerIdx, unsigned long partyIdx ); void MonsterQuestDrop( unsigned long monsterIdx, unsigned long playerIdx, unsigned long partyIdx ); /// ·¹º§Â÷¿¡ µû¸¥ exp, sxp Áõ°¨Ä¡ Æ÷ÇÔµÈ ½ÇÁ¦ °æÇèÄ¡ float MonsterDropExpIncrease( float takeExp, unsigned char playerLevel, unsigned char monsterLevel ); /// äÁý void GatherDrop( cGathering* pGathering, unsigned long playerIdx ); bool InsertDropMonCantTime( unsigned long itemIdx, sDropLimit* pDropLimit ) { return mDropMonCantTime.Insert( itemIdx, pDropLimit ); } sDropLimit* GetDropMonCantTime( unsigned long itemIdx ) { return (sDropLimit*)mDropMonCantTime.GetAt( itemIdx ); } bool InsertDropGatherCantTime( unsigned long itemIdx, unsigned long cantTime ) { return mDropGatherCantTime.Insert( itemIdx, cantTime ); } void InsertItemGroupRandSeed( unsigned long itemGroup, unsigned long randSeed ); private: /// ¸ó½ºÅÍ void DropTwitter( cMonster* pMonster, unsigned long playerIdx, unsigned long partyIdx ); /// Æ®À§ÅÍ Ã³¸® void DropMonsterValue( cMonster* pMonster ); /// money, exp, sxp µå¶ø void DropMonsterClass( unsigned long monsterIdx, float penalty ); /// Á¾·ùº°(ÀϹÝ) µå¶ø void DropMonsterLevelType( unsigned char level, unsigned char type, float penalty ); /// ·¹º§/ŸÀÔº°(¿ùµå) µå¶ø void DropMonQuestType( cMonster* pMonster, cPlayer* pPlayer ); /// Äù½ºÆ® ¾ÆÀÌÅÛ µå¶ø bool DropMonCheck( cMonster* pMonster, cPlayer* pPlayer ); /// µå¶ø Á¶°Ç üũ void DropMonItemSelect( sDropItemListScript* pDropItemList, float penalty ); /// ¾ÆÀÌÅÛ¼±Åà /// äÁý void DropGatherValue( cGathering* pGathering, unsigned long playerIdx ); /// money µå¶ø void DropGatherClass( cGathering* pGathering, unsigned long playerIdx ); /// Á¾·ùº°(ÀϹÝ) µå¶ø void DropGatherQuest( cGathering* pGathering, unsigned long playerIdx ); /// Äù½ºÆ® ¾ÆÀÌÅÛ µå¶ø void DropGatherItemSelect( sDropItemListScript* pDropItemList ); /// ¾ÆÀÌÅÛ¼±Åà private: cDropScript* mpDropScript; typedef tArray cAry; typedef tHashSet cHashSet; typedef tHashMap cHashMap; typedef tPointerHashMap cPHashMap; cHashMap mDropItemCntMap; cHashMap mDropNoItemCntMap; /// ¸ó½ºÅ͸¦ °ø°ÝÇÑ À¯ÀúµéÀÇ ÆÄƼ ¸®½ºÆ® cHashSet partyIdxSet; /// Ãæµ¹ ¹üÀ§ üũ cRangeCheck rangechk; /// µå¶ø ³»¿ª /// cPHashMap mDropLogMap; unsigned long mLogWriteTime; typedef tPointerHashSet cSelectSet; cSelectSet mTempSelectItemSet; /// ¾ÆÀÌÅÛº° µå¶ø Á¦¾à(½Ã°£) cPHashMap mDropMonCantTime; cHashMap mDropGatherCantTime; unsigned long mQuestSeed; /// cHashMap mItemGroupRandSeed; public: unsigned long mDropCnt; }; #define DROP cDrop::mpDrop