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 {
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 } } }
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 } }
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; } }
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; }
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; }
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 } } } }
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 ); }
/*------------------------------------------------------------------------------------------------------------------------------------------------------------*/ 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