From d19c8b815dc137ea4c19e5f5a54c40693059b455 Mon Sep 17 00:00:00 2001 From: RealBadAngel Date: Fri, 19 Jul 2013 19:50:33 +0200 Subject: Add set_breath and get_breath to lua API. --- src/server.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'src/server.cpp') diff --git a/src/server.cpp b/src/server.cpp index 955858c70..3bba193da 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1139,6 +1139,13 @@ void Server::AsyncRunStep() SendPlayerHP(client->peer_id); } + /* + Send player breath if changed + */ + if(playersao->m_breath_not_sent){ + SendPlayerBreath(client->peer_id); + } + /* Send player inventories if necessary */ @@ -2105,6 +2112,9 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) if(g_settings->getBool("enable_damage")) SendPlayerHP(peer_id); + // Send Breath + SendPlayerBreath(peer_id); + // Send detached inventories sendDetachedInventories(peer_id); @@ -2583,6 +2593,13 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) SendPlayerHP(peer_id); } } + else if(command == TOSERVER_BREATH) + { + std::string datastring((char*)&data[2], datasize-2); + std::istringstream is(datastring, std::ios_base::binary); + u16 breath = readU16(is); + playersao->setBreath(breath); + } else if(command == TOSERVER_PASSWORD) { /* @@ -3326,6 +3343,21 @@ void Server::SendHP(con::Connection &con, u16 peer_id, u8 hp) con.Send(peer_id, 0, data, true); } +void Server::SendBreath(con::Connection &con, u16 peer_id, u16 breath) +{ + DSTACK(__FUNCTION_NAME); + std::ostringstream os(std::ios_base::binary); + + writeU16(os, TOCLIENT_BREATH); + writeU16(os, breath); + + // Make data buffer + std::string s = os.str(); + SharedBuffer data((u8*)s.c_str(), s.size()); + // Send as reliable + con.Send(peer_id, 0, data, true); +} + void Server::SendAccessDenied(con::Connection &con, u16 peer_id, const std::wstring &reason) { @@ -3755,6 +3787,15 @@ void Server::SendPlayerHP(u16 peer_id) SendHP(m_con, peer_id, playersao->getHP()); } +void Server::SendPlayerBreath(u16 peer_id) +{ + DSTACK(__FUNCTION_NAME); + PlayerSAO *playersao = getPlayerSAO(peer_id); + assert(playersao); + playersao->m_breath_not_sent = false; + SendBreath(m_con, peer_id, playersao->getBreath()); +} + void Server::SendMovePlayer(u16 peer_id) { DSTACK(__FUNCTION_NAME); -- cgit v1.2.3