X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fclient.cpp;h=f9908ad2cbdc6d5f1b1625523e02080a9738d21e;hb=c8930850e37dab9820049152a3e668a315a97560;hp=929ed0eabdab48358a9c20841b164f802e4e47cd;hpb=bda62bd3bf7f41a25f2c6294ddc0ec144081e3ef;p=dragonfireclient.git diff --git a/src/client.cpp b/src/client.cpp index 929ed0eab..f9908ad2c 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -250,7 +250,7 @@ void * MediaFetchThread::Thread() m_file_data.push_back(make_pair(i->name, data)); } else { m_failed.push_back(*i); - infostream << "cURL request failed for " << i->name << std::endl; + infostream << "cURL request failed for " << i->name << " (" << curl_easy_strerror(res) << ")"<< std::endl; } curl_easy_cleanup(curl); } @@ -271,7 +271,8 @@ Client::Client( IWritableItemDefManager *itemdef, IWritableNodeDefManager *nodedef, ISoundManager *sound, - MtEventManager *event + MtEventManager *event, + bool ipv6 ): m_tsrc(tsrc), m_shsrc(shsrc), @@ -287,7 +288,7 @@ Client::Client( device->getSceneManager(), tsrc, this, device ), - m_con(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, this), + m_con(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, ipv6, this), m_device(device), m_server_ser_ver(SER_FMT_VER_INVALID), m_playeritem(0), @@ -319,12 +320,6 @@ Client::Client( m_playerpos_send_timer = 0.0; m_ignore_damage_timer = 0.0; - // Build main texture atlas, now that the GameDef exists (that is, us) - if(g_settings->getBool("enable_texture_atlas")) - m_tsrc->buildMainAtlas(this); - else - infostream<<"Not building texture atlas."< data(2+1+PLAYERNAME_SIZE+PASSWORD_SIZE+2+2); writeU16(&data[0], TOSERVER_INIT); - writeU8(&data[2], SER_FMT_VER_HIGHEST); + writeU8(&data[2], SER_FMT_VER_HIGHEST_READ); memset((char*)&data[3], 0, PLAYERNAME_SIZE); snprintf((char*)&data[3], PLAYERNAME_SIZE, "%s", myplayer->getName()); @@ -692,9 +692,14 @@ void Client::step(float dtime) m_client_event_queue.push_back(event); } } + else if(event.type == CEE_PLAYER_BREATH) + { + u16 breath = event.player_breath.amount; + sendBreath(breath); + } } } - + /* Print some info */ @@ -757,6 +762,8 @@ void Client::step(float dtime) // Replace with the new mesh block->mesh = r.mesh; + } else { + delete r.mesh; } if(r.ack_block_to_server) { @@ -795,7 +802,8 @@ void Client::step(float dtime) all_stopped &= !(*thread)->IsRunning(); while (!(*thread)->m_file_data.empty()) { std::pair out = (*thread)->m_file_data.pop_front(); - ++m_media_received_count; + if(m_media_received_count < m_media_count) + m_media_received_count++; bool success = loadMedia(out.second, out.first); if(success){ @@ -1146,8 +1154,7 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) infostream<<"Client: TOCLIENT_INIT received with " "deployed="<<((int)deployed&0xff)< SER_FMT_VER_HIGHEST) + if(!ser_ver_supported(deployed)) { infostream<<"Client: TOCLIENT_INIT: Server sent " <<"unsupported ser_fmt_ver"<deSerialize(istr, ser_version, false); + block->deSerializeNetworkSpecific(istr); } else { @@ -1301,6 +1309,7 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) //infostream<<"Creating new"<deSerialize(istr, ser_version, false); + block->deSerializeNetworkSpecific(istr); sector->insertBlock(block); } @@ -1576,6 +1585,15 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) m_client_event_queue.push_back(event); } } + else if(command == TOCLIENT_BREATH) + { + std::string datastring((char*)&data[2], datasize-2); + std::istringstream is(datastring, std::ios_base::binary); + Player *player = m_env.getLocalPlayer(); + assert(player != NULL); + u16 breath = readU16(is); + player->setBreath(breath) ; + } else if(command == TOCLIENT_MOVE_PLAYER) { std::string datastring((char*)&data[2], datasize-2); @@ -1729,15 +1747,9 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) } else if(command == TOCLIENT_MEDIA) { - if (m_media_count == 0) - return; std::string datastring((char*)&data[2], datasize-2); std::istringstream is(datastring, std::ios_base::binary); - // Mesh update thread must be stopped while - // updating content definitions - assert(!m_mesh_update_thread.IsRunning()); - /* u16 command u16 total number of file bunches @@ -1752,11 +1764,31 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id) */ int num_bunches = readU16(is); int bunch_i = readU16(is); - int num_files = readU32(is); + u32 num_files = readU32(is); infostream<<"Client: Received files: bunch "< data((u8*)s.c_str(), s.size()); + // Send as reliable + Send(0, data, true); +} + void Client::sendRespawn() { DSTACK(__FUNCTION_NAME); @@ -2656,6 +2719,13 @@ u16 Client::getHP() return player->hp; } +u16 Client::getBreath() +{ + Player *player = m_env.getLocalPlayer(); + assert(player != NULL); + return player->getBreath(); +} + bool Client::getChatMessage(std::wstring &message) { if(m_chat_queue.size() == 0) @@ -2823,12 +2893,8 @@ void Client::afterContentReceived(IrrlichtDevice *device, gui::IGUIFont* font) infostream<<"- Rebuilding images and textures"<rebuildImagesAndTextures(); - // Update texture atlas - infostream<<"- Updating texture atlas"<getBool("enable_texture_atlas")) - m_tsrc->buildMainAtlas(this); - // Rebuild shaders + infostream<<"- Rebuilding shaders"<rebuildShaders(); // Update node aliases