Files
Sun1602/ProgramCommon/PetInfoParser.h
T
2022-10-26 12:25:11 +08:00

120 lines
2.8 KiB
C++

#pragma once
#include <SolarHashTable.h>
#include <Singleton.h>
#include <SolarFileReader.h>
#include <ScriptCode.IParser.h>
#include <hash_map>
#define MAX_PET_OPTION_EXTENT_COUNT 5
#define MAX_PET_OPTION_COUNT 3
#define MAX_PET_INTIMACY 100
#define MIN_PET_INTIMACY 0
#define MAX_PET_FULLNESS 100
#define MIN_PET_FULLNESS 0
struct sPetOptionInfo
{
WORD m_wOptionKind[MAX_PET_OPTION_COUNT];
BYTE m_byValueType[MAX_PET_OPTION_COUNT];
INT m_iValue[MAX_PET_OPTION_COUNT];
};
struct sPet_Script_Info
{
#ifdef __CN_PET_OPTION_APPLY_FLAG
enum ePET_OPTION_FLAG
{
ePET_OPTION_FLAG_NONE = (0), //< 0
ePET_OPTION_FLAG_1 = (1<<0), //< 1
ePET_OPTION_FLAG_2 = (1<<1), //< 2
ePET_OPTION_FLAG_3 = (1<<2), //< 4
ePET_OPTION_FLAG_4 = (1<<3), //< 8
ePET_OPTION_FLAG_5 = (1<<4), //< 16
//(shogen)(20090825)
ePET_OPTION_FLAG_MAX = (1<<5), //< 32
};
#endif
WORD m_wIndexCode;
char m_pszName[MAX_MONSTERNAME_LENGTH];
DWORD m_dwNameCode;
MONSTERCODE m_MonsterCode;
#ifdef _GS_ADD_PET_ENCHANT_EFFECT
BYTE effect_subtype;
#endif//_GS_ADD_PET_ENCHANT_EFFECT
BYTE m_byIntimacyMin[MAX_PET_OPTION_EXTENT_COUNT];
BYTE m_byIntimacyMax[MAX_PET_OPTION_EXTENT_COUNT];
sPetOptionInfo m_PetOptionInfo[MAX_PET_OPTION_EXTENT_COUNT];
BYTE m_byFullnessUp;
BYTE m_byFullnessDown[2];
BYTE m_byIntimacyUp;
BYTE m_byIntimacyDown[2];
BYTE m_byAIType;
#ifdef __CN_PET_OPTION_APPLY_FLAG
ePET_OPTION_FLAG m_eApplyOptionFlag;
BOOL CanUseOption(BYTE byOptionIndex)
{
INT Flag = ePET_OPTION_FLAG_NONE;
switch(byOptionIndex)
{
case 0: Flag = ePET_OPTION_FLAG_1;
break;
case 1: Flag = ePET_OPTION_FLAG_2;
break;
case 2: Flag = ePET_OPTION_FLAG_3;
break;
case 3: Flag = ePET_OPTION_FLAG_4;
break;
case 4: Flag = ePET_OPTION_FLAG_5;
break;
}
return (m_eApplyOptionFlag & Flag);
}
#endif
BYTE m_byPdisplayMove;
BYTE m_byPpossition;
};
typedef stdext::hash_map<DWORD, sPet_Script_Info *> PET_SCRIPT_INFO_HASH;
class PetInfoParser : public util::Singleton<PetInfoParser>, public IParser
{
public:
PetInfoParser(void);
virtual ~PetInfoParser(void);
VOID Init( char * pszPackFileName );
VOID Release();
VOID Unload();
virtual BOOL LoadScript( eSCRIPT_CODE ScriptCode, BOOL bReload );
sPet_Script_Info * GetPetInfo( DWORD Index );
int GetOptionLevel( WORD wPetIndex , int iCurIntimacy );
VOID SetFirst() { m_HashPetInfoIterator = m_HashPetInfo.begin(); }
sPet_Script_Info* GetNext();
protected:
BOOL ValidCheck(sPet_Script_Info *pInfo);
private:
BOOL _Load( BOOL bReload );
PET_SCRIPT_INFO_HASH m_HashPetInfo;
PET_SCRIPT_INFO_HASH::iterator m_HashPetInfoIterator;
char m_pszFileName[MAX_PATH];
};