771 lines
19 KiB
C++
771 lines
19 KiB
C++
#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<Object*>& 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<Monster*>(current_object);
|
|
npc_info = monster_object->GetMonsterInfo();
|
|
if (npc_info == NULL)
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
else if (current_object->IsKindOfObject(NPC_OBJECT))
|
|
{
|
|
NPC* npc_object = static_cast<NPC*>(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<Monster*>(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<NPC*>(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<Monster*>(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<BattleScene*>(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<uiHelpMan *>(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*> 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<Object*>::iterator object_list_itr = object_list.begin();
|
|
std::list<Object*>::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<Character*>(*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()
|
|
{
|
|
|
|
}
|