struct gameserver_client *joiner = &gameserver.clients[index];
netmsg_playerjoin join = { .inetmsg_id = k_inetmsg_playerjoin,
- .index = index };
+ .index = index,
+ .steamid = joiner->steamid };
+
gameserver_send_to_all( index, &join, sizeof(join),
k_nSteamNetworkingSend_Reliable );
/* join */
netmsg_playerjoin init = { .inetmsg_id = k_inetmsg_playerjoin,
- .index = i };
+ .index = i,
+ .steamid = client->steamid };
gameserver_send_to_client( index, &init, sizeof(init),
k_nSteamNetworkingSend_Reliable );
return;
}
- netmsg_playerjoin leave;
+ netmsg_playerleave leave;
leave.inetmsg_id = k_inetmsg_playerleave;
leave.index = index;
network_send_username();
}
}
+
+ if( info->m_nChangeFlags & k_EPersonaChangeRelationshipChanged ){
+ for( u32 i=0; i<NETWORK_MAX_PLAYERS; i ++ ){
+ struct network_player *rp = &netplayers.list[i];
+ if( rp->steamid == info->m_ulSteamID ){
+ player_remote_update_friendflags( rp );
+ }
+ }
+ }
}
static void network_connect(void){
struct netmsg_playerjoin{
u16 inetmsg_id;
u8 index;
+ u64 steamid;
};
typedef struct netmsg_playerleave netmsg_playerleave;
}
}
+static void player_remote_update_friendflags( struct network_player *remote ){
+ ISteamFriends *hSteamFriends = SteamAPI_SteamFriends();
+ remote->isfriend = SteamAPI_ISteamFriends_HasFriend( hSteamFriends,
+ remote->steamid, k_EFriendFlagImmediate );
+ remote->isblocked = SteamAPI_ISteamFriends_HasFriend( hSteamFriends,
+ remote->steamid, k_EFriendFlagBlocked );
+}
+
static void player_remote_rx_200_300( SteamNetworkingMessage_t *msg ){
netmsg_blank *tmp = msg->m_pData;
struct network_player *player = &netplayers.list[ playerjoin->index ];
player_remote_clear( player );
player->active = 1;
+ player->steamid = playerjoin->steamid;
+ player_remote_update_friendflags( player );
/* TODO: interpret the uids */
player->board_view_slot = 0;
buf->frames[i].active = 0;
}
- vg_info( "#%u joined\n", playerjoin->index );
+ vg_info( "#%u joined friend: %d, blocked: %d\n",
+ playerjoin->index, player->isfriend, player->isblocked );
}
else {
vg_error( "inetmsg_playerjoin: player index out of range\n" );
struct {
struct network_player {
- int active;
+ int active, isfriend, isblocked;
+ u64 steamid;
u16 board_view_slot, playermodel_view_slot;
enum player_subsystem subsystem;
static void animate_remote_player( u32 index );
static void render_remote_players( world_instance *world, camera *cam );
static void relink_all_remote_player_worlds(void);
+static void player_remote_update_friendflags( struct network_player *remote );
#endif /* PLAYER_REMOTE_H */