Files
2026-06-01 12:46:52 +02:00

6450 lines
207 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "stdafx.h"
#include <WindowsX.h>
#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 <network/XSyncStreamConnection.h>
#include <kfile/KFileManager.h>
#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 <toolkit/XEnv.h>
#include "ErrorCode/ErrorCode.h"
#include <toolkit/XStringUtil.h>
#include "SUISysMsgDefine.h"
#include "TerrainMapEngine.h"
#include "SGameSky.h"
#include "SWorldLocationDB.h"
#include <time.h>
#include <SpeedGrass/Random.h>
#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<std::string>& 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<c_nAsuraNX3EffectMaxPos; ++ i )
{
m_pAsuraNX3DffectProp[i] = NULL;
}
#endif// _TERRAIN_ENABLE_
m_spBlendSource = NULL;
m_dwBlendStartTime = 0;
InitCamera();
_LoadLobbyNX3Prop();
InitCreateSeenAvatar();
LoadModelFiles();
m_strCrrBGM="";
m_TryConnectAuthServer = false;
m_DisconnectAuthServer = false;
/// 2012.04.04 생성자에 추가 함으로써 로그인 화면과 캐릭터 선택 화면을 왔다갔다 하는 꼼수를 방지함 - prodongi
m_passwordCount.clear();
}
SGameRenewalLobby::~SGameRenewalLobby()
{
// SAvatarSelector::EndAvatarLoadingThread();
SDEBUGLOG("SGameRenewalLobby::~SGameRenewalLobby - begin");
RemoveModelFiles();
// for( int n( 0 ); n < c_nMaxAvatarCount; ++n )
// SAFE_DELETE( m_pAvatarSelectCubes[ n ] );
SAFE_DELETE( m_pManCube );
SAFE_DELETE( m_pWomanCube );
m_ThreadManager.EndThread();
SAFE_DELETE( m_pNoticeReceiver );
SAFE_DELETE( m_pAuthConn );
SAFE_DELETE( m_pRecvQueue );
//SAFE_DELETE( m_pDevaBG_QJTV );
//SAFE_DELETE( m_pAsuraBG_QJTV );
//SAFE_DELETE( m_pGaiaBG_QJTV );
//SAFE_DELETE( m_pMuitiQJTV );
SAFE_DELETE( m_pCreateSuccessEffect );
SDEBUGLOG("SGameRenewalLobby::~SGameRenewalLobby - end");
}
// _LOBBY 임시...
int GetTerrainArrayCount( int nIndex )
{
int nArrayCount = 2352;
switch( nIndex )
{
case 0 : nArrayCount = 700; break;
case 1 : nArrayCount = 700; break;
case 2 : nArrayCount = 1000; break;
case 3 : nArrayCount = 1800; break;
case 4 : nArrayCount = 2352+1176; break;
}
return nArrayCount;
};
rp::SGameScene *SGameRenewalLobby::LoadMovie(rp::SGameSceneSeqPlayer* pScenePlayer, const char *scenename,
const char *filename, const char *bgmname, const char *drawmode)
{
//언젠간 SGameLoad의 LoadMovie 함수랑 통합하자.. 일단은 나중에. sfreer 2009.07.09
int ScreenWidth = KUIWndManager::GetResolution().cx;
int ScreenHeight = KUIWndManager::GetResolution().cy;
int adjustedWidth = ScreenHeight * 4 / 3;
/// 2010.12.28 - prodongi
if (adjustedWidth > 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); i<c_nAsuraNX3EffectMaxPos; ++ i )
{
SAFE_DELETE(m_pAsuraNX3DffectProp[i]);
}
SDEBUGLOG("\tSAFE_DELETE( Prop )");
SDEBUGLOG("SGameRenewalLobby::RemoveModelFiles() - end");
}
void SGameRenewalLobby::ProcConsole( SGameMessage* pGameMsg )
{
if( pGameMsg->nType != MSG_CONSOLE_BUILDER ) return;
SGame::ProcConsole( pGameMsg );
SMSG_CONSOLE_BUILDER* pMsg = static_cast<SMSG_CONSOLE_BUILDER*>(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); i<c_nAsuraNX3EffectMaxPos; ++ i )
{
SAFE_DELETE(m_pAsuraNX3DffectProp[i]);
_LoadLobbyRaceNX3Data( m_pAsuraNX3DffectProp[i], TempEventBox, c_szLobbyAsuraNX3EffectPropName, false );
}
// KSeqModel* pObj = new KSeqModel;
// pObj->AddAnimation( "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); i<c_nAsuraNX3EffectMaxPos; ++i )
{
if( !m_pAsuraNX3DffectProp[i] ) break;
x = c_nAsuraNX3EffectPos[i][0];
y = c_nAsuraNX3EffectPos[i][1];
K3DVector v3D;
viewport->Get2DVto3DV( 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 != "<NULL>" && strPassword!= "<NULL>" )
{ //대만 웹 로그인 임.
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 != "<NULL>" && strOTP != "<NULL>" )
{ //대만 웹 로그인 임.
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); i<pServerList->count; ++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<SMSG_AC_SELECT_SERVER *>(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<SMSG_AC_UPDATE_PENDING_TIME *>(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<int>(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<SIMSG_DELETE_SELECTEDAVATAR*>(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<SIMSG_MOUSEMOVE*>(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<SIMSG_MOUSEMOVE*>(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<SIMSG_MOUSEWHEEL*>(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<SIMSG_HOTKEY_EX*>(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<SMSG_SEND_DATA *>(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<SMSG_SECURITY_NO*>(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<SMSG_CS_CREATE_SECURITY_NO*>(pGameMsg);
pGameMsg->bUse = true;
}
break;
case MSG_CHANGE_SECURITY_NO: //보안 암호 변경 서버에 확인 요청
{
SMSG_CHANGE_SECURITY_NO* pSecurityMsg = static_cast<SMSG_CHANGE_SECURITY_NO*>(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<SMSG_CS_REQUEST_CLEAR_SECURITY_NO*>(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<SMSG_SC_CLEAR_SECURITY_NO*>(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<SMSG_CS_CLEAR_SECURITY_NO*>(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. <BR>Your waiting time is less than 1 minute.
}
else
{
strMsg = SR(114, "#@minute@#", nWaitMinute ); // Waiting. The server is too busy. <BR> 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<unsigned long>(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());
}