#include "stdafx.h" #include "LoginStage.h" #include "LoginUIManager.h" #include "StageManager.h" #include "IntroStage.h" #include "UIMsgboxEvent.h" #include "UIID.h" #include "GameResourceManager.h" #include "ObjectManager.h" #include "worldmanager.h" #include "SceneManager.h" #include "StaticSceneNode.h" #include "CameraManager.h" #include "Application.h" #include "UIManager.h" #include "RenderSystem.h" #ifdef _GMTOOL #include "GMTool.h" #endif cLoginStage::cLoginStage() : mpLoginUIManager(0) , mLoadComplete(false) , mCheckLoginComplete(false) { } cLoginStage::~cLoginStage() { } /// ÁÖÀÇ»çÇ× : void cLoginStage::Init( cStageManager* pStageManager ) { mpStageManager = pStageManager; } /// ÁÖÀÇ»çÇ× : void cLoginStage::InitStage() { if( mInit ) return; if( GAMERESOURCEMAN->InitLogin() == false ) { assert(0); } /// UI mpLoginUIManager = new cLoginUIManager; mpLoginUIManager->Init(); #ifdef _GMTOOL if( THEAPP->InitGMTool() == false ) { assert(0); } if( GMTOOL->LoadData() == false ) { assert(0); } #endif mInit = true; } /// ÁÖÀÇ»çÇ× : void cLoginStage::Exit() { if( GAMERESOURCEMAN ) GAMERESOURCEMAN->LoadEnd(); SAFE_DELETE( mpLoginUIManager ); mpStageManager = 0; } /// ÁÖÀÇ»çÇ× : void cLoginStage::Open() { if( !mpStageManager ) return; mLoadComplete = false; mCheckLoginComplete = false; OBJECTMAN->ClearHeroData(); WORLDMAN->Close(); /// ui mpLoginUIManager->Open(); if( GAMERESOURCEMAN->LoadInitData2() == false ) { assert(0); } #ifndef NOCONNECT_SERVER /// ±âÁ¸ ¿¬°á Á¦°Å char* ip = THEAPP->GetIP(); if( NETWORK->PostConnect( ip, 14400 ) == false ) { /// ¿À·ù ÀÛ¾÷ Ãß°¡ ÇØ¾ßµÊ. assert(0); mpLoginUIManager->Close(); return; } /// ¿¬°á ´ë±ââ µî·Ï UIMAN->CreateMsgBox( eStage_Login, eMSGBOX_MODAL, eMBEVENT_CONNECT_LOGINSRV, eSKIN_NONE, GAMERESOURCEMAN->GetGameText( 0 ),// ¼­¹ö ¿¬°á ¸Þ¼¼Áö GAMERESOURCEMAN->GetGameText( 2 ) // ¾Ë¸² ); #else /// ³×Æ®Ÿp Á¢¼Ó ¾øÀÌ Àӽ÷ΠÄÑ´Â ºÎºÐ mpStageManager->ChangeStage( eStage_Select ); #endif } /// ÁÖÀÇ»çÇ× : void cLoginStage::Close() { if( GAMERESOURCEMAN ) GAMERESOURCEMAN->LoadEnd(); /// UI mpLoginUIManager->Close(); } /// ÁÖÀÇ»çÇ× : void cLoginStage::Process( unsigned long /*deltaTime*/, unsigned long accumTime ) { cIntroStage* intro = (cIntroStage*)STAGEMAN->GetStage( eStage_Intro ); if( intro && intro->IsProcessEnd() ) { unsigned int flag = GAMERESOURCEMAN->CheckInitData(); if( flag == eData_Error ) { assert(0); NiMessageBox( "Failed load gameData. Please reinstall client or patch.", "GameData Error" ); ::SendMessage( THEAPP->GetHWND(), WM_CLOSE, 0, 0 ); ::PostQuitMessage(0); return; } else if( flag == eData_End ) { mLoadComplete = true; GAMERESOURCEMAN->LoadEnd(); } } if( mLoadComplete == true && mCheckLoginComplete == true ) { /// ¸ð´Þ ó¸® UIMAN->SendEventTopMsgBox( true ); /// ½ºÅ×ÀÌÁö º¯°æ STAGEMAN->ChangeStage( eStage_Server ); } /// UI mpLoginUIManager->Process( accumTime ); } /// ÁÖÀÇ»çÇ× : void cLoginStage::NetworkMsgParser( unsigned long , char* pMsg, unsigned long /*length*/ ) { /// 070403 Ãß°¡ - °ûöÁß [·Î±×ÀÎ ÀÎÁõ ÀÀ´ä - ¼º°ø / ½ÇÆÐ] MSGROOT* pMsgRoot = (MSGROOT*)pMsg; switch( pMsgRoot->Category ) { case NM_USER: { switch( pMsgRoot->Protocol ) { case NM_USER_WEB_LAUNCHER_RES: { MSG_RES_WEB_LAUNCHER* pmsg = (MSG_RES_WEB_LAUNCHER*)pMsgRoot; switch( pmsg->ErrorCode ) { case ERROR_WEB_LAUNCHER_SUCCESS: { assert(0); } break; case ERROR_WEB_LAUNCHER_FAIL: // ÀÎÁõÄÚµå ¿¡·¯ { // ¼­¹ö·ÎºÎÅÍ ¿¬°áÀÌ ÇØÁ¦ µÇ¾úÀ» °æ¿ì... UIMAN->CreateMsgBox( eStage_Login, eMSGBOX_MODAL, eMBEVENT_CONNECT_DEAD, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 33 ), GAMERESOURCEMAN->GetGameText( 301 ) ); } break; } } break; case NM_USER_LOGIN_RES: { MSG_DIST_USERINFO* pMsgDistUserinfo = (MSG_DIST_USERINFO*)pMsgRoot; mpLoginUIManager->SetSendLoginFlag( false ); if( pMsgDistUserinfo->ErrorCode == ERROR_DIST_USERINFO_SUCCESS ) { /// ¼º°ø STAGEMAN->SetUserIdx( pMsgDistUserinfo->UserIdx ); STAGEMAN->SetLoginIdx( pMsgDistUserinfo->LoginIdx ); STAGEMAN->SetTwitterUid( pMsgDistUserinfo->twitterUid ); STAGEMAN->SetTwitterPwd( pMsgDistUserinfo->twitterPwd ); mCheckLoginComplete = true; if( mLoadComplete == true ) { /// ¸ð´Þ ó¸® UIMAN->SendEventTopMsgBox( true ); /// ½ºÅ×ÀÌÁö º¯°æ STAGEMAN->ChangeStage( eStage_Server ); } } else { /// ±âÁ¸ ¸ð´Þ Á¤º¸´Â Á¦°Å ÇÑ´Ù. UIMAN->SendEventTopMsgBox( false ); /// »õ·Î¿î ¸ð´Þ Á¤º¸¸¦ ¶ç¿î´Ù. LPCTSTR msg; switch( pMsgDistUserinfo->ErrorCode ) { case ERROR_DIST_USERINFO_ID_PWD: /// ½ÇÆÐ-ID/PWD msg = GAMERESOURCEMAN->GetGameText(5); break; case ERROR_DIST_USERINFO_SLEVEL: /// ½ÇÆÐ-º¸¾Èµî±Þ Àû¿ëÁß msg = GAMERESOURCEMAN->GetGameText(6); break; case ERROR_DIST_USERINFO_BLOCK: /// ½ÇÆÐ-BLOCK µÊ msg = GAMERESOURCEMAN->GetGameText(7); break; case ERROR_DIST_USERINFO_EXISTS: /// ½ÇÆÐ-Á¢¼ÓÁß msg = GAMERESOURCEMAN->GetGameText(8); break; case ERROR_DIST_USERINFO_IS_PIN: msg = GAMERESOURCEMAN->GetGameText(50); break; case ERROR_DIST_USERINFO_PIN: /// ½ÇÆÐ-PIN msg = GAMERESOURCEMAN->GetGameText(51); break; case ERROR_DIST_USERINFO_AGE: /// »ç¿ë ¿¬·ÉÁ¦ÇÑ msg = GAMERESOURCEMAN->GetGameText(185); break; case ERROR_DIST_USERINFO_FAIL: /// ½ÇÆÐ msg = GAMERESOURCEMAN->GetGameText(183); break; case ERROR_DIST_USERINFO_LOGIN_LIMIT: ///·Î±×ÀÎ Á¦ÇÑ msg = GAMERESOURCEMAN->GetGameText( 39 ); break; default: return; }; if( pMsgDistUserinfo->ErrorCode == ERROR_DIST_USERINFO_EXISTS ) { /// Áߺ¹ ·Î±×Àο¡ ´ëÇÑ È®ÀÎ UIMAN->CreateMsgBox( eStage_Login, eMSGBOX_MODAL, eMBEVENT_DOUBLE_LOGIN, eSKIN_OK, msg, GAMERESOURCEMAN->GetGameText( 2 ) // ¾Ë¸² ); } else if( pMsgDistUserinfo->ErrorCode == ERROR_DIST_USERINFO_SLEVEL ) { /// ÀÎÁõÀýÂ÷ ¿À·ù¿¡ ´ëÇÑ È®ÀÎ UIMAN->CreateMsgBox( eStage_Login, eMSGBOX_MODAL, eMBEVENT_PWD_FAIL, eSKIN_OK, msg, GAMERESOURCEMAN->GetGameText( 2 ) // ¾Ë¸² ); } else if( pMsgDistUserinfo->ErrorCode == ERROR_DIST_USERINFO_IS_PIN ) { UIMAN->CreateMsgBox( eStage_Login, eMSGBOX_MODAL, eMBEVENT_IS_PIN_FAIL, eSKIN_OK, msg, GAMERESOURCEMAN->GetGameText( 2 ) // ¾Ë¸² ); } else { UIMAN->CreateMsgBox( eStage_Login, eMSGBOX_MODAL, eMBEVENT_LOGIN_ERROR, eSKIN_OK, msg, GAMERESOURCEMAN->GetGameText( 2 ) // ¾Ë¸² ); } } } break; } } break; } } void cLoginStage::MsgBoxEventParser( unsigned int event, unsigned int result, void* /*exData*/ ) { switch( event ) { case eMBEVENT_LOGIN_ERROR: { mpLoginUIManager->FocusIDEdit(); } break; case eMBEVENT_IS_PIN_FAIL: case eMBEVENT_PWD_FAIL: { mpLoginUIManager->FocusPassEdit(); } break; case eMBEVENT_DOUBLE_LOGIN: { if( result == eMESSAGE_BUTTON_YES ) { /// ±âÁ¸ ¿¬°áÀ» Á¦°Å ÇÏ´Â ·çƾÀ» ³Ö´Â´Ù. } else { /// ±âÁ¸ ¿¬°áÀ» À¯ÁöÇÑ´Ù. mpLoginUIManager->FocusIDEdit(); } } break; case eMBEVENT_CONNECT_LOGINSRV: if( result == eMESSAGE_BUTTON_YES ) { // À¥·±Ãĸ¦ ÅëÇÑ ·Î±×ÀÎÀÌ ¾Æ´Ï¸é, if( THEAPP->GetAuthCode() == -1 ) { mpLoginUIManager->Visible(); } } break; case eMBEVENT_CONNECT_DEAD: case eMBEVENT_CONNECT_LOGINFAILE: { ::SendMessage( THEAPP->GetHWND(), WM_CLOSE, 0, 0 ); ::PostQuitMessage(0); } break; case eMBEVENT_VIDEO_CAPTURE: if( result == eMESSAGE_BUTTON_YES ) { if( RENDERSYS ) RENDERSYS->ToggleVideoCapture(); } break; } } void cLoginStage::CreateLoginMap() { /// µ¥ÀÌÅÍ µî·Ï cStaticSceneNodeParam param; /// ±âº» ¼Ó¼º ÀÎÀÚµéÀ» ¼³Á¤ param.mPathName = "./data/map/character_select_bg.nif"; param.mOccludeLevel = 3; param.mNoAttachLight = true; param.mFogApplied = false; param.mDisableAnimation = false; /// Àå¸éÀ» ÃʱâÈ­ SCENEMAN->Init( NiPoint3::ZERO, 100.0f, 100000.0f ); /// ³ëµå¸¦ »ý¼º cStaticSceneNode* n = SCENEMAN->CreateStatic( param ); if( n == 0 ) return; NiNode* orien = NiDynamicCast( NiNode, n->GetNiObj()->GetObjectByName("SelectCamera") ); if( orien == 0 ) { assert(0); return; } NiAVObject* child = 0; NiCamera* cam = 0; for(unsigned int i=0;iGetArrayCount();i++) { child = orien->GetAt(i); if( child && NiIsKindOf( NiCamera, child ) == true ) { cam = (NiCamera*)child; break; } } if( cam == 0 ) { assert(0); return; } CAMERAMAN->GetCurrent()->ChangeNiCamera( NiSmartPointerCast( NiCamera, cam->CreateDeepCopy() ) ); NiNode* node = CAMERAMAN->GetCurrent()->GetOrientNode(); node->SetWorldTranslate( orien->GetWorldTranslate() ); node->SetWorldRotate( orien->GetWorldRotate() ); node->SetWorldScale( orien->GetWorldScale() ); node->SetLocalTransform( orien->GetLocalTransform() ); }