From 4bf136afb77a4c2937952b9152165f1ddcd2da9d Mon Sep 17 00:00:00 2001 From: hgn Date: Wed, 8 Nov 2023 07:56:59 +0000 Subject: [PATCH] steam friend/block info on remote players structures --- gameserver.c | 9 ++++++--- network.c | 9 +++++++++ network_msg.h | 1 + player_remote.c | 13 ++++++++++++- player_remote.h | 4 +++- 5 files changed, 31 insertions(+), 5 deletions(-) diff --git a/gameserver.c b/gameserver.c index b1058bb..9ac4b2f 100644 --- a/gameserver.c +++ b/gameserver.c @@ -61,7 +61,9 @@ static void gameserver_player_join( int index ){ 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 ); @@ -84,7 +86,8 @@ static void gameserver_player_join( int index ){ /* 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 ); @@ -119,7 +122,7 @@ static void gameserver_player_leave( int index ){ return; } - netmsg_playerjoin leave; + netmsg_playerleave leave; leave.inetmsg_id = k_inetmsg_playerleave; leave.index = index; diff --git a/network.c b/network.c index 7862506..9bf2400 100644 --- a/network.c +++ b/network.c @@ -340,6 +340,15 @@ static void on_persona_state_change( CallbackMsg_t *msg ){ network_send_username(); } } + + if( info->m_nChangeFlags & k_EPersonaChangeRelationshipChanged ){ + for( u32 i=0; isteamid == info->m_ulSteamID ){ + player_remote_update_friendflags( rp ); + } + } + } } static void network_connect(void){ diff --git a/network_msg.h b/network_msg.h index d06494a..46aeab4 100644 --- a/network_msg.h +++ b/network_msg.h @@ -61,6 +61,7 @@ enum{ k_inetmsg_playerjoin = 201 }; struct netmsg_playerjoin{ u16 inetmsg_id; u8 index; + u64 steamid; }; typedef struct netmsg_playerleave netmsg_playerleave; diff --git a/player_remote.c b/player_remote.c index 8ab15e0..2cc3d6b 100644 --- a/player_remote.c +++ b/player_remote.c @@ -58,6 +58,14 @@ static void relink_all_remote_player_worlds(void){ } } +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; @@ -69,6 +77,8 @@ static void player_remote_rx_200_300( SteamNetworkingMessage_t *msg ){ 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; @@ -80,7 +90,8 @@ static void player_remote_rx_200_300( SteamNetworkingMessage_t *msg ){ 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" ); diff --git a/player_remote.h b/player_remote.h index 021fcf5..4df9c32 100644 --- a/player_remote.h +++ b/player_remote.h @@ -9,7 +9,8 @@ struct { struct network_player { - int active; + int active, isfriend, isblocked; + u64 steamid; u16 board_view_slot, playermodel_view_slot; enum player_subsystem subsystem; @@ -66,5 +67,6 @@ static void remote_player_send_playerframe(void); 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 */ -- 2.25.1