Esempio n. 1
0
void XSpotPrivateRaid::Serialize( XArchive& ar )
{
	XBREAK( m_listEnterEnemy.empty() && GetspLegion() );
	// 적군단
	if( ar.IsForDB() ) {
		// db저장시에는 적군단 정보를 저장하지 않는다. 출전리스트가 있으므로.
		DestroyLegion();	
	}
	//
	XSpot::Serialize( ar );
	//
	// 플레이어 군단
	ar << m_legionDatPlayer;
	// 플레이어측 전체 출전영웅
	ar << m_listEnterPlayer;
	if( !ar.IsForDB() ) {
		// 랜덤목록이므로 DB에 저장하지 않는다.
		// 적부대추가 출전인원 
		// 본 부대외에 추가 영웅들 리스트를 풀버전으로 보낸다.
		SerializeEnterEnemy( ar );
	} else {
		ar << 0;
	}
	ar << (char)m_numWins;
	ar << (char)0;
	ar << (char)0;
	ar << (char)0;
	ar << m_secTimer;

}
Esempio n. 2
0
int XCampObjHero3::Serialize( XArchive& ar )
{
	XLOCK_OBJ;
	XCampObjBase::Serialize( ar );
	int sizeOld = ar.size();
	XBREAK( m_aryStages[0].size() > 0x7f );
	XBREAK( m_idxLastUnlock > 0x7f );
	//XBREAK( m_idxLastPlay > 0x7f );
	const int numFloor = m_aryStages.size();
	ar << (char)m_aryStages[0].size();		// 모든층은 스테이지 수가 똑같다고 가정.
	ar << (char)m_idxLastUnlock;
	ar << (char)numFloor; //m_idxLastPlay;
	ar << (char)m_cntTry;
	ar << m_timerOpen;
	for( auto& aryStages : m_aryStages ) {
		for( auto& spStageObj : aryStages ) {
			int size2 = ar.size();
			XArchive arStage;
			arStage.SetbForDB( ar.IsForDB() );
			spStageObj->Serialize( arStage );
			ar << arStage;			// 만약 스테이지가 사라지거나 해서 통째로 건너뛰려고 이렇게 함.
			int size22 = ar.size() - size2;
			//		TRACE("%d", size22 );
		}
	}
	int size = ar.size() - sizeOld;
	XBREAK( ar.IsForDB() && size >= 8000 );	
	ar << (short)m_idxFloorByOpen;
	ar << (short)0;
	return 1;
}
Esempio n. 3
0
int XCampObjCommon::Serialize( XArchive& ar )
{
	XLOCK_OBJ;
	XCampObjBase::Serialize( ar );
	int sizeOld = ar.size();
	// strIdentifier는 용량때문에 생략하고 idProp으로 대체
// 	ar << VER_CAMP_SERIALIZE;
// 	if( XBREAK( m_pProp == nullptr ) )
// 		return 0;
// 	ar << m_pProp->idProp;
// 	ar << m_snCampaign;
	XBREAK( m_aryStages[0].size() > 0x7f );
	XBREAK( m_idxLastUnlock > 0x7f );
	//XBREAK( m_idxLastPlay > 0x7f );
	ar << (char)m_aryStages[0].size();		// 모든층은 스테이지 수가 똑같다고 가정.
	ar << (char)m_idxLastUnlock;
	ar << (char)0; //m_idxLastPlay;
	ar << (char)m_cntTry;
	ar << m_idAccTrying;
	ar << m_strTryer;
	ar << m_timerEnter;
	ar << m_timerOpen;
	XBREAK( m_Grade > 0x7f );
	ar << (char)m_Grade;
	ar << (char)0;
	ar << (char)0;
	const int numFloor = m_aryStages.size();
	ar << (char)numFloor;
	for( auto& aryStages : m_aryStages ) {
		for( auto& spStageObj : aryStages ) {
			int size2 = ar.size();
			XArchive arStage;
			arStage.SetbForDB( ar.IsForDB() );
			spStageObj->Serialize( arStage );
			ar << arStage;			// 만약 스테이지가 사라지거나 해서 통째로 건너뛰려고 이렇게 함.
			int size22 = ar.size() - size2;
	//		TRACE("%d", size22 );
		}
	}
	int size = ar.size() - sizeOld;
	XBREAK( ar.IsForDB() && size >= 8000 );
	return 1;
}
Esempio n. 4
0
int XCampObjCommon::sSerialize( XSPCampObjCommon& spCampObj,  XArchive& ar )
{
	if( spCampObj == nullptr ) {
		ar << 0;
		return 1;
	}
	ar << (BYTE)VER_CAMP_SERIALIZE;
	ar << (BYTE)spCampObj->GetType();
	ar << (BYTE)0;
	ar << (BYTE)0;
	ar << spCampObj->GetidProp();
	XArchive arCamp;	// 캠페인이 프로퍼티에서 없어질경우를 대비에 이렇게 함. 한꺼번에 건너뛰려고.
	arCamp.SetbForDB( ar.IsForDB() );
	spCampObj->Serialize( arCamp );
	ar << arCamp;
	return 1;
}
Esempio n. 5
0
File: XSpot.cpp Progetto: xahgo/tama
void XSpot::Serialize( XArchive& ar ) 
{
	ar << (BYTE)m_typeSpot;
	XBREAK( m_Level > 255 );
	ar << (BYTE)m_Level;
	XBREAK( m_Score > 0xffff );
	ar << (WORD)m_Score;
	ar << m_snSpot;
	m_timerSpawn.Serialize( ar );
	ar << (BYTE)xboolToByte(m_bDestroy);
	ar << (BYTE)(*((BYTE*)(&m_bitFlag)));
	XBREAK( GetpBaseProp()->idSpot > 0xffff );
	ar << (WORD)GetpBaseProp()->idSpot;
	XBREAK( m_aryDropItems.size() > 10 );
	ar << m_aryDropItems;
	ar << m_Power;
	int num = 0;
	for( auto loot : m_aryLoots )
		if( loot != 0 )
			++num;
	XBREAK( m_numLose > 0xff );
	XBREAK( m_Difficult <= -128 || m_Difficult >= 128 );
	ar << (BYTE)m_numLose;
	ar << (char)m_Difficult;
	ar << (BYTE)0;
	ar << (BYTE)num;
	XBREAK( m_aryLoots.size() > XGAME::xRES_MAX );
	int idx = 0;
	for( auto loot : m_aryLoots ) {
		if( loot != 0 ) {
			ar << idx;
			ar << loot;
		}
		++idx;
	}
	int size = 0;
	// 패킷 최적화 대상. 군단정보는 꼭 필요할때만 보내도록 최적화 해야함.
	if( m_spLegion != nullptr && ar.IsForDB() == false ) {
		int sizeOld = ar.size();
		m_spLegion->SerializeFull( ar );
		size = ar.size() - sizeOld;
		XTRACE("size legion=%d", size );
	} else
		ar << 0;
}
Esempio n. 6
0
/**
 @brief 영웅캠페인은 스테이지가 많으므로 이걸 전부 DB에 저장할필요는 없다.
*/
int XStageObjHero2::Serialize( XArchive& ar )
{
	XLOCK_OBJ;
	ar << (char)GetnumClear();
	ar << (char)GetnumStar();
	ar << (short)0;
	if( ar.IsForDB() ) {
		// DB저장시엔 모든정보를 저장할필요는 없다.
		ar << (int)0;
	} else {
		ar << m_idHero;
		ar << GetPower();
		ar << (char)GetLevelLegion();
		ar << (char)0;
		ar << (short)0;
	}
	return 1;
}