UINT CGAskMissionDescHandler::Execute(CGAskMissionDesc* pPacket, Player* pPlayer )
{
__ENTER_FUNCTION
	GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ;
	Assert( pGamePlayer != NULL ) ;
	if ( pGamePlayer == NULL )
	{
		g_pLog->FastSaveLog( LOG_FILE_1, "CGAskMissionDescHandler: Error (pGamePlayer == NULL) " ) ;
		return PACKET_EXE_CONTINUE ;
	}

	Obj_Human* pHuman = pGamePlayer->GetHuman() ;
	Assert( pHuman != NULL ) ;
	if ( pHuman == NULL )
	{
		g_pLog->FastSaveLog( LOG_FILE_1, "CGAskMissionDescHandler: Error (pHuman == NULL) " ) ;
		return PACKET_EXE_CONTINUE ;
	}

	Scene* pScene = pHuman->getScene() ;
	Assert( pScene != NULL ) ;
	if ( pScene == NULL )
	{
		g_pLog->FastSaveLog( LOG_FILE_1, "CGAskMissionDescHandler: Error Obj = %d (pScene == NULL) ", pHuman->GetID() ) ;
		return PACKET_EXE_CONTINUE ;
	}

	//检查线程执行资源是否正确
	Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ;
	if ( MyGetCurrentThreadID() != pScene->m_ThreadID )
	{
		g_pLog->FastSaveLog( LOG_FILE_1, "CGAskMissionDescHandler: Error Obj = %d (MyGetCurrentThreadID() != pScene->m_ThreadID) ", pHuman->GetID() ) ;
		return PACKET_EXE_CONTINUE ;
	}

	UINT nMissionIndex = pHuman->GetMissionIndexByID( pPacket->getMissionIndex() );
	const _OWN_MISSION* pMission =	pHuman->GetMission( nMissionIndex ) ;

	_MISSION_LIST_t Mis;
	if( g_TableInit.GetMissionListInfo( pMission->m_idScript, Mis ) )
	{
		_MISSION_DATA_t* pData = g_MissionDataTable.Get( Mis.nMissionID );
		Assert( pData );

		_MISSION_DIALOG_t* pDialog = g_MissionDialogTable.Get( Mis.nDialog );
		Assert( pDialog );

		_MISSION_REWARD_t* pReward = NULL;
		if( Mis.nReward != -1 )
		{
			pReward = g_MissionRewardTable.Get( Mis.nReward );
			Assert( pReward );
		}

		//GetDestScene
		//Scene* pDestScene = (Scene*)( g_pSceneManager->GetScene( Mis.nDestScene ) );
		//Assert( pDestScene );

		GCRetMissionDesc msg;
		msg.SetMissionIndex( nMissionIndex );

		BOOL bSend = FALSE;
		BOOL bConvert;
		CHAR szFormatString[2048];
		//format name
		pScene->FormatMissionString( pDialog->szMissionName, szFormatString, pHuman, &Mis, pData, pReward, bConvert );
		if( bConvert )
		{
			msg.SetMissionName( szFormatString );
			bSend = TRUE;
		}
		//format desc
		pScene->FormatMissionString( pDialog->szMissionDesc, szFormatString, pHuman, &Mis, pData, pReward, bConvert );
		if( bConvert )
		{
			msg.SetMissionDesc( szFormatString );
			bSend = TRUE;
		}
		//format target
		pScene->FormatMissionString( pDialog->szMissionTarget, szFormatString, pHuman, &Mis, pData, pReward, bConvert );
		if( bConvert )
		{
			msg.SetMissionTarget( szFormatString );
			bSend = TRUE;
		}

		if( bSend )
		{
			pGamePlayer->SendPacket(&msg);
		}
	}

	return PACKET_EXE_CONTINUE ;

__LEAVE_FUNCTION

	return PACKET_EXE_ERROR ;

}