void CGlobalGiftbox::OnQuery( CDPMng<CBuffer>* pdp, CAr & ar, DPID dpid ) // recv & check & save { u_long idPlayer; DWORD dwGiftbox, dwItem, dwObjId; int nNum, nQueryGiftbox; ar >> idPlayer >> dwGiftbox >> dwItem >> nNum >> dwObjId >> nQueryGiftbox; map<DWORD, int>::iterator i = m_map.find( MAKELONG( (WORD)dwGiftbox, (WORD)dwItem ) ); if( i == m_map.end() ) { Error( "CGlobalGiftbox::OnQuery: key not found, g: %d, i: %d", dwGiftbox, dwItem ); return; } BOOL bResult = FALSE; if( i->second > 0 ) { i->second--; bResult = TRUE; } CAr arResult; arResult << PACKETTYPE_QUERYGLOBALGIFTBOX; arResult << idPlayer << dwGiftbox << dwItem << nNum << dwObjId << nQueryGiftbox << bResult; int nBufSize; LPBYTE lpBuf = arResult.GetBuffer( &nBufSize ); pdp->Send( lpBuf, nBufSize, dpid ); Save(); }
void CPartyMng::Serialize( CAr & ar ) { #ifndef __WORLDSERVER m_AddRemoveLock.Enter( theLineFile ); // lock1 #endif // __WORLDSERVER if( ar.IsStoring() ) { ar << m_id; int nCount = 0; u_long uOffset = ar.GetOffset(); ar << nCount; for( C2PartyPtr::iterator i = m_2PartyPtr.begin(); i != m_2PartyPtr.end(); ++i ) { CParty* pParty = (CParty*)i->second; pParty->Serialize( ar ); nCount++; } int nBufSize1; LPBYTE lpBuf1 = ar.GetBuffer( &nBufSize1 ); *(UNALIGNED int*)( lpBuf1 + uOffset ) = nCount; } else { int nCount; ar >> m_id; ar >> nCount; for( int i = 0 ; i < nCount ; i++ ) { CParty* pParty = new CParty; // pParty->Lock(); pParty->Serialize( ar ); m_2PartyPtr.insert( C2PartyPtr::value_type( pParty->m_uPartyId, pParty ) ); // pParty->Unlock(); } } #ifndef __WORLDSERVER m_AddRemoveLock.Leave( theLineFile ); // unlock1 #endif // __WORLDSERVER }
void CUserTaskBar::Serialize( CAr &ar ) { if( ar.IsStoring() ) { int nCount = 0; u_long uOffset = ar.GetOffset(); ar << nCount; for( int i = 0; i < MAX_SLOT_APPLET; i++ ) { if( m_aSlotApplet[i].m_dwShortcut != SHORTCUT_NONE ) // 값이 들어있는지 검사 { ar << i; ar << m_aSlotApplet[i].m_dwShortcut << m_aSlotApplet[i].m_dwId << m_aSlotApplet[i].m_dwType; ar << m_aSlotApplet[i].m_dwIndex << m_aSlotApplet[i].m_dwUserId << m_aSlotApplet[i].m_dwData; if( m_aSlotApplet[i].m_dwShortcut == SHORTCUT_CHAT) ar.WriteString( m_aSlotApplet[i].m_szString ); nCount++; } } int nBufSize; LPBYTE lpBuf = ar.GetBuffer( &nBufSize ); *(UNALIGNED int*)( lpBuf + uOffset ) = nCount; nCount = 0; uOffset = ar.GetOffset(); ar << nCount; for( i = 0; i < MAX_SLOT_ITEM_COUNT; i++ ) { for( int j = 0; j < MAX_SLOT_ITEM; j++ ) { if( m_aSlotItem[i][j].m_dwShortcut != SHORTCUT_NONE ) // 값이 들어있는지 검사 { ar << i << j; ar << m_aSlotItem[i][j].m_dwShortcut << m_aSlotItem[i][j].m_dwId << m_aSlotItem[i][j].m_dwType; ar << m_aSlotItem[i][j].m_dwIndex << m_aSlotItem[i][j].m_dwUserId << m_aSlotItem[i][j].m_dwData; if( m_aSlotItem[i][j].m_dwShortcut == SHORTCUT_CHAT) ar.WriteString( m_aSlotItem[i][j].m_szString ); nCount++; } // m_aSlotItem[i][j]이 유효한 숏컷이라면 // ar << i << j << m_aSlotItem[i][j]의 필요한 정보 저장 // if( m_aSlotItem[i][j].m_dwType == SHORTCUT_CHAT ) // ar.WriteString( } } lpBuf = ar.GetBuffer( &nBufSize ); *(UNALIGNED int*)( lpBuf + uOffset ) = nCount; nCount = 0; uOffset = ar.GetOffset(); ar << nCount; for( i = 0; i < MAX_SLOT_QUEUE; i++ ) { if( m_aSlotQueue[i].m_dwShortcut != SHORTCUT_NONE ) // 값이 들어있는지 검사 { ar << i; ar << m_aSlotQueue[i].m_dwShortcut << m_aSlotQueue[i].m_dwId << m_aSlotQueue[i].m_dwType; ar << m_aSlotQueue[i].m_dwIndex << m_aSlotQueue[i].m_dwUserId << m_aSlotQueue[i].m_dwData; nCount++; } // m_aSlotQueue[i]이 유효한 숏컷이라면 // ar << i << m_aSlotQueue[i]의 필요한 정보 저장 } ar << m_nActionPoint; lpBuf = ar.GetBuffer( &nBufSize ); *(UNALIGNED int*)( lpBuf + uOffset ) = nCount; } else { memset( m_aSlotApplet, 0, sizeof(m_aSlotApplet) ); memset( m_aSlotItem, 0, sizeof(m_aSlotItem) ); memset( m_aSlotQueue, 0, sizeof(m_aSlotQueue) ); int nCount, nIndex; ar >> nCount; // applet count for( int i = 0; i < nCount; i++ ) { ar >> nIndex; ar >> m_aSlotApplet[nIndex].m_dwShortcut >> m_aSlotApplet[nIndex].m_dwId >> m_aSlotApplet[nIndex].m_dwType; ar >> m_aSlotApplet[nIndex].m_dwIndex >> m_aSlotApplet[nIndex].m_dwUserId >> m_aSlotApplet[nIndex].m_dwData; if( m_aSlotApplet[nIndex].m_dwShortcut == SHORTCUT_CHAT) ar.ReadString( m_aSlotApplet[nIndex].m_szString, MAX_SHORTCUT_STRING ); // ar >> m_aSlotApplet[nIndex]에 아까 넣은 필요한 정보를 넣는다. } ar >> nCount; // slot item count int nIndex2; for( i = 0; i < nCount; i++ ) { ar >> nIndex >> nIndex2; // index ar >> m_aSlotItem[nIndex][nIndex2].m_dwShortcut >> m_aSlotItem[nIndex][nIndex2].m_dwId >> m_aSlotItem[nIndex][nIndex2].m_dwType; ar >> m_aSlotItem[nIndex][nIndex2].m_dwIndex >> m_aSlotItem[nIndex][nIndex2].m_dwUserId >> m_aSlotItem[nIndex][nIndex2].m_dwData; if( m_aSlotItem[nIndex][nIndex2].m_dwShortcut == SHORTCUT_CHAT) ar.ReadString( m_aSlotItem[nIndex][nIndex2].m_szString, MAX_SHORTCUT_STRING ); } ar >> nCount; for( i = 0; i < nCount; i++ ) { ar >> nIndex; ar >> m_aSlotQueue[nIndex].m_dwShortcut >> m_aSlotQueue[nIndex].m_dwId >> m_aSlotQueue[nIndex].m_dwType; ar >> m_aSlotQueue[nIndex].m_dwIndex >> m_aSlotQueue[nIndex].m_dwUserId >> m_aSlotQueue[nIndex].m_dwData; // ar >> m_aSlotQueue[nIndex]에 정보를 넣는다. } ar >> m_nActionPoint; } }