Files
Sun1602/Tools/ItemDropTestTool/DropFormulaCore.h
T
2022-10-26 12:25:11 +08:00

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;
};