#include "stdafx.h" #include #include "SGameRenewalLobby.h" #include "KDeviceManager.h" #include "KRenderDeviceDX.h" #include "KRenderObjectMesh.h" #include "KRenderObjectEtc.h" #include "KSeqModel.h" #include "KSeqSpeedTree.h" #include "KSeqAvatar.h" #include "KSeqAvatarEx.h" #include #include #include "KUIWndManager.h" #include "SGameManager.h" #include "SGameMessage.h" //#include "SGameMessageUI.h" #include "SGameOption.h" #include "SCobManager.h" #include "SSpeedTreeManager.h" #include "SRenderFlag.h" #include "SGameViewPort.h" #include "SGameSound.h" #include "SGameOption.h" #include "SItemDB.h" #include "SDefaultTextureResourceDB.h" #include "SStringDB.h" #include "SJobDB.h" #include #include "ErrorCode/ErrorCode.h" #include #include "SUISysMsgDefine.h" #include "TerrainMapEngine.h" #include "SGameSky.h" #include "SWorldLocationDB.h" #include #include #include "SDebug_Util.h" #include "SGameQJTV.h" #ifdef _TERRAIN_ENABLE_ #include "QJTVObj.h" #include "KUITextureManager.h" #include "SGameMilesSoundMgr.h" #include "shellapi.h" #endif # include "SGameCreditsScene.h" # include "SGameQjtvScene.h" # include "SGameImageScene.h" // sonador #2.1.2.10 중화권 로그인/로고 화면 갱신 #include "SGameCutScene.h" #include "SDebug_Util.h" #include "Slog.h" // 2010.04.22 - prodongi #include "SSelectedAvatarInfo.h" #include "SUICreateCharWnd.h" extern bool g_bUserCamMode; /// 2010.11.10 - prodongi //#ifdef _DEV //extern bool g_bDebugMode; //#endif extern HWND g_hWnd; extern const char * AUTH_VER; extern bool g_bServerListFocus; extern bool g_bServerListSeen; extern bool g_bCharListSeen; extern void SetOtherNavigate( int nWinID, const char * pURL, int nWidth, int nHeight ); extern void SetOtherNavigateMove( int nWinID, int nX, int nY ); extern void SetOtherNavigateClose( int nWinID ); extern K3DTexture* _getTexture(const char *texname, DWORD skin_color = 0); extern std::string GetCutTimeString( float f_Time, int nCutCnt/*1*/ ); extern void MsgSplit( const char* szMsg, std::vector& vecText, const wchar_t* lpDelimiter, bool bProcSpecialCharacter=false ); #ifndef WM_MOUSEWHEEL #define WM_MOUSEWHEEL 0x020A #define GET_WHEEL_DELTA_WPARAM(wParam) ((short)HIWORD(wParam)) #define WM_LMOUSE_CLICK S_USER+100 #define WM_RMOUSE_CLICK S_USER+101 #endif #define _BG_SPRITE_ENABLE_ namespace { const int cBlend_Width = 1024; const short c_WINK_TIME = 1000; //Face Ani const float c_fInitRotate = 90*K3D_PI/180.f; const int c_nMaxRace = 3; const float c_fAvatarScale = 1.0f; //#define CREATE_CHAR_EFFECT const char* c_lpCreateEffectFileName = "rcfx_lobby_select_fx.nx3"; const char* c_szLobbyGaiaNX3PropName = "rclobby_gaia.nx3"; const char* c_szLobbyDevaNX3PropName = "rclobby_deva.nx3"; const char* c_szLobbyAsuraNX3PropName = "rclobby_asura.nx3"; const char* c_szLobbyAsuraNX3EffectPropName = "lobby_asura_fire01.nx3"; const int c_nAsuraNX3EffectPos[c_nAsuraNX3EffectMaxPos][2] = { {62,182}, {72,182}, {59,235}, {73,236}, {459,202}, {491,204}, {532,202}, {453,262}, {490,266}, {538,263}, {551,246}, {591,248}, {594,278} }; //const char * szBG_Asura = "BG_Asura.jtv"; //const char * szBG_Deva = "BG_Deva.jtv"; //const char * szBG_Gaia = "BG_Gaia.jtv"; const int c_nGCLAN_GAIA = 0; const int c_nGCLAN_DEVA = 1; const int c_nGCLAN_ASURA = 2; const int c_nLOBBY_NUDE_SKIN = 5; const int c_nLOBBY_NUDE_HAIRCOLOR = 10; const char * pAsuraCreate[] = { "rclobby_asura_camera_zoomout.nx3", "rclobby_asura_camera_zoom.nx3", "rclobby_asura_camera_zooming.nx3", }; const char * pDevaCreate[] = { "rclobby_deva_camera_zoomout.nx3", "rclobby_deva_camera_zoom.nx3", "rclobby_deva_camera_zooming.nx3", }; const char * pGaiaCreate[] = { "rclobby_gaia_camera_zoomout.nx3", "rclobby_gaia_camera_zoom.nx3", "rclobby_gaia_camera_zooming.nx3", }; enum { LOBBY_CAMERA_ZOOMOUT, // Minimized state LOBBY_CAMERA_ZOOM, // Maximized state LOBBY_CAMERA_ZOOMING, // Zooming in LOBBY_CAMERA_CHANGE, // Transform LOBBY_CAMERA_ZOOMING_OUT, // Zooming out }; const char * pCamAniKey[] = { "zoomout", "zoom", "zooming", "change" }; const char* c_pBG_Set[] = { "gaia_BG_set.txt", "deva_BG_set.txt", "asura_BG_set.txt" }; const char * pMainAniKey[] = { "loby_init", //시작 "loby_login", //멈춤 계정 로그인 "loby_select", //캐릭터 선택 "loby_asura", //아수라 생성 "loby_deva", //데바 생성 "loby_gaia", //가이아 생성 }; const char* c_szPanel[] = { "rc_lobby_asura_panel.nx3", "rc_lobby_deva_panel.nx3", "rc_lobby_gaia_panel.nx3", }; const char* c_szDefault = "default"; const char* c_szDevaBGM = "06_Raksih.ogg"; const char* c_szGaiaBGM = "11_Horaizen_in_the_Sunset.ogg"; const char* c_szAsuraBGM = "16_Dusk_Kahthan.ogg"; const char* c_szDevaMusic = "sfx_forest_fine01.wav"; const char* c_szGaiaMusic = "sfx_forest_fine01.wav"; const char* c_szAsuraMusic = "sfx_sandstorm01.wav"; // sonador 10.3.1 로그인 화면 리뉴얼 #if defined( _TERRAIN_ENABLE_ ) const char* c_szLOBBY_SET[] = { "set_login01.txt","set_login02.txt","set_login03.txt" }; const char* c_szLOBBY_select = "set_select.txt"; const char* c_szLOBBY_LOGO[] = { "rcfx_evole_lobby_logo_star.nx3", "rcfx_evole_lobby_logo_move.nx3", "rcfx_evole_lobby_logo_loop.nx3" }; const char* c_szLOBBY_BG[] = { "logobak.jtv", }; #endif } #ifdef _TERRAIN_ENABLE_ bool _refreshTexture( K3DTexture* pTexture, BYTE* pBit, int nW, int nH ); #endif SGameRenewalLobby::SGameRenewalLobby( SGameManager* pGameMng , K3DRenderDeviceDX* pRenderDevice , SSoundManager* pSoundMng , KTextureManager* pTextureMng , KNX3Manager* pNX3Mng , SGameMilesSoundMgr* pMSoundMgr ) : SGame ( pGameMng, GAME_TYPE_LOGIN, pRenderDevice, pSoundMng, pTextureMng, pNX3Mng, pMSoundMgr ) , m_nAppointmentCharSelectIndex ( -1 ) , m_pNoticeReceiver ( NULL ) , m_bLobbyFogEnable ( false ) , m_colorLobbyFog ( c_colorLobbyFog ) , m_dwStartCharSelectListWaitTime ( 0 ) , m_nSelectedCharIndex ( -1 ) , m_nSelectSex ( SEX_FEMALE ) //, m_pDevaBG_QJTV ( NULL ) , m_nSelectRaceBGM ( -1 ) , m_nSelectRaceEffectSound ( -1 ) //, m_pAsuraBG_QJTV ( NULL ) //, m_pGaiaBG_QJTV ( NULL ) , m_BeforeCharListState ( GAMELOGIN_INIT_VALUE ) , m_bShowBG ( true ) , m_nOldMipBias ( 0 ) , m_nOldResourceQual ( 0 ) , m_pAsuraCamera ( NULL ) , m_pGaiaCamera ( NULL ) , m_pDevaCamera ( NULL ) , m_pDevaNX3Prop ( NULL ) , m_pAsuraNX3Prop ( NULL ) , m_pGaiaNX3Prop ( NULL ) , m_pDevaManAvatar ( NULL ) , m_pDevaWomanAvatar ( NULL ) , m_pGaiaManAvatar ( NULL ) , m_pGaiaWomanAvatar ( NULL ) , m_pAsuraManAvatar ( NULL ) , m_pAsuraWomanAvatar ( NULL ) , m_bCreateCharSuccess ( false ) , m_pCreateSuccessEffect ( NULL ) , m_bCreating ( false ) , m_vStrServerURLIndex ( -1 ) , m_pSceneMgr ( 0 ) , m_pCharaterBgSceneMgr ( 0 ) , m_BgScene ( 0 ) , m_Bg_Deva ( 0 ) , m_Bg_Asura ( 0 ) , m_Bg_Gaia ( 0 ) , m_BgScene_ClanSelect ( 0 ) , m_BgScene_ClanSelect_Asura ( 0 ) , m_BgScene_ClanSelect_Deva ( 0 ) , m_BgScene_ClanSelect_Gaia ( 0 ) , m_BgScene_ClanDesc_Asura ( 0 ) , m_BgScene_ClanDesc_Deva ( 0 ) , m_BgScene_ClanDesc_Gaia ( 0 ) , m_BgScene_Pane_Type02 ( 0 ) //, m_BgScene_Pane_Type02_2 ( 0 ) , m_BgScene_Pane_Type03 ( 0 ) , m_BgScene_Pane_Type03_right ( 0 ) //, m_LogoScene ( 0 ) , m_IntroScene ( 0 ) , m_IntroScene_Navislamia ( 0 ) , m_IntroScene_GoldenMonarch ( 0 ) , m_CreditsScene ( 0 ) , m_ClanSelect_Asura_RollOver ( false ) , m_ClanSelect_Deva_RollOver ( false ) , m_ClanSelect_Gaia_RollOver ( false ) , m_invalidPasswordCount ( 0 ) { // for( int n( 0 ); n < c_nMaxAvatarCount; ++n ) // m_pAvatarSelectCubes[ n ] = NULL; m_pManCube = NULL; m_pWomanCube = NULL; m_nNextGameType = GAME_TYPE_WORLD; m_nAuthType = ACCOUNT_AUTH_NORMAL; SetCurState( GAMELOGIN_UNINITIALIZED ); // 현재 상태 m_bUseCharacterSelect = false; XAddr addr; addr = XAddr( ENV().GetString( "auth_ip", "" ).c_str(), ENV().GetInt( "auth_port", 4500 ) ); //std::string notiveurl = GetLocaleOption().GetValueString("NOTICE_URL","http://launcher.rappelz.com/client_notice?ip=" ); std::string notiveurl = GetLocaleOption().GetValueString("NOTICE_URL","http://127.0.0.1/launcher/client_notice?ip=" ); // Fraun 7/12/2025 nullifying gala spyware XStringUtil::Replace( notiveurl, "#@auth_ip@#", addr.GetAddr() ); m_pNoticeReceiver = new CLobbyNoticeReceiver( notiveurl.c_str(), c_dwNoticeMaxSize ); m_pMainLight = NULL; //기본 라이트 m_pAuthConn = new XSyncStreamConnection( true, true ); m_pRecvQueue = IQueue::MakeQueue( 1*1024 ); m_bIsCan_ReqServerList = true; m_dwServerWaitTime = 0; m_dwServerWaitStartTime = 0; m_one_time_key = 0; m_dwMsgSendTime = 0; m_SelectServer_IP = "NotSelect"; m_SelectServer_PORT = -1; m_bIsAgree = false; m_strNewCharName = ""; m_nNewCameraIndex = LOBBY_CAMERA_ZOOMOUT; m_bRatateL = false; m_bRatateR = false; m_pBlackPanel = NULL; //Sky Color m_Sky_Color_Start = K3DColor( .3f, .5f, 1.0f, 1.0f ); m_Sky_Color_Mid = K3DColor( .4f, .6f, .8f, 1.0f ); m_Sky_Color_End = K3DColor( .7f, .7f, .7f, 1.0f ); m_fSkyColorMinHeight = 300; m_fSkyColorMaxHeight = 2000; m_fSkyMidHeightPercent = 0.5f; #ifdef _TERRAIN_ENABLE_ m_ptOldPoint.x = -1; m_ptOldPoint.y = -1; m_fDeltaX = 1.f; m_fDeltaY = 1.f; m_nDeltaX = 512; m_nDeltaY = 512; m_pChildViewPort[0] = NULL; for( int i(0); i ScreenWidth) adjustedWidth = ScreenWidth; bool bfullscreenmode = false; if( ::_stricmp(drawmode,"fullscreen") == 0) bfullscreenmode = true; if( strstr( filename, ".jtv" ) != NULL ) { rp::SGameQjtvScene* pQjtvScene = new rp::SGameQjtvScene( *m_pSceneMgr , pScenePlayer , scenename , filename , bgmname , bfullscreenmode ? K3DVector( ScreenWidth/2 - 1024/2, ScreenHeight/2 - 768/2, 1.0f ) : K3DVector( ScreenWidth/2 - adjustedWidth/2, 0.f, 1.0f ) , KColor( 0xff000000 ) , bfullscreenmode ? rp::SGameQjtvScene::FULL | rp::SGameQjtvScene::CENTER : 0 , 25 , true , 0 , bfullscreenmode ? K3DVector2(-1.f, -1.f) : K3DVector2(adjustedWidth, ScreenHeight) ); SDEBUGLOG("SGameRenewalLobby::LoadMovie JTV - %s, %s, %s", scenename,filename,drawmode); return pQjtvScene; } else if( strstr( filename, ".xml" ) != NULL ) { rp::SGameCutScene* pCutScene = new rp::SGameCutScene( *m_pSceneMgr , pScenePlayer , scenename , filename , bfullscreenmode ? K3DVector( 0.f, 0.f, 1.0f ) : K3DVector( ScreenWidth/2 - adjustedWidth/2, 0.f, 1.0f ) , bfullscreenmode ? K3DVector2(ScreenWidth, ScreenHeight) : K3DVector2(adjustedWidth, ScreenHeight) ); SDEBUGLOG("SGameRenewalLobby::LoadMovie XML - %s, %s, %s", scenename,filename,drawmode); return pCutScene; } // SGameLoad에서만 일단 기존 호환성 냅두지만, 차후 없애야 한다. xml로 대체 할수 있음. /* else if( strstr( filename, ".png" ) != NULL || strstr( filename, ".jpg" ) != NULL || strstr( filename, ".dds" ) != NULL) { rp::SGameImageScene* pImageScene = new rp::SGameImageScene( *m_pSceneMgr , pScenePlayer , scenename , filename , bfullscreenmode ? K3DVector( 0.f, 0.f, 1.0f ) : K3DVector( ScreenWidth/2 - adjustedWidth/2, 0.f, 1.0f ) , true , 0 , bfullscreenmode ? K3DVector2(ScreenWidth, ScreenHeight) : K3DVector2(adjustedWidth, ScreenHeight) ); pImageScene->registerActor( *( new rp::SGameSceneLifeActor( 4000, 1500, 1500 ) ) ); SDEBUGLOG("SGameLoad::LoadMovie IMAGE - %s, %s, %s", scenename,filename,drawmode); return pImageScene; }*/ SDEBUGLOG("SGameRenewalLobby::LoadMovie FAILED - %s, %s, %s", scenename,filename,drawmode); return NULL; } void SGameRenewalLobby::LoadModelFiles() { SDEBUGLOG("SGameRenewalLobby::LoadModelFiles() - begin"); assert( _CrtCheckMemory( ) ); // gpminsuk, 2009-01-22, 화면 Width와 Height변수 생성 int ScreenWidth = KUIWndManager::GetResolution().cx; int ScreenHeight = KUIWndManager::GetResolution().cy; K3DColor diff = K3DColor(145/255.f,145/255.f,145/255.f); K3DColor spec = K3DColor(110/255.f,110/255.f,110/255.f); K3DColor ambient = K3DColor(125/255.f,125/255.f,125/255.f); m_pMainLight = new K3DLight( diff, spec, ambient, K3DVector(3.f,-3.f,3.f) ); m_old_pos = K3DVector( 8.f, -100.f, 10.f ); m_new_pos = m_old_pos ; m_pMainLight->position.x = 8.f; m_pMainLight->position.y = -100.f; m_pMainLight->position.z = 10.f; m_pMainLight->direction = -m_pMainLight->position; Normalize(m_pMainLight->direction); m_pMainLight->attenuation1 = 0; m_pMainLight->range = 999999; float fog1 = 100000.0f; float fog2 = 1000000.0f; float fog3 = 100000.0f; float fog4 = 1000000.0f; #ifdef _TERRAIN_ENABLE_ m_dwFogMode = K3DRenderDevice::FOGM_LINEAR; #else m_dwFogMode = K3DRenderDevice::FOGM_NONE; #endif m_colorLobbyFog = KColor( 0xFFFFFFFF ); //Height Fog m_fHeightFog_Start = 0; m_fHeightFog_End = 1000; m_fLinearFog_Start = 0; m_fLinearFog_End = 1000; SDEBUGLOG("SGameRenewalLobby::LoadModelFiles() - 1"); NX3LoadPack loadpack; loadpack.Init(); #ifndef _TERRAIN_ENABLE_ m_pEffectModel = new KSeqModel; m_pEffectModel->AddAnimation( "default", "rc_lobby_birds.nx3", KNX3Manager::SEQTYPE_ALL, &loadpack ); m_nEffectIndex = 0; #endif m_dwBlackPanelTime = 0; m_pBlackPanel = new KSeqModel; for( int i(0); 3>i; i++ ) { m_pBlackPanel->AddAnimation( pMainAniKey[i+3], c_szPanel[i], KNX3Manager::SEQTYPE_ALL, &loadpack ); } // 아바타 생성 for( int n( 0 ); n < GameRule::nMaxCharactersPerAccount; ++n ) { m_Avatars[ n ].pAvatar = new SAvatarSelector(); m_Avatars[ n ].pAvatar->SetSelectAvatar(); } m_pNewAvatar = new SAvatarSelector(); m_pManCube = new K3DBoundRotCube( -2, 2, -2, 2, 0, 18 ); m_pWomanCube = new K3DBoundRotCube( -2, 2, -2, 2, 0, 18 ); #ifdef _TERRAIN_ENABLE_ KViewportStruct vp; KSize sizResolution; m_pBGLight = new K3DLight( K3DColor(0.8f,0.8f,0.8f), K3DColor(1.f,1.f,1.f), K3DColor(0.4f,0.4f,0.4f), K3DVector(-0.33f,-0.66f,-0.66f) ); m_pBGLight->position.x = 500000000*0.33f; m_pBGLight->position.y = 500000000*0.66f; m_pBGLight->position.z = 500000000*0.66f; m_pBGLight->attenuation1 = 0; m_pBGLight->range = 500000001.F; SDEBUGLOG("SGameRenewalLobby::LoadModelFiles() - 2"); K3DRenderDeviceDX* pGraphics = (K3DRenderDeviceDX*)KDeviceManagerDX::GetDeviceManager()->GetRenderDevice(); int nWidth = GetGameOption().GetResolution_Width(); int nHeight = GetGameOption().GetResolution_Height(); sizResolution = KSize(nWidth, nHeight); vp.Width = sizResolution.cx; vp.Height = sizResolution.cy; vp.X = vp.Y = 0; vp.MinZ = 0; vp.MaxZ = 1.0f; SGameViewPort* pChildViewPort = new SGameViewPort(); pChildViewPort->Initilaize( pGraphics, vp, 5.f, 60000.f ); pChildViewPort->SetFillColor( KColor( 0, 0, 0, 255 ) ); pChildViewPort->SetSceneAmbient( KColor(0,0,0,255) ); m_pChildViewPort[0] = pChildViewPort; SDEBUGLOG("SGameRenewalLobby::LoadModelFiles() - 3"); m_pBGCamera = new K3DCamera; m_pBGCamera->Reset(); m_pBGCamera->SetMinDistance( 5.f ); m_pSky = new SGameSky; m_pSky->Init( m_pRenderDevice ); m_pSky->SetCamera( m_pBGCamera ); SDEBUGLOG("SGameRenewalLobby::LoadModelFiles() - 4"); m_pSceneMgr = new rp::SGameSceneManager( *m_pGameMng , *KDeviceManager::GetDeviceManager() , *m_pTextureMng , *m_pSoundMng , *m_pMSoundMgr , *m_pNX3Mng , KFileManager::Instance() ); // prepare background movie scene std::string bgImageFile; // sonador #2.1.19.1 int adjustedWidth = ScreenHeight * 4 / 3; /// 2010.12.28 - prodongi if (adjustedWidth > ScreenWidth) adjustedWidth = ScreenWidth; int screenPosX = ScreenWidth/2 - adjustedWidth/2; // 로비 기본 배경 m_BgScene = new rp::SGameImageScene( *m_pSceneMgr , 0 , "lobby_bg_scene" , "lobby_login_image.jpg" , K3DVector( screenPosX, 0.f, 1.0f ) , true , m_pChildViewPort[ 0 ] , K3DVector2(adjustedWidth, ScreenHeight) ); /* m_BgScene = LoadMovie(0, "intro_scene", "intro_video.xml", "", "" ); */ m_pSceneMgr->addScene( *m_BgScene ); //캐릭터 선택시 배경. m_pCharaterBgSceneMgr = new rp::SGameSceneManager( *m_pGameMng , *KDeviceManager::GetDeviceManager() , *m_pTextureMng , *m_pSoundMng , *m_pMSoundMgr , *m_pNX3Mng , KFileManager::Instance() ); { m_Bg_Deva = new rp::SGameImageScene( *m_pCharaterBgSceneMgr , 0 , "bg_deva" , "Deva_001_wide.png" , K3DVector( 0, 0.f, 1.0f ) , true , m_pChildViewPort[ 0 ] ); m_pCharaterBgSceneMgr->addScene( *m_Bg_Deva ); } { m_Bg_Asura = new rp::SGameImageScene( *m_pCharaterBgSceneMgr , 0 , "bg_asura" , "asura_001_wide.png" , K3DVector( 0, 0.f, 1.0f ) , true , m_pChildViewPort[ 0 ] ); m_pCharaterBgSceneMgr->addScene( *m_Bg_Asura ); } { m_Bg_Gaia = new rp::SGameImageScene( *m_pCharaterBgSceneMgr , 0 , "bg_gaia" , "gaia_001_wide.png" , K3DVector( 0, 0.f, 1.0f ) , true , m_pChildViewPort[ 0 ] ); m_pCharaterBgSceneMgr->addScene( *m_Bg_Gaia ); } { m_BgScene_ClanSelect = new rp::SGameImageScene( *m_pSceneMgr , 0 , "clan_choice_main" , "clan_choice_main_image.jpg" , K3DVector( screenPosX, 0.f, 1.0f ) , true , m_pChildViewPort[ 0 ] , K3DVector2(adjustedWidth, ScreenHeight) ); m_pSceneMgr->addScene( *m_BgScene_ClanSelect ); /// 2012.08.08 정수로 계산 할 때, 오차가 발생되어서 실수로 수정함 /// 다른 곳이 보이지만, 일이 커질것 같아, 우선 문제 되는 곳만 수정함 - prodongi float adjustedWidthRatio = (float)adjustedWidth/1024.0f; m_BgScene_ClanSelect_Asura = new rp::SGameImageScene( *m_pSceneMgr , 0 , "clan_choice_main_image_over_asura" , "clan_choice_main_image_over_asura.jpg" , K3DVector( (float)screenPosX + 0.0f*adjustedWidthRatio , 0.f, 1.0f ) , true , m_pChildViewPort[ 0 ] , K3DVector2(400.0f*adjustedWidthRatio, ScreenHeight) ); m_pSceneMgr->addScene( *m_BgScene_ClanSelect_Asura ); m_BgScene_ClanSelect_Gaia = new rp::SGameImageScene( *m_pSceneMgr , 0 , "clan_choice_main_image_over_gaia" , "clan_choice_main_image_over_gaia.png" , K3DVector( (float)screenPosX + 294.0f*adjustedWidthRatio , 0.f, 1.0f ) , true , m_pChildViewPort[ 0 ] , K3DVector2(435.0f*adjustedWidthRatio, ScreenHeight) ); m_pSceneMgr->addScene( *m_BgScene_ClanSelect_Gaia ); m_BgScene_ClanSelect_Deva = new rp::SGameImageScene( *m_pSceneMgr , 0 , "clan_choice_main_image_over_deva" , "clan_choice_main_image_over_deva.jpg" , K3DVector( (float)screenPosX + 600.0f*adjustedWidthRatio , 0.f, 1.0f ) , true , m_pChildViewPort[ 0 ] , K3DVector2(424.0f*adjustedWidthRatio, ScreenHeight) ); m_pSceneMgr->addScene( *m_BgScene_ClanSelect_Deva ); } { m_BgScene_ClanDesc_Asura = new rp::SGameImageScene( *m_pSceneMgr , 0 , "clan_choice_image_asura" , "clan_choice_image_asura.jpg" , K3DVector( screenPosX, 0.f, 1.0f ) , true , m_pChildViewPort[ 0 ] , K3DVector2(adjustedWidth, ScreenHeight) ); m_pSceneMgr->addScene( *m_BgScene_ClanDesc_Asura ); m_BgScene_ClanDesc_Deva = new rp::SGameImageScene( *m_pSceneMgr , 0 , "clan_choice_image_deva" , "clan_choice_image_deva.jpg" , K3DVector( screenPosX, 0.f, 1.0f ) , true , m_pChildViewPort[ 0 ] , K3DVector2(adjustedWidth, ScreenHeight) ); m_pSceneMgr->addScene( *m_BgScene_ClanDesc_Deva ); m_BgScene_ClanDesc_Gaia = new rp::SGameImageScene( *m_pSceneMgr , 0 , "clan_choice_image_gaia" , "clan_choice_image_gaia.jpg" , K3DVector( screenPosX, 0.f, 1.0f ) , true , m_pChildViewPort[ 0 ] , K3DVector2(adjustedWidth, ScreenHeight) ); m_pSceneMgr->addScene( *m_BgScene_ClanDesc_Gaia ); } //_ASSERTE( _CrtCheckMemory( ) ); SDEBUGLOG("SGameRenewalLobby::LoadModelFiles() - 5"); m_IntroScene = LoadMovie( 0, "intro_scene", GetLocaleOption().GetValueString("GAME_INTRO","intro.xml"), GetLocaleOption().GetValueString("GAME_INTRO_BGM",""), GetLocaleOption().GetValueString("GAME_INTRO_DRAWMODE","") ); SDEBUGLOG("SGameRenewalLobby::LoadModelFiles() - 5.1"); /* if(m_IntroScene) m_pSceneMgr->addScene( *m_IntroScene );*/ SDEBUGLOG("SGameRenewalLobby::LoadModelFiles() - 5.2"); m_IntroScene_Navislamia = LoadMovie( 0, "intro_navislamia_scene", "epic6_navislamia_intro.xml", "", "" ); SDEBUGLOG("SGameRenewalLobby::LoadModelFiles() - 5.3"); /*if(m_IntroScene_Navislamia) m_pSceneMgr->addScene( *m_IntroScene_Navislamia );*/ SDEBUGLOG("SGameRenewalLobby::LoadModelFiles() - 5.4"); m_IntroScene_GoldenMonarch = LoadMovie( 0, "intro_golden_monarch_scene", "epic6_golden_monarch_intro.xml", "", "" ); /*if(m_IntroScene_GoldenMonarch) m_pSceneMgr->addScene( *m_IntroScene_GoldenMonarch );*/ // prepare credit scene m_CreditsScene = new rp::SGameCreditsScene( *m_pSceneMgr, 0, "LobbyCreditsScene", 124000, 2000, 500, 4000, 112000,screenPosX,adjustedWidth, ScreenHeight, m_pChildViewPort[ 0 ] ); SDEBUGLOG("SGameRenewalLobby::LoadModelFiles() - 5.5"); // prepare credit2 scene m_CreditsScene2 = new rp::SGameCreditsScene( *m_pSceneMgr, 0, "LobbyCreditsScene2", 124000, 2000, 500, 4000, 112000,screenPosX,adjustedWidth, ScreenHeight, m_pChildViewPort[ 0 ] ); m_CreditsScene3 = new rp::SGameCreditsScene( *m_pSceneMgr, 0, "LobbyCreditsScene3", 124000, 2000, 500, 4000, 112000,screenPosX,adjustedWidth, ScreenHeight, m_pChildViewPort[ 0 ] ); m_CreditsScene4 = new rp::SGameCreditsScene( *m_pSceneMgr, 0, "LobbyCreditsScene4", 124000, 2000, 500, 4000, 112000,screenPosX,adjustedWidth, ScreenHeight, m_pChildViewPort[ 0 ] ); assert( _CrtCheckMemory( ) ); SDEBUGLOG("SGameRenewalLobby::LoadModelFiles() - 6"); // m_BgScene_Pane_Type02 = new rp::SGameImageScene( *m_pSceneMgr , 0 , "pane_Type02" , "login_type02_pane.png" , K3DVector( screenPosX, 0.f, 1.0f ) , true , m_pChildViewPort[ 0 ] , K3DVector2(adjustedWidth, ScreenHeight) ); m_pSceneMgr->addScene( *m_BgScene_Pane_Type02 ); //Pane03 은 캐릭터 위에 떠야 함으로 Viewport 를 NULL로 일단 설정한다. sfreer 2009. 06.29 m_BgScene_Pane_Type03 = new rp::SGameImageScene( *m_pSceneMgr , 0 , "pane_Type03" , "login_type03_pane.png" , K3DVector( 0.f, 0.f, 1.0f ) , true , NULL , K3DVector2(adjustedWidth, ScreenHeight) ); m_pSceneMgr->addScene( *m_BgScene_Pane_Type03 ); m_BgScene_Pane_Type03_right = new rp::SGameImageScene( *m_pSceneMgr , 0 , "pane_Type03add" , "login_type03_pane_right_add.png" , K3DVector( adjustedWidth, 0.f, 1.0f ) , true , NULL , K3DVector2(341*ScreenHeight/768, ScreenHeight) ); m_pSceneMgr->addScene( *m_BgScene_Pane_Type03_right ); SDEBUGLOG("SGameRenewalLobby::LoadModelFiles() - 7"); m_bTerrainFogEnable = false; m_colorTerrainFog = KColor( 0xFFFFFFFF ); m_dwTerrainFogMode = K3DRenderDevice::FOGM_NONE; //Height Fog m_fTerrainHeightFog_Start = 0; m_fTerrainHeightFog_End = 1000; m_fTerrainLinearFog_Start = 0; m_fTerrainLinearFog_End = 1000; //최초만 랜덤, 그 후는 순차 int nOldTheme = GetGameOption().GetLobbyTheme(); int nRand = 0; if( nOldTheme < 0 ) { nRand = rand()%3; } else { nRand = nOldTheme + 1; if( nRand > 2 ) nRand = 0; } if( ENV().IsExist( "lobby_num" ) ) { nRand = ENV().GetInt( "lobby_num", 0 ); } SDEBUGLOG("SGameRenewalLobby::LoadModelFiles() - 8"); _oprint( "LobbySetforGameRes : %d - %s\n", nRand, c_szLOBBY_SET[nRand] ); GetGameOption().SetLobbyTheme( nRand ); GetGameOption().SetOptionData( SGAME_OPT_DATA::MODE_ENVIRONMENT ); //KTextureManager::GetManager()->SetMipMapBiasLevel( 0 ); //로비에서는 택스처를 무조건 최고사양으로 생성하게 한다. //NX3LoadPack::SetTextureLevel( 0 ); m_nOldResourceQual = NX3LoadPack::GetTextureLevel();//GetGameOption().GetResourceQuality(); m_nOldMipBias = KTextureManager::GetManager()->GetMipMapBiasLevel(); //GetGameOption().GetTextureMipBias(); KTextureManager::GetManager()->SetMipMapBiasLevel( 0 ); //로비에서는 택스처를 무조건 최고사양으로 생성하게 한다. NX3LoadPack::SetTextureLevel( 0 ); m_pBGCamera->SetTargetPos( 0.000000, 0.000000, 0.000000 ); m_pBGCamera->SetCamPos( 177.693420f, 16.249392f, 23.705996f ); //m_pSky->SetPosition( 6700, 6700, fHeight ); #endif //_TERRAIN_ENABLE_ assert( _CrtCheckMemory( ) ); SDEBUGLOG("SGameRenewalLobby::LoadModelFiles() - end"); } void SGameRenewalLobby::RemoveModelFiles() { SDEBUGLOG("SGameRenewalLobby::RemoveModelFiles() - fucntion begin"); SAFE_DELETE( m_pSceneMgr ); SDEBUGLOG("\tSAFE_DELETE( m_pSceneMgr )"); SAFE_DELETE( m_pCharaterBgSceneMgr ); SDEBUGLOG("\tSAFE_DELETE( m_pCharaterBgSceneMgr )"); #ifdef _TERRAIN_ENABLE_ //SAFE_DELETE( m_pBG_QJTVObj ); //SAFE_DELETE( m_pQJTVObj ); SAFE_DELETE( m_pAsuraCamera ); SAFE_DELETE( m_pGaiaCamera ); SAFE_DELETE( m_pDevaCamera ); //SAFE_DELETE( m_pMainLogo ); SAFE_DELETE( m_pBGLight ); SAFE_DELETE( m_pBGCamera ); SDEBUGLOG("\tSAFE_DELETE( Camera,Light )"); SAFE_DELETE( m_pSky ); SDEBUGLOG("\tSAFE_DELETE( Sky )"); if( m_pViewPort ) { m_pViewPort->SetChildViewportObj( NULL ); } SAFE_DELETE( m_pChildViewPort[0] ); SDEBUGLOG("\tSAFE_DELETE( Viewport )"); #endif SAFE_DELETE( m_pDevaManAvatar ); SAFE_DELETE( m_pDevaWomanAvatar ); SAFE_DELETE( m_pGaiaManAvatar ); SAFE_DELETE( m_pGaiaWomanAvatar ); SAFE_DELETE( m_pAsuraManAvatar ); SAFE_DELETE( m_pAsuraWomanAvatar ); SAFE_DELETE( m_pNewAvatar ); SDEBUGLOG("\tSAFE_DELETE( Avatar )"); SAFE_DELETE( m_pBlackPanel ); SAFE_DELETE( m_pMainLight ); SDEBUGLOG("\tSAFE_DELETE( m_pBlackPanel,m_pMainLight )"); SAFE_DELETE(m_pGaiaNX3Prop); SAFE_DELETE(m_pDevaNX3Prop); SAFE_DELETE(m_pAsuraNX3Prop); for( int i(0); inType != MSG_CONSOLE_BUILDER ) return; SGame::ProcConsole( pGameMsg ); SMSG_CONSOLE_BUILDER* pMsg = static_cast(pGameMsg); if( !::_stricmp( pMsg->m_strKey.c_str(), "effect_open") ) m_pGameMng->SetShowEffectFocusWnd( true ); if( !::_stricmp( pMsg->m_strKey.c_str(), "effect_close") ) m_pGameMng->SetShowEffectFocusWnd( false ); if( !::_stricmp(pMsg->m_strKey.c_str(), "bg_render_on") ) { m_bShowBG = true; return; } if( !::_stricmp(pMsg->m_strKey.c_str(), "bg_render_off") ) { m_bShowBG = false; return; } if( pMsg->m_nValueCount < 1 ) return; #ifdef _TERRAIN_ENABLE_ if( !::_stricmp( pMsg->m_strKey.c_str(), "game_sky_mid") ) { float fValue = atof( pMsg->m_vecValueList[0].c_str() ); if( fValue > 1.f ) fValue = 1.f; else if( fValue < 0.f ) fValue = 0.01f; Game_Sky_Color_MidHeightPercent( fValue ); return; } //좌표|X|Y|라이트|화일|카메라|화일| if( !::_stricmp(pMsg->m_strKey.c_str(), "lobby_terrain_set_in") ) { LobbySet( pMsg->m_vecValueList[0].c_str() ); } if( !::_stricmp(pMsg->m_strKey.c_str(), "lobby_terrain_camera_out") ) { FILE* pF = fopen( pMsg->m_vecValueList[0].c_str(), "wt" ); if( pF ) { m_pBGCamera->FileTextOut(pF); fclose( pF ); } } if( !::_stricmp(pMsg->m_strKey.c_str(), "lobby_terrain_camera_in") ) { _TerrainCameraIn( pMsg->m_vecValueList[0].c_str() ); } if( !::_stricmp(pMsg->m_strKey.c_str(), "lobby_terrain_light_out") ) { FILE* pF = fopen( pMsg->m_vecValueList[0].c_str(), "wt" ); if( pF ) { fprintf( pF, "TYPE|%d|", m_pBGLight->type ); fprintf( pF, "DIFFUSE|%f|%f|%f|%f|" , m_pBGLight->diffuse.r , m_pBGLight->diffuse.g , m_pBGLight->diffuse.b , m_pBGLight->diffuse.a ); fprintf( pF, "SPECULAR|%f|%f|%f|%f|", m_pBGLight->specular.r, m_pBGLight->specular.g, m_pBGLight->specular.b, m_pBGLight->specular.a ); fprintf( pF, "AMBIENT|%f|%f|%f|%f|" , m_pBGLight->ambient.r , m_pBGLight->ambient.g , m_pBGLight->ambient.b , m_pBGLight->ambient.a ); fprintf( pF, "POSITION|%f|%f|%f|" , m_pBGLight->position.x, m_pBGLight->position.y, m_pBGLight->position.z ); fprintf( pF, "DIRECTION|%f|%f|%f|", m_pBGLight->direction.x, m_pBGLight->direction.y, m_pBGLight->direction.z ); fprintf( pF, "RANGE|%f|" , m_pBGLight->range ); fprintf( pF, "ATTENUATION0|%f|", m_pBGLight->attenuation0 ); fprintf( pF, "ATTENUATION1|%f|", m_pBGLight->attenuation1 ); fprintf( pF, "ATTENUATION2|%f|", m_pBGLight->attenuation2 ); fprintf( pF, "FALLOFF|%f|" , m_pBGLight->falloff ); fprintf( pF, "THETA|%f|" , m_pBGLight->theta ); fprintf( pF, "PHI|%f|" ,m_pBGLight-> phi ); fclose( pF ); } } if( !::_stricmp(pMsg->m_strKey.c_str(), "lobby_terrain_light_in") ) { _LightIn( pMsg->m_vecValueList[0].c_str(), m_pBGLight ); } if( !::_stricmp(pMsg->m_strKey.c_str(), "lobby_terrain_sky_out") ) { FILE* pF = fopen( pMsg->m_vecValueList[0].c_str(), "wt" ); if( pF ) { fprintf( pF, "SKY_COLOR_START|%f|%f|%f|", m_Sky_Color_Start.r, m_Sky_Color_Start.g, m_Sky_Color_Start.b ); fprintf( pF, "SKY_COLOR_MID|%f|%f|%f|", m_Sky_Color_Mid.r, m_Sky_Color_Mid.g, m_Sky_Color_Mid.b ); fprintf( pF, "SKY_COLOR_END|%f|%f|%f|", m_Sky_Color_End.r, m_Sky_Color_End.g, m_Sky_Color_End.b ); fprintf( pF, "SKYMIDHEIGHTPERCENT|%f|", m_fSkyMidHeightPercent ); KColor cloud = m_pSky->GetCloudColor(); fprintf( pF, "CLOUD_COLOR|%d|%d|%d|%d|", cloud.r, cloud.g, cloud.b, cloud.a ); //Fog fprintf( pF, "FOGENABLE|%d|", (m_bTerrainFogEnable == true) ? 1 : 0 ); fprintf( pF, "COLORFOG|%d|%d|%d|%d|", m_colorTerrainFog.r, m_colorTerrainFog.g, m_colorTerrainFog.b, m_colorTerrainFog.a ); fprintf( pF, "FOGMODE|%d|", m_dwTerrainFogMode ); fprintf( pF, "HEIGHTFOG_START|%f|", m_fTerrainHeightFog_Start ); fprintf( pF, "HEIGHTFOG_END|%f|" , m_fTerrainHeightFog_End ); fprintf( pF, "LINEARFOG_START|%f|", m_fTerrainLinearFog_Start ); fprintf( pF, "LINEARFOG_END|%f|" , m_fTerrainLinearFog_End ); fclose(pF); } } if( !::_stricmp(pMsg->m_strKey.c_str(), "lobby_terrain_sky_in") ) { _TerrainSkyIn( pMsg->m_vecValueList[0].c_str() ); } if( !::_stricmp(pMsg->m_strKey.c_str(), "game_light_out") ) { FILE* pF = fopen( pMsg->m_vecValueList[0].c_str(), "wt" ); if( pF ) { fprintf( pF, "TYPE|%d|", m_pMainLight->type ); fprintf( pF, "DIFFUSE|%f|%f|%f|%f|" , m_pMainLight->diffuse.r , m_pMainLight->diffuse.g , m_pMainLight->diffuse.b , m_pMainLight->diffuse.a ); fprintf( pF, "SPECULAR|%f|%f|%f|%f|", m_pMainLight->specular.r, m_pMainLight->specular.g, m_pMainLight->specular.b, m_pMainLight->specular.a ); fprintf( pF, "AMBIENT|%f|%f|%f|%f|" , m_pMainLight->ambient.r , m_pMainLight->ambient.g , m_pMainLight->ambient.b , m_pMainLight->ambient.a ); fprintf( pF, "POSITION|%f|%f|%f|" , m_pMainLight->position.x, m_pMainLight->position.y, m_pMainLight->position.z ); fprintf( pF, "DIRECTION|%f|%f|%f|", m_pMainLight->direction.x, m_pMainLight->direction.y, m_pMainLight->direction.z ); fprintf( pF, "RANGE|%f|" , m_pMainLight->range ); fprintf( pF, "ATTENUATION0|%f|", m_pMainLight->attenuation0 ); fprintf( pF, "ATTENUATION1|%f|", m_pMainLight->attenuation1 ); fprintf( pF, "ATTENUATION2|%f|", m_pMainLight->attenuation2 ); fprintf( pF, "FALLOFF|%f|" , m_pMainLight->falloff ); fprintf( pF, "THETA|%f|" , m_pMainLight->theta ); fprintf( pF, "PHI|%f|" ,m_pMainLight-> phi ); fclose( pF ); } } if( !::_stricmp(pMsg->m_strKey.c_str(), "game_light_in") ) { _LightIn( pMsg->m_vecValueList[0].c_str(), m_pMainLight ); } if( !::_stricmp(pMsg->m_strKey.c_str(), "terrain_fog_enable") ) { Terrain_Fog_Enable( 0 != atoi( pMsg->m_vecValueList[0].c_str() ) ); } #endif if( !::_stricmp(pMsg->m_strKey.c_str(), "lobby_fog_enable") ) { Lobby_Fog_Enable( 0 != atoi( pMsg->m_vecValueList[0].c_str() ) ); } if( pMsg->m_nValueCount < 2 ) return; if( !::_stricmp(pMsg->m_strKey.c_str(), "lobby_fog_dist") ) { Lobby_Fog_Dist ( atof( pMsg->m_vecValueList[0].c_str() ), atof( pMsg->m_vecValueList[1].c_str() ) ); } if( !::_stricmp(pMsg->m_strKey.c_str(), "lobby_fog_height_dist") ) { Lobby_Fog_Height_Dist( atof( pMsg->m_vecValueList[0].c_str() ), atof( pMsg->m_vecValueList[1].c_str() ) ); } #ifdef _TERRAIN_ENABLE_ if( !::_stricmp(pMsg->m_strKey.c_str(), "terrain_fog_dist") ) { Terrain_Fog_Dist ( atof( pMsg->m_vecValueList[0].c_str() ), atof( pMsg->m_vecValueList[1].c_str() ) ); } if( !::_stricmp(pMsg->m_strKey.c_str(), "terrain_fog_height_dist") ) { Terrain_Fog_Height_Dist( atof( pMsg->m_vecValueList[0].c_str() ), atof( pMsg->m_vecValueList[1].c_str() ) ); } if( !::_stricmp(pMsg->m_strKey.c_str(), "lobby_warp") ) { // _LobbyWarp( atoi(pMsg->m_vecValueList[0].c_str()), atoi(pMsg->m_vecValueList[1].c_str()), true ); } #endif if( !::_stricmp(pMsg->m_strKey.c_str(), "game_sky_color_start") || !::_stricmp(pMsg->m_strKey.c_str(), "game_sky_cstart") ) { Game_Sky_Color_Start( atoi( pMsg->m_vecValueList[0].c_str()) , atoi( pMsg->m_vecValueList[1].c_str() ), atoi( pMsg->m_vecValueList[2].c_str() ) ); return; } if( !::_stricmp(pMsg->m_strKey.c_str(), "game_sky_color_mid") || !::_stricmp(pMsg->m_strKey.c_str(), "game_sky_cmid") ) { Game_Sky_Color_Mid( atoi( pMsg->m_vecValueList[0].c_str()) , atoi( pMsg->m_vecValueList[1].c_str() ), atoi( pMsg->m_vecValueList[2].c_str() ) ); return; } if( !::_stricmp(pMsg->m_strKey.c_str(), "game_sky_color_end") || !::_stricmp(pMsg->m_strKey.c_str(), "game_sky_cend") ) { Game_Sky_Color_End( atoi( pMsg->m_vecValueList[0].c_str()) , atoi( pMsg->m_vecValueList[1].c_str() ), atoi( pMsg->m_vecValueList[2].c_str() ) ); return; } if( pMsg->m_nValueCount < 3 ) return; #ifdef _TERRAIN_ENABLE_ if( !::_stricmp(pMsg->m_strKey.c_str(), "lobby_terrain_light_diff" ) ) { K3DColor diff = K3DColor( atoi( pMsg->m_vecValueList[0].c_str())/255.f , atoi( pMsg->m_vecValueList[1].c_str())/255.f, atoi( pMsg->m_vecValueList[2].c_str())/255.f ); Terrain_Light( 0, diff ); } if( !::_stricmp(pMsg->m_strKey.c_str(), "lobby_terrain_light_spec" ) ) { K3DColor spec = K3DColor( atoi( pMsg->m_vecValueList[0].c_str())/255.f , atoi( pMsg->m_vecValueList[1].c_str())/255.f, atoi( pMsg->m_vecValueList[2].c_str())/255.f ); Terrain_Light( 1, spec ); } if( !::_stricmp(pMsg->m_strKey.c_str(), "lobby_terrain_light_ambient" ) ) { K3DColor ambient = K3DColor( atoi( pMsg->m_vecValueList[0].c_str())/255.f , atoi(pMsg->m_vecValueList[1].c_str())/255.f, atoi( pMsg->m_vecValueList[2].c_str())/255.f ); Terrain_Light( 2, ambient ); } if( !::_stricmp(pMsg->m_strKey.c_str(), "lobby_terrain_light_pos" ) ) Terrain_Light_Pos ( atoi(pMsg->m_vecValueList[0].c_str()), atoi(pMsg->m_vecValueList[1].c_str()), atoi(pMsg->m_vecValueList[2].c_str()) ); #endif if( !::_stricmp(pMsg->m_strKey.c_str(), "game_light_pos" ) || !::_stricmp(pMsg->m_strKey.c_str(), "game_lt_p" ) ) Game_Light_Pos ( atoi(pMsg->m_vecValueList[0].c_str()), atoi(pMsg->m_vecValueList[1].c_str()), atoi(pMsg->m_vecValueList[2].c_str()) ); if( !::_stricmp(pMsg->m_strKey.c_str(), "game_light_diff" ) || !::_stricmp(pMsg->m_strKey.c_str(), "game_lt_d" ) ) { K3DColor diff = K3DColor( atoi( pMsg->m_vecValueList[0].c_str())/255.f , atoi( pMsg->m_vecValueList[1].c_str())/255.f, atoi( pMsg->m_vecValueList[2].c_str())/255.f ); Game_Light( 0, diff ); } if( !::_stricmp(pMsg->m_strKey.c_str(), "game_light_spec") || !::_stricmp(pMsg->m_strKey.c_str(), "game_lt_s") ) { K3DColor spec = K3DColor( atoi( pMsg->m_vecValueList[0].c_str())/255.f , atoi( pMsg->m_vecValueList[1].c_str())/255.f, atoi( pMsg->m_vecValueList[2].c_str())/255.f ); Game_Light( 1, spec ); } if( !::_stricmp(pMsg->m_strKey.c_str(), "game_light_ambient" ) || !::_stricmp(pMsg->m_strKey.c_str(), "game_lt_a" ) ) { K3DColor ambient = K3DColor( atoi( pMsg->m_vecValueList[0].c_str())/255.f , atoi(pMsg->m_vecValueList[1].c_str())/255.f, atoi( pMsg->m_vecValueList[2].c_str())/255.f ); Game_Light( 2, ambient ); } if( pMsg->m_nValueCount < 4 ) return; if( !::_stricmp(pMsg->m_strKey.c_str(), "lobby_fog_color") ) { Lobby_Fog_Color( atoi( pMsg->m_vecValueList[0].c_str() ), atoi( pMsg->m_vecValueList[1].c_str() ), atoi( pMsg->m_vecValueList[2].c_str() ), atoi( pMsg->m_vecValueList[3].c_str() ) ); } #ifdef _TERRAIN_ENABLE_ if( !::_stricmp(pMsg->m_strKey.c_str(), "terrain_fog_color") ) { Terrain_Fog_Color( atoi( pMsg->m_vecValueList[0].c_str() ), atoi( pMsg->m_vecValueList[1].c_str() ), atoi( pMsg->m_vecValueList[2].c_str() ), atoi( pMsg->m_vecValueList[3].c_str() ) ); } if( !::_stricmp(pMsg->m_strKey.c_str(), "game_cloud_color") ) { KColor Color = KColor( atoi( pMsg->m_vecValueList[0].c_str()) , atoi( pMsg->m_vecValueList[1].c_str() ), atoi( pMsg->m_vecValueList[2].c_str() ), atoi( pMsg->m_vecValueList[3].c_str() ) ); if( m_pSky ) m_pSky->SetCloudColor( Color ); return; } #endif } #ifdef _TERRAIN_ENABLE_ void SGameRenewalLobby::_PerformMainLogo() { } void SGameRenewalLobby::_LoadLobbyRaceNX3Data( KSeqForm*& pObj, KMsgREQ_EVBOX& rEventBox, const char* lpFileName, bool bOutEvent/*true*/ ) { _CID( REQ_EVBOX ); pObj = new KSeqForm; pObj->AddAnimation( "default", lpFileName, true ); pObj->PlayAnimation( m_dwTime, "default", SEQTYPE_LOOP ); if( bOutEvent ) { if( pObj ) pObj->Perform( id_REQ_EVBOX, rEventBox ); //캐릭터 위치 else _oprint( "!!! Graphic Resource Effect Pos Error: %s\n", lpFileName ); } } void SGameRenewalLobby::_LoadLobbyNX3Prop() { SAFE_DELETE(m_pGaiaNX3Prop); SAFE_DELETE(m_pDevaNX3Prop); SAFE_DELETE(m_pAsuraNX3Prop); KMsgREQ_EVBOX EventBox0; _LoadLobbyRaceNX3Data( m_pGaiaNX3Prop, EventBox0, c_szLobbyGaiaNX3PropName ); GetEventPos(EventBox0, m_GaiaEventpos); KMsgREQ_EVBOX EventBox1; _LoadLobbyRaceNX3Data( m_pDevaNX3Prop, EventBox1, c_szLobbyDevaNX3PropName ); GetEventPos(EventBox1, m_DevaEventpos); KMsgREQ_EVBOX EventBox2; _LoadLobbyRaceNX3Data( m_pAsuraNX3Prop, EventBox2, c_szLobbyAsuraNX3PropName ); GetEventPos(EventBox2, m_AsuraEventpos); // 이펙트 관련 NX3 Loading //////////////////////////////////////////////////////////////////////////////////////////////////////// KMsgREQ_EVBOX TempEventBox; for( int i(0); iAddAnimation( "default", c_szLobbyAsuraNX3EffectPropName, true ); // pObj->PlayAnimation( m_dwTime, "default", SEQTYPE_LOOP ); // m_pAsuraNX3DffectProp = pObj; } void SGameRenewalLobby::InitCreateSeenAvatar() { SAFE_DELETE(m_pDevaManAvatar); SAFE_DELETE(m_pDevaWomanAvatar); SAFE_DELETE(m_pGaiaManAvatar); SAFE_DELETE(m_pGaiaWomanAvatar); SAFE_DELETE(m_pAsuraManAvatar); SAFE_DELETE(m_pAsuraWomanAvatar); m_pDevaManAvatar = new SAvatarSelector(); m_pDevaWomanAvatar = new SAvatarSelector(); m_pGaiaManAvatar = new SAvatarSelector(); m_pGaiaWomanAvatar = new SAvatarSelector(); m_pAsuraManAvatar = new SAvatarSelector(); m_pAsuraWomanAvatar = new SAvatarSelector(); InitAvatar( m_pGaiaManAvatar, m_GaiaEventpos ); InitAvatar( m_pGaiaWomanAvatar, m_GaiaEventpos ); InitAvatar( m_pDevaManAvatar, m_DevaEventpos ); InitAvatar( m_pDevaWomanAvatar, m_DevaEventpos ); InitAvatar( m_pAsuraManAvatar, m_AsuraEventpos ); InitAvatar( m_pAsuraWomanAvatar, m_AsuraEventpos ); #ifdef CREATE_CHAR_EFFECT m_pCreateSuccessEffect = new KSeqModel; m_pCreateSuccessEffect->Initialize(); K3DMatrix mat; K3DMatrixIdentity( mat ); mat._11 = c_fAvatarScale; mat._22 = c_fAvatarScale; mat._33 = c_fAvatarScale; m_pAsuraWomanAvatar->SetScale(c_fAvatarScale); m_pCreateSuccessEffect->SetTransform( mat ); NX3LoadPack loadpack; m_pCreateSuccessEffect->AddAnimation( c_szAvatarEffectStartAniName, c_lpCreateEffectFileName, KNX3Manager::SEQTYPE_ALL, &loadpack ); #endif } void SGameRenewalLobby::GetRaceEventPos(int nRace, K3DVector& vAvatarPos) { switch( nRace ) { case GCLAN_DEVA: vAvatarPos = m_DevaEventpos; break; case GCLAN_ASURA: vAvatarPos = m_AsuraEventpos; break; case GCLAN_GAIA: vAvatarPos = m_GaiaEventpos; break; } } void SGameRenewalLobby::GetEventPos( KMsgREQ_EVBOX& Event, K3DVector& vAvatarPos ) { int nEventCnt = Event.GetBoxCount(); if( nEventCnt <= 0 ) return; KEventBoxSeq* pEventSeq = Event.GetBox(0); //지금 아바타 관련해서 이벤트 포인트는 하나기 때문에 그냥 0번 인덱스에서 얻어오게 제한적으로 처리 if( pEventSeq == NULL ) return; K3DMatrix MT = pEventSeq->GetCube().GetTransform(); vAvatarPos = MT.GetPosVector(); } void SGameRenewalLobby::InitAvatar( SAvatarSelector* pAvatar, const K3DVector& vAvatarPos ) { if( pAvatar == NULL ) return; K3DMatrix mat; K3DMatrixIdentity( mat ); mat._11 = c_fAvatarScale; mat._22 = c_fAvatarScale; mat._33 = c_fAvatarScale; pAvatar->SetScale(c_fAvatarScale); mat.SetPosVector( vAvatarPos ); pAvatar->SetTransform( mat ); pAvatar->AvatarRotate(c_fInitRotate, false, true); } void SGameRenewalLobby::InitCamera() { SAFE_DELETE(m_pAsuraCamera); SAFE_DELETE(m_pGaiaCamera); SAFE_DELETE(m_pDevaCamera); m_pAsuraCamera = new KSeqForm; m_pGaiaCamera = new KSeqForm; m_pDevaCamera = new KSeqForm; for ( int i(0); 3>i; i++ ) { m_pAsuraCamera->AddAnimation( pCamAniKey[LOBBY_CAMERA_ZOOMOUT+i], pAsuraCreate[i], true, KNX3Manager::SEQTYPE_CAMERA ); m_pGaiaCamera->AddAnimation( pCamAniKey[LOBBY_CAMERA_ZOOMOUT+i], pGaiaCreate[i], true, KNX3Manager::SEQTYPE_CAMERA ); m_pDevaCamera->AddAnimation( pCamAniKey[LOBBY_CAMERA_ZOOMOUT+i], pDevaCreate[i], true, KNX3Manager::SEQTYPE_CAMERA ); } } // //void SGameRenewalLobby::InitQJTV( SGameQJTV*& pQJTV, const char* lpFile, bool bUseAlpha ) //{ // if( pQJTV == NULL ) // pQJTV = new SGameQJTV(m_pRenderDevice); // // DWORD dwOption(QJTV::FULL|QJTV::CENTER|QJTV::ALPHA); // pQJTV->SetQJTV(lpFile, dwOption, 0, 0, 25, KColor(0,0,0,255)); // // pQJTV->SetScreenCenter(); // pQJTV->SetRepeat(true); //} /*void SGameRenewalLobby::InitQJTVs() { m_pMuitiQJTV->AddQJTV( szBG_Asura, QJTV::FULL|QJTV::CENTER|QJTV::ALPHA ); m_pMuitiQJTV->AddQJTV( szBG_Deva, QJTV::FULL|QJTV::CENTER|QJTV::ALPHA ); m_pMuitiQJTV->AddQJTV( szBG_Gaia, QJTV::FULL|QJTV::CENTER|QJTV::ALPHA ); }*/ const short aIntTime[] = { 7, 3, 5, 7, 15, 20, 3, 5, 9, 9 }; /* void SGameRenewalLobby::_RefreshJTVLogo() { int fixFps = 24; float msFps = 1000.f / fixFps; if ( (GetSafeTickCount() - m_dwRefreshTime) < msFps ) return; if( !m_bLogoPlay ) { short nRandIndex = rand()%10; short nValue = rand()%100; if( aIntTime[nRandIndex] > nValue ) m_bLogoPlay = true; return; } if( m_pQJTVObj && m_spLogoTexture ) { if( m_nCurFrame >= m_pQJTVObj->GetFrameCount() ) { m_nCurFrame = 0; m_bLogoPlay = false; } BYTE* pBit(NULL); int nW, nH; nW = nH = 0; m_pQJTVObj->GetFrame( m_nCurFrame, pBit, nW, nH ); if( m_bIncrease ) m_nCurFrame++; if( pBit ) { K3DTexture* pTexture = (K3DTexture*)m_spLogoTexture; m_bInitLogo = _refreshTexture( pTexture, pBit, nW, nH ); } } m_dwRefreshTime = GetSafeTickCount(); } */ void SGameRenewalLobby::LobbySetforGameRes( const char* pFileName ) { if( pFileName == NULL ) return; if( !m_strCurLobbySet.empty() ) { if( stricmp( m_strCurLobbySet.c_str(), pFileName ) == 0 ) return; } m_strCurLobbySet = pFileName; KStream* pRes = KFileManager::Instance().CreateStreamFromResource( pFileName ); if( !pRes ) return; size_t nLen = pRes->GetLength(); char* pstrTemp = new char[nLen+1]; pstrTemp[nLen] = '\0'; for( size_t i(0); nLen > i; i++ ) { pRes->Read( &pstrTemp[i], 1 ); } _LobbySetLoadforGameRes( pstrTemp, m_pMainLight ); delete [] pstrTemp; KFileManager::Instance().DeleteStream( pRes ); } void SGameRenewalLobby::LobbySet( const char * pFileName ) { FILE* pF = fopen( pFileName, "rb" ); if( pF ) { // 데이터 파일 크기 세팅 fseek( pF, 0, SEEK_END ); size_t fsize = ftell( pF ); fseek( pF, 0, SEEK_SET ); char *pBuf = new char[fsize]; fread( pBuf, sizeof(char)*fsize, 1, pF ); _LobbySetLoad( pBuf, m_pMainLight ); delete [] pBuf; fclose( pF ); } } void SGameRenewalLobby::_LobbySetLoadforGameRes( char *pBuf, K3DLight* pLight ) { std::vector< std::string > vString; MsgSplit( pBuf, vString, L"|\r\n" ); int nLoop = (int)vString.size(); if( nLoop >= 6 ) { for( int i(0); 1 > i; i++ ) { vString[i++].c_str(); // Light _LightInforGameRes(vString[i++].c_str(), pLight); // Light file vString[i++].c_str(); // Camera _MainCameraInforGameRes(vString[i++].c_str()); // Camera file vString[i++].c_str(); // Sky _SkyInforGameRes(vString[i++].c_str()); // Sky file } } vString.clear(); } void SGameRenewalLobby::_LobbySetLoad( char *pBuf, K3DLight* pLight ) { if( pLight == NULL ) return; std::vector< std::string > vString; MsgSplit( pBuf, vString, L"|\r\n" ); int nLoop = (int)vString.size(); if( nLoop >= 6 ) { for( int i(0); 1>i; i++ ) { vString[i++].c_str(); //라이트 _LightIn( vString[i++].c_str(), pLight ); //라이트 화일 vString[i++].c_str(); //카메라 _TerrainCameraIn( vString[i++].c_str() ); //카메라 화일 vString[i++].c_str(); //스카이 _TerrainSkyIn( vString[i++].c_str() ); //스카이 화일 } } vString.clear(); } void SGameRenewalLobby::_SkyInforGameRes( const char * pFileName ) { KStream * pRes = KFileManager::Instance().CreateStreamFromResource( pFileName ); if( !pRes ) return; size_t nLen = pRes->GetLength(); char * pstrTemp = new char[nLen+1]; pstrTemp[nLen] = '\0'; for( size_t i(0); nLen>i; i++ ) { pRes->Read( &pstrTemp[i], 1 ); } _TerrainSkyInLoad( pstrTemp ); delete [] pstrTemp; KFileManager::Instance().DeleteStream( pRes ); } void SGameRenewalLobby::_TerrainSkyInLoad( char *pBuf ) { std::vector< std::string > vString; MsgSplit( pBuf, vString, L"|\r\n" ); int nLoop = (int)vString.size(); if( nLoop >= 36 ) { for( int i(0); 1>i; i++ ) { vString[i++].c_str(); //SKY_COLOR_START m_Sky_Color_Start.r = atof( vString[i++].c_str() ); m_Sky_Color_Start.g = atof( vString[i++].c_str() ); m_Sky_Color_Start.b = atof( vString[i++].c_str() ); vString[i++].c_str(); //SKY_COLOR_MID m_Sky_Color_Mid.r = atof( vString[i++].c_str() ); m_Sky_Color_Mid.g = atof( vString[i++].c_str() ); m_Sky_Color_Mid.b = atof( vString[i++].c_str() ); vString[i++].c_str(); //SKY_COLOR_END m_Sky_Color_End.r = atof( vString[i++].c_str() ); m_Sky_Color_End.g = atof( vString[i++].c_str() ); m_Sky_Color_End.b = atof( vString[i++].c_str() ); vString[i++].c_str(); //SKYMIDHEIGHTPERCENT m_fSkyMidHeightPercent = atof( vString[i++].c_str() ); KColor cloud; vString[i++].c_str(); //CLOUD_COLOR cloud.r = atoi( vString[i++].c_str() ); cloud.g = atoi( vString[i++].c_str() ); cloud.b = atoi( vString[i++].c_str() ); cloud.a = atoi( vString[i++].c_str() ); cloud.a = 0xff; // [sonador:temporary] to make cloud be visible m_pSky->SetCloudColor( cloud ); vString[i++].c_str(); //FOGENABLE m_bTerrainFogEnable = (atoi( vString[i++].c_str() ) == 1) ? true : false; vString[i++].c_str(); //COLORFOG m_colorTerrainFog.r = atoi( vString[i++].c_str() ); m_colorTerrainFog.g = atoi( vString[i++].c_str() ); m_colorTerrainFog.b = atoi( vString[i++].c_str() ); m_colorTerrainFog.a = atoi( vString[i++].c_str() ); vString[i++].c_str(); //FOGMODE m_dwTerrainFogMode = atoi( vString[i++].c_str() ); vString[i++].c_str(); //HEIGHTFOG_START m_fTerrainHeightFog_Start = atof( vString[i++].c_str() ); vString[i++].c_str(); //HEIGHTFOG_END m_fTerrainHeightFog_End = atof( vString[i++].c_str() ); vString[i++].c_str(); //LINEARFOG_START m_fTerrainLinearFog_Start = atof( vString[i++].c_str() ); vString[i++].c_str(); //LINEARFOG_END m_fTerrainLinearFog_End = atof( vString[i++].c_str() ); } } vString.clear(); } void SGameRenewalLobby::_TerrainSkyIn( const char * pFileName ) { FILE* pF = fopen( pFileName, "rb" ); if( pF ) { // 데이터 파일 크기 세팅 fseek( pF, 0, SEEK_END ); size_t fsize = ftell( pF ); fseek( pF, 0, SEEK_SET ); char *pBuf = new char[fsize]; fread( pBuf, sizeof(char)*fsize, 1, pF ); _TerrainSkyInLoad( pBuf ); delete [] pBuf; fclose( pF ); } } void SGameRenewalLobby::_GameLightInforGameRes( const char * pFileName, K3DLight* pLight ) { KStream * pRes = KFileManager::Instance().CreateStreamFromResource( pFileName ); if( !pRes ) return; size_t nLen = pRes->GetLength(); char * pstrTemp = new char[nLen+1]; pstrTemp[nLen] = '\0'; for( size_t i(0); nLen>i; i++ ) { pRes->Read( &pstrTemp[i], 1 ); } _LightInLoad( pstrTemp, pLight ); delete [] pstrTemp; KFileManager::Instance().DeleteStream( pRes ); } void SGameRenewalLobby::_LightInforGameRes( const char * pFileName, K3DLight* pLight ) { KStream * pRes = KFileManager::Instance().CreateStreamFromResource( pFileName ); if( !pRes ) return; size_t nLen = pRes->GetLength(); char * pstrTemp = new char[nLen+1]; pstrTemp[nLen] = '\0'; for( size_t i(0); nLen>i; i++ ) { pRes->Read( &pstrTemp[i], 1 ); } _LightInLoad( pstrTemp, pLight ); delete [] pstrTemp; KFileManager::Instance().DeleteStream( pRes ); } void SGameRenewalLobby::_LightInLoad( char *pBuf, K3DLight* pLight ) { if( pLight == NULL ) return; std::vector< std::string > vString; MsgSplit( pBuf, vString, L"|\r\n" ); int nLoop = (int)vString.size(); if( nLoop >= 39 ) { for( int i(0); 1>i; i++ ) { vString[i++].c_str(); //TYPE pLight->type = atoi( vString[i++].c_str() ); vString[i++].c_str(); //DIFFUSE pLight->diffuse.r = atof( vString[i++].c_str() ); pLight->diffuse.g = atof( vString[i++].c_str() ); pLight->diffuse.b = atof( vString[i++].c_str() ); pLight->diffuse.a = atof( vString[i++].c_str() ); vString[i++].c_str(); //SPECULAR pLight->specular.r = atof( vString[i++].c_str() ); pLight->specular.g = atof( vString[i++].c_str() ); pLight->specular.b = atof( vString[i++].c_str() ); pLight->specular.a = atof( vString[i++].c_str() ); vString[i++].c_str(); //AMBIENT pLight->ambient.r = atof( vString[i++].c_str() ); pLight->ambient.g = atof( vString[i++].c_str() ); pLight->ambient.b = atof( vString[i++].c_str() ); pLight->ambient.a = atof( vString[i++].c_str() ); vString[i++].c_str(); //POSITION pLight->position.x = atof( vString[i++].c_str() ); pLight->position.y = atof( vString[i++].c_str() ); pLight->position.z = atof( vString[i++].c_str() ); vString[i++].c_str(); //DIRECTION pLight->direction.x = atof( vString[i++].c_str() ); pLight->direction.y = atof( vString[i++].c_str() ); pLight->direction.z = atof( vString[i++].c_str() ); vString[i++].c_str(); //RANGE pLight->range = atof( vString[i++].c_str() ); vString[i++].c_str(); //ATTENUATION0 pLight->attenuation0 = atof( vString[i++].c_str() ); vString[i++].c_str(); //ATTENUATION1 pLight->attenuation1 = atof( vString[i++].c_str() ); vString[i++].c_str(); //ATTENUATION2 pLight->attenuation2 = atof( vString[i++].c_str() ); vString[i++].c_str(); //FALLOFF pLight->falloff = atof( vString[i++].c_str() ); vString[i++].c_str(); //THETA pLight->theta = atof( vString[i++].c_str() ); vString[i++].c_str(); //PHI pLight-> phi = atof( vString[i++].c_str() ); } } vString.clear(); } void SGameRenewalLobby::_LightIn( const char * pFileName, K3DLight* pLight ) { FILE* pF = fopen( pFileName, "rb" ); if( pF ) { // 데이터 파일 크기 세팅 fseek( pF, 0, SEEK_END ); size_t fsize = ftell( pF ); fseek( pF, 0, SEEK_SET ); char *pBuf = new char[fsize]; fread( pBuf, sizeof(char)*fsize, 1, pF ); _LightInLoad( pBuf, pLight ); delete [] pBuf; fclose( pF ); } } void SGameRenewalLobby::_MainCameraInforGameRes( const char * pFileName ) { KStream * pRes = KFileManager::Instance().CreateStreamFromResource( pFileName ); if( !pRes ) return; size_t nLen = pRes->GetLength(); char * pstrTemp = new char[nLen+1]; pstrTemp[nLen] = '\0'; for( size_t i(0); nLen>i; i++ ) { pRes->Read( &pstrTemp[i], 1 ); } m_pBGCamera->FileTextIn(pstrTemp); delete [] pstrTemp; KFileManager::Instance().DeleteStream( pRes ); } void SGameRenewalLobby::_TerrainCameraIn( const char * pFileName ) { FILE* pF = fopen( pFileName, "rb" ); if( pF ) { // 데이터 파일 크기 세팅 fseek( pF, 0, SEEK_END ); size_t fsize = ftell( pF ); fseek( pF, 0, SEEK_SET ); char *pBuf = new char[fsize]; fread( pBuf, sizeof(char)*fsize, 1, pF ); m_pBGCamera->FileTextIn(pBuf); delete [] pBuf; fclose( pF ); } } void SGameRenewalLobby::Terrain_Light ( int type, K3DColor col ) { if( m_pBGLight ) { switch( type ) { case 0 : m_pBGLight->diffuse = col; break; case 1 : m_pBGLight->specular = col; break; case 2 : m_pBGLight->ambient = col; break; } } } void SGameRenewalLobby::Terrain_Light_Pos ( int nX, int nY, int nZ ) { if( m_pBGLight ) { m_pBGLight->position.x = nX; m_pBGLight->position.y = nY; m_pBGLight->position.z = nZ; m_pBGLight->direction = -m_pBGLight->position; Normalize(m_pBGLight->direction); } } #endif void SGameRenewalLobby::Game_Sky_Color_Start( int nR, int nG, int nB ) //Sky Color { m_Sky_Color_Start = K3DColor( nR/255.f, nG/255.f, nB/255.f ); } void SGameRenewalLobby::Game_Sky_Color_Mid ( int nR, int nG, int nB ) { m_Sky_Color_Mid = K3DColor( nR/255.f, nG/255.f, nB/255.f ); } void SGameRenewalLobby::Game_Sky_Color_End ( int nR, int nG, int nB ) { m_Sky_Color_End = K3DColor( nR/255.f, nG/255.f, nB/255.f ); } void SGameRenewalLobby::Game_Sky_Color_MaxHeight( float fMaxHeight ) { m_fSkyColorMaxHeight = fMaxHeight; } void SGameRenewalLobby::Game_Sky_Color_MidHeightPercent( float fMidHeightPercent ) { m_fSkyMidHeightPercent = fMidHeightPercent; } void SGameRenewalLobby::Game_Sky_Color_MinHeight( float fMinHeight ) { m_fSkyColorMinHeight = fMinHeight; } void SGameRenewalLobby::Game_Light ( int type, K3DColor col ) { if( m_pMainLight ) { switch( type ) { case 0 : m_pMainLight->diffuse = col; break; case 1 : m_pMainLight->specular = col; break; case 2 : m_pMainLight->ambient = col; break; } } } void SGameRenewalLobby::Game_Light_Pos ( int nX, int nY, int nZ ) { if( m_pMainLight ) { m_pMainLight->position.x = nX; m_pMainLight->position.y = nY; m_pMainLight->position.z = nZ; m_pMainLight->direction = -m_pMainLight->position; Normalize(m_pMainLight->direction); } } void SGameRenewalLobby::SetViewPort( SGameViewPort* pViewPort ) { pViewPort->SetClipRange( 5.f, 15000.f ); pViewPort->SetHdrQuality( 0 ); pViewPort->SetEnableSelectOutLine(false); pViewPort->SetChildViewportObj( m_pChildViewPort[0] ); { //m_spBlendSource = KDeviceManager::GetDeviceManager()->GetRenderDevice()->CreateRenderTarget( cBlend_Width, cBlend_Width, 1, K3DFMT_X8R8G8B8, K3DRenderTarget::DEPTH_ENABLE ); if( GetGameOption().GetResolution_Width() > 1024 ) m_spBlendSource = KDeviceManager::GetDeviceManager()->GetRenderDevice()->CreateRenderTarget( 2048, 2048, 1, K3DFMT_X8R8G8B8, K3DRenderTarget::DEPTH_ENABLE ); else m_spBlendSource = KDeviceManager::GetDeviceManager()->GetRenderDevice()->CreateRenderTarget( cBlend_Width, cBlend_Width, 1, K3DFMT_X8R8G8B8, K3DRenderTarget::DEPTH_ENABLE ); if(m_spBlendSource == NULL) return; m_spBlendResSprite = new KResSprite; m_spBlendResSprite->SetTexture(m_spBlendSource, NULL); //m_BlendSpritePrimitive.SetTargetSize( 1024, 768 ); int w = GetGameOption().GetResolution_Width(); int h = GetGameOption().GetResolution_Height(); m_BlendSpritePrimitive.SetTargetSize( w, h ); K3DMatrix mat; K3DMatrixIdentity( mat ); mat.SetPosVector( K3DVertex( 0, 0, 10.f ) ); m_spBlendResSprite->SetTransform(mat); m_BlendSpritePrimitive.SetTransform(mat); m_BlendSpritePrimitive.SetRes( m_spBlendResSprite ); m_BlendSpritePrimitive.SetVisibility( 1.0f ); } SGame::SetViewPort( pViewPort ); } bool SGameRenewalLobby::Render( unsigned long uRenderBitVector, KViewportObject** ppViewPortList, int nViewportCount ) { if( GetGameRef() == STAGE_END || GetGameRef() == STAGE_NOTHING ) return true; for(int vit = 0; vit < nViewportCount; ++vit) { if( (ppViewPortList[vit]->GetAttributes() & KViewportObject::VIEWPORT_GAME ) == 0 && (ppViewPortList[vit]->GetAttributes() & KViewportObject::VIEWPORT_SHADOW) == 0 ) continue; KViewportObject* viewport = ppViewPortList[vit]; viewport->SetFogMode( m_dwFogMode, m_colorLobbyFog, m_fLinearFog_Start, m_fLinearFog_End, m_fHeightFog_Start, m_fHeightFog_End ); viewport->AddLight( m_pMainLight ); m_pChildViewPort[0]->SetCamera( m_pBGCamera ); switch( GetCurState() ) { case GAMELOGIN_PREPARE_CHARSELECT: { if( m_BeforeCharListState == GAMELOGIN_CREATECHAR_CUSTOMIZING || m_BeforeCharListState == GAMELOGIN_CREATECHAR_SUCCESS ) { RenderRaceBackGround_N_Avatar(viewport, m_pChildViewPort[0], m_nSelectCustomRace, GetCrrCustomizingAvatar()); } else if( m_BeforeCharListState == GAMELOGIN_CHARSELECT ) { if( 0 <= m_nSelectedCharIndex && m_nSelectedCharIndex < GameRule::nMaxCharactersPerAccount ) { RenderRaceBackGround_N_Avatar(viewport, m_pChildViewPort[0], m_nSelectChrRace, m_Avatars[ m_nSelectedCharIndex ].pAvatar); } } } break; case GAMELOGIN_CREATECHAR_SUCCESS: { SAvatarSelector* pSelectAvatar = GetCrrCustomizingAvatar(); RenderRaceBackGround_N_Avatar(viewport, m_pChildViewPort[0], m_nSelectCustomRace, pSelectAvatar, m_pCreateSuccessEffect); } break; case GAMELOGIN_CREATECHAR_CUSTOMIZING: { RenderRaceBackGround_N_Avatar(viewport, m_pChildViewPort[0], m_nSelectCustomRace, GetCrrCustomizingAvatar()); } break; case GAMELOGIN_CHARSELECT_WAIT_TIME: case GAMELOGIN_CHARSELECT: { if( 0 <= m_nSelectedCharIndex && m_nSelectedCharIndex < GameRule::nMaxCharactersPerAccount) { RenderRaceBackGround_N_Avatar(viewport, m_pChildViewPort[0], m_nSelectChrRace, m_Avatars[ m_nSelectedCharIndex ].pAvatar); if( m_dwBlendStartTime != 0 && viewport->GetAttributes() & KViewportObject::VIEWPORT_GAME ) viewport->Register( &m_BlendSpritePrimitive ); } } break; } } if( m_pSceneMgr ) m_pSceneMgr->render( ppViewPortList[0] ); return true; } KSeqForm* SGameRenewalLobby::GetRaceCamera( int nRace ) { switch( nRace ) { case GCLAN_DEVA: return m_pDevaCamera; case GCLAN_ASURA: return m_pAsuraCamera; case GCLAN_GAIA: return m_pGaiaCamera; } return NULL; } KSeqForm* SGameRenewalLobby::GetRaceNX3obj( int nRace ) { switch( nRace ) { case GCLAN_DEVA: return m_pDevaNX3Prop; case GCLAN_ASURA: return m_pAsuraNX3Prop; case GCLAN_GAIA: return m_pGaiaNX3Prop; } return NULL; } void SGameRenewalLobby::RenderAsuraFireEffect( KViewportObject* viewport ) { if( !viewport ) return; static float s_fValue = 0.9777f; int x(0), y(0), z(0.1); for( int i(0); iGet2DVto3DV( K3DVector(x,y,s_fValue), v3D ); K3DMatrix mat; K3DMatrixIdentity( mat ); mat.SetPosVector(v3D); m_pAsuraNX3DffectProp[i]->SetParentTransform(&mat); // m_pAsuraNX3DffectProp[i]->SetTransform(mat); m_pAsuraNX3DffectProp[i]->Render(viewport, KRenderObject::RENDEREFX_AFTER_SPRITE); } } void SGameRenewalLobby::RenderRaceBackGround_N_Avatar( KViewportObject* viewport, KViewportObject* ChildViewport, int nRace, SAvatarSelector* pAvatar, KSeqModel* pEffect/*=NULL*/ ) { if( viewport->GetAttributes() & KViewportObject::VIEWPORT_GAME ) { ChildViewport->SetCamera( m_pBGCamera ); if( m_pSky ) { ChildViewport->SetSkyColorHeight( m_fSkyColorMinHeight, m_fSkyColorMaxHeight, m_fSkyMidHeightPercent ); ChildViewport->SetSkyColor( m_Sky_Color_Start, m_Sky_Color_Mid, m_Sky_Color_End ); // ChildViewport->SetFogMode( m_dwTerrainFogMode, m_colorTerrainFog, m_fTerrainLinearFog_Start, m_fTerrainLinearFog_End, m_fTerrainHeightFog_Start, m_fTerrainHeightFog_End ); // ChildViewport->AddLight( m_pBGLight ); m_pSky->Render( ChildViewport ); } if( m_bShowBG ) { if(m_pCharaterBgSceneMgr) { m_pCharaterBgSceneMgr->render( ChildViewport ); } } //m_pMuitiQJTV->Render(ChildViewport); if( nRace == GCLAN_ASURA ) RenderAsuraFireEffect( ChildViewport ); } if( pAvatar == NULL ) return; // 종족별로 카메라의 ani가 다르기 때문에 여기서 그에 맞는 카메라를 얻어와서 쎄팅해준다. //////////////////////////////////// KSeqForm* pCamera = GetRaceCamera( nRace ); if( pCamera ) pCamera->Render( viewport ); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// viewport->AddLight( m_pMainLight ); KSeqObject* pObj = GetCrrRaceProp( nRace ); if( viewport->GetAttributes() & KViewportObject::VIEWPORT_SHADOW ) { DWORD renderFlag = MAKELONG( KRenderObject::RENDEREFX_SHADOW, SHADOW_DY_CAST ); pAvatar->Render( viewport, renderFlag ); } else { if( pObj ) pObj->Render( viewport ); pAvatar->Render( viewport ); if( pEffect ) pEffect->Render( viewport ); } } KSeqObject* SGameRenewalLobby::GetCrrRaceProp( int nRace ) { switch( nRace ) { case GCLAN_DEVA: return m_pDevaNX3Prop; case GCLAN_GAIA: return m_pGaiaNX3Prop; case GCLAN_ASURA: return m_pAsuraNX3Prop; } return NULL; } void SGameRenewalLobby::SetToCharSelectState( int nSelectIndex ) { _oprint( "Character Selection Mode\n" ); SetCurState( GAMELOGIN_CHARSELECT ); m_BgScene->activate( false ); m_BgScene_Pane_Type02->activate(false); m_BgScene_Pane_Type02->play(false); m_BgScene_Pane_Type03->activate(true); m_BgScene_Pane_Type03_right->activate(true); m_BgScene_ClanDesc_Asura->activate(false); m_BgScene_ClanDesc_Deva->activate(false); m_BgScene_ClanDesc_Gaia->activate(false); m_BgScene_ClanSelect_Asura->activate(false); m_BgScene_ClanSelect_Gaia->activate(false); m_BgScene_ClanSelect_Deva->activate(false); m_BgScene_ClanSelect->activate(false); m_bRatateL = false; m_bRatateR = false; if( 0 <= nSelectIndex && nSelectIndex < GameRule::nMaxCharactersPerAccount ) { AvatarSelect( nSelectIndex ); //이안에서 m_nSelectedCharIndex 를 쎄팅한다. } if( m_BeforeCharListState == GAMELOGIN_GAMESERVER_LOGIN ) { m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERLIST, false) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERNOTICE, false) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERMENU, false) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERSCREENSHOT, false) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERTEXT, false) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LICENSE, false ) ); SetOtherNavigateClose( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SCREENSHOT ); } else if( m_BeforeCharListState == GAMELOGIN_CREATECHAR_CUSTOMIZING || m_BeforeCharListState == GAMELOGIN_CREATECHAR_SUCCESS ) { m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_SECOND, false) ); } else if( m_BeforeCharListState == GAMELOGIN_CREATECHAR_RACE_SELECT_BACK ) { m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_RACE_SELECT, false) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_RACE_DESC, false) ); } m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARSELECT, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SELECTCHAR_INFO, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, true ) ); ////m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE01, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARNAMELIST, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARSELECTTEXT, true) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING01, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING02, false ) ); m_pGameMng->PostMsgAtDynamic( new SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARNAMELIST, "set_focus_charnamelist_wnd" ) ); if( m_pGameMng->IsShowLoadingWnd() ) m_pGameMng->SetShowLoadingWnd( false ); if( m_bCreateCharSuccess ) { m_pGameMng->PostMsgAtDynamic( new SMSG_SEND_DATA( "CreateMotion" ) ); } if (m_pGameMng) //m_pGameMng->UpdateLoadingProgress(0.0f); m_pGameMng->InitLoadingBar(); } void SGameRenewalLobby::SetToIntroState(bool bPlayIntromove) { _oprint("Intro출력\n"); SetCurState( GAMELOGIN_INTRO ); m_strCrrBGM = ""; m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_LOGO, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_SUBTITLE, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_PUBLISHER, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_COPYRIGHT_LOGO, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_GAMERATING, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_SUBMENU, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_TEXT, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING01, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING02, false ) ); //m_BgScene->activate(false); //m_BgScene_Pane_Type02->activate(false); // 2010.07.06 - prodongi /* static bool b_FirstIntro = true; if(b_FirstIntro == false) { m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_INTRO_SUB, true ) ); } b_FirstIntro = false; */ m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_INTRO_SUB, true ) ); if(m_IntroScene) { // 2010.07.06 - prodongi //m_pSceneMgr->addScene( *m_IntroScene ); m_pSceneMgr->addScene(*m_IntroScene, m_BgScene_ClanDesc_Gaia); m_IntroScene->activate(); m_IntroScene->play(true); } if(m_IntroScene_Navislamia) { m_IntroScene_Navislamia->activate(false); m_IntroScene_Navislamia->play(false); m_pSceneMgr->removeScene( *m_IntroScene_Navislamia ); } if(m_IntroScene_GoldenMonarch) { m_IntroScene_GoldenMonarch->activate(false); m_IntroScene_GoldenMonarch->play(false); m_pSceneMgr->removeScene( *m_IntroScene_GoldenMonarch ); } } void SGameRenewalLobby::SetToLoginState() { _oprint( "로긴 모드\n" ); SetCurState( GAMELOGIN_LOGIN ); m_TryConnectAuthServer = false; m_BgScene->activate(); m_BgScene->play(); m_BgScene->SetAdditiveRenderMode(true); m_BgScene_Pane_Type02->activate(); m_BgScene_Pane_Type02->play(); //m_BgScene_Pane_Type02->activate(false); m_BgScene_Pane_Type03->activate(false); m_BgScene_Pane_Type03_right->activate(false); if(m_CreditsScene) { m_CreditsScene->activate( false ); m_CreditsScene->play(false); m_pSceneMgr->removeScene2( *m_CreditsScene ); } if(m_CreditsScene2) { m_CreditsScene2->activate( false ); m_CreditsScene2->play(false); m_pSceneMgr->removeScene2( *m_CreditsScene2 ); } if(m_CreditsScene3) { m_CreditsScene3->activate( false ); m_CreditsScene3->play(false); m_pSceneMgr->removeScene2( *m_CreditsScene3 ); } if( m_CreditsScene4 ) { m_CreditsScene4->activate( false ); m_CreditsScene4->play(false); m_pSceneMgr->removeScene2( *m_CreditsScene4 ); } if(m_IntroScene) { m_IntroScene->activate( false); m_IntroScene->play(false); m_pSceneMgr->removeScene2( *m_IntroScene ); //SAFE_DELETE(m_IntroScene); } if(m_IntroScene_Navislamia) { m_IntroScene_Navislamia->activate( false); m_IntroScene_Navislamia->play(false); m_pSceneMgr->removeScene( *m_IntroScene_Navislamia ); } if(m_IntroScene_GoldenMonarch) { m_IntroScene_GoldenMonarch->activate( false); m_IntroScene_GoldenMonarch->play(false); m_pSceneMgr->removeScene( *m_IntroScene_GoldenMonarch ); } m_BgScene_ClanDesc_Asura->activate(false); m_BgScene_ClanDesc_Deva->activate(false); m_BgScene_ClanDesc_Gaia->activate(false); m_BgScene_ClanSelect_Asura->activate(false); m_BgScene_ClanSelect_Gaia->activate(false); m_BgScene_ClanSelect_Deva->activate(false); m_BgScene_ClanSelect->activate(false); //m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREDIT, true ) ); //m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREDIT_TEXT, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREDIT, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREDIT_TEXT, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_INTRO_SUB, false ) ); m_nSelectChrRace = -1; m_nSelectedCharIndex = -1; //if( !m_strCrrBGM.empty() ) //{ // m_pMSoundMgr->PlayBGM( m_strCrrBGM.c_str(), 100, true ); //} if(m_strCrrBGM != "rappelz_newmain.mp3") { if(m_strCrrBGM.empty()) { m_strCrrBGM = "rappelz_newmain.mp3";//c_szLOBBY_BGM[GetGameOption().GetLobbyTheme()]; m_pMSoundMgr->PlayBGM( m_strCrrBGM.c_str(), 50, true ); } else { m_strCrrBGM = "rappelz_newmain.mp3"; m_pMSoundMgr->SwapPlayBGM(m_strCrrBGM.c_str(),100,1000,50,true); } m_pMSoundMgr->StopMusic(); } m_dwBlendStartTime = 0; // floyd 3.11.1 iMBC 채널링 구현 if( ENV().IsExist( "imbclogin" ) ) { std::string strAccount = ENV().GetString( "account" ); std::string strPassword = ENV().GetString( "password" ); if( (!strAccount.empty() && !strPassword.empty() ) && strAccount != "" && strPassword!= "" ) { //대만 웹 로그인 임. ProcMsgAtStatic( &SIMSG_LOGIN_IMBC_ACCOUNT( strAccount.c_str(), strPassword.c_str() ) ); } } /* 2011.10.05 대만의 웹 로그인 방식 삭제(안 쓰임) - prodongi else if( stricmp( ENV().GetString( "locale" ).c_str(), "BIG5" ) == 0 && stricmp( ENV().GetString( "country" ).c_str(), "TW" ) == 0 ) { if( !ENV().IsExist( "noautologin" ) ) { std::string strAccount = ENV().GetString( "account" ); std::string strOTP = ENV().GetString( "otp" ); if( (!strAccount.empty() && !strOTP.empty() ) && strAccount != "" && strOTP != "" ) { //대만 웹 로그인 임. ProcMsgAtStatic( &SIMSG_LOGIN_OTP_ACCOUNT( strAccount.c_str(), strOTP.c_str() ) ); } } else { m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_LOGO, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_SUBTITLE, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_PUBLISHER, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_COPYRIGHT_LOGO, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_GAMERATING, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_SUBMENU, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_TEXT, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING01, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING02, false ) ); } } */ else { bool bWebLogin( ENV().IsExist( "web_login" ) ); if( !bWebLogin ) { m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_LOGO, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_SUBTITLE, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_PUBLISHER, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_COPYRIGHT_LOGO, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_GAMERATING, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_SUBMENU, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_TEXT, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING01, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING02, false ) ); } if( ENV().IsExist( "noautologin" ) ) { m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_LOGO, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_SUBTITLE, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_PUBLISHER, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_COPYRIGHT_LOGO, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_GAMERATING, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_SUBMENU, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_TEXT, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING01, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING02, false ) ); } } if(GetLocaleOption().GetValueString("LOGIN_RAPPELZ_LOGO",NULL) == NULL) m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_LOGO, false ) ); if(GetLocaleOption().GetValueString("LOGIN_PUBLISHER_LOGO",NULL) == NULL) m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_PUBLISHER, false ) ); // sonador #2.3.3.4 (국내) copy rights 변경 if(GetLocaleOption().GetValueString("LOGIN_RAPPELZ_SUBTITLE",NULL) == NULL) m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_SUBTITLE, false ) ); if(GetLocaleOption().GetValueString("LOGIN_NFLAVOR_LOGO",NULL) == NULL) m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_COPYRIGHT_LOGO, false ) ); SetOtherNavigateClose( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SCREENSHOT ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERNOTICE, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERLIST, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERMENU, false) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERSCREENSHOT, false) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERTEXT, false) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LICENSE, false ) ); if(m_DisconnectAuthServer) { m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL, SYS_MSG_SERVER_DISCONNECT ) ); m_DisconnectAuthServer = false; } //m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GAME_RATING, true ) ); //게임 등급 //m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GAME_RATING_18ONLY, true ) ); //게임 등급 } void SGameRenewalLobby::SetToLogOut() { m_pGameMng->CloseToServer(); m_pGameMng->ClearDummy(); m_bUseCharacterSelect = false; if( m_pAuthConn ) m_pAuthConn->Close(); SAFE_DELETE( m_pAuthConn ); SAFE_DELETE( m_pRecvQueue ); m_pAuthConn = new XSyncStreamConnection( true, true ); m_pRecvQueue = IQueue::MakeQueue( 1*1024 ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARSELECT, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARNAMELIST, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SELECTCHAR_INFO, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARSELECTTEXT, false) ); //m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE01, false ) ); } void SGameRenewalLobby::RequestCharacterList() { TS_CS_CHARACTER_LIST msgCharList; // #2.1.12 msgCharList.account[ GameRule::MAX_ACCOUNT_LEN ] = '\0'; ::strncpy( msgCharList.account, g_UserInfo.GetAccountName(), GameRule::MAX_ACCOUNT_LEN ); PendMessage( &msgCharList ); } void SGameRenewalLobby::SetToRaceSelectState() { _oprint( "SGameRenewalLobby::SetToRaceSelectState()\n" ); SetCurState( GAMELOGIN_CREATECHAR_RACE_SELECT ); m_nSelectCustomRace = -1; if(m_strCrrBGM != "05_Pioneer_of_Distorted_Land.ogg") { if(m_strCrrBGM.empty()) { m_strCrrBGM = "05_Pioneer_of_Distorted_Land.ogg"; m_pMSoundMgr->PlayBGM( m_strCrrBGM.c_str(), 100, true ); } else { m_strCrrBGM = "05_Pioneer_of_Distorted_Land.ogg"; m_pMSoundMgr->SwapPlayBGM(m_strCrrBGM.c_str(),100,1000,1000,true); } } m_pMSoundMgr->StopMusic(); m_BgScene->activate(false); m_BgScene_Pane_Type02->activate(true); m_BgScene_Pane_Type02->play(); //m_BgScene_Pane_Type02->activate(false); m_BgScene_Pane_Type03->activate(false); m_BgScene_Pane_Type03_right->activate(false); m_BgScene_ClanDesc_Asura->activate(false); m_BgScene_ClanDesc_Deva->activate(false); m_BgScene_ClanDesc_Gaia->activate(false); m_BgScene_ClanSelect_Asura->activate(true); m_BgScene_ClanSelect_Deva->activate(true); m_BgScene_ClanSelect_Gaia->activate(true); m_BgScene_ClanSelect_Gaia->setLocalVisibility(0.f); m_BgScene_ClanSelect_Deva->setLocalVisibility(0.f); m_BgScene_ClanSelect_Asura->setLocalVisibility(0.f); m_BgScene_ClanSelect->activate(true); SetOtherNavigateClose( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SCREENSHOT ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERNOTICE, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERLIST, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERMENU, false) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERSCREENSHOT, false) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERTEXT, false) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LICENSE, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARSELECT, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARNAMELIST, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SELECTCHAR_INFO, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, false ) ); //m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE01, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARSELECTTEXT, false) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_RACE_SELECT, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_RACE_DESC, false) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING01, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING02, false ) ); //m_pGameMng->InterfaceMsg( &SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_RACE_DESC, "init_movie" ) ); } void SGameRenewalLobby::SetToCreditsState(_LOGIN_STATE state, rp::SGameSceneIPtr& creditsScene, char const* filmFileFormat, int filmCount) { _oprint( "크레딧 모드\n" ); SetCurState( state ); m_strCrrBGM = ""; m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_LOGO, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_SUBTITLE, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_PUBLISHER, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_COPYRIGHT_LOGO, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_GAMERATING, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_SUBMENU, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_TEXT, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING01, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING02, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREDIT, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREDIT_TEXT, true ) ); rp::SGameCreditsScene* _CreditsScene = static_cast< rp::SGameCreditsScene* >( creditsScene.get() ); if(_CreditsScene) { if(_CreditsScene->getFilmCount() == 0) { std::string fileName; for (int i = 0; i < filmCount; ++i) { XStringUtil::Format(fileName, filmFileFormat, i+1); _CreditsScene->addFilm(fileName.c_str()); } } } if(creditsScene) { // 2010.07.06 - prodongi //m_pSceneMgr->addScene( *m_CreditsScene ); m_pSceneMgr->addScene(*creditsScene, m_BgScene_ClanDesc_Gaia); creditsScene->play(false); creditsScene->play(true); creditsScene->activate(); m_BgScene->SetAdditiveRenderMode(false); } // 2010.07.06 - prodongi m_BgScene_Pane_Type02->activate(true); m_BgScene_Pane_Type02->play(true); m_BgScene_Pane_Type03->activate(false); m_BgScene_Pane_Type03->play(false); } void SGameRenewalLobby::SetToCreditsState() { removeSceneInactivate(m_CreditsScene2); removeSceneInactivate(m_CreditsScene3); removeSceneInactivate(m_CreditsScene4); SetToCreditsState(GAMELOGIN_CREDITS, m_CreditsScene, "epic5_credit_%02d.jpg", 16); } void SGameRenewalLobby::SetToCredits2State() { removeSceneInactivate(m_CreditsScene); removeSceneInactivate(m_CreditsScene3); removeSceneInactivate(m_CreditsScene4); SetToCreditsState(GAMELOGIN_CREDITS2, m_CreditsScene2, "epic6_credit_%02d.jpg", 17); } void SGameRenewalLobby::removeSceneInactivate(rp::SGameSceneIPtr& creditsScene) { if(creditsScene) { creditsScene->activate(false); m_pSceneMgr->removeScene( *creditsScene ); } } void SGameRenewalLobby::SetToCredits3State() { removeSceneInactivate(m_CreditsScene); removeSceneInactivate(m_CreditsScene2); removeSceneInactivate(m_CreditsScene4); SetToCreditsState(GAMELOGIN_CREDITS3, m_CreditsScene3, "epic7_credit_%02d.jpg", 16); } void SGameRenewalLobby::SetToCredits4State() { removeSceneInactivate(m_CreditsScene); removeSceneInactivate(m_CreditsScene2); removeSceneInactivate(m_CreditsScene3); SetToCreditsState(GAMELOGIN_CREDITS4, m_CreditsScene4, "epic8_credit_%02d.jpg", 16); } void SGameRenewalLobby::InitCostomizingAvatar( int nRace, int nSex, SAvatarSelector* pSelectAvatar ) { if( pSelectAvatar == NULL ) return; pSelectAvatar->SetRace(nRace); pSelectAvatar->SetSex( nSex ); pSelectAvatar->SetNudeCode( MODEL_INFO::NUDE_HAIR, GetDefaultItemDB().GetHairID(0) ); pSelectAvatar->SetNudeCode( MODEL_INFO::NUDE_FACE, GetDefaultItemDB().GetFaceID(0) ); pSelectAvatar->SetNudeCode( MODEL_INFO::NUDE_BODY, GetDefaultItemDB().GetBodyID(0) ); pSelectAvatar->SetNudeCode( MODEL_INFO::NUDE_HAND, GetDefaultItemDB().GetHandID(0) ); pSelectAvatar->SetNudeCode( MODEL_INFO::NUDE_FOOT, GetDefaultItemDB().GetFootID(0) ); pSelectAvatar->SetHairIndex( 0 ); pSelectAvatar->SetFaceIndex( 0 ); pSelectAvatar->SetBodyIndex( 0 ); pSelectAvatar->SetHandIndex( 0 ); pSelectAvatar->SetFootIndex( 0 ); pSelectAvatar->SetDecoIndex( 1 ); for( int i(0); ItemBase::MAX_ITEM_WEAR > i; i++ ) { pSelectAvatar->SetWearIndex( i, 0, 0 ); } if (XRandom(0, 1) == 0) { int nRandIndex = SUICreateCharSecondDlg::m_CharacterHairDyesMap->at(XRandom(330, 333)); pSelectAvatar->SetHairColorRGB(-16777216); pSelectAvatar->SetHairColorIndex(nRandIndex); } else { int nRandRGB = SUICreateCharSecondDlg::m_CharacterHairDyesMap->at(XRandom(300, 329)); pSelectAvatar->SetHairColorRGB(nRandRGB); pSelectAvatar->SetHairColorIndex(0); } pSelectAvatar->RefreshAvatar(); // Default hair color is 0 unsigned long color_value = GetSkinColorTable().GetColorValue( nRace - GCLAN_GAIA, 0 ); pSelectAvatar->SetSkinColorized( color_value, K3DTexture::COLORIZED_DEF, color_value ); } void SGameRenewalLobby::InitCostomizingAvatars( int nRace ) { switch(nRace) { case GCLAN_DEVA: { InitCostomizingAvatar( GCLAN_DEVA, SEX_MALE, m_pDevaManAvatar ); InitCostomizingAvatar( GCLAN_DEVA, SEX_FEMALE, m_pDevaWomanAvatar ); break; } case GCLAN_GAIA: { InitCostomizingAvatar( GCLAN_GAIA, SEX_MALE, m_pGaiaManAvatar ); InitCostomizingAvatar( GCLAN_GAIA, SEX_FEMALE, m_pGaiaWomanAvatar ); break; } case GCLAN_ASURA: { InitCostomizingAvatar( GCLAN_ASURA, SEX_MALE, m_pAsuraManAvatar ); InitCostomizingAvatar( GCLAN_ASURA, SEX_FEMALE, m_pAsuraWomanAvatar ); break; } } } const char* SGameRenewalLobby::GetRaceOptionFile( int nRace ) { switch( nRace ) { case GCLAN_GAIA: return c_pBG_Set[ 0 ]; case GCLAN_DEVA: return c_pBG_Set[ 1 ]; case GCLAN_ASURA: return c_pBG_Set[ 2 ]; } return NULL; } void SGameRenewalLobby::SetToCostomizing() { _oprint( "Character customization initialization\n" ); SetCurState( GAMELOGIN_CREATECHAR_CUSTOMIZING ); m_BgScene_Pane_Type02->activate(false); m_BgScene_Pane_Type02->play(false); m_BgScene_Pane_Type03->activate(true); m_BgScene_Pane_Type03_right->activate(true); m_BgScene_ClanSelect->activate(false); m_BgScene_ClanDesc_Asura->activate(false); m_BgScene_ClanDesc_Deva->activate(false); m_BgScene_ClanDesc_Gaia->activate(false); m_BgScene_ClanSelect_Asura->activate(false); m_BgScene_ClanSelect_Gaia->activate(false); m_BgScene_ClanSelect_Deva->activate(false); //InitQJTVs(); ChangeCharacterBG( m_nSelectCustomRace ); LobbySetforGameRes( GetRaceOptionFile( m_nSelectCustomRace ) ); // Light, sky and camera InitCostomizingAvatars( m_nSelectCustomRace ); SAvatarSelector* pAvatar = GetCrrCustomizingAvatar(); if( pAvatar ) { pAvatar->AvatarRotate(c_fInitRotate, false, true); m_bRatateL = false; m_bRatateR = false; SendCustomizingMsgToWnd( pAvatar ); } m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_RACE_SELECT, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_RACE_DESC, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING01, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING02, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARSELECTTEXT, true) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_SECOND, true) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, true) ); m_nNewCameraIndex = LOBBY_CAMERA_ZOOMOUT; m_pGameMng->InterfaceMsg( &SIMSG_UI_CUSTOM( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, SIMSG_UI_CUSTOM::BUTTON_ON ) ); m_pGameMng->InterfaceMsg( &SIMSG_UI_CUSTOM( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, SIMSG_UI_CUSTOM::BUTTON_CHANGE ) ); KSeqForm* pCamera = GetRaceCamera( m_nSelectCustomRace ); if( pCamera ) pCamera->PlayAnimation( m_dwTime, pCamAniKey[LOBBY_CAMERA_ZOOMOUT], SEQTYPE_LOOP ); } void SGameRenewalLobby::SetToServerSelectState() { _oprint( "Server selection mode\n" ); SetCurState( GAMELOGIN_SERVERSELECT ); if( m_bIsCan_ReqServerList ) SetToServerSelectStateOn(); } void SGameRenewalLobby::CheckCamera( KSeqForm * pCamera ) { if( m_nNewCameraIndex == LOBBY_CAMERA_ZOOMING && !pCamera->IsPlaying() ) { m_nNewCameraIndex = LOBBY_CAMERA_ZOOM; pCamera->PlayAnimation( m_dwTime, pCamAniKey[LOBBY_CAMERA_ZOOM], SEQTYPE_LOOP ); m_pGameMng->InterfaceMsg( &SIMSG_UI_CUSTOM( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, SIMSG_UI_CUSTOM::BUTTON_OUT_ANI ) ); m_pGameMng->InterfaceMsg( &SIMSG_UI_CUSTOM( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, SIMSG_UI_CUSTOM::BUTTON_ON ) ); m_pGameMng->InterfaceMsg( &SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_SECOND, number_t( false ), "ani_cam" ) ); m_pGameMng->InterfaceMsg( &SIMSG_UI_CUSTOM( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, SIMSG_UI_CUSTOM::BUTTON_ALLON ) ); } else if( m_nNewCameraIndex == LOBBY_CAMERA_ZOOMING_OUT && !pCamera->IsPlaying() ) { m_nNewCameraIndex = LOBBY_CAMERA_ZOOMOUT; pCamera->PlayAnimation( m_dwTime, pCamAniKey[LOBBY_CAMERA_ZOOMOUT], SEQTYPE_LOOP ); m_pGameMng->InterfaceMsg( &SIMSG_UI_CUSTOM( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, SIMSG_UI_CUSTOM::BUTTON_IN_ANI ) ); m_pGameMng->InterfaceMsg( &SIMSG_UI_CUSTOM( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, SIMSG_UI_CUSTOM::BUTTON_ON ) ); m_pGameMng->InterfaceMsg( &SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_SECOND, number_t( false ), "ani_cam" ) ); m_pGameMng->InterfaceMsg( &SIMSG_UI_CUSTOM( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, SIMSG_UI_CUSTOM::BUTTON_ALLON ) ); } else if( m_nNewCameraIndex == LOBBY_CAMERA_CHANGE && !pCamera->IsPlaying() ) { m_nNewCameraIndex = LOBBY_CAMERA_ZOOM; pCamera->PlayAnimation( m_dwTime, pCamAniKey[LOBBY_CAMERA_ZOOM], SEQTYPE_LOOP ); m_pGameMng->InterfaceMsg( &SIMSG_UI_CUSTOM( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, SIMSG_UI_CUSTOM::BUTTON_ALLON) ); m_pGameMng->InterfaceMsg( &SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_SECOND, number_t( false ), "ani_cam" ) ); m_pGameMng->InterfaceMsg( &SIMSG_UI_CUSTOM( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, SIMSG_UI_CUSTOM::BUTTON_ALLON ) ); } } SAvatarSelector* SGameRenewalLobby::GetCrrCustomizingAvatar() { switch (m_nSelectCustomRace) { case GCLAN_GAIA: { return m_nSelectSex == SEX_MALE ? m_pGaiaManAvatar : m_pGaiaWomanAvatar; break; } case GCLAN_DEVA: { return m_nSelectSex == SEX_MALE ? m_pDevaManAvatar : m_pDevaWomanAvatar; break; } case GCLAN_ASURA: { return m_nSelectSex == SEX_MALE ? m_pAsuraManAvatar : m_pAsuraWomanAvatar; break; } } return NULL; } bool SGameRenewalLobby::Process( DWORD time, unsigned long uProcessBitVector ) { if( GetGameRef() == STAGE_END || GetGameRef() == STAGE_NOTHING ) return true; m_dwTime = time; if( m_dwBlendStartTime != 0 ) { if( m_dwTime - m_dwBlendStartTime > 1000 ) { m_dwBlendStartTime = 0; m_BlendSpritePrimitive.SetVisibility( 0.0f ); } else { float fValue = 1.f-(m_dwTime - m_dwBlendStartTime)/1000.f; m_BlendSpritePrimitive.SetVisibility( fValue ); } } if( m_pAuthConn && m_pRecvQueue ) { if( m_pAuthConn->IsReadable() || (m_pRecvQueue->Size() >= sizeof( TS_MESSAGE )) ) m_pGameMng->onReadEvent( m_pAuthConn, m_pRecvQueue ); //인증서버와 연결이 끊길 시 게임 종료 2009.09.03 sfreer //다시하자 =_=... if( GetCurState() == GAMELOGIN_SERVERSELECT_ON && m_TryConnectAuthServer && !m_pAuthConn->IsConnected() ) { m_DisconnectAuthServer = true; m_TryConnectAuthServer = false; SetToLogOut(); SetToLoginState(); //m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NOCONNECTSERVER, SYS_MSG_SERVER_DISCONNECT ) ); //m_TryConnectAuthServer = false; //OpenMessageBox( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_OK, SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NOCONNECTSERVER, false, SYS_MSG_SERVER_DISCONNECT ); } } if( m_bUseCharacterSelect ) { KTextureManager::GetManager()->ReloadRes( true ); // 인터페이스 새로 생성 m_pGameMng->InterfaceMsg( &SIMSG_UI_RELOAD(false) ); m_ThreadManager.StartThread( "SGameLobby", 1 ); m_ThreadManager.Push( m_pNoticeReceiver ); //캐릭터 요청 상태 m_dwStartCharSelectListWaitTime = m_dwTime; m_nAppointmentCharSelectIndex = 0; SetCurState( GAMELOGIN_BACK_CHARSELECT_TO_GAME ); RequestCharacterList(); m_bUseCharacterSelect = false; SGameObject::Activate(); } _LOGIN_STATE State = GetCurState(); if( State == GAMELOGIN_SERVERSELECT_ON || State == GAMELOGIN_PREPARE_CHARSELECT ) g_bServerListFocus = true; else g_bServerListFocus = false; if( State == GAMELOGIN_SERVERSELECT_ON || State == GAMELOGIN_PREPARE_CHARSELECT || State == GAMELOGIN_SERVERSELECT || State == GAMELOGIN_GAMESERVER_LOGIN ) g_bServerListSeen = true; else g_bServerListSeen = false; g_bCharListSeen = State == GAMELOGIN_CHARSELECT ? true : false; switch( State ) { case GAMELOGIN_CREATECHAR_RACE_SELECT: { if(m_ClanSelect_Asura_RollOver) { if( m_BgScene_ClanSelect_Asura->getLocalVisibility() < 1) m_BgScene_ClanSelect_Asura->setLocalVisibility( m_BgScene_ClanSelect_Asura->getLocalVisibility() + 0.02f); if( m_BgScene_ClanSelect_Asura->getLocalVisibility() > 1) m_BgScene_ClanSelect_Asura->setLocalVisibility( 1 ); } else { if( m_BgScene_ClanSelect_Asura->getLocalVisibility() > 0) m_BgScene_ClanSelect_Asura->setLocalVisibility( m_BgScene_ClanSelect_Asura->getLocalVisibility() - 0.02f); if( m_BgScene_ClanSelect_Asura->getLocalVisibility() < 0) m_BgScene_ClanSelect_Asura->setLocalVisibility( 0 ); } if(m_ClanSelect_Deva_RollOver) { if( m_BgScene_ClanSelect_Deva->getLocalVisibility() < 1) m_BgScene_ClanSelect_Deva->setLocalVisibility( m_BgScene_ClanSelect_Deva->getLocalVisibility() + 0.02f); if( m_BgScene_ClanSelect_Deva->getLocalVisibility() > 1) m_BgScene_ClanSelect_Deva->setLocalVisibility( 1 ); } else { if( m_BgScene_ClanSelect_Deva->getLocalVisibility() > 0) m_BgScene_ClanSelect_Deva->setLocalVisibility( m_BgScene_ClanSelect_Deva->getLocalVisibility() - 0.02f); if( m_BgScene_ClanSelect_Deva->getLocalVisibility() < 0) m_BgScene_ClanSelect_Deva->setLocalVisibility( 0 ); } if(m_ClanSelect_Gaia_RollOver) { if( m_BgScene_ClanSelect_Gaia->getLocalVisibility() < 1) m_BgScene_ClanSelect_Gaia->setLocalVisibility( m_BgScene_ClanSelect_Gaia->getLocalVisibility() + 0.02f); if( m_BgScene_ClanSelect_Gaia->getLocalVisibility() > 1) m_BgScene_ClanSelect_Gaia->setLocalVisibility( 1 ); } else { if( m_BgScene_ClanSelect_Gaia->getLocalVisibility() > 0) m_BgScene_ClanSelect_Gaia->setLocalVisibility( m_BgScene_ClanSelect_Gaia->getLocalVisibility() - 0.02f); if( m_BgScene_ClanSelect_Gaia->getLocalVisibility() < 0) m_BgScene_ClanSelect_Gaia->setLocalVisibility( 0 ); } } break; case GAMELOGIN_UNINITIALIZED: { SGameObject::Activate(); //게임 등급 //m_pGameMng->InterfaceMsg( &SIMSG_TOGGLE_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GAME_RATING ) ); //m_pGameMng->InterfaceMsg( &SIMSG_TOGGLE_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GAME_RATING_18ONLY ) ); //SetToPrepareLoginState(); //SetToIntroState(); SetToLoginState(); m_ThreadManager.StartThread( "SGameLobby", 1 ); m_ThreadManager.Push( m_pNoticeReceiver ); if( m_pSky ) m_pSky->Process( m_dwTime ); } break; case GAMELOGIN_DEVELOPERS_LOGIN: if( m_pSky ) m_pSky->Process( m_dwTime ); break; case GAMELOGIN_INTRO: { //mLastTime /*if(m_IntroScene == 0) { SetToLoginState(); } else*/ { } //else if(!m_IntroScene->isActivated())//&& m_IntroScene->getLastTime() > 0) //SetToLoginState();*/ if(m_IntroScene && m_IntroScene_Navislamia &&m_IntroScene_GoldenMonarch) { if(!m_IntroScene->isActivated() && !m_IntroScene_Navislamia->isActivated() && !m_IntroScene_GoldenMonarch->isActivated() ) SetToLoginState(); } } break; case GAMELOGIN_PREPARE_SERVERSELECT: { SetToServerSelectState(); } break; case GAMELOGIN_SERVERSELECT: case GAMELOGIN_SERVERSELECT_ON: case GAMELOGIN_GAMESERVER_LOGIN: { if( m_dwServerWaitStartTime && m_dwServerWaitTime ) { //대기가 끝났으면, 캐릭터 선택 화면으로 if( m_dwTime - m_dwServerWaitStartTime > m_dwServerWaitTime ) { m_pGameMng->ConnectToServer( m_SelectServer_IP.c_str(), m_SelectServer_PORT ); //게임서버에 접속 LoginAccount( g_UserInfo.GetAccountName(), m_one_time_key ); //TS_CS_ACCOUNT_WITH_AUTH 를 통해 인증 _oprint( "Waiting ended!\n" ); m_dwServerWaitStartTime = 0; m_dwServerWaitTime = 0; m_one_time_key = 0; } else { //MSG 박스 갱신 if( m_dwServerWaitStartTime && m_dwServerWaitTime ) { DWORD nTime = m_dwServerWaitTime - (m_dwTime - m_dwServerWaitStartTime); if( (nTime - m_dwMsgSendTime) >= 1000 ) { m_dwMsgSendTime = nTime; std::string strMsg; GetPendingTimeString( nTime, strMsg ); m_pGameMng->InterfaceMsg( &SIMSG_UPDATE_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_LOGINWAITING, strMsg.c_str() ) ); } } } } } break; case GAMELOGIN_CHARSELECT: { if( 0 <= m_nSelectedCharIndex && m_nSelectedCharIndex < GameRule::nMaxCharactersPerAccount ) { ProcessRaceBackGround_N_Avatar(m_nSelectChrRace, m_Avatars[ m_nSelectedCharIndex ].pAvatar); } } break; case GAMELOGIN_CREATECHAR_SUCCESS: { SAvatarSelector* pSelectAvatar = GetCrrCustomizingAvatar(); ProcessRaceBackGround_N_Avatar( m_nSelectCustomRace, pSelectAvatar, m_pCreateSuccessEffect ); if( !m_pCreateSuccessEffect || !m_pCreateSuccessEffect->IsPlaying() ) { SetToPrepareCharSelectState(true); m_bCreating = false; } } break; case GAMELOGIN_CREATECHAR_CUSTOMIZING: { SAvatarSelector* pSelectAvatar = GetCrrCustomizingAvatar(); ProcessRaceBackGround_N_Avatar(m_nSelectCustomRace, pSelectAvatar); } break; case GAMELOGIN_CHARSELECT_WAIT_TIME: { if( m_dwStartCharSelectListWaitTime - m_dwTime > 2000 ) { SetToCharSelectState( m_nAppointmentCharSelectIndex ); m_nAppointmentCharSelectIndex = -1; m_dwStartCharSelectListWaitTime = 0; } if( 0 <= m_nSelectedCharIndex && m_nSelectedCharIndex < GameRule::nMaxCharactersPerAccount ) { ProcessRaceBackGround_N_Avatar(m_nSelectChrRace, m_Avatars[ m_nSelectedCharIndex ].pAvatar); } } break; case GAMELOGIN_CREDITS: case GAMELOGIN_CREDITS2: case GAMELOGIN_CREDITS3: case GAMELOGIN_CREDITS4: { if(m_CreditsScene && m_CreditsScene2 && m_CreditsScene3 && m_CreditsScene4 ) { if( !m_CreditsScene->isActivated() && !m_CreditsScene2->isActivated() && !m_CreditsScene3->isActivated() && !m_CreditsScene4->isActivated()) { SetToLoginState(); } } } break; case GAMELOGIN_BACKTO_LOGOUT: { } break; } if( m_pSceneMgr ) m_pSceneMgr->tick( m_dwTime ); if( m_pCharaterBgSceneMgr ) m_pCharaterBgSceneMgr->tick( m_dwTime); if( NULL != m_pNoticeReceiver ) { if( m_pNoticeReceiver->IsFinished() ) { m_pGameMng->InterfaceMsg( &SIMSG_SET_NOTICEWND( m_pNoticeReceiver->GetNotice().c_str() ) ); SAFE_DELETE( m_pNoticeReceiver ); } } return true; } void SGameRenewalLobby::ProcessRaceBackGround_N_Avatar( int nRace, SAvatarSelector* pSelectAvatar, KSeqModel* pEffect/*=NULL*/ ) { if( GetGameRef() == STAGE_END || GetGameRef() == STAGE_NOTHING ) return; if( m_pSky ) m_pSky->Process( m_dwTime ); KSeqForm* pCamera = GetRaceCamera( nRace ); if( pCamera ) pCamera->Process( m_dwTime ); KSeqForm* pNX3Obj = GetRaceNX3obj( nRace ); if( pNX3Obj ) pNX3Obj->Process( m_dwTime ); if( nRace == GCLAN_ASURA ) { for( int i(0); i < c_nAsuraNX3EffectMaxPos; ++ i ) { if( m_pAsuraNX3DffectProp[i] ) m_pAsuraNX3DffectProp[i]->Process(m_dwTime); } } if( pSelectAvatar ) { if( m_bRatateL || m_bRatateR ) RotationAvatar_Z( pSelectAvatar, m_bRatateL ); if( m_bCreateCharSuccess ) { if( !pSelectAvatar->IsPlaying() ) { pSelectAvatar->Ani_Default(); m_bCreateCharSuccess = false; } } pSelectAvatar->Process( m_dwTime ); KSeqForm* pCamera = GetRaceCamera( nRace ); if( pCamera ) CheckCamera( pCamera ); if( pEffect ) pEffect->Process( m_dwTime ); } } void SGameRenewalLobby::ProcessAvatars( DWORD dwTime ) { if( 0 <= m_nSelectedCharIndex && m_nSelectedCharIndex < GameRule::nMaxCharactersPerAccount ) { SAvatarSelector* pAvatar = m_Avatars[ m_nSelectedCharIndex ].pAvatar; if( pAvatar ) pAvatar->Process( dwTime ); } } void SGameRenewalLobby::SetAvatarSelectStart() { m_bUseCharacterSelect = true; //m_bIncrease = true; m_pGameMng->InterfaceMsg( &SIMSG_UI_OPEN_UPDATE( true ) ); } void SGameRenewalLobby::Bot_Accept( int nSelect, const char * pName ) { SDEBUGLOG("SGameRenewalLobby::Bot_Accept() - fucntion begin"); SetGameRef( STAGE_END ); RemoveModelFiles(); SDEBUGLOG("SGameRenewalLobby::Bot_Accept() - fucntion end"); } void SGameRenewalLobby::SetCurState( _LOGIN_STATE state ) { m_CurrentState = state; _oprint( "SGameLogin::SetCurState [%d] : %s\n", state, pLOGIN_STATE[state] ); } void SGameRenewalLobby::AuthPendMessage( const TS_MESSAGE * pMessage ) { if( m_pGameMng ) m_pGameMng->ConnPendMessage( m_pAuthConn, pMessage ); } void SGameRenewalLobby::LoginAccount( const char* szAccount, __int64 & one_time_key ) { ::LoginAccount( this, szAccount, one_time_key ); } void SGameRenewalLobby::RotationAvatar_Z( SAvatarSelector* pAvatar, bool bRatateL ) { if( pAvatar == NULL ) return; if( bRatateL ) //pAvatar->AvatarRotate( 1.f*K3D_PI/180.f, !bRatateL ); pAvatar->AvatarRotate( 1.f*K3D_PI/180.f, false ); else pAvatar->AvatarRotate( 1.f*K3D_PI/180.f, true ); } void SGameRenewalLobby::ChangeCharacterBG( int nRace ) { m_Bg_Deva->activate(false); m_Bg_Asura->activate(false); m_Bg_Gaia->activate(false); switch( nRace ) { case GCLAN_GAIA: m_Bg_Gaia->activate(); break; case GCLAN_DEVA: m_Bg_Deva->activate(); break; case GCLAN_ASURA: m_Bg_Asura->activate(); break; } } /* void SGameRenewalLobby::ChangeQJTV( int nRace ) { std::string strMoviewName; switch( nRace ) { case GCLAN_GAIA: strMoviewName = szBG_Gaia; break; case GCLAN_DEVA: strMoviewName = szBG_Deva; break; case GCLAN_ASURA: strMoviewName = szBG_Asura; break; } m_pMuitiQJTV->SetCrrMovie( strMoviewName.c_str() ); m_pMuitiQJTV->SetState( QJTV::STARTPLAY ); } */ void SGameRenewalLobby::AvatarSelect( int nSelectIndex/* = (-1)*/ ) { if( nSelectIndex < 0 ) { g_UserInfo.SetClassName(""); g_UserInfo.SetLevel(0); } if( m_nCharacterCount == 0 ) return; // Disable character selection during camera zoom in/out animation to avoid jerky scene transitions if( IsCameraZooming( m_nSelectChrRace ) ) return; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if( m_nSelectChrRace != m_nSelectCustomRace || (-1) <= nSelectIndex && nSelectIndex < m_nCharacterCount && m_nSelectedCharIndex != nSelectIndex ) { // Use the existing one if( (-1) != m_nSelectedCharIndex ) { m_Avatars[ m_nSelectedCharIndex ].pAvatar->Ani_Default(); } if( nSelectIndex >= 0 ) { int nRace = m_Avatars[ nSelectIndex ].pAvatar->GetRace(); K3DVector vAvatarPos; GetRaceEventPos(nRace, vAvatarPos); m_Avatars[nSelectIndex].pAvatar->AvatarRotate(c_fInitRotate, false, true); if( m_nSelectedCharIndex != -1 ) { // Create previous frame RenderRaceBackGround_N_Avatar(m_pViewPort, m_pChildViewPort[0], m_nSelectChrRace, m_Avatars[ m_nSelectedCharIndex ].pAvatar); m_pViewPort->Render( m_spBlendSource, 0, true ); m_dwBlendStartTime = m_dwTime; m_BlendSpritePrimitive.SetVisibility( 1.0f ); } m_nSelectedCharIndex = nSelectIndex; m_nSelectChrRace = nRace; //GetRaceIndex(nRace) -> 안에서 이미 0, c_nMaxRace사이의 값으로 옳바른 인덱스를 return 해준다. ChangeCharacterBG( nRace ); // PlayRaceSound( nRace ); //라이트.. 카메라 변경 LobbySetforGameRes( GetRaceOptionFile(nRace) ); // 2010.04.22 - prodongi // GetDefaultTextureResourceDB().SetDecoIndex( m_Avatars[ m_nSelectedCharIndex ].pAvatar->GetDecoIndex() ); GetSelectedAvatarInfo().setDecoIndex( m_Avatars[ m_nSelectedCharIndex ].pAvatar->GetDecoIndex() ); // Setting hair color index&color GetSelectedAvatarInfo().setHairColorIndex(m_Avatars[ m_nSelectedCharIndex ].pAvatar->GetHairColorIndex()); DWORD HairColorRGBValue = m_Avatars[m_nSelectedCharIndex].pAvatar->GetHairColorRGB();// &0x00FFFFFF; _oprint("HairColorRGBValue: %u\n", HairColorRGBValue); GetSelectedAvatarInfo().setHairColorRgb( HairColorRGBValue ); // 2010.05.20 - prodongi GetSelectedAvatarInfo().setHideEquipInfo(m_Avatars[m_nSelectedCharIndex].pAvatar->getHideEquipInfo()); } //새로 선택 된 것 if( (-1) != m_nSelectedCharIndex ) { g_UserInfo.SetLevel( m_Avatars[ m_nSelectedCharIndex ].pAvatar->GetLevel() ); int nJobID = m_Avatars[ m_nSelectedCharIndex ].pAvatar->GetJobID(); if( nJobID >= 0 ) g_UserInfo.SetClassName( GetJobDB().GetJobName( nJobID ) ); else g_UserInfo.SetClassName( "" ); RefreshCharNameWindow(); } KSeqForm* pCamera = GetRaceCamera( m_nSelectChrRace ); if( pCamera ) { m_pGameMng->InterfaceMsg( &SIMSG_UI_CUSTOM( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, SIMSG_UI_CUSTOM::BUTTON_ON ) ); pCamera->PlayAnimation( m_dwTime, pCamAniKey[m_nNewCameraIndex], SEQTYPE_LOOP ); if( m_nNewCameraIndex == LOBBY_CAMERA_ZOOMOUT ) { m_pGameMng->InterfaceMsg( &SIMSG_UI_CUSTOM( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, SIMSG_UI_CUSTOM::BUTTON_IN_ANI ) ); } else if( m_nNewCameraIndex == LOBBY_CAMERA_ZOOM ) { m_pGameMng->InterfaceMsg( &SIMSG_UI_CUSTOM( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, SIMSG_UI_CUSTOM::BUTTON_OUT_ANI ) ); } } } } bool SGameRenewalLobby::IsCameraZooming( int nRace, int nCameraIndex/*-1*/ ) { KSeqForm* pCamera = GetRaceCamera( nRace ); if( pCamera && pCamera->IsPlaying() ) { if( m_nNewCameraIndex == nCameraIndex ) return true; else if( m_nNewCameraIndex == nCameraIndex ) return true; else if( nCameraIndex == -1 ) { if( m_nNewCameraIndex == LOBBY_CAMERA_ZOOMING || m_nNewCameraIndex == LOBBY_CAMERA_ZOOMING_OUT ) return true; } } return false; } void SGameRenewalLobby::CreateNewAvatar( const char* szName ) { ::CreateNewAvatar( this, szName, m_pNewAvatar ); } void SGameRenewalLobby::_gotoAccount() { if( m_CurrentState != GAMELOGIN_SERVERSELECT_ON && m_CurrentState != GAMELOGIN_PREPARE_CHARSELECT && m_CurrentState != GAMELOGIN_GAMESERVER_LOGIN ) return; //서버응답이 와야 로그인으로 갈 수 있다. //창 닫기 m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERLIST, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERNOTICE, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERMENU, false) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERSCREENSHOT, false) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERTEXT, false) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LICENSE, false ) ); SetOtherNavigateClose( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SCREENSHOT ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARSELECT, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARNAMELIST, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SELECTCHAR_INFO, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARSELECTTEXT, false) ); //m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE01, false ) ); ////로그 아웃 처리임. SetToLogOut(); SetToLoginState(); m_dwServerWaitTime = 0; m_dwServerWaitStartTime = 0; m_one_time_key = 0; } void SGameRenewalLobby::RefreshCharNameWindow() { for ( int n( 0 ); n < GameRule::nMaxCharactersPerAccount; ++n ) { if( n < m_nCharacterCount ) { m_pGameMng->InterfaceMsg( &SIMSG_CHARLIST_SELECTEDINFO ( n , m_Avatars[n].pAvatar->GetLevel() , m_Avatars[n].pAvatar->GetJobLevel() , m_Avatars[n].pAvatar->GetJobID() , m_Avatars[n].pAvatar->GetName() , (n == m_nSelectedCharIndex) ) ); } else m_pGameMng->InterfaceMsg( &SIMSG_CHARLIST_SELECTEDINFO( n ) ); } } void SGameRenewalLobby::GameStart( const char* szName, int nRace ) { // m_pGameMng->StartSound( "ui_click_select01.wav" ); SDEBUGLOG("SGameRenewalLobby::GameStart - fucntion begin"); SDEBUGLOG("name[%s] race[%d]", szName, nRace); assert( _CrtCheckMemory( ) ); m_pGameMng->InterfaceMsg( &SIMSG_TOGGLE_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARSELECT ) ); m_pGameMng->InterfaceMsg( &SIMSG_TOGGLE_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARNAMELIST ) ); m_pGameMng->InterfaceMsg( &SIMSG_TOGGLE_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARSELECTTEXT ) ); m_pGameMng->InterfaceMsg( &SIMSG_TOGGLE_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SELECTCHAR_INFO ) ); m_pGameMng->InterfaceMsg( &SIMSG_TOGGLE_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00 ) ); m_pGameMng->InterfaceMsg( &SIMSG_UI_SEND_DATA(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_TITLE_MAIN, "refresh")); // 2012. 6. 18 - marine 호칭리스트 리셋 //m_pGameMng->InterfaceMsg( &SIMSG_TOGGLE_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE01 ) ); SDEBUGLOG("completed - lobby UI Hide "); m_pGameMng->InterfaceMsg( &SIMSG_UI_OPEN_UPDATE( false ) ); SDEBUGLOG("completed - SIMSG_UI_OPEN_UPDATE"); CharacterLogin( szName, nRace ); SDEBUGLOG("completed - CharacterLogin"); SetGameRef( STAGE_END ); // 다음 게임으로 ... SDEBUGLOG("completed - SetGameRef"); NX3LoadPack::SetTextureLevel( m_nOldResourceQual ); KTextureManager::GetManager()->SetMipMapBiasLevel( m_nOldMipBias ); SDEBUGLOG("completed - Texture setting"); // GetGameOption().SetTextureMipBias(m_nOldMipBias); RemoveModelFiles(); SDEBUGLOG("completed - RemoveModelFiles"); //유저 해상도 변경 /* KSize sizResolution; int nWidth = GetGameOption().GetResolution_Width(); int nHeight = GetGameOption().GetResolution_Height(); sizResolution = KSize(nWidth, nHeight); if( m_pGameMng ) m_pGameMng->SetResolution( nWidth, nHeight ); */ m_strCrrBGM = ""; //m_pMSoundMgr->StopAllSound(); m_pMSoundMgr->StopMusic(); m_pMSoundMgr->SwapPlayBGM( "", 500, 500, 100, false ); SDEBUGLOG("completed - StopMusic"); //mSceneMgr.milesSoundMgr().StopBgm(); //mSceneMgr.milesSoundMgr().StopMusic(); m_pGameMng->SetShowLoadingWnd( true ); //m_pGameMng->UpdateLoadingProgress(0.0f); m_pGameMng->InitLoadingBar(); SDEBUGLOG("completed - InitLoadingBar"); SDEBUGLOG("SGameRenewalLobby::GameStart - fucntion end"); } void SGameRenewalLobby::SetToCreateCharSuccess() { SetCurState( GAMELOGIN_CREATECHAR_SUCCESS ); SAvatarSelector* pAvatar = GetCrrCustomizingAvatar(); if( !pAvatar ) return; if( m_pCreateSuccessEffect ) { const K3DVector vPos = pAvatar->GetTransform().GetPosVector(); m_pCreateSuccessEffect->SetPosition( vPos ); m_pCreateSuccessEffect->PlayAnimation( m_dwTime, "effect_start" ); } } void SGameRenewalLobby::SetToPrepareCharSelectState( bool bReqCharList ) { _oprint( "Character Select Ready Mode\n" ); //m_BgScene_PanelUp->play(false); //m_BgScene_PanelDown->play(false); m_BeforeCharListState = m_CurrentState; SetCurState( GAMELOGIN_PREPARE_CHARSELECT ); m_old_pos = K3DVector( 8.f, -100.f, 400.f ); m_new_pos = K3DVector( 8.f, -100.f, 10.f ); m_bLightProcess = true; m_dwLightStartTime = m_dwTime; m_strAccount = g_UserInfo.GetAccountName(); //저장 하고 있는 것으로 설정 if( bReqCharList ) { RequestCharacterList(); SGameObject::Activate(); } else { m_dwStartCharSelectListWaitTime = m_dwTime; m_nAppointmentCharSelectIndex = 0; SetCurState( GAMELOGIN_CHARSELECT_WAIT_TIME ); } } void SGameRenewalLobby::SetToServerSelectStateOn() { _oprint( "서버 선택 가능\n" ); SetCurState( GAMELOGIN_SERVERSELECT_ON ); if( m_bIsAgree ) { //"http://interfacelift.com/dl/wallpaper/00660_splash_480x272.jpg" // std::string strURL = "http://www.rappelz.com/community/screen.aspx?menu=read&no=4495"; //strURL 로 길드 관리 웹페이지 열기 //724, 543 // SetOtherNavigate( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SCREENSHOT, strURL.c_str(), 512, 384 ); // SetOtherNavigateMove( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SCREENSHOT, 100, 245 ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERTEXT, true ) ); if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::RU) { m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERNOTICE, true ) ); } else if(GetLocaleOption().GetValueString("NOTICE_URL",NULL) != NULL ) { m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERMENU, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERNOTICE, true ) ); } else { if(m_vStrServerURLIndex>=0) { int nResolutionW = KUIWndManager::GetResolution().cx; int blankwidth = (nResolutionW - (549 + 296 + 5))/2; m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SCREENSHOT, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERSCREENSHOT, true) ); SetOtherNavigate( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SCREENSHOT, m_vStrServerURL[m_vStrServerURLIndex].c_str(), 500, 400 ); SetOtherNavigateMove( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SCREENSHOT, 25 + blankwidth , KUIWndManager::GetResolution().cy/2 - 463/2 + 45); } } m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERLIST, true ) ); } else { //라이센스 창 OPEN m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LICENSE, true ) ); } } void SGameRenewalLobby::SetToPrepareServerSelectState() { _oprint( "서버선택 준비 모드\n" ); SetCurState( GAMELOGIN_PREPARE_SERVERSELECT ); m_BgScene_ClanDesc_Asura->activate(false); m_BgScene_ClanDesc_Deva->activate(false); m_BgScene_ClanDesc_Gaia->activate(false); m_BgScene_ClanSelect_Asura->activate(false); m_BgScene_ClanSelect_Gaia->activate(false); m_BgScene_ClanSelect_Deva->activate(false); m_BgScene_ClanSelect->activate(false); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_LOGO, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_PUBLISHER, false ) ); // sonador #2.3.3.4 (국내) copy rights 변경 m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_SUBTITLE, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_COPYRIGHT_LOGO, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_GAMERATING, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_SUBMENU, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LOGIN_TEXT, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING01, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING02, false ) ); m_old_pos = K3DVector( 8.f, -100.f, 10.f ); m_new_pos = K3DVector( 8.f, -100.f, 400.f ); m_bLightProcess = true; m_dwLightStartTime = m_dwTime; } void SGameRenewalLobby::CharacterLogin( const char* szName, int nRace ) { ::CharacterLogin( this, szName, nRace ); } void SGameRenewalLobby::SetToLoginStateOff() { _oprint( "로긴 모드 결과 대기\n" ); SetCurState( GAMELOGIN_LOGIN_OFF ); m_BgScene->activate(); m_BgScene->play(); m_BgScene_Pane_Type02->activate(); m_BgScene_Pane_Type02->play(); m_BgScene_Pane_Type03->activate(false); m_BgScene_Pane_Type03_right->activate(false); m_BgScene_ClanDesc_Asura->activate(false); m_BgScene_ClanDesc_Deva->activate(false); m_BgScene_ClanDesc_Gaia->activate(false); m_BgScene_ClanSelect_Asura->activate(false); m_BgScene_ClanSelect_Gaia->activate(false); m_BgScene_ClanSelect_Deva->activate(false); m_BgScene_ClanSelect->activate(false); m_TryConnectAuthServer = true; //m_SubTitleScene->activate(); // sonador #2.1.19.1 //m_SubTitleScene->play(); //m_LogoScene->activate(); //m_LogoScene->play(); m_nSelectRaceBGM = -1; m_nSelectRaceEffectSound = -1; } void SGameRenewalLobby::SetToBackToCharSelectState() { _oprint( "Mode for completing creation\n" ); SetCurState( GAMELOGIN_BACKTO_CHARSELECT ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_SECOND, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, false) ); } void SGameRenewalLobby::DeleteAvatar( const char* szName, const char* szSecurityNo ) { ::DeleteAvatar( this, szName, szSecurityNo ); } void SGameRenewalLobby::OnMsgResult( SGameMessage* pGameMsg ) { _oprint( ">>>MSG_AC_RESULT : %d\n", GetCurState() ); SMSG_AC_RESULT* pMsgResult = (SMSG_AC_RESULT*)pGameMsg; switch( m_CurrentState ) { case GAMELOGIN_LOGIN_OFF : { if( pMsgResult->request_msg_id == TM_CA_ACCOUNT ) { if( pMsgResult->result == RESULT_SUCCESS ) { m_invalidPasswordCount = 0; // 로그인 하면 에러 카운트 0으로 초기화 enum { FLAG_EULA = 1 << 0, //eula 창 FLAG_MSG = 1 << 1, //경고 창 }; if( pMsgResult->value & FLAG_EULA ) m_bIsAgree = true;//0 약관 동의 안함, 1 약관 동의 else m_bIsAgree = false; m_bIsAgree = true; // by Testors, 임시 if( /*true ||*/ pMsgResult->value & FLAG_MSG ) { //'너 경고 당했으니까 조심해라.' 메세지 박스 띄우기 작업 m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_BAD_USER_WARNING, S(945) ) ); } else { //인증 성공 TS_CA_SERVER_LIST msg_server_list; AuthPendMessage( &msg_server_list ); } } else { if( ENV().IsExist( "web_login" ) && pMsgResult->result == RESULT_ALREADY_EXIST ) { m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_ALREADYEXIST, S(110) ) ); break; } //인증 실패,//연결 종료 std::string strErr; switch( pMsgResult->result ) { case RESULT_NOT_EXIST: //101 ID가 존재하지 않거나 잘못된 비밀번호 입니다. Rappler Creer의 회원이 아니면 회원가입을 해주십시오. { XStringUtil::Format( strErr, S(101) ); ///*"인증 실패 : [%d]"*/, pMsgResult->result ); ++m_invalidPasswordCount; // 에러 카운트 증가 break; } case RESULT_NOT_ACTABLE: // sonador 1.10.2 인증실패 메시지 추가 { XStringUtil::Format( strErr, S( SYS_MSG_NETCAFE_MESSAGE01 ) ); break; } case RESULT_ACCESS_DENIED: { XStringUtil::Format( strErr, S(109) ); //해당 계정은 접속이 제한 되어 있습니다. break; } case RESULT_ALREADY_EXIST: { XStringUtil::Format( strErr, S(110) ); //이미 접속 중인데, 끊겼다 break; } case RESULT_NOT_ENOUGH_MONEY: { XStringUtil::Format( strErr, S(6383) ); //돈이 모자람 break; } case RESULT_NOT_ENOUGH_AGE: { XStringUtil::Format( strErr, S(851) ); //라펠즈는 15세 이상의 유저가 이용하실 수 있습니다. break; } case RESULT_WITHDRAW_WAITING: { std::string strTime = GetCutTimeString( pMsgResult->value, 1 ); strErr = SR(120, "#@AccountTime@#", strTime.c_str() ); break; } case RESULT_REALNAME_REQUIRED: { XStringUtil::Format( strErr, S(135) ); //실명 인증 즐 break; } case RESULT_IP_BLOCKED : { // m_pGameMng->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_IP_BLOCK, true, true, pMsgResult->value ) ); SIMSG_REQ_WINDOW_OBJECT reqWndObj( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_IP_BLOCK ); m_pGameMng->InterfaceMsg( &reqWndObj ); if ( reqWndObj.window ) { _CID( updateIPBlockWnd ); reqWndObj.window->PerformKV( id_updateIPBlockWnd, KID( "error_code" ), pMsgResult->value ); } m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_IP_BLOCK, true, true ) ); break; } case RESULT_COOL_TIME: { XStringUtil::Format( strErr, S(141) ); //여러번 로그인 실패시 30분 혹 하루종일 블럭 당할때 나오는 메시지 2009.06.01. sfreer break; } case RESULT_NOT_ENOUGH_AGE_PERIOD: { XStringUtil::Format( strErr, S(2935) ); break; } case RESULT_WEBZEN_DUPLICATE_ACCOUNT: // 유럽, 미국 웹젠 통합관련 처리 { XStringUtil::Format( strErr, S(186) ); break; } case RESULT_WEBZEN_NEED_ACCEPT_EULA: // 웹젠 통합관련 게임 이용 동의 요청 { XStringUtil::Format( strErr, "RESULT_WEBZEN_NEED_ACCEPT_EULA" ); break; } default: // sonador 1.10.2 인증실패 메시지 추가 { XStringUtil::Format( strErr, S( SYS_MSG_NETCAFE_MESSAGE02 ), pMsgResult->result ); break; } } // floyd 3.11.1 iMBC 채널링 구현 if ( ENV().IsExist( "imbclogin" ) ) { m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NOCONNECTSERVER, strErr.c_str(), false ) ); } else { if ( !strErr.empty() ) { if( pMsgResult->result == RESULT_WEBZEN_DUPLICATE_ACCOUNT || pMsgResult->result == RESULT_WEBZEN_NEED_ACCEPT_EULA ) { m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL_AND_HTTP_LINK, strErr.c_str(), true ) ); } else { m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL, strErr.c_str(), true ) ); } } m_pGameMng->ClearDummy(); //인증 실패 했으므로, 로긴 가능 하도록 클리어 더미 m_pAuthConn->Close(); SAFE_DELETE( m_pAuthConn ); SAFE_DELETE( m_pRecvQueue ); m_pAuthConn = new XSyncStreamConnection( true, true ); m_pRecvQueue = IQueue::MakeQueue( 1*1024 ); SetCurState( GAMELOGIN_LOGIN ); } } } } break; } pGameMsg->bUse = true; } /// 2011.05.20 - prodongi void SGameRenewalLobby::OnMsgResultWithString( SGameMessage* pGameMsg ) { _oprint( ">>>MSG_AC_RESULT_WITH_STRING : %d\n", GetCurState() ); SMSG_AC_RESULT_WITH_STRING* pMsgResult = (SMSG_AC_RESULT_WITH_STRING*)pGameMsg; switch( m_CurrentState ) { case GAMELOGIN_LOGIN_OFF : { if( pMsgResult->request_msg_id == TM_CA_ACCOUNT ) { if( pMsgResult->result == RESULT_SUCCESS ) { m_invalidPasswordCount = 0; // 로그인 하면 에러 카운트 0으로 초기화 enum { FLAG_EULA = 1 << 0, //eula 창 FLAG_MSG = 1 << 1, //경고 창 }; if( pMsgResult->value & FLAG_EULA ) m_bIsAgree = true;//0 약관 동의 안함, 1 약관 동의 else m_bIsAgree = false; m_bIsAgree = true; // by Testors, 임시 if( /*true ||*/ pMsgResult->value & FLAG_MSG ) { //'너 경고 당했으니까 조심해라.' 메세지 박스 띄우기 작업 if (pMsgResult->str) m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_BAD_USER_WARNING, pMsgResult->str ) ); else m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_BAD_USER_WARNING, S(945) ) ); } else { //인증 성공 TS_CA_SERVER_LIST msg_server_list; AuthPendMessage( &msg_server_list ); } } else { if( ENV().IsExist( "web_login" ) && pMsgResult->result == RESULT_ALREADY_EXIST ) { if (pMsgResult->str) m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_ALREADYEXIST, pMsgResult->str ) ); else m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_ALREADYEXIST, S(110) ) ); break; } //인증 실패,//연결 종료 std::string strErr; switch( pMsgResult->result ) { case RESULT_NOT_EXIST: //101 ID가 존재하지 않거나 잘못된 비밀번호 입니다. Rappler Creer의 회원이 아니면 회원가입을 해주십시오. { if (pMsgResult->str) XStringUtil::Format( strErr, pMsgResult->str ); ///*"인증 실패 : [%d]"*/, pMsgResult->result ); else XStringUtil::Format( strErr, S(101) ); ///*"인증 실패 : [%d]"*/, pMsgResult->result ); ++m_invalidPasswordCount; // 에러 카운트 증가 break; } case RESULT_NOT_ACTABLE: // sonador 1.10.2 인증실패 메시지 추가 { if (pMsgResult->str) XStringUtil::Format( strErr, pMsgResult->str ); else XStringUtil::Format( strErr, S( SYS_MSG_NETCAFE_MESSAGE01 ) ); break; } case RESULT_ACCESS_DENIED: { if (pMsgResult->str) XStringUtil::Format( strErr, pMsgResult->str ); else XStringUtil::Format( strErr, S(109) ); //해당 계정은 접속이 제한 되어 있습니다. break; } case RESULT_ALREADY_EXIST: { if (pMsgResult->str) XStringUtil::Format( strErr, pMsgResult->str ); else XStringUtil::Format( strErr, S(110) ); //이미 접속 중인데, 끊겼다 break; } case RESULT_NOT_ENOUGH_MONEY: { if (pMsgResult->str) XStringUtil::Format( strErr, pMsgResult->str ); else XStringUtil::Format( strErr, S(6383) ); //돈이 모자람 break; } case RESULT_NOT_ENOUGH_AGE: { if (pMsgResult->str) XStringUtil::Format( strErr, pMsgResult->str ); else XStringUtil::Format( strErr, S(851) ); //라펠즈는 15세 이상의 유저가 이용하실 수 있습니다. break; } case RESULT_WITHDRAW_WAITING: { std::string strTime = GetCutTimeString( pMsgResult->value, 1 ); strErr = SR(120, "#@AccountTime@#", strTime.c_str() ); break; } case RESULT_REALNAME_REQUIRED: { if (pMsgResult->str) XStringUtil::Format( strErr, pMsgResult->str ); else XStringUtil::Format( strErr, S(135) ); //실명 인증 즐 break; } case RESULT_IP_BLOCKED : { // m_pGameMng->PostMsg( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_IP_BLOCK, true, true, pMsgResult->value ) ); SIMSG_REQ_WINDOW_OBJECT reqWndObj( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_IP_BLOCK ); m_pGameMng->InterfaceMsg( &reqWndObj ); if ( reqWndObj.window ) { _CID( updateIPBlockWnd ); reqWndObj.window->PerformKV( id_updateIPBlockWnd, KID( "error_code" ), pMsgResult->value ); } m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_IP_BLOCK, true, true ) ); break; } case RESULT_COOL_TIME: { if (pMsgResult->str) XStringUtil::Format( strErr, pMsgResult->str ); else XStringUtil::Format( strErr, S(141) ); //여러번 로그인 실패시 30분 혹 하루종일 블럭 당할때 나오는 메시지 2009.06.01. sfreer break; } case RESULT_NOT_ENOUGH_AGE_PERIOD: { if (pMsgResult->str) XStringUtil::Format( strErr, pMsgResult->str ); else XStringUtil::Format( strErr, S(2935) ); break; } case RESULT_WEBZEN_DUPLICATE_ACCOUNT: // 유럽, 미국 웹젠 통합관련 처리 { if (pMsgResult->str) XStringUtil::Format( strErr, pMsgResult->str ); else XStringUtil::Format( strErr, S(186) ); break; } case RESULT_WEBZEN_NEED_ACCEPT_EULA: // 웹젠 통합관련 게임 이용 동의 요청 { if (pMsgResult->str) XStringUtil::Format( strErr, pMsgResult->str ); else XStringUtil::Format( strErr, "RESULT_WEBZEN_NEED_ACCEPT_EULA" ); break; } default: // sonador 1.10.2 인증실패 메시지 추가 { if (pMsgResult->str) XStringUtil::Format( strErr, pMsgResult->str ); else XStringUtil::Format( strErr, S( SYS_MSG_NETCAFE_MESSAGE02 ), pMsgResult->result ); break; } } // floyd 3.11.1 iMBC 채널링 구현 if ( ENV().IsExist( "imbclogin" ) ) { m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NOCONNECTSERVER, strErr.c_str(), false ) ); } else { if ( !strErr.empty() ) { if( pMsgResult->result == RESULT_WEBZEN_DUPLICATE_ACCOUNT || pMsgResult->result == RESULT_WEBZEN_NEED_ACCEPT_EULA ) { m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL_AND_HTTP_LINK, strErr.c_str(), true ) ); } else { m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL, strErr.c_str(), true ) ); } } m_pGameMng->ClearDummy(); //인증 실패 했으므로, 로긴 가능 하도록 클리어 더미 m_pAuthConn->Close(); SAFE_DELETE( m_pAuthConn ); SAFE_DELETE( m_pRecvQueue ); m_pAuthConn = new XSyncStreamConnection( true, true ); m_pRecvQueue = IQueue::MakeQueue( 1*1024 ); SetCurState( GAMELOGIN_LOGIN ); } } } } break; } pGameMsg->bUse = true; } void SGameRenewalLobby::ProcMsgAtStatic( SGameMessage * pGameMsg ) { SGame::ProcMsgAtStatic(pGameMsg); if( GetGameRef() == SGame::STAGE_END || GetGameRef() == SGame::STAGE_NOTHING ) { return; } if( m_pGameMng->IsShowEndingWnd() ) { //m_pGameMng->GameExit(); switch( pGameMsg->nType ) { case IMSG_HOTKEY_EX: { pGameMsg->bUse = true; SIMSG_HOTKEY_EX* pHotKeyMsg = (SIMSG_HOTKEY_EX*)pGameMsg; if( LOWORD(pHotKeyMsg->wParam ) == VK_ESCAPE ) { m_pGameMng->GameExit(); } } } return; } //m_pGameMng->SetShowLoadingWnd( false ); switch( pGameMsg->nType ) { case MSG_SECRET_KEY: { pGameMsg->bUse = true; SMSG_SECRET_KEY* pSecret = static_cast< SMSG_SECRET_KEY* >( pGameMsg ); unsigned char buffer[1024]; size_t nDeSize = 0; m_Crypto.DecryptForLocal( pSecret->pEncryptData, pSecret->nEncryptSize, buffer, sizeof( buffer ), &nDeSize ); XAES_128_CBC_KEY Key; memcpy( Key.byKey, buffer, sizeof( Key.byKey ) ); memcpy( Key.byIV, buffer+sizeof( Key.byKey ), sizeof( Key.byIV ) ); m_Crypto.SetSecretKey( Key ); if( m_nAuthType == ACCOUNT_AUTH_IMBC ) { //결과와 인증키를 받아야 함 TS_CA_IMBC_ACCOUNT msg_account; // #2.1.12 msg_account.account[ GameRule::MAX_ACCOUNT_LEN ] = '\0'; ::strncpy( msg_account.account, g_UserInfo.GetAccountName(), GameRule::MAX_ACCOUNT_LEN - 5 ); m_Crypto.EncryptForSecret( m_strTempPass.c_str(), m_strTempPass.size(), msg_account.password, sizeof( msg_account.password ), &msg_account.password_en_len ); AuthPendMessage( &msg_account ); // m_pGameMng->StartSound( "ui_bgm_antechamber01.wav" ); m_pGameMng->GameGuardSendAccount( g_UserInfo.GetAccountName() ); } else if( m_nAuthType == ACCOUNT_AUTH_OTP ) { //결과와 인증키를 받아야 함 // #2.1.12 TS_CA_OTP_ACCOUNT msg_account; msg_account.account[ GameRule::MAX_ACCOUNT_LEN ] = '\0'; ::strncpy( msg_account.account, g_UserInfo.GetAccountName(), GameRule::MAX_ACCOUNT_LEN ); m_Crypto.EncryptForSecret( m_strTempPass.c_str(), m_strTempPass.size(), msg_account.OTP, sizeof( msg_account.OTP ), &msg_account.otp_en_len ); AuthPendMessage( &msg_account ); // m_pGameMng->StartSound( "ui_bgm_antechamber01.wav" ); m_pGameMng->GameGuardSendAccount( g_UserInfo.GetAccountName() ); } else if( ACCOUNT_AUTH_SID == m_nAuthType ) { // TODO: Remove later everything related to GameXP TS_CA_RUSSIA_SID msg_sid; std::string strSID = ENV().GetString( "gamexp_sid" ); if( false == strSID.empty() ) { m_Crypto.EncryptForSecret( strSID.c_str(), strSID.size(), msg_sid.sid, sizeof( msg_sid.sid ), &msg_sid.sid_en_len ); AuthPendMessage( &msg_sid ); } else { MessageBox( NULL, "ERROR: _SID is empty...", "Auth Error", MB_OK ); m_pGameMng->GameExit(); } } else { //결과와 인증키를 받아야 함 TS_CA_ACCOUNT msg_account; msg_account.account[ GameRule::MAX_ACCOUNT_LEN ] = '\0'; ::strncpy( msg_account.account, g_UserInfo.GetAccountName(), GameRule::MAX_ACCOUNT_LEN ); m_Crypto.EncryptForSecret( m_strTempPass.c_str(), m_strTempPass.size(), msg_account.password, sizeof( msg_account.password ), &msg_account.password_en_len ); //2011.08.22 If the user is in the U.S., black box information is appended after TS_CA_ACCOUNT before sending – prodongi if (GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::US) { sendAccountWithIovation(msg_account); } else if (isEurope()) { sendAccountWithMacAddress(msg_account); } else { AuthPendMessage( &msg_account ); } // m_pGameMng->StartSound( "ui_bgm_antechamber01.wav" ); m_pGameMng->GameGuardSendAccount( g_UserInfo.GetAccountName() ); } } break; case MSG_ACCOUNT_INFO: { pGameMsg->bUse = true; SMSG_ACCOUNT_INFO* pAccountInfo = static_cast< SMSG_ACCOUNT_INFO* >( pGameMsg ); g_UserInfo.SetAccountName( pAccountInfo->strAccount.c_str() ); g_UserInfo.SetUserNo(pAccountInfo->user_no); m_pGameMng->GameGuardSendAccount( g_UserInfo.GetAccountName() ); } break; case MSG_AC_RESULT: OnMsgResult( pGameMsg ); break; case MSG_AC_RESULT_WITH_STRING: OnMsgResultWithString(pGameMsg); break; /// 2011.05.20 GNE 인증 방식 - prodongi case MSG_AC_SERVER_LIST : { _oprint( ">>>MSG_AC_SERVER_LIST : %d\n", GetCurState() ); SMSG_AC_SERVER_LIST* pServerList = (SMSG_AC_SERVER_LIST*)pGameMsg; for( int i(0); icount; ++i ) { m_vStrServerURL.push_back( pServerList->m_pServerInfo[i].server_screenshot_url ); } switch( m_CurrentState ) { case GAMELOGIN_SERVERSELECT: { //지연되었을 경우 직접 변경 m_pGameMng->InterfaceMsg( pGameMsg ); m_bIsCan_ReqServerList = true; SetToServerSelectStateOn(); pGameMsg->bUse = true; } case GAMELOGIN_LOGIN_OFF: { //애니메이션 순차 처리 m_pGameMng->InterfaceMsg( pGameMsg ); //서버 리스트 UI 에 추가 m_bIsCan_ReqServerList = true; SetToPrepareServerSelectState(); pGameMsg->bUse = true; } break; } } break; case MSG_AC_SELECT_SERVER: { _oprint( ">>>MSG_AC_SELECT_SERVER : %d\n", GetCurState() ); if( m_CurrentState == GAMELOGIN_GAMESERVER_LOGIN ) { SMSG_AC_SELECT_SERVER * pSelectServer = static_cast(pGameMsg); if( pSelectServer->result == RESULT_SUCCESS ) { m_pAuthConn->Close(); m_pRecvQueue->Clear(); m_pGameMng->ClearDummy(); //인증 서버와 통신이 끝났으므로 더미 삭제 unsigned char byOneTimeKeyTemp[sizeof( pSelectServer->one_time_key ) + GameRule::MAX_CRYPTO_BLOCK_LEN]; size_t nDeSize = 0; m_Crypto.DecryptForSecret( pSelectServer->one_time_key, pSelectServer->one_time_key_en_len, &byOneTimeKeyTemp, sizeof( byOneTimeKeyTemp ), &nDeSize ); assert( nDeSize == sizeof( __int64 ) ); m_one_time_key = *reinterpret_cast< __int64* >( byOneTimeKeyTemp ); if( pSelectServer->pending_time != 0 ) {//pending_time 만큼 대기하고 로그인 가능 m_dwServerWaitStartTime = m_dwTime; m_dwServerWaitTime = pSelectServer->pending_time*10; //MSG 박스 띄운다. std::string strMsg; GetPendingTimeString(m_dwServerWaitTime, strMsg); //접속중 닫기 m_pGameMng->InterfaceMsg( &SMSG_SEND_DATA( "close_all_message_box" ) ); g_bServerListSeen = true; m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_LOGINWAITING, strMsg.c_str(), false, m_dwServerWaitTime ) ); g_bServerListSeen = false; } else { //캐릭터 요청 상태 m_pGameMng->ConnectToServer( m_SelectServer_IP.c_str(), m_SelectServer_PORT ); //게임서버에 접속 LoginAccount( g_UserInfo.GetAccountName(), m_one_time_key ); //TS_CS_ACCOUNT_WITH_AUTH 를 통해 인증 } } // 18세서버 else if( pSelectServer->result == RESULT_ACCESS_DENIED ) { g_bServerListSeen = true; m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL, S(6399), true ) ); g_bServerListSeen = false; } // 중국 보급코드 인증실패. else if( pSelectServer->result == RESULT_INVALID_ARGUMENT ) { g_bServerListSeen = true; // TODO 이 스트링 번호 이상하다. m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL, S(6354), true ) ); g_bServerListSeen = false; } else { //인증 서버에서 서버 선택 실패 되었음. assert( 0 && "인증 서버에서 서버 선택 실패 되었음." ); _oprint( "ErrorCode[%d] : %s\n", pSelectServer->result, GetErrorStr( pSelectServer->result ) ); } } // break; //} pGameMsg->bUse = true; } break; case MSG_AC_UPDATE_PENDING_TIME: { if( m_CurrentState == GAMELOGIN_SERVERSELECT || m_CurrentState == GAMELOGIN_SERVERSELECT_ON || m_CurrentState == GAMELOGIN_GAMESERVER_LOGIN ) {//pending_time 만큼 대기하고 로그인 가능 SMSG_AC_UPDATE_PENDING_TIME * pUpdatePendingTime = static_cast(pGameMsg); UpdatePendingTime(pUpdatePendingTime->pending_time); } } break; case MSG_RESULT: // 서버 결과 메시지 { SMSG_RESULT* pMsgResult = (SMSG_RESULT*)pGameMsg; _oprint( "[MSG_RESULT] CurState: [%d]\n", GetCurState() ); switch( m_CurrentState ) { case GAMELOGIN_DEVELOPERS_LOGIN: //개발 전용 로긴 상태시 { if( TM_CS_ACCOUNT == pMsgResult->request_msg_id ) { switch( pMsgResult->result ) { case RESULT_SUCCESS: if( ENV().IsExist( "account" ) && ENV().IsExist( "password" ) && ENV().IsExist( "avatar" ) ) { CharacterLogin( ENV().GetString( "avatar" ).c_str(), 0 ); SetGameRef( STAGE_END ); // 다음 게임으로 ... SDEBUGLOG("MSG_RESULT::GAMELOGIN_DEVELOPERS_LOGIN - begin"); RemoveModelFiles(); SDEBUGLOG("MSG_RESULT::GAMELOGIN_DEVELOPERS_LOGIN - end"); // It can only be used once because it takes you back to the lobby ENV().Remove( "account" ); ENV().Remove( "password" ); ENV().Remove( "avatar" ); } } } } break; case GAMELOGIN_CHARSELECT: { if( pMsgResult->request_msg_id == TM_CS_DELETE_CHARACTER ) { // #2.1.2.8.3 sonador if( m_pGameMng->GetWndManager() ) m_pGameMng->GetWndManager()->CloseAllMessageBox(); SIMSG_UI_PASSWORD_COMPARE::COMPARE_RESULT result = SIMSG_UI_PASSWORD_COMPARE::SUCCESS_FROM_SERVER; switch( pMsgResult->result ) { case RESULT_SUCCESS: m_passwordCount.clear(); SetToPrepareCharSelectState(true); // RequestCharacterList(); break; case RESULT_DB_ERROR: //알 수 없는 오류가 발생했습니다. 운영자에게 문의하세요. result = SIMSG_UI_PASSWORD_COMPARE::FAILED_DB_ERROR_FROM_SERVER; break; case RESULT_PASSWORD_MISMATCH: //입력하신 보안비밀번호가 맞지 않습니다. 다시 시도하세요. m_passwordCount.inc(); /// 2012.04.04 - prodongi if (m_passwordCount.end()) { pMsgResult->bUse = true; m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NOCONNECTSERVER, SYS_MSG_SERVER_DISCONNECT ) ); return ; } result = SIMSG_UI_PASSWORD_COMPARE::FAILED_MATCH_FROM_SERVER; break; case RESULT_ACCESS_DENIED: //길드마스터일 경우는 캐릭터 삭제가 불가능합니다. 길드 탈퇴 또는 해체 후 다시 시도하세요 result = SIMSG_UI_PASSWORD_COMPARE::FAILED_ACCESS_DENIED_FROM_SERVER; break; case RESULT_NOT_EXIST: //해당 보안비밀번호에 적합한 캐릭터가 없습니다. 운영자에게 문의하세요. result = SIMSG_UI_PASSWORD_COMPARE::FAILED_NOT_EXIT_FROM_SERVER; //m_bFreezeSelect = false; break; default: m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL, S(804), true ) ); break; } if( result != SIMSG_UI_PASSWORD_COMPARE::SUCCESS_FROM_SERVER ) m_pGameMng->InterfaceMsg( &SIMSG_UI_PASSWORD_COMPARE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SECURITYCHARACTER, result ) ); } else if( pMsgResult->request_msg_id == TM_CS_SECURITY_NO ) { SIMSG_UI_PASSWORD_COMPARE::COMPARE_RESULT result = SIMSG_UI_PASSWORD_COMPARE::SUCCESS_FROM_SERVER; if( pMsgResult->result != RESULT_SUCCESS ) result = SIMSG_UI_PASSWORD_COMPARE::FAILED_MATCH_FROM_SERVER; m_pGameMng->InterfaceMsg( &SIMSG_UI_PASSWORD_COMPARE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SECURITYSTORAGE, result ) ); } } break; case GAMELOGIN_GAMESERVER_LOGIN: // case GAMELOGIN_SERVERSELECT_ON: // case GAMELOGIN_CHARSELECT: // 캐랙터 선택 상태시 switch( pMsgResult->request_msg_id ) { case TM_CS_ACCOUNT_WITH_AUTH : { // 사용자 정보 전송. 추가 bintitle. 2010.05.06. MAC ADDRESS. m_pGameMng->ConnectToServer( m_SelectServer_IP.c_str(), m_SelectServer_PORT, true ); switch( pMsgResult->result ) { case RESULT_SUCCESS: //캐릭터 요청 { SetToPrepareCharSelectState(true); } break; case RESULT_ACCESS_DENIED: // block된 계정 case RESULT_INVALID_PASSWORD: // 패스워드 틀림 case RESULT_NOT_EXIST: // 계정이 없음 SetCurState( GAMELOGIN_SERVERSELECT_ON ); m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL, SYS_MSG_ID_NOTEXIST ) ); break; case RESULT_LIMIT_MAX: // 동접 한계치 초과 SetCurState( GAMELOGIN_SERVERSELECT_ON ); m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SERVERLIMITMAX, S(803) ) ); break; default: { // MessageBox( g_hWnd, "default","debug", MB_OK ); SetCurState( GAMELOGIN_SERVERSELECT_ON ); g_bServerListSeen = true; m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NOCONNECTSERVER, SYS_MSG_SERVER_DISCONNECT ) ); g_bServerListSeen = false; } break; } } break; case TM_CS_CHARACTER_LIST: { if( RESULT_SUCCESS != pMsgResult->result ) { g_bServerListSeen = true; m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_NOCONNECTSERVER, SYS_MSG_SERVER_DISCONNECT ) ); g_bServerListSeen = false; } } break; } break; case GAMELOGIN_CREATECHAR_CUSTOMIZING: if( TM_CS_CHECK_CHARACTER_NAME == pMsgResult->request_msg_id ) { _oprint("[debug RESULT_SUCCESS]! Result is: %d\n", static_cast(pMsgResult->result)); if( pMsgResult->result != RESULT_SUCCESS ) m_strNewCharName = ""; switch( pMsgResult->result ) { case RESULT_SUCCESS: { ::CreateNewAvatar( this, m_strNewCharName.c_str(), GetCrrCustomizingAvatar() ); } break; case RESULT_ALREADY_EXIST: // Name already exists, fix it!!! m_bCreating = false; m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL, SYS_MSG_NAME_EXIST, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_SECOND, "create_fail" ) ); break; case RESULT_INVALID_TEXT: // Forbidden word m_bCreating = false; m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL, SYS_MSG_NAME_INVALID, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_SECOND, "create_fail" ) ); break; } } else if( TM_CS_CREATE_CHARACTER == pMsgResult->request_msg_id ) { switch( pMsgResult->result ) { case RESULT_SUCCESS: { m_bCreateCharSuccess = true; SetToCreateCharSuccess(); } break; case RESULT_ALREADY_EXIST: m_bCreating = false; m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL, SYS_MSG_NAME_EXIST, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_SECOND, "create_fail" ) ); break; case RESULT_INVALID_TEXT: m_bCreating = false; m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL, SYS_MSG_NAME_INVALID, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_SECOND, "create_fail" ) ); break; default: case RESULT_LIMIT_MAX: m_bCreating = false; m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL, S(805), true ) ); m_pGameMng->InterfaceMsg( &SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_SECOND, "create_fail" ) ); break; } } break; } } pGameMsg->bUse = true; break; case MSG_CHARLIST: // 캐랙터 리스트 { pGameMsg->bUse = true; SMSG_CHARLIST* pMsgCharList = (SMSG_CHARLIST*)pGameMsg; m_nCharacterCount = 0; int nReceiveCharCount = pMsgCharList->nCharCount; if( nReceiveCharCount > GameRule::nMaxCharactersPerAccount) nReceiveCharCount = GameRule::nMaxCharactersPerAccount; if( nReceiveCharCount == 0 ) { m_pGameMng->PostMsgAtDynamic( new SMSG_SEND_DATA( "select_server_msgbox" ) ); SetToRaceSelectState(); break; } int nNewCharIndex(-1); LOBBY_CHARACTER_INFO* pCharInfo = pMsgCharList->pCharInfo; for( int n( 0 ); n < nReceiveCharCount; ++n ) { std::string strYear; strYear.assign( std::string( pCharInfo->szDeleteTime ), 0, 4 ); std::string strDelCheck; strDelCheck.assign( std::string( pCharInfo->name ), 0, 1 ); if( ::atoi( strYear.c_str() ) > 9000 && ::_stricmp( strDelCheck.c_str(), "@" ) != 0 ) { if( m_strNewCharName == pCharInfo->name ) nNewCharIndex = n; m_Avatars[n].pAvatar->SetDisplayInfo( pCharInfo->level, pCharInfo->job_level, pCharInfo->job ); m_Avatars[n].pAvatar->SetName ( pCharInfo->name ); m_Avatars[n].pAvatar->SetRace ( pCharInfo->race ); m_Avatars[n].pAvatar->SetSex ( pCharInfo->sex ); // Nude item m_Avatars[n].pAvatar->SetHairIndex( GetDefaultItemDB().GetHairIndex( pCharInfo->model_id[0] ) ); m_Avatars[n].pAvatar->SetFaceIndex( GetDefaultItemDB().GetFaceIndex( pCharInfo->model_id[1] ) ); m_Avatars[n].pAvatar->SetBodyIndex( GetDefaultItemDB().GetBodyIndex( pCharInfo->model_id[2] ) ); m_Avatars[n].pAvatar->SetHandIndex( GetDefaultItemDB().GetHandIndex( pCharInfo->model_id[3] ) ); m_Avatars[n].pAvatar->SetFootIndex( GetDefaultItemDB().GetFootIndex( pCharInfo->model_id[4] ) ); m_Avatars[n].pAvatar->SetDecoIndex( pCharInfo->texture_id ); int nGroup = GetDefaultItemDB().GetFaceGroupID( GetDefaultItemDB().GetFaceIndex( pCharInfo->model_id[1] ) ); std::string m_strDecoName = GetDefaultTextureResourceDB().GetTextureName( nGroup, pCharInfo->texture_id, m_Avatars[n].pAvatar->GetRace(), m_Avatars[n].pAvatar->GetSex() ); int nRace( m_Avatars[n].pAvatar->GetRace() ); int nSex( m_Avatars[n].pAvatar->GetSex() ); int nFace( m_Avatars[n].pAvatar->GetFaceIndex() ); m_Avatars[n].pAvatar->setHideEquipInfo(pCharInfo->hide_equip_flag); for( int i(0); 5>i; i++ ) m_Avatars[n].pAvatar->SetNudeCode( i, pCharInfo->model_id[i] ); // Equipped Items for( int i(0); ItemBase::MAX_ITEM_WEAR > i; i++ ) { if( pCharInfo->level == 0 && (i == ItemBase::WEAR_WEAPON || i == ItemBase::WEAR_SHIELD) ) m_Avatars[n].pAvatar->SetWearIndex( i, 0, 0 ,pCharInfo->wear_appearance_code[i]); else m_Avatars[n].pAvatar->SetWearIndex( i, pCharInfo->wear_info[i], 0, pCharInfo->wear_appearance_code[i] ); } m_Avatars[n].pAvatar->SetHairColorIndex(pCharInfo->hair_color_index); m_Avatars[n].pAvatar->RefreshAvatar(); // Temporary (characters created before the renewal) if( pCharInfo->skin_color == 0 ) { unsigned long color_value = GetSkinColorTable().GetColorValue( nRace - GCLAN_GAIA, 0 ); m_Avatars[n].pAvatar->SetSkinColorized( color_value, K3DTexture::COLORIZED_DEF, pCharInfo->hair_color_rgb ); } else { m_Avatars[n].pAvatar->SetSkinColorized( pCharInfo->skin_color, K3DTexture::COLORIZED_DEF, pCharInfo->hair_color_rgb ); } K3DVector vAvatarPos; GetRaceEventPos(nRace, vAvatarPos); InitAvatar( m_Avatars[n].pAvatar, vAvatarPos ); m_nCharacterCount++; } pCharInfo++; } int nSelectIndex(-1); if( nNewCharIndex >= 0 ) nSelectIndex = nNewCharIndex; else nSelectIndex = pMsgCharList->last_login_index; if ( nSelectIndex >= nReceiveCharCount ) nSelectIndex = 0; // 프랑스 캐릭터 선택 인덱스 8로들어오는 문제로 인해 수정합니다. // 꾸미기 아이콘 위치 설정 // 2010.04.22 - prodongi // GetDefaultTextureResourceDB().SetDecoIndex( m_Avatars[ nSelectIndex ].pAvatar->GetDecoIndex() ); GetSelectedAvatarInfo().setDecoIndex(m_Avatars[ nSelectIndex ].pAvatar->GetDecoIndex()); m_dwStartCharSelectListWaitTime = m_dwTime; m_nAppointmentCharSelectIndex = nSelectIndex; SetCurState( GAMELOGIN_CHARSELECT_WAIT_TIME ); RefreshCharNameWindow(); m_pGameMng->PostMsgAtDynamic( new SMSG_SEND_DATA( "select_server_msgbox" ) ); } pGameMsg->bUse = true; break; case IMSG_DELETE_SELECTEDAVATAR: { SIMSG_DELETE_SELECTEDAVATAR* pDeleteMsg = static_cast(pGameMsg); if( 0 <= m_nSelectedCharIndex && m_nSelectedCharIndex < m_nCharacterCount ) { // #2.1.2.8.3 sonador m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DELETECHARWAIT, SYS_MSG_SELECT_DELCHARACTOR, true ) ); DeleteAvatar( m_Avatars[m_nSelectedCharIndex].pAvatar->GetName(), pDeleteMsg->security_no ); } } pGameMsg->bUse = true; break; case TMSG_REQ_CLOSE: m_pGameMng->GameExit(); break; case IMSG_MOUSEMOVE : { if(m_CurrentState == GAMELOGIN_CREATECHAR_RACE_SELECT) { SIMSG_MOUSEMOVE* pMouseMove = static_cast(pGameMsg); int adjustwidth = KUIWndManager::GetResolution().cy * 4 / 3; /// 2010.12.28 - prodongi if (adjustwidth > KUIWndManager::GetResolution().cx) adjustwidth = KUIWndManager::GetResolution().cx; int adjustheight = KUIWndManager::GetResolution().cy; int adjustx = KUIWndManager::GetResolution().cx/2 - adjustwidth/2; int mx = GET_X_LPARAM(pMouseMove->lParam); int my = GET_Y_LPARAM(pMouseMove->lParam); m_ClanSelect_Asura_RollOver = false; m_ClanSelect_Deva_RollOver = false; m_ClanSelect_Gaia_RollOver = false; if( mx >= adjustx && mx <= adjustx+(340*adjustwidth/1024) && my >= 0 && my <= (768*adjustheight/768) ) { m_ClanSelect_Asura_RollOver = true; } else if( mx >= adjustx+340 && mx <= adjustx+(682*adjustwidth/1024) && my >= 0 && my <= (768*adjustheight/768) ) { m_ClanSelect_Gaia_RollOver = true; } else if( mx >= adjustx+682 && mx <= adjustx+(1024*adjustwidth/1024) && my >= 0 && my <= (768*adjustheight/768) ) { m_ClanSelect_Deva_RollOver = true; } } #ifdef _TERRAIN_ENABLE_ SIMSG_MOUSEMOVE* pMouseMove = static_cast(pGameMsg); pGameMsg->bUse = true; /// 2010.11.10 - prodongi //#ifdef _DEV if (g_UserInfo.isMonkeyTail()) { extern bool g_bDebugMode; if( !g_bDebugMode ) return; //시간 카메라로 바꾸자~ int dx = GET_X_LPARAM(pMouseMove->lParam) - m_ptOldPoint.x; int dy = GET_Y_LPARAM(pMouseMove->lParam) - m_ptOldPoint.y; m_ptOldPoint.x = GET_X_LPARAM(pMouseMove->lParam); m_ptOldPoint.y = GET_Y_LPARAM(pMouseMove->lParam); //카메라 제어 if( ( (pMouseMove->wParam & MK_LBUTTON) || (pMouseMove->wParam & MK_RBUTTON) ) ) { if( (pMouseMove->wParam & MK_RBUTTON) ) { // 카메라 제어 m_pBGCamera->Turn( (float)(-(float)dx * 3.14/m_nDeltaX) ); m_pBGCamera->Elevation( (float)((float)-dy * 3.14/m_nDeltaY) ); return; } } if( ( GetKeyState( VK_SCROLL ) & 0x01 ) ) { if( (pMouseMove->wParam & MK_MBUTTON) ) { K3DVector vtView = m_pBGCamera->GetViewVector(); K3DVector vtUp = m_pBGCamera->GetUpVector(); K3DVector vtRes = CrossProduct(vtView, vtUp); Normalize(vtRes); vtUp = CrossProduct(vtRes, vtView); Normalize(vtUp); float x, y, z; x = (-dx*m_fDeltaX*vtRes.x + dy*m_fDeltaY*vtUp.x) * .1f; y = (-dx*m_fDeltaX*vtRes.y + dy*m_fDeltaY*vtUp.y) * .1f; z = (-dx*m_fDeltaX*vtRes.z + dy*m_fDeltaY*vtUp.z) * .1f; m_pBGCamera->Pan(x,y,z); } } } //#endif #endif // } break; case IMSG_MOUSEWHEEL : { #ifdef _TERRAIN_ENABLE_ SIMSG_MOUSEWHEEL* pMouseWheel = static_cast(pGameMsg); pGameMsg->bUse = true; /// 2010.11.10 - prodongi //#ifdef _DEV if (g_UserInfo.isMonkeyTail()) { extern bool g_bDebugMode; if( !g_bDebugMode ) return; short zDelta; zDelta = GET_WHEEL_DELTA_WPARAM(pMouseWheel->wParam); //float fLen = m_pBGCamera->GetDistance(); //float m_fCamMaxDistRatio = 20.0f; //float fFinalDelta = ( float ) zDelta * expf( logf ( fLen / ( 50.0f * m_fCamMaxDistRatio ) ) * 2.0f ) / -8.0f; //if( fLen + fFinalDelta > 120.0f * m_fCamMaxDistRatio ) fFinalDelta = 120.0f * m_fCamMaxDistRatio - fLen; //else if( fLen + fFinalDelta < 22.0f ) fFinalDelta = 22.0f - fLen; m_pBGCamera->Zoom( -zDelta / 8 ); } //#endif #endif } break; case IMSG_LBUTTONUP : { } pGameMsg->bUse = true; break; case IMSG_LBUTTONDOWN : // Terrain selection (Left mouse button) { #ifdef _TERRAIN_ENABLE_ SIMSG_LBUTTONDOWN* pMsg = (SIMSG_LBUTTONDOWN*)pGameMsg; K3DVector vNear, vFar, res; m_pChildViewPort[0]->SetCamera( m_pBGCamera ); m_pChildViewPort[0]->GetCameraSegmentView(GET_X_LPARAM(pMsg->lParam), GET_Y_LPARAM(pMsg->lParam), vNear, vFar ); _oprint( "Terrain Pick : %f, %f, %f\n", res.x, res.y, res.z ); #endif } pGameMsg->bUse = true; break; case IMSG_KEYDOWN: pGameMsg->bUse = true; break; case IMSG_LBUTTONDBLCLK: { } pGameMsg->bUse = true; break; case IMSG_SHOW_UIWINDOW: { m_pGameMng->InterfaceMsg( pGameMsg ); } pGameMsg->bUse = true; break; case IMSG_HOTKEY_EX: { /// 2010.11.10 - prodongi //#ifdef _DEV // extern bool g_bDebugMode; //#endif extern bool g_bRenderUI; SIMSG_HOTKEY_EX* pMsg = static_cast(pGameMsg); if( !pMsg->bUp ) { /*if( ( g_bDebugMode && pMsg->bAlt && pMsg->bCtrl && LOWORD(pMsg->wParam ) == 'H' ) ) { //동영상 제작 지원용으로 사용 중... g_bRenderUI = !g_bRenderUI; m_pGameMng->InterfaceMsg( &SIMSG_UI_OPEN_UPDATE( g_bRenderUI ) ); return; }*/ //종료 메세지 보낸다. if( pMsg->bAlt && pMsg->bCtrl && ( LOWORD(pMsg->wParam ) == VK_F4 ) ) { ProcMsgAtStatic( &STMSG_REQ_CLOSE(false) ); } //메인 게임 UI는 안 나오도록 수정 요망. /*/if( ( pMsg->bCtrl && LOWORD(pMsg->wParam ) == 'H' ) ) { //공식지원 메인 UI & 캐릭터 이름 숨기기 g_bRenderUI = !g_bRenderUI; if( m_pGameMng ) m_pGameMng->InterfaceMsg( &SIMSG_UI_OPEN_UPDATE( g_bRenderUI ) ); }*/ if( ( !pMsg->bShift && !pMsg->bAlt && !pMsg->bCtrl && LOWORD(pMsg->wParam ) == VK_RETURN ) ) { if( g_bRenderUI == true ) return; g_bRenderUI = true; if( m_pGameMng ) m_pGameMng->InterfaceMsg( &SIMSG_UI_OPEN_UPDATE( g_bRenderUI ) ); } if( !pMsg->bShift && !pMsg->bAlt && !pMsg->bCtrl && LOWORD( pMsg->wParam ) == VK_ESCAPE ) { if( m_CurrentState == GAMELOGIN_CREDITS ) { SetToLoginState(); } if( m_CurrentState == GAMELOGIN_CREDITS2 ) { SetToLoginState(); } if( m_CurrentState == GAMELOGIN_CREDITS3 ) { SetToLoginState(); } if( m_CurrentState == GAMELOGIN_CREDITS4 ) { SetToLoginState(); } if( m_CurrentState == GAMELOGIN_CREDITSEPIC6PROLOGUE ) { SetToLoginState(); } if( m_CurrentState == GAMELOGIN_INTRO ) { SetToLoginState(); } } } } break; case IMSG_LOGIN_OTP_ACCOUNT: { pGameMsg->bUse = true; if( m_CurrentState == GAMELOGIN_LOGIN ) { SIMSG_LOGIN_OTP_ACCOUNT* pLoginAccountMsg = (SIMSG_LOGIN_OTP_ACCOUNT*)pGameMsg; //인증 서버 접속 XAddr addr( ENV().GetString( "auth_ip", "" ).c_str(), ENV().GetInt( "auth_port", 4500 ) ); if( !m_pAuthConn->Connect( addr ) ) { int nLastError = ::WSAGetLastError(); char szErrorMsg[1024] = ""; s_sprintf( szErrorMsg, _countof( szErrorMsg ), "%s(%d)", S( 6375 ), nLastError ); MessageBox( g_hWnd, szErrorMsg, "Rappelz-Error", MB_OK|MB_ICONINFORMATION ); m_pGameMng->GameExit(); //exit(-1); return; } SetToLoginStateOff(); //인증 서버 g_UserInfo.SetAccountName( pLoginAccountMsg->m_strAccount.c_str() ); m_strTempPass = pLoginAccountMsg->m_strOTP.c_str(); m_nAuthType = ACCOUNT_AUTH_OTP; //인증 서버에 데이타 보낸다. TS_CA_VERSION msg_ver; strcpy( msg_ver.szVersion, AUTH_VER ); AuthPendMessage( &msg_ver ); m_Crypto.GeneratePublicKey(); char buffer[1024]; TS_PUBLIC_KEY* pKeyMsg = new (buffer) TS_PUBLIC_KEY; m_Crypto.GetLocalPublicKey( reinterpret_cast< unsigned char* >( pKeyMsg+1 ), sizeof( buffer )-sizeof( *pKeyMsg ), &pKeyMsg->nKeySize ); pKeyMsg->size += unsigned int( pKeyMsg->nKeySize ); pKeyMsg->set_check_sum(); AuthPendMessage( pKeyMsg ); } } break; // floyd 3.11.1 iMBC 채널링 구현 case IMSG_LOGIN_IMBC_ACCOUNT: { pGameMsg->bUse = true; if( m_CurrentState == GAMELOGIN_LOGIN ) { SIMSG_LOGIN_IMBC_ACCOUNT* pLoginAccountMsg = (SIMSG_LOGIN_IMBC_ACCOUNT*)pGameMsg; //인증 서버 접속 XAddr addr( ENV().GetString( "auth_ip", "" ).c_str(), ENV().GetInt( "auth_port", 4500 ) ); if( !m_pAuthConn->Connect( addr ) ) { int nLastError = ::WSAGetLastError(); char szErrorMsg[1024] = ""; s_sprintf( szErrorMsg, _countof( szErrorMsg ), "%s(%d)", S( 6375 ), nLastError ); MessageBox( g_hWnd, szErrorMsg, "Rappelz-Error", MB_OK|MB_ICONINFORMATION ); m_pGameMng->GameExit(); //exit(-1); return; } SetToLoginStateOff(); //인증 서버 g_UserInfo.SetAccountName( pLoginAccountMsg->m_strAccount.c_str() ); m_strTempPass = pLoginAccountMsg->m_strPassword.c_str(); m_nAuthType = ACCOUNT_AUTH_IMBC; //인증 서버에 데이타 보낸다. TS_CA_VERSION msg_ver; strcpy( msg_ver.szVersion, AUTH_VER ); AuthPendMessage( &msg_ver ); m_Crypto.GeneratePublicKey(); char buffer[1024]; TS_PUBLIC_KEY* pKeyMsg = new (buffer) TS_PUBLIC_KEY; m_Crypto.GetLocalPublicKey( reinterpret_cast< unsigned char* >( pKeyMsg+1 ), sizeof( buffer )-sizeof( *pKeyMsg ), &pKeyMsg->nKeySize ); pKeyMsg->size += unsigned int( pKeyMsg->nKeySize ); pKeyMsg->set_check_sum(); AuthPendMessage( pKeyMsg ); } } break; case IMSG_LOGIN_ACCOUNT: { pGameMsg->bUse = true; if( m_CurrentState == GAMELOGIN_LOGIN ) { SIMSG_LOGIN_ACCOUNT* pLoginAccountMsg = (SIMSG_LOGIN_ACCOUNT*)pGameMsg; /// 2010.11.10 - prodongi //#ifdef _DEV if (g_UserInfo.isMonkeyTail()) { if( _stricmp( pLoginAccountMsg->m_strAccount.c_str(), "//debug" ) == 0 && _stricmp( pLoginAccountMsg->m_strPassword.c_str(), "//debug" ) == 0 ) { extern bool g_bDebugMode; g_bDebugMode = !g_bDebugMode; return; } if( _stricmp( pLoginAccountMsg->m_strAccount.c_str(), "//camera" ) == 0 && _stricmp( pLoginAccountMsg->m_strPassword.c_str(), "//camera" ) == 0 ) { g_bUserCamMode = !g_bUserCamMode; return; } } //#endif //인증 서버 접속 XAddr addr( ENV().GetString( "auth_ip", "" ).c_str(), ENV().GetInt( "auth_port", 4500 ) ); if( !m_pAuthConn->Connect( addr ) ) { int nLastError = ::WSAGetLastError(); char szErrorMsg[1024] = ""; s_sprintf( szErrorMsg, _countof( szErrorMsg ), "%s(%d)", S( 6375 ), nLastError ); MessageBox( g_hWnd, szErrorMsg, "Rappelz-Error", MB_OK|MB_ICONINFORMATION ); m_pGameMng->GameExit(); //exit(-1); return; } SetToLoginStateOff(); //인증 서버 g_UserInfo.SetAccountName( pLoginAccountMsg->m_strAccount.c_str() ); m_strTempPass = pLoginAccountMsg->m_strPassword.c_str(); m_nAuthType = ACCOUNT_AUTH_NORMAL; //인증 서버에 데이타 보낸다. TS_CA_VERSION msg_ver; strcpy( msg_ver.szVersion, AUTH_VER ); AuthPendMessage( &msg_ver ); m_Crypto.GeneratePublicKey(); char buffer[1024]; TS_PUBLIC_KEY* pKeyMsg = new (buffer) TS_PUBLIC_KEY; m_Crypto.GetLocalPublicKey( reinterpret_cast< unsigned char* >( pKeyMsg+1 ), sizeof( buffer )-sizeof( *pKeyMsg ), &pKeyMsg->nKeySize ); pKeyMsg->size += unsigned int( pKeyMsg->nKeySize ); pKeyMsg->set_check_sum(); AuthPendMessage( pKeyMsg ); } //게임 서버 접속 //TS_CS_ACCOUNT_WITH_AUTH 를 통해 인증(ONE_TIME_KEY는 ts_ac_select_Server할 때 받아옴) // if( m_CurrentState == GAMELOGIN_LOGIN ) // 로긴 상태시 // LoginAccount( pLoginAccountMsg->m_strAccount.c_str(), pLoginAccountMsg->m_strPassword.c_str() ); } break; case IMSG_LOGIN_SID: { //gmpbigsun( 20130613 ) : SID를 이용한 접속 if( m_CurrentState == GAMELOGIN_LOGIN ) { SIMSG_LOGIN_SID* pLoginAccountMsg = (SIMSG_LOGIN_SID*)pGameMsg; //인증 서버 접속 XAddr addr( ENV().GetString( "auth_ip", "" ).c_str(), ENV().GetInt( "auth_port", 4500 ) ); if( !m_pAuthConn->Connect( addr ) ) { int nLastError = ::WSAGetLastError(); char szErrorMsg[1024] = ""; s_sprintf( szErrorMsg, _countof( szErrorMsg ), "%s(%d)", S( 6375 ), nLastError ); MessageBox( g_hWnd, szErrorMsg, "Rappelz-Error", MB_OK|MB_ICONINFORMATION ); m_pGameMng->GameExit(); return; } SetToLoginStateOff(); m_nAuthType = ACCOUNT_AUTH_SID; //인증 서버에 데이타 보낸다. TS_CA_VERSION msg_ver; strcpy( msg_ver.szVersion, AUTH_VER ); AuthPendMessage( &msg_ver ); m_Crypto.GeneratePublicKey(); char buffer[1024]; TS_PUBLIC_KEY* pKeyMsg = new (buffer) TS_PUBLIC_KEY; m_Crypto.GetLocalPublicKey( reinterpret_cast< unsigned char* >( pKeyMsg+1 ), sizeof( buffer )-sizeof( *pKeyMsg ), &pKeyMsg->nKeySize ); pKeyMsg->size += unsigned int( pKeyMsg->nKeySize ); pKeyMsg->set_check_sum(); AuthPendMessage( pKeyMsg ); } } break; case IMSG_LICENSE_AGREE: { pGameMsg->bUse = true; SIMSG_LICENSE_AGREE* pLicenseMsg = (SIMSG_LICENSE_AGREE*)pGameMsg; //약관 동의 if( pLicenseMsg->m_bIsAgree ) { m_bIsAgree = true; SetToServerSelectStateOn(); //라이센스 창 CLOSE m_pGameMng->InterfaceMsg( &SIMSG_TOGGLE_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LICENSE ) ); } } break; case IMSG_CREATE_NEWCHAR: { SIMSG_CREATE_NEWCHAR* pCreateNewCharMsg = (SIMSG_CREATE_NEWCHAR*)pGameMsg; if( m_CurrentState == GAMELOGIN_CREATECHAR_CUSTOMIZING ) { if( pCreateNewCharMsg->m_strName.empty() ) m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL, S(806), true ) ); else { m_bCreating = true; // Check if the name is available for creation TS_CS_CHECK_CHARACTER_NAME msgCharName; msgCharName.name[18] = '\0'; ::strncpy( msgCharName.name, pCreateNewCharMsg->m_strName.c_str(), 18 ); PendMessage( &msgCharName ); m_strNewCharName = pCreateNewCharMsg->m_strName; } } } pGameMsg->bUse = true; break; case MSG_SEND_DATA : { SMSG_SEND_DATA * pSendMsg = static_cast(pGameMsg); //서버 엔터 대기 중 취소 되었음. if( pSendMsg->strMessage == "loginwaiting_cancel" ) _gotoAccount(); else if( pSendMsg->strMessage == "BadUserWarning" ) { if( pSendMsg->nNumber == 0 ) { //로그인 시작 //인증 성공 TS_CA_SERVER_LIST msg_server_list; AuthPendMessage( &msg_server_list ); } else { //취소 m_pGameMng->ClearDummy(); //인증 실패 했으므로, 로긴 가능 하도록 클리어 더미 m_pAuthConn->Close(); SAFE_DELETE( m_pAuthConn ); SAFE_DELETE( m_pRecvQueue ); m_pAuthConn = new XSyncStreamConnection( true, true ); m_pRecvQueue = IQueue::MakeQueue( 1*1024 ); SetCurState( GAMELOGIN_LOGIN ); } } else if( pSendMsg->strMessage == "select_surver" ) { int nSize( m_vStrServerURL.size() ); if( pSendMsg->nNumber >= 0 && pSendMsg->nNumber < m_vStrServerURL.size() ) { //strURL 로 길드 관리 웹페이지 열기 //724, 543 m_vStrServerURLIndex = pSendMsg->nNumber; if(GetLocaleOption().GetValueString("NOTICE_URL",NULL) == NULL) { m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SCREENSHOT, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERSCREENSHOT, true) ); } if(m_pGameMng->IsShow( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERSCREENSHOT ) || GetLocaleOption().GetValueString("NOTICE_URL",NULL) == NULL) { int nResolutionW = KUIWndManager::GetResolution().cx; int blankwidth = (nResolutionW - (549 + 296 + 5))/2; SetOtherNavigate( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SCREENSHOT, m_vStrServerURL[pSendMsg->nNumber].c_str(), 500, 400 ); SetOtherNavigateMove( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SCREENSHOT, 25 + blankwidth , KUIWndManager::GetResolution().cy/2 - 463/2 + 45); _oprint("select_surver:%s\n", m_vStrServerURL[pSendMsg->nNumber].c_str()); } } } else if( pSendMsg->strMessage == "update_race_music" ) { PlayRaceSound( pSendMsg->nNumber, false ); } else if( pSendMsg->strMessage == "dclick_login_char" ) { if( (pSendMsg->nNumber >=0 && pSendMsg->nNumber < GameRule::nMaxCharactersPerAccount ) && pSendMsg->nNumber < m_nCharacterCount ) { AvatarSelect(pSendMsg->nNumber); GameStart ( m_Avatars[pSendMsg->nNumber].pAvatar->GetName() , m_Avatars[pSendMsg->nNumber].pAvatar->GetRace() ); //m_pGameMng->InterfaceMsg( &SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_RACE_DESC, "remove_movie" ) ); } else m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL, S(808), true ) ); } else if( pSendMsg->strMessage == "login_char" ) { if( (pSendMsg->nNumber >=0 && pSendMsg->nNumber < GameRule::nMaxCharactersPerAccount ) && m_nCharacterCount ) { GameStart ( m_Avatars[pSendMsg->nNumber].pAvatar->GetName() , m_Avatars[pSendMsg->nNumber].pAvatar->GetRace() ); //m_pGameMng->InterfaceMsg( &SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_RACE_DESC, "remove_movie" ) ); } else m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL, S(808), true ) ); } else if( pSendMsg->strMessage == "char_select_down" ) { int nIndex = m_nSelectedCharIndex+1; if( nIndex >= m_nCharacterCount ) nIndex = 0; AvatarSelect(nIndex); } else if( pSendMsg->strMessage == "char_select_up" ) { int nIndex = m_nSelectedCharIndex-1; if( nIndex < 0 ) nIndex = m_nCharacterCount-1; AvatarSelect(nIndex); } else if( pSendMsg->strMessage == "CreateMotion" ) { m_Avatars[ m_nSelectedCharIndex ].pAvatar->Ani_Idle(); } else if( pSendMsg->strMessage == "select_server_msgbox" ) { // m_pGameMng->InterfaceMsg( &SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_RACE_DESC, "remove_movie" ) ); m_pGameMng->InterfaceMsg( &SMSG_SEND_DATA( "close_all_message_box" ) ); } } pGameMsg->bUse = true; break; case IMSG_UIWND_NOTIFY_TO_LOBBY: { if( m_bCreating ) { pGameMsg->bUse = true; break; } static const char* c_szAvatarSelectID = "avatarSelect"; static const size_t c_nAvatarSelectLen = ::strlen( c_szAvatarSelectID ); SIMSG_UIWND_NOTIFY_TO_LOBBY* pBtnClickMsg = (SIMSG_UIWND_NOTIFY_TO_LOBBY*)pGameMsg; std::string strButtonID = pBtnClickMsg->m_szButtonID; if( !pBtnClickMsg->m_bJustPress ) { if( 0 == strButtonID.compare( "button_character_create" ) ) { if( m_CurrentState == GAMELOGIN_CHARSELECT ) // When in character selection state { // Only if there is space to create more if( m_nCharacterCount < GameRule::nMaxCharactersPerAccount) SetToRaceSelectState(); else m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL, S(807), true ) ); } } else if( 0 == strButtonID.compare( "button_character_delete" ) ) { if( m_CurrentState == GAMELOGIN_CHARSELECT/* && !m_bFreezeSelect*/ ) // 캐랙터 선택 상태시 { if( 0 <= m_nSelectedCharIndex && m_nSelectedCharIndex < GameRule::nMaxCharactersPerAccount ) m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_DELETECHARCHECK, SYS_MSG_DEL_CHARACTOR ) ); else m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL, SYS_MSG_SELECT_DELCHARACTOR, true ) ); } } else if( 0 == strButtonID.compare( "button_help" ) ) { if(GetLocaleOption().GetValueString("SECURITY_URL", NULL) != NULL) { static int button_help_delay = 0; if( GetSafeTickCount() - button_help_delay > 3000) { button_help_delay = GetSafeTickCount(); ShellExecute( NULL, NULL, "iexplore.exe", GetLocaleOption().GetValueString("SECURITY_URL", ""), NULL, SW_SHOWMAXIMIZED ); } } } else if( 0 == strButtonID.compare( "entergamebtn" ) ) { if( (m_nSelectedCharIndex >=0 && m_nSelectedCharIndex < GameRule::nMaxCharactersPerAccount ) && m_nCharacterCount ) { GameStart ( m_Avatars[m_nSelectedCharIndex].pAvatar->GetName() , m_Avatars[m_nSelectedCharIndex].pAvatar->GetRace() ); //m_pGameMng->InterfaceMsg( &SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_RACE_DESC, "remove_movie" ) ); } else m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_GENERAL, S(808), true ) ); } else if( strstr( strButtonID.c_str(), "!!!SELECT_SERVER" ) ) { if( !m_bIsAgree ) return; //약관에 동의 하지 않으면, 게임을 진행 할 수 없다. if( m_CurrentState == GAMELOGIN_SERVERSELECT_ON ) { SetCurState( GAMELOGIN_GAMESERVER_LOGIN ); std::vector< std::string > vString; MsgSplit( strButtonID.c_str(), vString, L"|" ); if( vString.size()>4 ) { //서버가 선택 되었음. TS_CA_SELECT_SERVER msg_select_server; msg_select_server.server_idx = atoi( vString[3].c_str() ); m_SelectServer_PORT = atoi( vString[4].c_str() ); m_SelectServer_IP = vString[2].c_str(); AuthPendMessage( &msg_select_server ); _LOGIN_STATE State = GetCurState(); if( State == GAMELOGIN_SERVERSELECT_ON || State == GAMELOGIN_GAMESERVER_LOGIN ) g_bServerListSeen = true; else g_bServerListSeen = false; //m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SELECT_SERVER, S(119) ) ); //m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_SELECT_SERVER, " " ) ); g_bServerListSeen = false; } else { assert( 0 && "Invalid server data" ); } vString.clear(); } } else if( 0 == strButtonID.compare( "exitbtn" ) ) { _LOGIN_STATE State = GetCurState(); if( State == GAMELOGIN_SERVERSELECT_ON || State == GAMELOGIN_GAMESERVER_LOGIN ) g_bServerListSeen = true; else g_bServerListSeen = false; m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_EXITGAME, SYS_MSG_SERVER_EXITGAME ) ); g_bServerListSeen = false; } else if( 0 == strButtonID.compare( "button_back" ) ) //서버리스트 -> 로그인 { // floyd 3.11.1 iMBC 채널링 구현 if ( ENV().IsExist( "imbclogin" ) ) { m_pGameMng->InterfaceMsg( &SIMSG_REQ_OPEN_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_EXITGAME, SYS_MSG_SERVER_EXITGAME ) ); } else { //라이센스 창 CLOSE if( !m_bIsAgree ) m_pGameMng->InterfaceMsg( &SIMSG_TOGGLE_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_LICENSE ) ); _gotoAccount(); } } else if( 0 == strButtonID.compare( "selectserverbtn" ) ) // Character Select -> Login { SetToLogOut(); SetToLoginState(); } else if( 0 == strButtonID.compare( "clan_cancle_bt" ) ) // Race Selection -> Character Selection { if( GAMELOGIN_CREATECHAR_RACE_SELECT == m_CurrentState ) { if( m_nCharacterCount == 0 ) { SetToLogOut(); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_RACE_SELECT, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_RACE_DESC, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING01, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING02, false ) ); SetToLoginState(); } else { SetCurState( GAMELOGIN_CREATECHAR_RACE_SELECT_BACK ); SetToPrepareCharSelectState(false); } } } else if( 0 == strButtonID.compare( "malebtn" ) ) { m_nSelectSex = SEX_MALE; SendCustomizingMsgToWnd( GetCrrCustomizingAvatar() ); } else if( 0 == strButtonID.compare( "fmalebtn" ) ) { m_nSelectSex = SEX_FEMALE; SendCustomizingMsgToWnd( GetCrrCustomizingAvatar() ); } else if( 0 == strButtonID.compare( "cc_bt" ) ) // Cancel button { SetToRaceSelectState(); m_nSelectCustomRace = -1; m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARSELECTTEXT, false) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_SECOND, false) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, false) ); //m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE01, false) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_RACE_SELECT, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING01, true ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING02, false ) ); } else if (0 == strButtonID.compare("select0000") || 0 == strButtonID.compare("select0001") || 0 == strButtonID.compare("select0002") || 0 == strButtonID.compare("select0003") || 0 == strButtonID.compare("select0004") || 0 == strButtonID.compare("select0005") || 0 == strButtonID.compare("select0006") || 0 == strButtonID.compare("select0007") || 0 == strButtonID.compare("select0008") || 0 == strButtonID.compare("select0009") || 0 == strButtonID.compare("select0010") || 0 == strButtonID.compare("select0011")) { // Faces if (!IsCameraZooming(m_nSelectCustomRace)) { SAvatarSelector* pSelectAvatar = GetCrrCustomizingAvatar(); CustomingAvatar(pSelectAvatar, MODEL_INFO::NUDE_FACE, pBtnClickMsg); if (m_nNewCameraIndex != LOBBY_CAMERA_ZOOM) { m_nNewCameraIndex = LOBBY_CAMERA_ZOOMING; PlayRaceCamera(pSelectAvatar->GetRace(), LOBBY_CAMERA_ZOOMING); m_pGameMng->InterfaceMsg(&SIMSG_UI_CUSTOM(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, SIMSG_UI_CUSTOM::BUTTON_ALLOFF)); } } } else if (0 == strButtonID.compare("select0100") || 0 == strButtonID.compare("select0101") || 0 == strButtonID.compare("select0102") || 0 == strButtonID.compare("select0103") || 0 == strButtonID.compare("select0104") || 0 == strButtonID.compare("select0105") || 0 == strButtonID.compare("select0106") || 0 == strButtonID.compare("select0107") || 0 == strButtonID.compare("select0108") || 0 == strButtonID.compare("select0109") || 0 == strButtonID.compare("select0110") || 0 == strButtonID.compare("select0111") || 0 == strButtonID.compare("select0112") || 0 == strButtonID.compare("select0113") || 0 == strButtonID.compare("select0114") || 0 == strButtonID.compare("select0115") || 0 == strButtonID.compare("select0116") || 0 == strButtonID.compare("select0117") || 0 == strButtonID.compare("select0118") || 0 == strButtonID.compare("select0119")) { // Face tatoos if (!IsCameraZooming(m_nSelectCustomRace)) { SAvatarSelector* pSelectAvatar = GetCrrCustomizingAvatar(); _oprint("[selecting tatoo] pBtnClickMsg->m_textureId: %d\n", pBtnClickMsg->m_textureId); CustomingAvatar(pSelectAvatar, MODEL_INFO::NUDE_DECO, pBtnClickMsg); if (m_nNewCameraIndex != LOBBY_CAMERA_ZOOM) { m_nNewCameraIndex = LOBBY_CAMERA_ZOOMING; PlayRaceCamera(pSelectAvatar->GetRace(), LOBBY_CAMERA_ZOOMING); m_pGameMng->InterfaceMsg(&SIMSG_UI_CUSTOM(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, SIMSG_UI_CUSTOM::BUTTON_ALLOFF)); } } } else if (0 == strButtonID.compare("select0200") || 0 == strButtonID.compare("select0201") || 0 == strButtonID.compare("select0202") || 0 == strButtonID.compare("select0203") || 0 == strButtonID.compare("select0204") || 0 == strButtonID.compare("select0205") || 0 == strButtonID.compare("select0206") || 0 == strButtonID.compare("select0207")) { // Hairstyles if (!IsCameraZooming(m_nSelectCustomRace)) { SAvatarSelector* pSelectAvatar = GetCrrCustomizingAvatar(); pBtnClickMsg->m_textureId = 0; CustomingAvatar(pSelectAvatar, MODEL_INFO::NUDE_HAIR, pBtnClickMsg); _oprint("[HAIR] Color index: %d; Hair RGB: %d; Button haircolor: %d\n", pSelectAvatar->GetHairColorIndex(), pSelectAvatar->GetHairColorRGB(), pBtnClickMsg->m_hairColor); if (m_nNewCameraIndex != LOBBY_CAMERA_ZOOM) { m_nNewCameraIndex = LOBBY_CAMERA_ZOOMING; PlayRaceCamera(pSelectAvatar->GetRace(), LOBBY_CAMERA_ZOOMING); m_pGameMng->InterfaceMsg(&SIMSG_UI_CUSTOM(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, SIMSG_UI_CUSTOM::BUTTON_ALLOFF)); } } } else if (0 == strButtonID.compare("select0300") || 0 == strButtonID.compare("select0301") || 0 == strButtonID.compare("select0302") || 0 == strButtonID.compare("select0303") || 0 == strButtonID.compare("select0304") || 0 == strButtonID.compare("select0305") || 0 == strButtonID.compare("select0306") || 0 == strButtonID.compare("select0307") || 0 == strButtonID.compare("select0308") || 0 == strButtonID.compare("select0309") || 0 == strButtonID.compare("select0310") || 0 == strButtonID.compare("select0311") || 0 == strButtonID.compare("select0312") || 0 == strButtonID.compare("select0313") || 0 == strButtonID.compare("select0314") || 0 == strButtonID.compare("select0315") || 0 == strButtonID.compare("select0316") || 0 == strButtonID.compare("select0317") || 0 == strButtonID.compare("select0318") || 0 == strButtonID.compare("select0319") || 0 == strButtonID.compare("select0320") || 0 == strButtonID.compare("select0321") || 0 == strButtonID.compare("select0322") || 0 == strButtonID.compare("select0323") || 0 == strButtonID.compare("select0324") || 0 == strButtonID.compare("select0325") || 0 == strButtonID.compare("select0326") || 0 == strButtonID.compare("select0327") || 0 == strButtonID.compare("select0328") || 0 == strButtonID.compare("select0329") || 0 == strButtonID.compare("select0330") || 0 == strButtonID.compare("select0331") || 0 == strButtonID.compare("select0332") || 0 == strButtonID.compare("select0333")) { // Hair color SAvatarSelector* pSelectAvatar = GetCrrCustomizingAvatar(); int nControlID = 300; for (int i = 0; i < 34; i++) { std::string strOut = CStringUtil::StringFormat("select03%02d", i); if (strButtonID.compare(strOut) == 0) { nControlID += i; } } int nTempColor = SUICreateCharSecondDlg::m_CharacterHairDyesMap->at(nControlID); pBtnClickMsg->m_hairColor = nTempColor; pBtnClickMsg->m_textureId = nTempColor; CustomingAvatar(pSelectAvatar, c_nLOBBY_NUDE_HAIRCOLOR, pBtnClickMsg); } else if (0 == strButtonID.compare("select0400") || 0 == strButtonID.compare("select0401") || 0 == strButtonID.compare("select0402") || 0 == strButtonID.compare("select0403")) { // Clothes (outfit) if (!IsCameraZooming(m_nSelectCustomRace)) { SAvatarSelector* pSelectAvatar = GetCrrCustomizingAvatar(); //pBtnClickMsg->m_nSelectIndex = CustomingAvatar(pSelectAvatar, MODEL_INFO::NUDE_BODY, pBtnClickMsg); if (m_nNewCameraIndex != LOBBY_CAMERA_ZOOMOUT) { m_nNewCameraIndex = LOBBY_CAMERA_ZOOMING_OUT; PlayRaceCamera(pSelectAvatar->GetRace(), LOBBY_CAMERA_ZOOMING, SEQTYPE_REVERSE); m_pGameMng->InterfaceMsg(&SIMSG_UI_CUSTOM(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, SIMSG_UI_CUSTOM::BUTTON_ALLOFF)); } } } else if (0 == strButtonID.compare("select0500") || 0 == strButtonID.compare("select0501") || 0 == strButtonID.compare("select0502") || 0 == strButtonID.compare("select0503") || 0 == strButtonID.compare("select0504") || 0 == strButtonID.compare("select0505") || 0 == strButtonID.compare("select0506") || 0 == strButtonID.compare("select0507") || 0 == strButtonID.compare("select0508") || 0 == strButtonID.compare("select0509") || 0 == strButtonID.compare("select0510") || 0 == strButtonID.compare("select0511")) { // Skin color if (!IsCameraZooming(m_nSelectCustomRace)) { SAvatarSelector* pSelectAvatar = GetCrrCustomizingAvatar(); CustomingAvatar(pSelectAvatar, c_nLOBBY_NUDE_SKIN, pBtnClickMsg); if (m_nNewCameraIndex != LOBBY_CAMERA_ZOOMOUT) { m_nNewCameraIndex = LOBBY_CAMERA_ZOOMING_OUT; PlayRaceCamera(pSelectAvatar->GetRace(), LOBBY_CAMERA_ZOOMING, SEQTYPE_REVERSE); m_pGameMng->InterfaceMsg(&SIMSG_UI_CUSTOM(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_ROTATE00, SIMSG_UI_CUSTOM::BUTTON_ALLOFF)); } } } else if( 0 == strButtonID.compare( "prevbtn" ) ) // Character creation step 1 { } else if( 0 == strButtonID.compare( "zoom" ) ) // Camera Zoom In/Out { int nRace(-1); if( m_CurrentState == GAMELOGIN_CHARSELECT ) nRace = m_nSelectChrRace; else if( m_CurrentState == GAMELOGIN_CREATECHAR_CUSTOMIZING ) nRace = m_nSelectCustomRace; if( m_nNewCameraIndex == LOBBY_CAMERA_ZOOM ) { m_nNewCameraIndex = LOBBY_CAMERA_ZOOMING_OUT; PlayRaceCamera(nRace, LOBBY_CAMERA_ZOOMING, SEQTYPE_REVERSE); } else if( m_nNewCameraIndex == LOBBY_CAMERA_ZOOMOUT ) { m_nNewCameraIndex = LOBBY_CAMERA_ZOOMING; PlayRaceCamera(nRace, LOBBY_CAMERA_ZOOMING, SEQTYPE_NORMAL); } } else if( 0 == strButtonID.compare( "createBtn" ) ) { } else if( 0 == strButtonID.compare( "race_button" ) ) { if( m_CurrentState == GAMELOGIN_CREATECHAR_RACE_MOVIE ) // When in character creation state { SetToCostomizing(); } break; } else if( 0 == strButtonID.compare( "race_cancel_button" ) ) { if( m_CurrentState == GAMELOGIN_CREATECHAR_RACE_MOVIE ) { SetToRaceSelectState(); } } else if( 0 == strButtonID.compare( "rotatelbtn" ) ) { m_bRatateL = false; } else if( 0 == strButtonID.compare( "rotaterbtn" ) ) { m_bRatateR = false; } else if( strButtonID.size() > c_nAvatarSelectLen && 0 == ::strnicmp( strButtonID.c_str(), c_szAvatarSelectID, c_nAvatarSelectLen ) ) // Character selection "buttons" (actually a character box with name job etc) { int nIndex = ::atoi( strButtonID.c_str() + c_nAvatarSelectLen ); if( 0 <= nIndex && nIndex < m_nCharacterCount ) { AvatarSelect( ::atoi( strButtonID.c_str() + c_nAvatarSelectLen ) ); } } else if( 0 == strButtonID.compare( "Web_SutDown" ) ) { ProcMsgAtStatic( &STMSG_REQ_CLOSE(false) ); } else if( 0 == strButtonID.compare( "button_epic5_part2_credits" ) ) { SetToCreditsState(); } else if( 0 == strButtonID.compare( "button_epic6_Prologue_credits" ) ) { SetToCredits2State(); } else if( 0 == strButtonID.compare( "button_epic7_Prologue_credits" ) ) { SetToCredits3State(); } else if ( 0 == strButtonID.compare( "button_epic8_credits" ) ) { SetToCredits4State(); } else if( 0 == strButtonID.compare( "Epic6_Prologue_inro" ) ) { if(m_IntroScene) { m_IntroScene->activate(false); m_IntroScene->play(false); m_pSceneMgr->removeScene2( *m_IntroScene ); } if(m_IntroScene_Navislamia) { if (!m_IntroScene_Navislamia->isActivated()) { m_pSceneMgr->addScene( *m_IntroScene_Navislamia ); m_IntroScene_Navislamia->activate(true); m_IntroScene_Navislamia->play(true); } } if(m_IntroScene_GoldenMonarch) { m_IntroScene_GoldenMonarch->activate(false); m_IntroScene_GoldenMonarch->play(false); m_pSceneMgr->removeScene2( *m_IntroScene_GoldenMonarch ); } } else if( 0 == strButtonID.compare( "Epic6_part1_inro" ) ) { if(m_IntroScene) { m_IntroScene->activate(false); m_IntroScene->play(false); m_pSceneMgr->removeScene2( *m_IntroScene ); } if(m_IntroScene_Navislamia) { m_IntroScene_Navislamia->activate(false); m_IntroScene_Navislamia->play(false); m_pSceneMgr->removeScene2( *m_IntroScene_Navislamia ); } if(m_IntroScene_GoldenMonarch) { /// 2011.01.03 - prodongi if (!m_IntroScene_GoldenMonarch->isActivated()) { m_pSceneMgr->addScene( *m_IntroScene_GoldenMonarch ); m_IntroScene_GoldenMonarch->activate(true); m_IntroScene_GoldenMonarch->play(true); } } } else if( 0 == strButtonID.compare( "Epic6_part2_inro" ) ) { if(m_IntroScene) { /// 2011.01.13 - prodongi if (!m_IntroScene->isActivated()) { m_pSceneMgr->addScene( *m_IntroScene ); m_IntroScene->activate(true); m_IntroScene->play(true); } } if(m_IntroScene_Navislamia) { m_IntroScene_Navislamia->activate(false); m_IntroScene_Navislamia->play(false); m_pSceneMgr->removeScene2( *m_IntroScene_Navislamia ); } if(m_IntroScene_GoldenMonarch) { m_IntroScene_GoldenMonarch->activate(false); m_IntroScene_GoldenMonarch->play(false); m_pSceneMgr->removeScene2( *m_IntroScene_GoldenMonarch ); } } else if( 0 == strButtonID.compare( "button_member" ) ) { static int join_delay = 0; if( GetSafeTickCount() - join_delay > 3000) { join_delay = GetSafeTickCount(); ShellExecute( NULL, NULL, "iexplore.exe", //GetLocaleOption().GetValueString("JOIN_URL", "http://rappelz.nflavor.com/member/join.aspx"), GetLocaleOption().GetValueString("JOIN_URL", "http://127.0.0.1/member/join.aspx"), // Fraun 7/12/2025 nullifying gala spyware NULL, SW_SHOWMAXIMIZED ); } } else if( 0 == strButtonID.compare( "button_id_pw_find" ) ) { static int find_id_pw_delay = 0; if( GetSafeTickCount() - find_id_pw_delay > 3000) { find_id_pw_delay = GetSafeTickCount(); ShellExecute( NULL, NULL, "iexplore.exe", GetLocaleOption().GetValueString("IDPW_URL", "https://rappelz.nflavor.com/member/find_id.aspx"), NULL, SW_SHOWMAXIMIZED ); } } else if( 0 == strButtonID.compare( "button_intro" ) ) { SetToIntroState(true); } else if( 0 == strButtonID.compare( "button_screenshot" ) ) { if( m_vStrServerURLIndex >= 0 && m_vStrServerURLIndex < m_vStrServerURL.size() ) { //SetOtherNavigate( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SCREENSHOT, m_vStrServerURL[m_vStrServerURLIndex].c_str(), 500, 400 ); //SetOtherNavigateMove( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SCREENSHOT, 107, 240 ); int nResolutionW = KUIWndManager::GetResolution().cx; int blankwidth = (nResolutionW - (549 + 296 + 5))/2; SetOtherNavigate( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SCREENSHOT, m_vStrServerURL[m_vStrServerURLIndex].c_str(), 500, 400 ); //SetOtherNavigateMove( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SCREENSHOT, 25 + blankwidth , 30 + (145*KUIWndManager::GetResolution().cy) / 768 ); SetOtherNavigateMove( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SCREENSHOT, 25 + blankwidth , KUIWndManager::GetResolution().cy/2 - 463/2 + 45); } m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERSCREENSHOT, true) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERNOTICE, false) ); } else if( 0 == strButtonID.compare( "button_notice" ) ) { SetOtherNavigateClose( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SCREENSHOT ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERSCREENSHOT, false) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SERVERNOTICE, true) ); } } else { if( 0 == strButtonID.compare( "rotatelbtn" ) ) { m_bRatateL = true; m_bRatateR = false; } else if( 0 == strButtonID.compare( "rotaterbtn" ) ) { m_bRatateR = true; m_bRatateL = false; } } } pGameMsg->bUse = true; break; case IMSG_REQ_OPEN_MSGBOX: { _LOGIN_STATE State = GetCurState(); // MessageBox( g_hWnd, CStringUtil::StringFormat( "IMSG_REQ_OPEN_MSGBOX - %d", State ).c_str(),"debug", MB_OK ); if( State == GAMELOGIN_SERVERSELECT_ON || State == GAMELOGIN_GAMESERVER_LOGIN || State == GAMELOGIN_PREPARE_CHARSELECT ) g_bServerListSeen = true; else g_bServerListSeen = false; m_pGameMng->InterfaceMsg( pGameMsg ); g_bServerListSeen = false; } break; case IMSG_UI_STATE_UPDATE: //이걸 여기다 보내는 이유가 뭐야;;; pGameMsg->bUse = true; break; case IMSG_UI_RACE_SELECT: { if( m_CurrentState == GAMELOGIN_CREATECHAR_RACE_SELECT || m_CurrentState == GAMELOGIN_CREATECHAR_RACE_MOVIE ) { SIMSG_UI_RACE_SELECT* pShowRaceMovie = (SIMSG_UI_RACE_SELECT*)pGameMsg; if( m_nSelectCustomRace != pShowRaceMovie->m_nRace ) { m_nSelectCustomRace = pShowRaceMovie->m_nRace; m_pNewAvatar->SetRace( pShowRaceMovie->m_nRace ); m_pNewAvatar->SetSex( SEX_FEMALE ); PlayRaceSound( pShowRaceMovie->m_nRace, false ); SetCurState( GAMELOGIN_CREATECHAR_RACE_MOVIE ); m_pGameMng->InterfaceMsg( &SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_RACE_DESC, number_t( pShowRaceMovie->m_nRace ), "select_race" ) ); if(pShowRaceMovie->m_nRace == GCLAN_ASURA ) m_BgScene_ClanDesc_Asura->activate(true); if(pShowRaceMovie->m_nRace == GCLAN_DEVA ) m_BgScene_ClanDesc_Deva->activate(true); if(pShowRaceMovie->m_nRace == GCLAN_GAIA ) m_BgScene_ClanDesc_Gaia->activate(true); m_BgScene_ClanSelect_Asura->activate(false); m_BgScene_ClanSelect_Gaia->activate(false); m_BgScene_ClanSelect_Deva->activate(false); } m_pGameMng->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_RACE_DESC, true ) ); m_pGameMng->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_RACE_SELECT, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING01, false ) ); m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COPYRIGHTS_MARKING02, true ) ); } } break; case IMSG_UI_SEND_DATA: { SIMSG_UI_SEND_DATA* pData = (SIMSG_UI_SEND_DATA*)pGameMsg; //if( pData->m_nTarget == SIMSG_TOGGLE_UIWINDOW::UIWINDOW_RACE_DESC ) //m_pGameMng->InterfaceMsg( &SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_RACE_DESC, pData->m_strString.c_str() ) ); } break; case MSG_REQUEST_SECURITY_NO: { m_pGameMng->InterfaceMsg( pGameMsg ); } break; case MSG_SC_CREATE_SECURITY_NO: //새 보안 입력 { m_pGameMng->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SECURITYSETTING, true, true ) ); pGameMsg->bUse = true; } break; case MSG_SC_CHANGE_SECURITY_NO: { m_pGameMng->InterfaceMsg( &SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SECURITYSETTINGMODIFY, true, true ) ); pGameMsg->bUse = true; } break; case MSG_SECURITY_NO: //창고 보안 암호 서버에 요청 { SMSG_SECURITY_NO* pSecurityMsg = static_cast(pGameMsg); TS_CS_SECURITY_NO msg; msg.mode = pSecurityMsg->mode; ::strncpy( msg.security_no, pSecurityMsg->security_no, 18 ); PendMessage( &msg ); pGameMsg->bUse = true; } break; case MSG_CS_CREATE_SECURITY_NO: //새 보안 암호 서버에 확인 요청 { SMSG_CS_CREATE_SECURITY_NO* pSecurityMsg = static_cast(pGameMsg); pGameMsg->bUse = true; } break; case MSG_CHANGE_SECURITY_NO: //보안 암호 변경 서버에 확인 요청 { SMSG_CHANGE_SECURITY_NO* pSecurityMsg = static_cast(pGameMsg); /* TS_CS_CHANGE_SECURITY_NO msg; ::strncpy( msg.security_no_old, pSecurityMsg->security_no_old, 18 ); ::strncpy( msg.security_no, pSecurityMsg->security_no, 18 ); PendMessage( &msg ); */ pGameMsg->bUse = true; } break; case MSG_CS_REQUEST_CLEAR_SECURITY_NO: //보안 암호 삭제 요청 { SMSG_CS_REQUEST_CLEAR_SECURITY_NO* pSecurityMsg = static_cast(pGameMsg); /* TS_CS_REQUEST_CLEAR_SECURITY_NO msg; PendMessage( &msg ); */ pGameMsg->bUse = true; } break; case MSG_SC_CLEAR_SECURITY_NO: //보안 암호 삭제 수락 여부 { SMSG_SC_CLEAR_SECURITY_NO* pSecurityMsg = static_cast(pGameMsg); if(pSecurityMsg->clearable) { m_pGameMng->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SECURITYCLEAR, true, true ) ); pGameMsg->bUse = true; } else { m_pGameMng->InterfaceMsg( &SIMSG_UI_PASSWORD_COMPARE( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SECURITYCLEAR, SIMSG_UI_PASSWORD_COMPARE::FAILED_ACCESS_DENIED_FROM_SERVER) ); } pGameMsg->bUse = true; } break; case MSG_CS_CLEAR_SECURITY_NO: //보안 암호 삭제를 위한 암호, 주민번호 보내기. { SMSG_CS_CLEAR_SECURITY_NO* pSecurityMsg = static_cast(pGameMsg); /* TS_CS_CLEAR_SECURITY_NO msg; ::strncpy( msg.security_no, pSecurityMsg->security_no, 18 ); ::strncpy( msg.password, pSecurityMsg->password, 18 ); PendMessage( &msg ); */ pGameMsg->bUse = true; } break; default: { //_oprint( "처리 안 한 메세지 : [%d]\n", pGameMsg->nType ); //pGameMsg->bUse = true; } break; } } void SGameRenewalLobby::UpdatePendingTime( AR_TIME arTime ) { m_dwServerWaitStartTime = m_dwTime; m_dwServerWaitTime = arTime*10; //MSG 박스 띄운다. std::string strMsg; GetPendingTimeString(m_dwServerWaitTime, strMsg); m_pGameMng->InterfaceMsg( &SIMSG_UPDATE_MSGBOX( SIMSG_REQ_OPEN_MSGBOX::MSGBOX_LOGINWAITING, strMsg.c_str() ) ); } void SGameRenewalLobby::GetPendingTimeString( DWORD dwServerWaitTime, std::string& strMsg ) { int nWaitMinute = dwServerWaitTime / 1000; // Miliseconds -> Seconds conversion int nWaitSecond = nWaitMinute % 60; // Remainder after dividing by 60 nWaitMinute = nWaitMinute / 60; // Seconds -> Minutes conversion if (nWaitMinute < 1) { strMsg = CStringUtil::StringFormat( S(113) ); // The server is busy.
Your waiting time is less than 1 minute. } else { strMsg = SR(114, "#@minute@#", nWaitMinute ); // Waiting. The server is too busy.
The waiting time is approximately #@minute@# min(s) } } void SGameRenewalLobby::CustomingAvatar( SAvatarSelector* pSelectAvatar, int PartsID, SIMSG_UIWND_NOTIFY_TO_LOBBY* pBtnClickMsg ) { if( !pSelectAvatar || !pBtnClickMsg ) return; _oprint("[CustomingAvatar] m_nSelectIndex: %d; m_textureId: %d; m_szButtonID: %s; m_bJustPress: %s\n", pBtnClickMsg->m_nSelectIndex, pBtnClickMsg->m_textureId, pBtnClickMsg->m_szButtonID, pBtnClickMsg->m_bJustPress ? "true" : "false"); _oprint("[SGameRenewalLobby::CustomingAvatar] PartsID: %d pBtnClickMsg->m_nSelectIndex: %d\n", PartsID, pBtnClickMsg->m_nSelectIndex); switch( PartsID ) { case MODEL_INFO::NUDE_HAIR: { int nRealCode; switch (pBtnClickMsg->m_nSelectIndex) { case 200: { nRealCode = 101; break; } case 201: { nRealCode = 103; break; } case 202: { nRealCode = 105; break; } case 203: { nRealCode = 701; break; } case 204: { nRealCode = 702; break; } case 205: { nRealCode = 703; break; } case 206: { nRealCode = 704; break; } case 207: { nRealCode = 705; break; } default: { nRealCode = 101; break; } } // Hardcode this bullshit because it becomes with alpha for some reason, so transparent hair, fuck it if (pSelectAvatar->GetHairColorIndex() < 10) { if (pSelectAvatar->GetRace() == GCLAN_GAIA) { //pSelectAvatar->SetHairColorRGB(15804416); //pSelectAvatar->SetHairColorIndex(0); } //pBtnClickMsg->m_hairColor = pSelectAvatar->GetHairColorIndex(); //CustomingAvatar(pSelectAvatar, c_nLOBBY_NUDE_HAIRCOLOR, pBtnClickMsg); } pSelectAvatar->SetHairIndex( pBtnClickMsg->m_nSelectIndex ); pSelectAvatar->SetNudeCode(PartsID, nRealCode); } break; case MODEL_INFO::NUDE_FACE: { pSelectAvatar->SetFaceIndex( pBtnClickMsg->m_nSelectIndex ); pSelectAvatar->SetNudeCode( PartsID, GetDefaultItemDB().GetFaceID(pBtnClickMsg->m_nSelectIndex) ); } break; case MODEL_INFO::NUDE_BODY: { int OFFSET = 400; pSelectAvatar->SetBodyIndex( pBtnClickMsg->m_nSelectIndex - OFFSET); pSelectAvatar->SetNudeCode( PartsID, GetDefaultItemDB().GetBodyID(pBtnClickMsg->m_nSelectIndex - OFFSET) ); } break; case MODEL_INFO::NUDE_DECO: { int OFFSET = 100; pSelectAvatar->SetDecoIndex( pBtnClickMsg->m_nSelectIndex - OFFSET); } break; case c_nLOBBY_NUDE_SKIN: { unsigned long hair_rgb = pSelectAvatar->GetHairColorRGB(); unsigned long color_value = pBtnClickMsg->m_nSelectIndex; pSelectAvatar->SetSkinColorized( color_value, K3DTexture::COLORIZED_DEF, hair_rgb ); } break; case c_nLOBBY_NUDE_HAIRCOLOR: { unsigned long color_value = static_cast(pBtnClickMsg->m_hairColor); if (color_value > 10) { pSelectAvatar->SetHairColorRGB(color_value); pSelectAvatar->SetHairColorIndex(0); } else { pSelectAvatar->SetHairColorRGB(-16728141); pSelectAvatar->SetHairColorIndex(pBtnClickMsg->m_textureId); } } break; } pSelectAvatar->RefreshAvatar( false ); pSelectAvatar->RefreshSkinColorized(); } void SGameRenewalLobby::PlayRaceCamera( int nRace, int nCameraIndex, int nAniType/*=SEQTYPE_NORMAL*/, float fPlayRate/*=4.8000*/ ) { KSeqForm* pCamera = GetRaceCamera(nRace); if( pCamera ) { pCamera->PlayAnimation( m_dwTime, pCamAniKey[nCameraIndex], nAniType, fPlayRate ); if (nCameraIndex == LOBBY_CAMERA_ZOOMING || nCameraIndex == LOBBY_CAMERA_ZOOMING_OUT) { m_pGameMng->InterfaceMsg( &SIMSG_UI_SEND_DATA( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_SECOND, number_t( true ), "ani_cam" ) ); } else { m_pGameMng->InterfaceMsg(&SIMSG_UI_SEND_DATA(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATECHAR_SECOND, number_t(false), "ani_cam")); } } } // sonador 10.5.1 크레딧 화면 구현 void SGameRenewalLobby::PlayRaceSound( int nRace, bool bMusic/*=true*/, bool bForce, int nSwapTime ) { if( m_pMSoundMgr == NULL ) return; if( !bMusic ) m_pMSoundMgr->StopMusic(); else if( bForce || m_nSelectRaceEffectSound != nRace || !m_pMSoundMgr->IsPlayMusic() ) { m_nSelectRaceEffectSound = nRace; switch( nRace ) { case GCLAN_DEVA: m_pMSoundMgr->SwapPlayMusic( c_szDevaMusic, nSwapTime, nSwapTime, 100, true ); break; case GCLAN_GAIA: m_pMSoundMgr->SwapPlayMusic( c_szGaiaMusic, nSwapTime, nSwapTime, 100, true ); break; case GCLAN_ASURA: m_pMSoundMgr->SwapPlayMusic( c_szAsuraMusic, nSwapTime, nSwapTime, 100, true ); break; } } if( !bForce && m_nSelectRaceBGM == nRace ) return; m_nSelectRaceBGM = nRace; switch( nRace ) { case GCLAN_DEVA: m_pMSoundMgr->SwapPlayBGM( c_szDevaBGM, nSwapTime, nSwapTime, 100, true ); break; case GCLAN_GAIA: m_pMSoundMgr->SwapPlayBGM( c_szGaiaBGM, nSwapTime, nSwapTime, 100, true ); break; case GCLAN_ASURA: m_pMSoundMgr->SwapPlayBGM( c_szAsuraBGM, nSwapTime, nSwapTime, 100, true ); break; } } // Initializes actual character modification menu window void SGameRenewalLobby::SendCustomizingMsgToWnd( SAvatarSelector* pSelectAvatar ) { if( pSelectAvatar == NULL ) return; int nHair = pSelectAvatar->GetHairIndex(); int nFace = pSelectAvatar->GetFaceIndex(); int nBody = pSelectAvatar->GetBodyIndex(); int nSex = pSelectAvatar->GetSex(); m_pGameMng->InterfaceMsg( &SIMSG_UI_CUSTOMIZIG_UPDATE( m_nSelectCustomRace, nHair, nFace, nBody, nSex) ); } // _LOBBY 임시... void SGameRenewalLobby::LoadTxtProp( const char * pFileName, std::vector< EPOINT_NX3 > & vList ) { KStream * pRes = KFileManager::Instance().CreateStreamFromResource( pFileName ); if( !pRes ) return; size_t nLen = pRes->GetLength(); char * pstrTemp = new char[nLen+1]; pstrTemp[nLen] = '\0'; for( size_t i(0); nLen>i; i++ ) { pRes->Read( &pstrTemp[i], 1 ); } std::vector< std::string > vString; MsgSplit( pstrTemp, vString, L"\t\r\n" ); int nLoop = (int)vString.size()/2; int n=0; for( int i(0); nLoop>i; i++ ) { std::string strCube = vString[n++].c_str(); //Cube String std::string strProp = vString[n++].c_str(); //Prop String EPOINT_NX3 data; data.strCube = strCube; data.strProp = strProp; vList.push_back( data ); } delete [] pstrTemp; KFileManager::Instance().DeleteStream( pRes ); vString.clear(); } // 2010.04.22 - prodongi void SGameRenewalLobby::VerifyCustomizeAvatarHair(SGameMessage* pGameMsg) { SIMSG_UIWND_NOTIFY_TO_LOBBY* msg = (SIMSG_UIWND_NOTIFY_TO_LOBBY*)pGameMsg; SAvatarSelector* pSelectAvatar = GetCrrCustomizingAvatar(); CustomingAvatar( pSelectAvatar, MODEL_INFO::NUDE_HAIR, msg ); } #ifdef _TERRAIN_ENABLE_ // _LOBBY // bool _refreshTexture( K3DTexture* pTexture, BYTE* pBit, int nW, int nH ) { char* pBuf = NULL; int nStride; //Center 계산 int nHalfWidth = pTexture->GetWidth()/2; int nHalfHeight = pTexture->GetHeight()/2; KRect rect; rect.left = nHalfWidth - nW/2; rect.top = nHalfHeight - nH/2; rect.right = nHalfWidth + nW/2; rect.bottom = nHalfHeight + nH/2; pTexture->LockRect( &rect, (void**)&pBuf, nStride ); //위치 조정 if( pBuf ) { KColor* pColor; for(int y = nH-1; y >= 0; y-- ) { pColor = ( KColor* )pBuf; for( int x = 0; x < nW; x++ ) { KColor col; col.b = pBit[(y*nW+x)*4+0]; col.g = pBit[(y*nW+x)*4+1]; col.r = pBit[(y*nW+x)*4+2]; col.a = pBit[(y*nW+x)*4+3]; pColor[x] = col; } pBuf += nStride; } pTexture->Unlock(); return true; } return false; } #endif void SGameRenewalLobby::sendAccountWithMacAddress(TS_CA_ACCOUNT& msg_account) { extern void getMacAddress(unsigned char* macAddress); unsigned char macAddress[6]; getMacAddress(macAddress); sendAccountWithAddInfo(msg_account, TS_CA_ACCOUNT::MACADDRESS, macAddress); } void SGameRenewalLobby::sendAccountWithAddInfo(TS_CA_ACCOUNT& msg_account, int type, unsigned char* addData) { if (addData) { size_t oriSize = sizeof (TS_CA_ACCOUNT); size_t addInfoSize = sizeof (TS_CA_ACCOUNT::AdditionalInfo); size_t addDataSize = strlen((char*)addData); size_t totalSize = oriSize + addInfoSize + addDataSize; TS_CA_ACCOUNT::AdditionalInfo addInfo; addInfo.type = type; addInfo.size = addDataSize; char* re_msg_account = new char[totalSize]; msg_account.size += addInfoSize + addDataSize; msg_account.set_check_sum(); memcpy(re_msg_account, &msg_account, oriSize); memcpy(re_msg_account+oriSize, (char*)&addInfo, addInfoSize); memcpy(re_msg_account+oriSize+addInfoSize, addData, addDataSize); AuthPendMessage((TS_MESSAGE*)re_msg_account); SAFE_DELETE_ARRAY(re_msg_account); } else { AuthPendMessage(&msg_account); } } void SGameRenewalLobby::sendAccountWithIovation(TS_CA_ACCOUNT& msg_account) { sendAccountWithAddInfo(msg_account, TS_CA_ACCOUNT::BLACKBOX, (unsigned char*)getIovationBlackBox()); }