- int client_id = gameserver_client_index( msg->m_conn );
- if( client_id != -1 ){
- struct gameserver_client *client = &gameserver.clients[ client_id ];
- netmsg_playerusername *src = msg->m_pData;
-
- vg_strncpy( src->username, client->username, sizeof(client->username),
- k_strncpy_always_add_null );
-
- /* update other users about this change */
- netmsg_playerusername msg;
- memset( &msg, 0, sizeof(msg) );
- msg.inetmsg_id = k_inetmsg_playerusername;
- msg.index = client_id;
- vg_strncpy( client->username, msg.username, sizeof(msg.username),
- k_strncpy_always_add_null );
-
- gameserver_send_to_all( client_id, &msg, sizeof(msg),
- k_nSteamNetworkingSend_Reliable );
- }
+ struct gameserver_client *client = &gameserver.clients[ client_id ];
+ netmsg_playerusername *src = msg->m_pData;
+
+ u32 name_len = network_msgstring( src->name, msg->m_cbSize,
+ sizeof(netmsg_playerusername),
+ client->username,
+ NETWORK_USERNAME_MAX );
+
+ /* update other users about this change */
+ netmsg_playerusername *prop = alloca(sizeof(netmsg_playerusername)+
+ NETWORK_USERNAME_MAX );
+
+ prop->inetmsg_id = k_inetmsg_playerusername;
+ prop->index = client_id;
+ u32 chs = vg_strncpy( client->username, prop->name, name_len,
+ k_strncpy_always_add_null );
+
+ vg_info( "client #%d changed name to: %s\n", client_id,
+ client->username );
+
+ u32 propsize = sizeof(netmsg_playerusername) + chs + 1;
+ gameserver_send_to_all( client_id, prop, propsize,
+ k_nSteamNetworkingSend_Reliable );
+ }
+ else if( tmp->inetmsg_id == k_inetmsg_playerframe ){
+ /* propogate */
+ netmsg_playerframe *frame = alloca(msg->m_cbSize);
+ memcpy( frame, msg->m_pData, msg->m_cbSize );
+ frame->client = client_id;
+ gameserver_send_to_all( client_id, frame, msg->m_cbSize,
+ k_nSteamNetworkingSend_Unreliable );
+ }
+ else if( tmp->inetmsg_id == k_inetmsg_playeritem ){
+ netmsg_playeritem *item = alloca(msg->m_cbSize);
+ memcpy( item, msg->m_pData, msg->m_cbSize );
+ item->client = client_id;
+
+ vg_info( "Client #%u equiped: [%u] %s\n",
+ item->client, item->type, item->uid );
+
+ gameserver_send_to_all( client_id, item, msg->m_cbSize,
+ k_nSteamNetworkingSend_Reliable );