#pragma once #include #include "SGame.h" #include #include "SNetMessageBill.h" #include "KRenderObjectEtc.h" #include "SGameLobbyDefine.h" #include "KSmartPtr.h" #include "SGameSceneManager.h" #include "SGameSceneSeqPlayer.h" #include //#include "Util.h" #include // cipher #ifdef _WIN64 #ifdef _DEBUG #pragma comment( lib, "cipherd_x64.lib" ) #else #pragma comment( lib, "cipher_x64.lib" ) #endif #else #ifdef _DEBUG #pragma comment( lib, "cipherd.lib" ) #else #pragma comment( lib, "cipher.lib" ) #endif #endif class KSeqForm; class KSeqModel; class KSeqAvatar; class SAvatarSelector; class SGameViewPort; #define _TERRAIN_ENABLE_ enum { LOBBY_INIT, LOBBY_LOGIN, LOBBY_SELECT, LOBBY_DEVA, ///< GCLAN_DEVA, LOBBY_GAIA, ///< GCLAN_GAIA, LOBBY_ASURA, ///< GCLAN_ASURA, LOBBY_MAX, }; enum { ACCOUNT_AUTH_NORMAL, ACCOUNT_AUTH_IMBC, ACCOUNT_AUTH_OTP, ACCOUNT_AUTH_SID, }; struct EPOINT_NX3_INITSTRUCT { const char* szEvPoint; const char* szCOBFileName; }; struct EPOINT_NX3 { std::string strCube; std::string strProp; }; const int c_nAsuraNX3EffectMaxPos = 13; class SGameRenewalLobby : public SGame { public: SGameRenewalLobby ( SGameManager* pGameMng , K3DRenderDeviceDX* pRenderDevice , SSoundManager* pSoundMng , KTextureManager* pTextureMng , KNX3Manager* pNX3Mng , SGameMilesSoundMgr* pMSoundMgr ); virtual ~SGameRenewalLobby(); void SetAvatarSelectStart(); void SetViewPort( SGameViewPort* pViewPort ); bool Render( unsigned long uRenderBitVector, class KViewportObject** ppViewPortList, int nViewportCount ); bool Process( DWORD time, unsigned long uProcessBitVector=0 ); void ProcMsgAtStatic( SGameMessage * pGameMsg ); void OnMsgResult( SGameMessage* pGameMsg ); void OnMsgResultWithString(SGameMessage* pGameMsg); /// 2011.05.20 - prodongi void ProcConsole( struct SGameMessage* pGameMsg ); void Lobby_Fog_Enable( bool bEnable ) { m_bLobbyFogEnable = bEnable; if( m_bLobbyFogEnable ) m_dwFogMode = K3DRenderDevice::FOGM_LINEAR | K3DRenderDevice::FOGM_HEIGHT; else m_dwFogMode = K3DRenderDevice::FOGM_NONE; } void Lobby_Fog_Color( int nR, int nG, int nB, int nA ) { m_colorLobbyFog = KColor( unsigned char(nR), unsigned char(nG), unsigned char(nB), unsigned char(nA) ); } void Lobby_Fog_Dist( float fNear, float fFar ) { m_fLinearFog_Start = fNear; m_fLinearFog_End = fFar; } void Lobby_Fog_Height_Dist( float fNear, float fFar ) { m_fHeightFog_Start = fNear; m_fHeightFog_End = fFar; } void SetPauseJTVLogo(bool PauseJTVLogo) { m_PauseJTVLogo = PauseJTVLogo; } virtual void Game_Light ( int type, K3DColor col ); virtual void Game_Light_Pos ( int nX, int nY, int nZ ); virtual void Game_Sky_Color_Start( int nR, int nG, int nB ); virtual void Game_Sky_Color_Mid ( int nR, int nG, int nB ); virtual void Game_Sky_Color_End ( int nR, int nG, int nB ); virtual void Game_Sky_Color_MaxHeight( float fMaxHeight ); virtual void Game_Sky_Color_MidHeightPercent( float fMidHeightPercent ); virtual void Game_Sky_Color_MinHeight( float fMinHeight ); virtual void Bot_Accept( int nSelect, const char * pName ); // _LOBBY 임시... // int GetTerrainArrayCount( int nIndex ); // _LOBBY 임시... void LoadTxtProp( const char * pFileName, std::vector< EPOINT_NX3 > & vList ); // Function to be called from SUICreateCharSecondDlg void VerifyCustomizeAvatarHair(SGameMessage* pGameMsg); private: void LoadModelFiles(); void RemoveModelFiles(); void SetCurState( _LOGIN_STATE state ); _LOGIN_STATE GetCurState() { return m_CurrentState; } void ProcessAvatars( DWORD dwTime ); /// 개발자 로긴 모드 void SetToDevelopersLoginState(); /// 인증 서버에 로긴 결과 대기 void SetToWaitingAuth(); void SetToIntroState(bool bPlayIntromove = false); void SetToPrepareLoginState(); void SetToLoginState(); void SetToLoginStateOff(); void SetToPrepareServerSelectState(); void SetToServerSelectState(); void SetToServerSelectStateOn(); void SetToCreateCharSuccess(); void SetToPrepareCharSelectState( bool bReqCharList ); void SetToCharSelectState( int nSelectIndex ); // void SetToPrepareCreateCharState(); void SetToCostomizing(); void SetToCreateCharState(); // void SetToCreateCharStateSecond(); void SetToRaceSelectState(); /// sonador 10.5.1 크레딧 화면 구현 void SetToCreditsState(); void SetToCredits2State(); void removeSceneInactivate(rp::SGameSceneIPtr& creditsScene); void SetToCredits3State(); void SetToCredits4State(); /// 2011.12.14 공통 함수 생성함 - prodongi void SetToCreditsState(_LOGIN_STATE state, rp::SGameSceneIPtr& creditsScene, char const* filmFileFormat, int filmCount); void _LoadLobbyRaceNX3Data( KSeqForm*& pObj, KMsgREQ_EVBOX& rEventBox, const char* lpFileName, bool bOutEvent=true ); void _LoadLobbyNX3Prop(); void InitCreateSeenAvatar(); void InitCamera(); // void InitQJTV( class SGameQJTV*& pQJTV, const char* lpFile, bool bUseAlpha ); void InitQJTVs(); void InitAvatar( SAvatarSelector* pSelectAvatar, const K3DVector& vAvatarPos ); void GetEventPos( KMsgREQ_EVBOX& Event, K3DVector& vAvatarPos ); void GetRaceEventPos(int nRace, K3DVector& vAvatarPos); void InitCostomizingAvatar( int nRace, int nSex, SAvatarSelector* pSelectAvatar ); void InitCostomizingAvatars( int nRace ); void SendCustomizingMsgToWnd( SAvatarSelector* pSelectAvatar ); void SetToBackToCharSelectState(); void SetToBackToServerSelectState(); void SetToLogOut(); bool IsCameraZooming( int nRace, int nCameraIndex = -1 ); void CustomingAvatar( SAvatarSelector* pSelectAvatar, int PartsID, struct SIMSG_UIWND_NOTIFY_TO_LOBBY* pBtnClickMsg ); void UpdatePendingTime( AR_TIME arTime ); void GetPendingTimeString( DWORD dwServerWaitTime, std::string& strMsg ); void SetEvPoint( KEventPointSeq * pPoint ); int GetAvatarIndex( const KPoint& rMousePos ) const; const char* GetRaceOptionFile( int nRace ); void ChangeQJTV( int nRace ); KSeqObject* GetCrrRaceProp( int nRace ); KSeqForm* GetRaceCamera( int nRace ); KSeqForm* GetRaceNX3obj( int nRace ); //void MainLogoProc( int dwTime ); void ProcessRaceBackGround_N_Avatar( int nRace, class SAvatarSelector* pSelectAvatar, KSeqModel* pEffect=NULL ); // Render background and character based on race void RenderRaceBackGround_N_Avatar( KViewportObject* viewport, KViewportObject* ChildViewport, int nRace, SAvatarSelector* pAvatar, KSeqModel* pEffect=NULL ); void RenderAsuraFireEffect( KViewportObject* viewport ); SAvatarSelector* GetCrrCustomizingAvatar(); void LoginAccount( const char* szAccount, __int64 & one_time_key ); void RotationAvatar_Z( SAvatarSelector* pAvatar, bool bRatateL ); void AvatarSelect( int nSelectIndex = (-1) ); void CreateNewAvatar( const char* szName ); void DeleteAvatar( const char* szName, const char* szSecurityNo ); void RequestCharacterList(); void GameStart( const char* szName, int nRace ); void CharacterLogin( const char* szName, int nRace ); void RefreshCharNameWindow(); /// sonador 10.5.1 크레딧 화면 구현 void PlayRaceSound( int nRace, bool bMusic=true, bool bForce=false, int nSwapTime=100 ); void PlayRaceCamera( int nRace, int nCameraIndex, int nAniType=SEQTYPE_NORMAL, float fPlayRate=4.8000f ); void AuthPendMessage( const TS_MESSAGE * pMessage ); void _gotoAccount(); void CheckCamera( KSeqForm * pCamera ); _LOGIN_STATE m_CurrentState; // Current State _LOGIN_STATE m_BeforeCharListState; // Pre–Character List State struct XSyncStreamConnection* m_pAuthConn; ///< 네트웍 struct IQueue* m_pRecvQueue; KSeqModel * m_pBlackPanel; DWORD m_dwBlackPanelTime; int m_nAuthType; XCryptoPublicKey m_Crypto; std::string m_strAccount; int m_nCharacterCount; int m_nSelectedCharIndex; std::string m_SelectServer_IP; int m_SelectServer_PORT; std::string m_strTempPass; bool m_bIsCan_ReqServerList; ///< 서버 리스트 요청 가능. DWORD m_dwServerWaitStartTime; ///< 서버 대기 시작 시간 DWORD m_dwServerWaitTime; ///< 서버 엔터 대기 시간 __int64 m_one_time_key; // If a waiting time is received, temporarily store the authentication key DWORD m_dwMsgSendTime; ///< 메세지 보낸 시간 bool m_bIsAgree; ///< 약관동의 //공지 사항 XBossWorker m_ThreadManager; ///< 스레드 처리 관리자 class CLobbyNoticeReceiver* m_pNoticeReceiver; ///< 공지사항 얻기 bool m_bUseCharacterSelect; ///< 아바타 선택 모드 바로 사용 //연출 // class K3DBoundRotCube* m_pAvatarSelectCubes[ c_nMaxAvatarCount ]; SAvatarSelector* m_pNewAvatar; // Selected avatar model unsigned short m_nNewCameraIndex; // Creation of camera index class K3DBoundRotCube* m_pManCube; class K3DBoundRotCube* m_pWomanCube; bool m_bLobbyFogEnable; KColor m_colorLobbyFog; bool m_bRatateL; bool m_bRatateR; struct K3DLight * m_pMainLight; ///< 기본 라이트 DWORD m_dwFogMode; //Height Fog float m_fHeightFog_Start; float m_fHeightFog_End; float m_fLinearFog_Start; float m_fLinearFog_End; bool m_bLightProcess; ///< 라이트 변경 DWORD m_dwLightStartTime; ///< 라이트 시작 시간 K3DVector m_old_pos; K3DVector m_new_pos; // int m_nSelectChrRace; // Race in creation int m_nSelectCustomRace; // The race which is being customized int m_nSelectRaceBGM; ///< 플레이중인 종족 배경음악 int m_nSelectRaceEffectSound; ///< 플레이중인 종족 이펙트싸운드 int m_nSelectSex; // Selected sex (gender) std::string m_strNewCharName; // Name of newly created character //Sky Color K3DColor m_Sky_Color_Start; K3DColor m_Sky_Color_Mid; K3DColor m_Sky_Color_End; float m_fSkyColorMaxHeight; float m_fSkyColorMinHeight; float m_fSkyMidHeightPercent; void Terrain_Fog_Enable( bool bEnable ) { m_bTerrainFogEnable = bEnable; if( m_bTerrainFogEnable ) m_dwTerrainFogMode = K3DRenderDevice::FOGM_LINEAR | K3DRenderDevice::FOGM_HEIGHT; else m_dwTerrainFogMode = K3DRenderDevice::FOGM_NONE; } void Terrain_Fog_Color( int nR, int nG, int nB, int nA ) { m_colorTerrainFog = KColor( unsigned char(nR), unsigned char(nG), unsigned char(nB), unsigned char(nA) ); } void Terrain_Fog_Dist( float fNear, float fFar ) { m_fTerrainLinearFog_Start = fNear; m_fTerrainLinearFog_End = fFar; } void Terrain_Fog_Height_Dist( float fNear, float fFar ) { m_fTerrainHeightFog_Start = fNear; m_fTerrainHeightFog_End = fFar; } void Terrain_Light ( int type, K3DColor col ); void Terrain_Light_Pos ( int nX, int nY, int nZ ); void _GameLightInforGameRes( const char * pFileName, K3DLight* pLight ); void LobbySetforGameRes( const char * pFileName ); void _MainCameraInforGameRes( const char * pFileName ); void _LightInforGameRes( const char * pFileName, K3DLight* pLight ); void _SkyInforGameRes( const char * pFileName ); void _LightInLoad( char *pBuf, K3DLight* pLight ); void _LobbySetLoad( char *pBuf, K3DLight* pLight ); void _LobbySetLoadforGameRes( char *pBuf, K3DLight* pLight ); void _TerrainSkyInLoad( char *pBuf ); // void _LobbyWarp( int nX, int nY, bool bUseCheat = false ); //치트용 FILE void LobbySet( const char * pFileName ); void _TerrainCameraIn( const char * pFileName ); void _LightIn( const char * pFileName, K3DLight* pLight ); void _TerrainSkyIn( const char * pFileName ); // 2011.10.07 Sends account information with added MAC address info void sendAccountWithMacAddress(TS_CA_ACCOUNT& msg_account); void sendAccountWithAddInfo(TS_CA_ACCOUNT& msg_account, int type, unsigned char* addData); /// 2011.10.07 계정 정보에 아이오베이션 정보를 추가해서 보낸다 void sendAccountWithIovation(TS_CA_ACCOUNT& msg_account); //업데이트 POINT m_ptOldPoint; float m_fDeltaX; float m_fDeltaY; class KViewportObject* m_pChildViewPort[1]; ///< 배경판과 스카이박스 랜더관련 K3DCamera* m_pBGCamera; struct K3DLight * m_pBGLight; ///< 배경 라이트 class SGameSky* m_pSky; //포그 bool m_bTerrainFogEnable; KColor m_colorTerrainFog; DWORD m_dwTerrainFogMode; //Height Fog float m_fTerrainHeightFog_Start; float m_fTerrainHeightFog_End; float m_fTerrainLinearFog_Start; float m_fTerrainLinearFog_End; std::string m_strCurLobbySet; //KSeqModel* m_pMainLogo; //K3DTextureSPtr m_spLogoTexture; //class QJTVObj* m_pQJTVObj; //int m_nCurFrame; trf::MetaData m_meta; //bool m_bInitLogo; //DWORD m_dwRefreshTime; //bool m_bLogoPlay; //int m_nQJTV_Width; //int m_nQJTV_Height; bool m_PauseJTVLogo; //bool m_bIncrease; //void _InitJTVLogo(); //void _RefreshJTVLogo(); void _PerformMainLogo(); std::vector m_vStrServerURL; std::string m_strCrrBGM; //BackGround Sprite //KSpritePrimitive m_SpritePrimitive; //KResSpriteSPtr m_spResSprite; //K3DTextureSPtr m_spBGTexture; //Blend Sprite K3DRenderTargetSPtr m_spBlendSource; KSpritePrimitive m_BlendSpritePrimitive; KResSpriteSPtr m_spBlendResSprite; DWORD m_dwBlendStartTime; //QJTVObj* m_pBG_QJTVObj; //DWORD m_dwBGRefreshTime; //int m_nBGCurFrame; //bool m_bInitBG; //bool m_bTypePlay; //bool m_bLoopMode; LOBBY_AVATAR m_Avatars[ GameRule::nMaxCharactersPerAccount ]; ///< 아바타 모델들 // Character creation related part SAvatarSelector* m_pDevaManAvatar; // Deva male SAvatarSelector* m_pDevaWomanAvatar; // Deva female SAvatarSelector* m_pGaiaManAvatar; // Gaia male SAvatarSelector* m_pGaiaWomanAvatar; // Gaia female SAvatarSelector* m_pAsuraManAvatar; // Asura male SAvatarSelector* m_pAsuraWomanAvatar; // Asura female KSeqModel* m_pCreateSuccessEffect; K3DVector m_DevaEventpos; K3DVector m_AsuraEventpos; K3DVector m_GaiaEventpos; KSeqForm* m_pDevaNX3Prop; KSeqForm* m_pAsuraNX3Prop; KSeqForm* m_pGaiaNX3Prop; KSeqForm* m_pAsuraNX3DffectProp[c_nAsuraNX3EffectMaxPos]; bool m_bShowBG; // class SGameQJTV* m_pWaitBG_QJTV; class SGameMultiQJTV* m_pMuitiQJTV; class SGameQJTV* m_pDevaBG_QJTV; class SGameQJTV* m_pAsuraBG_QJTV; class SGameQJTV* m_pGaiaBG_QJTV; KSeqForm* m_pAsuraCamera; KSeqForm* m_pGaiaCamera; KSeqForm* m_pDevaCamera; int m_nOldMipBias; int m_nOldResourceQual; DWORD m_dwStartCharSelectListWaitTime; int m_nAppointmentCharSelectIndex; bool m_bCreateCharSuccess; bool m_bCreating; void _InitBG( int nIndex ); void _RefreshBG(); rp::SGameScene *LoadMovie(rp::SGameSceneSeqPlayer* pScenePlayer, const char *scenename, const char *filename, const char *bgmname, const char *drawmode); rp::SGameSceneManager* m_pSceneMgr; ///< sonador 10.5.1 크레딧 화면 구현 rp::SGameSceneIPtr m_BgScene; rp::SGameSceneManager* m_pCharaterBgSceneMgr; rp::SGameSceneIPtr m_Bg_Deva; rp::SGameSceneIPtr m_Bg_Asura; rp::SGameSceneIPtr m_Bg_Gaia; rp::SGameSceneIPtr m_BgScene_ClanSelect; rp::SGameSceneIPtr m_BgScene_ClanSelect_Asura; rp::SGameSceneIPtr m_BgScene_ClanSelect_Deva; rp::SGameSceneIPtr m_BgScene_ClanSelect_Gaia; rp::SGameSceneIPtr m_BgScene_ClanDesc_Asura; rp::SGameSceneIPtr m_BgScene_ClanDesc_Deva; rp::SGameSceneIPtr m_BgScene_ClanDesc_Gaia; rp::SGameSceneIPtr m_BgScene_Pane_Type02; //rp::SGameSceneIPtr m_BgScene_Pane_Type02_2; rp::SGameSceneIPtr m_BgScene_Pane_Type03; rp::SGameSceneIPtr m_BgScene_Pane_Type03_right; bool m_ClanSelect_Asura_RollOver; bool m_ClanSelect_Deva_RollOver; bool m_ClanSelect_Gaia_RollOver; rp::SGameSceneIPtr m_IntroScene; rp::SGameSceneIPtr m_IntroScene_Navislamia; rp::SGameSceneIPtr m_IntroScene_GoldenMonarch; rp::SGameSceneIPtr m_CreditsScene; // rp::SGameSceneIPtr m_CreditsScene2; // rp::SGameSceneIPtr m_CreditsScene3; /// 2011.12.14 - prodongi rp::SGameSceneIPtr m_CreditsScene4; /// 2011.12.14 - prodongi void ChangeCharacterBG( int nRace ); int m_vStrServerURLIndex; //void SetToCreditsEpic6Prologue(); //rp::SGameSceneIPtr m_CreditsSceneEpic6Prologue; // bool m_TryConnectAuthServer; bool m_DisconnectAuthServer; int m_invalidPasswordCount; // 로그인 실패 에러 카운트 /// 2012.04.03 - prodongi sPasswordCount<> m_passwordCount; };