CastleScene::CastleScene(boost::shared_ptr<const Graph> default_frame_graph) : CampScene(default_frame_graph), current_step(GetCurrentStep()), title(GetCastleName()), script_window(new windows::ScriptWindow()) { BOOST_ASSERT(title); BOOST_ASSERT(script_window); Initialize(); }
//------------------------------------------------------------------------------ // CUISiegeWarfareDoc::TimeConfirm // Explain: 공성 시간 확정 알림(공지) // Date : 2005-07-06,Author: Lee Ki-hwan //------------------------------------------------------------------------------ void CUISiegeWarfareDoc::TimeConfirm( int nZoneIndex, int nMonth, int nDay, int nHour, int nMin ) { m_nZoneIndex = nZoneIndex; CTString strMessage; strMessage.PrintF( _S( 2017, "[%s]지역 [%s]공성이 %d월 %d일 %d시로 예정되었습니다." ), CZoneInfo::getSingleton()->GetZoneName( nZoneIndex ), GetCastleName( nZoneIndex ), nMonth, nDay, nHour ); // [2012/06/04 : Sora] ITS 8986 공성시작전 공성시작 지점으로 이동 시 캐릭터 이동불가 상태 발생 수정 // 공성 메시지 출력하면서 해당 UI를 활성화 시켜주어햐 한다. 공성 메시지 출력 방식 변경 CUIManager::getSingleton()->GetSiegeWarfare()->SetNotice( strMessage ); }
//------------------------------------------------------------------------------ // CUISiegeWarfareDoc::EndWar // Explain: 메세지 표시후 공성 종료 // Date : 2005-07-07,Author: Lee Ki-hwan //------------------------------------------------------------------------------ void CUISiegeWarfareDoc::EndWar( int nZoneIndex, int nWinDefense, int nOwnerGuildIndex, CTString strOwnerGuildName, int nOwnerIndex, CTString strOwnerName, int nNextMonth, int nNextDay, int nNextWeek, int nNextHour ) { CUIManager* pUIManager = CUIManager::getSingleton(); INDEX i; if( nZoneIndex == 7 ) { SetUIState( SWS_END ); // 공성이 끝나면 모든 문을 열어 둔다. // FIXME : 문 열어주기. ((CPlayerEntity*)CEntity::GetPlayerEntity(0))->OpenGate( 0, TRUE ); ((CPlayerEntity*)CEntity::GetPlayerEntity(0))->OpenGate( 1, TRUE ); ((CPlayerEntity*)CEntity::GetPlayerEntity(0))->OpenGate( 2, TRUE ); if( _pNetwork->MyCharacterInfo.sbJoinFlagMerac == WCJF_NONE ) return; if( g_slZone == 7 ) ((CPlayerEntity*)CEntity::GetPlayerEntity(0))->PlayBGM( MUSIC_MERAC_FIELD ); // 이미지 출력 추가 _UISignBoard->ShowSingBoard ( 12, 7 ); m_tmLeftTime = _pTimer->GetHighPrecisionTimer().GetMilliseconds(); _pNetwork->MyCharacterInfo.sbJoinFlagMerac = WCJF_NONE; // Start My Guild, Enemy Guild Effect Start ACTORMGR()->SetJoinFlagMerac(WCJF_NONE); } else if( nZoneIndex == 4) { // WSS_DRATAN_SEIGEWARFARE 2007/10/1 -------------------------------->> // 공성 종료 관련 수정... SetUIState( SWS_END ); // WSS_DRATAN_SEIGEWARFARE 2007/10/11 if( _pNetwork->MyCharacterInfo.sbJoinFlagDratan == WCJF_NONE ) return; // WSS_DRATAN_SIEGEWARFARE 2007/10/16 //_pNetwork->MyCharacterInfo.sbJoinFlagDratan = WCJF_NONE; // Start My Guild, Enemy Guild Effect Start ACTORMGR()->SetJoinFlagMerac(WCJF_NONE); // -------------------------------------------------------------------<< // WSS_DRATAN_SIEGEWARFARE 0070725 // TODO :: 드라탄 공성 종료 루틴 ((CPlayerEntity*)CEntity::GetPlayerEntity(0))->OpenGate( 3, TRUE ); ((CPlayerEntity*)CEntity::GetPlayerEntity(0))->OpenGate( 4, TRUE ); ((CPlayerEntity*)CEntity::GetPlayerEntity(0))->OpenGate( 5, TRUE ); ((CPlayerEntity*)CEntity::GetPlayerEntity(0))->OpenGate( 6, TRUE ); ((CPlayerEntity*)CEntity::GetPlayerEntity(0))->OpenGate( 7, TRUE ); pUIManager->GetSiegeWarfareNew()->SetWarState(FALSE); // WSS_DRATAN_SEIGEWARFARE 2007/08/14 -------------------------------->> // 390 ~ 399 공성 부활진지 초기화 CTString tStr; for( i = 0; i < 10; i++) { INDEX tNpcIdx = 390+i; _pNetwork->MyCharacterInfo.mQuarter[tNpcIdx] = -1; _pNetwork->MyCharacterInfo.mQuarterName[tNpcIdx] = CTString(""); // Hard Cording ^^;; 어쩔수 없이.... // 몹 이름 변경 CMobData* MD = CMobData::getData(tNpcIdx); if(MD->GetMobIndex()>0) { tStr.PrintF(_S( 3685,"공성 부활진지%d"),tNpcIdx-389); MD->SetName(tStr); } } // -------------------------------------------------------------------<< if( pUIManager->GetSiegeWarfareNew()->IsEnabled()&& pUIManager->GetSiegeWarfareNew()->IsVisible() ) { pUIManager->RearrangeOrder(UI_SIEGE_WARFARE_NEW,FALSE); } // WSS_DRATAN_SIEGEWARFARE 2007/10/17 // 교감중 공성 종료 처리 if( _pNetwork->MyCharacterInfo.bConsensus ) { pUIManager->GetSiegeWarfareNew()->StopConsensus(_pNetwork->MyCharacterInfo.index); } StopConsensusEffect(0,TRUE); // WSS_DRATAN_SIEGEWARFARE 2007/10/18 // 상태 초기화 ((CPlayerEntity*)CEntity::GetPlayerEntity(0))->PlayerInit(false); } m_nZoneIndex = nZoneIndex; CTString strMessage1; CTString strMessage2; // 공성 끝났면 지도는 초기화 pUIManager->GetMap()->SetCurrentWorldMap( _pNetwork->MyCharacterInfo.zoneNo, 0 ); pUIManager->GetMap()->ReSetData(); if( nWinDefense ) { if( strOwnerGuildName.Length() <= 0 ) { strMessage1.PrintF( _S( 2019, "[%s]지역 [%s]공성에 실패 하였습니다." ), CZoneInfo::getSingleton()->GetZoneName( nZoneIndex ), GetCastleName( nZoneIndex ) ); } else { strMessage1.PrintF( _S(2020 , "[%s]지역 [%s]공성이 종료되었습니다. [%s]길드가 수성에 성공하였습니다." ), CZoneInfo::getSingleton()->GetZoneName( nZoneIndex ), GetCastleName( nZoneIndex ), strOwnerGuildName ); } } else { strMessage1.PrintF( _S(2021 , "[%s]지역 [%s]공성이 종료되었습니다. 새로운 성주로 [%s]길드의 [%s]길드장이 선출 되었습니다." ), CZoneInfo::getSingleton()->GetZoneName( nZoneIndex ), GetCastleName( nZoneIndex ), strOwnerGuildName, strOwnerName ); } strMessage2.PrintF(_S( 2022, "다음 공성전 신청은 %d월 %d일 %s요일 오후 %d시부터 신청이 가능합니다." ), nNextMonth, nNextDay, pUIManager->GetWeekToString( nNextWeek ), nNextHour ); // [2012/06/04 : Sora] ITS 8986 공성시작전 공성시작 지점으로 이동 시 캐릭터 이동불가 상태 발생 수정 // 공성 메시지 출력하면서 해당 UI를 활성화 시켜주어햐 한다. 공성 메시지 출력 방식 변경 pUIManager->GetSiegeWarfare()->SetNotice( strMessage1, strMessage2 ); // Date : 2005-11-18(오후 4:27:13), By Lee Ki-hwan // 메세지 박스 표시 추가 pUIManager->CloseMessageBox( MSGCMD_NULL ); CUIMsgBox_Info MsgBoxInfo; MsgBoxInfo.SetMsgBoxInfo( _S(2341, "공성 종료" ), UMBS_OK, UI_NONE, MSGCMD_NULL ); MsgBoxInfo.AddString( strMessage1 ); pUIManager->CreateMessageBox( MsgBoxInfo ); }
//------------------------------------------------------------------------------ // CUISiegeWarfareDoc::RemainStartTime // Explain: 공성 시작 까지 남은 시간을 시작 10분전부터 1분간격으로 공지 // Date : 2005-07-06,Author: Lee Ki-hwan //------------------------------------------------------------------------------ void CUISiegeWarfareDoc::RemainStartTime( int nZoneIndex, int nMin ) { m_nZoneIndex = nZoneIndex; CTString strMessage; strMessage.PrintF( _S( 2018, "[%s]지역 [%s]공성이 %d분 남았습니다." ), CZoneInfo::getSingleton()->GetZoneName( nZoneIndex ), GetCastleName( nZoneIndex ), nMin ); // [2012/06/04 : Sora] ITS 8986 공성시작전 공성시작 지점으로 이동 시 캐릭터 이동불가 상태 발생 수정 // 공성 메시지 출력하면서 해당 UI를 활성화 시켜주어햐 한다. 공성 메시지 출력 방식 변경 CUIManager::getSingleton()->GetSiegeWarfare()->SetNotice( strMessage ); }
//------------------------------------------------------------------------------ // CUISiegeWarfareDoc::GuildWarStart // Explain: // Date : 2005-07-06,Author: Lee Ki-hwan //------------------------------------------------------------------------------ void CUISiegeWarfareDoc::GuildWarStart( int nZoneIndex, int nRemainSec ) { CUIManager* pUIManager = CUIManager::getSingleton(); if(nZoneIndex == 7) { // FIXME : 문 닫아주기. ((CPlayerEntity*)CEntity::GetPlayerEntity(0))->OpenGate( 0, FALSE ); ((CPlayerEntity*)CEntity::GetPlayerEntity(0))->OpenGate( 1, FALSE ); ((CPlayerEntity*)CEntity::GetPlayerEntity(0))->OpenGate( 2, FALSE ); if( _pNetwork->MyCharacterInfo.sbJoinFlagMerac == WCJF_NONE ) return; if( g_slZone == 7 ) ((CPlayerEntity*)CEntity::GetPlayerEntity(0))->PlayBGM( MUSIC_CASTLE_BATTLE ); Clear(); _pNetwork->SendCastleMapRecent(); m_nZoneIndex = nZoneIndex; CTString strMessage, strMessage2; strMessage.PrintF(_S(2012, "[%s]지역 [%s]공성이 시작됩니다." ), CZoneInfo::getSingleton()->GetZoneName( nZoneIndex ), GetCastleName( nZoneIndex )); strMessage2.PrintF(_S(2013, "[%s]지역 내에 있는 공성 참여 유저들은 공성 시작 지점으로 이동합니다."), CZoneInfo::getSingleton()->GetZoneName( nZoneIndex )); // [2012/06/04 : Sora] ITS 8986 공성시작전 공성시작 지점으로 이동 시 캐릭터 이동불가 상태 발생 수정 // 공성 메시지 출력하면서 해당 UI를 활성화 시켜주어햐 한다. 공성 메시지 출력 방식 변경 pUIManager->GetSiegeWarfare()->SetNotice( strMessage, strMessage2 ); pUIManager->GetSiegeWarfare()->OpenSelectBattle(); RestartEffect(nZoneIndex); RestartGuildMasterEffect(); SetLeftTime( nRemainSec ); m_tmLeftTime = _pTimer->GetHighPrecisionTimer().GetMilliseconds(); //SetDealy(); } else if( nZoneIndex == 4) { // WSS_DRATAN_SIEGEWARFARE 0070725 // TODO :: 드라탄 공성 시작 루틴 ((CPlayerEntity*)CEntity::GetPlayerEntity(0))->OpenGate( 3, FALSE ); ((CPlayerEntity*)CEntity::GetPlayerEntity(0))->OpenGate( 4, FALSE ); ((CPlayerEntity*)CEntity::GetPlayerEntity(0))->OpenGate( 5, FALSE ); ((CPlayerEntity*)CEntity::GetPlayerEntity(0))->OpenGate( 6, FALSE ); ((CPlayerEntity*)CEntity::GetPlayerEntity(0))->OpenGate( 7, FALSE ); CTString strMessage; strMessage.PrintF( _S( 2012, "[%s]지역 공성이 시작됩니다." ), CZoneInfo::getSingleton()->GetZoneName( nZoneIndex )); // [2012/06/04 : Sora] ITS 8986 공성시작전 공성시작 지점으로 이동 시 캐릭터 이동불가 상태 발생 수정 // 공성 메시지 출력하면서 해당 UI를 활성화 시켜주어햐 한다. 공성 메시지 출력 방식 변경 pUIManager->GetSiegeWarfare()->SetNotice( strMessage ); m_nZoneIndex = nZoneIndex; RestartEffect(nZoneIndex); } }