#include "SunClientPrecompiledHeader.h" #include "trigger.h" #include #include #include #include "TriggerManEx.h" #include #include "IActionTriggerEx.h" #include "IConditionTriggerEx.h" #include #include #include #include "Map.h" #include "ConditionTriggers.h" #include "ActionTriggers.h" ////////////////////////////////////////////////////////////////////////// #define __TRIGGER_BEGIN_SWITCH sSWITCH(pTrigger->TriggerType()) #define __TRIGGER_DESTROY_CASE( className ) CASE( e##className ) className::Destroy((className*)pTrigger); #define __TRIGGER_CREATE_CASE( className ) CASE( e##className ) \ className * pNew = className::Create(); \ pNew->Set((className##_INFO*)pTrigger); \ pITrigger = pNew; #define __TRIGGER_EXCEPT( str ) DEFAULT ASSERT( !str ); #define __TRIGGER_END_SWITCH eSWITCH ////////////////////////////////////////////////////////////////////////// #include "ObjectManager.h" #include "MapObject.h" Trigger::Trigger(void) { } Trigger::~Trigger(void) { } VOID Trigger::_Action(BOOL bDone) { CONDITION_TRIGGER_LIST::iterator ConditionIter; for( ConditionIter = m_listConditionTrigger.begin(); ConditionIter != m_listConditionTrigger.end(); ++ConditionIter ) { ConditionTriggerEx* pCondition = static_cast(*ConditionIter); if(eCONDITION_CLICK_OBJECT == pCondition->TriggerType() ) { if(NULL == g_pMap) { assert(!"Trigger::_Action::(NULL == g_pMap)"); return; } int iCnt = g_pMap->GetTriggerMan()->m_vecTrgObj.size(); for(int i = 0; i < iCnt; i++) { sTRIGGER_OBJECT* pTO = g_pMap->GetTriggerMan()->m_vecTrgObj[i]; if(pTO->m_dwTriggerID == this->TriggerID()) { if(FALSE == pTO->m_bLoop) pTO->m_bActive = FALSE; } } } } ACTION_TRIGGER_LIST::iterator ActionIter; for( ActionIter = m_listActionTrigger.begin(); ActionIter != m_listActionTrigger.end(); ++ActionIter ) { ActionTriggerEx* pAction = static_cast(*ActionIter); if( pAction ) { pAction->SetbDone(bDone); pAction->OnAction(); } } m_state = ACTIONUPDATE_STATE; } VOID Trigger::OnMsg( TRIGGER_MSG * pMsg, BOOL bDone ) { // ActiveµÈ trigger¸¸ µé¾î ¿Â´Ù!!!!!! CONDITION_TRIGGER_LIST::iterator ConditionIter; for( ConditionIter = m_listConditionTrigger.begin(); ConditionIter != m_listConditionTrigger.end(); ++ConditionIter ) { ConditionTriggerEx* pCondition = static_cast(*ConditionIter); if( pCondition ) { // Á¶°ÇüũÈÄ ¸¸Á·Çϸé Àüü ¸¸Á· ¿©ºÎ üũ if( TRUE == pCondition->OnMsg( pMsg ) ) { if(m_pTriggerInfo->IsAlways() && pCondition->GetAlwaysAction()) { _Action(bDone); pCondition->SetAlwaysAction(FALSE); } } } } } VOID Trigger::_createCondition(ConditionInfo* pTrigger) { ConditionTriggerEx* pITrigger = NULL; __TRIGGER_BEGIN_SWITCH __TRIGGER_CREATE_CASE(CONDITION_ALWAYS) __TRIGGER_CREATE_CASE(CONDITION_COMPARE_SWITCH) __TRIGGER_CREATE_CASE(CONDITION_CLICK_OBJECT) __TRIGGER_CREATE_CASE(CONDITION_DAMAGE_OBJECT) __TRIGGER_CREATE_CASE(CONDITION_COUNT_NPCKILL) __TRIGGER_CREATE_CASE(CONDITION_PASS_TIME) __TRIGGER_CREATE_CASE(CONDITION_ENTER_AREA) __TRIGGER_CREATE_CASE(CONDITION_HAVE_ITEM) __TRIGGER_CREATE_CASE(CONDITION_MULTI_SWITCH) __TRIGGER_CREATE_CASE(CONDITION_MISSION_POINT) __TRIGGER_CREATE_CASE(CONDITION_COMPARE_VARIABLE) __TRIGGER_CREATE_CASE(CONDITION_QUEST_PROGRESS) __TRIGGER_CREATE_CASE(CONDITION_CHECK_CLASS_ID) __TRIGGER_CREATE_CASE(CONDITION_NPCKILL_FOR_UNITID) __TRIGGER_CREATE_CASE(CONDITION_LIVE_PARTY_MEMBER) __TRIGGER_CREATE_CASE(CONDITION_CHECK_OBJECT_HP) __TRIGGER_CREATE_CASE(CONDITION_DESTROY_OBJECT) __TRIGGER_CREATE_CASE(CONDITION_CHECK_OBJECTKIND_HP) __TRIGGER_CREATE_CASE(CONDITION_NPC_ENTER_AREA) //_NA_004777_20120428_ADD_COMPLETE_COLLECTION_TRIGGER __TRIGGER_CREATE_CASE(CONDITION_COMPLETE_COLLECTION) __TRIGGER_CREATE_CASE(CONDITION_SERVER_EVENT) __TRIGGER_CREATE_CASE(CONDITION_CHECK_TEAM) __TRIGGER_CREATE_CASE(CONDITION_COMPARE_SWITCH_EX) __TRIGGER_CREATE_CASE(CONDITION_MONSTER_ENTER_AREA) __TRIGGER_EXCEPT("µî·ÏµÇÁö ¾ÊÀº ÄÁµð¼Ç Æ®¸®°ÅÀÔ´Ï´Ù.1") __TRIGGER_END_SWITCH if (pITrigger != NULL) { pITrigger->Init(m_pTriggerManager, this); m_listConditionTrigger.push_back(pITrigger); } } VOID Trigger::_createAction( ActionInfo* pTrigger ) { ActionTriggerEx* pITrigger = NULL; __TRIGGER_BEGIN_SWITCH //__TRIGGER_CREATE_CASE( ACTION_CHANGE_SWITCH ) __TRIGGER_CREATE_CASE( ACTION_CHANGE_OBJECTANI ) __TRIGGER_CREATE_CASE( ACTION_CHANGE_PATHTILE ) __TRIGGER_CREATE_CASE( ACTION_CHANGE_OBJECTSTATE ) __TRIGGER_CREATE_CASE( ACTION_PLAY_EVENT ) __TRIGGER_CREATE_CASE( ACTION_SET_ISATTACK ) __TRIGGER_CREATE_CASE( ACTION_PORTAL_PLAYER ) __TRIGGER_CREATE_CASE( ACTION_SET_OBJECTTHRUST ) __TRIGGER_CREATE_CASE( ACTION_APPLY_DAMAGE ) __TRIGGER_CREATE_CASE( ACTION_REFLECT_DAMAGE ) __TRIGGER_CREATE_CASE( ACTION_CREATE_MONSTER ) __TRIGGER_CREATE_CASE( ACTION_DISPLAY_MSGBOX ) __TRIGGER_CREATE_CASE( ACTION_REMOVE_ITEM ) //__TRIGGER_CREATE_CASE( ACTION_PRESERVER ) __TRIGGER_CREATE_CASE( ACTION_REWARD_PLAYER ) __TRIGGER_CREATE_CASE( ACTION_CLEAR_MISSION ) __TRIGGER_CREATE_CASE( ACTION_PORTAL_RANDOM ) __TRIGGER_CREATE_CASE( ACTION_ACTIVATE_TRIGGER ) __TRIGGER_CREATE_CASE( ACTION_AREA_DAMAGE ) __TRIGGER_CREATE_CASE( ACTION_OPERATE_SWITCH ) __TRIGGER_CREATE_CASE( ACTION_ROAD_CONNECT ) __TRIGGER_CREATE_CASE( ACTION_CREATE_DIR_MONSTER ) __TRIGGER_CREATE_CASE( ACTION_CHANGE_LIGHT ) __TRIGGER_CREATE_CASE( ACTION_CHANGE_OBJECT_TYPE ) __TRIGGER_CREATE_CASE( ACTION_RANDOM_MAP_MOVE ) __TRIGGER_CREATE_CASE( ACTION_QUEST_SATISFACTION ) __TRIGGER_CREATE_CASE( ACTION_QUEST_GRANT ) __TRIGGER_CREATE_CASE( ACTION_QUEST_SETUP ) __TRIGGER_CREATE_CASE( ACTION_CREATE_MONSTER_GROUP ) __TRIGGER_CREATE_CASE( ACTION_SHOW_OR_HIDE_UNIT ) __TRIGGER_CREATE_CASE( ACTION_SHOW_GUIDE_MSGBOX ) __TRIGGER_CREATE_CASE( ACTION_SHOW_OR_HIDE_MSGBOX ) __TRIGGER_CREATE_CASE( ACTION_RANDOM_AREA_MOVE ) __TRIGGER_CREATE_CASE( ACTION_RANDOM_MONSTER_SPAWN ) __TRIGGER_CREATE_CASE( ACTION_TOWER_OF_TRIAL_SHOW_THE_FLOOR ) __TRIGGER_CREATE_CASE( ACTION_REMOVE_MONSTER ) __TRIGGER_CREATE_CASE( ACTION_ADD_EXP ) __TRIGGER_CREATE_CASE( ACTION_MONSTER_STAT_UP_OR_DOWN ) __TRIGGER_CREATE_CASE( ACTION_RANDUM_TRIGER_ON_OR_OFF ) __TRIGGER_CREATE_CASE( ACTION_PLAY_MUSIC ) __TRIGGER_CREATE_CASE( ACTION_DOWN_OBJETC_HP ) __TRIGGER_CREATE_CASE( ACTION_CHANGE_ATTACK_KIND ) __TRIGGER_CREATE_CASE( ACTION_ACTIVE_STAMP ) __TRIGGER_CREATE_CASE( ACTION_ATTACK_OBJECTKIND ) __TRIGGER_CREATE_CASE( ACTION_ACTIVE_SKILL_OBJECTKIND ) __TRIGGER_CREATE_CASE( ACTION_SHOW_MESSAGEBOX_OBJECTKIND ) __TRIGGER_CREATE_CASE( ACTION_SET_ATTACK_STATE_OBJECTKIND ) __TRIGGER_CREATE_CASE( ACTION_DESTROY_OBJECTKIND ) __TRIGGER_CREATE_CASE( ACTION_CREATE_MONSTER_LINKED_MAPOBJECT ) __TRIGGER_CREATE_CASE(ACTION_CONTROL_TIMER) __TRIGGER_CREATE_CASE(ACTION_DO_COMMAND) __TRIGGER_CREATE_CASE(ACTION_MOVE_CONTROL) __TRIGGER_CREATE_CASE(ACTION_ANIMATION_CONTROL) __TRIGGER_CREATE_CASE(ACTION_NPC_APPLY_DAMAGE) //_NA_004777_20120428_ADD_COMPLETE_COLLECTION_TRIGGER __TRIGGER_CREATE_CASE(ACTION_COMPLETE_COLLECTION) __TRIGGER_CREATE_CASE(ACTION_APPLY_HPMPSD) __TRIGGER_CREATE_CASE(ACTION_CHANGE_OBJECT_HP) __TRIGGER_CREATE_CASE(ACTION_CHANGE_RADAR_MAP) __TRIGGER_CREATE_CASE(ACTION_ATTACH_STATE_RANGE) __TRIGGER_CREATE_CASE(ACTION_CHANGE_PLAYER_HP) __TRIGGER_EXCEPT( "µî·ÏµÇÁö ¾ÊÀº ¾×¼Ç Æ®¸®°ÅÀÔ´Ï´Ù.1" ) __TRIGGER_END_SWITCH if (pITrigger != NULL) { pITrigger->Init( m_pTriggerManager, this ); m_listActionTrigger.push_back( pITrigger ); } } VOID Trigger::_destroyCondition( IConditionTrigger * pTrigger ) { __TRIGGER_BEGIN_SWITCH __TRIGGER_DESTROY_CASE( CONDITION_ALWAYS ) __TRIGGER_DESTROY_CASE( CONDITION_COMPARE_SWITCH ) __TRIGGER_DESTROY_CASE( CONDITION_CLICK_OBJECT ) __TRIGGER_DESTROY_CASE( CONDITION_DAMAGE_OBJECT ) __TRIGGER_DESTROY_CASE( CONDITION_COUNT_NPCKILL ) __TRIGGER_DESTROY_CASE( CONDITION_PASS_TIME ) __TRIGGER_DESTROY_CASE( CONDITION_ENTER_AREA ) __TRIGGER_DESTROY_CASE( CONDITION_HAVE_ITEM ) __TRIGGER_DESTROY_CASE( CONDITION_MULTI_SWITCH ) __TRIGGER_DESTROY_CASE( CONDITION_MISSION_POINT ) __TRIGGER_DESTROY_CASE( CONDITION_COMPARE_VARIABLE ) __TRIGGER_DESTROY_CASE( CONDITION_QUEST_PROGRESS ) __TRIGGER_DESTROY_CASE( CONDITION_CHECK_CLASS_ID ) __TRIGGER_DESTROY_CASE( CONDITION_NPCKILL_FOR_UNITID ) __TRIGGER_DESTROY_CASE( CONDITION_LIVE_PARTY_MEMBER ) __TRIGGER_DESTROY_CASE( CONDITION_CHECK_OBJECT_HP ) __TRIGGER_DESTROY_CASE( CONDITION_DESTROY_OBJECT ) __TRIGGER_DESTROY_CASE( CONDITION_CHECK_OBJECTKIND_HP ) __TRIGGER_DESTROY_CASE( CONDITION_NPC_ENTER_AREA ) //_NA_004777_20120428_ADD_COMPLETE_COLLECTION_TRIGGER __TRIGGER_DESTROY_CASE(CONDITION_COMPLETE_COLLECTION) __TRIGGER_DESTROY_CASE(CONDITION_SERVER_EVENT) __TRIGGER_DESTROY_CASE(CONDITION_CHECK_TEAM) __TRIGGER_DESTROY_CASE(CONDITION_COMPARE_SWITCH_EX) __TRIGGER_DESTROY_CASE(CONDITION_MONSTER_ENTER_AREA) __TRIGGER_EXCEPT( "µî·ÏµÇÁö ¾ÊÀº ÄÁµð¼Ç Æ®¸®°ÅÀÔ´Ï´Ù.2" ) __TRIGGER_END_SWITCH } VOID Trigger::_destroyAction( IActionTrigger * pTrigger ) { __TRIGGER_BEGIN_SWITCH // __TRIGGER_DESTROY_CASE( ACTION_CHANGE_SWITCH ) __TRIGGER_DESTROY_CASE( ACTION_CHANGE_OBJECTANI ) __TRIGGER_DESTROY_CASE( ACTION_CHANGE_PATHTILE ) __TRIGGER_DESTROY_CASE( ACTION_CHANGE_OBJECTSTATE ) __TRIGGER_DESTROY_CASE( ACTION_PLAY_EVENT ) __TRIGGER_DESTROY_CASE( ACTION_SET_ISATTACK ) __TRIGGER_DESTROY_CASE( ACTION_PORTAL_PLAYER ) __TRIGGER_DESTROY_CASE( ACTION_SET_OBJECTTHRUST ) __TRIGGER_DESTROY_CASE( ACTION_APPLY_DAMAGE ) __TRIGGER_DESTROY_CASE( ACTION_REFLECT_DAMAGE ) __TRIGGER_DESTROY_CASE( ACTION_CREATE_MONSTER ) __TRIGGER_DESTROY_CASE( ACTION_DISPLAY_MSGBOX ) __TRIGGER_DESTROY_CASE( ACTION_REMOVE_ITEM ) // __TRIGGER_DESTROY_CASE( ACTION_PRESERVER ) __TRIGGER_DESTROY_CASE( ACTION_REWARD_PLAYER ) __TRIGGER_DESTROY_CASE( ACTION_CLEAR_MISSION ) __TRIGGER_DESTROY_CASE( ACTION_PORTAL_RANDOM ) __TRIGGER_DESTROY_CASE( ACTION_ACTIVATE_TRIGGER ) __TRIGGER_DESTROY_CASE( ACTION_AREA_DAMAGE ) __TRIGGER_DESTROY_CASE( ACTION_OPERATE_SWITCH ) __TRIGGER_DESTROY_CASE( ACTION_ROAD_CONNECT ) __TRIGGER_DESTROY_CASE( ACTION_CREATE_DIR_MONSTER ) __TRIGGER_DESTROY_CASE( ACTION_CHANGE_LIGHT ) __TRIGGER_DESTROY_CASE( ACTION_CHANGE_OBJECT_TYPE ) __TRIGGER_DESTROY_CASE( ACTION_RANDOM_MAP_MOVE ) __TRIGGER_DESTROY_CASE( ACTION_QUEST_SATISFACTION ) __TRIGGER_DESTROY_CASE( ACTION_QUEST_GRANT ) __TRIGGER_DESTROY_CASE( ACTION_QUEST_SETUP ) __TRIGGER_DESTROY_CASE( ACTION_CREATE_MONSTER_GROUP ) __TRIGGER_DESTROY_CASE( ACTION_SHOW_OR_HIDE_UNIT ) __TRIGGER_DESTROY_CASE( ACTION_SHOW_GUIDE_MSGBOX ) __TRIGGER_DESTROY_CASE( ACTION_SHOW_OR_HIDE_MSGBOX ) __TRIGGER_DESTROY_CASE( ACTION_RANDOM_AREA_MOVE ) __TRIGGER_DESTROY_CASE( ACTION_RANDOM_MONSTER_SPAWN ) __TRIGGER_DESTROY_CASE( ACTION_TOWER_OF_TRIAL_SHOW_THE_FLOOR ) __TRIGGER_DESTROY_CASE( ACTION_REMOVE_MONSTER ) __TRIGGER_DESTROY_CASE( ACTION_ADD_EXP ) __TRIGGER_DESTROY_CASE( ACTION_MONSTER_STAT_UP_OR_DOWN ) __TRIGGER_DESTROY_CASE( ACTION_RANDUM_TRIGER_ON_OR_OFF ) __TRIGGER_DESTROY_CASE( ACTION_PLAY_MUSIC ) __TRIGGER_DESTROY_CASE( ACTION_DOWN_OBJETC_HP ) __TRIGGER_DESTROY_CASE( ACTION_CHANGE_ATTACK_KIND ) __TRIGGER_DESTROY_CASE( ACTION_ACTIVE_STAMP ) __TRIGGER_DESTROY_CASE( ACTION_ATTACK_OBJECTKIND ) __TRIGGER_DESTROY_CASE( ACTION_ACTIVE_SKILL_OBJECTKIND ) __TRIGGER_DESTROY_CASE( ACTION_SHOW_MESSAGEBOX_OBJECTKIND ) __TRIGGER_DESTROY_CASE( ACTION_SET_ATTACK_STATE_OBJECTKIND ) __TRIGGER_DESTROY_CASE( ACTION_DESTROY_OBJECTKIND ) __TRIGGER_DESTROY_CASE( ACTION_CREATE_MONSTER_LINKED_MAPOBJECT ) __TRIGGER_DESTROY_CASE(ACTION_CONTROL_TIMER) __TRIGGER_DESTROY_CASE(ACTION_DO_COMMAND) __TRIGGER_DESTROY_CASE(ACTION_MOVE_CONTROL) __TRIGGER_DESTROY_CASE(ACTION_ANIMATION_CONTROL) __TRIGGER_DESTROY_CASE( ACTION_NPC_APPLY_DAMAGE ) //_NA_004777_20120428_ADD_COMPLETE_COLLECTION_TRIGGER __TRIGGER_DESTROY_CASE(ACTION_COMPLETE_COLLECTION) __TRIGGER_DESTROY_CASE(ACTION_APPLY_HPMPSD) __TRIGGER_DESTROY_CASE(ACTION_CHANGE_OBJECT_HP) __TRIGGER_DESTROY_CASE(ACTION_CHANGE_RADAR_MAP) __TRIGGER_DESTROY_CASE(ACTION_ATTACH_STATE_RANGE) __TRIGGER_DESTROY_CASE(ACTION_CHANGE_PLAYER_HP) __TRIGGER_EXCEPT( "µî·ÏµÇÁö ¾ÊÀº ¾×¼Ç Æ®¸®°ÅÀÔ´Ï´Ù.2" ) __TRIGGER_END_SWITCH } VOID Trigger::_OnAction() { }