Example #1
0
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);
}
Example #2
0
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);
	}
}