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

549 lines
16 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.
#pragma once
#include <map>
#include "SGame.h"
#include <toolkit/XBossWorker.h>
#include "SNetMessageBill.h"
#include "KRenderObjectEtc.h"
#include "SGameLobbyDefine.h"
#include "KSmartPtr.h"
#include "SGameSceneManager.h"
#include "SGameSceneSeqPlayer.h"
#include <kfile/TrfMetaData.h>
//#include "Util.h"
#include <cipher/XCryptoPublicKey.h>
// 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; // PreCharacter 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<std::string> 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;
};