Clients inform server on wielded item

This is done with the new TOSERVER_PLAYERITEM message, that informs the
server on the index of the wielded item.
This commit is contained in:
Giuseppe Bilotta 2011-08-10 21:43:40 +02:00
parent 91d1186cbb
commit ecd5c5f920
4 changed files with 42 additions and 0 deletions

@ -1864,6 +1864,28 @@ void Client::sendPlayerPos()
Send(0, data, false); Send(0, data, false);
} }
void Client::sendPlayerItem(u16 item)
{
Player *myplayer = m_env.getLocalPlayer();
if(myplayer == NULL)
return;
u16 our_peer_id = m_con.GetPeerID();
// Set peer id if not set already
if(myplayer->peer_id == PEER_ID_INEXISTENT)
myplayer->peer_id = our_peer_id;
// Check that an existing peer_id is the same as the connection's
assert(myplayer->peer_id == our_peer_id);
SharedBuffer<u8> data(2+2);
writeU16(&data[0], TOSERVER_PLAYERITEM);
writeU16(&data[2], item);
// Send as reliable
Send(0, data, true);
}
void Client::removeNode(v3s16 p) void Client::removeNode(v3s16 p)
{ {
//JMutexAutoLock envlock(m_env_mutex); //bulk comment-out //JMutexAutoLock envlock(m_env_mutex); //bulk comment-out
@ -1959,6 +1981,8 @@ void Client::selectPlayerItem(u16 item)
assert(player != NULL); assert(player != NULL);
player->wieldItem(item); player->wieldItem(item);
sendPlayerItem(item);
} }
// Returns true if the inventory of the local player has been // Returns true if the inventory of the local player has been

@ -318,6 +318,8 @@ private:
void sendPlayerPos(); void sendPlayerPos();
// This sends the player's current name etc to the server // This sends the player's current name etc to the server
void sendPlayerInfo(); void sendPlayerInfo();
// Send the item number 'item' as player item to the server
void sendPlayerItem(u16 item);
float m_packetcounter_timer; float m_packetcounter_timer;
float m_connection_reinit_timer; float m_connection_reinit_timer;

@ -301,6 +301,14 @@ enum ToServerCommand
[30] u8[28] new password [30] u8[28] new password
*/ */
TOSERVER_PLAYERITEM=0x37,
/*
Sent to change selected item.
[0] u16 TOSERVER_PLAYERITEM
[2] u16 item
*/
}; };
inline SharedBuffer<u8> makePacket_TOCLIENT_TIME_OF_DAY(u16 time) inline SharedBuffer<u8> makePacket_TOCLIENT_TIME_OF_DAY(u16 time)

@ -3381,6 +3381,14 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
<<std::endl; <<std::endl;
SendChatMessage(peer_id, L"Password change successful"); SendChatMessage(peer_id, L"Password change successful");
} }
else if (command == TOSERVER_PLAYERITEM)
{
if (datasize < 2+2)
return;
u16 item = readU16(&data[2]);
player->wieldItem(item);
}
else else
{ {
derr_server<<"WARNING: Server::ProcessData(): Ignoring " derr_server<<"WARNING: Server::ProcessData(): Ignoring "