void NetCityResources::Unpacketize(uint16 id, uint8 *buf, uint16 size) { uint16 pos = 0; uint16 packid; PULLID(packid); Assert(packid == k_PACKET_RESOURCES_ID); Unit city; PULLLONGTYPE(city, Unit); Assert(g_theUnitPool->IsValid(city)); if(!g_theUnitPool->IsValid(city)) return; m_cityData = city.AccessData()->GetCityData(); #ifdef CTP1_TRADE PULLLONG(m_cityData->m_resources.m_numGoods); PULLLONG(m_cityData->m_resources.m_totalResources); Assert(m_cityData->m_resources.m_numGoods == g_theResourceDB->NumRecords()); sint32 i; for(i = 0; i < m_cityData->m_resources.m_numGoods; i++) { PULLLONG(m_cityData->m_resources.m_supply[i]); } #endif Assert(pos == size); }
void NetCityBuildQueue::Unpacketize(uint16 id, uint8 *buf, uint16 size) { sint32 pos = 0; uint16 packid; PULLID(packid); Assert(packid == k_PACKET_CITY_BQ_ID); if(packid != k_PACKET_CITY_BQ_ID) return; Unit city; PULLLONGTYPE(city, Unit); Assert(g_theUnitPool->IsValid(city)); if(!g_theUnitPool->IsValid(city)) return; m_cityData = city.AccessData()->GetCityData(); m_cityData->m_build_queue.Clear(TRUE); sint32 len; PULLLONG(len); BuildNode *bn = NULL; for(sint32 i = 0; i < len; i++) { bn = new BuildNode; PULLLONG(bn->m_cost); PULLLONG(bn->m_type); PULLLONG(bn->m_category); PULLBYTE(bn->m_flags); m_cityData->m_build_queue.m_list->AddTail(bn); } if(g_network.IsHost()) { g_network.Block(m_cityData->m_owner); g_network.Enqueue(m_cityData); g_network.Unblock(m_cityData->m_owner); } }