steam friend/block info on remote players structures
authorhgn <hgodden00@gmail.com>
Wed, 8 Nov 2023 07:56:59 +0000 (07:56 +0000)
committerhgn <hgodden00@gmail.com>
Wed, 8 Nov 2023 07:56:59 +0000 (07:56 +0000)
gameserver.c
network.c
network_msg.h
player_remote.c
player_remote.h

index b1058bb99ec56b243f1377622210c48027ddd9bb..9ac4b2f05ef3bbed94ee7e207058d11ddae88c54 100644 (file)
@@ -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;
 
index 786250605d56d0d78e378c32bbf62c5fd98c950f..9bf240046db3c20d02ba3c44669a32223286ae31 100644 (file)
--- 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; 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){
index d06494acfaa99e6574a4052ff1c106d9814445d7..46aeab4115fe50ff970929e337085f7bb2e46b47 100644 (file)
@@ -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;
index 8ab15e0a382de43d5c4b820c04d3b232da0441d2..2cc3d6bcd45afa6f473331794c2ceb70d63f1ba2 100644 (file)
@@ -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" );
index 021fcf5ff1db5b6cda5cb4550f20b86a18139651..4df9c32c6298b9b5ee75da4407c012531f8343c6 100644 (file)
@@ -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 */