// NPCList.h: interface for the CNPCList class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_NPCLIST_H__E20011A2_96E4_44B4_AB08_826651FF4122__INCLUDED_) #define AFX_NPCLIST_H__E20011A2_96E4_44B4_AB08_826651FF4122__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include #include #define TRIGGER_START 0 #define TRIGGER_PUTON 1 #define TRIGGER_GETON 2 #define TRIGGER_TALK 3 #define TRIGGER_KILL 4 #define TRIGGER_PICK 5 #define EVENT_DISAPPEAR 0 #define EVENT_GET 1 #define EVENT_SPAWN 2 #define EVENT_MONSTERDROP 3 #define EVENT_DROP 4 #define EVENT_AWARD 5 #define EVENT_MSGBOX 6 #define EVENT_PHASE 7 using namespace std; typedef struct ITEMNode { unsigned short m_wKindItem; unsigned short m_wSkill; unsigned short m_wSkillLevel; unsigned short m_wTabPage; unsigned long m_dwIndexPosition; } ITEMNode, *LPITEMNode; typedef struct DialogNode { unsigned short m_wKindWord; unsigned short m_wDialogFlag; unsigned long m_dwFlag; char *m_strWord; } DialogNode, *LPDialogNode; typedef struct WarpNode { unsigned short m_wNumber; unsigned short m_wZoneNumber; float m_fPosX; float m_fPosY; float m_fPosZ; } WarpNode, *LPWarpNode; typedef struct EventNode { unsigned long m_dwEventKind; unsigned long m_dwEventNumber; unsigned long m_dwEventAmount; float m_fPosX; float m_fPosY; float m_fPosZ; char *m_strWord; } EventNode, *LPEventNode; typedef struct TriggerNode { unsigned long m_dwTriggerKind; unsigned long m_dwTriggerID; unsigned long m_dwZoneID; float m_fPosX; float m_fPosY; float m_fPosZ; float m_fDistance; vector m_lstEvent; } TriggerNode, *LPTriggerNode; typedef struct PhaseNode { unsigned long m_dwPhaseNumber; char *m_strPhaseDesc; vector m_lstTrigger; } PhaseNode, *LPPhaseNode; typedef struct QuestNode { unsigned short m_wQuestID; unsigned short m_wMaxPhase; unsigned short m_wMinLevel; unsigned short m_wMaxLevel; unsigned long m_dwClass; unsigned long m_dwCompletedQuest; char *m_strQuestTitle; vector m_lstPhase; } QuestNode, *LPQuestNode; typedef struct NPCNode { unsigned long m_dwUID; unsigned long m_dwJob; float m_fDirection; float m_fPosX, m_fPosY, m_fPosZ; char *m_strNpcSkin; char *m_strNpcName; vector m_lstItem; vector m_lstScript; vector m_lstWarpZone; vector m_lstQuest; LPITEMNode GetITEMNode(unsigned short wKindItem) { vector::iterator it; for(it = m_lstItem.begin(); it != m_lstItem.end(); it++) { if((*it)->m_wKindItem == wKindItem) return (*it); } return NULL; } LPDialogNode GetScript(unsigned short wPage) { vector::iterator it; for(it = m_lstScript.begin(); it != m_lstScript.end(); it++) { if((*it)->m_wKindWord == wPage) return (*it); } return NULL; } LPWarpNode GetWarpNode(unsigned short wNumber) { vector::iterator it; for(it = m_lstWarpZone.begin(); it != m_lstWarpZone.end(); it++) { if((*it)->m_wNumber == wNumber) return (*it); } return NULL; } LPQuestNode GetQuestforID(unsigned short wQuestID) { vector::iterator it; for(it = m_lstQuest.begin(); it != m_lstQuest.end(); it++) { if((*it)->m_wQuestID == wQuestID) return (*it); } return NULL; } LPQuestNode GetQuestforNumber(unsigned short wNumber) { if(m_lstQuest.size() > wNumber) { return m_lstQuest[wNumber]; } return NULL; } const char *GetGreeting(void) { vector::iterator it; for(it = m_lstScript.begin(); it != m_lstScript.end(); it++) { if((*it)->m_wKindWord == 0) return (*it)->m_strWord; } return NULL; } void SearchQuestList(unsigned long m_dwLevel, unsigned long m_dwClass, unsigned short *m_lstCompleted, unsigned short m_wNumCompleted, unsigned short *m_lstQuestList); } NPCNode, *LPNPCNode; class CNPCList { protected: vector m_lstNpcNode; unsigned long m_dwZone; public: LPQuestNode m_lpQuestNode; LPPhaseNode m_lpPhaseNode; LPTriggerNode m_lpTriggerNode; const char *GetGreeting(unsigned long dwUID); void DestroyNPCList(void); LPITEMNode GetITEMNode(unsigned short wKindItem); LPNPCNode GetNPCNode(unsigned long dwUID); LPNPCNode GetNPCNodeByOrder(unsigned long dwOrder) { return m_lstNpcNode[dwOrder]; } void AddNpc(LPNPCNode lpNewNode); BOOL IsExistNpc(unsigned long dwUID); CNPCList(); ~CNPCList(); BOOL Load(const char *strScriptFile, const char *strQuestFile, unsigned long dwZone = 1); void Create(void); unsigned long GetNpcNum(void) { return m_lstNpcNode.size(); } unsigned long GetZone(void) { return m_dwZone; } }; extern CNPCList g_NPCList; #endif // !defined(AFX_NPCLIST_H__E20011A2_96E4_44B4_AB08_826651FF4122__INCLUDED_)