//------------------------------------------------------------------------------ // CharacterScene.cpp // (C) 2005 Webzen Sunstudio //------------------------------------------------------------------------------ #include "SunClientPrecompiledHeader.h" #include "characterscene.h" #include "objectmanager.h" #include "Application.h" #include "LoadScene.h" #include "Camera.h" #include "AppearanceManager.h" #include "BattleScene.h" #include "Character.h" #include "Hero.h" #include "InterfaceManager.h" #include "GameFunc.h" #include "SoundBGM.h" #include "CloneManager.h" #include "InventoryDialog.h" #include "Version.h" #include "EquipmentContainer.h" #include #include "uiLoginAccount/uiLoginAccount.h" #include "uiLoginServerList/uiLoginServerList.h" #include "uiLoginMan/uiLoginMan.h" #include "CreateCharBottomDialog.h" #include "CreateCharLeftDialog.h" #include "CreateCharSelect.h" #include "BGMSoundInfoParser.h" #include "uiSystemIdNumberConfirm/uiSystemIdNumberConfirm.h" #include "Nstring.h" #include "LoadScene.h" #include "LoginScene.h" #include "MouseCursor.h" #include "SoundEffect.h" #include "Chatdialog.h" #include "HeroActionInput.h" #include "HeroVariationInfoParser.h" #include "HeroHeightInfoParser.h" #include "MapInfoParser.h" #include "ResultCode.h" #include "QuestManager_Concrete.h" #include "MissionManager_Concrete.h" #include "uiTiredSystemMan/uiTiredSystemMan.h" #include "TiredSystemDialog.h" #include "uiHelpMan/uiHelpMan.h" #include "Map.h" #include "ResourceManager.h" #include "uiQuestMan/uiQuestMan.h" #include "CursorChangeTransact.h" #include "globalfunc.h" #include "uiSystemMan/uiSystemMan.h" #include "PcbangPlayTimeDialog.h" #include "uiCommunityMan/uiCommunityMan.h" #include "ShopDialog.h" #include "uiCashItemShopMan/uiCashItemShopMan.h" #include "OptionGameDialog.h" #include "OptimizationManager.h" #include "CreateCharRotateButton.h" #include "uiCreateCharacterMan/uiCreateCharacterMan.h" #include "CreateCharCustomDialog.h" #include "uiPartyMan/uiPartyMan.h" #include "Pet.h" #include "PetInfoParser.h" #include "uiPersonalWayPointMan/uiPersonalWayPointMan.h" #include "uiChatMan/uiChatMan_def.h" #include "Monster.h" #include "uiOptionMenuMan/uiOptionMenuMan.h" #include "uiLoginBack/uiLoginBackTop.h" #include "uiSkillMan/uiNewSkillMan.h" #include "uiQuestMan/uiQuestMan_def.h" #include "uiquestlistdlg/uiQuestListDlg.h" #include "uiAreaConquestMan/uiAreaConquestMan.h" #include "uiDominationTowerMan/uiDominationTowerMan.h" #include "Mouse.h" #ifdef _NHN_USA_CHANNELING #include //ÁöÇ¥¸ðµâ #endif//_NHN_USA_CHANNELING(ºÏ¹Ì ä³Î¸µ) #if defined(_DEBUG) || defined(_GAMECLIENT_VER) #include "AutoTestManager.h" #endif #ifdef _YMS_AUTOBOT_GAME #include "Autobot/Condition/AutobotConditionManager.h" #endif //_YMS_AUTOBOT_GAME #include "uiSkillMan/uiNewSkillMan.h" #include "CreateCharCustomCameraInfoParser.h" #ifdef _JP_20110222_INGAME_CHARNAME_CHANGE #include "uiCharacterSelectMan/uiCharacterSelectMan.h" #include "uiCharacterRenameDialog/uiCharacterRenameDialog.h" #endif //_JP_20110222_INGAME_CHARNAME_CHANGE #include "AppearanceResourceCode.h" #include "uiCharacterSelectMan/uiCharacterSelectMan.h" #include "uiCharacterSelectList/uiCharacterSelectList.h" #ifdef _NA_000000_20130114_RENEWER_UI #include "uiCharacterSelectList/uiCharacterSelectList2.h" #endif//#ifdef _NA_000000_20130114_RENEWER_UI #if defined(_NA_006774_20130617_ARRANGE_UNNECESSARY_RESOURCES) #include "uiSelectClass2/uiSelectClass2.h" #else #include "uiSelectClass/uiSelectClass.h" #endif // _NA_006774_20130617_ARRANGE_UNNECESSARY_RESOURCES #include "CharacterCreationInfoParser.h" #include "uiToolTipMan/uiToolTipMan.h" #include "CharSelectDialog.h" #include "CastDialog.h" #ifdef _NA_20100307_BETAKEY_SYSTEM #include "BetaKeyImpl.h" #include "BetaKey.h" #endif//_NA_20100307_BETAKEY_SYSTEM #include "uiGuideSystemMan/uiGuideSystemMan.h" #ifdef _NA_003027_20111013_HONOR_SYSTEM #include "HonorSystem/HonorSystem.h" #include "uiCharacterStatus/uiCharacterStatusHonorInfo.h" #endif //_NA_003027_20111013_HONOR_SYSTEM #ifdef _NA004034_20120102_POINT_WALLET_SYSTEM #include "uiCharacterStatus/uiCharacterStatusCurrencyInfo.h" #endif //_NA004034_20120102_POINT_WALLET_SYSTEM #ifdef _DH_BATTLEZONE2_ #include "uiBattlezone2Man/uiBattlezone2Man.h" #endif//_DH_BATTLEZONE2_ #ifdef _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND #include "ChaosSystem/ChaosSystemData.h" #endif //_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND #include "XignCode/XignCodeApi.h" #ifdef _NA_0_20110613_GAME_SHOP_RENEWAL #include "uiConvenienceStore/CashShop.h" #endif //_NA_0_20110613_GAME_SHOP_RENEWAL #ifdef _NA_007935_20150109_GM_COMMAND_EXP_EVENT #include "uiTiredSystemMan/uiTiredSystemMan.h" #include "TiredSystemDialog.h" #endif // _NA_007935_20150109_GM_COMMAND_EXP_EVENT #ifdef _NA_008405_20150716_MINIGAME_BINGO #include "uiMenuMan/uiMenuMan.h" #include "MainDialog2.h" #endif // _NA_008405_20150716_MINIGAME_BINGO #ifdef _NA_008800_20160510_COMBAT_RECORD_SYSTEM #include "uiCombatRecordMan/uiCombatRecordMan.h" #endif // _NA_008800_20160510_COMBAT_RECORD_SYSTEM #include "HotKeyManager.h" #include "HeroData.h" #include "CooltimeManager.h" #include "CharacterCreate.h" #include "GameCheckMananger.h" //Ìí¼ÓÍâ¹Ò¼ì²â by:Ê®ÀïÆÂ½£Éñ 2021-06-30 #pragma comment( lib, "Iphlpapi.lib" ) #define SELECT_MOVE_DISTANCE 1.0f //¼±Åýà À̵¿ÇÒ ÃÖ´ë °Å¸® #define CHAR_MOVE_SPEED 0.3f #define WALK_SPEED 0.001f #define DOUBLE_CLICK_TIME 500 // 0.5ÃÊ ½Ã°£¾È¿¡ ÀÔ·ÂÀº ´õºíŬ¸¯ÀÌ´Ù. #define PERFECT 100.0f // ÆÛ¼¾Æ® CharacterScene g_CharSelectScene; #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT cCharacterCreate g_CharCreate; #endif //_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT const DWORD INTERFACE_SCROLL_TIME = 1; const float BOTTOM_INTERFACE_SIZE = 80.0f; const float BOTTOM_INTERFACE_MARGIN = 92.0f; const float LEFT_INTERFACE_SIZE = 338.0f; const float LEFT_INTERFACE_TOP = 120.0f; const float LEFT_INTERFACE_MARGIN = 24.0f; const float l_fCharacterSceneFarClip = 300.0f; const int CHARACTER_MAP_RESOURCE_ID = SCRIPT_RESOURCE_ID_OFFSET + 130000; TCHAR g_szCrashLogFileName[INTERFACE_STRING_LENGTH] = {0,}; DWORD g_dwStartTime = 0; using namespace RC; void _ProcessCrashReport(bool bYes) { TCHAR lpszParamBuffer[16] = {0,}; if(bYes) { //0: º¸³»±â Àü, 1:º¸³¿, -1: º¸³»±â ½ÈÀ½, -2: Default WritePrivateProfileString( _T("SEND_REPORT"), _T("Send"), ParamInt2Str( 1, lpszParamBuffer), g_szCrashLogFileName); MSG_CG_CONNECTION_CRASH_REPORT_SYN sync; ZeroMemory(&sync.m_CrashInfo, sizeof(CRASH_INFO)); ZeroMemory(&sync.m_ComputerInfo, sizeof(COMPUTER_INFO)); TCHAR szTempBuffer[MAX_PATH] = {0,}; TCHAR* pszStopBuffer = NULL; GetPrivateProfileString( _T("CRASH_INFO"), _T("CrashAddress"), _T("0"), szTempBuffer, MAX_PATH-1, g_szCrashLogFileName ); _tcstod(szTempBuffer, &pszStopBuffer); sync.m_CrashInfo.m_dwCrahAddress = _tcstoul(szTempBuffer, &pszStopBuffer, 10); GetPrivateProfileString( _T("CRASH_INFO"), _T("ModuleStartAddress"), _T("0"), szTempBuffer, MAX_PATH-1, g_szCrashLogFileName ); _tcstod(szTempBuffer, &pszStopBuffer); sync.m_CrashInfo.m_dwModuleStartAddress = _tcstoul(szTempBuffer, &pszStopBuffer, 10); GetPrivateProfileString( _T("CRASH_INFO"), _T("ModuleEndAddress"), _T("0"), szTempBuffer, MAX_PATH-1, g_szCrashLogFileName ); _tcstod(szTempBuffer, &pszStopBuffer); sync.m_CrashInfo.m_dwModuleEndAddress = _tcstoul(szTempBuffer, &pszStopBuffer, 10); GetPrivateProfileString( _T("CRASH_INFO"), _T("ModuleCrashOffset"), _T("0"), szTempBuffer, MAX_PATH-1, g_szCrashLogFileName ); _tcstod(szTempBuffer, &pszStopBuffer); sync.m_CrashInfo.m_dwModuleCrashOffset = _tcstoul(szTempBuffer, &pszStopBuffer, 10); GetPrivateProfileString( _T("CRASH_INFO"), _T("ModuleName"), _T("0"), szTempBuffer, MAX_PATH-1, g_szCrashLogFileName ); StrnCopy(sync.m_CrashInfo.m_szModuleName, szTempBuffer, MAX_MODULE_NAME_SIZE); GetPrivateProfileString( _T("CRASH_INFO"), _T("CompileVer"), _T("0"), szTempBuffer, MAX_PATH-1, g_szCrashLogFileName ); StrnCopy(sync.m_CrashInfo.m_szBuildVer, szTempBuffer, MAX_BUILD_VERSION_SIZE); GetPrivateProfileString( _T("CRASH_INFO"), _T("CrashTime"), _T("0"), szTempBuffer, MAX_PATH-1, g_szCrashLogFileName ); _tcstod(szTempBuffer, &pszStopBuffer); sync.m_CrashInfo.m_dw64CrashTime = _tcstoui64(szTempBuffer, &pszStopBuffer, 10); GetPrivateProfileString( _T("PC_INFO"), _T("OS"), _T("0"), szTempBuffer, MAX_PATH-1, g_szCrashLogFileName ); StrnCopy(sync.m_ComputerInfo.m_szOS, szTempBuffer, MAX_OS_NAME_SIZE); GetPrivateProfileString( _T("PC_INFO"), _T("Process"), _T("0"), szTempBuffer, MAX_PATH-1, g_szCrashLogFileName ); StrnCopy(sync.m_ComputerInfo.m_szProcess, szTempBuffer, MAX_PROCESS_NAME_SIZE); GetPrivateProfileString( _T("PC_INFO"), _T("PhysicalMemory"), _T("0"), szTempBuffer, MAX_PATH-1, g_szCrashLogFileName ); StrnCopy(sync.m_ComputerInfo.m_szPhysicalMemory, szTempBuffer, MAX_PHYSICAL_MEMORY_SIZE); GetPrivateProfileString( _T("PC_INFO"), _T("DirectXVersion"), _T("0"), szTempBuffer, MAX_PATH-1, g_szCrashLogFileName ); StrnCopy(sync.m_ComputerInfo.m_szDirectXVersion, szTempBuffer, MAX_DIRECTX_NAME_SIZE); GetPrivateProfileString( _T("PC_INFO"), _T("VGADescription"), _T("0"), szTempBuffer, MAX_PATH-1, g_szCrashLogFileName ); StrnCopy(sync.m_ComputerInfo.m_szDescription, szTempBuffer, MAX_DESCRIPT_SIZE); GetPrivateProfileString( _T("PC_INFO"), _T("DisplayMemory"), _T("0"), szTempBuffer, MAX_PATH-1, g_szCrashLogFileName ); StrnCopy(sync.m_ComputerInfo.m_szDisplayMemory, szTempBuffer, MAX_DISPLAY_MEMORY_SIZE); GetPrivateProfileString( _T("PC_INFO"), _T("DriverVersion"), _T("0"), szTempBuffer, MAX_PATH-1, g_szCrashLogFileName ); StrnCopy(sync.m_ComputerInfo.m_szDriverVersion, szTempBuffer, MAX_DRIVER_VERSION_SIZE); GlobalFunc::SendPacket(CI_GAMESERVERIDX, &sync, sizeof (sync)); } else { //0: º¸³»±â Àü, 1:º¸³¿, -1: º¸³»±â ½ÈÀ½, -2: Default WritePrivateProfileString( _T("SEND_REPORT"), _T("Send"), ParamInt2Str( -1, lpszParamBuffer), g_szCrashLogFileName); } } //------------------------------------------------------------------------------ /** */ CharacterScene::CharacterScene(void) { m_hTexture = INVALID_HANDLE_VALUE; m_bConnected = 0; m_bWorldServerConnected = false; m_SceneType = SCENE_TYPE_CHARSELECT; Movie.is_show_movie = false; Movie.bink = NULL; Movie.bink_texture = NULL; Movie.backup_clear_color = 0; } //------------------------------------------------------------------------------ /** */ CharacterScene::~CharacterScene(void) { } //------------------------------------------------------------------------------ /** */ void CharacterScene::Activate() { } //------------------------------------------------------------------------------ /** ij¸¯ÅÍ À§Ä¡ ¼¼ÆÃ */ void CharacterScene::InitSlotForPositionAndAni() { //float fDistanceX = 0.15f; //float fDistanceY = 1.50f; //float xPos=-22.20f; //float yPos=54.7f; for(int i = 0; i < MAX_CHARACTER_LIST_NUM; ++i) { #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT //m_PosInfoArray[i].wzVecPosition = xGetCharacterCreate()->GetCharacterPosition(); //SetVector(&m_PosInfoArray[i].wzVecPosition, m_character.y, m_character.z); #else SetVector(&m_PosInfoArray[i].wzVecPosition, -5.054004f, 1.2010005f, 10.538147f); #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT } for(int i = 0; i < MAX_CHARACTER_LIST_NUM; i++) { m_PosInfoArray[i].dwObjectKey = INVALID_OBJECT_KEY; } } //------------------------------------------------------------------------------ /** */ BOOL CharacterScene::Init() { if ( uiPersonalWayPointMan* pWaypointMan = GET_DIALOG_MANAGER(uiPersonalWayPointMan , UIMAN_PERSONAL_WAYPOINT) ) { pWaypointMan->InitWayPoint(); } if ( uiDominationTowerMan* pDominationMan = GET_DIALOG_MANAGER(uiDominationTowerMan , UIMAN_DOMINATIONWAR_TOWER) ) { pDominationMan->Clear(); } #ifdef _NHN_USA_CHANNELING GlobalFunc::SendHanReportPacket(601);//ij¸¯Åͼ±ÅÃâÀ̵¿¿Ï·á(601) #endif//_NHN_USA_CHANNELING(ºÏ¹Ì ä³Î¸µ:ÁöÇ¥) BattleScene::m_bPendingBackToSomeWhere = false; m_bVerifyLock = FALSE; if (g_pNetwork) { g_pNetwork->SetEnableSendHeartBeat(FALSE); } CursorChangeTransact::Instance()->ForceChange( MouseCursor::eMouseCursor_Default ); g_HeroInput.Init(); m_eFadeState=eFADE_STATE_NONE; m_dwCurFadeTime=0; g_InterfaceManager.ShowWindow( InterfaceManager::DIALOG_SYSTEM, FALSE ); LoadCinematicCamera(); is_loaded_my_character_ = true; if(g_pSunRenderer->x_pManagerMultiLoader) g_pSunRenderer->x_pManagerMultiLoader->TurnOn_MultiThreadedLoading(TRUE); TCHAR szMessage[INTERFACE_STRING_LENGTH]; SceneBase::Init(); m_bChangeSelectedCharacter=TRUE; #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT xGetCharacterCreate()->Initialize(); //m_zoom = 0.0f; // SetVector(&m_camera, -47.31f, -4.914f, 1.2f); // SetVector(&m_character, -47.286f, 0.f, 0.42f); // SetVector(&m_target, -47.31f, 0.f, 1.2f); #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT #ifndef _MOD_CHAGNE_DELETE_HERO g_ObjectManager.Create(); #endif m_CharList.clear(); InitSlotForPositionAndAni(); m_bPickCharLock = FALSE; m_dwSelectOid = INVALID_OBJECT_KEY; m_dwSelectCharacter = INVALID_OBJECT_KEY; // ÀÎÅÍÆäÀ̽º ·£´õ¸µ ¿Â g_InterfaceManager.SetRenderState( TRUE ); m_curDelOid = INVALID_OBJECT_KEY; m_fRt=0.0f; // ¹è°æÀ½¾Ç Ç÷¹ÀÌ GlobalFunc::PLAY_BGM(MAP_TYPE_DEFAULT, g_pMap->GetCurrentFieldID(), eZONETYPE_CHARSELECT); m_bInitCam=FALSE; m_preTime=0; if (g_pQMGR_Real) { g_pQMGR_Real->DestroyAll(); } if (g_pQMGR_Temp) { g_pQMGR_Temp->DestroyAll(); } g_pMission_Concrete->Clear(); if ( uiQuestMan * pQuestMan = (uiQuestMan *)g_InterfaceManager.GetUserInterfaceManager( UIMAN_QUEST ) ) { pQuestMan->ClearQuestInfos(); pQuestMan->ClearAcceptAuto(); pQuestMan->ClearPendingQuestCompletePacket(); } if ( uiPartyMan* partyMan = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_PARTY)) ) { partyMan->ClearParty(); } if( GENERALPARAM->IsNet() ) { if (m_bConnected) { MSG_CG_CONNECTION_REENTERSERVER_SYN SendPacket; if( FALSE == GlobalFunc::SendPacket(CI_GAMESERVERIDX, &SendPacket, sizeof(SendPacket) ) ) { assert("MSG_CG_CONNECTION_REENTERSERVER_SYN - CharacterScene"); return FALSE; } } if(!m_bConnected && BIT_CHECK(m_packetStatus,PACKET_STATUS_CHARACTERSCENE_CONECT) == FALSE) { BIT_ADD(m_packetStatus,PACKET_STATUS_CHARACTERSCENE_CONECT); // ¼­¹ö Á¢¼Ó ¿äûÀ» ÇÏÀÚ. MSG_CG_CONNECTION_ENTERSERVER_SYN ConnectRegPacket; ConnectRegPacket.m_byCategory = CG_CONNECTION; ConnectRegPacket.m_byProtocol = CG_CONNECTION_ENTERSERVER_SYN; ConnectRegPacket.m_byNationCode = NATION_CODE; #ifdef _NA_0_20110915_CLIENT_MAC_ADDRESS ZeroMemory(ConnectRegPacket.mac_address_, 30); g_pNetwork->GetMACAddress(OUT ConnectRegPacket.mac_address_, 30); #endif //_NA_0_20110915_CLIENT_MAC_ADDRESS uiLoginMan* loginMan = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_LOGIN)); assert (loginMan); StrCopy(ConnectRegPacket.m_szID, loginMan->GetID()); ConnectRegPacket.m_dwAuthID = loginMan->GetAuthUserKey(); memcpy ((BYTE *)ConnectRegPacket.m_szSerialKey, loginMan->GetSerialKeys(), AUTH_SERIAL_KEY_LEN); ConnectRegPacket.m_byHighVerNo = C2S_HIGH_VERSION_NO; ConnectRegPacket.m_byMiddleVerNo = C2S_MIDDLE_VERSION_NO; ConnectRegPacket.m_byLowVerNo = C2S_LOW_VERSION_NO; ConnectRegPacket.m_dwMOLAProtocolCRC = CryptManager::GetMolaProtocolCRC(); ConnectRegPacket.Encode(); if(GENERALPARAM->GetSpecialMode()) { g_dwStartTime = GlobalFunc::StartTimeCheck(); GlobalFunc::WriteLoadingTimeLog(_T("ij¸¯ÅÍ Á¤º¸ Àü¼Û ¿äû")); } if( FALSE == GlobalFunc::SendPacket(CI_GAMESERVERIDX, &ConnectRegPacket, sizeof(ConnectRegPacket) ) ) { WRITELOG(eLOG_LEVEL_ERR, c_wOUTPUT_LOG_FILE | c_wOUTPUT_LOG_CENTER, _T("SendPacket return FALSE: MSG_CA_CHARINFO_CHARLIST_SYN")); assert(!"MSG_CA_CHARINFO_CHARLIST_SYN - CharacterScene"); return FALSE; } } // ij¸¯ÅÍ Á¤º¸ Àü¼ÛÁß const int c_iCharInfoSending = 70256; g_InterfaceManager.GetInterfaceString( c_iCharInfoSending, szMessage, INTERFACE_STRING_LENGTH ); g_InterfaceManager.ShowMessageBox( szMessage, -1, NULL, 0 ); g_pApplication->OnReconnectToWorldServer(); } else //½Ì±Û ¸ðµå ij¸¯ÅÍ »ý¼º { srand(clock_function::GetTickCount()); BYTE ClassCodeType[6] = { eCHAR_BERSERKER, eCHAR_DRAGON, eCHAR_SHADOW, eCHAR_VALKYRIE, eCHAR_MAGICIAN, eCHAR_ELEMENTALIST }; char CharacterName[6][16] = { "Å×½ºÆ®1", "Å×½ºÆ®2", "Å×½ºÆ®3", "Å×½ºÆ®4", "Å×½ºÆ®5", "Å×½ºÆ®6" }; for( size_t i=0;i!=6;++i) { CharListInfo* pCharListInfo = new CharListInfo; pCharListInfo->dwObjectKey = g_ObjectManager.GenerateKeyAtSingleMode(PLAYER_OBJECT); StrCopy(pCharListInfo->CharacterInfo.m_tszCharName, CharacterName[i]); CLIENT_CHARACTER_PART part; ZeroMemory(&pCharListInfo->CharacterInfo, sizeof(part)); pCharListInfo->CharacterInfo.m_byFace=1; pCharListInfo->CharacterInfo.m_byHair=1; pCharListInfo->CharacterInfo.m_byClass = ClassCodeType[i]; pCharListInfo->CharacterInfo.m_bySlot = i; pCharListInfo->CharacterInfo.m_ChangeOfClassStep = ClassCodeType[i]; pCharListInfo->CharacterInfo.gender = 0; MakeMyChar( pCharListInfo->dwObjectKey, pCharListInfo->CharacterInfo ); m_CharList.push_back( pCharListInfo ); } } g_pMap->SetUseAutoCamera(TRUE); // ·Îµù ¹è°æ È­¸é À̹ÌÁö ·Îµù m_hTexture = g_pSunRenderer->x_pManagerTexture->LoadTexture( "Data\\Interface\\Loading.jpg" ,TLS_ORIGINAL_SIZE | TLS_NO_MIPMAP | TLS_NO_MULTITHREAD); m_fOriginalFarClip = g_Camera.GetFarClip(); g_Camera.SetProjection(g_Camera.GetNearClip(),l_fCharacterSceneFarClip,g_Camera.GetFOV()); /*WzVector wvPos; wvPos.x = -47.31f; wvPos.y = -3.784f; wvPos.z = 1.2f; g_Camera.SetCamera(&wvPos);*/ // ij¸¯ÅÍ »ý¼º°ü·Ã Å×½ºÆ® m_bCreateCharacter = FALSE; //#ifdef _YJ_RENEWAL_CHARACTER_CREATE_SCENE // //no operation //#else //_YJ_RENEWAL_CHARACTER_CREATE_SCENE #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT #else m_pCreateMapUnitDraw = NULL; m_pCreateMapUnit = NULL; #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT //#endif //_YJ_RENEWAL_CHARACTER_CREATE_SCENE m_bySelectedClass = 0; m_bySelectedModel = 0; m_byCharacterSlot = MaxCharListConfig::kDefaultSlotSize; m_bLoadCreateCharacterRoom = false; g_pSunRenderer->EnableAreaLight(TRUE); g_KeyQueueManager.Reset(); g_KeyQueueManager.SetKey(DIK_ESCAPE); g_KeyQueueManager.SetDefaultFun(NULL); m_bMouseChange = FALSE; if(g_Input.GetMouseChange()) { g_Input.SetMouseChange(FALSE); m_bMouseChange = TRUE; } if( uiCommunityMan* pCommMan = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_COMMUNITY)) ) { pCommMan->Reset(); } m_stFogCharCreate.m_wcFogColor = GRAPHICPARAM->m_wcCharCreateSceneFogColor; m_stFogCharCreate.m_fFogStart=40.0f; m_stFogCharCreate.m_fFogEnd=150.0f; m_stFogCharCreate.m_fMaxFogRate=45.3f; m_stBlurCharCreate.m_fFinalColorBlend=0.39f; m_stBlurCharCreate.m_fMinLuminance=0.6f; m_stBlurCharCreate.m_fSelectHighLight=0.48f; m_stBlurCharCreate.m_iBlurCount=4; m_stBlurCharCreate.m_fOriginalColorBlend=0.77f; m_stBlurCharCreate.m_wcSelectColor=WzColor_RGB(255,255,255); g_pSunRenderer->x_pManagerPostEffect->TurnOffPostEffect(PET_DEPTH_OF_FIELD); g_pMap->EnableBlur(GAMEOPTION->GetBlurState()); g_pSunRenderer->EnableFog(GAMEOPTION->GetFogState()); xGetHeroData()->ReleaseGuildInfo(); // ij¸¯ÅͰ¡ »ý¼º/º¯°æµÇ¸é ¸ðµç ÄðŸÀÓÀ» ¸®¼Â xGetCooltimeManager()->ResetSkillCooltime(); xGetCooltimeManager()->ResetItemCooltime(); #ifdef _YMS_AUTOBOT_GAME AutobotConditionManager::Instance()->Clear(); #endif //_YMS_AUTOBOT_GAME //! 2011.6.21 / naklu / ij¸¯ÅÍ ¼±ÅÃÈ­¸é¿¡ µ¹¾Æ ¿Ã¶§ AC ¿Ï·á ¸®½ºÆ® Á¤º¸ ÃʱâÈ­ if ( uiAreaConquestMan* area_conquest_manager = GET_DIALOG_MANAGER(uiAreaConquestMan, UIMAN_AREACONQUEST) ) { area_conquest_manager->DeleteComplimentList(); } #if USING_XIGNCODE ZeroMemory(XignCodeApi::xigncode_user_info(), sizeof(XignCodeApi::XignCode_UserInfo)); #endif //USING_XIGNCODE #ifdef _NA_003027_20111013_HONOR_SYSTEM HonorSystem::GetHonorSystemData().ClearTitleCodeList(); HonorSystem::GetHonorSystemData().InitializeHonorPointTable(); if ( uiCharacterStatusHonorInfo* ui_honor_info = GET_CAST_DIALOG(uiCharacterStatusHonorInfo, uiCharacterStatusHonorInfo::kDialog_ID) ) { ui_honor_info->InitHonorListInfo(); } #endif //_NA_003027_20111013_HONOR_SYSTEM #ifdef _NA004034_20120102_POINT_WALLET_SYSTEM if ( uiCharacterStatusCurrencyInfo* ui_currency_info = GET_CAST_DIALOG(uiCharacterStatusCurrencyInfo, uiCharacterStatusCurrencyInfo::kDialog_ID) ) { ui_currency_info->InitCurrencyInfo(); } #endif //_NA004034_20120102_POINT_WALLET_SYSTEM #ifdef _DH_BATTLEZONE2_ if ( uiBattlezone2Man* ui_battlezone2_manager_ = GET_DIALOG_MANAGER(uiBattlezone2Man, UIMAN_BATTLE_ZONE_MANAGER) ) { ui_battlezone2_manager_->Clear(); } #endif//_DH_BATTLEZONE2_ #ifdef _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND #ifdef _NA_007114_20140313_CHAOSZONE_GOLDRUSH ChaosSystem::ChaosZoneData::ReleaseMutexHandle(); #else ChaosSystem::GetBattleGroundData().ReleaseMutexHandle(); #endif // _NA_007114_20140313_CHAOSZONE_GOLDRUSH #endif //_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND if ( !GENERALPARAM->IsNet() ) { // ij¸¯ÅÍ ¼±Åà °ü·Ã gui º¸À̱â g_InterfaceManager.ShowWindow(InterfaceManager::DIALOG_CHARSELECT,TRUE); uiLoginBackTop* login_back_top = GET_CAST_DIALOG(uiLoginBackTop, uiLoginBackTop::kDialog_ID); if (login_back_top != NULL) { login_back_top->ShowInterface(TRUE); } } #ifdef _NA_008405_20150716_MINIGAME_BINGO MainDialog2* main_dialog = GET_CAST_DIALOG(MainDialog2, IM_MENU_MANAGER::MAIN_DLG_2); if (main_dialog) { main_dialog->MiniGameToDisAbleButton(false); } #endif // _NA_008405_20150716_MINIGAME_BINGO return TRUE; } //------------------------------------------------------------------------------ /** ½Ì±Û¿ë ºó½½·ÔÀ» ±¸ÇÑ´Ù. */ int CharacterScene::GetEmptySlot() { for(int i=0;ix_pManagerMultiLoader) g_pSunRenderer->x_pManagerMultiLoader->TurnOn_MultiThreadedLoading(FALSE); if (m_dwCameraObjectKey) { g_ObjectManager.Delete(m_dwCameraObjectKey); } #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT #else g_Camera.SetProjection(g_Camera.GetNearClip(),m_fOriginalFarClip,g_Camera.GetFOV()); #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT // ij¸¯ÅÍ ¼±Åà °ü·Ã gui °¨Ãß±â g_InterfaceManager.ShowWindow(InterfaceManager::DIALOG_CHARSELECT,FALSE); uiLoginBackTop* login_back_top = GET_CAST_DIALOG(uiLoginBackTop, uiLoginBackTop::kDialog_ID); if (login_back_top != NULL) { login_back_top->ShowInterface(FALSE); } if (m_hTexture != INVALID_HANDLE_VALUE) { g_pSunRenderer->x_pManagerTexture->DestroyTexture(m_hTexture); m_hTexture = INVALID_HANDLE_VALUE; } #ifdef _NA_008800_20160510_COMBAT_RECORD_SYSTEM uiCombatRecordMan* ui_combat_record_manager = (uiCombatRecordMan*)g_InterfaceManager.GetUserInterfaceManager(UIMAN_COMBAT_RECORD); if (ui_combat_record_manager) { ui_combat_record_manager->ClearList(); } #endif // _NA_008800_20160510_COMBAT_RECORD_SYSTEM // ·£´õ¸µ Ç÷¡±× ²ô±â m_bEnableRender = FALSE; #ifdef _MOD_CHAGNE_DELETE_HERO g_ObjectManager.DeleteAllObjectWithoutHero(); #else g_ObjectManager.Destroy(); #endif // ¸Ê ÇØÁ¦.. g_pMap->Destroy(); CHARLIST_ITR itr; for (itr= m_CharList.begin(); itr!= m_CharList.end() ;) { delete static_cast(*itr); m_CharList.erase(itr++); } if(m_bMouseChange) { m_bMouseChange = FALSE; g_Input.SetMouseChange(TRUE); } m_CharList.clear(); for( size_t i=0;i!=m_StatusArray.size();++i) { delete m_StatusArray[i]; } m_StatusArray.clear(); g_InterfaceManager.HideAllWindows(); //#ifdef _YJ_RENEWAL_CHARACTER_CREATE_SCENE // //no operation //#else //_YJ_RENEWAL_CHARACTER_CREATE_SCENE #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT #else ReleaseCreateCharacterResource(); #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT //#endif //_YJ_RENEWAL_CHARACTER_CREATE_SCENE g_InterfaceManager.ResetUIManager(); g_InterfaceManager.ResetSolarDialog(); //------------------------------------------------------------------------------ // Áß±¹ ij¸¯ÅÍ »ý¼ºÈÄ µ¿¿µ»ó º¸±â if (Movie.bink) { BinkClose(Movie.bink); Movie.bink = NULL; } if (Movie.bink_texture != INVALID_HANDLE_VALUE) { g_pSunRenderer->x_pManagerTexture->DestroyTexture(Movie.bink_texture); Movie.bink_texture = INVALID_HANDLE_VALUE; } //------------------------------------------------------------------------------ } //------------------------------------------------------------------------------ /** */ void CharacterScene::CreatePlayerList() { } //------------------------------------------------------------------------------ /** */ void CharacterScene::ProcessKeyInput( DWORD dwTick ) { } //------------------------------------------------------------------------------ /** */ Character* CharacterScene::GetPickedChar(WzRay *pRay) { if(m_bPickCharLock) return NULL; //½ºÅ¸Æ® ÆÐŶÀ» ¾Èº¸³ÂÀ»¶§ if (VectorLength(&pRay->m_wvDirection) >= 0.2f&& BIT_CHECK(m_packetStatus,PACKET_STATUS_CHARACTERSCENE_SELCHAR)==FALSE) { float fT = 0.f; Object * pTargetObject = NULL; Character *pChar = NULL; DWORD dwKey = 0; float fSelectDist = 1000.f; // ÇöÀç ¼±ÅÃµÈ Ä³¸¯ÅÍ¿ÍÀÇ °Å¸®: ±âº»°ªÀº max·Î ¼³Á¤ CHARLIST_ITR itr = m_CharList.begin(); CharListInfo * pCharListInfo = NULL; for (; itr != m_CharList.end(); ++itr) { pCharListInfo = static_cast(*itr); dwKey = pCharListInfo->dwObjectKey; pTargetObject = g_ObjectManager.GetObject(dwKey); if ((pTargetObject->GetSCObject().GetObjectType() & CHARACTER_OBJECT) == CHARACTER_OBJECT) { if (pTargetObject == g_pHero) { continue; } WzBoundingVolume * pVolume=pTargetObject->GetBoundingVolume(); WORD wResult = NTCT_OUTSIDE; if (pTargetObject->GetNumPickingBoundingVolume()) { WzBoundingVolume bv = *pTargetObject->GetPickingBoundingVolume(0); wResult = Intersect_Ray_Bv( pRay, &bv, &fT ); } else { WzBoundingVolume bv = *pTargetObject->GetBoundingVolume(); wResult = Intersect_Ray_Bv( pRay, &bv, &fT ); } if (NTCT_OUTSIDE == wResult) { pTargetObject = NULL; continue; } else { // ÀÌÀü¿¡ ¼±ÅÃÇÑ Ä³¸¯Åͺ¸´Ù °¡±î¿î ij¸¯Å͸¦ ¼±ÅÃÇÑ´Ù. if (fT < fSelectDist) { Character* pSelectChar = (Character *)pTargetObject; pChar = pSelectChar; fSelectDist = fT; } } } } return pChar; } return NULL; } //------------------------------------------------------------------------------ /** ij¸¯ÅÍ ¼±Åà */ void CharacterScene::SelectCharecter(Character * pChar) { Player* pPlayer = static_cast(pChar); CHARLIST_ITR itr = m_CharList.begin(); CharListInfo* pCharListInfo = NULL; m_dwSelectCharacter = INVALID_OBJECT_KEY; for (; itr != m_CharList.end(); ++itr) { pCharListInfo = static_cast(*itr); Player* pOtherPlayer = (Player*)g_ObjectManager.GetObject(pCharListInfo->dwObjectKey); if(pOtherPlayer->GetObjectKey()==pPlayer->GetObjectKey()) { //ÇöÀç ¼±ÅÃµÈ Ä³¸¯Å͸¦ ÀúÀå m_dwSelectCharacter = pPlayer->GetCharInfo()->m_bySlot; // ÀÌÀü ¼±Åà µÈ³ð ó¸® if( m_dwSelectOid != INVALID_OBJECT_KEY && m_dwSelectOid != pPlayer->GetObjectKey() ) { if( ObjectStatus* pOldObject = GetStatus(m_dwSelectOid) ) { pOldObject->SetSelect( FALSE ); pOldObject->status_time_backup = pOldObject->status_time; pOldObject->status_time += 2400; if( Player* pNoneSelPlayer = (Player*)g_ObjectManager.GetObject(m_dwSelectOid) ) { pNoneSelPlayer->SetAnimation ("CE50", FALSE); } } } DWORD preSelectOid = m_dwSelectOid; m_dwSelectOid = pPlayer->GetObjectKey(); if(preSelectOid!=m_dwSelectOid)//ÀÌÀü ¼±ÅÃÇÑ ³ðÀ̶û ´Ù¸¦¶§ { ObjectStatus* pCurrentObject = GetStatus( m_dwSelectOid ); pCurrentObject->SetSelect( TRUE ); } else //ÀÌ¹Ì ¼±ÅÃÇÑ ³ðÀ϶§ ´õºí Ŭ¸¯ °Ë»ç { DWORD diff = g_pSunRenderer->x_Clock.GetCurrentTick()-m_preTime; if( diff < DOUBLE_CLICK_TIME)//´õºíŬ¸¯ ó¸® { SendCharSelectPacket(); } } m_preTime = g_pSunRenderer->x_Clock.GetCurrentTick(); if( GENERALPARAM->IsNet()==FALSE ) { ((Player*)pChar)->SetMoveSpeedRatio(100); ((Player*)pChar)->SetAttackSpeedRatio(100); BattleScene::SetHeroInfo( ((Player *)pChar)->GetClass() ); } break; } } } //------------------------------------------------------------------------------ /** */ void CharacterScene::ProcessMouse(DWORD dwTick) { if( m_bVerifyLock ) return; #ifdef _JP_20110222_INGAME_CHARNAME_CHANGE if (NeedRenameProcess() == true) { // À̸§º¯°æ ÇÁ·Î¼¼½º°¡ ÇÊ¿äÇϸé(ÁøÇàÁßÀ̸é) ¸®ÅÏ return; } #endif //_JP_20110222_INGAME_CHARNAME_CHANGE if (m_bCreateCharacter) { ProcessMouseCreateCharacterMode(dwTick); return; } //Todo:ij¸¯ÅÍ »èÁ¦ ÁøÇà½Ã ¼±Åà ¸ø¹Ù²Ù°Ô if(g_Input.GetState( MOUSE_LBUTTON, KS_MOUSE_DOWN) ) { SelectCharecter(); } } void CharacterScene::ProcessMouseCreateCharacterMode( DWORD dwTick ) { bool RotNotis = false; uiCreateCharacterMan* pCreateMan = GET_DIALOG_MANAGER(uiCreateCharacterMan, UIMAN_CREATECHARACTER); if(pCreateMan) { int posx = Mouse::Instance()->GetMouseX(); int posy = Mouse::Instance()->GetMouseY(); RotNotis = pCreateMan->OnOverWindowInCreate(posx,posy); } if(RotNotis) { return; } ProcessCreateCharacterMouse(); if (GET_DIALOG(IM_CREATE_CHAR_MANAGER::CUSTOM_DIALOG)->IsVisible()) { LPDIMOUSESTATE2 pMouseState = g_Input.GetMouseBuffer(); #ifdef _DEBUG if( g_Input.GetState( MOUSE_RBUTTON, KS_MOUSE_KEY ) ) { g_Camera.Rotate( pMouseState->lX, pMouseState->lY, Camera::CAMERA_ROTATE_RMOUSE ); } #endif #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT if( pMouseState->lZ < 0 ) { ZoomCamera( -0.2f ); } else if( pMouseState->lZ > 0 ) { ZoomCamera( 0.2f ); } #else g_Camera.MoveFrontBack( pMouseState->lZ ); Object* pCamera = g_ObjectManager.GetObject(m_dwCameraObjectKey); if (pCamera != NULL) { float min_distance = 1.0f; if (min_distance > g_Camera.GetCameraDistance()) { g_Camera.SetCameraDistance(min_distance); } float max_distance = 4.0f; if (max_distance < g_Camera.GetCameraDistance()) { g_Camera.SetCameraDistance(max_distance); } float camera_distance = g_Camera.GetCameraDistance(); camera_distance -= 1.0f; camera_distance = max(camera_distance, 0.0f); WzVector from_position = pCamera->GetBonePos(34); WzVector to_position = pCamera->GetBonePos(35); switch (m_bySelectedModel) { case eCHAR_BERSERKER: { from_position.x += (camera_distance * 0.5f); from_position.y += (camera_distance * 0.5f); from_position.z += (camera_distance * 0.5f); to_position.x -= (camera_distance * 0.5f); to_position.y -= (camera_distance * 0.2f); to_position.z -= (camera_distance * 0.5f); } break; case eCHAR_DRAGON: { from_position.x += (camera_distance * 0.45f); from_position.y += (camera_distance * 0.45f); from_position.z += (camera_distance * 0.1f); to_position.x -= (camera_distance * 0.45f); to_position.y -= (camera_distance * 0.2f); to_position.z -= (camera_distance * 0.2f); } break; case eCHAR_SHADOW: { from_position.x += (camera_distance * 0.45f); from_position.y += (camera_distance * 0.5f); from_position.z += (camera_distance * 0.2f); to_position.x -= (camera_distance * 0.45f); to_position.y -= (camera_distance * 0.2f); to_position.z -= (camera_distance * 0.2f); } break; case eCHAR_VALKYRIE: case eCHAR_MAGICIAN: { from_position.x += (camera_distance * 0.5f); from_position.y += (camera_distance * 0.5f); from_position.z += (camera_distance * 0.25f); to_position.x -= (camera_distance * 0.5f); to_position.y -= (camera_distance * 0.2f); to_position.z -= (camera_distance * 0.3f); } break; } WzVector direction = from_position - to_position; VectorNormalize(&direction, &direction); from_position = from_position + (direction * camera_distance); g_Camera.SetCameraFromTo(from_position, to_position); } #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT g_Camera.UpdateCamera(); } } //------------------------------------------------------------------------------ /** */ BOOL CharacterScene::SendCharSelectPacket() { if (BIT_CHECK(m_packetStatus, PACKET_STATUS_CHARACTERSCENE_SELCHAR) == FALSE) { #ifdef _NA_000000_20130114_RENEWER_UI uiCharacterSelectList2* select_list = GET_CAST_DIALOG(uiCharacterSelectList2, IM_CHARACTERSELECT_MANAGER::CHARACTER_SELECT_LIST); #else uiCharacterSelectList* select_list = GET_CAST_DIALOG(uiCharacterSelectList, IM_CHARACTERSELECT_MANAGER::CHARACTER_SELECT_LIST); #endif if (select_list == NULL) { return FALSE; } BYTE slot_index = static_cast(select_list->GetSelectedCharacterSlotIndex()); CharListInfo* character_info = GetCharacterInfoBySlotIndex(slot_index); if (character_info == NULL) { return FALSE; } DWORD character_object_key = character_info->dwObjectKey; if ( Player* select_character = static_cast(g_ObjectManager.GetObject(character_object_key)) ) { if( Pet* pet= static_cast(g_ObjectManager.GetObject(select_character->GetPetObjectKey())) ) { pet->SetPetLock(FALSE); } if (select_character->m_DelChk != 0) { CharSelectDialog* charater_select_dialog = GET_CAST_DIALOG(CharSelectDialog, IM_CHARACTERSELECT_MANAGER::CHARACTER_SELECT_DIALOG); if (charater_select_dialog) { charater_select_dialog->OnDeleteCharacter(); } return FALSE; } } if (GENERALPARAM->IsNet() == TRUE) { m_MsgCharSelectSync.m_bySelectedCharIndex = slot_index; m_dwSelectCharacter = slot_index; //Ìí¼ÓÍâ¹Ò¼ì²â-ÉèÖýÇÉ«Ãû by:Ê®ÀïÆÂ½£Éñ 2021-06-30 CharListInfo * CharInfo = GetCharacterInfoBySlotIndex(slot_index); if(CharInfo) { GameCheckMananger::Instance()->SetCharName(CharInfo->CharacterInfo.m_tszCharName); } GlobalFunc::SendPacket( CI_GAMESERVERIDX, &m_MsgCharSelectSync, sizeof(m_MsgCharSelectSync)); BIT_ADD(m_packetStatus, PACKET_STATUS_CHARACTERSCENE_SELCHAR); } else { CharListInfo* char_info = GetCurSelectCharacterInfo(); BattleScene::SetHeroInfo(char_info->CharacterInfo.m_byClass); #ifdef MAP_EDIT_MODE xGetHeroData()->SetObjectKey( INVALID_OBJECT_KEY ); g_LoadScene.SetNextSceneAfterLoaded(SCENE_TYPE_MAPEDIT, GENERALPARAM->GetStartMapID(), GENERALPARAM->GetStartFieldID()); GameFramework::ChangeScene(SCENE_TYPE_LOAD); #else xGetHeroData()->SetObjectKey( INVALID_OBJECT_KEY ); const sMAPINFO* mapInfo = MapInfoParser::Instance()->FindMapInfo(GENERALPARAM->GetStartMapID()); SCENE_TYPE eSceneType; if(eZONETYPE_INSTANCE == mapInfo->byMKind) eSceneType = GlobalFunc::ConvertClientZoneType((eZONETYPE)mapInfo->byMKind, (eINSTANCE_DUNGEON_KIND)mapInfo->byMType); else eSceneType = GlobalFunc::ConvertClientZoneType((eZONETYPE)mapInfo->byMKind); g_LoadScene.SetNextSceneAfterLoaded(eSceneType, GENERALPARAM->GetStartMapID(), GENERALPARAM->GetStartFieldID()); GameFramework::ChangeScene(SCENE_TYPE_LOAD); #endif } } #ifdef _DH_LAST_SELECTED_CHARACTER uiCharacterSelectMan* select_manager = GET_DIALOG_MANAGER(uiCharacterSelectMan, UIMAN_CHARACTERSELECT); if (select_manager) { select_manager->SetLastSelectCharacter(select_manager->last_selected_header().last_select_server, static_cast(m_dwSelectCharacter)); select_manager->SaveLastSelectedData(); } #endif//_DH_LAST_SELECTED_CHARACTER return TRUE; } void CharacterScene::OnStartGame( int MapCode ) { g_InterfaceManager.ReadySkillInfos(); // ij¸¯ÅÍ À̵¿ÇÒ ¸ã ¼³Á¤ if (GENERALPARAM->IsNet()) { g_Camera.SetCameraDistance(7.5f); g_LoadScene.SetNextSceneAfterLoaded( MapCode, 0 ); GameFramework::ChangeScene( SCENE_TYPE_LOAD ); } else { g_Camera.SetCameraDistance(7.5f); #ifdef MAP_EDIT_MODE xGetHeroData()->SetObjectKey( INVALID_OBJECT_KEY ); g_LoadScene.SetNextSceneAfterLoaded(SCENE_TYPE_MAPEDIT, GENERALPARAM->GetStartMapID(), GENERALPARAM->GetStartFieldID()); GameFramework::ChangeScene(SCENE_TYPE_LOAD); #else xGetHeroData()->SetObjectKey( INVALID_OBJECT_KEY ); const sMAPINFO* mapInfo = MapInfoParser::Instance()->FindMapInfo(GENERALPARAM->GetStartMapID()); SCENE_TYPE eSceneType; if(eZONETYPE_INSTANCE == mapInfo->byMKind) eSceneType = GlobalFunc::ConvertClientZoneType((eZONETYPE)mapInfo->byMKind, (eINSTANCE_DUNGEON_KIND)mapInfo->byMType); else eSceneType = GlobalFunc::ConvertClientZoneType((eZONETYPE)mapInfo->byMKind); g_LoadScene.SetNextSceneAfterLoaded(eSceneType, GENERALPARAM->GetStartMapID(), GENERALPARAM->GetStartFieldID()); GameFramework::ChangeScene(SCENE_TYPE_LOAD); #endif } } //------------------------------------------------------------------------------ /** */ void CharacterScene::ProcessUnits(DWORD dwTick) { //ÇÁ·Î¼¼½º´Â ÀüºÎ µ·´Ù. Object_Map_Itr itr = g_ObjectManager.GetBegin(); while( g_ObjectManager.GetEnd() != itr ) { Object *pObj = (Object *)itr->second; if(pObj->GetSCObject().GetObjectType()==PLAYER_OBJECT) { Player *pPlayer=(Player *)pObj; ProcessState(pPlayer,dwTick); pPlayer->ProcessInterpolation( dwTick ); float ft=pPlayer->ProcessAnimation( dwTick ); ObjectStatus *pStatus= GetStatus(pPlayer->GetObjectKey()); if(pStatus) { pStatus->animation_rate=ft; } if( ft>= PERFECT && m_dwSelectCharacter == pPlayer->GetCharInfo()->m_bySlot && BIT_CHECK(m_packetStatus,PACKET_STATUS_CHARACTERSCENE_SELCHAR) ) { OnStartGame( pPlayer->GetCharInfo()->m_iRegion ); } } else { if (pObj->IsKindOfObject(CAMERA_OBJECT)) { m_fCameraRate = pObj->ProcessAnimation( dwTick ); } else { pObj->Process(dwTick); } } ++itr; } } //------------------------------------------------------------------------------ /** ij¸¯ÅÍ »óÅ º¯È­ ¿¬Ãâ üũ */ ObjectStatus * CharacterScene::GetStatus(DWORD ObjectKey) { for( size_t i=0;i!=m_StatusArray.size();++i) { if(m_StatusArray[i]->object_key == ObjectKey) { return m_StatusArray[i]; } } return NULL; } void ObjectStatus::SetMovingBackStatus() { m_CurrentStatus = CHARACTER_STATUS_MOVE_BACK; } void ObjectStatus::SetIdleStatus() { m_CurrentStatus = CHARACTER_STATUS_IDLE; if( Player* pPlayer = static_cast ( g_ObjectManager.GetObject( object_key ) ) ) { pPlayer->SetAnimation( StrToWzID("N001"), TRUE ); } status_time = 0; SetDefaultStatus(); } //------------------------------------------------------------------------------ WzID GetCreateCharacterPositionAniCode() { return (g_pApplication->IsWideModeFlag() ? StrToWzID("N001") : StrToWzID("N101")); } void ObjectStatus::SetSelectIdleStatus() { if( IsSelected() ) { if( Player* pPlayer = static_cast ( g_ObjectManager.GetObject( object_key ) ) ) { char szAniCode[5]; ZeroMemory(szAniCode,sizeof(szAniCode)); szAniCode[0] = 'N'; szAniCode[1] = pPlayer->GetWeaponAnimationCode(); szAniCode[2] = '0'; #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT szAniCode[3] = '1'; #else szAniCode[3] = '3'; #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT pPlayer->SetAnimation( szAniCode, TRUE ); } } else { if( Player* pPlayer = static_cast ( g_ObjectManager.GetObject( object_key ) ) ) { pPlayer->SetAnimation( GetCreateCharacterPositionAniCode() /*"N001"*/, TRUE ); } } SetDefaultStatus(); } void ObjectStatus::SetMovingFrontStatus() { m_CurrentStatus = CHARACTER_STATUS_MOVE_FRONT; } void ObjectStatus::SetStartMotion() { if( Player* pPlayer = static_cast ( g_ObjectManager.GetObject( object_key ) ) ) { #ifdef _NA_000000_20120920_STARTMOTION_CODE pPlayer->SetAnimation( "CE00", FALSE ); #else if ((pPlayer->GetClass() == eCHAR_BERSERKER) || (pPlayer->GetClass() == eCHAR_DRAGON) ) pPlayer->SetAnimation( "CE08", FALSE ); else pPlayer->SetAnimation( "CE00", FALSE ); #endif// _NA_000000_20120920_STARTMOTION_CODE } SetDefaultStatus(); } //------------------------------------------------------------------------------ /** ij¸¯ÅÍ »óÅ º¯È­ ¿¬Ãâ üũ Todo:À̵¿ ½Ã°£ ´ÜÀ§·Î ¸ÂÃâ°Í,¼Ò½º Á¤¸®-ÀÛ¾÷Áß */ void CharacterScene::ProcessState( Player * pPlayer,DWORD dwTick ) { if( ObjectStatus* pObjectState = GetStatus(pPlayer->GetObjectKey()) ) { if( pObjectState->IsSelected() == FALSE ) { if( pObjectState->IsSelectIdleStatus() == TRUE ) { // ¸ð¼ÇÀ» ÃëÇϴµîÀÇ ÇൿÁßÀ̶ó¸é ¾Ö´Ï¸ÞÀ̼ÇÀÌ Á¾·áµÈ ÈÄ¿¡ µ¹¾Æ°¡µµ·Ï if(pObjectState->animation_rate >= PERFECT) { pObjectState->status_time = pObjectState->status_time_backup; pObjectState->SetMovingBackStatus(); } } else if( pObjectState->IsSelected() == FALSE && pObjectState->IsIdleStatus() == FALSE ) { // ±×¿ÜÀÇ °æ¿ì¿¡´Â ¹Ù·Î µ¹¾Æ°¡µµ·Ï pObjectState->status_time = pObjectState->status_time_backup; pObjectState->SetMovingBackStatus(); } } if( pObjectState->IsSelected() ) { if( pObjectState->IsIdleStatus() ) { // ¾ÕÀ¸·Î °É¾î°¡µµ·Ï ÇÑ´Ù pObjectState->SetMovingFrontStatus(); } } if( pObjectState->IsMovingFrontStatus() ) { //½Ã°£Â÷°¡ ¿­¶ó Ŭ°æ¿ì int twRemainder = 0; pPlayer->SetAnimation( "N006", TRUE ); pObjectState->status_time += dwTick; //2.8ÃÊ µ¿¾È ¾ÕÀ¸·Î °É¾î°£´Ù int iTotalTime = 2800; if(pObjectState->status_time>=iTotalTime) { twRemainder = pObjectState->status_time - iTotalTime; pObjectState->status_time=iTotalTime; pObjectState->SetSelectIdleStatus(); } WzVector curPos = pPlayer->GetVisiblePos(); WzVector dir = pPlayer->GetDirection(); //Todo:À̵¿ °Å¸® ½Ã°£ ó¸® ÇÒ°Í dir.x = dir.x*WALK_SPEED*(dwTick-twRemainder); dir.y = dir.y*WALK_SPEED*(dwTick-twRemainder); curPos += dir; pPlayer->SetPosition(curPos); } else if( pObjectState->IsMovingBackStatus() ) { int twRemainder = 0; //Todo:µÚ·Î °È±â ó¸® pPlayer->SetAnimation( "N011", TRUE ); pObjectState->status_time -= dwTick; if(pObjectState->status_time <= 0) { twRemainder = pObjectState->status_time; pObjectState->status_time = 0; pObjectState->SetIdleStatus(); } WzVector curPos = pPlayer->GetVisiblePos(); WzVector dir = pPlayer->GetDirection(); //Todo:À̵¿ °Å¸® ½Ã°£ ó¸® ÇÒ°Í dir.x=dir.x*WALK_SPEED*(dwTick+twRemainder); dir.y=dir.y*WALK_SPEED*(dwTick+twRemainder); curPos -= dir; pPlayer->SetPosition(curPos); } if( pObjectState->IsSelectIdleStatus() ) { if(m_dwSelectOid==pPlayer->GetObjectKey()) { char szAniCode[5]; ZeroMemory(szAniCode,sizeof(szAniCode)); szAniCode[0] = 'N'; szAniCode[1] = pPlayer->GetWeaponAnimationCode(); szAniCode[2] = '0'; #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT szAniCode[3] = '1'; #else szAniCode[3] = '3'; #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT pPlayer->SetAnimation( szAniCode, TRUE ); } else { pPlayer->SetAnimation( GetCreateCharacterPositionAniCode() /*"N001"*/, TRUE ); } pObjectState->SetDefaultStatus(); } } } void CharacterScene::SetCinematicCharShow( BOOL b ) { if (b != FALSE) { ShowBaseCinematicCharacter(); } else { // ¼±ÅÃµÈ Å¬·¡½º¸¦ Á¦¿ÜÇÏ°í ¼û±è ShowOnlyCinematicCharacter(m_dwSelectedObjectKey); } } //------------------------------------------------------------------------------ /** Ä«¸Þ¶ó ¼³Á¤ : È÷¾î·Î( ³» ij¸¯ÅÍ ) Áß½ÉÀ¸·Î À§Ä¡ */ void CharacterScene::ProcessCamera(LPDIMOUSESTATE2 pMouseState,DWORD dwTick) { #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT xGetCharacterCreate()->ProcessCamera( (eCHAR_TYPE)m_bySelectedClass ); #else if (m_bCreateCharacter) { if (GET_DIALOG(IM_CREATE_CHAR_MANAGER::CUSTOM_DIALOG)->IsVisible()) // Ä¿½ºÅÒ À©µµ¿ì Ȱ¼ºÈ­ ½Ã¿£ ¾Ö´ÏÄ«¸Þ¶ó¸¦ ÀÛµ¿½ÃŰÁö ¾Ê´Â´Ù. { return; } if ( Object* pCamera = g_ObjectManager.GetObject(m_dwCameraObjectKey) ) { #ifdef _KST_CREATECHARACTER_SPRINGCAMERA_ g_Camera.SetSpringCameraPosition( pCamera->GetBonePos(34), pCamera->GetBonePos(35), dwTick ); g_Camera.UpdateCamera(); // Á÷Á¢ ¾÷µ¥ÀÌÆ® ÇØÁØ´Ù. #else // _KST_CREATECHARACTER_SPRINGCAMERA_ g_Camera.AttachToBone( pCamera->GetBonePos(34), pCamera->GetBonePos(35) ); #endif // _KST_CREATECHARACTER_SPRINGCAMERA_ return; } } // Ä«¸Þ¶ó ÃʱâÈ­ WzVector wzCamera, wzTarget; SetVector(&wzCamera, -5.443278f, 6.583461f, 10.761790f); SetVector(&wzTarget, -5.358036f, 5.587751f, 10.697770f); g_Camera.SetCameraFromTo(wzCamera,wzTarget); g_Camera.SetForceSpringCamera( FALSE ); g_Camera.UpdateCamera(); #endif } //------------------------------------------------------------------------------ /** */ BOOL CharacterScene::Process( DWORD dwTick ) { //------------------------------------------------------------------------------ //! Áß±¹ ij¸¯ÅÍ »ý¼ºÈÄ µ¿¿µ»ó º¸±â if (Movie.is_show_movie == true) { bool is_end = (!Movie.bink || g_Input.IsPressAnyKey() || (!BinkWait(Movie.bink) && !NextFrame(Movie.bink))); if (is_end == true) { set_show_movie(false); } return TRUE; } //------------------------------------------------------------------------------ g_CurTime = g_pSunRenderer->x_Clock.GetCurrentTick(); g_pMap->Update(dwTick); LPDIMOUSESTATE2 pMouserState = g_Input.GetMouseBuffer(); if (m_bCreateCharacter) { ProcessScrollInterface(dwTick); } ProcessKeyInput( dwTick ); ProcessMouse( dwTick ); ProcessUnits( dwTick ); ProcessCamera( pMouserState ,dwTick); ProcessLoadCharacter(); m_bEnableRender = TRUE; return TRUE; } //------------------------------------------------------------------------------ /** ¸¶¿ì½º ÇÇÅ·À» À§ÇØ ¸¶¿ì½º Ä¿¼­ ·¹À̸¦ ¾ò¾î¿À´Âµ¥, ÇöÀç ¾÷µ¥ÀÌÆ® ÇÁ·¹ÀÓ¿¡¼­ ±¸ÇØ¾ß Çϴµ¥( ÃÊ´ç 60 ȸ ) ¿©±â ¸»°í´Â Á¦´ë·Î µÈ °ªÀÌ ¾ò¾îÁöÁö ¾Ê´Â´Ù. */ BOOL CharacterScene::Render( DWORD dwTick ) { //------------------------------------------------------------------------------ //! Áß±¹ ij¸¯ÅÍ »ý¼ºÈÄ µ¿¿µ»ó º¸±â if (Movie.is_show_movie == true && Movie.bink != NULL) { POINT pt = g_pApplication->Get2DModeMapping(); FRECT area; float screen_ratio = static_cast(pt.y) / static_cast(pt.x); float movie_ratio = static_cast(Movie.bink->Height) / static_cast(Movie.bink->Width); if (screen_ratio > movie_ratio) { // À§¾Æ·¡ ¿©¹é float size_ratio = static_cast(pt.x) / static_cast(Movie.bink->Width); float w_size = Movie.bink->Width * size_ratio; float h_size = Movie.bink->Height * size_ratio; area.left = 0; area.right = w_size; area.top = (pt.y - h_size) * 0.5f; area.bottom = h_size; } else { // ÁÂ¿ì ¿©¹é float size_ratio = static_cast(pt.y) / static_cast(Movie.bink->Height); float w_size = Movie.bink->Width * size_ratio; float h_size = Movie.bink->Height * size_ratio; area.left = (pt.x - w_size) * 0.5f; area.right = w_size; area.top = 0; area.bottom = h_size; } g_pSunRenderer->ClearRender(); g_pSunRenderer->Set2DMode(TRUE, FALSE); { g_pSunRenderer->RenderTexture(Movie.bink_texture, area.left, area.top, area.right, area.bottom - 1, 0.0f, 0.0f); #ifdef _DEV_VER g_pSunRenderer->x_pManagerTextOut->StartToUseFont("DFLT"); { TCHAR pText[256] = {NULL, }; Snprintf(pText, 256-1, _T("Current Frame : %d"), Movie.bink->FrameNum ); g_pSunRenderer->x_pManagerTextOut->DrawText(pText, 30, (pt.y - 30), WzColor_RGB(0x0F, 255, 0x0f)); } g_pSunRenderer->x_pManagerTextOut->EndUseFont(); #endif //_dev_ver } g_pSunRenderer->Set2DMode(FALSE); if(g_pEffectManager) { g_pEffectManager->Move( dwTick ); } g_pSunRenderer->x_pManagerPostEffect->Apply(); return TRUE; } //------------------------------------------------------------------------------ if( m_bEnableRender == FALSE ) { g_pSunRenderer->RenderTexture( m_hTexture, 0.0f, 0.0f, 1024.0f, 768.0f, 0.0f, 0.0f ); g_pSunRenderer->x_pManagerPostEffect->Apply(); return TRUE; } if(m_bFristRender) { m_bFristRender=FALSE; float fGmmma = GAMEOPTION->GetGameOption().GetOptionValueFloat( nOptionType::GAMMA_VALUE ); SetGamma(DWORD( fGmmma ) ); } if(g_pEffectManager) g_pEffectManager->Move( dwTick ); #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT #else if (m_bCreateCharacter) { //#ifdef _YJ_RENEWAL_CHARACTER_CREATE_SCENE // St_FogParameter old_fog_param; // BOOL ret_fog = g_pSunRenderer->IsFogEnabled(); // g_pSunRenderer->EnableFog(TRUE); // old_fog_param=g_pMap->GetWorldBase()->GetFogParameter(); // g_pMap->GetWorldBase()->SetFogParameter(g_pSunRenderer,m_stFogCharCreate); // g_pSunRenderer->GetMouseCursorRay( &g_wrMouseRay ); // // g_pMap->Render(dwTick); // RenderCinematicCharacter(); // g_pSunRenderer->x_pManagerPostEffect->Apply(); // // g_pMap->GetWorldBase()->SetFogParameter(g_pSunRenderer,old_fog_param); // g_pSunRenderer->EnableFog(ret_fog); //#else //_YJ_RENEWAL_CHARACTER_CREATE_SCENE RenderCharacterCreate(); //#endif //_YJ_RENEWAL_CHARACTER_CREATE_SCENE return TRUE; } #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT g_pSunRenderer->GetMouseCursorRay( &g_wrMouseRay ); g_pSunRenderer->SetCullFaceMode( CF_DRAW_FRONT ); //¹è°æ Ãâ·Â,¿ÀºêÁ§Æ® Ãâ·Â g_pMap->Render(dwTick); SUNPROFILE_BEGIN( _T("RenderUnitText") ); //ÀÌÆåÆ®¿ÍÀÇ Alpha¹®Á¦·Î ÀÌÆåÆ® ·»´õ ÀÌÈķΠȣÃâ ½ÃÁ¡ Á¶Á¤ g_pMap->RenderUnitInfo(); SUNPROFILE_END( _T("RenderUnitText") ); Object_Map_Itr tempitr; Object_Map_Itr itr = g_ObjectManager.GetBegin(); while(itr != g_ObjectManager.GetEnd() ) { Object * pObject = static_cast(itr->second); if (0 == pObject) { assert(!"Object Is NULL!!"); return FALSE; } itr++; } g_pSunRenderer->x_pManagerPostEffect->Apply(); SceneBase::Render(dwTick); return TRUE; } //------------------------------------------------------------------------------ /** */ CharListInfo * CharacterScene::GetCurSelectCharacterInfo( ) { CHARLIST_ITR itr = m_CharList.begin(); CharListInfo * pCharListInfo = NULL; for (; itr != m_CharList.end(); ++itr) { pCharListInfo = static_cast(*itr); if (pCharListInfo && pCharListInfo->CharacterInfo.m_bySlot == (BYTE)m_dwSelectCharacter) { return pCharListInfo; } } return NULL; } //------------------------------------------------------------------------------ /** */ CharListInfo * CharacterScene::GetCharacterInfoBySlotIndex(int slot_index) { CHARLIST_ITR itr = m_CharList.begin(); CharListInfo * pCharListInfo = NULL; for (; itr != m_CharList.end(); ++itr) { pCharListInfo = static_cast(*itr); if ((pCharListInfo != NULL) && pCharListInfo->CharacterInfo.m_bySlot == static_cast(slot_index)) { return pCharListInfo; } } return NULL; } //------------------------------------------------------------------------------ /** */ void CharacterScene::OnRecvCG_SYNC(MSG_BASE * pMsg) { } //------------------------------------------------------------------------------ /** */ void CharacterScene::OnRecvCG_CHARINFO(MSG_BASE * pMsg) { switch( pMsg->m_byProtocol ) { case CG_SECURE_QUERY_RESOURCE_CHK_T2_CMD: { ISecureWorkNode::OnMsgRecvSignal::ResourceCheckT2( pMsg, 0 ); } break; case CG_CHARINFO_CHAR_ITEM_CMD: { // ij¸¯Á¤º¸ + Àκ¥ + Àӽà Àκ¥ MSG_CG_CHARINFO_CHAR_ITEM_CMD * pRecvMsg = (MSG_CG_CHARINFO_CHAR_ITEM_CMD *)pMsg; pRecvMsg->Decode(); CharListInfo* pSelectCharInfo = GetCurSelectCharacterInfo(); xGetHeroData()->SetHeroInfo( pSelectCharInfo->CharacterInfo, pRecvMsg->m_CharacterInfo ); xGetHeroData()->SetEquipItemInfo( &pSelectCharInfo->CharacterInfo.m_EquipItemInfo ); xGetHeroData()->SetItemStream( pRecvMsg->m_BitStreamBuffer, pRecvMsg->m_Size ); const HERO_INFO* pHeroInfo = xGetHeroData()->GetHeroInfo(); #ifdef _NA_000000_20130114_RENEWER_UI #else if( OptionGameDialog * pOptionDialog = GET_CAST_DIALOG( OptionGameDialog, IM_OPTION_MENU_MANAGER::OPTION_GAME_DIALOG ) ) { pOptionDialog->InitBlockCheck( pHeroInfo->m_CharInfo.m_bTradeFlag, pHeroInfo->m_CharInfo.m_bWhisperFlag ); } #endif #if !defined ( __CN_OO0510__FATIGUE_MATCHING_UPDATE ) TiredSystemDialog* pTiredDlg = GET_CAST_DIALOG(TiredSystemDialog, IM_TIRED_SYSTEM_MANAGER::TIRED_SYSTEM); pTiredDlg->SetTime( pHeroInfo->m_CharInfo.m_PlayLimitedTime ); #endif //__CN_OO0510__FATIGUE_MATCHING_UPDATE if (GENERALPARAM->GetSpecialMode()) { if(pRecvMsg->m_CharacterInfo.m_ChaoState==eCHAO_STATE_CHAO) { GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT,_T("Ä«¿À »óÅÂ")); } else if(pRecvMsg->m_CharacterInfo.m_ChaoState==eCHAO_STATE_PREV_CHAO) { GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT,_T("ÇÁ¸® Ä«¿À »óÅÂ")); } } } break; case CG_CHARINFO_SKILL_CMD: { // ½ºÅ³ MSG_CG_CHARINFO_SKILL_CMD * pRecvMsg = (MSG_CG_CHARINFO_SKILL_CMD *)pMsg; xGetHeroData()->SetSkillTotalInfo( &pRecvMsg->m_SkillInfo ); } break; case CG_CHARINFO_QUICK_CMD: { // Äü MSG_CG_CHARINFO_QUICK_CMD * pRecvMsg = (MSG_CG_CHARINFO_QUICK_CMD *)pMsg; xGetHeroData()->SetQuickTotalInfo( &pRecvMsg->m_QuickInfo ); } break; case CG_CHARINFO_STYLE_CMD: { // ½ºÅ¸ÀÏ Äü _asm nop; } break; case CG_CHARINFO_CREATE_ACK: { //Todo:ij¸¯ÅÍ »ý¼º ó¸® #ifdef _NHN_USA_CHANNELING GlobalFunc::SendHanReportPacket(302);//ij¸¯»ý¼º(302) #endif//_NHN_USA_CHANNELING(ºÏ¹Ì ä³Î¸µ:ÁöÇ¥) BIT_REMOVE(m_packetStatus,PACKET_STATUS_CHARACTERSCENE_CREATECHAR); MSG_CG_CHARINFO_CREATE_ACK * pRecvPacket = (MSG_CG_CHARINFO_CREATE_ACK *)pMsg; CLIENT_CHARACTER_PART CharacterListForRecv; ZeroMemory(&CharacterListForRecv, sizeof(CharacterListForRecv)); pRecvPacket->ConvertForRecv(CharacterListForRecv); // ij¸¯ÅÍ Ãß°¡ if( CharListInfo * pCharListInfo = new CharListInfo ) { DWORD ObjectKey = CHARACTERSCENE::PLAYER_LIST + CharacterListForRecv.m_bySlot; pCharListInfo->CharacterInfo = CharacterListForRecv; pCharListInfo->dwObjectKey = ObjectKey; MakeMyChar( ObjectKey, CharacterListForRecv ); m_CharList.push_back( pCharListInfo ); } // »ý¼º¿¡ ¼º°øÇßÀ»¶§¸¸ âÀ» ´Ý´Â´Ù. g_CharSelectScene.SetCreateCharacterMode(FALSE); g_InterfaceManager.ShowWindow(InterfaceManager::DIALOG_CHARSELECT,TRUE); uiLoginBackTop* login_back_top = GET_CAST_DIALOG(uiLoginBackTop, uiLoginBackTop::kDialog_ID); if (login_back_top != NULL) { login_back_top->ShowInterface(TRUE); } #ifdef _NA_000000_20130114_RENEWER_UI uiCharacterSelectList2* select_list_dialog = GET_CAST_DIALOG(uiCharacterSelectList2, IM_CHARACTERSELECT_MANAGER::CHARACTER_SELECT_LIST); #else uiCharacterSelectList* select_list_dialog = GET_CAST_DIALOG(uiCharacterSelectList, IM_CHARACTERSELECT_MANAGER::CHARACTER_SELECT_LIST); #endif if (select_list_dialog != NULL) { select_list_dialog->SetSelectedCharacterListIndex(CharacterListForRecv.m_bySlot); } #ifdef _YJW_CREATECHARACTER_MOVIE set_show_movie(true); #endif //_YJW_CREATECHARACTER_MOVIE } break; case CG_CHARINFO_CREATE_NAK: { MSG_CG_CHARINFO_CREATE_NAK * pRecvPacket = (MSG_CG_CHARINFO_CREATE_NAK *)pMsg; //Todo:ij¸¯ÅÍ »ý¼º ½ÇÆÐ BIT_REMOVE(m_packetStatus,PACKET_STATUS_CHARACTERSCENE_CREATECHAR); ShowErrorCode(pRecvPacket->m_dwErrorCode,TRUE); } break; case CG_CHARINFO_DESTROY_ACK: { //Todo:ij¸¯ÅÍ »èÁ¦ ó¸® BIT_REMOVE(m_packetStatus,PACKET_STATUS_CHARACTERSCENE_DELCHAR); if(m_curDelOid!=INVALID_OBJECT_KEY) { CHARLIST_ITR itr = m_CharList.begin(); CharListInfo * pCharListInfo = NULL; for (; itr != m_CharList.end(); ++itr) { pCharListInfo = static_cast(*itr); if(pCharListInfo->CharacterInfo.m_bySlot==m_curDelOid) { uiHelpMan* helpMan = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_HELP)); if(helpMan) { helpMan->ResetReadInfo(pCharListInfo->CharacterInfo.m_tszCharName); } if( pCharListInfo->CharacterInfo.m_LV >= CHAR_DESTROY_LEVEL) { // ½Ã°£ Æ÷¸ä 2006-10-12 24:03 ( ºÐ´ÜÀ§ ) // »èÁ¦µÈ ½Ã°£À» ÀÓÀÇ·Î ³Ö¾îÁØ´Ù. Player * pPlayer = static_cast ( g_ObjectManager.GetObject(pCharListInfo->dwObjectKey) ); if( pPlayer) { SYSTEMTIME LTime; util::TimeSync::GetLocalTime(<ime); TCHAR szMonth[5] , szDay[5] , szHour[5] , szMinute[5]; // ¼ýÀÚ Æ÷¸ä¿¡ ¸ÂÃß±â À§ÇØ 0º¸´Ù ÀÛÀº ¼ýÀÚ´Â ¾Õ¿¡ 0À» ºÙÀδÙ. ex) 9 -> 09 AddZeroWhenUnder10(szMonth , LTime.wMonth); AddZeroWhenUnder10(szDay , LTime.wDay); AddZeroWhenUnder10(szHour , LTime.wHour); AddZeroWhenUnder10(szMinute , LTime.wMinute); Sprintf(pPlayer->m_tszDelDate , _T("%d-%s-%s %s:%s"), LTime.wYear , szMonth , szDay, szHour , szMinute ); pPlayer->m_DelChk = 3; uiSystemMan * pSystemMan = (uiSystemMan *)g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM); TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,}; TCHAR szTemp[INTERFACE_STRING_LENGTH] ={0,}; // 5039 %s ij¸¯Å͸¦ »èÁ¦ ó¸®Çß½À´Ï´Ù. 7ÀÏ ÈÄ¿¡ ¿ÏÀüÈ÷ »èÁ¦µË´Ï´Ù. g_InterfaceManager.GetInterfaceString(5039, szTemp ,INTERFACE_STRING_LENGTH); Snprintf( szMessage ,INTERFACE_STRING_LENGTH -1, szTemp , pPlayer->GetName() ); if(pSystemMan) pSystemMan->Sys_VerifyLock(szMessage); pCharListInfo->CharacterInfo.m_DelChk = 3; #ifdef _NA_000000_20130114_RENEWER_UI uiCharacterSelectList2* select_list = GET_CAST_DIALOG(uiCharacterSelectList2, IM_CHARACTERSELECT_MANAGER::CHARACTER_SELECT_LIST); #else uiCharacterSelectList* select_list = GET_CAST_DIALOG(uiCharacterSelectList, IM_CHARACTERSELECT_MANAGER::CHARACTER_SELECT_LIST); #endif if (select_list != NULL) { select_list->CharacterListUp(); } } break; } DeleteMyChar(pCharListInfo->dwObjectKey); delete pCharListInfo; m_CharList.erase(itr); #ifdef _NA_000000_20130114_RENEWER_UI uiCharacterSelectList2* select_list = GET_CAST_DIALOG(uiCharacterSelectList2, IM_CHARACTERSELECT_MANAGER::CHARACTER_SELECT_LIST); #else uiCharacterSelectList* select_list = GET_CAST_DIALOG(uiCharacterSelectList, IM_CHARACTERSELECT_MANAGER::CHARACTER_SELECT_LIST); #endif if (select_list != NULL) { select_list->CharacterListUp(); } if(m_dwSelectCharacter==m_curDelOid) m_dwSelectCharacter=INVALID_OBJECT_KEY; m_curDelOid=INVALID_OBJECT_KEY; break; } } } } break; case CG_CHARINFO_DESTROY_NAK: { MSG_CG_CHARINFO_DESTROY_NAK * pRecvPacket = (MSG_CG_CHARINFO_DESTROY_NAK *)pMsg; BIT_REMOVE(m_packetStatus,PACKET_STATUS_CHARACTERSCENE_DELCHAR); m_curDelOid = INVALID_OBJECT_KEY; // CG_CHARINFO_DESTROY_NAK!! // ij¸¯ÅÍ »èÁ¦ ½ÇÆÐ ShowErrorCode(pRecvPacket->m_dwErrorCode); } break; case CG_CHARINFO_RECOVER_ACK: { BIT_REMOVE(m_packetStatus , PACKET_STATUS_CHARACTERSCENE_RECOVERY); Player * pPlayer = ( Player *) g_ObjectManager.GetObject( GetCurrentSelectedPlayerKey() ) ; if( pPlayer ) { pPlayer->m_DelChk = 0; } CharListInfo* char_info = g_CharSelectScene.GetCurSelectCharacterInfo(); if (char_info) { char_info->CharacterInfo.m_DelChk = 0; } #ifdef _NA_000000_20130114_RENEWER_UI uiCharacterSelectList2* select_list = GET_CAST_DIALOG(uiCharacterSelectList2, IM_CHARACTERSELECT_MANAGER::CHARACTER_SELECT_LIST); #else uiCharacterSelectList* select_list = GET_CAST_DIALOG(uiCharacterSelectList, IM_CHARACTERSELECT_MANAGER::CHARACTER_SELECT_LIST); #endif if (select_list != NULL) { select_list->CharacterListUp(); } } break; case CG_CHARINFO_RECOVER_NAK: { MSG_CG_CHARINFO_RECOVER_NAK * pRecvPacket = ( MSG_CG_CHARINFO_RECOVER_NAK *) pMsg; BIT_REMOVE(m_packetStatus , PACKET_STATUS_CHARACTERSCENE_RECOVERY); ShowRecoveryErrorCode(pRecvPacket->m_dwErrorCode); } break; case CG_CHARINFO_CHARACTERID_CHECK_ACK: case CG_CHARINFO_CHARACTERID_CHECK_NAK: { OnRecvCharacterIDCheck(pMsg); } break; case CG_CHARINFO_ACCUMULATE_POINT_CMD: { SceneBase::OnRecvCG_CHARINFO(pMsg); } break; case CG_CHARINFO_SKILL_PERK_CMD: { uiBase* perk_dialog = GET_DIALOG(IM_SKILL_MANAGER::SKILL_PERK_DLG); if (perk_dialog != NULL) { perk_dialog->NetworkProc(pMsg); } } break; } } void CharacterScene::OnRecvCharacterIDCheck(MSG_BASE* pMsg) { #ifdef _JP_20110222_INGAME_CHARNAME_CHANGE if (NeedRenameProcess() == true) { uiBase* rename_input_dialog = GET_DIALOG(IM_CHARACTERSELECT_MANAGER::CHARACTER_SELECT_RENAME_INPUT); if (rename_input_dialog != NULL) { rename_input_dialog->NetworkProc(pMsg); } return; } #endif switch (pMsg->m_byProtocol) { case CG_CHARINFO_CHARACTERID_CHECK_ACK: { g_InterfaceManager.ShowMessageBox(g_InterfaceManager.GetInterfaceString(5053), 2000, NULL, 0); } break; case CG_CHARINFO_CHARACTERID_CHECK_NAK: { g_InterfaceManager.ShowMessageBox(g_InterfaceManager.GetInterfaceString(5052), 2000, NULL, 0); } break; } } //------------------------------------------------------------------------------ /** Todo:½ºÆ®¸µ Å×ÀÌºí ¿äû */ void CharacterScene::ShowErrorCode(DWORD dwErrorCode,BOOL bCreate) { TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,}; if ( bCreate ) { switch(dwErrorCode) { case RC_CHAR_CREATE_MINIMUM_CHARACTER: { //5025 À̸§Àº ¿µ¹® 4ÀÚ ÇÑ±Û 2ÀÚ ÀÌ»ó ÀÔ·ÂÇØÁÖ¼¼¿ä g_InterfaceManager.GetInterfaceString(5025 , szMessage ,INTERFACE_STRING_LENGTH ); } break; case RC_CHAR_CREATE_CANNOT_CREATE_TO_SERVICE: { // 5009 ÇØ´ç ¿ùµåÀÇ È¥ÀâÀ¸·Î ½Å±Ô ij¸¯ÅÍ »ý¼ºÀÌ °¡´ÉÇÏÁö ¾Ê½À´Ï´Ù. ´Ù¸¥ ¿ùµå¸¦ ÀÌ¿ëÇØ Áֽñ⠹ٶø´Ï´Ù. g_InterfaceManager.GetInterfaceString( 5009 , szMessage ,INTERFACE_STRING_LENGTH); } break; case RC_CHAR_CREATE_EXIST_SAME_NAME: { // 5230 µ¿ÀÏÇÑ À̸§ÀÇ Ä³¸¯ÅͰ¡ Á¸ÀçÇÕ´Ï´Ù. g_InterfaceManager.GetInterfaceString( 5230 , szMessage ,INTERFACE_STRING_LENGTH); } break; case RC_CHAR_CREATE_SLOT_FULL: { //70009 ij¸¯ÅÍ »ý¼º °³¼ö°¡ ÃʰúµÇ¾ú½À´Ï´Ù. g_InterfaceManager.GetInterfaceString(70009 , szMessage ,INTERFACE_STRING_LENGTH); } break; case RC_CHAR_CREATE_CHARNAME_BAN_WORD: { // ±ÝÁö ´Ü¾î »ç¿ë g_InterfaceManager.GetInterfaceString( eST_CANNOT_USE_WORD, szMessage, MAX_MESSAGE_LENGTH ); } break; #ifdef _NA_20100307_BETAKEY_SYSTEM case RC_CHAR_CREATE_CANNOT_BETAKEY: { //»ç¿ëÀÚ°¡ °¡Áø º£Å¸Å°·Î´Â ÇØ´ç ij¸¯Å͸¦ »ý¼ºÇÒ¼ö ¾ø½À´Ï´Ù. // 70540: Á¶°ÇÀÌ ¸ÂÁö ¾Ê¾Æ ¼±ÅÃÇϽŠŬ·¡½º¸¦ »ý¼º ÇÒ ¼ö ¾ø½À´Ï´Ù. g_InterfaceManager.GetInterfaceString(70540, szMessage, MAX_MESSAGE_LENGTH ); } break; #endif//_NA_20100307_BETAKEY_SYSTEM #ifdef _DEBUG case RC_CHAR_CREATE_ALREADY_DOING_TRANSACTION: { Snprintf( szMessage , INTERFACE_STRING_LENGTH -1 , _T("[DEBUG] ÀÌ¹Ì ´Ù¸¥ Æ®·£Àè¼ÇÀ» ÁøÇàÁßÀÌ´Ù.")); } break; case RC_CHAR_CREATE_INVALID_PARAM: { Snprintf( szMessage , INTERFACE_STRING_LENGTH -1, _T("[DEBUG] ÆÐŶÀÌ À߸øµÈ °ªÀÔ´Ï´Ù.") ); } break; case RC_CHAR_CREATE_DISCONNECTED_DBPROXY: { Snprintf( szMessage , INTERFACE_STRING_LENGTH -1 , _T("[DEBUG] DBP°¡ ¿¬°áÀÌ µÇÁö ¾Ê¾Ò½À´Ï´Ù.(Àá½ÃµÚ ¼­ºñ½º ÀÌ¿ë¹Ù¶÷)")); } break; case RC_CHAR_CREATE_TRANSACTION_ERROR: { Snprintf( szMessage ,INTERFACE_STRING_LENGTH -1, _T("[DEBUG] Æ®·£Á§¼Ç ¿À·ù(Äõ¸®¿À·ù,±âŸ¿À·ù)") ); } break; case RC_CHAR_CREATE_QUERY_ERROR: { Snprintf( szMessage , INTERFACE_STRING_LENGTH - 1, _T("[DEBUG] DBÄõ¸® ½ÇÆÐ")); } break; case RC_CHAR_CREATE_DBUSER_NOT_EXIST: { Snprintf( szMessage , INTERFACE_STRING_LENGTH -1 , _T("[DEBUG] DBProxyÀÇ DBÀ¯Àú°¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù.") ); } break; case RC_CHAR_CREATE_DBCHAR_ALREADY_CREATED: { Snprintf( szMessage ,INTERFACE_STRING_LENGTH -1 , _T("[DEBUG] DBPÀÇ Ä³¸¯ÅͰ¡ ÀÌ¹Ì ¸¸µé¾îÁ® ÀÖ´Ù.") ); } break; #endif default: { g_InterfaceManager.GetInterfaceString( eST_CHARACTER_CREATE_FAIL, szMessage, INTERFACE_STRING_LENGTH ); } break; } } else { switch ( dwErrorCode ) { case RC_CHAR_DESTROY_DESTROIED: { Snprintf( szMessage ,INTERFACE_STRING_LENGTH -1 , _T("ÀÌ¹Ì »èÁ¦µÈ ij¸¯ÅÍ ÀÔ´Ï´Ù.") ); } break; case RC_CHAR_DESTROY_INCORRECT_SSN: { // 5845 Áֹεî·Ï¹øÈ£°¡ ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù. g_InterfaceManager.GetInterfaceString(5845 , szMessage ,INTERFACE_STRING_LENGTH ); } break; case RC_CHAR_DESTROY_GUILD_MASTER: { // 5178 ±æµåÀå ij¸¯ÅÍÀÔ´Ï´Ù. »èÁ¦°¡ °¡´ÉÇÏÁö ¾Ê½À´Ï´Ù. g_InterfaceManager.GetInterfaceString(5178 , szMessage ,INTERFACE_STRING_LENGTH); } break; case RC_CHAR_DESTROY_GROUP_MEMBER: { // 7057 ±×·ì ¸â¹ö¸¦ ¸ðµÎ ÇØÁ¦ÇÑ ÈÄ Ä³¸¯ÅÍ »èÁ¦°¡ °¡´ÉÇÕ´Ï´Ù. g_InterfaceManager.GetInterfaceString(7057 , szMessage ,INTERFACE_STRING_LENGTH); } break; #ifdef _DEBUG case RC_CHAR_RECOVER_ALREADY_DOING_TRANSACTION: { Snprintf( szMessage , INTERFACE_STRING_LENGTH - 1, _T("[DEBUG] ÀÌ¹Ì ´Ù¸¥ Æ®·£Àè¼ÇÀ» ÁøÇàÁßÀÌ´Ù.") ); } break; case RC_CHAR_DESTROY_INVALID_PARAM: { Snprintf( szMessage , INTERFACE_STRING_LENGTH -1 , _T("[DEBUG] ÆÐŶÀÌ À߸øµÈ °ªÀÔ´Ï´Ù.") ); } break; case RC_CHAR_DESTROY_TRANSACTION_ERROR: { Snprintf ( szMessage , INTERFACE_STRING_LENGTH -1 , _T("[DEBUG] Æ®·£Á§¼Ç ¿À·ù(Äõ¸®¿À·ù,±âŸ¿À·ù)" ) ); } break; case RC_CHAR_DESTROY_DISCONNECTED_DBPROXY: { Snprintf( szMessage , INTERFACE_STRING_LENGTH -1 , _T("[DEBUG] DBP°¡ ¿¬°áÀÌ µÇÁö ¾Ê¾Ò½À´Ï´Ù.(Àá½ÃµÚ ¼­ºñ½º ÀÌ¿ë¹Ù¶÷)")); } break; case RC_CHAR_DESTROY_DBUSER_ALREADY_CREATED: { Snprintf( szMessage ,INTERFACE_STRING_LENGTH -1 , _T("[DEBUG] DBPÀÇ À¯Àú°¡ ÀÌ¹Ì ¸¸µé¾îÁ® ÀÖ´Ù. ") ); } break; case RC_CHAR_DESTROY_QUERY_ERROR: { Snprintf( szMessage , INTERFACE_STRING_LENGTH -1 , _T("[DEBUG] DBÄõ¸® ½ÇÆÐ") ); } break; case RC_CHAR_DESTROY_DBUSER_DONOT_EXIST: { Snprintf( szMessage , INTERFACE_STRING_LENGTH -1 , _T("[DEBUG] DBProxyÀÇ DBÀ¯Àú°¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù." ) ); } break; case RC_CHAR_DESTROY_DBCHAR_DONOT_EXIST: { Snprintf( szMessage , INTERFACE_STRING_LENGTH -1 , _T("[DEBUG] »èÁ¦ÇÒ Ä³¸¯ÅͰ¡ ¾ø´Ù.") ); } break; #endif default: { g_InterfaceManager.GetInterfaceString( eST_CHARACTER_DELETE_FAIL, szMessage, INTERFACE_STRING_LENGTH ); } break; } } if( _tcslen(szMessage ) > 0 ) g_InterfaceManager.ShowMessageBox( szMessage, 2000, NULL, 0 ); } //------------------------------------------------------------------------------ /** */ void CharacterScene::OnRecvCA_CHARINFO( MSG_BASE * pMsg ) { } //------------------------------------------------------------------------------ /** */ void CharacterScene::ParsePacket( MSG_BASE * pMsg ) { switch (pMsg->m_byCategory) { case CG_CHARINFO: OnRecvCG_CHARINFO(pMsg); SceneBase::OnRecvCG_CHARINFO( pMsg ); break; case CG_SYNC: OnRecvCG_SYNC(pMsg); break; case CG_AREACONQUEST: OnRecvCG_AREACONQUEST(pMsg); break; case CG_CONNECTION: OnRecvCG_CONNECTION(pMsg); break; case CG_EVENT: OnRecvCG_EVENT(pMsg); break; default: SceneBase::ParsePacket(pMsg); break; }; } //------------------------------------------------------------------------------ /** */ void CharacterScene::OnRecvCG_CONNECTION(MSG_BASE * pMsg) { TCHAR szMessage[INTERFACE_STRING_LENGTH + 1] = {0,}; switch ( pMsg->m_byProtocol) { case CG_PREPARE_WORLD_CONNECT_ACK: OnRecvCG_CONNECTION__CG_PREPARE_WORLD_CONNECT_ACK( pMsg ); break; case CG_PREPARE_WORLD_CONNECT_NAK: OnRecvCG_CONNECTION__CG_PREPARE_WORLD_CONNECT_NAK( pMsg ); break; case CG_CONNECTION_ENTERSERVER_ACK: { if (g_pNetwork) { g_pNetwork->SetEnableSendHeartBeat(TRUE); } if(GENERALPARAM->GetSpecialMode()) { GlobalFunc::EndTimeCheck(g_dwStartTime, true, _T("ij¸¯ÅÍ Á¤º¸ ¹ÞÀ½")); GlobalFunc::PrintTotalLoadingTime(); } MSG_CG_CONNECTION_ENTERSERVER_ACK * pRecvPacket = (MSG_CG_CONNECTION_ENTERSERVER_ACK *)pMsg; CLIENT_CHARACTER_PART pCharacterListForRecv[MAX_CHARACTER_LIST_NUM]; ZeroMemory(&pCharacterListForRecv, sizeof(pCharacterListForRecv)); pRecvPacket->ConvertForRecv(pCharacterListForRecv); m_byCharacterSlot = pRecvPacket->char_slot_size; for( int i = 0; i < pRecvPacket->m_byCount; ++i ) { #ifdef _NA_004035_20120227_COSTUME_ITEM // ÀåÂø ÇØÁ¦ÁßÀε¥ Äڵ尡 ³²¾ÆÀִ°æ¿ì¿¡ Ŭ¶ó¿¡¼­ Á÷Á¢ 0À» ³Ö¾îÁÜ if( pCharacterListForRecv[i].is_equipped_costume == false ) { pCharacterListForRecv[i].costume_item_pos = INVALID_SLOT_POS; pCharacterListForRecv[i].costume_item_code = 0; } #endif//_NA_004035_20120227_COSTUME_ITEM #ifdef _NA_008633_20160104_ADD_DECORATECOSTUME // ÀåÂø ÇØÁ¦ÁßÀε¥ Äڵ尡 ³²¾ÆÀִ°æ¿ì¿¡ Ŭ¶ó¿¡¼­ Á÷Á¢ 0À» ³Ö¾îÁÜ if( pCharacterListForRecv[i].is_equipped_decorate_costume == false ) { pCharacterListForRecv[i].decorate_costume_item_pos = INVALID_SLOT_POS; pCharacterListForRecv[i].decorate_costume_item_code = 0; } #endif // _NA_008633_20160104_ADD_DECORATECOSTUME // ij¸¯ÅÍ ¸®½ºÆ® ¼³Á¤ CharListInfo* pCharListInfo = new CharListInfo; pCharListInfo->CharacterInfo = pCharacterListForRecv[i]; // Copy pCharListInfo->dwObjectKey = CHARACTERSCENE::PLAYER_LIST + pCharacterListForRecv[i].m_bySlot; if(GENERALPARAM->GetSpecialMode()) { g_dwStartTime = GlobalFunc::StartTimeCheck(); GlobalFunc::WriteLoadingTimeLog(_T("ij¸¯ÅÍ ¼¼ÆÃ ½ÃÀÛ")); } MakeMyChar(pCharListInfo->dwObjectKey, pCharacterListForRecv[i] ); m_CharList.push_back( pCharListInfo ); if(GENERALPARAM->GetSpecialMode()) { GlobalFunc::EndTimeCheck(g_dwStartTime, true, _T("ij¸¯ÅÍ ¼¼ÆÃ ¿Ï·á")); GlobalFunc::PrintTotalLoadingTime(); } } m_bConnected = TRUE; g_isPkServer = pRecvPacket->m_bPVP; #ifdef _JP_20110222_INGAME_CHARNAME_CHANGE RecvRenameStatus(&(pRecvPacket->m_ReNameStatus[0])); #endif _JP_20110222_INGAME_CHARNAME_CHANGE is_loaded_my_character_ = false; HideAllCharacter(); // ij¸¯ÅÍ Á¤º¸ Àü¼ÛÁß const int c_iCharInfoSending = 70256; g_InterfaceManager.GetInterfaceString( c_iCharInfoSending, szMessage, INTERFACE_STRING_LENGTH ); g_InterfaceManager.ShowMessageBox( szMessage, 1, NULL, 0 ); CursorChangeTransact::Instance()->ForceChange( MouseCursor::eMouseCursor_Default ); GlobalFunc::GetCrashReportFileName(g_szCrashLogFileName); SetFileAttributes(g_szCrashLogFileName, FILE_ATTRIBUTE_NORMAL); TCHAR szTempBuffer[16] = {0,}; GetPrivateProfileString( _T("SEND_REPORT"), _T("Send"), _T("-2"), szTempBuffer, 15, g_szCrashLogFileName ); int iSendReport = _ttoi(szTempBuffer); if(iSendReport == 0) { // 5029 : Å©·¡½¬ ¸®Æ÷Æ®¸¦ º¸³»½Ã°Ú½À´Ï±î? TCHAR szTempMessage[INTERFACE_STRING_LENGTH] = {0,}; g_InterfaceManager.GetInterfaceString(5029, szTempMessage, INTERFACE_STRING_LENGTH); uiSystemMan * pSystemMan = (uiSystemMan *)g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM); if(pSystemMan) pSystemMan->Sys_Confirm(szTempMessage, _ProcessCrashReport); } #ifdef _DH_LAST_SELECTED_CHARACTER #if defined(_DEBUG) || defined(_GAMECLIENT_VER) if( AutoTestManagerEx::Instance()->IsAutoLogin() == false ) //if( AutoTestManager::Instance()->IsEnable() == false ) { //¸¶Áö¸· Á¢¼Ó Á¤º¸ ¿äû uiCharacterSelectMan* select_manager = GET_DIALOG_MANAGER(uiCharacterSelectMan, UIMAN_CHARACTERSELECT); if (select_manager) { select_manager->SEND_SELECT_CHARACTER_DATA_GAMEOPTION_LOAD_SYN(); } } #else //¸¶Áö¸· Á¢¼Ó Á¤º¸ ¿äû uiCharacterSelectMan* select_manager = GET_DIALOG_MANAGER(uiCharacterSelectMan, UIMAN_CHARACTERSELECT); if (select_manager) { select_manager->SEND_SELECT_CHARACTER_DATA_GAMEOPTION_LOAD_SYN(); } #endif//defined(_DEBUG) || defined(_GAMECLIENT_VER) #endif//_DH_LAST_SELECTED_CHARACTER } break; case CG_CONNECTION_ENTERSERVER_NAK: { // CG_CONNECTION_ENTERSERVER_NAK!! m_bConnected = FALSE; MSG_CG_CONNECTION_ENTERSERVER_NAK * pRecvMsg = (MSG_CG_CONNECTION_ENTERSERVER_NAK *)pMsg; switch ((eLOGOUT_RESULT)pRecvMsg->m_dwErrorCode ) { case RC_LOGOUT_WRONG_VERSION: { //< ¹öÀüÀÌ ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù. const int c_iAuthLogout = 70258; g_InterfaceManager.GetInterfaceString( c_iAuthLogout, szMessage, INTERFACE_STRING_LENGTH ); uiSystemMan * pSystemMan = (uiSystemMan *)g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM); if(pSystemMan) pSystemMan->Sys_VerifyLock(szMessage, TRUE); } break; case RC_LOGOUT_AUTH_REQUEST: { //< °­Á¦ ·Î±×¾Æ¿ô ¿äûÀ¸·Î ·Î±×¾Æ¿ô µÇ¾ú½À´Ï´Ù. // ÀÎÁõ¼­¹ö·Î ºÎÅÍ ·Î±×¾Æ¿ô 󸮵ƽÀ´Ï´Ù! const int c_iAuthLogout = 70258; g_InterfaceManager.GetInterfaceString( c_iAuthLogout, szMessage, INTERFACE_STRING_LENGTH ); uiSystemMan * pSystemMan = (uiSystemMan *)g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM); if(pSystemMan) pSystemMan->Sys_VerifyLock(szMessage, TRUE); } break; case RC_LOGOUT_WRONG_AUTHKEY: { //< ¿Ã¹Ù¸¥ ÀÎÁõÀýÂ÷¸¦ °ÅÄ¡Áö ¾Ê¾Æ ·Î±×¾Æ¿ô µË´Ï´Ù. 5013 g_InterfaceManager.GetInterfaceString(eST_LOG_OUT_BECAUSE_INVALID_AUTH , szMessage , INTERFACE_STRING_LENGTH); g_InterfaceManager.ShowMessageBox( szMessage , 2000, NULL, 0 ); } break; case RC_LOGOUT_HACKING_USER: { //< ¼­¹ö·Î À߸øµÈ µ¥ÀÌÅ͸¦ Àü¼ÛÇØ¼­ ·Î±×¾Æ¿ô µÇ¾ú½À´Ï´Ù. 5014 g_InterfaceManager.GetInterfaceString(eST_LOG_OUT_BECAUSE_INVALID_REQUEST , szMessage , INTERFACE_STRING_LENGTH ); g_InterfaceManager.ShowMessageBox(szMessage , 2000, NULL, 0 ); } break; case RC_LOGOUT_DB_ERROR: { //< µ¥ÀÌÅÍ¿¡ ¿À·ù°¡ ¹ß»ýÇØ¼­ ·Î±×¾Æ¿ô µÇ¾ú½À´Ï´Ù. // ij¸¯ÅÍ ¸®½ºÆ®¸¦ ¹ÞÁö ¸øÇÏ¿´½À´Ï´Ù. const int c_iNotRecvCharInfo = 70263; g_InterfaceManager.GetInterfaceString( c_iNotRecvCharInfo, szMessage, INTERFACE_STRING_LENGTH ); g_InterfaceManager.ShowMessageBox( szMessage, 2000, NULL, 0 ); } break; case RC_LOGOUT_CHAR_BLOCK: { // °èÁ¤ Á¦Àç(ºí·°)ÁßÀÎ À¯ÀúÀÔ´Ï´Ù. : 5015 g_InterfaceManager.GetInterfaceString(eST_BLOCK_ACCOUNT_USER , szMessage , INTERFACE_STRING_LENGTH ); g_InterfaceManager.ShowMessageBox( szMessage, 2000, NULL, 0 ); } break; case RC_LOGOUT_DUPLICATED_USER: { //< °°Àº °èÁ¤À¸·Î Á¢¼ÓÀ» ½ÃµµÇÏ¿© ·Î±×¾Æ¿ô µË´Ï´Ù. g_InterfaceManager.GetInterfaceString(eST_LOG_OUT_BECAUSE_SAME_LOGIN, szMessage , INTERFACE_STRING_LENGTH); g_InterfaceManager.ShowMessageBox( szMessage , 2000, NULL, 0 ); } break; } } break; case CG_CONNECTION_ENTERVILLAGEREQ_ACK: { g_InterfaceManager.HideAllWindows(); // UI »óÅ ÃʱâÈ­ Init_UIState(); //ä³Î äÆÃ Á¾·á ó¸® ChatDialog * pChatDialog = GET_CAST_DIALOG(ChatDialog, IM_CHAT_MANAGER::CHAT_DIALOG);//(ChatDialog * ) g_InterfaceManager.GetDialog(InterfaceManager::DIALOG_CHAT); if (pChatDialog) { if (pChatDialog->GetExistChannel()) { pChatDialog->ExitChannelChat(); } pChatDialog->set_is_first_enter(true); // HELP ä³ÎäÆÃ °ü·Ã ÃʱâÈ­ } ShopDialog * pShopDlg = (ShopDialog *)g_InterfaceManager.GetDialog( InterfaceManager::DIALOG_SHOP ); if( pShopDlg ) { pShopDlg->ClearAllHistorySlot(); } // ½ÇÁ¦ »ç¿ëÇÒ, ¼±ÅÃÇÑ Ä³¸¯ÅÍ µ¥ÀÌÅͰ¡ µþ·Á ¿Â´Ù BYTE byCategory = 0; BYTE byProtocol = 0; DWORD dwObjectKey = 0; MSG_CG_CONNECTION_ENTERVILLAGEREQ_ACK * pRecvPacket = (MSG_CG_CONNECTION_ENTERVILLAGEREQ_ACK *)pMsg; xGetHeroData()->SetObjectKey( pRecvPacket->m_dwPlayerKey ); if(IsSendSelectCharPacket()) { #ifdef _NA_0_20110613_GAME_SHOP_RENEWAL if( ConvenienceStore::CashShop* pInstance = ConvenienceStore::CashShop::instance() ) { pInstance->SetHasNewPresent(false); } #else uiCashItemShopMan *pCashMan = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_CASH_ITEM_SHOP)); if( pCashMan && pCashMan->GetNewPresentRcvCount() ) { pCashMan->ClearNewPresentRcvCount(); } #endif //#ifdef _NA_0_20110613_GAME_SHOP_RENEWAL } CharListInfo * pSelectCharInfo = GetCurSelectCharacterInfo(); //g_LoadScene.SetGoingToMap( pSelectCharInfo->CharacterInfo.m_iRegion ); //g_LoadScene.SetNextSceneAfterLoaded( SCENE_TYPE_VILLAGE ); // ¼±ÅÃÇÑ ³ð ÆÄÀÌÆÃ Æ÷Á ÃëÇÑ ´ÙÀ½ ·Îµù¾ÀÀ¸·Î ³Ñ¾î°£´Ù. ÆÄÀÌÆÃ Æ÷Áî ¼ÂÆÃ m_dwSelectCharacter = BattleScene::GetHeroInfo()->m_CharInfo.m_bySlot; #ifdef _YMS_AUTOBOT_GAME AutobotConditionManager::Instance()->Init(pSelectCharInfo->CharacterInfo.m_tszCharName); MSG_CG_ETC_GAMEOPTION_LOAD_SYN autobot_syn; autobot_syn.option_type_ = GameOption::kAutoHunting; GlobalFunc::SendPacket(CI_GAMESERVERIDX, &autobot_syn, sizeof(autobot_syn)); #endif //_YMS_AUTOBOT_GAME CHARLIST_ITR itr = m_CharList.begin(); CharListInfo * pCharListInfo = NULL; for (; itr != m_CharList.end(); ++itr) { pCharListInfo = static_cast(*itr); if(pCharListInfo->CharacterInfo.m_bySlot==m_dwSelectCharacter) { if( ObjectStatus* pObjectStatus = GetStatus( pCharListInfo->dwObjectKey ) ) { pObjectStatus->SetStartMotion(); #if defined(_DEBUG) || defined(_GAMECLIENT_VER) // µð¹ö±×/°³¹ß¹èÆ÷ ¸ðµå if( AutoTestManagerEx::Instance()->IsAutoLogin() == true ) { OnStartGame(pCharListInfo->CharacterInfo.m_iRegion); } //#ifdef _KIKI_AUTOTEST // if( AutoTestManager::Instance()->IsSkipLobbyLoading() ) // { // OnStartGame(pCharListInfo->CharacterInfo.m_iRegion); // } //#endif #endif break; } //if( Object* pObject =g_ObjectManager.GetObject(pCharListInfo->dwObjectKey) ) //{ // switch ( pObject->GetSCObject().GetObjectType() ) // { // case MAP_OBJECT: // break; // case PLAYER_OBJECT: // { // Player * pPlayer = static_cast(pObject); // if( pPlayer->GetCharInfo()->m_bySlot == m_dwSelectCharacter ) // { // if( ObjectStatus* pObjectStatus = GetStatus( pPlayer->GetObjectKey()) ) // { // pObjectStatus->SetStartMotion(); // } // return; // } // } // } //} } } } break; case CG_CONNECTION_ENTERVILLAGEREQ_NAK: { // CG_CONNECTION_ENTERVILLAGEREQ_NAK!! MSG_CG_CONNECTION_ENTERVILLAGEREQ_NAK * pRecvMsg = (MSG_CG_CONNECTION_ENTERVILLAGEREQ_NAK *)pMsg; BIT_REMOVE(m_packetStatus,PACKET_STATUS_CHARACTERSCENE_SELCHAR); TCHAR szMessage[INTERFACE_STRING_LENGTH]; g_InterfaceManager.GetStringEnterVillageError( pRecvMsg->m_dwErrorCode, szMessage, INTERFACE_STRING_LENGTH); GlobalFunc::OutputMsg_Error(eOUTPUT_MSG_TOP_SHOW, szMessage); } break; #ifdef _JP_20110222_INGAME_CHARNAME_CHANGE case CG_CHARNAME_CHANGE_ACK: case CG_CHARNAME_CHANGE_NAK: { if (NeedRenameProcess() == true) { uiBase* rename_input_dialog = GET_DIALOG(IM_CHARACTERSELECT_MANAGER::CHARACTER_SELECT_RENAME_INPUT); if (rename_input_dialog != NULL) { rename_input_dialog->NetworkProc(pMsg); } } } break; #endif //_JP_20110222_INGAME_CHARNAME_CHANGE default: { SceneBase::OnRecvCG_CONNECTION(pMsg); } break; } } //------------------------------------------------------------------------------ /** */ void CharacterScene::MakeMyChar( DWORD ObjectKey, const CLIENT_CHARACTER_PART& CharacterInfo ) { DWORD class_code = CharacterInfo.m_byClass; ClassCodeEx class_code_ex; class_code_ex.class_type = CharacterInfo.m_byClass; class_code_ex.gender = CharacterInfo.gender; class_code = class_code_ex.class_code; BYTE SlotIndex = CharacterInfo.m_bySlot; WzVector stand_position = m_PosInfoArray[SlotIndex].wzVecPosition; #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT stand_position = xGetCharacterCreate()->GetStandPosition(GetRace(class_code)); #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT ObjectStatus* pObjectStatus = new ObjectStatus( ObjectKey, stand_position ); m_StatusArray.push_back( pObjectStatus ); #if defined(_DEBUG) || defined(_GAMECLIENT_VER) // µð¹ö±×/°³¹ß¹èÆ÷ ¸ðµå if( AutoTestManagerEx::Instance()->IsAutoLogin() == true ) { return; } //#ifdef _KIKI_AUTOTEST // if( AutoTestManager::Instance()->IsSkipLobbyLoading() ) // { // return; // } //#endif #endif // Ç÷¹À̾ »ý¼º if( CAMERA_EXTRA_INFO* camExtra = g_pMap->GetExtraCameraInfo() ) { WzVector wzCameraPos; #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT SetVector(&wzCameraPos, stand_position.x, xGetCharacterCreate()->GetCameraPosition().y, xGetCharacterCreate()->GetCameraPosition().z); #else SetVector(&wzCameraPos, camExtra->WzPos.x, camExtra->WzPos.y, camExtra->WzPos.z); #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT if( Player* pPlayer = (Player*)g_ObjectManager.Add(ObjectKey, PLAYER_OBJECT, class_code, FALSE) ) { m_PosInfoArray[SlotIndex].dwObjectKey = ObjectKey; pPlayer->SetDirection(wzCameraPos, stand_position, TRUE); pPlayer->SetPosition(stand_position); pPlayer->SetAnimation(StrToWzID("N001"), TRUE); pPlayer->SetChaoState(0); pPlayer->SetAttackBeginPlayer(FALSE); pPlayer->SetShowName(TRUE); pPlayer->SetClientChar(CharacterInfo); pPlayer->GetCharInfo()->m_bySlot = SlotIndex; if ( Pet* pPet = static_cast(g_ObjectManager.GetObject(pPlayer->GetPetObjectKey())) ) { //safe_code:Ȥ ¼­¹ö¿¡¼­ À߸øµÈ½½·ÔÀ» ³Ñ°Üº¸³Â´ÂÁö üũ if ( SlotIndex >= (MAX_CHARACTER_LIST_NUM)) { assert(!"ij¸¯½½·Ô Error"); pPet->SetModifyPosition(330.f, 0.6f); } else { const float kDefaultOffest = 0.45f; const float kMaxOffest = 1.0f; float fAngle = 195.f; float fOffset = kDefaultOffest; float bounding_size = 0.0f; WzBoundingVolume* pet_bounding_volume = pPet->GetBoundingVolume(); if (pet_bounding_volume != NULL) { bounding_size = (pet_bounding_volume->m_aabb.m_wvMin.x - pet_bounding_volume->m_aabb.m_wvMax.x) * (pet_bounding_volume->m_aabb.m_wvMin.y - pet_bounding_volume->m_aabb.m_wvMax.y); fOffset += bounding_size; } fOffset = max(kDefaultOffest, fOffset); fOffset = min(1.0f, fOffset); if (pPet->GetPet()->pet_script_ptr_->m_byPpossition != 0) { fAngle = 175.0f; pPet->SetScale(0.8f); } fAngle *= (PI / 180.0f); pPet->SetModifyPosition(fAngle, fOffset); } pPet->SetPetLock(TRUE); } } } } //------------------------------------------------------------------------------ /** */ DWORD CharacterScene::GetSelectCharLevel() { DWORD dwLv=0; Player *pPlayer=(Player *)g_ObjectManager.GetObject(m_dwSelectOid); if(pPlayer) dwLv=pPlayer->GetLevel(); return dwLv; } //------------------------------------------------------------------------------ /** */ BOOL CharacterScene::SendDeleteCharPacket(const char *pString) { CHARLIST_ITR itr = m_CharList.begin(); CharListInfo * pCharListInfo = NULL; nString str=pString; for (; itr != m_CharList.end(); ++itr) { pCharListInfo = static_cast(*itr); if(pCharListInfo->CharacterInfo.m_bySlot==m_dwSelectCharacter) { m_dwSelectCharacter=INVALID_OBJECT_KEY;//¼±ÅÃ ÇØÁ¦ //Todo:ÆÐŶ ³¯¸®ÀÚ. if( GENERALPARAM->IsNet() ) { #ifdef _GS_GSP_DELETE_CHAR_CHK TCHAR szMsg[INTERFACE_STRING_LENGTH] = {0,}; //¿µ¹®:»èÁ¦Ã¼Å© Ű¿ö(delete) g_InterfaceManager.GetInterfaceString(2119,szMsg); nString szlhs= szMsg; //µÑ´Ù ¹®ÀÚ ´ë¼Ò¹®ÀÚ ¸ÂÃçÁÜ szlhs.ToLower(); str.ToLower(); //ºÒÀÏÄ¡ÇÒ°æ¿ì ¸Þ½ÃÁö ¸Þ½ÃÁö Âï¾îÁÖ±â //ÀÏÄ¡ÇÒ°æ¿ì¿¡´Â ¼­¹ö¿¡¼­´Â ¹«Á¶°Ç»èÁ¦ÇÑ´Ù(ÇùÀÇ) if(szlhs != str) { g_InterfaceManager.GetInterfaceString(2120,szMsg); g_InterfaceManager.ShowMessageBox( szMsg , 2000 , NULL, 0); return TRUE; } #endif//_GS_GSP_DELETE_CHAR_CHK if(BIT_CHECK(m_packetStatus,PACKET_STATUS_CHARACTERSCENE_DELCHAR)==FALSE) { BIT_ADD(m_packetStatus,PACKET_STATUS_CHARACTERSCENE_DELCHAR); m_curDelOid=pCharListInfo->CharacterInfo.m_bySlot; // ij¸¯ÅÍ »èÁ¦ ÆÐŶ ³¯¸®±â MSG_CG_CHARINFO_DESTROY_SYN SendPacket; SendPacket.m_byCategory = CG_CHARINFO; SendPacket.m_byProtocol = CG_CHARINFO_DESTROY_SYN; int numString = strlen(pString); numString = min(numString , 10); memset(SendPacket.m_LastSocialSecurityNumber , 0 , sizeof(SendPacket.m_LastSocialSecurityNumber)); for( int i = 0; i < numString; i++ ) { char ch = pString[i]; SendPacket.m_LastSocialSecurityNumber[i] = (int) ch; } SendPacket.m_bySelectedCharSlotIndex=pCharListInfo->CharacterInfo.m_bySlot; if( FALSE == GlobalFunc::SendPacket(CI_GAMESERVERIDX, &SendPacket, sizeof(SendPacket) ) ) { // MSG_CHARINFO_DESTROY_SYN WzColor Color = WzColor_RGBA( 255, 80, 80, 255 ); g_InterfaceManager.ShowMessageBox( _T("MSG_CHARINFO_DESTROY_SYN"), 10000, &Color, 0 ); return FALSE; } } } else//½Ì±ÛÀº Á÷Á¢ Áö¿î´Ù. { DeleteMyChar(pCharListInfo->dwObjectKey); delete pCharListInfo; m_CharList.erase(itr); } break; } } return TRUE; } //------------------------------------------------------------------------------ /** ij¸¯ÅÍ »èÁ¦ */ VOID CharacterScene::DeleteMyChar(DWORD ObjectKey) { if(m_dwSelectOid == ObjectKey) m_dwSelectOid = INVALID_OBJECT_KEY; for(int i=0;iobject_key == ObjectKey ) { m_StatusArray.erase( m_StatusArray.begin() + i ); delete pObjectStatus; break; } } } //------------------------------------------------------------------------------ /** ij¸¯ÅÍ »ý¼º ÆÐŶ ½î±â */ BOOL CharacterScene::SendMakeCharPacket(DWORD classCode,const char *pName) { if(m_CharList.size()>=MAX_CHARACTER_LIST_NUM) { TCHAR szMessage[INTERFACE_STRING_LENGTH]; g_InterfaceManager.GetInterfaceString( eST_CHARACTER_NUMBER_FULL, szMessage, INTERFACE_STRING_LENGTH ); g_InterfaceManager.ShowMessageBox( szMessage, 2000, NULL, 0 ); return FALSE; } // ij¸¯ÅÍ »ý¼º ÆÐŶ if(BIT_CHECK(m_packetStatus,PACKET_STATUS_CHARACTERSCENE_CREATECHAR)==FALSE) { BIT_ADD(m_packetStatus,PACKET_STATUS_CHARACTERSCENE_CREATECHAR); m_SendCharCreatePacket.m_byCategory = CG_CHARINFO; m_SendCharCreatePacket.m_byProtocol = CG_CHARINFO_CREATE_SYN; ClassCodeEx class_code_ex; class_code_ex.class_code = classCode; m_SendCharCreatePacket.m_byClass = static_cast(class_code_ex.class_type); m_SendCharCreatePacket.gender = static_cast(class_code_ex.gender); /* #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_TEMP if (mystic_create_mode_ == true) { m_SendCharCreatePacket.m_byClass = static_cast(eCHAR_MYSTIC); m_SendCharCreatePacket.gender = static_cast(GenderType::kFemale); } #endif //_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_TEMP */ m_SendCharCreatePacket.m_byFace = m_iFaceVariation; m_SendCharCreatePacket.m_byHair = m_iHairVariation; m_SendCharCreatePacket.m_byHeight = m_iHeightVariation; memset(m_SendCharCreatePacket.m_pszCharName,0,sizeof(m_SendCharCreatePacket.m_pszCharName)); StrnCopy(m_SendCharCreatePacket.m_pszCharName,pName,sizeof(m_SendCharCreatePacket.m_pszCharName)); if(GlobalFunc::SendPacket(CI_GAMESERVERIDX, &m_SendCharCreatePacket, sizeof(m_SendCharCreatePacket) )==FALSE) { #if defined( _DEBUG ) // MSG_CG_CHARINFO_CREATE_SYN WzColor Color = WzColor_RGBA( 255, 80, 80, 255 ); g_InterfaceManager.ShowMessageBox( _T("MSG_CG_CHARINFO_CREATE_SYN"), 10000, &Color, 0 ); #endif return FALSE; } } return TRUE; } void CharacterScene::SetViewport() { } //#ifdef _YJ_RENEWAL_CHARACTER_CREATE_SCENE //#else //_YJ_RENEWAL_CHARACTER_CREATE_SCENE #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT #else void CharacterScene::RenderCharacterCreate() { g_pSunRenderer->GetMouseCursorRay( &g_wrMouseRay ); m_pCreateMapUnitDraw->SetPosition(0.0f,0.0f,0.0f); g_pSunRenderer->RenderUnit(m_pCreateMapUnitDraw); RenderCinematicCharacter(); g_pSunRenderer->x_pManagerPostEffect->Apply(); } #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT //#endif //_YJ_RENEWAL_CHARACTER_CREATE_SCENE void CharacterScene::SetCreateCharacterMode(BOOL bMode) { static St_PE_BLUR s_OldBlur; static WzColor s_OldAmbient; static St_FogParameter s_OldFog; m_bCreateCharacter = bMode; static FLOAT fMin, fMax, fFov; if (m_bCreateCharacter) { GlobalFunc::PLAY_BGM(MAP_TYPE_DEFAULT, 11111, eZONETYPE_LOBBY); #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT g_CharSelectScene.ShowSelectCharacter(-1); #else PlayCameraAnimation(GetCreateCharacterPositionAniCode() /*StrToWzID("N001")*/,FALSE); #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT m_bySelectedClass = 0; m_dwInterfaceScroll = 0; m_fCameraRate = 0.0f; m_dwPickedObjectKey = 0; ShowBaseCinematicCharacter(); //GET_DIALOG(IM_CREATE_CHAR_MANAGER::CREATECHAR_CLASS_INFO)->ShowDialog( TRUE ); GET_DIALOG(IM_CREATE_CHAR_MANAGER::CREATECHAR_BOTTOM_DIALOG)->ShowDialog( TRUE ); GET_DIALOG(IM_CREATE_CHAR_MANAGER::CREATECHAR_SELECT)->ShowDialog( TRUE ); g_InterfaceManager.ShowDialog(InterfaceManager::DIALOG_CHARSELECT,FALSE); uiLoginBackTop* login_back_top = GET_CAST_DIALOG(uiLoginBackTop, uiLoginBackTop::kDialog_ID); if (login_back_top != NULL) { login_back_top->ShowInterface(TRUE); login_back_top->SetSceneTitle(189); } fMin = g_Camera.GetNearClip(); fMax = g_Camera.GetFarClip(); fFov = g_Camera.GetFOV(); #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT #else g_Camera.SetProjection(0.1f,200.0f,WZ_PI / 6.0f); #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT s_OldBlur = g_pSunRenderer->x_pManagerPostEffect->GetTechBlur(); St_PE_BLUR blur; blur.m_iBlurCount = 8; blur.m_fSelectHighLight = 0.55f; blur.m_fFinalColorBlend = 0.70f; blur.m_fMinLuminance = 0.32f; blur.m_fOriginalColorBlend = 1.f; blur.m_wcSelectColor = WzColor_RGBA( 255, 231, 157, 255 ); WzColor FogColor = WzColor_RGBA( 100, 99, 55, 255); WzColor AmbientColor = WzColor_RGBA( 159, 137, 96, 255 ); GlobalFunc::PLAY_BGM(1, 11111, (eZONETYPE)0); InitVariation(); #ifdef _KST_CREATECHARACTER_SPRINGCAMERA_ if ( Object* pCamera = g_ObjectManager.GetObject(m_dwCameraObjectKey) ) { g_Camera.InitSpringCameraPosition( pCamera->GetBonePos(34), pCamera->GetBonePos(35) ); g_Camera.UpdateCamera(); // Á÷Á¢ ¾÷µ¥ÀÌÆ® ÇØÁØ´Ù. } #endif #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT #if defined(_NA_006774_20130617_ARRANGE_UNNECESSARY_RESOURCES) SelectClass2* select_class = NULL; uiCreateCharacterMan* create_character_manager_ptr = GET_DIALOG_MANAGER(uiCreateCharacterMan , UIMAN_CREATECHARACTER); if (create_character_manager_ptr) { select_class = create_character_manager_ptr->get_select_class_ptr(); } if (select_class) { #ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE OnSelectedCharacter(eCHAR_WITCHBLADE); select_class->set_current_class_code(eCHAR_WITCHBLADE); #else OnSelectedCharacter(eCHAR_HELLROID); select_class->set_current_class_code(eCHAR_HELLROID); #endif //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE select_class->OnExcute(); } #else SelectClass* select_class = static_cast(GET_DIALOG(IM_CREATE_CHAR_MANAGER::SELECTCHAR_CLASS_DIALOG)); if (select_class) { OnSelectedCharacter(eCHAR_MYSTIC); select_class->SetCurrentClassCode(eCHAR_MYSTIC); select_class->OnExcute(); } #endif // _NA_006774_20130617_ARRANGE_UNNECESSARY_RESOURCES #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT } else { ReleaseCinematicCharacter(); #if !defined(_NA_006774_20130617_ARRANGE_UNNECESSARY_RESOURCES) GET_DIALOG(IM_CREATE_CHAR_MANAGER::CREATECHAR_CLASS_INFO)->ShowDialog( FALSE ); GET_DIALOG(IM_CREATE_CHAR_MANAGER::SELECTCHAR_CLASS_DIALOG)->ShowDialog( FALSE ); #endif // _NA_006774_20130617_ARRANGE_UNNECESSARY_RESOURCES GET_DIALOG(IM_CREATE_CHAR_MANAGER::CREATECHAR_BOTTOM_DIALOG)->ShowDialog( FALSE ); GET_DIALOG(IM_CREATE_CHAR_MANAGER::CUSTOM_DIALOG)->ShowWindow( FALSE ); GET_DIALOG(IM_CREATE_CHAR_MANAGER::CREATECHAR_SELECT)->ShowDialog( FALSE ); GET_DIALOG(IM_CREATE_CHAR_MANAGER::CREATECHAR_ROTATEBUTTON)->ShowDialog( FALSE ); g_InterfaceManager.ShowDialog(InterfaceManager::DIALOG_CHARSELECT,TRUE); uiLoginBackTop* login_back_top = GET_CAST_DIALOG(uiLoginBackTop, uiLoginBackTop::kDialog_ID); if (login_back_top != NULL) { login_back_top->ShowInterface(TRUE); m_dwSelectedObjectKey = 0; } #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT #else g_Camera.SetProjection(fMin, fMax, fFov); #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT if (g_pMap) { GlobalFunc::PLAY_BGM(1, g_pMap->GetCurrentFieldID(), (eZONETYPE)0); } InitVariation(); #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT #ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE OnSelectedCharacter(eCHAR_WITCHBLADE); #else OnSelectedCharacter(eCHAR_HELLROID); #endif // _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE #if !defined(_NA_006774_20130617_ARRANGE_UNNECESSARY_RESOURCES) SelectClass* select_class = static_cast(GET_DIALOG(IM_CREATE_CHAR_MANAGER::SELECTCHAR_CLASS_DIALOG)); if (select_class) { select_class->ShowDialog(FALSE); } #endif // _NA_006774_20130617_ARRANGE_UNNECESSARY_RESOURCES GET_DIALOG(IM_CREATE_CHAR_MANAGER::EXPLAIN_RACE_DIALOG)->ShowDialog(FALSE); GET_DIALOG(IM_CREATE_CHAR_MANAGER::EXPLAIN_CLASS_DIALOG)->ShowDialog(FALSE); #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT } } //#ifdef _YJ_RENEWAL_CHARACTER_CREATE_SCENE //#else //_YJ_RENEWAL_CHARACTER_CREATE_SCENE #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT #else void CharacterScene::ReleaseCreateCharacterResource() { if ( m_pCreateMapUnitDraw) { Func_ContactWzd( CW_DELETE_WZUNITDRAW, m_pCreateMapUnitDraw ); m_pCreateMapUnitDraw = NULL; } if ( m_pCreateMapUnit ) { g_pSunRenderer->x_pManagerWzUnitLoader->DestroyWzUnit(CHARACTER_MAP_RESOURCE_ID); m_pCreateMapUnit = NULL; } } #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT //#endif //_YJ_RENEWAL_CHARACTER_CREATE_SCENE void CharacterScene::SetObjectPosToCinematicMatrix(Object *pObject,int iboneindex) { #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT xGetCharacterCreate()->SetObjectPosToCinematicMatrix( pObject, iboneindex ); return; // // eCHAR_TYPE class_type = eCHAR_NONE; // Character* character = static_cast(pObject); // if (character) // { // class_type = character->GetClass();//character->GetClass(); // // DWORD class_code = eCHAR_NONE; // ClassCodeEx class_code_ex; // class_code_ex.class_type = class_type; // class_code_ex.gender = character->GetGender(); // class_code = class_code_ex.class_code; // m_character.x = GetCharacterX(GetRace(class_code)); // m_character.y = GetCharacterY(GetRace(class_code)); // m_camera.x = GetCameraX(GetRace(class_code)); // m_target.x = m_camera.x; // m_zoom = 0.0f; // } // WzVector vPos = m_character; #else WzMatrix matBers = GetCinematicBoneMatrix(iboneindex); WzVector vPos; vPos.x = matBers._41; vPos.y = matBers._42; vPos.z = matBers._43; WzVector vAngle; vAngle.x = matBers._11; vAngle.y = matBers._12; vAngle.z = matBers._13; float fAngle = Math_GetAngleFromVector(&vAngle); if( pObject ) { pObject->SetPosition( vPos ); //#ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT // pObject->SetDirection(m_camera, vPos); // //pObject->SetAnimation( StrToWzID("N001"), TRUE ); //#else pObject->SetAngle( fAngle,TRUE ); pObject->SetAnimation( StrToWzID("N203"), TRUE ); //#endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT } #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT } SCSlotContainer * CharacterScene::GetEquipContainer( DWORD objectkey ) { Player * pPlayer = (Player *)g_ObjectManager.GetObject( objectkey ); if( pPlayer == NULL ) return NULL; return pPlayer->GetSlotContainer( SI_EQUIPMENT ); } void CharacterScene::ShowCharacterSelectSceneUI() { #ifdef _JP_20110222_INGAME_CHARNAME_CHANGE uiCharacterRenameDialog* rename_dialog = GET_CAST_DIALOG(uiCharacterRenameDialog, IM_CHARACTERSELECT_MANAGER::CHARACTER_SELECT_RENAME); if ((NeedRenameProcess() == true) && (rename_dialog != NULL)) { //¼­ ÀÖ´Â Äɸ¯ÅÍ ¼û±â±â CHARLIST_ITR char_list_itr = m_CharList.begin(); CharListInfo * char_list_info = NULL; for (; char_list_itr != m_CharList.end(); ++char_list_itr) { char_list_info = static_cast(*char_list_itr); Player* character_object = static_cast(g_ObjectManager.GetObject(char_list_info->dwObjectKey)); character_object->SetShow(false); Pet* pet_object = NULL; if(character_object->IsPetReturn()) { pet_object = (Pet*) g_ObjectManager.GetObject(character_object->GetPetObjectKey()); if(pet_object) { pet_object->SetStatePetHide(_HIDE_SKILL_INFO::ALL_HIDE); } } } // À̸§ º¯°æ °ü·Ã UI Ãâ·Â rename_dialog->ShowInterface(TRUE); rename_dialog->RefreshNeedRenameList(); g_InterfaceManager.ShowWindow(InterfaceManager::DIALOG_CHARSELECT,FALSE); uiLoginBackTop* login_back_top = GET_CAST_DIALOG(uiLoginBackTop, uiLoginBackTop::kDialog_ID); if (login_back_top != NULL) { login_back_top->ShowInterface(FALSE); } } else #endif //_JP_20110222_INGAME_CHARNAME_CHANGE { // ij¸¯ÅÍ ¼±Åà °ü·Ã gui º¸À̱â g_InterfaceManager.ShowWindow(InterfaceManager::DIALOG_CHARSELECT,TRUE); uiLoginBackTop* login_back_top = GET_CAST_DIALOG(uiLoginBackTop, uiLoginBackTop::kDialog_ID); if (login_back_top != NULL) { login_back_top->ShowInterface(TRUE); } } } void CharacterScene::AddCinematicCharacter(DWORD class_code, DWORD object_key, int bone_index_for_position) { Player* cinematic_character = static_cast(g_ObjectManager.Add(object_key, PLAYER_OBJECT, class_code, FALSE)); cinematic_character->RefreshAppearRender(); //#ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT //#else SetObjectPosToCinematicMatrix(cinematic_character, bone_index_for_position); //#endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT } void CharacterScene::ProcessLoadCharacter() { const size_t kNumOfCinematicCharacter = (kTempClassTypeMax - 1) * 2; if (m_bCreateCharacter == TRUE) { return; } Object* load_character = NULL; size_t num_of_loaded_character = 0; size_t num_of_character = 0; CastDialog* cast_dialog = static_cast(g_InterfaceManager.GetDialog(InterfaceManager::DIALOG_CASTING)); // ÀÚ½ÅÀÇ Ä³¸¯ÅÍ ·Îµå»óÅ üũ if (is_loaded_my_character_ == false) { // üũ ij¸¯ÅÍ ·Îµå»óÅ num_of_character = m_CharList.size(); CHARLIST_ITR char_list_itr = m_CharList.begin(); CharListInfo * char_list_info = NULL; for ( ; char_list_itr != m_CharList.end(); ++char_list_itr) { char_list_info = static_cast(*char_list_itr); load_character = g_ObjectManager.GetObject(char_list_info->dwObjectKey); if ((load_character != NULL) && (load_character->IsCompletelyFullLoaded() == TRUE)) { num_of_loaded_character++; } else { #if defined(_DEBUG) || defined(_GAMECLIENT_VER) if( AutoTestManagerEx::Instance()->IsAutoLogin() == true ) { // ·ÎµåµÈ°ÍÀ¸·Î Àû¿ë ++num_of_loaded_character; } //#ifdef _KIKI_AUTOTEST // if(AutoTestManager::Instance()->IsSkipLobbyLoading()) // { // // ·ÎµåµÈ°ÍÀ¸·Î Àû¿ë // ++num_of_loaded_character; // } //#endif #endif } } if (num_of_loaded_character >= num_of_character) { ShowCharacterSelectSceneUI(); is_loaded_my_character_ = true; } } else { // ½Ã³×¸¶Æ½Ä³¸¯ÅÍ ·Îµå»óÅ üũ for (int index = 0; index < kNumOfCinematicCharacter; ++index) { load_character = g_ObjectManager.GetObject(CHARACTERSCENE::kBaseCinematicCharacter[index]); if (load_character == NULL) { continue; } if (load_character->IsCompletelyFullLoaded() == TRUE) { num_of_loaded_character++; } num_of_character++; } if ((num_of_character > 0) && (num_of_loaded_character >= num_of_character) && (IsLoadedCreateRoom() == true)) { num_of_character = 0; g_InterfaceManager.UnLockDlgs(); g_CharSelectScene.SetCreateCharacterMode(TRUE); } } // ·Îµù »óÅ¿¡ µû¸¥ °ÔÀÌÁö Ãâ·Â if (cast_dialog != NULL) { if (num_of_character > 0) { cast_dialog->ShowWindow(TRUE); cast_dialog->SetGage(100.f * num_of_loaded_character / num_of_character); } else { if (cast_dialog->IsVisible() == TRUE) { cast_dialog->ShowWindow(FALSE); #if defined(_DEBUG) || defined(_GAMECLIENT_VER) if( AutoTestManagerEx::Instance()->IsAutoLogin() == true ) { AutoTestManagerEx::Instance()->RunStartGame(); } #endif } } } } bool CharacterScene::IsLoadedCreateRoom() { #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT #else if (m_pCreateMapUnitDraw == NULL) { return false; } CWzUnit* pUnit = m_pCreateMapUnitDraw->GetWzUnit(); if ((pUnit == NULL) || (pUnit->GetLoadState() != eLOAD_FULL)) { return FALSE; } #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT return true; } void CharacterScene::MakeCinematicCharacter() { #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT xGetCharacterCreate()->MakeCinematicCharacter(); #else // 10°³ÀÇ Ä³¸¯Å͸¦ »ý¼º const int kBoneIndexForCinematic[kTempClassTypeMax - 1] = {2, 3, 38, 33, 4}; DWORD object_key = CHARACTERSCENE::BERSERKER; eCHAR_TYPE class_Image_code = eCHAR_NONE; Player* cinematic_character = NULL; ClassCodeEx class_code_ex; for (BYTE class_type = eCHAR_BERSERKER; class_type < kTempClassTypeMax; ++class_type) { // ³²¼º class_code_ex.class_type = class_type; class_code_ex.gender = GenderType::kMale; class_Image_code = ResourceCode::GetImageClassType( static_cast(class_code_ex.class_type), static_cast(class_code_ex.gender)); AddCinematicCharacter(class_code_ex.class_code, object_key++, kBoneIndexForCinematic[class_Image_code - 1]); //¿©¼º class_code_ex.class_type = class_type; class_code_ex.gender = GenderType::kFemale; class_Image_code = ResourceCode::GetImageClassType( static_cast(class_code_ex.class_type), static_cast(class_code_ex.gender)); AddCinematicCharacter(class_code_ex.class_code, object_key++, kBoneIndexForCinematic[class_Image_code - 1]); } DWORD dwMonsterCode = 2301; #ifdef __CN_CREATE_BLOCK_SHADOW dwMonsterCode = 2301; #endif//__CN_CREATE_BLOCK_SHADOW(Áß±¹½¦µµ¿ì»ý¼º¸·±â:¿äû(ÃßÈÄÁ¦°Å)) m_CustomCharValue[0].fYaw = 6.0450134f; m_CustomCharValue[0].fPitch = 0.15635738f; m_CustomCharValue[0].fDis = 2.7520750f; m_CustomCharValue[0].fMinDis = 2.7520750f; m_CustomCharValue[0].fMaxDis = 6.0f; m_CustomCharValue[1].fYaw = 5.8756204f; m_CustomCharValue[1].fPitch = 0.017406138f; m_CustomCharValue[1].fDis = 1.9037653f; m_CustomCharValue[1].fMinDis = 1.9037653f; m_CustomCharValue[1].fMaxDis = 6.0f; m_CustomCharValue[2].fYaw = 0.019497f; m_CustomCharValue[2].fPitch = -0.158528f; m_CustomCharValue[2].fDis = 1.8483721f; m_CustomCharValue[2].fMinDis = 1.8483721f; m_CustomCharValue[2].fMaxDis = 6.0f; m_CustomCharValue[3].fYaw = 6.069417f; m_CustomCharValue[3].fPitch = -0.058915f; m_CustomCharValue[3].fDis = 1.8483721f; m_CustomCharValue[3].fMinDis = 1.8483721f; m_CustomCharValue[3].fMaxDis = 6.0f; m_CustomCharValue[4].fYaw = 5.9076447f; m_CustomCharValue[4].fPitch = -0.089062095f; m_CustomCharValue[4].fDis = 1.8467708f; m_CustomCharValue[4].fMinDis = 1.8467708f; m_CustomCharValue[4].fMaxDis = 5.24f; #endif //_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT } void CharacterScene::RenderCinematicCharacter() { //Ä«¸Þ¶ó À̵¿ÁßÀ̾ƴϰųª ¼±ÅõÈij¸¯ÀÌ ¾Æ´Ñ°æ¿ì ÇÇÅ·½Ç·ç¿§ ±×¸®±â if ((m_bySelectedClass == FALSE) && (IsCameraMoving() == FALSE)) { Object* picked_obejct = g_ObjectManager.GetObject(m_dwPickedObjectKey); if (picked_obejct) { picked_obejct->RenderOutline(WzColor_RGBA(255,255,255,100), 0.01f); } Object* selected_obejct = g_ObjectManager.GetObject(create_selected_character_object_key_); if (selected_obejct && picked_obejct != selected_obejct) { selected_obejct->RenderOutline(WzColor_RGBA(235,192,38,100), 0.013f); } } Object* object = NULL; // Player ±×¸®±â for (int object_key = CHARACTERSCENE::BERSERKER; object_key < CHARACTERSCENE::PLAYER_LIST; ++object_key) { object = g_ObjectManager.GetObject(object_key); if (object != NULL) { object->Render(); } } } #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT #else void CharacterScene::PlayCameraAnimation(WzID anim,BOOL bLoop) { Object *pCamera = g_ObjectManager.GetObject(m_dwCameraObjectKey); if (pCamera) { pCamera->SetAnimation(anim,bLoop); pCamera->ProcessAnimation(0); pCamera->AnimateUnit(); m_fCameraRate = 0.0f; } } #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT WzMatrix CharacterScene::GetCinematicBoneMatrix(int index) { WzMatrix mat; Object *pCamera = g_ObjectManager.GetObject(m_dwCameraObjectKey); if (pCamera) { mat = pCamera->GetBoneMatrix(index); } return mat; } eCHAR_TYPE CharacterScene::GetRace(DWORD code) { eCHAR_TYPE class_type = eCHAR_NONE; ClassCodeEx class_code; class_code.class_code = code; switch (class_code.class_type) { case eCHAR_BERSERKER: if (class_code.gender== GenderType::kMale) { class_type = eCHAR_BERSERKER; } else { class_type = eCHAR_VALKYRIE; } break; case eCHAR_DRAGON: if (class_code.gender == GenderType::kMale) { class_type = eCHAR_DRAGON; } else { class_type = eCHAR_VALKYRIE; } break; case eCHAR_SHADOW: if (class_code.gender == GenderType::kMale) { class_type = eCHAR_SHADOW; } else { class_type = eCHAR_ELEMENTALIST; } break; case eCHAR_VALKYRIE: if (class_code.gender == GenderType::kMale) { class_type = eCHAR_DRAGON; } else { class_type = eCHAR_VALKYRIE; } break; case eCHAR_ELEMENTALIST: if (class_code.gender == GenderType::kMale) { class_type = eCHAR_SHADOW; } else { class_type = eCHAR_ELEMENTALIST; } break; #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT case eCHAR_MYSTIC: /*if (class_code.gender == GenderType::kMale) { class_type = eCHAR_MYSTIC; } else*/ { class_type = eCHAR_MYSTIC; } break; #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT case eCHAR_HELLROID: { //_NA_000000_20130812_NEW_CHARACTER_HELLROID class_type = eCHAR_HELLROID; } break; case eCHAR_WITCHBLADE: { //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE class_type = eCHAR_WITCHBLADE; } break; } return class_type; } void CharacterScene::ProcessCreateCharacterMouse() { float fLength = 999999.9f; float fT = 0.0f; Player *pSelected = NULL; WzBoundingVolume* pBV = NULL; Wz2DLine line_2d; WzVector temp_vector; eCHAR_TYPE class_type = eCHAR_NONE; for (int a = 0; a < CHARACTERSCENE::MAX_CINEMATIC_CHARACTER; ++a) { DWORD character_object_key = CHARACTERSCENE::kBaseCinematicCharacter[a]; Player *pPlayer = (Player *)g_ObjectManager.GetObject(character_object_key); if (pPlayer && pPlayer->GetShow()) { if (pPlayer->GetNumPickingBoundingVolume()) { pBV = pPlayer->GetPickingBoundingVolume(0); } else { pBV = pPlayer->GetBoundingVolume(); } if (pBV == NULL) { continue; } WORD wResult = Intersect_Ray_Bv( &g_wrMouseRay, pBV, &fT ); if (NTCT_OUTSIDE != wResult) { // ¿ÍÀ̵å¸ðµå¿¡¼­ ¹ß۸®ÀÇ ¹Ù¿îµù¹Ú½º°¡ ÁÂ/¿ìÀÇ ¼¨µµ¿ì/¿¤¸®ÀÇ ¹Ù¿îµù ¹Ú½º¿¡ °¡·ÁÁ® ÇÇÅ·ÀÌ ¾ÈµÊ // ¹Ù¿îµù º¼·ý°ú ·¹ÀÌÀÇ Ãæµ¹Á¡ÀÌ ¾Æ´Ñ ¹Ù¿îµù º¼·ýÀÇ ÁßÁ¡°ú ·¹ÀÌ¿ÍÀÇ °Å¸®·Î ÆÇ´ÜÇϵµ·Ï ¼öÁ¤ temp_vector = g_wrMouseRay.m_wvOrigin + g_wrMouseRay.m_wvDirection; As2D_GetLine(&line_2d, &g_wrMouseRay.m_wvOrigin, &temp_vector); WzVector temp_vector = (pBV->m_aabb.m_wvMin + pBV->m_aabb.m_wvMax) * 0.5; fT = As2D_Distance_Line_Vertex(&line_2d, temp_vector); if (fT <= fLength) { fLength = fT; pSelected = pPlayer; } } } } if (pSelected) { m_dwPickedObjectKey = pSelected->GetObjectKey(); } else { m_dwPickedObjectKey = 0; } if (IsCameraMoving()) { return; } if (g_Input.GetState( MOUSE_LBUTTON, KS_MOUSE_UP )) { if (!m_bySelectedClass) { if (pSelected) { if (m_dwSelectedObjectKey != m_dwPickedObjectKey) { m_dwSelectedObjectKey = m_dwPickedObjectKey; } else { return; //°°Àº ij¸¯ÅÍ¸é ¼±Åà UI ¿ÀÇ ¹× ¾Ö´Ï¸ÞÀÌ¼Ç ¾ÈÇÔ } class_type = GetRace(pSelected->GetClassCode()); OnSelectedCharacter(class_type); Object* pObject = g_ObjectManager.GetObject(m_dwSelectedObjectKey); if (pObject) { m_fOldAngle = pObject->GetAngle(); } GET_CAST_DIALOG( CreateCharCustomDialog, IM_CREATE_CHAR_MANAGER::CUSTOM_DIALOG )->LoadParts(m_dwSelectedObjectKey); } } } SelectedCharacterRotate(); } void CharacterScene::SelectedCharacterRotate( void ) { if (!m_bySelectedClass) { return; } LPDIMOUSESTATE2 pMouserState = g_Input.GetMouseBuffer(); if (g_Input.m_bUIMouseInput) { return; } CreateCharRotateButton* pDlg = GET_CAST_DIALOG(CreateCharRotateButton, IM_CREATE_CHAR_MANAGER::CREATECHAR_ROTATEBUTTON); if (pDlg == NULL || pDlg->GetRotateType() != CreateCharRotateButton::NONE_BUTTON) { return; } static BOOL bLbuttonDown = FALSE; const int kMouseButton = MOUSE_RBUTTON; if (g_Input.GetState(kMouseButton, KS_MOUSE_DOWN)) { bLbuttonDown = TRUE; } if (g_Input.GetState(kMouseButton, KS_MOUSE_UP)) { bLbuttonDown = FALSE; } if (bLbuttonDown == TRUE) { if (g_Input.GetState( kMouseButton, KS_MOUSE_KEY)) { float rotate_angle = static_cast(pMouserState->lX) * 0.1f; if (rotate_angle < -0.1f) { rotate_angle = -0.1f; } if (rotate_angle > 0.1f) { rotate_angle = 0.1f; } RotateCinematicCharacter(rotate_angle); } } } void CharacterScene::OnSelectedCharacter(eCHAR_TYPE class_code) { // ¼±ÅÃµÈ ¿ÜÇü¿¡ µû¸¥ ij¸¯ÅÍ ¿ÀºêÁ§Æ®Å°¸¦ ÄÁÅ×À̳ʿ¡ ´ã´Â´Ù. image_class_object_key_list_.clear(); switch(class_code) { case eCHAR_BERSERKER: { if (IsMakeCharacterBetakey(eCHAR_BERSERKER, eCHAR_BERSERKER)) { image_class_object_key_list_.push_back(CHARACTERSCENE::BERSERKER); } } break; case eCHAR_DRAGON: { if (IsMakeCharacterBetakey(eCHAR_DRAGON, eCHAR_DRAGON)) { image_class_object_key_list_.push_back(CHARACTERSCENE::DRAGON); } if (IsMakeCharacterBetakey(eCHAR_VALKYRIE, eCHAR_DRAGON)) { image_class_object_key_list_.push_back(CHARACTERSCENE::VALKYRIE); } } break; case eCHAR_SHADOW: { if (IsMakeCharacterBetakey(eCHAR_SHADOW, eCHAR_SHADOW)) { image_class_object_key_list_.push_back(CHARACTERSCENE::SHADOW); } if (IsMakeCharacterBetakey(eCHAR_ELEMENTALIST, eCHAR_SHADOW)) { image_class_object_key_list_.push_back(CHARACTERSCENE::ELEMENTALIST); } } break; case eCHAR_VALKYRIE: { if (IsMakeCharacterBetakey(eCHAR_DRAGON, eCHAR_VALKYRIE)) { image_class_object_key_list_.push_back(CHARACTERSCENE::DRAGON_W); } if (IsMakeCharacterBetakey(eCHAR_VALKYRIE, eCHAR_VALKYRIE)) { image_class_object_key_list_.push_back(CHARACTERSCENE::VALKYRIE_W); } if (IsMakeCharacterBetakey(eCHAR_BERSERKER, eCHAR_VALKYRIE)) { image_class_object_key_list_.push_back(CHARACTERSCENE::BERSERKER_W); } } break; case eCHAR_MAGICIAN: { if (IsMakeCharacterBetakey(eCHAR_SHADOW, eCHAR_MAGICIAN)) { image_class_object_key_list_.push_back(CHARACTERSCENE::SHADOW_W); } if (IsMakeCharacterBetakey(eCHAR_ELEMENTALIST, eCHAR_MAGICIAN)) { image_class_object_key_list_.push_back(CHARACTERSCENE::ELEMENTALIST_W); } } break; #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT case eCHAR_MYSTIC: { if (IsMakeCharacterBetakey(eCHAR_MYSTIC, eCHAR_MYSTIC)) { image_class_object_key_list_.push_back(CHARACTERSCENE::MYSTIC_W); } /* if (IsMakeCharacterBetakey(eCHAR_MYSTIC, eCHAR_MYSTIC)) { image_class_object_key_list_.push_back(CHARACTERSCENE::MYSTIC); } */ } break; #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT #ifdef _NA_000000_20130812_NEW_CHARACTER_HELLROID case eCHAR_HELLROID: { if (IsMakeCharacterBetakey(eCHAR_HELLROID, eCHAR_HELLROID)) { image_class_object_key_list_.push_back(CHARACTERSCENE::HELLROID); } /* if (IsMakeCharacterBetakey(eCHAR_MYSTIC, eCHAR_MYSTIC)) { image_class_object_key_list_.push_back(CHARACTERSCENE::MYSTIC); } */ } break; #endif //_NA_000000_20130812_NEW_CHARACTER_HELLROID #ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE case eCHAR_WITCHBLADE: { if (IsMakeCharacterBetakey(eCHAR_WITCHBLADE, eCHAR_WITCHBLADE)) { image_class_object_key_list_.push_back(CHARACTERSCENE::WITCHBLADE_W); } } break; #endif //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE } #if defined(_NA_006774_20130617_ARRANGE_UNNECESSARY_RESOURCES) SelectClass2* ui_select_class = NULL; uiCreateCharacterMan* create_character_manager_ptr = GET_DIALOG_MANAGER(uiCreateCharacterMan , UIMAN_CREATECHARACTER); if (create_character_manager_ptr) { ui_select_class = create_character_manager_ptr->get_select_class_ptr(); } if (ui_select_class) { ui_select_class->set_current_class_type(class_code); } #else SelectClass* ui_select_class = static_cast(GET_DIALOG(IM_CREATE_CHAR_MANAGER::SELECTCHAR_CLASS_DIALOG)); if (ui_select_class) { ui_select_class->ShowDialog(FALSE); #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT ui_select_class->SetCurrentClassType(class_code); #else ui_select_class->SetCurrentClassCode(class_code); #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT ui_select_class->ShowInterface(TRUE); } #endif // _NA_006774_20130617_ARRANGE_UNNECESSARY_RESOURCES } void CharacterScene::OnClickedChar(BYTE byClassCode, BYTE byModelCode) { bool is_wide = (g_pApplication->IsWideModeFlag() == TRUE); WzID ani_code = 0; create_selected_character_object_key_ = 0; m_bySelectedModel = byModelCode; switch(byModelCode) { case eCHAR_BERSERKER: ani_code = is_wide ? StrToWzID("N002") : StrToWzID("N102"); break; case eCHAR_DRAGON: ani_code = is_wide ? StrToWzID("N004") : StrToWzID("N104"); break; case eCHAR_VALKYRIE: ani_code = is_wide ? StrToWzID("N008") : StrToWzID("N108"); break; case eCHAR_MAGICIAN: ani_code = is_wide ? StrToWzID("N006") : StrToWzID("N106"); break; case eCHAR_SHADOW: ani_code = is_wide ? StrToWzID("N010") : StrToWzID("N110"); break; #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT case eCHAR_MYSTIC: ani_code = is_wide ? StrToWzID("N010") : StrToWzID("N110"); break; #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT #ifdef _NA_000000_20130812_NEW_CHARACTER_HELLROID case eCHAR_HELLROID: ani_code = is_wide ? StrToWzID("N010") : StrToWzID("N110"); break; #endif //_NA_000000_20130812_NEW_CHARACTER_HELLROID #ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE case eCHAR_WITCHBLADE: ani_code = is_wide ? StrToWzID("N010") : StrToWzID("N110"); break; #endif //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE } #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT #else PlayCameraAnimation(ani_code, FALSE); #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT m_bySelectedClass = byClassCode; CreateCharBottomDialog* pBottomDlg = GET_CAST_DIALOG(CreateCharBottomDialog, IM_CREATE_CHAR_MANAGER::CREATECHAR_BOTTOM_DIALOG); CreateCharCustomDialog* pCustomDlg = GET_CAST_DIALOG(CreateCharCustomDialog, IM_CREATE_CHAR_MANAGER::CUSTOM_DIALOG); pCustomDlg->InitText(); if (GET_DIALOG( IM_CREATE_CHAR_MANAGER::CREATECHAR_SELECT )->IsVisible()) { GET_DIALOG( IM_CREATE_CHAR_MANAGER::CREATECHAR_SELECT )->ShowDialog( FALSE ); #if !defined(_NA_006774_20130617_ARRANGE_UNNECESSARY_RESOURCES) GET_DIALOG(IM_CREATE_CHAR_MANAGER::CREATECHAR_CLASS_INFO)->ShowDialog( FALSE ); GET_DIALOG(IM_CREATE_CHAR_MANAGER::SELECTCHAR_CLASS_DIALOG)->ShowDialog( FALSE ); #endif // _NA_006774_20130617_ARRANGE_UNNECESSARY_RESOURCES } InitVariation(); SetCinematicCharShow( FALSE ); } BOOL CharacterScene::IsCameraMoving() { if (m_fCameraRate >= 100.0f) { return FALSE; } else { return TRUE; } } void CharacterScene::SetCharOldAngle( void ) { Object * obj = g_ObjectManager.GetObject( m_dwSelectedObjectKey ); if( obj ) { obj->SetAngle( m_fOldAngle, TRUE ); } } void CharacterScene::OnCancelCreateCharacter() { if (m_bySelectedClass) { SetCinematicCharShow( TRUE ); m_dwSelectedObjectKey = 0; // ±âº»ÇüÀ¸·Î µ¹·ÁÁØ´Ù. SetBackCinematicCharacter(); bool is_wide = (g_pApplication->IsWideModeFlag() == TRUE); WzID ani_code = 0; switch(m_bySelectedModel) { case eCHAR_BERSERKER: ani_code = is_wide ? StrToWzID("N003") : StrToWzID("N103"); break; case eCHAR_DRAGON: ani_code = is_wide ? StrToWzID("N005") : StrToWzID("N105"); break; case eCHAR_VALKYRIE: ani_code = is_wide ? StrToWzID("N009") : StrToWzID("N109"); break; case eCHAR_MAGICIAN: ani_code = is_wide ? StrToWzID("N007") : StrToWzID("N107"); break; case eCHAR_SHADOW: ani_code = is_wide ? StrToWzID("N011") : StrToWzID("N111"); break; } #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT #else PlayCameraAnimation(ani_code, FALSE); #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT m_bySelectedClass = 0; m_dwInterfaceScroll = 0; InitVariation(); } } void CharacterScene::ProcessScrollInterface(DWORD dwTick) { CreateCharBottomDialog* pBottomDlg = GET_CAST_DIALOG(CreateCharBottomDialog, IM_CREATE_CHAR_MANAGER::CREATECHAR_BOTTOM_DIALOG); if (m_bySelectedClass) { if (!IsCameraMoving()) { m_dwInterfaceScroll += dwTick; m_dwInterfaceScroll = min(INTERFACE_SCROLL_TIME,m_dwInterfaceScroll); } } else { if (m_dwInterfaceScroll <= dwTick) { m_dwInterfaceScroll = 0; } else { m_dwInterfaceScroll -= dwTick; } } float fRate = (float)m_dwInterfaceScroll / (float)INTERFACE_SCROLL_TIME; fRate = 1.0f; float fScreenXSize; float fScreenYSize; POINT pt = g_pApplication->Get2DModeMapping(); fScreenXSize = (float)pt.x; fScreenYSize = (float)pt.y; float fLeft = LerfFloat(fScreenXSize,fScreenXSize - LEFT_INTERFACE_SIZE,fRate); float fBottom = LerfFloat(fScreenYSize,fScreenYSize - BOTTOM_INTERFACE_SIZE,fRate); if (m_dwInterfaceScroll == INTERFACE_SCROLL_TIME) { if (!(GET_DIALOG( IM_CREATE_CHAR_MANAGER::CREATECHAR_BOTTOM_DIALOG)->IsVisible())) { GET_DIALOG(IM_CREATE_CHAR_MANAGER::CREATECHAR_BOTTOM_DIALOG)->ShowDialog(TRUE); GET_DIALOG( IM_CREATE_CHAR_MANAGER::CUSTOM_DIALOG)->ShowWindow(TRUE); #if !defined(_NA_006774_20130617_ARRANGE_UNNECESSARY_RESOURCES) GET_DIALOG(IM_CREATE_CHAR_MANAGER::CREATECHAR_CLASS_INFO)->ShowDialog( FALSE ); GET_DIALOG(IM_CREATE_CHAR_MANAGER::SELECTCHAR_CLASS_DIALOG)->ShowDialog( FALSE ); #endif // _NA_006774_20130617_ARRANGE_UNNECESSARY_RESOURCES g_Camera.SetCameraDistance(1.0f); GET_DIALOG(IM_CREATE_CHAR_MANAGER::CREATECHAR_ROTATEBUTTON)->ShowDialog(TRUE); GET_DIALOG(IM_CREATE_CHAR_MANAGER::CREATECHAR_SELECT)->ShowDialog(FALSE); #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT GET_DIALOG(IM_CREATE_CHAR_MANAGER::EXPLAIN_RACE_DIALOG)->ShowDialog(TRUE); GET_DIALOG(IM_CREATE_CHAR_MANAGER::EXPLAIN_CLASS_DIALOG)->ShowDialog(TRUE); #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT CreateCharCustomDialog* createcharcustomdialog_ptr = GET_CAST_DIALOG(CreateCharCustomDialog, IM_CREATE_CHAR_MANAGER::CUSTOM_DIALOG); if (createcharcustomdialog_ptr != NULL) { createcharcustomdialog_ptr->first_setting_reset(); } } } else { if (GET_DIALOG(IM_CREATE_CHAR_MANAGER::CREATECHAR_BOTTOM_DIALOG)->IsVisible()) { GET_DIALOG(IM_CREATE_CHAR_MANAGER::CREATECHAR_BOTTOM_DIALOG)->ShowDialog(FALSE); GET_DIALOG(IM_CREATE_CHAR_MANAGER::CUSTOM_DIALOG)->ShowWindow(FALSE); GET_DIALOG(IM_CREATE_CHAR_MANAGER::CREATECHAR_ROTATEBUTTON)->ShowDialog(FALSE); #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT GET_DIALOG(IM_CREATE_CHAR_MANAGER::EXPLAIN_RACE_DIALOG)->ShowDialog(FALSE); GET_DIALOG(IM_CREATE_CHAR_MANAGER::EXPLAIN_CLASS_DIALOG)->ShowDialog(FALSE); #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT } if (!IsCameraMoving()) { if (!(GET_DIALOG(IM_CREATE_CHAR_MANAGER::CREATECHAR_SELECT)->IsVisible())) { GET_DIALOG(IM_CREATE_CHAR_MANAGER::CREATECHAR_SELECT)->ShowDialog(TRUE); } } } } void CharacterScene::ReleaseCinematicCharacter() { // Player Á¦°Å for (int object_key = CHARACTERSCENE::BERSERKER; object_key < CHARACTERSCENE::PLAYER_LIST; ++object_key) { g_ObjectManager.Delete(object_key); } } void CharacterScene::OnBackCreateCharacter() { } DWORD CharacterScene::GetSelectedClass() { return m_bySelectedClass; } BOOL CharacterScene::PostInterfaceRender( DWORD dwTick ) { if (m_bCreateCharacter) { g_pSunRenderer->Set2DMode(TRUE); g_pSunRenderer->x_pManagerTextOut->StartToUseFont("ti35"); int iClassName = 0; if(m_bySelectedClass==eCHAR_BERSERKER) { iClassName = eST_CHARACTER_CLASS_NAME_BERSERKER; } else if(m_bySelectedClass==eCHAR_DRAGON) { iClassName = eST_CHARACTER_CLASS_NAME_DRAGON; } else if(m_bySelectedClass==eCHAR_VALKYRIE) { iClassName = eST_CHARACTER_CLASS_NAME_VALKYRIE; } else if(m_bySelectedClass==eCHAR_MAGICIAN) { iClassName = eST_CHARACTER_CLASS_NAME_MAGICIAN; } else if(m_bySelectedClass==eCHAR_SHADOW) { iClassName = eST_CHARACTER_CLASS_NAME_SHADOW; } else if(m_bySelectedClass==eCHAR_MYSTIC) // _NA_004965_20120613_NEW_CHARACTER_MYSTIC { iClassName = eST_CHARACTER_CLASS_NAME_MYSTIC; } else if(m_bySelectedClass==eCHAR_HELLROID) //_NA_000000_20130812_NEW_CHARACTER_HELLROID { iClassName = eST_CHARACTER_CLASS_NAME_HELLROID; } else { iClassName = eST_CHARACTER_CREATE; } TCHAR szCharName[INTERFACE_STRING_LENGTH]; // ij¸¯ÅÍ Å¬·¡½º À̸§ ¾ò¾î¿À±â g_InterfaceManager.GetInterfaceString( iClassName, szCharName, INTERFACE_STRING_LENGTH ); RECT rc; rc.left = 34; rc.top = 28; rc.right = 375; rc.bottom = 150; BOOL is_show = FALSE; if (m_dwInterfaceScroll == INTERFACE_SCROLL_TIME && m_bySelectedClass ) { is_show = TRUE; } else if (!m_bySelectedClass && !IsCameraMoving()) { is_show = TRUE; } uiLoginBackTop* login_back_top = GET_CAST_DIALOG(uiLoginBackTop, uiLoginBackTop::kDialog_ID); if (login_back_top != NULL && (login_back_top->IsVisibleWindow() != is_show)) { login_back_top->ShowInterface(is_show); if (m_bySelectedClass == 0) { login_back_top->SetSceneTitle(iClassName); } else { login_back_top->SetSceneTitleClassName(m_bySelectedClass, iClassName); } } g_pSunRenderer->x_pManagerTextOut->EndUseFont(); g_pSunRenderer->Set2DMode(FALSE); } return TRUE; } void CharacterScene::InitVariation() { m_iFaceVariation = 1; m_iHairVariation = 1; m_iHeightVariation = 2; } Player *CharacterScene::GetCinematicCharacter(BYTE byClass) { Player *pRet = NULL; switch(byClass) { case eCHAR_BERSERKER: pRet = (Player *)g_ObjectManager.GetObject(CHARACTERSCENE::BERSERKER); break; case eCHAR_VALKYRIE: pRet = (Player *)g_ObjectManager.GetObject(CHARACTERSCENE::VALKYRIE); break; case eCHAR_DRAGON: pRet = (Player *)g_ObjectManager.GetObject(CHARACTERSCENE::DRAGON); break; case eCHAR_ELEMENTALIST: pRet = (Player *)g_ObjectManager.GetObject(CHARACTERSCENE::ELEMENTALIST); break; case eCHAR_SHADOW: pRet = (Player *)g_ObjectManager.GetObject(CHARACTERSCENE::SHADOW); break; #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT case eCHAR_MYSTIC: pRet = (Player *)g_ObjectManager.GetObject(CHARACTERSCENE::MYSTIC); break; #endif //_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT } return pRet; } void CharacterScene::OnClickChangeHeight(BOOL bFoward) { if (!m_bySelectedClass) { return; } if (bFoward) { m_iHeightVariation++; } else { m_iHeightVariation--; } if (m_iHeightVariation >= MAX_HEIGHT_VARIATION) { m_iHeightVariation = 0; } else if ( m_iHeightVariation < 0) { m_iHeightVariation = MAX_HEIGHT_VARIATION - 1; } Player *pPlayer = static_cast(g_ObjectManager.GetObject(GetSelectedObjectKey())); if (pPlayer) { pPlayer->SetHeightVariation(m_iHeightVariation); pPlayer->RefreshAppearRender(); } } void CharacterScene::OnClickChangeHair(BOOL bFoward) { if (!m_bySelectedClass) { return; } if (bFoward) { m_iHairVariation++; } else { m_iHairVariation--; } Player *pPlayer = static_cast(g_ObjectManager.GetObject(GetSelectedObjectKey())); if (pPlayer == NULL) { return; } BYTE selected_class = pPlayer->GetImageClass(); int maxcount = HeroVariationInfoParser::Instance()->GetVariationCount(selected_class, PLAYER_VARIATION_HAIR); // index°¡ 1ºÎÅÍ ½ÃÀÛÇϱ⶧¹®¿¡ maxcount ÀÚü°¡ ÃÖ´ë indexÀÓ if (m_iHairVariation > maxcount) { m_iHairVariation = 1; } else if ( m_iHairVariation < 1) { m_iHairVariation = maxcount; } pPlayer->SetPartVariation(PLAYER_VARIATION_HAIR,m_iHairVariation); pPlayer->RefreshAppearRender(); } void CharacterScene::OnClickChangeFace(BOOL bFoward) { if (!m_bySelectedClass) { return; } if (bFoward) { m_iFaceVariation++; } else { m_iFaceVariation--; } Player *pPlayer = static_cast(g_ObjectManager.GetObject(GetSelectedObjectKey())); if (pPlayer == NULL) { return; } BYTE selected_class = pPlayer->GetImageClass(); int maxcount = HeroVariationInfoParser::Instance()->GetVariationCount(selected_class, PLAYER_VARIATION_FACE); // index°¡ 1ºÎÅÍ ½ÃÀÛÇϱ⶧¹®¿¡ maxcount ÀÚü°¡ ÃÖ´ë indexÀÓ if (m_iFaceVariation > maxcount) { m_iFaceVariation = 1; } else if ( m_iFaceVariation < 1) { m_iFaceVariation = maxcount; } pPlayer->SetPartVariation(PLAYER_VARIATION_FACE,m_iFaceVariation); pPlayer->RefreshAppearRender(); } int CharacterScene::GetCurrentHeightVariation() { return m_iHeightVariation; } int CharacterScene::GetCurrentHairVariation() { return m_iHairVariation; } int CharacterScene::GetCurrentFaceVariation() { return m_iFaceVariation; } void CharacterScene::OnRecvCG_AREACONQUEST(MSG_BASE *pMsg) { } void CharacterScene::OnRecvCG_EVENT( MSG_BASE * pMsg) { switch( pMsg->m_byProtocol) { case CG_EVENT_TIME_CMD: { MSG_CG_EVENT_TIME_CMD * pRecvPacket = (MSG_CG_EVENT_TIME_CMD * ) pMsg; PcbangPlayTimeDialog * pDlg = ( PcbangPlayTimeDialog * ) g_InterfaceManager.GetDialog(InterfaceManager::DIALOG_PCBANG_EVENT_TIME); if( pDlg) { pDlg->SetTime(pRecvPacket->m_EventUseTime); } } break; #ifdef _NA_007935_20150109_GM_COMMAND_EXP_EVENT case CG_GMEVENT_PEAKTIME_PROGRESS_EVENTINFO_CMD: { MSG_CG_GMEVENT_PEAKTIME_PROGRESS_EVENTINFO_CMD* recv_packet = static_cast(pMsg); TiredSystemDialog* tired_system_dialog = static_cast(GET_DIALOG( IM_TIRED_SYSTEM_MANAGER::TIRED_SYSTEM )); if ( recv_packet->exp_ratio > 0.0001f ) { if ( tired_system_dialog ) { tired_system_dialog->set_gm_event_exp_ratio_( recv_packet->exp_ratio ); } } else { if ( tired_system_dialog ) { tired_system_dialog->set_gm_event_exp_ratio_( 0.0f ); } } } break; #endif // _NA_007935_20150109_GM_COMMAND_EXP_EVENT } } void CharacterScene::AddZeroWhenUnder10(TCHAR * pszNumber , int inputNum) { if( inputNum < 10 ) { Sprintf(pszNumber , _T("0%d"), inputNum); } else { Sprintf(pszNumber, _T("%d") , inputNum); } } void CharacterScene::ForceDelChar() { if( ! m_bConnected ) return; if( ! m_bEnableRender) return; CHARLIST_ITR itr = m_CharList.begin(); CharListInfo * pCharListInfo = NULL; for (; itr != m_CharList.end(); ++itr) { pCharListInfo = static_cast(*itr); if( pCharListInfo->CharacterInfo.m_DelChk > 0 ) { Player * pPlayer = ( Player *) g_ObjectManager.GetObject(pCharListInfo->dwObjectKey); if( pPlayer) { if( pPlayer->GetCharDelRemainTime() <= 0) { uiHelpMan* helpMan = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_HELP)); if(helpMan) { helpMan->ResetReadInfo(pCharListInfo->CharacterInfo.m_tszCharName); } DeleteMyChar(pCharListInfo->dwObjectKey); delete pCharListInfo; m_CharList.erase(itr); break; } } } } } void CharacterScene::SEND_CHARINFO_RECOVER_SYN() { if (BIT_CHECK(m_packetStatus,PACKET_STATUS_CHARACTERSCENE_RECOVERY)==FALSE) { BIT_ADD(m_packetStatus,PACKET_STATUS_CHARACTERSCENE_RECOVERY); MSG_CG_CHARINFO_RECOVER_SYN SendPacket; SendPacket.m_bySelectedCharSlotIndex = (BYTE)this->GetSelectCharOId(); GlobalFunc::SendPacket(CI_GAMESERVERIDX , &SendPacket , sizeof( SendPacket) ); } } void CharacterScene::ShowRecoveryErrorCode(DWORD errorCode) { TCHAR szMessage[INTERFACE_STRING_LENGTH ] = {0,}; switch ( errorCode ) { case RC_CHAR_RECOVER_NOTDESTROYED: { //5035 »èÁ¦µÇÁö ¾ÊÀº ij¸¯ÅÍÀÔ´Ï´Ù. g_InterfaceManager.GetInterfaceString(5035 , szMessage ,INTERFACE_STRING_LENGTH); } break; case RC_CHAR_RECOVER_DBCHAR_DONOT_EXIST: { // 5036 º¹±¸ÇÒ Ä³¸¯ÅͰ¡ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. g_InterfaceManager.GetInterfaceString(5036 , szMessage ,INTERFACE_STRING_LENGTH); } break; #ifdef _DEBUG case RC_CHAR_RECOVER_ALREADY_DOING_TRANSACTION: { Snprintf(szMessage ,INTERFACE_STRING_LENGTH -1, _T("[DEBUG] ÀÌ¹Ì ´Ù¸¥ Æ®·£Àè¼ÇÀ» ÁøÇàÁßÀÌ´Ù.") ); } break; case RC_CHAR_RECOVER_INVALID_PARAM: { Snprintf(szMessage ,INTERFACE_STRING_LENGTH -1, _T("[DEBUG] ÆÐŶÀÌ À߸øµÈ °ªÀÔ´Ï´Ù.") ); } break; case RC_CHAR_RECOVER_DISCONNECTED_DBPROXY: { Snprintf(szMessage ,INTERFACE_STRING_LENGTH -1, _T("[DEBUG] DBP°¡ ¿¬°áÀÌ µÇÁö ¾Ê¾Ò½À´Ï´Ù.(Àá½ÃµÚ ¼­ºñ½º ÀÌ¿ë¹Ù¶÷)") ); } break; case RC_CHAR_RECOVER_TRANSACTION_ERROR: { Snprintf(szMessage ,INTERFACE_STRING_LENGTH -1, _T("[DEBUG] Æ®·£Á§¼Ç ¿À·ù(Äõ¸®¿À·ù,±âŸ¿À·ù) ") ); } break; case RC_CHAR_RECOVER_DBUSER_DONOT_EXIST: { Snprintf(szMessage ,INTERFACE_STRING_LENGTH -1, _T("[DEBUG] DBProxyÀÇ DBÀ¯Àú°¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù.") ); } break; #endif default: { // 5034 ij¸¯ÅÍ º¹±¸¿¡ ½ÇÆÐÇß½À´Ï´Ù. g_InterfaceManager.GetInterfaceString(5034 , szMessage ,INTERFACE_STRING_LENGTH); } break; } if( _tcslen(szMessage ) > 0 ) g_InterfaceManager.ShowMessageBox( szMessage, 2000, NULL, 0 ); } BOOL CharacterScene::SendCharacterIdCheckSyn( LPCTSTR szName ) { MSG_CG_CHARINFO_CHARACTERID_CHECK_SYN syn; _tcsncpy(syn.m_szCharName, szName, MAX_CHARNAME_LENGTH); syn.m_szCharName[_countof(syn.m_szCharName) - 1] = '\0'; GlobalFunc::SendPacket(CI_GAMESERVERIDX, &syn, sizeof(MSG_CG_CHARINFO_CHARACTERID_CHECK_SYN)); return TRUE; } void CharacterScene::LoadCreateCharacterRoom() { // ¸Ê·Îµù if( m_bLoadCreateCharacterRoom == false ) { #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT #else g_pSunRenderer->x_pManagerWzUnitLoader->LoadWzUnit( CHARACTER_MAP_RESOURCE_ID, "Data\\Interface\\characterselect\\Room\\make_room.wzu" ); m_pCreateMapUnit = g_pSunRenderer->x_pManagerWzUnitLoader->GetWzUnit(CHARACTER_MAP_RESOURCE_ID); m_pCreateMapUnitDraw = (CWzUnitDraw *)Func_ContactWzd( CW_NEW_WZUNITDRAW, 0 ); m_pCreateMapUnitDraw->SetWzUnit( m_pCreateMapUnit,FALSE ); PlayCameraAnimation(GetCreateCharacterPositionAniCode()/*StrToWzID("N001")*/,FALSE); #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT m_fCameraRate = 0.0f; m_dwPickedObjectKey = 0; m_bLoadCreateCharacterRoom = true; } } void CharacterScene::LoadCinematicCamera() { m_dwCameraObjectKey = ResourceCode::GetCinematicCameraInCharacterScene(); Object* pCamera = g_ObjectManager.Add(m_dwCameraObjectKey, CAMERA_OBJECT, 0, 0); if (pCamera != NULL) { WzVector vPos; ZeroMemory(&vPos, sizeof(vPos)); pCamera->SetPosition(vPos); } } void CharacterScene::Init_UIState() { uiSkillMan* skill_man = GET_DIALOG_MANAGER(uiSkillMan, UIMAN_SKILL); if (skill_man) { skill_man->SetCurrentDialogKey(IM_SKILL_MANAGER::SKILL_TREE_DLG); #ifdef _NA_007019_20140107_PERK_CHANGE_SYSTEM // PerkList¸¦ ¿äû skill_man->SEND_Perk_List_SYN(); #endif // _NA_007019_20140107_PERK_CHANGE_SYSTEM } uiQuestListDlg* pQuestListDlg = GET_CAST_DIALOG(uiQuestListDlg, IM_QUEST_MANAGER::QUEST_LIST_DLG); if (pQuestListDlg) { pQuestListDlg->SetDlgState(QUEST_CATEGORY_MISSION); } uiGuideSystemMan* guide_manager = GET_DIALOG_MANAGER(uiGuideSystemMan, UIMAN_GUIDE_SYSTEM); if (guide_manager != NULL) { //ij¸¯ÅÍ º° »ç¿ëÇÏ´Â º¯¼ö ÃʱâÈ­ guide_manager->set_is_have_notice_once(false); //µµ¿ò¸» Repeat µ¥ÀÌÅ͸¦ ¿äû guide_manager->SEND_GUIDE_DATA_GAMEOPTION_LOAD_SYN(); //¿­¶÷½Ç µ¥ÀÌÅ͸¦ ¿äû guide_manager->SEND_LIBRARY_DATA_GAMEOPTION_LOAD_SYN(); } HotKeyManager::Instance()->LoadHotKeyInfoFromServer(); } //------------------------------------------------------------------------------ void CharacterScene::SetCustomViewCamera() { Object* obj = g_ObjectManager.GetObject(m_dwSelectedObjectKey); BASE_CreateCharCustomCameraInfo* info = CreateCharCustomCameraInfoParser::Instance()->GetCustomCameraInfo(static_cast(m_bySelectedClass)); if ((obj != NULL) && (info != NULL)) { obj->SetAngle(info->char_rot, TRUE); } } //------------------------------------------------------------------------------ #if defined(_DEBUG) || defined(_GAMECLIENT_VER) BOOL CharacterScene::SetSelectCharacterAutoTestByName(LPCTSTR CharacterName) { CHARLIST_ITR it = m_CharList.begin(); DWORD index = 0; while( it != m_CharList.end() ) { CharListInfo* info = *it; if( _tcscmp( info->CharacterInfo.m_tszCharName, CharacterName ) == 0 ) { SetSelectCharacterAutoTest( info->CharacterInfo.m_bySlot ); return TRUE; } ++it; } return FALSE; } void CharacterScene::SetSelectCharacterAutoTest(DWORD dwSelectCharacter) { #if defined(_DEBUG) || defined(_GAMECLIENT_VER) // µð¹ö±×/°³¹ß¹èÆ÷ ¸ðµå if( AutoTestManagerEx::Instance()->IsAutoLogin() == true ) { if( #ifdef _NA_000000_20130114_RENEWER_UI uiCharacterSelectList2* select_list = GET_CAST_DIALOG(uiCharacterSelectList2, IM_CHARACTERSELECT_MANAGER::CHARACTER_SELECT_LIST) #else uiCharacterSelectList* select_list = GET_CAST_DIALOG(uiCharacterSelectList, IM_CHARACTERSELECT_MANAGER::CHARACTER_SELECT_LIST) #endif ) { select_list->SetSelectedCharacterSlotIndex( dwSelectCharacter ); } m_dwSelectCharacter = dwSelectCharacter; } #endif } #endif #ifdef _JP_20110222_INGAME_CHARNAME_CHANGE // À̸§ º¯°æ ÇÁ·Î¼¼½º Áß¿¡´Â ÇÏ´ÜUI ´Â ¼û±â´Â °ÍÀ¸·Î ÇÑ´Ù. void CharacterScene::InitRenameProcess() { for (BYTE index = 0; index < MAX_CHARACTER_LIST_NUM; ++index) { rename_status_[index] = false; } } bool CharacterScene::NeedRenameProcess() { for (BYTE index = 0; index < m_CharList.size()/*m_byCharacterSlot*/; ++index) { if (rename_status_[index] == true) { return true; } } return false; } int CharacterScene::GetNumOfNeedRename() { BYTE index = 0; int number = 0; for ( ; index < m_CharList.size()/*m_byCharacterSlot*/; ++index) { if (rename_status_[index] == true) { ++number; } } return number; } bool CharacterScene::NeedRenameByIndex(BYTE index) { if (index < 0 || index >= m_CharList.size()/*m_byCharacterSlot*/) { return false; } return rename_status_[index]; } void CharacterScene::UnsetRenameStatusByIndex(BYTE index) { if (index < 0 || index >= m_CharList.size()/*m_byCharacterSlot*/) { return; } rename_status_[index] = false; } void CharacterScene::RecvRenameStatus(BYTE* rename_status) { if (rename_status == NULL) { return; } for (BYTE index = 0; index < m_CharList.size()/*m_byCharacterSlot*/; ++index) { rename_status_[index] = ((rename_status[index] == 1) ? true : false); } } #endif //_JP_20110222_INGAME_CHARNAME_CHANGE void CharacterScene::ReleaseAllParts(DWORD object_key) { // Ç÷¹ÀÌ¾î ¹× ÀÌÅ¢ÄÁÅ×ÀÌ³Ê ¾ò±â Player* cinematic_character = static_cast(g_ObjectManager.GetObject(object_key)); if (cinematic_character == NULL) { return; } SCSlotContainer* equip_container = cinematic_character->GetEquipmentContainer(); if (equip_container == NULL) { return; } // ¼øÈ¸Çϸé DeleteSlot È£Ãâ const POSTYPE kEquipPosition[MAX_ARMORCODE] = { EquipmentContainer::EQUIP_ARMOR, EquipmentContainer::EQUIP_PROTECTOR, EquipmentContainer::EQUIP_HELMET, EquipmentContainer::EQUIP_PANTS, EquipmentContainer::EQUIP_BOOTS, EquipmentContainer::EQUIP_GLOVE, EquipmentContainer::EQUIP_BELT, EquipmentContainer::EQUIP_SHIRTS }; SCItemSlot delete_item_solt; // ¹«±âÇØÁ¦ equip_container->DeleteSlot(EquipmentContainer::EQUIP_WEAPON1, &delete_item_solt); // ¹æ¾î±¸ÆÄÃ÷ÇØÁ¦ for (int index = 0; index < MAX_ARMORCODE; ++index) { equip_container->DeleteSlot(kEquipPosition[index], &delete_item_solt); } #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT //cinematic_character->SetAnimation(StrToWzID("N001"), TRUE); #else cinematic_character->SetAnimation(StrToWzID("N203"), TRUE); #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT } void CharacterScene::ResetCameraPosition(eCHAR_TYPE class_type ) { #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT xGetCharacterCreate()->ResetCameraPosition( class_type ); #endif //_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT } bool CharacterScene::CheckEnableSelectClass(eCHAR_TYPE check_class_type) { std::vector::iterator object_key_itr = image_class_object_key_list_.begin(); std::vector::iterator object_key_itr_end = image_class_object_key_list_.end(); for ( ; object_key_itr != object_key_itr_end; ++object_key_itr) { DWORD object_key = *object_key_itr; Player* cinematic_character = static_cast(g_ObjectManager.GetObject(object_key)); if (cinematic_character == NULL) { continue; } if (cinematic_character->GetClass() == check_class_type) { return true; } } return false; } DWORD CharacterScene::ChangeCreateClass(eCHAR_TYPE change_class_type) { DWORD object_key = GetCreateClassObjectKey(change_class_type); if (object_key) { m_dwSelectedObjectKey = object_key; ShowOnlyCinematicCharacter(object_key); return object_key; } return 0; } DWORD CharacterScene::GetCreateClassObjectKey(eCHAR_TYPE change_class_type) { std::vector::iterator object_key_itr = image_class_object_key_list_.begin(); std::vector::iterator object_key_itr_end = image_class_object_key_list_.end(); for ( ; object_key_itr != object_key_itr_end; ++object_key_itr) { DWORD object_key = *object_key_itr; Player* cinematic_character = static_cast(g_ObjectManager.GetObject(object_key)); if (cinematic_character == NULL) { continue; } if (cinematic_character->GetClass() == change_class_type) { DWORD object_key = cinematic_character->GetObjectKey(); m_dwSelectedObjectKey = object_key; return object_key; } } return 0; } void CharacterScene::ShowBaseCinematicCharacter() { #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT #else // °¢ Ŭ·¡½º ´ëÇ¥ ij¸¯Å͸¦ ¼¼ÆÃ // ´ëÇ¥ ij¸¯Å͸¸ ·»´õ¸µÇÏ¸ç ³ª¸ÓÁö´Â ¼û±è. for (int object_key = CHARACTERSCENE::BERSERKER; object_key < CHARACTERSCENE::PLAYER_LIST; ++object_key) { Player* cinematic_character = static_cast(g_ObjectManager.GetObject(object_key)); if (cinematic_character == NULL) { continue; } DWORD cinematic_character_class_type = static_cast(cinematic_character->GetClass()); BOOL is_show = (CHARACTERSCENE::kBaseCinematicCharacter[cinematic_character_class_type - 1] == object_key) ? TRUE : FALSE; cinematic_character->SetShow(is_show); ReleaseAllParts(object_key); } #endif // _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT } void CharacterScene::ChangeSelectCharacter(DWORD show_object_key) { Player* cinematic_character = NULL; std::vector::iterator object_key_itr = image_class_object_key_list_.begin(); std::vector::iterator object_key_itr_end = image_class_object_key_list_.end(); for ( ; object_key_itr != object_key_itr_end; ++object_key_itr) { DWORD object_key = *object_key_itr; cinematic_character = static_cast(g_ObjectManager.GetObject(object_key)); if (cinematic_character == NULL) { continue; } cinematic_character->SetShow(FALSE); } for (int object_key = CHARACTERSCENE::BERSERKER; object_key < CHARACTERSCENE::PLAYER_LIST; ++object_key) { cinematic_character = static_cast(g_ObjectManager.GetObject(object_key)); if (cinematic_character == NULL) { continue; } //BOOL is_show = (show_object_key == object_key) ? TRUE : FALSE; if (show_object_key == object_key) { cinematic_character->SetShow(TRUE); m_dwPickedObjectKey = object_key; create_selected_character_object_key_ = show_object_key; } } } void CharacterScene::ShowOnlyCinematicCharacter(DWORD show_object_key) { for (int object_key = CHARACTERSCENE::BERSERKER; object_key < CHARACTERSCENE::PLAYER_LIST; ++object_key) { Player* cinematic_character = static_cast(g_ObjectManager.GetObject(object_key)); if (cinematic_character == NULL) { continue; } BOOL is_show = (show_object_key == object_key) ? TRUE : FALSE; cinematic_character->SetShow(is_show); } } #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT void CharacterScene::ZoomCamera( float rate) { xGetCharacterCreate()->ZoomCamera( rate ); } #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT void CharacterScene::RotateCinematicCharacter(float angle) { std::vector::iterator object_key_itr = image_class_object_key_list_.begin(); std::vector::iterator object_key_itr_end = image_class_object_key_list_.end(); for ( ; object_key_itr != object_key_itr_end; ++object_key_itr) { Object* cinematic_character = g_ObjectManager.GetObject(*object_key_itr); if (cinematic_character == NULL) { continue; } float character_angle = cinematic_character->GetAngle(); character_angle += angle; cinematic_character->SetAngle(character_angle, TRUE); } } void CharacterScene::SetBackCinematicCharacter() { // °¢ ij¸¯ÅÍ ¾Þ±Û º¹±¸ ¹× Àåºñ ÇØÁ¦ std::vector::iterator object_key_itr = image_class_object_key_list_.begin(); std::vector::iterator object_key_itr_end = image_class_object_key_list_.end(); for ( ; object_key_itr != object_key_itr_end; ++object_key_itr) { DWORD object_key = *object_key_itr; Player* cinematic_character = static_cast(g_ObjectManager.GetObject(object_key)); if (cinematic_character == NULL) { continue; } ReleaseAllParts(object_key); cinematic_character->SetAngle(m_fOldAngle, TRUE); cinematic_character->SetHeightVariation(2); cinematic_character->SetPartVariation(PLAYER_VARIATION_FACE,1); cinematic_character->SetPartVariation(PLAYER_VARIATION_HAIR,1); cinematic_character->RefreshAppearRender(); } } void CharacterScene::SelectCharecter() { if (BIT_CHECK(m_packetStatus, PACKET_STATUS_CHARACTERSCENE_SELCHAR) == FALSE) { #ifdef _NA_000000_20130114_RENEWER_UI uiCharacterSelectList2* select_list = GET_CAST_DIALOG(uiCharacterSelectList2, IM_CHARACTERSELECT_MANAGER::CHARACTER_SELECT_LIST); #else uiCharacterSelectList* select_list = GET_CAST_DIALOG(uiCharacterSelectList, IM_CHARACTERSELECT_MANAGER::CHARACTER_SELECT_LIST); #endif if (select_list == NULL) { return; } CharListInfo* character_info = GetCharacterInfoBySlotIndex(select_list->GetSelectedCharacterSlotIndex()); if (character_info == NULL) { return; } Player* selected_character = static_cast(g_ObjectManager.GetObject(character_info->dwObjectKey)); if (selected_character == NULL) { return; } WORD intersect_result = NTCT_OUTSIDE; float distance = 0.f; if (selected_character->GetNumPickingBoundingVolume() > 0) { WzBoundingVolume bounding_volume = *selected_character->GetPickingBoundingVolume(0); intersect_result = Intersect_Ray_Bv(&g_wrMouseRay, &bounding_volume, &distance); } else { WzBoundingVolume bounding_volume = *selected_character->GetBoundingVolume(); intersect_result = Intersect_Ray_Bv(&g_wrMouseRay, &bounding_volume, &distance); } if (intersect_result != NTCT_OUTSIDE) { DWORD time_diff = g_CurTime - m_preTime; if(time_diff < DOUBLE_CLICK_TIME)//´õºíŬ¸¯ ó¸® { SendCharSelectPacket(); } m_preTime = g_CurTime; } } } void CharacterScene::ShowSelectCharacter(int slot_index) { m_dwSelectCharacter = INVALID_OBJECT_KEY; m_dwSelectOid = INVALID_OBJECT_KEY; create_selected_character_object_key_ = 0; CHARLIST_ITR character_itr = m_CharList.begin(); CHARLIST_ITR character_itr_end = m_CharList.end(); CharListInfo * character_info = NULL; for ( ; character_itr != character_itr_end; ++character_itr) { character_info = (*character_itr); if (character_info == NULL) { continue; } Player* character_ptr = static_cast(g_ObjectManager.GetObject(character_info->dwObjectKey)); if (character_ptr == NULL) { continue; } BOOL is_show = (character_info->CharacterInfo.m_bySlot == slot_index) ? TRUE : FALSE; character_ptr->SetShow(is_show); Pet* pPet = NULL; if(character_ptr->IsPetReturn()) { pPet = (Pet*) g_ObjectManager.GetObject(character_ptr->GetPetObjectKey()); if(pPet) { pPet->SetStatePetHide((is_show == TRUE) ? _HIDE_SKILL_INFO::NONE_HIDE : _HIDE_SKILL_INFO::ALL_HIDE); } } if (is_show == TRUE) { #ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT xGetCharacterCreate()->ResetCameraPosition( GetRace(character_ptr->GetClassCode()) ); //m_camera.x = GetCameraX(GetRace(character_ptr->GetClassCode())); //m_target.x = m_camera.x; //m_zoom = 0.0f; #endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT m_dwSelectCharacter = character_info->CharacterInfo.m_bySlot; m_dwSelectOid = character_info->dwObjectKey; } } CharSelectDialog* charater_select_dialog = GET_CAST_DIALOG(CharSelectDialog, IM_CHARACTERSELECT_MANAGER::CHARACTER_SELECT_DIALOG); if (charater_select_dialog != NULL) { if (m_dwSelectCharacter != INVALID_OBJECT_KEY) { CharListInfo* char_info = g_CharSelectScene.GetCurSelectCharacterInfo(); if (char_info && char_info->CharacterInfo.m_DelChk == 0) { charater_select_dialog->ShowDeleteButton(true); charater_select_dialog->EnableButton(true, CharSelectDialog::CharSelect_Delete); charater_select_dialog->EnableButton(true, CharSelectDialog::CharSelect_Start); } else { charater_select_dialog->ShowDeleteButton(false); charater_select_dialog->EnableButton(true, CharSelectDialog::CharSelect_UnDelete); charater_select_dialog->EnableButton(false, CharSelectDialog::CharSelect_Start); } } else { charater_select_dialog->EnableButton(false, CharSelectDialog::CharSelect_Delete); charater_select_dialog->EnableButton(false, CharSelectDialog::CharSelect_Start); charater_select_dialog->ShowDeleteButton(true); } } } void CharacterScene::HideAllCharacter() { CHARLIST_ITR char_list_itr = m_CharList.begin(); CharListInfo * char_list_info = NULL; for (; char_list_itr != m_CharList.end(); ++char_list_itr) { char_list_info = static_cast(*char_list_itr); if( Player* character_object = static_cast(g_ObjectManager.GetObject(char_list_info->dwObjectKey)) ) { character_object->SetShow(false); Pet* pet_object = NULL; if(character_object->IsPetReturn()) { pet_object = (Pet*) g_ObjectManager.GetObject(character_object->GetPetObjectKey()); if(pet_object) { pet_object->SetStatePetHide(_HIDE_SKILL_INFO::ALL_HIDE); } } } } } bool CharacterScene::IsMakeCharacterBetakey(BYTE class_code, eCHAR_TYPE base_gender_of_class) { #ifdef _SCJ_REMOVE_GENDER_CREATE_SCEANE return (class_code == base_gender_of_class); #endif //_SCJ_REMOVE_GENDER_CREATE_SCEANE #ifdef _NA_20100307_BETAKEY_SYSTEM uiLoginMan* login_manager = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_LOGIN)); BetaKeyInfo* betakey_info = NULL; if (login_manager) { betakey_info = login_manager->GetBetaKeyInfo(); BYTE base_gender = static_cast(ResourceCode::GetBaseGenderOfClass(base_gender_of_class)); bool is_can_create = BetaKeyImpl::CanCreateCharacter(betakey_info, base_gender_of_class, base_gender); if (betakey_info && is_can_create) { return true; } } return false; #else return true; // º£Å¸Å°°¡ Æ÷ÇÔµÈ °ÍÀÌ ¾Æ´Ï¸é ¹«Á¶°Ç true; #endif//_NA_20100307_BETAKEY_SYSTEM } //------------------------------------------------------------------------------ // NextFrame - advances to the next Bink frame. bool CharacterScene::NextFrame(HBINK bink) { if (bink == NULL) { return false; } // Decompress the Bink frame. BinkDoFrame(bink); // Are we at the end of the movie? if (bink->FrameNum == bink->Frames) { return FALSE; } // Lock the BinkBuffer so that we can copy the decompressed frame into it. long lPitch; int iComponent; VOID* pByte = g_pSunRenderer->x_pManagerTexture->LockTexture(Movie.bink_texture, &lPitch, &iComponent); if (pByte == NULL) { return FALSE; } BinkCopyToBuffer(bink, pByte, lPitch, bink->Height, 0,0, BINKSURFACE32); g_pSunRenderer->x_pManagerTexture->UnlockTexture(Movie.bink_texture); BinkNextFrame(bink); return TRUE; } //------------------------------------------------------------------------------ void CharacterScene::set_show_movie(bool val) { if (val == true) { if (Movie.bink == NULL) { Movie.bink = BinkOpen(GENERALPARAM->characterscene_cinematic_filename(), 0); if (Movie.bink == NULL) { return; } Movie.bink_texture = g_pSunRenderer->x_pManagerTexture->GenerateEmptyTexture(Movie.bink->Width, Movie.bink->Height, 4, TLS_NO_MIPMAP | TLS_EMPTY_TEXTURE); if (Movie.bink_texture == NULL) { BinkClose(Movie.bink); Movie.bink = NULL; return; } } BinkGoto(Movie.bink, 0, 0); Movie.backup_clear_color = g_pSunRenderer->GetClearColor(); g_pSunRenderer->SetClearColor(0, 0, 0); g_InterfaceManager.SaveAppearWindows(); g_InterfaceManager.HideAllWindows(); ShowCursor(FALSE); } else { g_pSunRenderer->SetClearColor(Red_WzColor( Movie.backup_clear_color), Blue_WzColor( Movie.backup_clear_color ), Green_WzColor( Movie.backup_clear_color), Alpha_WzColor( Movie.backup_clear_color)); g_InterfaceManager.LoadAppearWindows(); ShowCursor(TRUE); } Movie.is_show_movie = val; }