示例#1
0
void IBuff::SerializeLevel( CAr & ar )
{
	if( ar.IsStoring() )
	{
#ifdef __DBSERVER
		if( GetType() == BUFF_ITEM2 )
		{
			time_t t	= static_cast<time_t>( GetLevel() ) - time_null();
			ar << t;
		}
		else
		{
			ar << m_dwLevel;
		}
#else	// __DBSERVER
		ar << m_dwLevel;
#endif	// __DBSERVER
	}
	else
	{
#ifdef __DBSERVER
		if( GetType() == BUFF_ITEM2 )
		{
			time_t t;
			ar >> t;
			SetLevel( time_null() + t );
		}
		else
		{
示例#2
0
void CPocket::Serialize( CAr & ar )
{
    CItemContainer<CItemElem>::Serialize( ar );
    if( ar.IsStoring() )
    {
        ar << m_bExpired << m_tExpirationDate;
        if( m_tExpirationDate )
        {
            time_t	t	= m_tExpirationDate - time_null();
            ar << t;
        }
    }
    else
    {
        ar >> m_bExpired >> m_tExpirationDate;
        if( m_tExpirationDate )
        {
            time_t	t;
            ar >> t;
#ifdef __CLIENT
            m_tExpirationDate	= time_null() + t;
#endif	// __CLIENT
        }
    }
}
示例#3
0
void CPiercing::Serialize( CAr & ar )
{
	if( ar.IsStoring() )
	{
		ar << GetPiercingSize();
		int i; for( i = 0; i < GetPiercingSize(); i++ )
			ar << GetPiercingItem( i );
#if __VER >= 12 // __EXT_PIERCING
		ar << GetUltimatePiercingSize();
		for( i = 0; i < GetUltimatePiercingSize(); i++ )
			ar << GetUltimatePiercingItem( i );
#endif // __EXT_PIERCING
#if __VER >= 15 // __PETVIS
		ar << m_vtmPetVis.size();
		for( int i=0; i<(int)( m_vtmPetVis.size() ); i++ )
			ar << GetVisKeepTime( i ) - time_null();
#endif // __PETVIS
	}
	else
	{
		m_vPiercing.clear();
		size_t nSize;
		ar >> nSize;
		SetPiercingSize( nSize );
		size_t i;
		for(  i = 0; i < nSize; i++ )
		{
			DWORD dwItem;
			ar >> dwItem;
			SetPiercingItem( i, dwItem );
		}
#if __VER >= 12 // __EXT_PIERCING
		m_vUltimatePiercing.clear();
		ar >> nSize;
		SetUltimatePiercingSize( nSize );
		for( i = 0; i < nSize; i++ )
		{
			DWORD dwItem;
			ar >> dwItem;
			SetUltimatePiercingItem( i, dwItem );
		}
#endif // __EXT_PIERCING
#if __VER >= 15 // __PETVIS
		ar >> nSize;
		SetVisKeepTimeSize( nSize );
		for( i=0; i<nSize; i++ )
		{
			time_t tmTemp;
			ar >> tmTemp;
			SetVisKeepTime( i, tmTemp + time_null() );
		}
#endif // __PETVIS
	}
}
示例#4
0
void CHousingDBCtrl::Handler( LPDB_OVERLAPPED_PLUS pov, DWORD dwCompletionKey )
{
    CAr ar( pov->lpBuf, pov->uBufSize );

    switch( pov->nQueryMode )
    {
    case QUERY_HOUSING_LOAD:
    {
        DWORD dwPlayerId;
        ar >> dwPlayerId;

        LoadHousingInfo( dwPlayerId, dwCompletionKey );
    }
    break;

    case QUERY_HOUSING_INSERT_LIST:
    {
        DWORD dwPlayerId, dwItemId;
        ar >> dwPlayerId >> dwItemId;

        InsertFurnitureList( dwPlayerId, dwItemId, dwCompletionKey );
    }
    break;

    case QUERY_HOUSING_SETUP_FURNITURE:
    {
        DWORD dwPlayerId;
        HOUSINGINFO housingInfo;

        ar >> dwPlayerId;
        housingInfo.Serialize( ar );

        SetupFurniture( dwPlayerId, housingInfo, dwCompletionKey );
    }
    break;

    case QUERY_HOUSING_SET_VISITALLOW:
    {
        DWORD dwPlayerId, dwTargetId;
        BOOL bAllow;

        ar >> dwPlayerId >> dwTargetId >> bAllow;

        SetVisitAllow( dwPlayerId, dwTargetId, bAllow, dwCompletionKey );
    }
    break;

    case QUERY_HOUSING_GM_REMOVEALL:
    {
        DWORD dwPlayerId;
        ar >> dwPlayerId;
        CHousing* pHousing = CHousingMng::GetInstance()->GetHousing( dwPlayerId );
        if( pHousing )
            pHousing->ProcessExpiredFurniture( time_null(), TRUE );
    }
    break;
    }

}
示例#5
0
time_t	CPocketController::GetAvailable( int nPocket )
{
    if( IsAvailable( nPocket ) )
    {
        if( m_apPocket[nPocket]->GetExpirationDate() )
            return max( m_apPocket[nPocket]->GetExpirationDate() - time_null(), 0 );
    }
    return 0;
}
示例#6
0
BOOL CWndGHMainMenu::Process()
{
	CWndStatic* pEndTime   = (CWndStatic*)GetDlgItem( WIDC_STATIC2 );
	if( !pEndTime )
		return FALSE;

	time_t	t = (time_t)GuildHouse->GetUpkeepTime() - time_null();
	if(t < 0)	
	{
		pEndTime->SetTitle( GETTEXT( TID_GAME_GUILDHOUSE_EXPIRATION ) );
		return TRUE;
	}
		
	CTimeSpan	ts( t );
	static CString	strDays, strHours, strMins, strSecs;
	CString strBind;
	const CString strSpace = " ";

	if( ts.GetDays( ) )
	{
		strDays.Format( prj.GetText( TID_PK_LIMIT_DAY ), ts.GetDays() );
		strBind += ( strSpace + strDays );
	}
	if( ts.GetHours( ) )
	{
		strHours.Format( prj.GetText(TID_PK_LIMIT_HOUR ), ts.GetHours() );
		strBind += ( strSpace + strHours );
	}
	if( ts.GetMinutes( ) )
	{
		strMins.Format( prj.GetText(TID_PK_LIMIT_MINUTE ), ts.GetMinutes() );
		strBind += ( strSpace + strMins );
	}
	if( ts.GetSeconds( ) )
	{
		strSecs.Format( prj.GetText(TID_PK_LIMIT_SECOND ), ts.GetSeconds() );
		strBind += ( strSpace + strSecs );
	}

	pEndTime->SetTitle( strBind );

	return TRUE;
}
示例#7
0
void	CPocketController::ProcessExpiring( void )
{
    if( m_pMover->IsNPC() )
        return;
    CUser* pUser	= (CUser*)m_pMover;

    for( int i = 1; i < MAX_POCKET; i++ )
    {
        if( IsAvailable( i ) )
        {
            if( time_null() > m_apPocket[i]->GetExpirationDate() )
            {
                SetAttribute( expired, i, TRUE );
#ifdef __INTERNALSERVER
                pUser->AddPocketView();
#endif	// __INTERNAL_SERVER
            }
        }
    }
}
示例#8
0
void CPocketController::Avail( int nPocket, time_t t )
{
    time_t tCurrent		= time_null();
    if( m_apPocket[nPocket] )
    {
        if( m_apPocket[nPocket]->IsExpired() )
            m_apPocket[nPocket]->SetExpirationDate( tCurrent + t );
        else
            m_apPocket[nPocket]->SetExpirationDate( m_apPocket[nPocket]->GetExpirationDate() + t );
    }
    else
    {
        m_apPocket[nPocket]		= new CPocket;
        m_apPocket[nPocket]->SetItemContainer( 0, nPocket == 0? POCKET_SLOT_SIZE_0: POCKET_SLOT_SIZE_1_2 );
        m_apPocket[nPocket]->SetExpirationDate( tCurrent + t );
    }
    m_apPocket[nPocket]->SetExpired( FALSE );

    if( t == 0 )
        m_apPocket[nPocket]->SetExpirationDate( 0 );
}
void CGuildHouseDBCtrl::CreateGuildHouse( CAr & ar, DPID dpId )
{
	DWORD dwPlayerId, dwGuildId;
	ar >> dwPlayerId >> dwGuildId;
	
	BOOL bResult = FALSE;
	CQuery* pQuery = GetQueryObject();

	BEFORESENDDUAL( arCreate, PACKETTYPE_GUILDHOUSE_BUY, DPID_UNKNOWN, DPID_UNKNOWN );
	{
		arCreate << dwPlayerId << dwGuildId;
		CGuildHouseBase* pGuildHouse = GuildHouseMng->MakeGuildHouse( dwGuildId, WI_GUILDHOUSE_SMALL );
		if( pGuildHouse )
		{
			pGuildHouse->SetUpkeeptime( time_null() + ( UPKEEP_DAY_TIME * 7 ) );	// 기본 유지기간을 제공한다.
			if( pQuery->Execute( "usp_GuildHouse_Insert '%02d', '%06d', %d, %d", g_appInfo.dwSys, dwGuildId, WI_GUILDHOUSE_SMALL, pGuildHouse->GetUpkeepTime() ) // DB에 추가 성공
				&& GuildHouseMng->AddGuildHouse( dwGuildId, pGuildHouse ) )
			{
				arCreate << TRUE;
				dpId = DPID_ALLPLAYERS;	// 모든 월드 서버로 전송한다.
				GH_Fntr_Info gfi( II_GHOU_FUR_NPC_TELEPORTER, TRUE, pGuildHouse->GetTeleporterPos(), 0.0f, ( UPKEEP_DAY_TIME * 7 ) );
				if( ExcuteQuery( dwGuildId, pGuildHouse, GUILDHOUSE_PCKTTYPE_LISTUP, gfi, NULL_ID ) )
					pGuildHouse->OnGuildHousePacket( GUILDHOUSE_PCKTTYPE_LISTUP, gfi, NULL_ID );
				pGuildHouse->SerializeAllInfo( arCreate );
			}
			else
			{
				arCreate << FALSE;
				SAFE_DELETE( pGuildHouse );
			}
		}
		else
			arCreate << FALSE;
	}
	SEND( arCreate, CDPTrans::GetInstance(), dpId );
}
示例#10
0
/*------------------------------------------------------------------------------------------------------------------------------------------------------------*/
void CItemElem::Serialize( CAr & ar )	// 18
{
	CItemBase::Serialize( ar );
	if( ar.IsStoring() )
	{
		ar << m_nItemNum;
		ar << m_nRepairNumber << m_nHitPoint;
		ar << m_nRepair;
		ar << m_byFlag;
		ar << m_nAbilityOption;
		ar << m_idGuild;				// 길드번호도 저장.
		ar << m_bItemResist;			// 어느 속성 인가?
		ar << m_nResistAbilityOption ;	// 속성 추가 능력치 가변 옵션
		ar << m_nResistSMItemId;
		m_piercing.Serialize( ar );
		ar << m_bCharged;
#if __VER >= 11 // __SYS_IDENTIFY
		ar << m_iRandomOptItemId;
#else	// __SYS_IDENTIFY
		ar << m_nRandomOptItemId;
#endif	// __SYS_IDENTIFY
		ar << m_dwKeepTime;
		if( m_dwKeepTime )
		{
			time_t t	= m_dwKeepTime - time_null();
			ar << t;
		}
#if __VER >= 9	// __PET_0410
		if( m_pPet )
		{
			ar << (BYTE)0x01;
			m_pPet->Serialize( ar );
		}
		else
		{
			ar << (BYTE)0x00;
		}
#endif	// __PET_0410
#if __VER >= 15 // __PETVIS
		ar << m_bTranformVisPet;
#endif // __PETVIS
	}
	else
	{
		ar >> m_nItemNum;
		ar >> m_nRepairNumber ;
		ar >> m_nHitPoint;
		ar >> m_nRepair;
		ar >> m_byFlag;
		ar >> m_nAbilityOption;
		ar >> m_idGuild;		
		ar >> m_bItemResist;	
		ar >> m_nResistAbilityOption ;	
		ar >> m_nResistSMItemId;
//		memset( &m_piercingInfo, 0, sizeof(m_piercingInfo) );
		m_piercing.Serialize( ar );
		ar >> m_bCharged;
#if __VER >= 11 // __SYS_IDENTIFY
		ar >> m_iRandomOptItemId;
#else	// __SYS_IDENTIFY
		ar >> m_nRandomOptItemId;
#endif	// __SYS_IDENTIFY
		ar >> m_dwKeepTime;

		if( m_dwKeepTime ) 
		{
			time_t t;
			ar >> t;
		#ifdef __CLIENT
			m_dwKeepTime	= time_null() + t;
		#endif	// __CLIENT
		}
#if __VER >= 9	// __PET_0410
		SAFE_DELETE( m_pPet );
		BYTE bPet;
		ar >> bPet;
		if( bPet )
		{
			m_pPet	= new CPet;
			m_pPet->Serialize( ar );
		}
#endif	// __PET_0410
#if __VER >= 15 // __PETVIS
		ar >> m_bTranformVisPet;
#endif // __PETVIS

#ifdef __CLIENT
		SetTexture();
#endif
	}
}
void CSkillInfluence::Serialize( CAr & ar )
{
	int j, nMax = 0;
	DWORD	dwOdd;

	if( ar.IsStoring() )	// Saving
	{
		for( j = 0; j < MAX_SKILLINFLUENCE; j++ )		// 데이타 있는것만 개수 셈.
			if( m_aSkillInfluence[j].wID > 0 )
				nMax ++;

		ar << nMax;
		for( j = 0; j < MAX_SKILLINFLUENCE ; ++j )
		{
			if( m_aSkillInfluence[j].wID > 0 )
			{
				ar << m_aSkillInfluence[j].wType;
				ar << m_aSkillInfluence[j].wID;

#if __VER >= 11 // __SYS_COLLECTING
				if( m_aSkillInfluence[j].wType == BUFF_ITEM2 )
				{
					time_t t	= (time_t)m_aSkillInfluence[j].dwLevel - time_null();
					ar << t;
				}
				else
					ar << m_aSkillInfluence[j].dwLevel;
#else	// __SYS_COLLECTING
				ar << m_aSkillInfluence[j].dwLevel;
#endif	// __SYS_COLLECTING

#ifdef __WORLDSERVER			
				if( m_aSkillInfluence[j].tmCount )
				{
					if( m_aSkillInfluence[j].tmTime )
						dwOdd = m_aSkillInfluence[j].tmCount - (timeGetTime() - m_aSkillInfluence[j].tmTime);	// 남은시간 계산.
					else
						dwOdd = m_aSkillInfluence[j].tmCount;
				}
				else
					dwOdd = 0;
				if( (int)dwOdd < 0 )		dwOdd = 0;
				ar << dwOdd;		// 남은 시간을 저장.
#else // World
				ar << m_aSkillInfluence[j].tmCount;
#endif // not World
			}
		}
	} else
	// Loading
	{

		memset( m_aSkillInfluence, 0, sizeof(m_aSkillInfluence) );
#if __VER < 8 //__CSC_VER8_3
		m_pEmptyNode = NULL;
#endif //__CSC_VER8_3
		ar >> nMax;
		for( j = 0 ; j < nMax; ++j )		// 있는만큼만 부른다.
		{
			ar >> m_aSkillInfluence[j].wType;
			ar >> m_aSkillInfluence[j].wID;
#if __VER >= 11 // __SYS_COLLECTING
			if( m_aSkillInfluence[j].wType == BUFF_ITEM2 )
			{
				time_t t;
				ar >> t;
				m_aSkillInfluence[j].dwLevel	= time_null() + t;
			}
			else
				ar >> m_aSkillInfluence[j].dwLevel;
#else	// __SYS_COLLECTING
			ar >> m_aSkillInfluence[j].dwLevel;
#endif	// __SYS_COLLECTING
			ar >> dwOdd;
#ifdef __WORLDSERVER				
			BOOL bCharged = FALSE;
			if( m_aSkillInfluence[j].wType == BUFF_ITEM
#if __VER >= 11 // __SYS_COLLECTING
				|| m_aSkillInfluence[j].wType == BUFF_ITEM2
#endif	// __SYS_COLLECTING
				)
			{
				ItemProp *pItemProp = prj.GetItemProp( m_aSkillInfluence[j].wID );
				if( pItemProp )
				{
					if( pItemProp->bCharged ) // 상용화 아이템은 종료가 안되게 수정
						bCharged = TRUE;
				}
			}
#if __VER >= 9	// __PET_0410
			else if( m_aSkillInfluence[j].wType == BUFF_PET )
				bCharged	= TRUE;
#endif	// __PET_0410
#ifdef __DST_GIFTBOX
			else if( m_aSkillInfluence[j].wType == BUFF_EQUIP )
				bCharged	= TRUE;
#endif // __DST_GIFTBOX

			if( bCharged == FALSE && m_pMover && dwOdd >= MIN(61) )
			{
				Error( "SkillInflu::>Load : %s %d", m_pMover->GetName(), dwOdd );
				dwOdd = MIN(60);
			}
#endif //__WORLDSERVER
			m_aSkillInfluence[j].tmCount = dwOdd;			// 로딩했을때 남은시간을 로딩해서 세기 시작.
		} // for