#include "SunClientPrecompiledHeader.h" #include "actiontriggers.h" #include "..\\..\\SolarTrigger\\actionInfo.h" #include "TriggerManEx.h" #include "Trigger.h" #include "Application.h" #include "ObjectManager.h" #include "MapObject.h" #include "Monster.h" #include "EventInfoParser.h" #include "GameFramework.h" #include "SceneBase.h" #include "BattleScene.h" #include "Map.h" #include "HeroActionInput.h" #include "Message.h" #include "InterfaceManager.h" #include "GlobalFunc.h" #include "MissionManager_Concrete.h" #include "QuestManager_Concrete.h" #include "uiHelpMan/uiHelpMan.h" #include "NPCInfoParser.h" #include "ResourceManager.h" #include "Character.h" #include "NPC.h" #include "uiRadarMan/uiRadarMan.h" void SearchObjectByType(BYTE object_type, WzID object_key_value, std::list& INOUT object_list) { Object* current_object = NULL; switch(object_type) { case NPCCODE_TYPE: { // NPC ÄÚµå·Î °Ë»ö Object_Map_Itr object_manager_itr = g_ObjectManager.GetBegin(); Object_Map_Itr object_manager_itr_end = g_ObjectManager.GetEnd(); BASE_NPCINFO* npc_info = NULL; for ( ; object_manager_itr != object_manager_itr_end; ++object_manager_itr) { current_object = (object_manager_itr->second); npc_info = NULL; if (current_object == NULL) { continue; } if (current_object->IsKindOfObject(MONSTER_OBJECT)) { Monster* monster_object = static_cast(current_object); npc_info = monster_object->GetMonsterInfo(); if (npc_info == NULL) { continue; } } else if (current_object->IsKindOfObject(NPC_OBJECT)) { NPC* npc_object = static_cast(current_object); npc_info = npc_object->GetMonsterInfo(); if (npc_info == NULL) { continue; } } else { continue; } // npc_info Á¤»ó if (npc_info->m_MonsterCode == object_key_value) { object_list.push_back(current_object); } } } break; case UNITID_TYPE: { // UNIT_ID·Î °Ë»ö Object_Map_Itr object_manager_itr = g_ObjectManager.GetBegin(); Object_Map_Itr object_manager_itr_end = g_ObjectManager.GetEnd(); DWORD unitid_for_trigger = 0; for ( ; object_manager_itr != object_manager_itr_end; ++object_manager_itr) { current_object = (object_manager_itr->second); unitid_for_trigger = 0; if (current_object == NULL) { continue; } if (current_object->IsKindOfObject(MONSTER_OBJECT)) { Monster* monster_object = static_cast(current_object); unitid_for_trigger = monster_object->unitid_for_trigger(); if (unitid_for_trigger == 0) { continue; } } else if (current_object->IsKindOfObject(NPC_OBJECT)) { NPC* npc_object = static_cast(current_object); unitid_for_trigger = npc_object->unitid_for_trigger(); if (unitid_for_trigger == 0) { continue; } } else { continue; } // unitid üũ if (unitid_for_trigger == object_key_value) { object_list.push_back(current_object); break; } } } break; case MAPNPC_TYPE: { // ¸Ê¿ÀºêÁ§Æ®(¿¡ ¿¬°áµÈ ¼³Ä¡Çü¸ó½ºÅÍ) °Ë»ö Object_Map_Itr object_manager_itr = g_ObjectManager.GetBegin(); Object_Map_Itr object_manager_itr_end = g_ObjectManager.GetEnd(); DWORD mapobject_key = 0; for ( ; object_manager_itr != object_manager_itr_end; ++object_manager_itr) { current_object = (object_manager_itr->second); mapobject_key = 0; if (current_object == NULL) { continue; } if (current_object->IsKindOfObject(MONSTER_OBJECT)) { Monster* monster_object = static_cast(current_object); mapobject_key = monster_object->GetMapObjectKey(); if (mapobject_key != object_key_value) { continue; } } else { continue; } object_list.push_back(current_object); break; } } break; } } __IMPL_POOL(ACTION_CHANGE_OBJECTANI) VOID ACTION_CHANGE_OBJECTANI::OnAction() { DWORD ObjectID = Get()->GetObjectID(); Object * pObject = (Object *)g_ObjectManager.GetObject(MAP_OBJECT_KEY + ObjectID); if (pObject) { if (pObject->IsKindOfObject(MAP_OBJECT)) { BYTE Direction = Get()->GetDirection(); BOOL bLoop = false; MapObject *pMapObject = (MapObject *)pObject; if( Direction == 2 ) // Á¤¹æÇâ ·çÇÁ { bLoop = true; } else if( Direction == 3 ) // ¿ª¹æÇâ ·çÇÁ { bLoop = true; } pMapObject->SetTriggerAnimation(Get()->GetWzAniID(), bLoop, m_bDone); pMapObject->SetNextState( STATE::TRIGGER_STATE, g_CurTime); } } else { assert(0); } } __IMPL_POOL(ACTION_CHANGE_PATHTILE) VOID ACTION_CHANGE_PATHTILE::OnAction() { int iAtt = Get()->GetAttribute(); int iTileID = Get()->GetTileID(); if (iAtt) { g_pMap->GetWorldBase()->x_pPathFinder->SetAttribute(iTileID, PTA_NO_WALK); } else { g_pMap->GetWorldBase()->x_pPathFinder->UnsetAttribute(iTileID, PTA_NO_WALK); } } __IMPL_POOL(ACTION_CHANGE_OBJECTSTATE) VOID ACTION_CHANGE_OBJECTSTATE::OnAction() { MapObject *pObject = (MapObject *)g_ObjectManager.GetObject( MAP_OBJECT_KEY + Get()->GetObjectID()); if (pObject) { //³ªÅ¸³² if (Get()->GetState() == 0) { pObject->SetShow(TRUE); } // »ç¶óÁü else { pObject->SetShow(FALSE); } } } __IMPL_POOL(ACTION_PLAY_EVENT) VOID ACTION_PLAY_EVENT::OnAction() { int iEventID = Get()->GetEventID(); if( g_pApplication && g_pApplication->IsFocus() ) { (static_cast(GameFramework::GetCurrentScene()))->SetEventScript(iEventID); } } __IMPL_POOL(ACTION_SET_ISATTACK) VOID ACTION_SET_ISATTACK::OnAction() { } __IMPL_POOL(ACTION_PORTAL_PLAYER) VOID ACTION_PORTAL_PLAYER::OnAction() { } __IMPL_POOL(ACTION_SET_OBJECTTHRUST) VOID ACTION_SET_OBJECTTHRUST::OnAction() { } __IMPL_POOL(ACTION_APPLY_DAMAGE) VOID ACTION_APPLY_DAMAGE::OnAction() { } __IMPL_POOL(ACTION_REFLECT_DAMAGE) VOID ACTION_REFLECT_DAMAGE::OnAction() { } __IMPL_POOL(ACTION_CREATE_MONSTER) VOID ACTION_CREATE_MONSTER::OnInit() { DWORD dwNPCCode = Get()->GetMonsterCode(); BASE_NPCINFO* pBNI = NPCInfoParser::Instance()->GetNPCInfo(dwNPCCode); if(pBNI) { ResourceManager::Instance()->PreLoadResource(pBNI->m_dwICode + ENGINE_RESOURCE_ID_OFFSET); } } VOID ACTION_CREATE_MONSTER::OnAction() { } __IMPL_POOL(ACTION_DISPLAY_MSGBOX) VOID ACTION_DISPLAY_MSGBOX::OnAction() { } __IMPL_POOL(ACTION_REMOVE_ITEM) VOID ACTION_REMOVE_ITEM::OnAction() { } __IMPL_POOL(ACTION_REWARD_PLAYER) VOID ACTION_REWARD_PLAYER::OnAction() { } __IMPL_POOL(ACTION_CLEAR_MISSION) VOID ACTION_CLEAR_MISSION::OnAction() { g_pQMGR_Real->Event( QUEST_EVENT_MISSION, NULL); } __IMPL_POOL(ACTION_PORTAL_RANDOM) VOID ACTION_PORTAL_RANDOM::OnAction() { } __IMPL_POOL(ACTION_ACTIVATE_TRIGGER) VOID ACTION_ACTIVATE_TRIGGER::OnAction() { WzID wiTrgID = this->Get()->GetWzTriggerID(); BYTE btFlag = this->Get()->GetFlag(); if(NULL == g_pMap) return; if(NULL == g_pMap->GetTriggerMan()) 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 && pTO->m_dwTriggerID == wiTrgID) { pTO->m_bActive = (!btFlag); } } } __IMPL_POOL(ACTION_AREA_DAMAGE) VOID ACTION_AREA_DAMAGE::OnAction() { } __IMPL_POOL(ACTION_OPERATE_SWITCH) VOID ACTION_OPERATE_SWITCH::OnAction() { } __IMPL_POOL( ACTION_ROAD_CONNECT ) // ±æ ¿¬°áÀ» ¼³Á¤/ÇØÁ¦ ÇÑ´Ù VOID ACTION_ROAD_CONNECT::OnAction() { if (g_pMap == NULL) { return; } int area_index = Get()->GetAreaIndex(); BYTE area_atribute = Get()->GetCanGo(); //°¥ ¼ö ÀÖ´Ù=0, ¾ø´Ù=1 WzSpecialArea* special_area = g_pMap->GetWorldBase()->GetSpecialAreaByIndex(area_index); if (special_area->m_wbvRegion.m_eBvType != BVT_PATH_TILE_INDEX) { return; } int tile_index; int tile_count = special_area->m_wbvRegion.m_BvPathTileIndex.m_nCount; for (int data_index = 0; data_index < tile_count; ++data_index) { tile_index = special_area->m_wbvRegion.m_BvPathTileIndex.m_pdwData[data_index]; if (area_atribute) { g_pMap->GetWorldBase()->x_pPathFinder->SetAttribute(tile_index, PTA_NO_WALK); } else { g_pMap->GetWorldBase()->x_pPathFinder->UnsetAttribute(tile_index, PTA_NO_WALK); } } } __IMPL_POOL(ACTION_CREATE_DIR_MONSTER) VOID ACTION_CREATE_DIR_MONSTER::OnInit() { DWORD dwNPCCode = Get()->GetMonsterCode(); BASE_NPCINFO* pBNI = NPCInfoParser::Instance()->GetNPCInfo(dwNPCCode); if(pBNI) { ResourceManager::Instance()->PreLoadResource(pBNI->m_dwICode + ENGINE_RESOURCE_ID_OFFSET); } } VOID ACTION_CREATE_DIR_MONSTER::OnAction() { } __IMPL_POOL(ACTION_CHANGE_LIGHT) VOID ACTION_CHANGE_LIGHT::OnAction() { int iLightIndex = Get()->GetLightIndex(); int iDelayTime = Get()->GetDelayTime(); BYTE iStatus = Get()->GetStatus(); if (g_pSunTerrain) { switch(iStatus) { // ²ô±â case 0: g_pSunRenderer->x_pManagerLight->TurnOnLight(iLightIndex,FALSE); break; // Äѱâ case 1: g_pSunRenderer->x_pManagerLight->TurnOnLight(iLightIndex,TRUE); break; // Åä±Û case 2: const St_LightInformation *pInfo = g_pSunRenderer->GetLightInfo(iLightIndex); if (pInfo) { if (pInfo->m_bValid) { g_pSunRenderer->x_pManagerLight->TurnOnLight( iLightIndex,FALSE); } else { g_pSunRenderer->x_pManagerLight->TurnOnLight( iLightIndex,TRUE); } } break; } } } __IMPL_POOL(ACTION_CHANGE_OBJECT_TYPE) VOID ACTION_CHANGE_OBJECT_TYPE::OnAction() { int iObjectID = Get()->GetObjectID(); int iTime = Get()->GetDelayTime(); int iType = Get()->GetObjectType(); Object *pObject = (Object *)g_ObjectManager.GetObject(iObjectID); if (pObject) { if (pObject->IsKindOfObject(MAP_OBJECT)) { MapObject *pMapObject = (MapObject *)pObject; pMapObject->SetDelayStateChange(iType, iTime); } } } __IMPL_POOL( ACTION_RANDOM_MAP_MOVE ) VOID ACTION_RANDOM_MAP_MOVE::OnAction() { } __IMPL_POOL( ACTION_QUEST_SATISFACTION ) VOID ACTION_QUEST_SATISFACTION::OnAction() { } __IMPL_POOL( ACTION_QUEST_GRANT ) VOID ACTION_QUEST_GRANT::OnAction() { } __IMPL_POOL( ACTION_QUEST_SETUP ) VOID ACTION_QUEST_SETUP::OnAction() { } __IMPL_POOL( ACTION_USE_CATEGORY ) VOID ACTION_USE_CATEGORY::OnAction() { } // ±âÁ¸¿¡ Á¸ÀçÇÏ´Â ¾×¼Ç Æ®¸®°Å //__IMPL_POOL( ACTION_CREATE_MONSTER ) __IMPL_POOL( ACTION_CREATE_MONSTER_GROUP ) VOID ACTION_CREATE_MONSTER_GROUP::OnAction() { } __IMPL_POOL( ACTION_SHOW_OR_HIDE_UNIT ) VOID ACTION_SHOW_OR_HIDE_UNIT::OnAction() { } __IMPL_POOL( ACTION_SHOW_GUIDE_MSGBOX ) VOID ACTION_SHOW_GUIDE_MSGBOX::OnAction() { if (m_bDone) { return; } int iHelpIndex = Get()->GetHelpIndex(); #ifdef _SCJ_REMOVE_ANNOUNCE_WINDOW #else uiHelpMan* helpMan = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_HELP)); if (helpMan) { helpMan->ShowHelpAnnounce(iHelpIndex,TRUE); } #endif //_SCJ_REMOVE_ANNOUNCE_WINDOW } __IMPL_POOL( ACTION_SHOW_OR_HIDE_MSGBOX ) VOID ACTION_SHOW_OR_HIDE_MSGBOX::OnAction() { int TextID = Get()->GetTextID(); BYTE byIsParty = Get()->GetIsParty(); int iDisplayWindow = Get()->GetDisplayWindow(); int iIsShow = Get()->GetIsShow(); GlobalFunc::DisplayMessageForTrigger(m_bDone, TextID, byIsParty, iDisplayWindow, iIsShow, 0); } __IMPL_POOL( ACTION_RANDOM_AREA_MOVE ) VOID ACTION_RANDOM_AREA_MOVE::OnAction() { } // ¸ó½ºÅÍ ·£´ý ½ºÆù __IMPL_POOL( ACTION_RANDOM_MONSTER_SPAWN ) VOID ACTION_RANDOM_MONSTER_SPAWN::OnInit() { DWORD dwNPCCode = Get()->GetMonsterID_1(); BASE_NPCINFO* pBNI = NPCInfoParser::Instance()->GetNPCInfo(dwNPCCode); if(pBNI) { ResourceManager::Instance()->PreLoadResource(pBNI->m_dwICode + ENGINE_RESOURCE_ID_OFFSET); } dwNPCCode = Get()->GetMonsterID_2(); pBNI = NPCInfoParser::Instance()->GetNPCInfo(dwNPCCode); if(pBNI) { ResourceManager::Instance()->PreLoadResource(pBNI->m_dwICode + ENGINE_RESOURCE_ID_OFFSET); } dwNPCCode = Get()->GetMonsterID_3(); pBNI = NPCInfoParser::Instance()->GetNPCInfo(dwNPCCode); if(pBNI) { ResourceManager::Instance()->PreLoadResource(pBNI->m_dwICode + ENGINE_RESOURCE_ID_OFFSET); } dwNPCCode = Get()->GetMonsterID_4(); pBNI = NPCInfoParser::Instance()->GetNPCInfo(dwNPCCode); if(pBNI) { ResourceManager::Instance()->PreLoadResource(pBNI->m_dwICode + ENGINE_RESOURCE_ID_OFFSET); } dwNPCCode = Get()->GetMonsterID_5(); pBNI = NPCInfoParser::Instance()->GetNPCInfo(dwNPCCode); if(pBNI) { ResourceManager::Instance()->PreLoadResource(pBNI->m_dwICode + ENGINE_RESOURCE_ID_OFFSET); } } VOID ACTION_RANDOM_MONSTER_SPAWN::OnAction() { } __IMPL_POOL( ACTION_TOWER_OF_TRIAL_SHOW_THE_FLOOR ) VOID ACTION_TOWER_OF_TRIAL_SHOW_THE_FLOOR::OnAction() { } ////////////////////////////////////////////////////////////////////////// __IMPL_POOL( ACTION_REMOVE_MONSTER ) VOID ACTION_REMOVE_MONSTER::OnAction() { } __IMPL_POOL( ACTION_ADD_EXP ) VOID ACTION_ADD_EXP::OnAction() { } ////////////////////////////////////////////////////////////////////////// __IMPL_POOL( ACTION_MONSTER_STAT_UP_OR_DOWN ) VOID ACTION_MONSTER_STAT_UP_OR_DOWN::OnAction() { } __IMPL_POOL( ACTION_RANDUM_TRIGER_ON_OR_OFF ) VOID ACTION_RANDUM_TRIGER_ON_OR_OFF::OnAction() { } ////////////////////////////////////////////////////////////////////////// __IMPL_POOL( ACTION_PLAY_MUSIC ) VOID ACTION_PLAY_MUSIC::OnAction() { } ////////////////////////////////////////////////////////////////////////// __IMPL_POOL( ACTION_DOWN_OBJETC_HP ) VOID ACTION_DOWN_OBJETC_HP::OnAction() { } __IMPL_POOL( ACTION_CHANGE_ATTACK_KIND ) VOID ACTION_CHANGE_ATTACK_KIND::OnAction() { DWORD ObjectKey = Get()->GetdwObjKey(); Object* pObj = g_ObjectManager.GetObject(MAP_OBJECT_KEY + ObjectKey); if(pObj && pObj->IsKindOfObject(MAP_OBJECT)) { MapObject* pMapObj = (MapObject*)pObj; bool bVal = true; if(0 == Get()->GetbtPossibility()) bVal = false; else if(1 == Get()->GetbtPossibility()) bVal = true; pMapObj->SetbCanHit(bVal); } } __IMPL_POOL( ACTION_ACTIVE_STAMP ) VOID ACTION_ACTIVE_STAMP::OnAction() { } __IMPL_POOL(ACTION_ATTACK_OBJECTKIND) VOID ACTION_ATTACK_OBJECTKIND::OnAction() { } __IMPL_POOL(ACTION_ACTIVE_SKILL_OBJECTKIND) VOID ACTION_ACTIVE_SKILL_OBJECTKIND::OnAction() { } __IMPL_POOL(ACTION_SHOW_MESSAGEBOX_OBJECTKIND) VOID ACTION_SHOW_MESSAGEBOX_OBJECTKIND::OnAction() { } __IMPL_POOL(ACTION_SET_ATTACK_STATE_OBJECTKIND) VOID ACTION_SET_ATTACK_STATE_OBJECTKIND::OnAction() { } __IMPL_POOL(ACTION_DESTROY_OBJECTKIND) VOID ACTION_DESTROY_OBJECTKIND::OnAction() { } // [5/5/2010 iforall] __IMPL_POOL(ACTION_CREATE_MONSTER_LINKED_MAPOBJECT) VOID ACTION_CREATE_MONSTER_LINKED_MAPOBJECT::OnAction() { } __IMPL_POOL(ACTION_CONTROL_TIMER) VOID ACTION_CONTROL_TIMER::OnAction() { } __IMPL_POOL( ACTION_DO_COMMAND ) VOID ACTION_DO_COMMAND::OnAction() { } __IMPL_POOL( ACTION_MOVE_CONTROL ) VOID ACTION_MOVE_CONTROL::OnAction() { } __IMPL_POOL( ACTION_ANIMATION_CONTROL ) VOID ACTION_ANIMATION_CONTROL::OnAction() { // ¿ÀºêÁ§Æ® ŸÀÔ¿¡ µû¸¥ °´Ã¼ ã±â std::list object_list; // °Ë»öÇÑ Character°´Ã¼ÀÇ Æ÷ÀÎÅ͸¦ ´ã¾ÆÁÙ ÄÁÅ×ÀÌ³Ê BYTE object_type = Get()->GetbyObjectType(); WzID object_key_value = Get()->GetdwObjectKey(); SearchObjectByType(object_type, object_key_value, object_list); if (object_list.empty() == true) { return; } // ¿ÀºêÁ§Æ® ¸®½ºÆ®¿¡ Æ®¸®°Å ¾Ö´Ï Á¦¾î Á¤º¸ ¼¼ÆÃ ¹× ¾Ö´Ï¸ÞÀÌ¼Ç Ç÷¹ÀÌ(¾×¼Ç/»óÅÂÀüȯ) std::list::iterator object_list_itr = object_list.begin(); std::list::iterator object_list_itr_end = object_list.end(); Character* character_object = NULL; PLAYER_ACTION action; action.ActionID = ACTION_TRIGGER_ANIMATION_CONTROL; action.TRIGGERANIMATIONCONTROL.start_animation_id = Get()->GetdwAnimationCode1(); action.TRIGGERANIMATIONCONTROL.start_animation_loop = Get()->GetbyLoop1(); action.TRIGGERANIMATIONCONTROL.next_animation_id = Get()->GetdwAnimationCode2(); action.TRIGGERANIMATIONCONTROL.next_animation_loop = Get()->GetbyLoop2(); for ( ; object_list_itr != object_list_itr_end; ++object_list_itr) { character_object = static_cast(*object_list_itr); if (character_object == NULL) { continue; } character_object->PutAction(&action); character_object->DoNextAction(); } } __IMPL_POOL( ACTION_NPC_APPLY_DAMAGE ) VOID ACTION_NPC_APPLY_DAMAGE::OnAction() { } //_NA_004777_20120428_ADD_COMPLETE_COLLECTION_TRIGGER //------------------------------------------------------------------------------ __IMPL_POOL( ACTION_COMPLETE_COLLECTION ) VOID ACTION_COMPLETE_COLLECTION::OnAction() { } __IMPL_POOL( ACTION_APPLY_HPMPSD ) VOID ACTION_APPLY_HPMPSD::OnAction() { } __IMPL_POOL( ACTION_CHANGE_OBJECT_HP ) VOID ACTION_CHANGE_OBJECT_HP::OnAction() { } __IMPL_POOL( ACTION_CHANGE_RADAR_MAP ) VOID ACTION_CHANGE_RADAR_MAP::OnAction() { } __IMPL_POOL( ACTION_ATTACH_STATE_RANGE ) VOID ACTION_ATTACH_STATE_RANGE::OnAction() { } __IMPL_POOL( ACTION_CHANGE_PLAYER_HP ) VOID ACTION_CHANGE_PLAYER_HP::OnAction() { }