#ifndef _QUEST_STRUCT_ #define _QUEST_STRUCT_ #include #include #include using namespace std; namespace Quest { enum eQeustType { NPC_QUEST = 0, // NPC °¡ ÁÖ´Â Äù½ºÆ® ITEM_QUEST = 1, // ¾ÆÀÌÅÛ »ç¿ëÀ» ÅëÇÑ Äù½ºÆ® AREA_QUEST = 2, // À§Ä¡ Æ®¸®°Å Äù½ºÆ® PARTY_QUEST_BIT = 0xF000 // ÆÄƼ Äù½ºÆ® ºñÆ® }; enum Trigger { TRIGGER_START = 0, // Æ®¸®°Å : ½ÃÀÛ TRIGGER_PUTON = 1, // Æ®¸®°Å : ƯÁ¤ Àå¼Ò¿¡ ¹°Ç° ¶³±¸±â TRIGGER_GETON = 2, // Æ®¸®°Å : ƯÁ¤ Àå¼Ò µµÂø TRIGGER_TALK = 3, // Æ®¸®°Å : ´ëÈ­Çϱâ TRIGGER_KILL = 4, // Æ®¸®°Å : Á×À̱â TRIGGER_PICK = 5, // Æ®¸®°Å : ¹°Ç° ¾ò±â TRIGGER_FAME = 6, // Æ®¸®°Å : ÀÏÁ¤ ¸í¼º ¾ò±â TRIGGER_LEVEL_TALK = 7, // Æ®¸®°Å : ÀÏÁ¤ ·¹º§¿¡¼­ ´ëÈ­Çϱâ TRIGGER_FAME_TALK = 8, // Æ®¸®°Å : ÀÏÁ¤ ¸í¼º¿¡¼­ ´ëÈ­Çϱâ TRIGGER_ABILITY_TALK = 9 // Æ®¸®°Å : ÀÏÁ¤ ¾îºô¸®Æ¼¿¡¼­ ´ëÈ­Çϱâ }; enum Event { EVENT_DISAPPEAR = 0, // À̺¥Æ® : ¹°Ç° »èÁ¦ EVENT_GET = 1, // À̺¥Æ® : ¹°Ç° ¾ò±â EVENT_SPAWN = 2, // À̺¥Æ® : ¸ó½ºÅÍ ½ºÆù EVENT_MONSTERDROP = 3, // À̺¥Æ® : ¸ó½ºÅÍ ¹°Ç° ¶³±¸±â EVENT_END = 4, // À̺¥Æ® : Äù½ºÆ® Á¾·á EVENT_AWARD = 5, // À̺¥Æ® : ¹°Ç° º¸»ó EVENT_MSGBOX = 6, // À̺¥Æ® : ¸Þ¼¼Áö ¹Ú½º Ãâ·Â EVENT_PHASE = 7, // À̺¥Æ® : ´ÙÀ½ ÆäÀÌÁî ÁøÇà EVENT_ADDQUEST = 8, // À̺¥Æ® : °­Á¦ Äù½ºÆ® EVENT_AWARDITEM = 9, // À̺¥Æ® : Àåºñ º¸»ó EVENT_AWARDITEMID = 10, // À̺¥Æ® : Àåºñ º¸»ó EVENT_AWARDITEMCLASS= 11, // À̺¥Æ® : Àåºñ º¸»ó EVENT_MOVE = 12, // À̺¥Æ® : Á¸ À̵¿ EVENT_THEATERMODE = 13, // À̺¥Æ® : ¾¾¾îÅÍ ¸ðµå EVENT_ALARMBOX = 14, // À̺¥Æ® : ¾Ë¶÷ ¸Þ¼¼Áö ¹Ú½º Ãâ·Â EVENT_AWARDABILITY = 15, // À̺¥Æ® : ¾îºô¸®Æ¼ º¸»ó }; enum Const { ERROR_OF_DIST = 7, // À§Ä¡ Äù½ºÆ® üũ ¿µ¿ª °Å¸® ¿ÀÂ÷°ª PARTY_QUEST_DIST = 32, // 32m ¾È¿¡ ÀÖ´Â ÆÄƼ¿ø¸¸ ÆÄƼ Äù½ºÆ® ¿µÇâ ¹ÞÀ½ MAX_HISTORY_QUEST = 200, // È÷½ºÅ丮 ÃÖ´ë ¸ñ·Ï MAX_EXECUTING_QUEST = 20, // µ¿½Ã ¼öÇà °¡´ÉÇÑ ÃÖ´ë Äù½ºÆ® ¼ö MAX_TRIGGER = 10, // ÇÑ ÆäÀÌÁî´ç ÃÖ´ë Æ®¸®°Å ¼ö DISABLE_CANCEL_QUEST_BIT = 0xF000 // »èÁ¦ ºÒ°¡´ÉÇÑ °­Á¦ Äù½ºÆ® }; enum ErrorCode { S_SUCCESS = 0, S_END_QUEST = 1, E_EVENT_DISAPPEAR = 2, E_EVENT_GET = 3, E_EVENT_MONSTERDROP = 4, E_EVENT_AWARDITEM = 5, E_EVENT_AWARDGOLD = 6 }; struct EventNode { unsigned long m_dwEventKind; unsigned long m_dwEventNumber; unsigned long m_dwEventAmount1; unsigned long m_dwEventAmount2; unsigned long m_dwEventAmount3; float m_fPosX; float m_fPosY; float m_fPosZ; EventNode() : m_dwEventKind(0), m_dwEventNumber(0), m_dwEventAmount1(0), m_dwEventAmount2(0), m_dwEventAmount3(0), m_fPosX(0), m_fPosY(0), m_fPosZ(0) { } EventNode(unsigned long dwEventKind, unsigned long dwEventNumber, unsigned long dwEventAmount1, unsigned long dwEventAmount2, unsigned long dwEventAmount3, float fPosX, float fPosY, float fPosZ) : m_dwEventKind(dwEventKind), m_dwEventNumber(dwEventNumber), m_dwEventAmount1(dwEventAmount1), m_dwEventAmount2(dwEventAmount2), m_dwEventAmount3(dwEventAmount3), m_fPosX(fPosX), m_fPosY(fPosY), m_fPosZ(fPosZ) { } }; struct TriggerNode { unsigned long m_dwTriggerKind; unsigned long m_dwTriggerID; unsigned long m_dwZoneID; unsigned long m_dwMaxCount; unsigned long m_dwLevel; float m_fPosX; float m_fPosY; float m_fPosZ; float m_fDistance; vector m_lstEvent; vector m_lstFalseEvent; TriggerNode() : m_dwTriggerKind(0), m_dwTriggerID(0), m_dwZoneID(0), m_dwMaxCount(0), m_dwLevel(0), m_fPosX(0), m_fPosY(0), m_fPosZ(0), m_fDistance(0) { } TriggerNode(unsigned long dwTriggerKind, unsigned long dwTriggerID, unsigned long dwZoneID, unsigned long dwMaxCount, unsigned long dwLevel, float fPosX, float fPosY, float fPosZ, float fDistance) : m_dwTriggerKind(dwTriggerKind), m_dwTriggerID(dwTriggerID), m_dwZoneID(dwZoneID), m_dwMaxCount(dwMaxCount), m_dwLevel(dwLevel), m_fPosX(fPosX), m_fPosY(fPosY), m_fPosZ(fPosZ), m_fDistance(fDistance) { } }; struct PhaseNode { struct DeletedItem { unsigned short m_wItemID; unsigned char m_cItemNum; DeletedItem() : m_wItemID(0), m_cItemNum(0) { } DeletedItem(unsigned short wItemID, unsigned char cItemNum) : m_wItemID(wItemID), m_cItemNum(cItemNum) { } }; unsigned long m_dwZondID; unsigned long m_dwPhaseNumber; // ÆäÀÌÁî ¹øÈ£ vector m_lstDeletedItem; // Äù½ºÆ® »èÁ¦½Ã ÇÔ²² Áö¿öÁú ¾ÆÀÌÅÛ vector m_lstTrigger; // Æ®¸®°Å ¸®½ºÆ® PhaseNode() : m_dwZondID(0), m_dwPhaseNumber(0) { } PhaseNode(unsigned long dwZoneID, unsigned long dwPhaseNumber) : m_dwZondID(dwZoneID), m_dwPhaseNumber(dwPhaseNumber) { } }; struct QuestNode { unsigned short m_wQuestID; // Äù½ºÆ® ¾ÆÀ̵ð unsigned short m_wQuestType; // Äù½ºÆ® ŸÀÔ unsigned short m_wMaxPhase; // ÃÖ´ë ÆäÀÌÁî ¼ö unsigned short m_wMinLevel; // ¼öÇà °¡´É ÃÖ¼Ò ·¹º§ unsigned short m_wMaxLevel; // ¼öÇà °¡´É ÃÖ´ë ·¹º§ unsigned long m_dwMinFame; // ¼öÇà °¡´É ÃÖ¼Ò ¸í¼º unsigned long m_dwMaxFame; // ¼öÇà °¡´É ÃÖ´ë ¸í¼º unsigned long m_dwClass; // ¼öÇà °¡´É Ŭ·¡½º unsigned short m_wCompletedQuest; // ¼±Çà Äù½ºÆ® bool m_bSave; // È÷½ºÅ丮 ±â·Ï ¿©ºÎ unsigned char m_cNation; // ¼öÇà °¡´É ±¹Àû bool m_bNationDependent; // ±¹°¡ Á¾¼Ó ¿©ºÎ (Á¾¼Ó Äù½ºÆ®´Â ±¹Àû º¯°æ½Ã »èÁ¦µÈ´Ù.) unsigned char m_cSkillPointBonus; // ½ºÅ³Æ÷ÀÎÆ® ¾îµåº¥Æ¼Áö unsigned char m_cAbilityPointBonus; // ¾îºô¸®Æ¼Æ÷ÀÎÆ® ¾îµåº¥Æ¼Áö float m_fPosX; // À§Ä¡ Äù½ºÆ®ÀÇ ¿µ¿ª Á᫐ À§Ä¡ float m_fPosY; float m_fPosZ; float m_fDistance; // Á᫐ À§Ä¡¿¡¼­ÀÇ °Å¸® unsigned long m_dwZoneID; // À§Ä¡ Äù½ºÆ®ÀÇ Á¸ bool m_bDelLinkItem; // Äù½ºÆ® Ãë¼Ò ½Ã °ü·Ã ¾ÆÀÌÅÛ »èÁ¦ ¿©ºÎ vector m_lstPhase; // ÆäÀÌÁî ¸®½ºÆ® QuestNode() : m_wQuestID(0), m_wQuestType(0), m_wMaxPhase(0), m_wMinLevel(0), m_wMaxLevel(0), m_dwMinFame(0), m_dwMaxFame(0), m_dwClass(0), m_wCompletedQuest(0), m_bSave(false), m_cSkillPointBonus(0), m_cAbilityPointBonus(0), m_cNation(0), m_bNationDependent(false), m_fPosX(0), m_fPosY(0), m_fPosZ(0), m_fDistance(0), m_dwZoneID(0), m_bDelLinkItem(true) { } QuestNode(unsigned short wQuestID, unsigned short wQuestType, unsigned short wMaxPhase, unsigned short wMinLevel, unsigned short wMaxLevel, unsigned long dwMinFame, unsigned long dwMaxFame, unsigned long dwClass, unsigned short wCompleteQuest, bool bSave, unsigned char cNation, bool bNationDependent) : m_wQuestID(wQuestID), m_wQuestType(wQuestType), m_wMaxPhase(wMaxPhase), m_wMinLevel(wMinLevel), m_wMaxLevel(wMaxLevel), m_dwMinFame(dwMinFame), m_dwMaxFame(dwMaxFame),m_dwClass(dwClass), m_wCompletedQuest(wCompleteQuest), m_bSave(bSave), m_cNation(cNation), m_bNationDependent(bNationDependent), m_cSkillPointBonus(0), m_cAbilityPointBonus(0), m_fPosX(0), m_fPosY(0), m_fPosZ(0), m_fDistance(0), m_dwZoneID(0), m_bDelLinkItem(true) { } unsigned short GetQuestType() { return (m_wQuestType & ~Quest::PARTY_QUEST_BIT); } bool IsPartyQuest() { return (0 != (m_wQuestType & Quest::PARTY_QUEST_BIT)); } bool CheckNationDependent( unsigned char cNation ) { // ±¹°¡ Á¾¼ÓÀûÀÎ Äù½ºÆ®Áß¿¡¼­ ÀÎÀÚ·Î ³Ñ¾î¿Â ±¹ÀûÀÌ ¼öÇàÇÒ ¼ö ¾ø´Â Äù½ºÆ®ÀÌ¸é »èÁ¦ÇؾßÇÒ Äù½ºÆ®ÀÌ´Ù. if ( m_bNationDependent ) { // ¼öÇàÇÒ ¼ö ÀÖ´Â ±¹ÀûÀÎÁö üũ bool bEnableQuest = false ; if ( 0 == m_cNation ) { ERRLOG1(g_Log, "QuestID : 0x%04x ¸ðµç ±¹°¡°¡ ¼öÇàÇÒ¼ö ÀÖ´Â Äù½ºÆ®°¡ ±¹°¡ Á¾¼Ó¼ºÀ» °¡Áö°í ÀÖ½À´Ï´Ù.", m_wQuestID) ; return false; } else { unsigned char cQuestNation = m_cNation ; unsigned char cNationRes = 0 ; while ( cQuestNation != 0 ) { cNationRes = cQuestNation % 10 ; cQuestNation /= 10 ; if ( cNationRes == cNation ) { bEnableQuest = true ; break; } } } if ( !bEnableQuest ) { // Áö¿ö¾ßÇÏ´Â Äù½ºÆ®ÀÌ´Ù. return true ; } } return false; } }; struct TriggerMsg { unsigned long m_dwCID; // ij¸¯ÅÍ CID. unsigned short m_wQuestID; // Äù½ºÆ® ID. unsigned char m_cPhase; unsigned char m_cTrigger; unsigned char m_cCount; Position m_Pos; TriggerMsg() { m_dwCID = 0; m_wQuestID = 0; m_cPhase = 0; m_cTrigger = 0; m_cCount = 0; } }; struct ExecutingQuest { unsigned char m_cPhase; // ÇöÀç ÆäÀÌÁî unsigned char m_cTriggerCount[MAX_TRIGGER]; // °¢ Æ®¸®°ÅÀÇ ¹ßµ¿ Ƚ¼ö QuestNode* m_QuestNode; // Äù½ºÆ® ³ëµå (¿øº») ExecutingQuest(); ExecutingQuest(unsigned short wQuestID, unsigned char cPhase, unsigned char* aryTriggerCount); }; } #endif