MQuestDropTable.h
00001 #ifndef _MQUESTDROPTABLE_H 00002 #define _MQUESTDROPTABLE_H 00003 00004 #include "MQuestConst.h" 00005 00007 enum MQuestDropItemType 00008 { 00009 QDIT_NA = 0, 00010 QDIT_WORLDITEM = 1, 00011 QDIT_QUESTITEM 00012 }; 00013 00015 struct MQuestDropItem 00016 { 00017 MQuestDropItemType nDropItemType; 00018 int nID; 00019 00020 MQuestDropItem() : nDropItemType(QDIT_NA), nID(0) { } 00021 }; 00022 00023 #define MAX_DROPTABLE_PERCENT 100 00024 00025 00026 class MQuestDropSet 00027 { 00028 private: 00029 int m_nID; 00030 char m_szName[16]; 00031 MQuestDropItem m_DropItemSet[MAX_QL+1][MAX_DROPTABLE_PERCENT]; 00032 int m_nTop[MAX_QL+1]; 00033 set<int> m_QuestItems; // 이 세트가 가지고 있는 퀘스트 아이템 세트 - 클라이언트가 사용하려고 만듦 00034 public: 00036 MQuestDropSet() 00037 { 00038 m_nID = 0; 00039 m_szName[0] = 0; 00040 memset(m_DropItemSet, 0, sizeof(m_DropItemSet)); 00041 for (int i = 0; i <= MAX_QL; i++) 00042 { 00043 m_nTop[i] = 0; 00044 } 00045 } 00046 int GetID() { return m_nID; } 00047 const char* GetName() { return m_szName; } 00048 void SetID(int nID) { m_nID = nID; } 00049 void SetName(const char* szName) { strcpy(m_szName, szName); } 00050 00051 00052 00053 00054 void AddItem(MQuestDropItem* pItem, int nQL, int nRatePercent); 00058 bool Roll(MQuestDropItem& outDropItem, int nQL); 00059 00060 set<int>& GetQuestItems() { return m_QuestItems; } 00061 }; 00062 00063 00065 class MQuestDropTable : public map<int, MQuestDropSet*> 00066 { 00067 private: 00068 void ParseDropSet(MXmlElement& element); 00069 void ParseDropItemID(MQuestDropItem* pItem, const char* szAttrValue); 00070 void Clear(); 00071 public: 00072 MQuestDropTable(); 00073 ~MQuestDropTable(); 00074 00075 bool ReadXml(const char* szFileName); 00076 bool ReadXml(MZFileSystem* pFileSystem,const char* szFileName); 00077 00078 00079 00080 00081 bool Roll(MQuestDropItem& outDropItem, int nDropTableID, int nQL); 00082 MQuestDropSet* Find(int nDropTableID); 00083 }; 00084 00085 00086 00087 00088 00089 00090 00091 00092 #endif
MAIET entertainment