82 lines
2.9 KiB
C++
82 lines
2.9 KiB
C++
#pragma once
|
|
|
|
#include <ReliableRatioRandomizer.h>
|
|
#include <RareItemDropParser.h>
|
|
#include <ItemDropParser.h>
|
|
|
|
|
|
// ITEMDROPINFO.txt의
|
|
// b_index 필드의 상수값
|
|
enum eDROP_TYPE
|
|
{
|
|
DROP_NONE = 0,
|
|
DROP_MONEY_1 = 1,
|
|
DROP_MONEY_40 = 5,
|
|
DROP_MONEY_400 = 7,
|
|
|
|
DROP_ITEM_0 = 101,
|
|
DROP_ITEM_1 = 102,
|
|
DROP_ITEM_2 = 103,
|
|
DROP_ITEM_3 = 104,
|
|
DROP_ITEM_4 = 105,
|
|
DROP_ITEM_5 = 106,
|
|
DROP_ITEM_6 = 107,
|
|
DROP_ITEM_7 = 108,
|
|
DROP_ITEM_8 = 109,
|
|
DROP_ITEM_9 = 110,
|
|
DROP_ITEM_10 = 111,
|
|
|
|
DROP_RARE_ITEM = 999,
|
|
};
|
|
|
|
class SCItemSlot;
|
|
class DropItemRatioCalc;
|
|
|
|
class DropFormulaCore
|
|
{
|
|
public:
|
|
DropFormulaCore(void);
|
|
virtual ~DropFormulaCore(void);
|
|
|
|
VOID Init( TCHAR * tszItemDropPerGradeFile, TCHAR * tszItemDropInfoFile, TCHAR * tszRareItemDropInfoFile );
|
|
|
|
VOID Reload();
|
|
// 드랍 확률 계산
|
|
BOOL Drop( DWORD PlayerNum, eNPC_GRADE MonsterGrade, LEVELTYPE MonsterDisplayLV, FLOAT fBonusPercent, LEVELTYPE LVAverage, eDROP_TYPE & OUT DropTypeOut, MONEY & OUT rDroppedMoneyOut, SCItemSlot & OUT rDroppedItemSlotOut );
|
|
BOOL AdditionalItemDrop( BOOL IsItemDrop, INT MaxArrayNum, WORD * pDropItemRate, WORD * pDropItemCode, SCItemSlot & OUT rDroppedItemSlotOut );
|
|
|
|
// 돈
|
|
BOOL DropMoneyFunc( FLOAT fBonusPercent, LEVELTYPE LVAverage, eDROP_TYPE DropType, eNPC_GRADE MonsterGrade, LEVELTYPE MonsterDisplayLV, MONEY & OUT rDropMoney );
|
|
// 일반 아이템
|
|
BOOL DropItemFunc( eDROP_TYPE DropType, LEVELTYPE MonsterDisplayLV, SCItemSlot & OUT rDropItemSlot );
|
|
// 레어 아이템
|
|
BOOL DropRareItemFunc( DWORD PlayerNum, eNPC_GRADE MonsterGrade, LEVELTYPE MonsterDisplayLV, SCItemSlot & OUT rDropItemSlot );
|
|
// 상위 몬스터 아이템
|
|
BOOL DropHigherMonsterItemFunc( INT MaxArrayNum, WORD * pDropItemRate, WORD * pDropItemCode, SCItemSlot & OUT rDropItemSlot );
|
|
protected:
|
|
DropItemRatioCalc * m_pItemDropRatio;
|
|
|
|
private:
|
|
FLOAT m_fPlusScriptPercent; //< FormulaRatioParser::Instance()->GetFormulaRatio(RATIO_TYPE_DROP)->m_fRatio 값
|
|
enum { MAX_HIGHER_MONSTER_ITEM_DROP_UNIT = (10000-1), };
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------------------
|
|
// 드랍 확률 관련 맴버
|
|
VOID _InitRatio();
|
|
// 드랍 확률 선택기
|
|
// +1 은 레어아이템때문에
|
|
ReliableRatioRandomizer<MAX_DROP_ITEM_STEP_NUM+1> m_DropRatioSelecter[eNPC_GRADE_MAX][MAX_PARTYMEMBER_NUM+1];
|
|
// 레어 아이템 확률 선택기
|
|
// MAX_LEVEL_STEP_NUM은 레어아이템 레벨타입 구간 element개수가 MAX_LEVEL_STEP_NUM을 넘지 못한다.
|
|
// 1~20 : 0
|
|
// 21~40 : 1
|
|
// 41~60 : 2
|
|
// 61~100 : 3
|
|
LEVELTYPE m_Section[MAX_LEVEL_STEP_NUM];
|
|
ReliableRatioRandomizer<MAX_ELEMENT_PER_LEVEL_NUM> m_RareItemDropRatioSelecter[MAX_LEVEL_STEP_NUM][eNPC_GRADE_MAX][MAX_PARTYMEMBER_NUM+1];
|
|
//------------------------------------------------------------------------------------------------------------------------------------------
|
|
// 파서 관련
|
|
ItemDropParser m_ItemDropParser;
|
|
RareItemDropParser m_RareItemDropParser;
|
|
};
|