Files
2022-10-26 12:25:11 +08:00

204 lines
5.7 KiB
C++

#include "SunClientPrecompiledHeader.h"
#include "fieldscene.h"
#include "Map.h"
#include "BGMSoundInfoParser.h"
#include "MapInfoParser.h"
#include "Hero.h"
#include "interfacemanager.h"
#include "globalfunc.h"
#include "uiSystemMan/uiSystemMan.h"
#include "uiDominationTowerMan/uiDominationTowerMan.h"
#ifdef _NA_000000_20121210_REFACTORY_GAME_USER
#include "uiBattlezone2Man/uiBattlezone2Man.h"
#endif //_NA_000000_20121210_REFACTORY_GAME_USER
#include "ObjectManager.h"
#ifdef _NA_008679_20160202_REWORK_BATTLEGROUND
#include "ChaosSystem/ChaosSystemMan.h"
#include "ChaosSystem/uiChaosZoneBattle.h"
#include "ChaosSystem/ChaosSystemData.h"
#endif //_NA_008679_20160202_REWORK_BATTLEGROUND
FieldScene g_FieldScene;
FieldScene::FieldScene(void)
{
m_SceneType = SCENE_TYPE_FIELD;
}
FieldScene::~FieldScene(void)
{
}
BOOL FieldScene::Init( void )
{
m_bDeadFlag = FALSE;
m_bPendingResurrection = FALSE;
m_dwRenderTime = 0;
BattleScene::Init();
if ( g_pMap )
{
GlobalFunc::PLAY_BGM(MAP_TYPE_DEFAULT, g_pMap->GetCurrentFieldID(), eZONETYPE_FIELD );
}
uiDominationTowerMan* pDominationMan = GET_DIALOG_MANAGER(uiDominationTowerMan, UIMAN_DOMINATIONWAR_TOWER);
if (pDominationMan && false == pDominationMan->IsShowDominationObject())
{
#ifdef _NA_007115_20140313_MONDSCHIEN_RENEWAL
pDominationMan->set_domination_object_show(FALSE);
#else
Object* pObject = g_ObjectManager.GetObject(pDominationMan->GetDominationObject());
if (pObject)
{
pObject->SetShow(FALSE);
}
#endif // _NA_007115_20140313_MONDSCHIEN_RENEWAL
}
#ifdef _NA_000000_20121210_REFACTORY_GAME_USER
//이전씬
SCENE_TYPE postSceneType = GameFramework::GetPostSceneType();
if(postSceneType == SCENE_TYPE_MISSION )
{
uiBattlezone2Man* ui_battlezone2_manager_ = GET_DIALOG_MANAGER(uiBattlezone2Man, UIMAN_BATTLE_ZONE_MANAGER);
if (ui_battlezone2_manager_ != NULL)
{
BYTE isStateBattleZone2 = ui_battlezone2_manager_->battlezone_room_state();
//현재 배틀존 입장 상태가 로비 상태와 같다면
if(isStateBattleZone2 == uiBattlezone2Man::ROOM_STATE_LOBBY)
{
ui_battlezone2_manager_->ShowBattlezoneDialog(uiBattlezone2Man::BATTLEZONE2_DIALOG_LOBBY,true);
}
}
}
#endif //_NA_000000_20121210_REFACTORY_GAME_USER
#ifdef _NA_008679_20160202_REWORK_BATTLEGROUND
else if (postSceneType == SCENE_TYPE_BATTLEGROUND)
{
// 이전 씬이 전장이었으면 전장 창을 열어줌
uiChaosSystemMan* chaos_manager = GET_DIALOG_MANAGER(uiChaosSystemMan, UIMAN_CHAOS);
if (chaos_manager)
{
chaos_manager->ShowChaosZone(uiChaosZoneBattle::kDialog_ID, true);
keyMsg msg;
ZeroMemory(&msg,sizeof(msg));
msg.dwType = eDoType_ChaoszoneDialog;
msg.DoSomething = GlobalFunc::DoChaoszoneDialog;
g_KeyQueueManager.PushBack(msg);
}
// 재진입 안내창 플레그 켜줌
uiChaosZoneBattle* chaos_zone_battle = GET_CAST_DIALOG(uiChaosZoneBattle, IM_CHAOS_SYSTEM_MANAGER::CHAOSZONE_BATTLE);
if (chaos_zone_battle)
{
chaos_zone_battle->set_notice_re_enter_message(true);
}
}
#endif //_NA_008679_20160202_REWORK_BATTLEGROUND
return TRUE;
}
BOOL FieldScene::Process( DWORD dwTick )
{
BOOL bRet = BattleScene::Process( dwTick );
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,};
if(m_dwRenderTime < 10000)
{
m_dwRenderTime += dwTick;
const sMAPINFO * pMapInfo = MapInfoParser::Instance()->FindMapInfo(g_pMap->GetMapID());
if(pMapInfo)
{
g_InterfaceManager.GetInterfaceString(pMapInfo->dwFNCode, szMessage, INTERFACE_STRING_LENGTH);
g_InterfaceManager.ShowMissionAreaInfo(szMessage,10000, NULL);
}
}
int i;
for (i = 0; i < 10; ++i)
{
TCHAR szText[INTERFACE_STRING_LENGTH];
Sprintf(szText, _T("PRT%d"), i);
this->CheckHeroInShortcutBattleArea(szText, StrToWzID(szText));
Sprintf(szText, _T("OUT%d"), i);
this->CheckHeroInShortcutBattleArea(szText, StrToWzID(szText));
Sprintf(szText, _T("MP0%d"), i);
this->CheckHeroInShortcutBattleArea(szText, StrToWzID(szText));
}
if (g_pHero)
{
if (!m_bReadyDeadFlag && !m_bDeadFlag && g_pHero->IsDead())
{
//튜토리얼필드(에소드마을)에서는 사망시 팝업이 뜨지않는다
if (!g_pMap->IsEsodeMap())
{
m_bDeadFlag = TRUE;
this->verifyDeadMessageBox();
}
}
}
SendHeroSectorIndex();
return bRet;
}
//-------------------------------------------------------------------------------------------
/**
*/
void
FieldScene::Release( void )
{
BattleScene::Release();
this->m_bDeadFlag = FALSE;
}
//-------------------------------------------------------------------------------------------
/**
*/
void
FieldScene::verifyDeadMessageBox()
{
TCHAR szMessage[INTERFACE_STRING_LENGTH], szText[512];
TCHAR szTitle[INTERFACE_STRING_LENGTH];
TCHAR szSubject[INTERFACE_STRING_LENGTH];
ZeroMemory(szMessage, sizeof(szMessage));
ZeroMemory(szText, sizeof(szText));
g_InterfaceManager.GetInterfaceString(890, szMessage, INTERFACE_STRING_LENGTH);
g_InterfaceManager.GetInterfaceString(891, szText, 512);
StrCpy(szTitle, szText);
g_InterfaceManager.GetInterfaceString(892, szText, 512);
StrCpy(szSubject, szText);
uiSystemMan * pSystemMan = (uiSystemMan *)g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM);
if(pSystemMan)
{
//pSystemMan->Sys_Confirm( szMessage, GlobalFunc::DeadConfirmInField, szTitle, szSubject, 887, 900);
pSystemMan->Sys_ConfirmCloseButton(szMessage, GlobalFunc::DeadConfirmInField, szTitle, szSubject, 887, 900);
}
}
//-------------------------------------------------------------------------------------------
/**
*/
RELATIONKIND::TYPE FieldScene::GetRelationKindOfCharacter( Character* pObject, BOOL bForceEnemy )
{
return GameFunc::GetRelationKindOfPlayerInField( pObject, bForceEnemy );
}