#include "StdAfx.h" #include ".\questscriptloader.h" #include #include "QuestInfoManager.h" #include "QuestInfo.h" #include "QuestConditionInfo_Concrete.h" #include "QuestActionInfo_Concrete.h" #include #define ADD_ACCEPTCONDITION( CONDITION_CLASS ) \ CONDITION_CLASS##_INFO* pCondition = new CONDITION_CLASS##_INFO; \ pInfo->AddAcceptCondition( pCondition ) #define ADD_COMPLETECONDITION( CONDITION_CLASS ) \ CONDITION_CLASS##_INFO* pCondition = new CONDITION_CLASS##_INFO; \ pInfo->AddCompleteCondition( pCondition ) #define ADD_ACCEPTACTION( ACTION_CLASS ) \ ACTION_CLASS##_INFO* pAction = new ACTION_CLASS##_INFO; \ pInfo->AddAcceptAction( pAction ) #define ADD_COMPLETEACTION( ACTION_CLASS ) \ ACTION_CLASS##_INFO* pAction = new ACTION_CLASS##_INFO; \ pInfo->AddCompleteAction( pAction ) #define ADD_ABANDONACTION( ACTION_CLASS ) \ ACTION_CLASS##_INFO* pAction = new ACTION_CLASS##_INFO; \ pInfo->AddAbandonAction( pAction ) #define MAX_AREACODE (5) #define ConvertID(str) ((DWORD)((*(str))|(*((str)+1)<<8)|(*((str)+2)<<16)|(*((str)+3)<<24))) template int GetValueCount( T& t, int MaxSize ) { int i = 0; for(; i < MaxSize; ++i ) if( 0 == t[i] ) break; return i; } template int GetValueCount( T1& t1, T2& t2, int MaxSize ) { int i = 0; for(; i < MaxSize; ++i ) if( 0 == t1[i] && 0 == t2[i] ) break; return i; } struct QuestScriptRecode { WORD QuestCode; char QuestName[MAX_QUEST_NAME_LENGTH]; #ifdef _YJ_RENEWAL_QUEST_UI_001265 BYTE Qtype; #endif DWORD NPCCodeRewardLocate; WORD CCKillMonsterLocate[MAX_QUEST_KILL_MONSTER_MAP_CODE]; DWORD QNCode; WORD QLevel; BYTE QDisplay; WORD ParentQuestCode; int QuestAcceptType; //< Äù½ºÆ® ¾×¼Ç ŸÀÔ DWORD ACCode; int ACType; DWORD QImgCode; DWORD QGroupCode; WORD ContinueQuestCode; DWORD NPCCodeStart; DWORD NPCCodeReward; //.// Äù½ºÆ® ¾×¼Ç ŸÀÔ Ã³¸® BYTE ACMaxRepeatNum; //½ÀµæÃÖ´ë¹Ýº¹È½¼ö WORD ACReqMinCharLV; //½ÀµæÇÊ¿äÃÖ¼Ò·¹º§ WORD ACReqMaxCharLV; //½ÀµæÇÊ¿äÃÖ´ë·¹º§ BYTE ACReqCharClassBit; //½ÀµæÇÊ¿äij¸¯ÅÍÁ¾·ù BYTE ACReqChaoState; //Ä«¿À Äù½ºÆ®¸¦ À§ÇÑ Ãß°¡ Çʵå BYTE ACReqNpcDialog; //.// ÇÊ¿äÇÑ ¹Ì¼Ç Á¤º¸ WORD ACReqMissionCode[QUEST_CONDITION_MISSION_INFO::_MAX_CHECK_NUM]; BYTE ACReqMissionNum[QUEST_CONDITION_MISSION_INFO::_MAX_CHECK_NUM]; //.// ÁøÇàÁßÀÎ Äù½ºÆ® Á¤º¸ WORD ACReqProgQuestCode[QUEST_CONDITION_QUEST_INFO::_DEF_CHECK_NUM]; // ½ÀµæÇÊ¿äÁøÇà Äù½ºÆ®ÄÚµå BYTE ACReqProgOperator; //.// ¿Ï·áµÈ Äù½ºÆ® Á¤º¸ WORD ACReqEndQuestCode[QUEST_CONDITION_QUEST_INFO::_DEF_CHECK_NUM]; BYTE ACReqEndQuestNum[QUEST_CONDITION_QUEST_INFO::_DEF_CHECK_NUM]; BYTE ACReqEndQuestOperator; //.// ÇÊ¿ä ¾ÆÀÌÅÛ WORD ACReqItemCode[QUEST_CONDITION_ITEM_INFO::_DEF_CHECK_NUM]; BYTE ACReqItemNum[QUEST_CONDITION_ITEM_INFO::_DEF_CHECK_NUM]; //.// ½ÀµæÁ¦ÇÑ WORD ACResEndQuestCode[QUEST_CONDITION_QUEST_INFO::_DEF_CHECK_NUM]; // ½ÀµæÁ¦ÇÑ Äù½ºÆ® ÄÚµå BYTE ACResEndQuestNum[QUEST_CONDITION_QUEST_INFO::_DEF_CHECK_NUM]; // ½ÀµæÁ¦ÇÑ Äù½ºÆ® ¿Ï·á Ƚ¼ö BYTE ACResEndQuestOperator; WORD ACResItemCode; // ¾ø¾î¾ß ÇÏ´Â ¾ÆÀÌÅÛ : Á¦ÇÑ ¾ÆÀÌÅÛ BYTE ACResItemClass; // Á¦ÇÑ Å¬·¡½º ¾ÆÀÌÅÛ BYTE AAReqItemDelete; // ½ÀµæÇÊ¿ä ¾ÆÀÌÅÛ »èÁ¦¿©ºÎ WORD AAGiveItemCode[QUEST_ACTION_ITEM_INFO::_DEF_CHECK_NUM]; // ºÎ¿© ¾ÆÀÌÅÛ BYTE AAGiveItemNum[QUEST_ACTION_ITEM_INFO::_DEF_CHECK_NUM]; DWORD SummonMonsterCode; DWORD MapPortalCode; DWORD AAGiveExpiredTime; // ŸÀÌ¸Ó //.// CompletionCondition( CC ) WORD CCReqCharLV; DWORD64 CCReqHiem; WORD CCReqMissionCode[QUEST_CONDITION_MISSION_INFO::_MAX_CHECK_NUM]; // ÇÊ¿äÇÑ ¹Ì¼Ç Á¤º¸ BYTE CCReqMissionNum[QUEST_CONDITION_MISSION_INFO::_MAX_CHECK_NUM]; #ifdef _NA_006607_20130402_ADD_QUESTTYPE WORD CCReqEndMissionCode[QUEST_CONDITION_MISSION_CLEAR_INFO::_MAX_CHECK_NUM]; BYTE CCReqEndMissionNum[QUEST_CONDITION_MISSION_CLEAR_INFO::_MAX_CHECK_NUM]; #endif #ifdef _DEVTAIYO_QUEST_TRIGGER_WORK DWORD CCReqTrigger[QUEST_CONDITION_TRIGGER_INFO::_MAX_CHECK_NUM]; // Æ®¸®°Å Á¶°Ç #endif // ¿Ï·áµÈ Äù½ºÆ® Á¤º¸ WORD CCReqEndQuestCode[QUEST_CONDITION_QUEST_INFO::_MAX_CHECK_NUM]; // ¿ä±¸¿Ï·áÄù½ºÆ® BYTE CCReqEndQuestNum[QUEST_CONDITION_QUEST_INFO::_MAX_CHECK_NUM]; // ¿ä±¸¿Ï·áÄù½ºÆ® Ƚ¼ö WORD CCReqItemCode[QUEST_CONDITION_ITEM_INFO::_MAX_CHECK_NUM]; // ÇÊ¿ä ¾ÆÀÌÅÛ BYTE CCReqItemNum[QUEST_CONDITION_ITEM_INFO::_MAX_CHECK_NUM]; BYTE CCReqItemDelete; // ÇÊ¿ä ¾ÆÀÌÅÛ »èÁ¦ ¿©ºÎ DWORD CCKillMonster[QUEST_CONDITION_KILLMONSTER_INFO::_MAX_CHECK_NUM]; //¿ä±¸¸ó½ºÅÍKill BYTE CCKillSetMonsterGrade[QUEST_CONDITION_KILLMONSTER_INFO::_MAX_CHECK_NUM]; // ¿ä±¸ ¸ó½ºÅÍ µî±Þ WORD CCKillSetMonsterLevel[QUEST_CONDITION_KILLMONSTER_INFO::_MAX_CHECK_NUM]; // ¿ä±¸ ¸ó½ºÅÍ ·¹º§ BYTE CCKillMonsterNum[QUEST_CONDITION_KILLMONSTER_INFO::_MAX_CHECK_NUM];//¿ä±¸¸ó½ºÅÍKill¼ö DWORD CCAreaSearchID[QUEST_CONDITION_AREA_INFO::_MAX_CHECK_NUM]; // Ž»ö ¿µ¿ª ID DWORD CAShowTextMsgCode; // ¿Ï·á½Ã º¸¿©¾ßÇÒ ÅØ½ºÆ® ÄÚµå #ifdef _DH_QUEST_ACCEPT_MESSAGE DWORD AAShowTextMsgCode; // ¼ö¶ô½Ã º¸¿©¾ßÇÒ ÅØ½ºÆ® ÄÚµå #endif//_DH_QUEST_ACCEPT_MESSAGE //.// º¸»ó ÄÚµå DWORD RIRewardCode[eCHAR_TYPE_MAX]; //.// TextIfo DWORD TISCodeStart; DWORD TISCodeProgr1; DWORD TISCodeProgr2; DWORD TISCodeCompl; DWORD TISCodeBrief; DWORD TISMissionText[QUEST_CONDITION_AREA_INFO::_MAX_CHECK_NUM]; #ifdef _NA_20100307_BETAKEY_SYSTEM INT32 BetaKey; #endif #ifdef _NA_003027_20111013_HONOR_SYSTEM BYTE DailyQuest; WORD SetBackTime; BYTE SetBackDay; WORD SquadCode; WORD ACFameCode; // ½ÀµæÁ¶°Ç ¸í¼º µî±Þ BYTE ACFameRating; WORD ACReputeCode; // ½ÀµæÁ¶°Ç ÆòÆÇ µî±Þ BYTE ACReputeRating; #endif //_NA_003027_20111013_HONOR_SYSTEM }; //================================================================================================== // f100220, #9499, waverix, this bound checker test a validation at compile time // NOTE: QuestScriptRecodeÀÇ Å¸ÀÔÀ» QuestInfo°¡ »ç¿ëÇÒ ¼ö Àְųª ÇØ¼­ ŸÀÔ ºÒÀÏÄ¡°¡ ¹ß»ýÇÏÁö ¾Êµµ·Ï // À¯µµÇÒ ÇÊ¿ä ÀÖ´Ù. class QuestInfoTest : public QuestInfo { void BoundChecker() { const QuestScriptRecode record = { 0, }; __TOUCHED(record); BOOST_STATIC_ASSERT(sizeof(m_pKillMonsterMapCode) == sizeof(record.CCKillMonsterLocate) && _countof(m_pKillMonsterMapCode) == _countof(record.CCKillMonsterLocate)); }; }; //================================================================================================== QuestScriptLoader::QuestScriptLoader(VOID) { } QuestScriptLoader::~QuestScriptLoader(VOID) { } VOID QuestScriptLoader::Release() { m_pQuestInfoManager = NULL; m_pEventRegister = NULL; } BOOL QuestScriptLoader::LoadScript( eSCRIPT_CODE ScriptCode, BOOL bReload ) { switch( ScriptCode ) { case SCRIPT_QUESTINFO: case SCRIPT_QUESTINFO_MANAGER: return LoadQuestInfo( bReload ); } return FALSE; } BOOL QuestScriptLoader::LoadQuestInfo( BOOL bReload ) { __UNUSED(bReload); if( !m_pQuestInfoManager ) return FALSE; #if defined(_SERVER) if( !m_pEventRegister ) return FALSE; #endif QuestScriptRecode Recode = {0,}; int i = 0; int nRowSize = GetRowSize(); for( int nRow = 0; nRow < nRowSize; ++nRow ) { GetData(nRow, Recode.QuestCode, "QuestCode"); GetData(nRow, MAX_QUEST_NAME_LENGTH, Recode.QuestName, "QuestName"); #ifdef _YJ_RENEWAL_QUEST_UI_001265 GetData(nRow, Recode.Qtype, "Qtype"); #endif GetData(nRow, Recode.NPCCodeRewardLocate, "NPCCodeRewardLocate"); for( i = 0 ; i < MAX_QUEST_KILL_MONSTER_MAP_CODE ; ++i ) GetData(nRow, Recode.CCKillMonsterLocate[i], "CCKillMonsterLocate%d", i+1 ); GetData(nRow, Recode.QNCode, "QNCode"); GetData(nRow, Recode.QLevel, "QLevel"); GetData(nRow, Recode.QDisplay, "QDisplay" ); GetData(nRow, Recode.ParentQuestCode, "ParentQuestCode"); GetData(nRow, Recode.QuestAcceptType, "QuestAcceptType"); //< Äù½ºÆ® ¾×¼Ç ŸÀÔ GetData(nRow, Recode.ACCode , "ACCode"); GetData(nRow, Recode.ACType , "ACType"); GetData(nRow, Recode.QImgCode , "QImgCode"); GetData(nRow, Recode.QGroupCode , "QGroupCode"); GetData(nRow, Recode.ContinueQuestCode, "ContinueQuestCode"); GetData(nRow, Recode.NPCCodeStart , "NPCCodeStart"); GetData(nRow, Recode.NPCCodeReward , "NPCCodeReward"); //.// Äù½ºÆ® ¾×¼Ç ŸÀÔ Ã³¸® GetData(nRow, Recode.ACMaxRepeatNum, "ACMaxRepeatNum"); //½ÀµæÃÖ´ë¹Ýº¹È½¼ö GetData(nRow, Recode.ACReqMinCharLV, "ACReqMinCharLV"); //½ÀµæÇÊ¿äÃÖ¼Ò·¹º§ GetData(nRow, Recode.ACReqMaxCharLV, "ACReqMaxCharLV"); //½ÀµæÇÊ¿äÃÖ´ë·¹º§ GetData(nRow, Recode.ACReqCharClassBit, "ACReqCharClassBit"); //½ÀµæÇÊ¿äij¸¯ÅÍÁ¾·ù GetData(nRow, Recode.ACReqChaoState, "ACReqChaoState"); //Ä«¿À Äù½ºÆ®¸¦ À§ÇÑ Ãß°¡ Çʵå GetData(nRow, Recode.ACReqNpcDialog, "ACReqNpcDialog"); //.// ÇÊ¿äÇÑ ¹Ì¼Ç Á¤º¸ for( i = 0 ; i < QUEST_CONDITION_MISSION_INFO::_MAX_CHECK_NUM; ++i ) { GetData(nRow, Recode.ACReqMissionCode[i], "ACReqMissionCode%d", i+1 ); GetData(nRow, Recode.ACReqMissionNum[i] , "ACReqMissionNum%d" , i+1 ); } //.// ÁøÇàÁßÀÎ Äù½ºÆ® Á¤º¸ for( i = 0 ; i < QUEST_CONDITION_QUEST_INFO::_DEF_CHECK_NUM; ++i ) GetData(nRow, Recode.ACReqProgQuestCode[i], "ACReqProgQuestCode%d" , i+1 ); GetData(nRow, Recode.ACReqProgOperator, "ACReqProgOperator" ); //.// ¿Ï·áµÈ Äù½ºÆ® Á¤º¸ for( i = 0 ; i < QUEST_CONDITION_QUEST_INFO::_DEF_CHECK_NUM; ++i ) GetData(nRow, Recode.ACReqEndQuestCode[i], "ACReqEndQuestCode%d", i+1 ); for( i = 0 ; i < QUEST_CONDITION_QUEST_INFO::_DEF_CHECK_NUM; ++i ) GetData(nRow, Recode.ACReqEndQuestNum[i], "ACReqEndQuestNum%d" , i+1 ); GetData(nRow, Recode.ACReqEndQuestOperator, "ACReqEndQuestOperator" ); //.// ÇÊ¿ä ¾ÆÀÌÅÛ for( i = 0 ; i < QUEST_CONDITION_ITEM_INFO::_DEF_CHECK_NUM; ++i ) GetData(nRow, Recode.ACReqItemCode[i], "ACReqItemCode%d", i+1 ); for( i = 0 ; i < QUEST_CONDITION_ITEM_INFO::_DEF_CHECK_NUM; ++i ) GetData(nRow, Recode.ACReqItemNum[i], "ACReqItemNum%d" , i+1 ); //.// ½ÀµæÁ¦ÇÑ for( i = 0 ; i < QUEST_CONDITION_QUEST_INFO::_DEF_CHECK_NUM; ++i ) GetData(nRow, Recode.ACResEndQuestCode[i], "ACResEndQuestCode%d", i+1 ); for( i = 0 ; i < QUEST_CONDITION_QUEST_INFO::_DEF_CHECK_NUM; ++i ) GetData(nRow, Recode.ACResEndQuestNum[i], "ACResEndQuestNum%d" , i+1 ); GetData(nRow, Recode.ACResEndQuestOperator, "ACResEndQuestOperator" ); GetData(nRow, Recode.ACResItemCode, "ACResItemCode" ); // ¾ø¾î¾ß ÇÏ´Â ¾ÆÀÌÅÛ : Á¦ÇÑ ¾ÆÀÌÅÛ GetData(nRow, Recode.ACResItemClass, "ACResItemClass"); // Á¦ÇÑ Å¬·¡½º ¾ÆÀÌÅÛ //.// ¼ö¶ô¾×¼Ç GetData(nRow, Recode.AAReqItemDelete, "AAReqItemDelete" ); // ½ÀµæÇÊ¿ä ¾ÆÀÌÅÛ »èÁ¦¿©ºÎ // ºÎ¿© ¾ÆÀÌÅÛ for( i = 0 ; i < QUEST_ACTION_ITEM_INFO::_DEF_CHECK_NUM; ++i ) GetData(nRow, Recode.AAGiveItemCode[i], "AAGiveItemCode%d", i+1 ); for( i = 0 ; i < QUEST_ACTION_ITEM_INFO::_DEF_CHECK_NUM; ++i ) //3 GetData(nRow, Recode.AAGiveItemNum[i], "AAGiveItemNum%d" , i+1 ); GetData(nRow, Recode.SummonMonsterCode, "SummonMonsterCode" ); //__NA1279_1281_090209_TIMELINE_QUEST_BASED_MISSION__ GetData(nRow, Recode.MapPortalCode, "MapPortalCode" ); // GetData(nRow, Recode.AAGiveExpiredTime, "AAGiveExpiredTime" ); // ŸÀÌ¸Ó //.// CompletionCondition( CC ) GetData(nRow, Recode.CCReqCharLV, "CCReqCharLV" ); GetData64(nRow, Recode.CCReqHiem, "CCReqHiem" ); for( i = 0 ; i < QUEST_CONDITION_MISSION_INFO::_MAX_CHECK_NUM; ++i ) //2 { GetData(nRow, Recode.CCReqMissionCode[i], "CCReqMissionCode%d", i+1 ); GetData(nRow, Recode.CCReqMissionNum[i], "CCReqMissionNum%d" , i+1 ); } #ifdef _NA_006607_20130402_ADD_QUESTTYPE for( i = 0; i < QUEST_CONDITION_MISSION_CLEAR_INFO::_MAX_CHECK_NUM; ++i) { GetData(nRow, Recode.CCReqEndMissionCode[i], "cc_ReqEnd_MissionCode%d", i+1); GetData(nRow, Recode.CCReqEndMissionNum[i], "cc_ReqEnd_MissionNum%d", i+1); } #endif // _NA_006607_20130402_ADD_QUESTTYPE #ifdef _DEVTAIYO_QUEST_TRIGGER_WORK // Æ®¸®°Å Á¶°Ç for( i = 0 ; i < QUEST_CONDITION_TRIGGER_INFO::_MAX_CHECK_NUM; ++i ) GetData(nRow, Recode.CCReqTrigger[i], "CCReqTrigger%d", i+1 ); #endif //.// ¿Ï·áµÈ Äù½ºÆ® Á¤º¸ for( i = 0 ; i < QUEST_CONDITION_QUEST_INFO::_MAX_CHECK_NUM; ++i ) GetData(nRow, Recode.CCReqEndQuestCode[i], "CCReqEndQuestCode%d", i+1 ); for( i = 0 ; i < QUEST_CONDITION_QUEST_INFO::_MAX_CHECK_NUM; ++i ) GetData(nRow, Recode.CCReqEndQuestNum[i], "CCReqEndQuestNum%d" , i+1 ); for( i = 0 ; i < QUEST_CONDITION_ITEM_INFO::_MAX_CHECK_NUM; ++i ) GetData(nRow, Recode.CCReqItemCode[i], "CCReqItemCode%d" , i+1 ); for( i = 0 ; i < QUEST_CONDITION_ITEM_INFO::_MAX_CHECK_NUM; ++i ) GetData(nRow, Recode.CCReqItemNum[i], "CCReqItemNum%d" , i+1 ); // ÇÊ¿ä ¾ÆÀÌÅÛ »èÁ¦ ¿©ºÎ GetData(nRow, Recode.CCReqItemDelete, "CCReqItemDelete" ); //¿ä±¸¸ó½ºÅÍKill for( i = 0 ; i < QUEST_CONDITION_KILLMONSTER_INFO::_MAX_CHECK_NUM; ++i ) { GetData(nRow, Recode.CCKillMonster[i], "CCKillMonster%d" , i+1 ); GetData(nRow, Recode.CCKillSetMonsterGrade[i], "CCKillSetMonsterGrade%d" , i+1 ); GetData(nRow, Recode.CCKillSetMonsterLevel[i], "CCKillSetMonsterLevel%d" , i+1 ); GetData(nRow, Recode.CCKillMonsterNum[i], "CCKillMonsterNum%d" , i+1 ); } for( i = 0 ; i < QUEST_CONDITION_AREA_INFO::_MAX_CHECK_NUM; ++i ) GetDataWZID(nRow, Recode.CCAreaSearchID[i], "CCAreaSearchID%d", i+1 ); #ifdef _DH_QUEST_ACCEPT_MESSAGE GetData(nRow, Recode.AAShowTextMsgCode, "AAShowTextMsgCode" ); #endif//_DH_QUEST_ACCEPT_MESSAGE // ¿Ï·á½Ã º¸¿©¾ßÇÒ ÅØ½ºÆ® ÄÚµå GetData(nRow, Recode.CAShowTextMsgCode, "CAShowTextMsgCode" ); //.// º¸»ó ÄÚµå for (i = eCHAR_NONE+1; i < eCHAR_TYPE_MAX; ++i) { DWORD reward_code = 0; if (GetSafeNumericData( __FUNCTION__, __LINE__, nRow, reward_code, "RIRewardCode%d", i) == false) { continue; } Recode.RIRewardCode[i] = reward_code; } //.// TextIfo GetData(nRow, Recode.TISCodeStart , "TISCodeStart" ); GetData(nRow, Recode.TISCodeProgr1, "TISCodeProgr1" ); GetData(nRow, Recode.TISCodeProgr2, "TISCodeProgr2" ); GetData(nRow, Recode.TISCodeCompl , "TISCodeCompl" ); GetData(nRow, Recode.TISCodeBrief , "TISCodeBrief" ); //.// Ž»ö Äù½ºÆ® ÀÓ¹« ÄÚµå for( i = 0 ; i < QUEST_CONDITION_AREA_INFO::_MAX_CHECK_NUM; ++i ) GetData(nRow, Recode.TISMissionText[i], "TISMissionText%d", i+1 ); if( FALSE == _Validating(Recode) ) { SUNLOG( eCRITICAL_LOG, "Script File Data Error, File[%s], Äù½ºÆ®[%s] ÇØ´ç Äù½ºÆ®¸¦ Àû¿ë ÇÏÁö ¾Ê½À´Ï´Ù.", GetCurFileName(), Recode.QuestName); continue; } #ifdef _NA_20100307_BETAKEY_SYSTEM GetData(nRow, Recode.BetaKey , "BetaKeyCode" ); #endif #ifdef _NA_003027_20111013_HONOR_SYSTEM GetData(nRow, Recode.DailyQuest, "DailyQuest"); GetData(nRow, Recode.SetBackTime, "SetBackTime"); GetData(nRow, Recode.SetBackDay, "SetBackDay"); GetData(nRow, Recode.SquadCode, "SquadCode"); GetData(nRow, Recode.ACFameCode, "ACReqFameCode"); GetData(nRow, Recode.ACFameRating, "ACReqFameRating"); GetData(nRow, Recode.ACReputeCode, "ACReqReputeCode"); GetData(nRow, Recode.ACReputeRating, "ACReqReputeRating"); #endif //_NA_003027_20111013_HONOR_SYSTEM _newQuestInfo(Recode); } // QuestInfo À籸Ãà : ¿¬ÇÕ Äù½ºÆ® 󸮸¦ À§ÇÑ ¸®ºôµå // (lst1024)(090408) ±âȹÂÊ »ç¿ëµÇ°í ÀÖÁö ¾ÊÀº ±â´É. #if !defined(_NA_004157_20120409_QUEST_BANDWITH_INCREASING) Rebuilding( *m_pQuestInfoManager ); #endif return TRUE; } QuestInfo* QuestScriptLoader::_newQuestInfo( const QuestScriptRecode& Recode ) { QuestInfo* pInfo = new QuestInfo; pInfo->SetQuestCode(Recode.QuestCode); m_pQuestInfoManager->AddQuestInfo(pInfo, Recode.QuestCode); strncpy( pInfo->m_pszQuestName, Recode.QuestName, MAX_QUEST_NAME_LENGTH ); #ifdef _YJ_RENEWAL_QUEST_UI_001265 pInfo->SetQtype( Recode.Qtype ); #endif //_YJ_RENEWAL_QUEST_UI_001265 pInfo->SetRewardMapCode( Recode.NPCCodeRewardLocate ); // (CHANGES) (100220) (WAVERIX) reference #9499 - problem point memcpy( pInfo->GetKillMonsterMapCodePtr(), Recode.CCKillMonsterLocate, sizeof(Recode.CCKillMonsterLocate)); pInfo->SetQNCode( Recode.QNCode ); pInfo->SetQLevel( Recode.QLevel ); pInfo->SetQDisplay( Recode.QDisplay ); pInfo->SetParentQuestCode( Recode.ParentQuestCode ); pInfo->SetQuestAcceptType( (eQUEST_ACCEPT_TYPE)Recode.QuestAcceptType ); if( eQUEST_ACCEPT_AUTO == pInfo->GetQuestAcceptType() ) m_pQuestInfoManager->AddAutoQuestInfo( pInfo, Recode.QuestCode); #ifdef _NA_20100307_BETAKEY_SYSTEM pInfo->SetBetaKey(Recode.BetaKey); #endif pInfo->SetACCode( Recode.ACCode ); pInfo->SetACType( Recode.ACType ); pInfo->SetQImgCode( Recode.QImgCode ); pInfo->SetGroupCode( Recode.QGroupCode ); pInfo->SetContinueQuestCode( Recode.ContinueQuestCode ); pInfo->SetNPCCode_Start( Recode.NPCCodeStart ); pInfo->SetNPCCode_Reward( Recode.NPCCodeReward ); // ŸÀÌ¸Ó pInfo->SetExpiredTime( Recode.AAGiveExpiredTime ); #ifdef _DH_QUEST_ACCEPT_MESSAGE pInfo->SetAccept_Text( Recode.AAShowTextMsgCode ); #endif//_DH_QUEST_ACCEPT_MESSAGE // ¿Ï·á½Ã º¸¿©¾ßÇÒ ÅØ½ºÆ® ÄÚµå pInfo->SetCompl_Text( Recode.CAShowTextMsgCode ); // º¸»ó ÄÚµå for( DWORD idx=eCHAR_BERSERKER ; idxSetRewardCode( (eCHAR_TYPE)idx, Recode.RIRewardCode[idx] ); // TextIfo // text pInfo->SetSCode_Start( Recode.TISCodeStart ); pInfo->SetSCode_Progr1( Recode.TISCodeProgr1 ); pInfo->SetSCode_Progr2( Recode.TISCodeProgr2 ); pInfo->SetSCode_Compl( Recode.TISCodeCompl ); pInfo->SetSCode_Brief( Recode.TISCodeBrief ); #ifdef _NA_003027_20111013_HONOR_SYSTEM pInfo->SetACMaxRepeatNum( Recode.ACMaxRepeatNum ); pInfo->SetDailyQuest( Recode.DailyQuest ); pInfo->SetSetBackTime( Recode.SetBackTime ); pInfo->SetSetBackDay( Recode.SetBackDay ); pInfo->SetSquadCode( Recode.SquadCode ); #endif //_NA_003027_20111013_HONOR_SYSTEM //.// Ž»ö Äù½ºÆ® ÀÓ¹« ÄÚµå for( int i = 0 ; i < QUEST_CONDITION_AREA_INFO::_MAX_CHECK_NUM; ++i ) pInfo->SetTISMissionText( i, Recode.TISMissionText[i] ); // AddAcceptCondition(Recode, pInfo); AddAcceptAction(Recode, pInfo); AddAbandonAction(Recode, pInfo); AddCompleteCondition(Recode, pInfo); AddCompleteAction(Recode, pInfo); #ifdef _NA_003027_20111013_HONOR_SYSTEM if( pInfo->GetSquadCode() > 0 ) m_pQuestInfoManager->AddGroupQuestCode(pInfo->GetSquadCode(), pInfo->GetQuestCode()); #endif //_NA_003027_20111013_HONOR_SYSTEM return pInfo; } BOOL QuestScriptLoader::AddAcceptCondition( const QuestScriptRecode& Recode, QuestInfo* pInfo ) { int nValueCount = 0; if( 0 != Recode.ACMaxRepeatNum ) { ADD_ACCEPTCONDITION( QUEST_CONDITION_REPEAT ); // 0 : ¹«ÇÑ ¹Ýº¹ pCondition->SetMaxRepeatNum( Recode.ACMaxRepeatNum ); // ½ÀµæÃÖ´ë¹Ýº¹È½¼ö } if( 0 != Recode.ACReqCharClassBit ) { ADD_ACCEPTCONDITION( QUEST_CONDITION_CHARCLASS ); // 0 : Ŭ·¡½º äũ ¾ÈÇÔ pCondition->SetCharClassBit( Recode.ACReqCharClassBit ); //½ÀµæÇÊ¿äij¸¯ÅÍÁ¾·ù } { ADD_ACCEPTCONDITION( QUEST_CONDITION_CHARLV ); pCondition->SetMinCharLV( Recode.ACReqMinCharLV ); //½ÀµæÇÊ¿äÃÖ¼Ò·¹º§ pCondition->SetMaxCharLV( Recode.ACReqMaxCharLV ); //½ÀµæÇÊ¿äÃÖ´ë·¹º§ } { ADD_ACCEPTCONDITION( QUEST_CONDITION_CHAO ); pCondition->SetChaoState( Recode.ACReqChaoState ); } // ÇÊ¿äÇÑ ¹Ì¼Ç Á¤º¸ nValueCount = GetValueCount(Recode.ACReqMissionCode,QUEST_CONDITION_MISSION_INFO::_MAX_CHECK_NUM); if( nValueCount ) { ADD_ACCEPTCONDITION( QUEST_CONDITION_MISSION ); for( int i = 0; i < QUEST_CONDITION_MISSION_INFO::_MAX_CHECK_NUM; ++i ) { pCondition->SetMissionCode(i,Recode.ACReqMissionCode[i]); pCondition->SetMissionNum(i,Recode.ACReqMissionNum[i]); } } // ÁøÇàÁßÀÎ Äù½ºÆ® Á¤º¸ nValueCount = GetValueCount(Recode.ACReqProgQuestCode,QUEST_CONDITION_QUEST_INFO::_DEF_CHECK_NUM); if( nValueCount ) { ADD_ACCEPTCONDITION( QUEST_CONDITION_QUEST ); pCondition->SetProgrQuest( TRUE ); //< ÁøÇàÁßÀÎ Äù½ºÆ® pCondition->SetNecessaryQuest( TRUE ); //< ÇÊ¿äÁ¶°Ç pCondition->SetQuestArrayCount( (BYTE)nValueCount ); pCondition->SetOperator( Recode.ACReqProgOperator ); for( int i = 0; i < QUEST_CONDITION_QUEST_INFO::_DEF_CHECK_NUM; ++i ) pCondition->SetQuestCode(i,Recode.ACReqProgQuestCode[i]); } // ¿Ï·áµÈ Äù½ºÆ® Á¤º¸ nValueCount = GetValueCount(Recode.ACReqEndQuestCode,QUEST_CONDITION_QUEST_INFO::_DEF_CHECK_NUM); if( nValueCount ) { ADD_ACCEPTCONDITION( QUEST_CONDITION_QUEST ); pCondition->SetProgrQuest( FALSE ); //< ¿Ï·áµÈ Äù½ºÆ® pCondition->SetNecessaryQuest( TRUE ); //< ÇÊ¿äÁ¶°Ç pCondition->SetQuestArrayCount( (BYTE)nValueCount ); pCondition->SetOperator( Recode.ACReqEndQuestOperator ); for( int i = 0; i < QUEST_CONDITION_QUEST_INFO::_DEF_CHECK_NUM; ++i ) { pCondition->SetQuestCode(i,Recode.ACReqEndQuestCode[i]); pCondition->SetQuestNum(i,Recode.ACReqEndQuestNum[i]); } } // ÇÊ¿ä ¾ÆÀÌÅÛ nValueCount = GetValueCount(Recode.ACReqItemCode,QUEST_CONDITION_ITEM_INFO::_DEF_CHECK_NUM); if( nValueCount ) { ADD_ACCEPTCONDITION( QUEST_CONDITION_ITEM ); pCondition->SetNecessaryItem( TRUE ); //< ÇÊ¿äÁ¶°Ç pCondition->SetItemArrayCount( (BYTE)nValueCount ); for( int i = 0; i < QUEST_CONDITION_ITEM_INFO::_DEF_CHECK_NUM; ++i ) { pCondition->SetItemCode(i,Recode.ACReqItemCode[i]); pCondition->SetItemNum(i,Recode.ACReqItemNum[i]); } } // ¿Ï·áµÈ Äù½ºÆ® Á¤º¸ nValueCount = GetValueCount(Recode.ACResEndQuestCode,QUEST_CONDITION_QUEST_INFO::_DEF_CHECK_NUM); if( nValueCount ) { ADD_ACCEPTCONDITION( QUEST_CONDITION_QUEST ); pCondition->SetProgrQuest( FALSE ); //< ¿Ï·áµÈ Äù½ºÆ® pCondition->SetNecessaryQuest( FALSE ); //< ¾ø¾î¾ßÇÏ´ÂÁ¶°Ç pCondition->SetQuestArrayCount( (BYTE)nValueCount ); pCondition->SetOperator( Recode.ACResEndQuestOperator ); for( int i = 0; i < QUEST_CONDITION_QUEST_INFO::_DEF_CHECK_NUM; ++i ) { pCondition->SetQuestCode( i, Recode.ACResEndQuestCode[i] ); pCondition->SetQuestNum( i, Recode.ACResEndQuestNum[i] ); } } // ¾ø¾î¾ß ÇÏ´Â ¾ÆÀÌÅÛ : Á¦ÇÑ ¾ÆÀÌÅÛ if( 0 != Recode.ACResItemCode ) { ADD_ACCEPTCONDITION( QUEST_CONDITION_ITEM ); pCondition->SetNecessaryItem( FALSE ); //< ¾ø¾î¾ß ÇÏ´Â ¾ÆÀÌÅÛ pCondition->SetItemCode( 0, Recode.ACResItemCode ); pCondition->SetItemArrayCount(1); pCondition->SetItemNum(0, 1); } // Á¦ÇÑ Å¬·¡½º ¾ÆÀÌÅÛ if( 0 != Recode.ACResItemClass ) { ADD_ACCEPTCONDITION( QUEST_CONDITION_CLASSITEM ); pCondition->SetCharClassLimit( Recode.ACResItemClass ); } //<¼ö¶ô Çൿ¿¡ ¾ÆÀÌÅÛ ºÎ¿©°¡ ÀÖÀ¸¸é ¼ö¶ô Á¶°Ç¿¡¼­ ¾ÆÀÌÅÛ °ø°£ üũ nValueCount = GetValueCount(Recode.AAGiveItemCode,QUEST_ACTION_ITEM_INFO::_DEF_CHECK_NUM); if( nValueCount ) { ADD_ACCEPTCONDITION( QUEST_CONDITION_ITEM_SPACE ); pCondition->SetItemArrayCount( (BYTE)nValueCount ); for( int i = 0; i < QUEST_ACTION_ITEM_INFO::_DEF_CHECK_NUM; ++i ) { pCondition->SetItemCode(i, Recode.AAGiveItemCode[i] ); pCondition->SetItemNum( i, Recode.AAGiveItemNum[i] ); } } if( QUEST_NPC_DIALOG_CREATE_PORTAL == Recode.ACReqNpcDialog && 0 != Recode.MapPortalCode ) { if(SAFE_NUMERIC_TYPECAST(DWORD, Recode.MapPortalCode, MAPCODE)) { ADD_ACCEPTCONDITION(QUEST_CONDITION_CREATE_PORTAL); pCondition->SetMapPortalCode((MAPCODE)Recode.MapPortalCode); } } #ifdef _NA_003027_20111013_HONOR_SYSTEM if (Recode.ACFameCode != 0 && Recode.ACFameRating != 0) { ADD_ACCEPTCONDITION(QUEST_CONDITION_HONOR_RATING); pCondition->SetHonorType(1); pCondition->SetHonorCode(Recode.ACFameCode); pCondition->SetHonorRating(Recode.ACFameRating); } if (Recode.ACReputeCode != 0 && Recode.ACReputeRating != 0) { ADD_ACCEPTCONDITION(QUEST_CONDITION_HONOR_RATING); pCondition->SetHonorType(2); pCondition->SetHonorCode(Recode.ACReputeCode); pCondition->SetHonorRating(Recode.ACReputeRating); } if( Recode.DailyQuest != 0 ) { ADD_ACCEPTCONDITION(QUEST_CONDITION_DAILY_QUEST); } #endif //_NA_003027_20111013_HONOR_SYSTEM return TRUE; } BOOL QuestScriptLoader::AddAcceptAction( const QuestScriptRecode& Recode, QuestInfo* pInfo ) { int nValueCount = 0; // ÇÊ¿ä ¾ÆÀÌÅÛ »èÁ¦ ¿©ºÎ ó¸® if( Recode.AAReqItemDelete ) { nValueCount = GetValueCount(Recode.ACReqItemCode,QUEST_CONDITION_ITEM_INFO::_DEF_CHECK_NUM); if( nValueCount ) { ADD_ACCEPTACTION( QUEST_ACTION_ITEM ); pAction->SetDelete(TRUE); pAction->SetItemArrayCount((BYTE)nValueCount); for( int i = 0; i < QUEST_CONDITION_ITEM_INFO::_DEF_CHECK_NUM; ++i ) { pAction->SetItemCode(i,Recode.ACReqItemCode[i]); pAction->SetItemNum(i,Recode.ACReqItemNum[i]); } } } // ºÎ¿© ¾ÆÀÌÅÛ nValueCount = GetValueCount(Recode.AAGiveItemCode,QUEST_ACTION_ITEM_INFO::_DEF_CHECK_NUM); if( nValueCount ) { ADD_ACCEPTACTION( QUEST_ACTION_ITEM ); pAction->SetDelete(FALSE); pAction->SetItemArrayCount( (BYTE)nValueCount ); for( int i = 0; i < QUEST_ACTION_ITEM_INFO::_DEF_CHECK_NUM; ++i ) { pAction->SetItemCode( i, Recode.AAGiveItemCode[i] ); pAction->SetItemNum( i, Recode.AAGiveItemNum[i] ); } } if( QUEST_NPC_DIALOG_SPAWN_MOB == Recode.ACReqNpcDialog) { if( 0 != Recode.SummonMonsterCode) { ADD_ACCEPTACTION( QUEST_ACTION_SPAWN_MONSTER ); pAction->SetSummonMonsterCode( Recode.SummonMonsterCode ); } } else if( QUEST_NPC_DIALOG_CREATE_PORTAL == Recode.ACReqNpcDialog ) { if( 0 != Recode.MapPortalCode) { if(SAFE_NUMERIC_TYPECAST(DWORD, Recode.MapPortalCode, MAPCODE)) { ADD_ACCEPTACTION(QUEST_ACTION_CREATE_PORTAL); pAction->SetMapPortalCode((MAPCODE)Recode.MapPortalCode); } } } #ifdef _NA_003027_20111013_HONOR_SYSTEM if( Recode.DailyQuest > 0 ) { ADD_ACCEPTACTION( QUEST_ACTION_DAILY_QUEST ); } #endif //_NA_003027_20111013_HONOR_SYSTEM return TRUE; } BOOL QuestScriptLoader::AddAbandonAction( const QuestScriptRecode& Recode, QuestInfo* pInfo ) { if( QUEST_NPC_DIALOG_SPAWN_MOB == Recode.ACReqNpcDialog ) { if( 0 != Recode.SummonMonsterCode ) { ADD_ABANDONACTION(QUEST_ACTION_SPAWN_MONSTER_ABANDON); } } else if( QUEST_NPC_DIALOG_CREATE_PORTAL == Recode.ACReqNpcDialog ) { if( 0 != Recode.MapPortalCode ) { if(SAFE_NUMERIC_TYPECAST(DWORD, Recode.MapPortalCode, MAPCODE)) { ADD_ABANDONACTION(QUEST_ACTION_CLOSE_PORTAL); } } } // Æ÷±â½Ã ºÎ¿©ÇÑ ¾ÆÀÌÅÛ »èÁ¦ int nValueCount = GetValueCount(Recode.AAGiveItemCode,QUEST_ACTION_ITEM_INFO::_DEF_CHECK_NUM); if( nValueCount ) { ADD_ABANDONACTION( QUEST_ACTION_ITEM ); pAction->SetDelete(TRUE); pAction->SetItemArrayCount( (BYTE)nValueCount ); for( int i = 0; i < QUEST_ACTION_ITEM_INFO::_DEF_CHECK_NUM; ++i ) { pAction->SetItemCode( i, Recode.AAGiveItemCode[i] ); pAction->SetItemNum( i, Recode.AAGiveItemNum[i] ); } } // äÁý¹° ÃʱâÈ­ { ADD_ABANDONACTION( QUEST_ACTION_DELETE_COLLECTIONID ); } #ifdef _NA_003027_20111013_HONOR_SYSTEM if( Recode.DailyQuest > 0 ) { ADD_ABANDONACTION( QUEST_ACTION_DAILY_QUEST_DELETE ); } #endif //_NA_003027_20111013_HONOR_SYSTEM return TRUE; } BOOL QuestScriptLoader::AddCompleteCondition( const QuestScriptRecode& Recode, QuestInfo* pInfo ) { { ADD_COMPLETECONDITION( QUEST_CONDITION_CHARLV ); pCondition->SetMinCharLV( Recode.CCReqCharLV ); pCondition->SetMaxCharLV( 0xFFFF ); } if( 0 != Recode.CCReqHiem ) { ADD_COMPLETECONDITION( QUEST_CONDITION_MONEY ); pCondition->SetNeedMoney( Recode.CCReqHiem ); } // ÇÊ¿äÇÑ ¹Ì¼Ç Á¤º¸ int nValueCount = GetValueCount(Recode.CCReqMissionCode,QUEST_CONDITION_MISSION_INFO::_MAX_CHECK_NUM); //2 if( nValueCount ) { ADD_COMPLETECONDITION( QUEST_CONDITION_MISSION ); // nValueCount ·çÇÁ Ƚ¼ö¸¦ ÇÏÁö ¾Ê´Â ÀÌÀ¯: ¸ÅÅ©·Î·Î »ý¼ºÇÑ ¸É¹ö´Â µû·Î ÃʱâÈ­ µÇÁö ¾Ê´Â´Ù. for( int i = 0; i < QUEST_CONDITION_MISSION_INFO::_MAX_CHECK_NUM; ++i ) { pCondition->SetMissionCode( i, Recode.CCReqMissionCode[i] ); pCondition->SetMissionNum( i, Recode.CCReqMissionNum[i] ); } } #ifdef _DEVTAIYO_QUEST_TRIGGER_WORK // Æ®¸®°Å Á¶°Ç //4 nValueCount = GetValueCount(Recode.CCReqTrigger,QUEST_CONDITION_TRIGGER_INFO::_MAX_CHECK_NUM); if( nValueCount ) { ADD_COMPLETECONDITION( QUEST_CONDITION_TRIGGER ); for( int i = 0; i < QUEST_CONDITION_TRIGGER_INFO::_MAX_CHECK_NUM; ++i ) pCondition->SetTriggerNCode( i, Recode.CCReqTrigger[i] ); } #endif // ¿Ï·áµÈ Äù½ºÆ® Á¤º¸ nValueCount = GetValueCount(Recode.CCReqEndQuestCode,QUEST_CONDITION_QUEST_INFO::_MAX_CHECK_NUM); if( nValueCount ) { ADD_COMPLETECONDITION( QUEST_CONDITION_QUEST ); pCondition->SetProgrQuest( FALSE ); //< ¿Ï·áµÈ Äù½ºÆ® pCondition->SetNecessaryQuest( TRUE ); //< ÇÊ¿äÁ¶°Ç pCondition->SetQuestArrayCount( (BYTE)nValueCount ); pCondition->SetOperator( 0 ); //< AND Á¶°Ç for( int i = 0; i < QUEST_CONDITION_QUEST_INFO::_MAX_CHECK_NUM; ++i ) { pCondition->SetQuestCode( i, Recode.CCReqEndQuestCode[i] ); pCondition->SetQuestNum( i, Recode.CCReqEndQuestNum[i] ); } } // ÇÊ¿ä ¾ÆÀÌÅÛ nValueCount = GetValueCount(Recode.CCReqItemCode,QUEST_CONDITION_ITEM_INFO::_MAX_CHECK_NUM); if( nValueCount ) { ADD_COMPLETECONDITION( QUEST_CONDITION_ITEM ); pCondition->SetNecessaryItem( TRUE ); //< ÇÊ¿äÁ¶°Ç pCondition->SetItemArrayCount( (BYTE)nValueCount ); for( int i = 0; i < QUEST_CONDITION_ITEM_INFO::_MAX_CHECK_NUM; ++i ) { pCondition->SetItemCode( i, Recode.CCReqItemCode[i] ); pCondition->SetItemNum( i, Recode.CCReqItemNum[i] ); } } // ¸ó½ºÅÍ Å³ ¼ö nValueCount = GetValueCount(Recode.CCKillMonster,Recode.CCKillSetMonsterGrade,QUEST_CONDITION_KILLMONSTER_INFO::_MAX_CHECK_NUM); if( nValueCount ) { ADD_COMPLETECONDITION( QUEST_CONDITION_KILLMONSTER ); for( int i = 0; i < QUEST_CONDITION_KILLMONSTER_INFO::_MAX_CHECK_NUM; ++i ) { const DWORD CCKillMonster = Recode.CCKillMonster[i]; #if defined(_SERVER) if( m_pEventRegister && 0 != CCKillMonster ) m_pEventRegister->RegisterNpcKillInfo(Recode.QuestCode, (MONSTERCODE)CCKillMonster); #endif pCondition->SetMonsterCode( i, CCKillMonster ); pCondition->SetMonsterGrade( i, Recode.CCKillSetMonsterGrade[i] ); pCondition->SetMonsterLevel( i, Recode.CCKillSetMonsterLevel[i] ); pCondition->SetMonsterNum( i, Recode.CCKillMonsterNum[i] ); } } // ¿µ¿ª ¿Ï·á Á¶°Ç nValueCount = GetValueCount(Recode.CCAreaSearchID,QUEST_CONDITION_AREA_INFO::_MAX_CHECK_NUM); if( nValueCount ) { ADD_COMPLETECONDITION( QUEST_CONDITION_AREA ); for( int i = 0; i < QUEST_CONDITION_AREA_INFO::_MAX_CHECK_NUM; ++i ) pCondition->SetAreaID( i, Recode.CCAreaSearchID[i] ); } #ifdef _NA_006607_20130402_ADD_QUESTTYPE // ¹Ì¼Ç ¿Ï·á nValueCount = GetValueCount(Recode.CCReqEndMissionCode, QUEST_CONDITION_MISSION_CLEAR_INFO::_MAX_CHECK_NUM); if(nValueCount) { ADD_COMPLETECONDITION(QUEST_CONDITION_MISSION_CLEAR); for(int i=0; i < QUEST_CONDITION_MISSION_CLEAR_INFO::_MAX_CHECK_NUM; ++i) { pCondition->SetMissionCode(i, Recode.CCReqEndMissionCode[i]); pCondition->SetMissionNum(i, Recode.CCReqEndMissionNum[i]); } } #endif return TRUE; } BOOL QuestScriptLoader::AddCompleteAction( const QuestScriptRecode& Recode, QuestInfo* pInfo ) { // ¿Ï·á Á¶°Ç ÇÊ¿ä ¾ÆÀÌÅÛ »èÁ¦ ¿©ºÎ ó¸® if( !Recode.CCReqItemDelete ) { int nValueCount = GetValueCount(Recode.CCReqItemCode,QUEST_CONDITION_ITEM_INFO::_MAX_CHECK_NUM); if( nValueCount ) { ADD_COMPLETEACTION( QUEST_ACTION_ITEM ); pAction->SetDelete(TRUE); pAction->SetItemArrayCount((BYTE)nValueCount); for( int i = 0; i < QUEST_CONDITION_ITEM_INFO::_MAX_CHECK_NUM; ++i ) { pAction->SetItemCode(i,Recode.CCReqItemCode[i]); pAction->SetItemNum(i,Recode.CCReqItemNum[i]); } } } // (WAVERIX) (081125) (BUG-FIX) üÀÎÁö¾÷½Ã ¿Ï·á ¸Þ½ÃÁö 5¹ø ³¯¾Æ°¡´Â ¹®Á¦ ¼öÁ¤ // - âÇö¾¾°¡ ÀÌ ¹®Á¦ È®ÀÎÈÄ ¼öÁ¤ÇßÁö¸¸, ±¹³»¿¡´Â Àû¿ëµÇÁö ¾Ê¾Ò´ø °ÍÀ̹ǷÎ, // ÇØ´ç ÀÛ¾÷ ¸ÅÅ©·Î Á¦°ÅÇÏ´Â Çü½ÄÀ¸·Î ¼öÁ¤ // - ÃßÈÄ ´Ù¸¥ changeup, ¶Ç´Â ÀüÁ÷ °è¿­ È®ÀåÀ» °¨¾ÈÇØ¼­ BOOL bAdd~ °è¿­, changeUpCode·Î º¯°æ eSPECIAL_QUEST_REWARD changeUpCode = (eSPECIAL_QUEST_REWARD)0; for( DWORD idx=eCHAR_BERSERKER ; idxChangeOfClassStep.Set( changeUpCode ); } // äÁý¹° ÃʱâÈ­ { ADD_COMPLETEACTION( QUEST_ACTION_DELETE_COLLECTIONID ); } #ifdef _NA_003027_20111013_HONOR_SYSTEM if( Recode.DailyQuest > 0 ) { ADD_COMPLETEACTION( QUEST_ACTION_DAILY_QUEST ); } #endif //_NA_003027_20111013_HONOR_SYSTEM return TRUE; } BOOL QuestScriptLoader::_Validating( const QuestScriptRecode& Recode ) { BOOL RetValue = TRUE; if( NULL != m_pQuestInfoManager->FindQuestInfo(Recode.QuestCode) ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "ÀÌ¹Ì Á¸ÀçÇÏ´Â Äù½ºÆ® ÄÚµå[%d] [%s]", Recode.QuestCode, Recode.QuestName); } for( int i = 0 ; i < QUEST_CONDITION_QUEST_INFO::_DEF_CHECK_NUM; ++i ) { BOOL bDiscontinuous = FALSE; if( 0 != Recode.ACReqEndQuestCode[i] ) { // ÄÚµå´Â Àִµ¥ °¹¼ö°¡ ¾øÀ½. if( 0 == Recode.ACReqEndQuestNum[i] ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] ACReqEndQuestCode%d[%d] ACReqEndQuestNum%d[%d] ", Recode.QuestName, i, Recode.ACReqEndQuestCode[i], i, Recode.ACReqEndQuestNum[i]); } // Áß°£¿¡ 0ÀÌ ³¢¿© ÀÖÀ½. if( FALSE != bDiscontinuous ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] ACReqEndQuestCode%d[%d] ACReqEndQuestCode%d[%d] ", Recode.QuestName, i-1, Recode.ACReqEndQuestCode[i-1], i, Recode.ACReqEndQuestCode[i]); } } else { bDiscontinuous = TRUE; // Äڵ尡 ¾ø´Âµ¥ °¹¼ö°¡ Á¸ÀçÇÔ. if( 0 != Recode.ACReqEndQuestNum[i] ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] ACReqEndQuestCode%d[%d] ACReqEndQuestNum%d[%d] ", Recode.QuestName, i, Recode.ACReqEndQuestCode[i], i, Recode.ACReqEndQuestNum[i]); } } } for( int i = 0 ; i < QUEST_CONDITION_ITEM_INFO::_DEF_CHECK_NUM; ++i ) { BOOL bDiscontinuous = FALSE; if( 0 != Recode.ACReqItemCode[i] ) { if( 0 == Recode.ACReqItemNum[i] ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] ACReqItemCode%d[%d] ACReqItemNum%d[%d] ", Recode.QuestName, i, Recode.ACReqItemCode[i], i, Recode.ACReqItemNum[i]); } if( FALSE != bDiscontinuous ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] ACReqItemCode%d[%d] ACReqItemCode%d[%d] ", Recode.QuestName, i-1, Recode.ACReqItemCode[i-1], i, Recode.ACReqItemCode[i]); } } else { bDiscontinuous = TRUE; if( 0 != Recode.ACReqItemNum[i] ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] ACReqItemCode%d[%d] ACReqItemNum%d[%d] ", Recode.QuestName, i, Recode.ACReqItemCode[i], i, Recode.ACReqItemNum[i]); } } } for( int i = 0 ; i < QUEST_CONDITION_QUEST_INFO::_DEF_CHECK_NUM; ++i ) { BOOL bDiscontinuous = FALSE; if( 0 != Recode.ACResEndQuestCode[i] ) { if( 0 == Recode.ACResEndQuestNum[i] ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] ACResEndQuestCode%d[%d] ACResEndQuestNum%d[%d] ", Recode.QuestName, i, Recode.ACResEndQuestCode[i], i, Recode.ACResEndQuestNum[i]); } if( FALSE != bDiscontinuous ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] ACResEndQuestCode%d[%d] ACResEndQuestCode%d[%d] ", Recode.QuestName, i-1, Recode.ACResEndQuestCode[i-1], i, Recode.ACResEndQuestCode[i]); } } else { bDiscontinuous = TRUE; if( 0 != Recode.ACResEndQuestNum[i] ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] ACResEndQuestCode%d[%d] ACResEndQuestNum%d[%d] ", Recode.QuestName, i, Recode.ACResEndQuestCode[i], i, Recode.ACResEndQuestNum[i]); } } } for( int i = 0 ; i < QUEST_ACTION_ITEM_INFO::_DEF_CHECK_NUM; ++i ) { BOOL bDiscontinuous = FALSE; if( 0 != Recode.AAGiveItemCode[i] ) { if( 0 == Recode.AAGiveItemNum[i] ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] AAGiveItemCode%d[%d] AAGiveItemNum%d[%d] ", Recode.QuestName, i, Recode.AAGiveItemCode[i], i, Recode.AAGiveItemNum[i]); } if( 0 != Recode.ParentQuestCode ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] ÀÚ½ÄÄù½ºÆ®´Â ºÎ¿©¾ÆÀÌÅÛÀÌ Á¸ÀçÇÏ¸é ¾ÈµÈ´Ù.", Recode.QuestName); } if( FALSE != bDiscontinuous ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] AAGiveItemCode%d[%d] AAGiveItemCode%d[%d] ", Recode.QuestName, i-1, Recode.AAGiveItemCode[i-1], i, Recode.AAGiveItemCode[i]); } } else { bDiscontinuous = TRUE; if( 0 != Recode.AAGiveItemNum[i] ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] AAGiveItemCode%d[%d] AAGiveItemNum%d[%d] ", Recode.QuestName, i, Recode.AAGiveItemCode[i], i, Recode.AAGiveItemNum[i]); } } } for( int i = 0 ; i < QUEST_CONDITION_MISSION_INFO::_MAX_CHECK_NUM ; ++i ) { BOOL bDiscontinuous = FALSE; if( 0 != Recode.CCReqMissionCode[i] ) { if( 0 == Recode.CCReqMissionNum[i] ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] CCReqMissionCode%d[%d] CCReqMissionNum%d[%d] ", Recode.QuestName, i, Recode.CCReqMissionCode[i], i, Recode.CCReqMissionNum[i]); } if( FALSE != bDiscontinuous ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] CCReqMissionCode%d[%d] CCReqMissionCode%d[%d] ", Recode.QuestName, i-1, Recode.CCReqMissionCode[i-1], i, Recode.CCReqMissionCode[i]); } } else { bDiscontinuous = TRUE; if( 0 != Recode.CCReqMissionNum[i] ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] CCReqMissionCode%d[%d] CCReqMissionNum%d[%d] ", Recode.QuestName, i, Recode.CCReqMissionCode[i], i, Recode.CCReqMissionNum[i]); } } } for( int i = 0 ; i < QUEST_CONDITION_QUEST_INFO::_MAX_CHECK_NUM; ++i ) { BOOL bDiscontinuous = FALSE; if( 0 != Recode.CCReqEndQuestCode[i] ) { if( 0 == Recode.CCReqEndQuestNum[i] ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] CCReqEndQuestCode%d[%d] CCReqEndQuestNum%d[%d] ", Recode.QuestName, i, Recode.CCReqEndQuestCode[i], i, Recode.CCReqEndQuestNum[i]); } if( FALSE != bDiscontinuous ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] CCReqEndQuestCode%d[%d] CCReqEndQuestCode%d[%d] ", Recode.QuestName, i-1, Recode.CCReqEndQuestCode[i-1], i, Recode.CCReqEndQuestCode[i]); } } else { bDiscontinuous = TRUE; if( 0 != Recode.CCReqEndQuestNum[i] ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] CCReqEndQuestCode%d[%d] CCReqEndQuestNum%d[%d] ", Recode.QuestName, i, Recode.CCReqEndQuestCode[i], i, Recode.CCReqEndQuestNum[i]); } } } for( int i = 0 ; i < QUEST_CONDITION_ITEM_INFO::_MAX_CHECK_NUM ; ++i ) { BOOL bDiscontinuous = FALSE; if( 0 != Recode.CCReqItemCode[i] ) { if( 0 == Recode.CCReqItemNum[i] ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] CCReqItemCode%d[%d] CCReqItemNum%d[%d] ", Recode.QuestName, i, Recode.CCReqItemCode[i], i, Recode.CCReqItemNum[i]); } if( FALSE != bDiscontinuous ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] CCReqItemCode%d[%d] CCReqItemCode%d[%d] ", Recode.QuestName, i-1, Recode.CCReqItemCode[i-1], i, Recode.CCReqItemCode[i]); } } else { bDiscontinuous = TRUE; if( 0 != Recode.CCReqItemNum[i] ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] CCReqItemCode%d[%d] CCReqItemNum%d[%d] ", Recode.QuestName, i, Recode.CCReqItemCode[i], i, Recode.CCReqItemNum[i]); } } } for( int i = 0 ; i < QUEST_CONDITION_KILLMONSTER_INFO::_MAX_CHECK_NUM ; ++i ) { BOOL bDiscontinuous = FALSE; if( 0 != Recode.CCKillMonster[i] || 0 != Recode.CCKillSetMonsterGrade[i] ) { if( 0 == Recode.CCKillMonsterNum[i] ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] CCKillMonsterNum%d[%d] " "CCKillMonster%d[%d] CCKillSetMonsterGrade%d[%d]", Recode.QuestName, i, Recode.CCKillMonsterNum[i], i, Recode.CCKillMonster[i], i, Recode.CCKillSetMonsterGrade[i]); } if( FALSE != bDiscontinuous ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] CCKillMonster%d[%d] CCKillMonster%d[%d] ", Recode.QuestName, i-1, Recode.CCKillMonster[i-1], i, Recode.CCKillMonster[i]); SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] CCKillSetMonsterGrade%d[%d] CCKillSetMonsterGrade%d[%d] ", Recode.QuestName, i-1, Recode.CCKillSetMonsterGrade[i-1], i, Recode.CCKillSetMonsterGrade[i]); } } else { bDiscontinuous = TRUE; if( 0 != Recode.CCKillMonsterNum[i] ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] CCKillMonsterNum%d[%d] " "CCKillMonster%d[%d] CCKillSetMonsterGrade%d[%d]", Recode.QuestName, i, Recode.CCKillMonsterNum[i], i, Recode.CCKillMonster[i], i, Recode.CCKillSetMonsterGrade[i]); } } } #ifdef _NA_006607_20130402_ADD_QUESTTYPE for( int i = 0 ; i < QUEST_CONDITION_MISSION_CLEAR_INFO::_MAX_CHECK_NUM ; ++i ) { BOOL bDiscontinuous = FALSE; if( 0 != Recode.CCReqEndMissionCode[i] ) { if( 0 == Recode.CCReqEndMissionNum[i] ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] CCReqEndMissionCode%d[%d] CCReqEndMissionNum%d[%d] ", Recode.QuestName, i, Recode.CCReqEndMissionCode[i], i, Recode.CCReqEndMissionNum[i]); } if( FALSE != bDiscontinuous ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] CCReqEndMissionCode%d[%d] CCReqEndMissionCode%d[%d] ", Recode.QuestName, i-1, Recode.CCReqEndMissionCode[i-1], i, Recode.CCReqEndMissionCode[i]); } } else { bDiscontinuous = TRUE; if( 0 != Recode.CCReqEndMissionNum[i] ) { RetValue = FALSE; SUNLOG( eCRITICAL_LOG, "Äù½ºÆ® ¿¡·¯[%s] CCReqEndMissionCode%d[%d] CCReqEndMissionNum%d[%d] ", Recode.QuestName, i, Recode.CCReqEndMissionCode[i], i, Recode.CCReqEndMissionNum[i]); } } } #endif //_NA_006607_20130402_ADD_QUESTTYPE return RetValue; } #if !defined(_NA_004157_20120409_QUEST_BANDWITH_INCREASING) VOID QuestScriptLoader::Rebuilding( QuestInfoManager& rMNGR ) { QUEST_INFO_HASH_ITR it, end(rMNGR.m_QuestInfoHash.end()); for( it = rMNGR.m_QuestInfoHash.begin() ; it != end ; ++it ) { QuestInfo* pInfo = (*it); if( 0 != pInfo->GetParentQuestCode() ) { QuestInfo* pParent = rMNGR.FindQuestInfo( pInfo->GetParentQuestCode() ); pParent->AddChildQuestInfo( pInfo ); if(pParent->GetParentQuestCode() != 0 ) SUNLOG( eCRITICAL_LOG, "Script File Data Error[QuestScript] Äù½ºÆ®[%d]ÀÇ ºÎ¸ð[%d]ÀÇ ParentQuestCode°¡ ¾øÀ½.", pInfo->GetParentQuestCode(), pParent->GetParentQuestCode() ); } } } #endif