From: hgn Date: Wed, 9 Jul 2025 14:42:16 +0000 (+0100) Subject: Update steamworks api X-Git-Url: https://harrygodden.com/git/?a=commitdiff_plain;h=ebf7eddb28e55c21dab2d32462ea8363382f3ee0;p=carveJwlIkooP6JGAAIwe30JlM.git Update steamworks api --- diff --git a/build.c b/build.c index 731bc10..7ef6139 100644 --- a/build.c +++ b/build.c @@ -12,6 +12,7 @@ #include "src/model.c" #include "src/array_file.c" + /* * Addon metadata utilities * -------------------------------------------------------------------------- */ @@ -254,7 +255,8 @@ void build_game_bin( struct vg_project *proj, struct vg_compiler_env *env ) .steam_api = 1, .use_3d = 1, .custom_game_settings = 0, - .custom_shaders = 1 + .custom_shaders = 1, + .multiplayer = 1 }, env, &conf, "src/client.c", "skaterift" ); @@ -299,17 +301,17 @@ void compile_server( struct vg_project *proj, struct vg_compiler_env *env ) #endif vg_str sources = {0}; - vg_strcat( &sources, "src/gameserver.c vg/vg_tool.c vg/vg_steam.c \\\n " ); + vg_strcat( &sources, "src/gameserver.c vg/vg_tool.c vg/vg_steam2.c \\\n " ); #if 0 vg_strcat( &sources, sqlite.path.buffer ); #endif struct vg_compiler_conf conf = {0}; vg_strcat( &conf.include, "-Isrc -I./dep " ); - vg_strcat( &conf.include, "-I. -I./vg -I./vg/dep -DVG_MULTITHREAD " ); + vg_strcat( &conf.include, "-I. -I./vg -I./vg/dep -DVG_MULTITHREAD -DVG_SERVER " ); vg_strcat( &conf.library, "-L./vg/dep/steam " ); - vg_strcat( &conf.link, "-ldl -lpthread -lm " - "-lsdkencryptedappticket -lsteam_api " ); + vg_strcat( &conf.link, "-ldl -lm " + "-lsteam_api -lsdkencryptedappticket -pthread " ); vg_add_blob( proj, "vg/dep/steam/libsteam_api.so", "" ); vg_add_blob( proj, "vg/dep/steam/libsdkencryptedappticket.so", "" ); @@ -467,7 +469,8 @@ void s_utest_build(void) .log_source_info = 1, .use_3d = 0, .custom_game_settings = 0, - .custom_shaders = 0 + .custom_shaders = 0, + .multiplayer = 0 }, env, &conf, "src/utest.c", "utest" ); diff --git a/src/2 b/src/2 deleted file mode 100644 index 4946ea0..0000000 --- a/src/2 +++ /dev/null @@ -1,85 +0,0 @@ -static bool _skaterift_script_valley( ent_script_event *event ) -{ - if( on_nugget_once( event, "ch4s1a_view" ) ) - { - /* ch4s1: Mike and you are first encountering the valley world */ - static const struct cs_subtitle EN[] = - { - { "m1", KCOL_MIKE "It's gotta be some kind of dream right?" }, - { "m2", KCOL_MIKE "I mean... Cambodia?" }, - { "m3", KCOL_MIKE "What are we even doing here?" }, - { NULL, NULL }, - }; - _cutscene_load_and_play( "metascenes/ch4s1a.ms", EN, 1 ); - } - - /* main region is completed (this is just the time trial as of 14.05.25, unlock ch4s2 */ - if( on_function_trigger( event, 27 ) ) - { - if( _skaterift_script_nugget_status( "ch4s2_view" ) == 0 ) - _skaterift_script_nugget_set( "ch4s2_view", 2 ); - } - - /* unlock the finale challenge stuff if we've seen ch4s1 (mike bails) */ - u64 status; - if( on_nugget_changed( event, "ch4s1_view", &status ) ) - { - _ent_list_set_visible( _ent_list_get_aliased( "finale:locked" ), status != 1 ); - _ent_list_set_visible( _ent_list_get_aliased( "finale:unlocked" ), status == 1 ); - } - - /* finale completed, trigger the exit movie */ - if( on_function_trigger( event, 21 ) ) - { - // TODOX1 - vg_success( "Exit for a movie\n" ); - } - - return 1; -} - -static bool _skaterift_script_ch4s2( ent_script_event *event ) -{ - /* ch4s2: Mike and you find the rocket, and talk to the FBI person. */ - u64 status; - if( on_nugget_changed( event, "ch4s2_view", &status ) ) - { - _ent_list_set_visible( event->entity_list, status == 2 ); - _ent_list_set_visible( _ent_list_get_aliased( "rocket" ), status >= 1 ); - } - - if( on_function_trigger( event, 0 ) ) - { - if( on_nugget_once( event, "ch4s2_view" ) ) - { - static const struct cs_subtitle EN[] = - { - { "m1", KCOL_MIKE "What the hell is that thing?" }, - { "f1", KCOL_FBI "Look man, all they told is that uhh" }, - { "f2", KCOL_FBI "they're sending you up to one of saturns moons.." }, - { "f3", KCOL_FBI "On that thing." }, - { "f4", KCOL_FBI "To help you on your mission." }, - { "f5", KCOL_FBI "You guys are more important than any person on earth right now" }, - { "f6", KCOL_FBI "According to the president." }, - { "f7", KCOL_FBI "But obviously this is some kind of joke I'm not in on." }, - { "f8", KCOL_FBI "I don't believe a word of it." }, - { NULL, NULL }, - }; - _cutscene_load_and_play( "metascenes/ch4s2.ms", EN, 1 ); - } - } - - return 1; -} - -static bool _skaterift_script_ch4s1( ent_script_event *event ) -{ - /* ch4s1: (Yes, this comes after ch4s2), Mike is leaving, because JC hasn't shown up anywhere. */ - return 1; -} - -static bool _skaterift_script_ch4s3( ent_script_event *event ) -{ - // on venus - return 1; -} diff --git a/src/addon.c b/src/addon.c index 2763abb..0ba31fe 100644 --- a/src/addon.c +++ b/src/addon.c @@ -4,7 +4,7 @@ #include "addon.h" #include "addon_types.h" #include "vg/vg_msg.h" -#include "steam.h" +#include "vg/vg_steam2.h" #include "workshop.h" #include @@ -704,25 +704,23 @@ void _mount_workshop_addons( vg_async_task *co_task ) return; } - if( !steam_ready ) + if( _steam_api.disabled ) return; - ISteamUGC *hSteamUGC = SteamAPI_SteamUGC(); - if( !co_task ) { vg_async_task *task = vg_allocate_async_task( &vg.loader_tasks, sizeof(struct workshop_scan_info), 1 ); struct workshop_scan_info *info = (void *)task->data; info->state = k_workshop_scan_state_filter_mounted; - u32 count = SteamAPI_ISteamUGC_GetSubscribedItems( hSteamUGC, info->workshop_ids, ADDON_MOUNTED_MAX ); + u32 count = SteamAPI_ISteamUGC_GetSubscribedItems( _steam_api.pSteamUGC, info->workshop_ids, ADDON_MOUNTED_MAX, 0 ); vg_info( "Found %u subscribed items\n", count ); u32 send_count = 0; for( u32 i=0; iworkshop_ids[i] ); + u32 state = SteamAPI_ISteamUGC_GetItemState( _steam_api.pSteamUGC, info->workshop_ids[i] ); if( !(state & k_EItemStateInstalled) ) continue; @@ -741,7 +739,7 @@ void _mount_workshop_addons( vg_async_task *co_task ) u64 _size; u32 _ts; - if( !SteamAPI_ISteamUGC_GetItemInstallInfo( hSteamUGC, co_info->workshop_ids[i], + if( !SteamAPI_ISteamUGC_GetItemInstallInfo( _steam_api.pSteamUGC, co_info->workshop_ids[i], &_size, path, sizeof(path), &_ts )) { vg_error( "GetItemInstallInfo failed for addon %lu\n", co_info->workshop_ids[i] ); @@ -766,10 +764,9 @@ bool addon_get_content_folder( addon_id addon_id, vg_str *folder ) addon_reg *reg = addon_details( addon_id ); if( reg->alias.steam_workshop_id ) { - ISteamUGC *hSteamUGC = SteamAPI_SteamUGC(); u64 _size; u32 _ts; - if( !SteamAPI_ISteamUGC_GetItemInstallInfo( hSteamUGC, reg->alias.steam_workshop_id, &_size, + if( !SteamAPI_ISteamUGC_GetItemInstallInfo( _steam_api.pSteamUGC, reg->alias.steam_workshop_id, &_size, folder->buffer, folder->len, &_ts )) { vg_error( "GetItemInstallInfo failed for addon %lu\n", reg->alias.steam_workshop_id ); diff --git a/src/addon.h b/src/addon.h index 5a3d6b9..8eaf7f3 100644 --- a/src/addon.h +++ b/src/addon.h @@ -1,5 +1,5 @@ #pragma once -#include "vg/vg_steam_ugc.h" +#include "vg/vg_steam2.h" #include "vg/vg_mem_pool.h" #include "vg/vg_string.h" #include "addon_types.h" diff --git a/src/client.h b/src/client.h index ab7c980..d11add9 100644 --- a/src/client.h +++ b/src/client.h @@ -9,7 +9,7 @@ struct game_client { - bool demo_mode, nosteam; + bool demo_mode; } extern g_client; diff --git a/src/ent_atom.c b/src/ent_atom.c index 5654ece..73b49fd 100644 --- a/src/ent_atom.c +++ b/src/ent_atom.c @@ -256,3 +256,28 @@ void _ent_atom_register(void) vg_console_reg_cmd( "atom", _ent_atom_ccmd, _ent_atom_ccmd_poll ); } +void _ent_atom_init(void) +{ + THREAD_0; + + if( _steam_api.disabled ) + return; + + bool set = 0; + if( SteamAPI_ISteamUserStats_GetAchievement( _steam_api.pSteamUserStats, "MARC", &set ) ) + { + if( set ) _atom_set( k_atom_list_global, "MARC", 1 ); + } + if( SteamAPI_ISteamUserStats_GetAchievement( _steam_api.pSteamUserStats, "ALBERT", &set ) ) + { + if( set ) _atom_set( k_atom_list_global, "ALBERT", 1 ); + } + if( SteamAPI_ISteamUserStats_GetAchievement( _steam_api.pSteamUserStats, "JANET", &set ) ) + { + if( set ) _atom_set( k_atom_list_global, "JANET", 1 ); + } + if( SteamAPI_ISteamUserStats_GetAchievement( _steam_api.pSteamUserStats, "BERNADETTA", &set ) ) + { + if( set ) _atom_set( k_atom_list_global, "BERNADETTA", 1 ); + } +} diff --git a/src/ent_atom.h b/src/ent_atom.h index 5620c1b..f8be7ed 100644 --- a/src/ent_atom.h +++ b/src/ent_atom.h @@ -24,3 +24,4 @@ void _atom_notify_list( enum e_atom_list list ); entity_event_result _ent_atom_event( ent_event *event ); void _ent_atom_register(void); +void _ent_atom_init(void); diff --git a/src/ent_objective.c b/src/ent_objective.c index 2372e9d..54e947c 100644 --- a/src/ent_objective.c +++ b/src/ent_objective.c @@ -2,7 +2,7 @@ #include "world_load.h" #include "entity.h" #include "audio.h" -#include "steam.h" +#include "vg/vg_steam2.h" #include "ent_region.h" #include "player.h" #include "player_skate.h" diff --git a/src/ent_region.c b/src/ent_region.c index aa3b273..2024ed6 100644 --- a/src/ent_region.c +++ b/src/ent_region.c @@ -128,23 +128,14 @@ void ent_region_re_eval( world_instance *world, bool init ) if( world_reg->flags & ADDON_REG_MTZERO ) { if( world_total & k_ent_route_flag_achieve_gold ) - { - steam_set_achievement( "MTZERO_GOLD" ); - steam_store_achievements(); - } + vg_steam_set_achievement( "MTZERO_GOLD", 1 ); if( world_total & k_ent_route_flag_achieve_silver ) - { - steam_set_achievement( "MTZERO_SILVER" ); - steam_store_achievements(); - } + vg_steam_set_achievement( "MTZERO_SILVER", 1 ); } else if( world_reg->flags & ADDON_REG_CITY ) { if( world_total & k_ent_route_flag_achieve_silver ) - { - steam_set_achievement( "CITY_COMPLETE" ); - steam_store_achievements(); - } + vg_steam_set_achievement( "CITY_COMPLETE", 1 ); } } diff --git a/src/ent_skateshop.c b/src/ent_skateshop.c index e5d2d35..1130fed 100644 --- a/src/ent_skateshop.c +++ b/src/ent_skateshop.c @@ -1,4 +1,4 @@ -#include "vg/vg_steam_ugc.h" +#include "vg/vg_steam2.h" #include "vg/vg_msg.h" #include "vg/vg_tex.h" #include "vg/vg_image.h" @@ -8,7 +8,6 @@ #include "player.h" #include "gui.h" #include "menu.h" -#include "steam.h" #include "addon.h" #include "save.h" #include "network.h" diff --git a/src/ent_skateshop.h b/src/ent_skateshop.h index 31dc963..fc5e304 100644 --- a/src/ent_skateshop.h +++ b/src/ent_skateshop.h @@ -2,7 +2,7 @@ #include "world.h" #include "world_load.h" #include "player.h" -#include "vg/vg_steam_remote_storage.h" +#include "vg/vg_steam2.h" #include "workshop.h" #include "addon.h" diff --git a/src/gameserver.c b/src/gameserver.c index 1d3d946..4bc06e2 100644 --- a/src/gameserver.c +++ b/src/gameserver.c @@ -3,7 +3,6 @@ */ #define _DEFAULT_SOURCE -#define VG_SERVER #include #include #include @@ -33,13 +32,10 @@ struct _gameserver _gameserver = static u64 const k_steamid_max = 0xffffffffffffffff; -ISteamNetworkingSockets *hSteamNetworkingSockets; -ISteamNetworkingUtils *hSteamNetworkingUtils; - static void segvhandler( int signum ) { fflush(NULL); - abort(); + exit(-1); } static void inthandler( int signum ) @@ -58,7 +54,7 @@ static void gameserver_send_to_client( i32 client_id, const void *pData, u32 cbD return; _gameserver.bytes_send += cbData; - SteamAPI_ISteamNetworkingSockets_SendMessageToConnection( hSteamNetworkingSockets, client->connection, + SteamAPI_ISteamNetworkingSockets_SendMessageToConnection( _steam_api.pSteamNetworkingSockets, client->connection, pData, cbData, nSendFlags, NULL ); } @@ -83,8 +79,7 @@ static void gameserver_send_version_to_client( int index ) netmsg_version version; version.inetmsg_id = k_inetmsg_version; version.version = NETWORK_SKATERIFT_VERSION; - SteamAPI_ISteamNetworkingSockets_SendMessageToConnection( - hSteamNetworkingSockets, client->connection, + SteamAPI_ISteamNetworkingSockets_SendMessageToConnection( _steam_api.pSteamNetworkingSockets, client->connection, &version, sizeof(netmsg_version), k_nSteamNetworkingSend_Reliable, NULL ); } @@ -96,7 +91,7 @@ static void gameserver_player_join( int index ) { struct gameserver_client *joiner = &_gameserver.clients[index]; - SteamAPI_ISteamNetworkingSockets_ConfigureConnectionLanes( hSteamNetworkingSockets, joiner->connection, 2, + SteamAPI_ISteamNetworkingSockets_ConfigureConnectionLanes( _steam_api.pSteamNetworkingSockets, joiner->connection, 2, (int[]){ 0,0 }, (u16[]){ 10, 1 } ); netmsg_playerjoin join = { .inetmsg_id = k_inetmsg_playerjoin, @@ -186,8 +181,8 @@ static void remove_client( int index ) struct gameserver_client *client = &_gameserver.clients[index]; if( client->connection ) { - SteamAPI_ISteamNetworkingSockets_SetConnectionUserData( hSteamNetworkingSockets, client->connection, -1 ); - SteamAPI_ISteamNetworkingSockets_CloseConnection( hSteamNetworkingSockets, client->connection, + SteamAPI_ISteamNetworkingSockets_SetConnectionUserData( _steam_api.pSteamNetworkingSockets, client->connection, -1 ); + SteamAPI_ISteamNetworkingSockets_CloseConnection( _steam_api.pSteamNetworkingSockets, client->connection, k_ESteamNetConnectionEnd_Misc_InternalError, NULL, 1 ); } _gs_requests_client_disconnect( index ); @@ -203,7 +198,7 @@ static void remove_client( int index ) */ static void handle_new_connection( HSteamNetConnection conn ) { - SteamAPI_ISteamNetworkingSockets_SetConnectionUserData( hSteamNetworkingSockets, conn, -1 ); + SteamAPI_ISteamNetworkingSockets_SetConnectionUserData( _steam_api.pSteamNetworkingSockets, conn, -1 ); int index = -1; @@ -220,12 +215,12 @@ static void handle_new_connection( HSteamNetConnection conn ) { _gs_monitor_journal( 0, "// BAD!! Hit Player limit!\n" ); vg_error( "Server full\n" ); - SteamAPI_ISteamNetworkingSockets_CloseConnection( hSteamNetworkingSockets, conn, 4500, NULL, 1 ); + SteamAPI_ISteamNetworkingSockets_CloseConnection( _steam_api.pSteamNetworkingSockets, conn, 4500, NULL, 1 ); return; } struct gameserver_client *client = &_gameserver.clients[index]; - EResult accept_status = SteamAPI_ISteamNetworkingSockets_AcceptConnection( hSteamNetworkingSockets, conn ); + EResult accept_status = SteamAPI_ISteamNetworkingSockets_AcceptConnection( _steam_api.pSteamNetworkingSockets, conn ); if( accept_status == k_EResultOK ) { @@ -238,24 +233,17 @@ static void handle_new_connection( HSteamNetConnection conn ) client->active = 1; client->connection = conn; - SteamAPI_ISteamNetworkingSockets_SetConnectionPollGroup( hSteamNetworkingSockets, conn, _gameserver.client_group ); - SteamAPI_ISteamNetworkingSockets_SetConnectionUserData( hSteamNetworkingSockets, conn, index ); + SteamAPI_ISteamNetworkingSockets_SetConnectionPollGroup( _steam_api.pSteamNetworkingSockets, conn, _gameserver.client_group ); + SteamAPI_ISteamNetworkingSockets_SetConnectionUserData( _steam_api.pSteamNetworkingSockets, conn, index ); } else { vg_warn( "Error accepting connection (id: %u)\n", conn ); - SteamAPI_ISteamNetworkingSockets_CloseConnection( hSteamNetworkingSockets, conn, + SteamAPI_ISteamNetworkingSockets_CloseConnection( _steam_api.pSteamNetworkingSockets, conn, k_ESteamNetConnectionEnd_Misc_InternalError, NULL, 1 ); } } -static void on_auth_status( CallbackMsg_t *msg ) -{ - SteamNetAuthenticationStatus_t *info = (void *)msg->m_pubParam; - vg_info( " Authentication availibility: %s\n", string_ESteamNetworkingAvailability(info->m_eAvail) ); - vg_info( " %s\n", info->m_debugMsg ); -} - /* * Get client id of connection handle. Will be -1 if unkown to us either because * the server is full or we already disconnected them @@ -267,7 +255,7 @@ static i32 gameserver_conid( HSteamNetConnection hconn ) if( hconn == 0 ) return -1; else - id = SteamAPI_ISteamNetworkingSockets_GetConnectionUserData( hSteamNetworkingSockets, hconn ); + id = SteamAPI_ISteamNetworkingSockets_GetConnectionUserData( _steam_api.pSteamNetworkingSockets, hconn ); if( (id < 0) || (id >= NETWORK_MAX_PLAYERS) ) return -1; @@ -278,16 +266,9 @@ static i32 gameserver_conid( HSteamNetConnection hconn ) /* * Callback for steam connection state change */ -static void on_connect_status( CallbackMsg_t *msg ) +static void cb_connection_changed( SteamNetConnectionStatusChangedCallback_t *info ) { - SteamNetConnectionStatusChangedCallback_t *info = (void *)msg->m_pubParam; - vg_info( " Connection status changed for %lu\n", info->m_hConn ); - - vg_info( " %s -> %s\n", - string_ESteamNetworkingConnectionState(info->m_eOldState), - string_ESteamNetworkingConnectionState(info->m_info.m_eState) ); - - if( info->m_info.m_eState==k_ESteamNetworkingConnectionState_Connecting ) + if( info->m_info.m_eState == k_ESteamNetworkingConnectionState_Connecting ) { handle_new_connection( info->m_hConn ); } @@ -297,8 +278,6 @@ static void on_connect_status( CallbackMsg_t *msg ) (info->m_info.m_eState == k_ESteamNetworkingConnectionState_Dead) || (info->m_info.m_eState == k_ESteamNetworkingConnectionState_None) ) { - vg_info( "End reason: %d\n", info->m_info.m_eEndReason ); - int client_id = gameserver_conid( info->m_hConn ); if( client_id != -1 ) { @@ -307,7 +286,7 @@ static void on_connect_status( CallbackMsg_t *msg ) } else { - SteamAPI_ISteamNetworkingSockets_CloseConnection( hSteamNetworkingSockets, info->m_hConn, 0, NULL, 0 ); + SteamAPI_ISteamNetworkingSockets_CloseConnection( _steam_api.pSteamNetworkingSockets, info->m_hConn, 0, NULL, 0 ); } } } @@ -320,7 +299,7 @@ static void gameserver_rx_version( SteamNetworkingMessage_t *msg ) if( client_id == -1 ) { vg_warn( "Recieved version from unkown connection (%u)\n", msg->m_conn ); - SteamAPI_ISteamNetworkingSockets_CloseConnection( hSteamNetworkingSockets, msg->m_conn, + SteamAPI_ISteamNetworkingSockets_CloseConnection( _steam_api.pSteamNetworkingSockets, msg->m_conn, k_ESteamNetConnectionEnd_Misc_InternalError, NULL, 1 ); return; } @@ -369,7 +348,7 @@ static void gameserver_rx_auth( SteamNetworkingMessage_t *msg ) if( client_id == -1 ) { vg_warn( "Recieved auth ticket from unkown connection (%u)\n", msg->m_conn ); - SteamAPI_ISteamNetworkingSockets_CloseConnection( hSteamNetworkingSockets, msg->m_conn, + SteamAPI_ISteamNetworkingSockets_CloseConnection( _steam_api.pSteamNetworkingSockets, msg->m_conn, k_ESteamNetConnectionEnd_Misc_InternalError, NULL, 1 ); return; } @@ -424,9 +403,9 @@ static void gameserver_rx_auth( SteamNetworkingMessage_t *msg ) if( SteamEncryptedAppTicket_GetTicketIssueTime( decrypted, ticket_len )) { - RTime32 ctime = time(NULL), - tickettime = SteamEncryptedAppTicket_GetTicketIssueTime( decrypted, ticket_len ), - expiretime = tickettime + 24*3*60*60; + u32 ctime = time(NULL), + tickettime = SteamEncryptedAppTicket_GetTicketIssueTime( decrypted, ticket_len ), + expiretime = tickettime + 24*3*60*60; if( ctime > expiretime ) { @@ -737,7 +716,7 @@ static void poll_connections(void) while(1) { len = SteamAPI_ISteamNetworkingSockets_ReceiveMessagesOnPollGroup( - hSteamNetworkingSockets, + _steam_api.pSteamNetworkingSockets, _gameserver.client_group, messages, VG_ARRAY_LEN(messages) ); if( len <= 0 ) @@ -943,6 +922,11 @@ static int _rcon_dumpdb( int argc, const char *argv[] ) int main( int argc, const char *argv[] ) { + int returncode = 0; + /* + * Registration + * --------------------------------------------------------------------- + */ _gameserver.thread = pthread_self(); vg_log_init(); vg_console_init(); @@ -956,6 +940,8 @@ int main( int argc, const char *argv[] ) signal( SIGQUIT, inthandler ); signal( SIGPIPE, SIG_IGN ); signal( SIGSEGV, segvhandler ); + signal( SIGILL, segvhandler ); + signal( SIGBUS, segvhandler ); { _vg_opt_init( argc, argv ); @@ -980,62 +966,43 @@ int main( int argc, const char *argv[] ) return 0; } - if( !vg_init_async_queue( &_gameserver.tasks ) ) - goto E0; - - if( !db_init() ) - goto E0; - - _gs_requests_init(); - _gs_replay_init(); - - /* steamworks init + /* Steam * --------------------------------------------------------------- */ - steamworks_ensure_txt( "2103940" ); - if( _gameserver.auth_mode == eServerModeAuthentication ) - { - if( !vg_load_steam_symetric_key( "application_key", _gameserver.app_symmetric_key )) - goto E1; - } - else - vg_warn( "Running without user authentication.\n" ); - if( !SteamGameServer_Init( 0, NETWORK_PORT, NETWORK_PORT+1, _gameserver.auth_mode, "1.0.0.0" ) ) + _steam_api.cb_connection_changed = cb_connection_changed; + + if( !vg_steam_init( 0, NETWORK_PORT, NETWORK_PORT+1, _gameserver.auth_mode, "1.0.0.0", "2103940" ) ) { - vg_error( "SteamGameServer_Init failed\n" ); - goto E1; + returncode = -1; + goto E0; } - void *hSteamGameServer = SteamAPI_SteamGameServer(); - SteamAPI_ISteamGameServer_LogOnAnonymous( hSteamGameServer ); - - SteamAPI_ManualDispatch_Init(); - HSteamPipe hsteampipe = SteamGameServer_GetHSteamPipe(); - hSteamNetworkingSockets = SteamAPI_SteamGameServerNetworkingSockets_SteamAPI(); - hSteamNetworkingUtils = SteamAPI_SteamNetworkingUtils_SteamAPI(); - - steam_register_callback( k_iSteamNetAuthenticationStatus, on_auth_status ); - steam_register_callback( k_iSteamNetConnectionStatusChangedCallBack, on_connect_status ); - - vg_success( "Steamworks API running\n" ); - steamworks_event_loop( hsteampipe ); - - /* - * Create a listener - */ HSteamListenSocket listener; SteamNetworkingIPAddr localAddr; SteamAPI_SteamNetworkingIPAddr_Clear( &localAddr ); localAddr.m_port = NETWORK_PORT; - listener = SteamAPI_ISteamNetworkingSockets_CreateListenSocketIP( hSteamNetworkingSockets, &localAddr, 0, NULL ); - _gameserver.client_group = SteamAPI_ISteamNetworkingSockets_CreatePollGroup( hSteamNetworkingSockets ); + listener = SteamAPI_ISteamNetworkingSockets_CreateListenSocketIP( _steam_api.pSteamNetworkingSockets, &localAddr, 0, NULL ); + _gameserver.client_group = SteamAPI_ISteamNetworkingSockets_CreatePollGroup( _steam_api.pSteamNetworkingSockets ); + + /* + * System INIT + */ + if( !vg_init_async_queue( &_gameserver.tasks ) ) + goto E0; + + if( !db_init() ) + goto E0; + + _gs_requests_init(); + _gs_replay_init(); + _gameserver.ticks = seconds_to_server_ticks( 30.0 * 60.0 ); - _gs_monitor_journal( 0, "// Gameserver Starting\n" ); + _gs_monitor_journal( 0, "// Gameserver entering main loop\n" ); while(1) { - steamworks_event_loop( hsteampipe ); + vg_steam_frame(); poll_connections(); _gs_replay_server_tick(); _gs_requests_tick(); @@ -1052,7 +1019,6 @@ int main( int argc, const char *argv[] ) } // TODO Measure max time spent on tasks? - while( vg_async_has_work( &_gameserver.tasks ) ) { if( vg_async_process_next_task( &_gameserver.tasks ) == 0 ) @@ -1061,15 +1027,14 @@ int main( int argc, const char *argv[] ) } EE:vg_info( "Server end\n" ); - _gs_monitor_journal( 0, "// Gameserver Ending\n" ); - SteamAPI_ISteamNetworkingSockets_DestroyPollGroup( hSteamNetworkingSockets, _gameserver.client_group ); - SteamAPI_ISteamNetworkingSockets_CloseListenSocket( hSteamNetworkingSockets, listener ); - + SteamAPI_ISteamNetworkingSockets_DestroyPollGroup( _steam_api.pSteamNetworkingSockets, _gameserver.client_group ); + SteamAPI_ISteamNetworkingSockets_CloseListenSocket( _steam_api.pSteamNetworkingSockets, listener ); SteamGameServer_Shutdown(); -E1:db_free(); + db_free(); E0:_gs_monitor_cleanup(); - return 0; + vg_steam_shutdown(); + return returncode; } #include "gameserver_replay.c" diff --git a/src/gameserver.h b/src/gameserver.h index d60486e..109f1f9 100644 --- a/src/gameserver.h +++ b/src/gameserver.h @@ -1,11 +1,7 @@ #pragma once -#define VG_SERVER #include "vg/vg_platform.h" -#include "vg/vg_steam.h" -#include "vg/vg_steam_networking.h" -#include "vg/vg_steam_http.h" -#include "vg/vg_steam_auth_server.h" +#include "vg/vg_steam2.h" #include "vg/vg_async2.h" #include "network_msg.h" #include "network_common.h" @@ -57,8 +53,5 @@ struct _gameserver } extern _gameserver; -extern ISteamNetworkingSockets *hSteamNetworkingSockets; -extern ISteamNetworkingUtils *hSteamNetworkingUtils; - u64 seconds_to_server_ticks( f64 s ); u32 gameserver_get_current_week(void); diff --git a/src/gameserver_monitor.c b/src/gameserver_monitor.c index 5c961ea..3a70d3b 100644 --- a/src/gameserver_monitor.c +++ b/src/gameserver_monitor.c @@ -65,14 +65,14 @@ void _gs_monitor_tick(void) vg_strcat( &str, " \n" " Tick\n" " " ); - vg_strcatu64( &str, _gameserver.ticks ); + vg_strcatu64( &str, _gameserver.ticks, 10 ); vg_strcat( &str, "\n" " \n" ); vg_strcat( &str, " \n" " Global UID\n" " " ); - vg_strcatu64( &str, _gameserver.global_uid ); + vg_strcatu64( &str, _gameserver.global_uid, 10 ); vg_strcat( &str, "\n" " \n" ); @@ -124,21 +124,21 @@ void _gs_monitor_tick(void) vg_strcat( &str, " \n" " Bytes send (channel 0)" " " ); - vg_strcatu64( &str, _gameserver.bytes_send ); + vg_strcatu64( &str, _gameserver.bytes_send, 10 ); vg_strcat( &str, "\n" " \n" ); vg_strcat( &str, " \n" " Bytes send (channel 1)" " " ); - vg_strcatu64( &str, _gameserver.bytes_send1 ); + vg_strcatu64( &str, _gameserver.bytes_send1, 10 ); vg_strcat( &str, "\n" " \n" ); vg_strcat( &str, " \n" " Bytes recv (channel 0)" " " ); - vg_strcatu64( &str, _gameserver.bytes_recv ); + vg_strcatu64( &str, _gameserver.bytes_recv, 10 ); vg_strcat( &str, "\n" " \n" ); @@ -148,7 +148,7 @@ void _gs_monitor_tick(void) " function rept(){\n" " const now = new Date().getTime() / 1000;\n" " var reference = " ); - vg_strcatu64( &str, time(NULL) ); + vg_strcatu64( &str, time(NULL), 10 ); vg_strcat( &str, ";\n" " var secs = Math.floor(now - reference);\n" " document.getElementById('elapsed').textContent = secs.toString() + \" Seconds Ago\";\n" diff --git a/src/gameserver_replay.c b/src/gameserver_replay.c index a59ca24..42d85bf 100644 --- a/src/gameserver_replay.c +++ b/src/gameserver_replay.c @@ -1,5 +1,6 @@ #include "gameserver.h" #include "gameserver_replay.h" +#include "vg/vg_io.h" struct _gs_replay _gs_replay; @@ -16,7 +17,6 @@ static void task_write_replay( vg_async_task *task ) { THREAD_1; struct serialized_replay *info = (void *)task->data; - vg_make_directory( "replaydata" ); char path[1024]; diff --git a/src/gameserver_requests.c b/src/gameserver_requests.c index ad64562..247d68b 100644 --- a/src/gameserver_requests.c +++ b/src/gameserver_requests.c @@ -130,14 +130,14 @@ void _gs_requests_tick(void) else if( req->state == k_request_state_server_error ) { u32 size = sizeof(netmsg_request); - SteamNetworkingMessage_t *msg = SteamAPI_ISteamNetworkingUtils_AllocateMessage( hSteamNetworkingUtils, size ); + SteamNetworkingMessage_t *msg = SteamAPI_ISteamNetworkingUtils_AllocateMessage( _steam_api.pSteamNetworkingUtils, size ); msg->m_conn = client->connection; msg->m_idxLane = 1; netmsg_request *res = msg->m_pData; res->inetmsg_id = k_inetmsg_response; res->id = req->client_request_id; res->status = req->status; - SteamAPI_ISteamNetworkingSockets_SendMessages( hSteamNetworkingSockets, 1, &msg, NULL ); + SteamAPI_ISteamNetworkingSockets_SendMessages( _steam_api.pSteamNetworkingSockets, 1, &msg, NULL ); req->state = k_request_state_finished; log_request_status( req ); _gameserver.bytes_send1 += size; @@ -145,7 +145,7 @@ void _gs_requests_tick(void) else if( req->state == k_request_state_transfer_start ) { u32 size = sizeof(netmsg_request) + sizeof(struct netmsg_transfer_header); - SteamNetworkingMessage_t *msg = SteamAPI_ISteamNetworkingUtils_AllocateMessage( hSteamNetworkingUtils, size ); + SteamNetworkingMessage_t *msg = SteamAPI_ISteamNetworkingUtils_AllocateMessage( _steam_api.pSteamNetworkingUtils, size ); msg->m_conn = client->connection; msg->m_idxLane = 1; @@ -158,7 +158,7 @@ void _gs_requests_tick(void) header->data_size = req->data_buffer_send_size; header->chunks = (req->data_buffer_send_size+(GS_TRANSFER_BYTES_PER_TICK-1)) / GS_TRANSFER_BYTES_PER_TICK; - SteamAPI_ISteamNetworkingSockets_SendMessages( hSteamNetworkingSockets, 1, &msg, NULL ); + SteamAPI_ISteamNetworkingSockets_SendMessages( _steam_api.pSteamNetworkingSockets, 1, &msg, NULL ); req->state = k_request_state_transfer; log_request_status( req ); _gameserver.bytes_send1 += size; @@ -174,8 +174,7 @@ void _gs_requests_tick(void) } u32 message_size = sizeof(netmsg_request) + size; - SteamNetworkingMessage_t *msg = - SteamAPI_ISteamNetworkingUtils_AllocateMessage( hSteamNetworkingUtils, message_size ); + SteamNetworkingMessage_t *msg = SteamAPI_ISteamNetworkingUtils_AllocateMessage( _steam_api.pSteamNetworkingUtils, message_size ); msg->m_conn = client->connection; msg->m_idxLane = 1; @@ -185,7 +184,7 @@ void _gs_requests_tick(void) res->status = k_request_status_transfer_continue; memcpy( res->buffer, req->data_buffer + req->send_offset, size ); - SteamAPI_ISteamNetworkingSockets_SendMessages( hSteamNetworkingSockets, 1, &msg, NULL ); + SteamAPI_ISteamNetworkingSockets_SendMessages( _steam_api.pSteamNetworkingSockets, 1, &msg, NULL ); req->send_offset += size; _gameserver.bytes_send1 += size; } @@ -486,14 +485,14 @@ void _gs_handle_request_message( u32 client_id, SteamNetworkingMessage_t *msg ) vg_error( "req[%s##error] State: fail, Status: %u\n", client->username, (u32)error_status ); u32 size = sizeof(netmsg_request); - SteamNetworkingMessage_t *reply_msg = SteamAPI_ISteamNetworkingUtils_AllocateMessage( hSteamNetworkingUtils, size ); + SteamNetworkingMessage_t *reply_msg = SteamAPI_ISteamNetworkingUtils_AllocateMessage( _steam_api.pSteamNetworkingUtils, size ); reply_msg->m_conn = client->connection; reply_msg->m_idxLane = 1; netmsg_request *res = reply_msg->m_pData; res->inetmsg_id = k_inetmsg_response; res->id = client_packet->id; res->status = error_status; - SteamAPI_ISteamNetworkingSockets_SendMessages( hSteamNetworkingSockets, 1, &reply_msg, NULL ); + SteamAPI_ISteamNetworkingSockets_SendMessages( _steam_api.pSteamNetworkingSockets, 1, &reply_msg, NULL ); SteamAPI_SteamNetworkingMessage_t_Release( msg ); _gameserver.bytes_send1 += size; } diff --git a/src/menu.c b/src/menu.c index 301f7ca..f368a2e 100644 --- a/src/menu.c +++ b/src/menu.c @@ -728,12 +728,10 @@ void menu_gui( ui_context *ctx ) i32 R = menu_nav( &menu.web_choice, mh, 2 ); - if( menu_button( ctx, a, R==0, steam_ready, "Steam Overlay" ) ) + if( menu_button( ctx, a, R==0, !_steam_api.disabled, "Steam Overlay" ) ) { - ISteamFriends *hSteamFriends = SteamAPI_SteamFriends(); - SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage( hSteamFriends, - menu.web_link, - k_EActivateGameOverlayToWebPageMode_Default ); + SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage( _steam_api.pSteamFriends,menu.web_link, + k_EActivateGameOverlayToWebPageMode_Default ); menu.web_link = NULL; } @@ -890,10 +888,10 @@ void menu_gui( ui_context *ctx ) ui_rect end = { panel[0], panel[1] + panel[3] - 48, panel[2], 48 }, a,b; ui_split_ratio( end, k_ui_axis_v, 0.5f, 2, a, b ); - if( menu_button( ctx, a, R == 0, steam_ready, "Store Page" ) ) + if( menu_button( ctx, a, R == 0, !_steam_api.disabled, "Store Page" ) ) { SteamAPI_ISteamFriends_ActivateGameOverlayToStore( - SteamAPI_SteamFriends(), 2103940, k_EOverlayToStoreFlag_None); + _steam_api.pSteamFriends, 2103940, k_EOverlayToStoreFlag_None); } if( menu_button( ctx, b, R == 1, 1, "Nah" ) || button_down( k_srbind_mback ) ) diff --git a/src/network.c b/src/network.c index f09e828..8177561 100644 --- a/src/network.c +++ b/src/network.c @@ -1,8 +1,5 @@ #include "skaterift.h" -#include "vg/vg_steam.h" -#include "vg/vg_steam_networking.h" -#include "vg/vg_steam_auth.h" -#include "vg/vg_steam_friends.h" +#include "vg/vg_steam2.h" #include "player.h" #include "network.h" #include "network_msg.h" @@ -45,44 +42,6 @@ int packet_minsize( SteamNetworkingMessage_t *msg, u32 size ){ } } -static void on_auth_ticket_recieved( void *result, void *context ){ - EncryptedAppTicketResponse_t *response = result; - - if( response->m_eResult == k_EResultOK ){ - vg_info( " New app ticket ready\n" ); - } - else{ - vg_warn( " Could not request new encrypted app ticket (%u)\n", - response->m_eResult ); - } - - if( SteamAPI_ISteamUser_GetEncryptedAppTicket( hSteamUser, - network_client.app_symmetric_key, - VG_ARRAY_LEN(network_client.app_symmetric_key), - &network_client.app_key_length )){ - vg_success( " Loaded app ticket\n" ); - } - else{ - vg_error( " No ticket availible\n" ); - network_client.app_key_length = 0; - } -} - -void request_auth_ticket(void) -{ - /* - * TODO Check for one thats cached on the disk and load it. - * This might be OK though because steam seems to cache the result - */ - - vg_info( "Requesting new authorization ticket\n" ); - - vg_steam_async_call *call = vg_alloc_async_steam_api_call(); - call->userdata = NULL; - call->p_handler = on_auth_ticket_recieved; - call->id = SteamAPI_ISteamUser_RequestEncryptedAppTicket( hSteamUser, NULL, 0 ); -} - static void network_send_username(void){ if( !network_connected() ) return; @@ -92,12 +51,11 @@ static void network_send_username(void){ update->inetmsg_id = k_inetmsg_playerusername; update->index = 0xff; - ISteamFriends *hSteamFriends = SteamAPI_SteamFriends(); - const char *username = SteamAPI_ISteamFriends_GetPersonaName(hSteamFriends); + const char *username = SteamAPI_ISteamFriends_GetPersonaName( _steam_api.pSteamFriends ); u32 chs = str_utf8_collapse( username, update->name, NETWORK_USERNAME_MAX ); SteamAPI_ISteamNetworkingSockets_SendMessageToConnection( - hSteamNetworkingSockets, network_client.remote, + _steam_api.pSteamNetworkingSockets, network_client.remote, update, sizeof(netmsg_playerusername)+chs+1, k_nSteamNetworkingSend_Reliable, NULL ); } @@ -117,7 +75,7 @@ void network_send_region(void) NETWORK_REGION_MAX, k_strncpy_always_add_null ); SteamAPI_ISteamNetworkingSockets_SendMessageToConnection( - hSteamNetworkingSockets, network_client.remote, + _steam_api.pSteamNetworkingSockets, network_client.remote, region, sizeof(netmsg_region)+l+1, k_nSteamNetworkingSend_Reliable, NULL ); } @@ -181,14 +139,14 @@ void network_send_item( enum netmsg_playeritem_type type ) vg_info( "send equip: [%u] %s\n", item->type_index, item->uid ); u32 chs = strlen(item->uid); - SteamAPI_ISteamNetworkingSockets_SendMessageToConnection( hSteamNetworkingSockets, network_client.remote, + SteamAPI_ISteamNetworkingSockets_SendMessageToConnection( _steam_api.pSteamNetworkingSockets, network_client.remote, item, sizeof(netmsg_playeritem)+chs+1, k_nSteamNetworkingSend_Reliable, NULL ); } static void network_disconnect(void) { - SteamAPI_ISteamNetworkingSockets_CloseConnection( hSteamNetworkingSockets, network_client.remote, 0, NULL, 0 ); + SteamAPI_ISteamNetworkingSockets_CloseConnection( _steam_api.pSteamNetworkingSockets, network_client.remote, 0, NULL, 0 ); network_client.remote = 0; network_client.state = k_ESteamNetworkingConnectionState_None; @@ -209,7 +167,7 @@ void network_status_string( vg_str *str, u32 *colour ) return; } - if( steam_ready ) + if( !_steam_api.disabled ) { if( network_client.user_intent == k_server_intent_offline ) { @@ -286,14 +244,8 @@ void render_server_status_gui(void) skaterift.rt_textures[ k_skaterift_rt_server_status ] = g_render.fb_network_status->attachments[0].id; } -void on_server_connect_status( CallbackMsg_t *msg ) +void cb_skaterift_connection_changed( SteamNetConnectionStatusChangedCallback_t *info ) { - SteamNetConnectionStatusChangedCallback_t *info = (void *)msg->m_pubParam; - vg_info( " Connection status changed for %lu\n", info->m_hConn ); - vg_info( " %s -> %s\n", - string_ESteamNetworkingConnectionState(info->m_eOldState), - string_ESteamNetworkingConnectionState(info->m_info.m_eState) ); - if( info->m_hConn == network_client.remote ) { network_client.state = info->m_info.m_eState; @@ -307,20 +259,20 @@ void on_server_connect_status( CallbackMsg_t *msg ) version.inetmsg_id = k_inetmsg_version; version.version = NETWORK_SKATERIFT_VERSION; SteamAPI_ISteamNetworkingSockets_SendMessageToConnection( - hSteamNetworkingSockets, network_client.remote, &version, + _steam_api.pSteamNetworkingSockets, network_client.remote, &version, sizeof(netmsg_version), k_nSteamNetworkingSend_Reliable, NULL ); /* TODO: We should really wait to see if the server is in auth mode * first... */ - u32 size = sizeof(netmsg_auth) + network_client.app_key_length; + u32 size = sizeof(netmsg_auth) + _steam_api.app_key_length; netmsg_auth *auth = alloca(size); auth->inetmsg_id = k_inetmsg_auth; - auth->ticket_length = network_client.app_key_length; - for( int i=0; iticket[i] = network_client.app_symmetric_key[i]; + auth->ticket_length = _steam_api.app_key_length; + for( int i=0; i<_steam_api.app_key_length; i++ ) + auth->ticket[i] = _steam_api.app_symmetric_key[i]; SteamAPI_ISteamNetworkingSockets_SendMessageToConnection( - hSteamNetworkingSockets, network_client.remote, auth, size, + _steam_api.pSteamNetworkingSockets, network_client.remote, auth, size, k_nSteamNetworkingSend_Reliable, NULL ); } else if( info->m_info.m_eState == k_ESteamNetworkingConnectionState_ClosedByPeer ) @@ -344,17 +296,14 @@ void on_server_connect_status( CallbackMsg_t *msg ) render_server_status_gui(); } -void on_persona_state_change( CallbackMsg_t *msg ) +void cb_skaterift_persona_changed( PersonaStateChange_t *info ) { if( !network_connected() ) return; - PersonaStateChange_t *info = (void *)msg->m_pubParam; - ISteamUser *hSteamUser = SteamAPI_SteamUser(); - vg_info( "User: " PRINTF_U64 ", change: %u\n", info->m_ulSteamID, info->m_nChangeFlags ); - if( info->m_ulSteamID == SteamAPI_ISteamUser_GetSteamID(hSteamUser) ) + if( info->m_ulSteamID == SteamAPI_ISteamUser_GetSteamID( _steam_api.pSteamUser ) ) if( info->m_nChangeFlags & k_EPersonaChangeName ) network_send_username(); @@ -396,7 +345,7 @@ static void network_connect(void) vg_info( "connecting...\n" ); network_client.remote = SteamAPI_ISteamNetworkingSockets_ConnectByIPAddress( - hSteamNetworkingSockets, &network_client.ip, 0, NULL ); + _steam_api.pSteamNetworkingSockets, &network_client.ip, 0, NULL ); } static void network_sign_on_complete(void) @@ -417,7 +366,7 @@ static void poll_remote_connection(void){ for( int i=0; i<10; i++ ) { len = SteamAPI_ISteamNetworkingSockets_ReceiveMessagesOnConnection( - hSteamNetworkingSockets, network_client.remote, + _steam_api.pSteamNetworkingSockets, network_client.remote, messages, VG_ARRAY_LEN(messages)); if( len <= 0 ) @@ -597,7 +546,7 @@ parse_numeric: void network_update(void) { - if( !steam_ready ) + if( _steam_api.disabled ) return; if( g_client.demo_mode ) @@ -666,7 +615,7 @@ void chat_send_message( const char *message, bool rcon ) chat->client = 0; u32 l = vg_strncpy( message, chat->msg, NETWORK_MAX_CHAT, k_strncpy_always_add_null ); SteamAPI_ISteamNetworkingSockets_SendMessageToConnection( - hSteamNetworkingSockets, network_client.remote, + _steam_api.pSteamNetworkingSockets, network_client.remote, chat, sizeof(netmsg_chat)+l+1, k_nSteamNetworkingSend_Reliable, NULL ); } @@ -705,7 +654,7 @@ void network_end(void) (network_client.state == k_ESteamNetworkingConnectionState_Connecting) ) { SteamAPI_ISteamNetworkingSockets_CloseConnection( - hSteamNetworkingSockets, network_client.remote, 0, NULL, 1 ); + _steam_api.pSteamNetworkingSockets, network_client.remote, 0, NULL, 1 ); } } diff --git a/src/network.h b/src/network.h index a24dd3b..b4cddea 100644 --- a/src/network.h +++ b/src/network.h @@ -1,14 +1,13 @@ /* - * Copyright (C) 2021-2024 Mt.ZERO Software, Harry Godden - All Rights Reserved + * Copyright (C) 2021-2025 Mt.ZERO Software, Harry Godden - All Rights Reserved * All trademarks are property of their respective owners */ #pragma once #include "vg/vg_platform.h" -#include "vg/vg_steam_networking.h" +#include "vg/vg_steam2.h" #include "vg/vg_mem_pool.h" #include "vg/vg_msg.h" -#include "steam.h" #include "network_common.h" #include "network_msg.h" #include "addon_types.h" @@ -47,8 +46,6 @@ void network_submit_highscore( u32 trackid, u16 points, u16 time ); struct network_client { - u8 app_symmetric_key[ 1024 ]; - u32 app_key_length; EServerMode auth_mode; HSteamNetConnection remote; @@ -96,3 +93,6 @@ static inline int network_connected(void) if( network_client.remote_version != NETWORK_SKATERIFT_VERSION ) return 0; return network_client.state == k_ESteamNetworkingConnectionState_Connected; } + +void cb_skaterift_connection_changed( SteamNetConnectionStatusChangedCallback_t *info ); +void cb_skaterift_persona_changed( PersonaStateChange_t *info ); diff --git a/src/network_requests.c b/src/network_requests.c index 29fd69d..1f0e8e8 100644 --- a/src/network_requests.c +++ b/src/network_requests.c @@ -97,7 +97,7 @@ void network_send_request( netmsg_request *packet, vg_msg *body, else packet->id = 0; - SteamAPI_ISteamNetworkingSockets_SendMessageToConnection( hSteamNetworkingSockets, network_client.remote, + SteamAPI_ISteamNetworkingSockets_SendMessageToConnection( _steam_api.pSteamNetworkingSockets, network_client.remote, packet, sizeof(netmsg_request)+len, k_nSteamNetworkingSend_Reliable, NULL ); } @@ -108,7 +108,7 @@ static void network_scoreboard_callback( void *data, u32 data_size, u64 userdata { vg_msg msg; vg_msg_init( &msg, data, data_size ); - vg_msg_print( &msg, msg.max ); + //vg_msg_print( &msg, msg.max ); world_routes_recv_scoreboard( &_world.main, &msg, userdata, status ); if( userdata == world_sfd.active_route_board ) @@ -248,16 +248,20 @@ void _net_handle_response_message( SteamNetworkingMessage_t *msg ) u8 current_id = _net_requests.recieving_request_id; if( current_id != response->id ) { - net_request *current = vg_pool_item( &_net_requests.request_pool, current_id ); + if( current_id ) + { + net_request *current = vg_pool_item( &_net_requests.request_pool, current_id ); + if( current->callback ) + current->callback( NULL, 0, current->userdata, k_request_status_server_error ); + current->state = k_request_state_error; + log_request_status( current, "Transfer protocol fault" ); + _delete_request( current ); + } + if( request->callback ) request->callback( NULL, 0, request->userdata, k_request_status_server_error ); - if( current->callback ) - current->callback( NULL, 0, current->userdata, k_request_status_server_error ); - current->state = k_request_state_error; request->state = k_request_state_error; - log_request_status( current, "Transfer protocol fault" ); log_request_status( request, "Transfer protocol fault" ); - _delete_request( current ); _delete_request( request ); _transfer_reset(); return; diff --git a/src/player_remote.c b/src/player_remote.c index cd846ef..a72e970 100644 --- a/src/player_remote.c +++ b/src/player_remote.c @@ -8,7 +8,7 @@ #include "gui.h" #include "ent_region.h" #include "shaders/model_entity.h" -#include "vg/vg_steam_friends.h" +#include "vg/vg_steam2.h" #include "vg/vg_magi.h" struct global_netplayers netplayers; @@ -75,9 +75,8 @@ void relink_all_remote_player_worlds(void) 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 ); + remote->isfriend = SteamAPI_ISteamFriends_HasFriend( _steam_api.pSteamFriends, remote->steamid, k_EFriendFlagImmediate ); + remote->isblocked = SteamAPI_ISteamFriends_HasFriend( _steam_api.pSteamFriends, remote->steamid, k_EFriendFlagBlocked ); } void decode_playerframe( netmsg_playerframe *frame, u32 data_length, struct interp_frame *dest, @@ -473,7 +472,7 @@ void remote_player_send_playerframe(void) u32 wire_size = base_size + ctx.bytes; netplayers.up_bytes += wire_size; - SteamAPI_ISteamNetworkingSockets_SendMessageToConnection( hSteamNetworkingSockets, network_client.remote, + SteamAPI_ISteamNetworkingSockets_SendMessageToConnection( _steam_api.pSteamNetworkingSockets, network_client.remote, frame, wire_size, k_nSteamNetworkingSend_Unreliable, NULL ); } @@ -992,12 +991,8 @@ static void remote_player_gui_info( ui_context *ctx, ui_rect box, void remote_players_imgui_lobby( ui_context *ctx ) { if( network_client.user_intent == k_server_intent_online ) - { - if( !(steam_ready && (network_client.state == k_ESteamNetworkingConnectionState_Connected)) ) - { + if( !(!_steam_api.disabled && (network_client.state == k_ESteamNetworkingConnectionState_Connected)) ) return; - } - } ui_px y = 50, width = 200, height = 42, gap = 2, x = vg.window_x - width; @@ -1008,7 +1003,7 @@ void remote_players_imgui_lobby( ui_context *ctx ) ui_rect us = { x, y, width, height }; /* FIXME: your location */ - remote_player_gui_info( ctx, us, steam_username_at_startup, "you", k_remote_player_gui_type_you, 1 ); + remote_player_gui_info( ctx, us, _steam_api.username_at_startup, "you", k_remote_player_gui_type_you, 1 ); y += height + gap; for( u32 i=0; i - -/* - * We only want to use steamworks if building for the networked version, - * theres not much point otherwise. We mainly want steamworks for setting - * achievements etc.. so that includes our own server too. - * - * This file also wraps the functions and interfaces that we want to use to - * make them a bit easier to read, since they are the flat API they have very - * long names. in non-networked builds they will return default errors or do - * nothing. - */ - -char steam_username_at_startup[128] = "Unassigned"; - -static void recv_steam_warning( int severity, const char *msg ) -{ - if( severity == 0 ) - vg_low( "%s\n", msg ); - else - vg_info( "%s\n", msg ); -} - -int steam_ready = 0, - steam_stats_ready = 0; - -void *hSteamNetworkingSockets, *hSteamUser, *hSteamUserStats; -static HSteamPipe hSteamClientPipe; - -static const char *steam_achievement_names[] = -{ - "ALBERT", "MARC", "JANET", "BERNADETTA", - "ROUTE_MPY", "ROUTE_MPG", "ROUTE_MPB", "ROUTE_MPR", - "ROUTE_TO", "ROUTE_TC", "CITY_COMPLETE", "MTZERO_SILVER", "MTZERO_GOLD", - "80FT" -}; - -void steam_store_achievements(void) -{ - if( steam_ready && steam_stats_ready ){ - SteamAPI_ISteamUserStats_StoreStats( hSteamUserStats ); - } -} - -void steam_set_achievement( const char *name ) -{ - if( g_client.demo_mode ) - return; - - if( steam_ready && steam_stats_ready ) - { - if( SteamAPI_ISteamUserStats_SetAchievement( hSteamUserStats, name ) ) - vg_success( "Achievement set! '%s'\n", name ); - else - vg_warn( "Failed to set achievement: %s\n", name ); - } - else - vg_warn( "Failed to set achievement (steam not ready): %s\n", name ); -} - -void steam_clear_achievement( const char *name ) -{ - if( steam_ready && steam_stats_ready ){ - if( SteamAPI_ISteamUserStats_ClearAchievement( hSteamUserStats, name ) ){ - vg_info( "Achievement cleared: '%s'\n", name ); - } - else{ - vg_warn( "Failed to clear achievement: %s\n", name ); - } - } - else{ - vg_warn( "Failed to clear achievement (steam not ready): %s\n", name ); - } -} - - -void steam_print_all_achievements(void) -{ - vg_info( "Achievements: \n" ); - - if( steam_ready && steam_stats_ready ){ - for( int i=0; im_pubParam; - if( rec->m_eResult == k_EResultOK ) - { - vg_info( "Recieved stats for: %lu (user: %lu)\n", rec->m_nGameID, rec->m_steamIDUser ); - steam_stats_ready = 1; - - steamapi_bool set = 0; - if( SteamAPI_ISteamUserStats_GetAchievement( hSteamUserStats, "MARC", &set ) ) - { - if( set ) _atom_set( k_atom_list_global, "MARC", 1 ); - } - if( SteamAPI_ISteamUserStats_GetAchievement( hSteamUserStats, "ALBERT", &set ) ) - { - if( set ) _atom_set( k_atom_list_global, "ALBERT", 1 ); - } - if( SteamAPI_ISteamUserStats_GetAchievement( hSteamUserStats, "JANET", &set ) ) - { - if( set ) _atom_set( k_atom_list_global, "JANET", 1 ); - } - if( SteamAPI_ISteamUserStats_GetAchievement( hSteamUserStats, "BERNADETTA", &set ) ) - { - if( set ) _atom_set( k_atom_list_global, "BERNADETTA", 1 ); - } - } - else - vg_error( "Error recieveing stats for user (%u)\n", rec->m_eResult ); -} - -static u32 utf8_byte0_byte_count( u8 char0 ) -{ - for( u32 k=2; k<4; k++ ) - { - if( !(char0 & (0x80 >> k)) ) - return k; - } - - return 0; -} - -u32 str_utf8_collapse( const char *str, char *buf, u32 length ) -{ - u8 *ustr = (u8 *)str; - u32 utf32_code = 0x00000000; - u32 i=0, j=0, utf32_byte_ct=0; - for(;j < length-1;) - { - if( ustr[i] == 0x00 ) - break; - if( ustr[i] & 0x80 ) - { - if( utf32_byte_ct ) - { - utf32_byte_ct --; - utf32_code |= (ustr[i] & 0x3F) << (utf32_byte_ct*6); - if( !utf32_byte_ct ) - { - const char *match; - size_t chars = anyascii( utf32_code, &match ); - for( u32 k=0; k> utf32_byte_ct); - utf32_code <<= utf32_byte_ct*6; - } - } - else - { - utf32_byte_ct = 0x00; - buf[j ++] = str[i]; - } - i++; - } - buf[j] = 0x00; - return j; -} - -void steam_register(void) -{ - vg_console_reg_cmd( "ach", steam_achievement_ccmd, NULL ); -} - -bool steam_init(void) -{ - const char *username = "offline player"; - - vg_info( "Initializing steamworks\n" ); - - if( !SteamAPI_Init() ) - { - printf("\n"); - vg_error( "Steamworks failed to initialize\n" ); - return 0; - } - - steam_ready = 1; - SteamAPI_ManualDispatch_Init(); - - /* Connect interfaces */ - hSteamClientPipe = SteamAPI_GetHSteamPipe(); - hSteamNetworkingSockets = SteamAPI_SteamNetworkingSockets_SteamAPI(); - hSteamUser = SteamAPI_SteamUser(); - - ISteamUtils *utils = SteamAPI_SteamUtils(); - SteamAPI_ISteamUtils_SetWarningMessageHook( utils, recv_steam_warning ); - - printf("\n"); - vg_success( "\nSteamworks API running\n" ); - - ISteamFriends *hSteamFriends = SteamAPI_SteamFriends(); - username = SteamAPI_ISteamFriends_GetPersonaName( hSteamFriends ); - - /* - * Request stats - * -------------------------------------------------------- - */ - hSteamUserStats = SteamAPI_SteamUserStats(); - steam_register_callback( k_iUserStatsReceived, steam_on_recieve_current_stats ); - - if( !SteamAPI_ISteamUserStats_RequestCurrentStats( hSteamUserStats ) ) - vg_warn( "No Steam Logon: Cannot request stats\n" ); - - /* TODO: On username update callback */ - str_utf8_collapse( username, steam_username_at_startup, VG_ARRAY_LEN(steam_username_at_startup) ); - return 1; -} - -void steam_update(void) -{ - if( steam_ready ) - steamworks_event_loop( hSteamClientPipe ); -} - -void steam_end(void) -{ - if( steam_ready ) - { - vg_info( "Shutting down\n..." ); - SteamAPI_Shutdown(); - } -} diff --git a/src/steam.h b/src/steam.h deleted file mode 100644 index ad4fd8e..0000000 --- a/src/steam.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (C) 2021-2024 Mt.ZERO Software, Harry Godden - All Rights Reserved - * All trademarks are property of their respective owners - */ -#pragma once - -extern int steam_ready, steam_stats_ready; -extern void *hSteamNetworkingSockets, *hSteamUser, *hSteamUserStats; -extern char steam_username_at_startup[128]; - -void steam_register(void); -bool steam_init(void); -void steam_update(void); -void steam_end(void); -u32 str_utf8_collapse( const char *str, char *buf, u32 length ); -int steam_achievement_ccmd( int argc, char const *argv[] ); -void steam_print_all_achievements(void); -void steam_clear_achievement( const char *name ); -void steam_set_achievement( const char *name ); -void steam_store_achievements(void); diff --git a/src/user_profile.c b/src/user_profile.c index 758fffe..2209b14 100644 --- a/src/user_profile.c +++ b/src/user_profile.c @@ -117,7 +117,7 @@ void _user_profile_ui( ui_context *ctx, ui_rect box, u64 steamid ) vg_msg_wkvnum( &data, "steamid", k_vg_msg_u64, 1, &steamid ); network_send_request( packet, &data, _profile_download_callback, steamid ); - u64 me_id = SteamAPI_ISteamUser_GetSteamID( SteamAPI_SteamUser() ); + u64 me_id = SteamAPI_ISteamUser_GetSteamID( _steam_api.pSteamUser ); bool isme = 0; if( (steamid == 0) || (steamid == me_id) ) { @@ -125,21 +125,19 @@ void _user_profile_ui( ui_context *ctx, ui_rect box, u64 steamid ) isme = 1; } - ISteamFriends *hSteamFriends = SteamAPI_SteamFriends(); - ISteamUtils *hSteamUtils = SteamAPI_SteamUtils(); - if( isme || SteamAPI_ISteamFriends_HasFriend( hSteamFriends, steamid, k_EFriendFlagImmediate ) ) + if( isme || SteamAPI_ISteamFriends_HasFriend( _steam_api.pSteamFriends, steamid, k_EFriendFlagImmediate ) ) { - i32 avatar_handle = SteamAPI_ISteamFriends_GetMediumFriendAvatar( hSteamFriends, steamid ); + i32 avatar_handle = SteamAPI_ISteamFriends_GetMediumFriendAvatar( _steam_api.pSteamFriends, steamid ); if( avatar_handle ) { u32 w, h; - if( SteamAPI_ISteamUtils_GetImageSize( hSteamUtils, avatar_handle, &w, &h ) ) + if( SteamAPI_ISteamUtils_GetImageSize( _steam_api.pSteamUtils, avatar_handle, &w, &h ) ) { if( w == 64 && h == 64 ) { u8 *tmp = malloc( w*h*4 ); - if( SteamAPI_ISteamUtils_GetImageRGBA( hSteamUtils, avatar_handle, tmp, w*h*4 ) ) + if( SteamAPI_ISteamUtils_GetImageRGBA( _steam_api.pSteamUtils, avatar_handle, tmp, w*h*4 ) ) { glBindTexture( GL_TEXTURE_2D, _user_profile.avatar_tex ); glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, 64, 64, 0, GL_RGBA, GL_UNSIGNED_BYTE, tmp ); diff --git a/src/workshop.c b/src/workshop.c index 5c88b82..75d1863 100644 --- a/src/workshop.c +++ b/src/workshop.c @@ -7,10 +7,7 @@ #include "vg/vg_io.h" #include "ent_skateshop.h" -#include "vg/vg_steam_auth.h" -#include "vg/vg_steam_ugc.h" -#include "vg/vg_steam_friends.h" -#include "steam.h" +#include "vg/vg_steam2.h" #include "workshop.h" struct workshop_form workshop_form; @@ -40,9 +37,7 @@ static void workshop_quit_form(void) if( workshop_form.ugc_query.result == k_EResultOK ){ workshop_form.ugc_query.result = k_EResultNone; - ISteamUGC *hSteamUGC = SteamAPI_SteamUGC(); - SteamAPI_ISteamUGC_ReleaseQueryUGCRequest( - hSteamUGC, workshop_form.ugc_query.handle ); + SteamAPI_ISteamUGC_ReleaseQueryUGCRequest( _steam_api.pSteamUGC, workshop_form.ugc_query.handle ); } workshop_form.page = k_workshop_form_hidden; @@ -164,23 +159,22 @@ static const char *workshop_filetype_folder(void){ static void workshop_form_upload_submission( PublishedFileId_t file_id, char *metadata ) { THREAD_0; - ISteamUGC *hSteamUGC = SteamAPI_SteamUGC(); - UGCUpdateHandle_t handle = SteamAPI_ISteamUGC_StartItemUpdate( hSteamUGC, SKATERIFT_APPID, file_id ); + UGCUpdateHandle_t handle = SteamAPI_ISteamUGC_StartItemUpdate( _steam_api.pSteamUGC, SKATERIFT_APPID, file_id ); /* TODO: Handle failure cases for these */ - SteamAPI_ISteamUGC_SetItemMetadata( hSteamUGC, handle, metadata ); + SteamAPI_ISteamUGC_SetItemMetadata( _steam_api.pSteamUGC, handle, metadata ); if( workshop_form.submission.submit_title ) { vg_info( "Setting title\n" ); - SteamAPI_ISteamUGC_SetItemTitle( hSteamUGC, handle, workshop_form.submission.title ); + SteamAPI_ISteamUGC_SetItemTitle( _steam_api.pSteamUGC, handle, workshop_form.submission.title ); } if( workshop_form.submission.submit_description ) { vg_info( "Setting description\n" ); - SteamAPI_ISteamUGC_SetItemDescription( hSteamUGC, handle, workshop_form.submission.description); + SteamAPI_ISteamUGC_SetItemDescription( _steam_api.pSteamUGC, handle, workshop_form.submission.description); } if( workshop_form.submission.submit_file_and_image ) @@ -194,23 +188,23 @@ static void workshop_form_upload_submission( PublishedFileId_t file_id, char *me vg_strcat( &folder, workshop_form.addon_folder ); vg_info( "Setting item content\n" ); - SteamAPI_ISteamUGC_SetItemContent( hSteamUGC, handle, folder.buffer ); + SteamAPI_ISteamUGC_SetItemContent( _steam_api.pSteamUGC, handle, folder.buffer ); vg_str preview = folder; vg_strcat( &preview, "/preview.jpg" ); vg_info( "Setting preview image\n" ); - SteamAPI_ISteamUGC_SetItemPreview( hSteamUGC, handle, preview.buffer ); + SteamAPI_ISteamUGC_SetItemPreview( _steam_api.pSteamUGC, handle, preview.buffer ); } vg_info( "Setting visibility\n" ); - SteamAPI_ISteamUGC_SetItemVisibility( hSteamUGC, handle, workshop_form.submission.visibility ); + SteamAPI_ISteamUGC_SetItemVisibility( _steam_api.pSteamUGC, handle, workshop_form.submission.visibility ); vg_info( "Submitting updates\n" ); - vg_steam_async_call *call = vg_alloc_async_steam_api_call(); + vg_steam_api_call *call = vg_alloc_async_steam_api_call(); call->userdata = NULL; - call->p_handler = on_workshop_update_result; - call->id = SteamAPI_ISteamUGC_SubmitItemUpdate( hSteamUGC, handle, "" ); + call->cb = on_workshop_update_result; + call->id = SteamAPI_ISteamUGC_SubmitItemUpdate( _steam_api.pSteamUGC, handle, "" ); } /* @@ -253,11 +247,10 @@ static void workshop_form_async_submit_begin( void *userdata ) } else { - vg_steam_async_call *call = vg_alloc_async_steam_api_call(); + vg_steam_api_call *call = vg_alloc_async_steam_api_call(); call->userdata = userdata; - call->p_handler = on_workshop_createitem; - ISteamUGC *hSteamUGC = SteamAPI_SteamUGC(); - call->id = SteamAPI_ISteamUGC_CreateItem( hSteamUGC, SKATERIFT_APPID, k_EWorkshopFileTypeCommunity ); + call->cb = on_workshop_createitem; + call->id = SteamAPI_ISteamUGC_CreateItem( _steam_api.pSteamUGC, SKATERIFT_APPID, k_EWorkshopFileTypeCommunity ); } } @@ -656,10 +649,8 @@ static void workshop_op_download_and_view_submission( int result_index ) THREAD_0; workshop_form.op = k_workshop_op_downloading_submission; - ISteamUGC *hSteamUGC = SteamAPI_SteamUGC(); - ISteamRemoteStorage *hSteamRemoteStorage = SteamAPI_SteamRemoteStorage(); SteamUGCDetails_t details; - if( SteamAPI_ISteamUGC_GetQueryUGCResult( hSteamUGC, workshop_form.ugc_query.handle, result_index, &details ) ) + if( SteamAPI_ISteamUGC_GetQueryUGCResult( _steam_api.pSteamUGC, workshop_form.ugc_query.handle, result_index, &details ) ) { workshop_reset_submission_data(); workshop_form.submission.submit_description = 0; @@ -668,7 +659,7 @@ static void workshop_op_download_and_view_submission( int result_index ) u8 metadata_buf[512]; char metadata_str[1024+1]; - int have_meta = SteamAPI_ISteamUGC_GetQueryUGCMetadata( hSteamUGC, workshop_form.ugc_query.handle, + int have_meta = SteamAPI_ISteamUGC_GetQueryUGCMetadata( _steam_api.pSteamUGC, workshop_form.ugc_query.handle, result_index, metadata_str, 1024+1 ); @@ -757,14 +748,13 @@ static void workshop_view_page( int req ) workshop_form.view_published_page_id = page; workshop_form.published_files_list_length = count; - ISteamUGC *hSteamUGC = SteamAPI_SteamUGC(); for( int i=0; ititle, 80, "Error (%d)", details.m_eResult ); @@ -815,8 +805,7 @@ static void on_workshop_UGCQueryComplete( void *data, void *userdata ) workshop_form.view_published_page_id = 0; workshop_form.published_files_list_length = 0; - ISteamUGC *hSteamUGC = SteamAPI_SteamUGC(); - SteamAPI_ISteamUGC_ReleaseQueryUGCRequest( hSteamUGC, query->m_handle ); + SteamAPI_ISteamUGC_ReleaseQueryUGCRequest( _steam_api.pSteamUGC, query->m_handle ); } } @@ -825,7 +814,7 @@ static void on_workshop_UGCQueryComplete( void *data, void *userdata ) */ int workshop_submit_command( int argc, const char *argv[] ) { - if( !steam_ready ) + if( _steam_api.disabled ) { ui_start_modal( &vg_ui.ctx, "Steam API is not initialized\n", NULL, UI_MODAL_BAD, NULL ); return 0; @@ -837,26 +826,24 @@ int workshop_submit_command( int argc, const char *argv[] ) workshop_form.published_files_list_length = 0; workshop_form.ugc_query.result = k_EResultNone; - vg_steam_async_call *call = vg_alloc_async_steam_api_call(); + vg_steam_api_call *call = vg_alloc_async_steam_api_call(); - ISteamUser *hSteamUser = SteamAPI_SteamUser(); CSteamID steamid; - steamid.m_unAll64Bits = SteamAPI_ISteamUser_GetSteamID( hSteamUser ); + steamid.m_unAll64Bits = SteamAPI_ISteamUser_GetSteamID( _steam_api.pSteamUser ); - ISteamUGC *hSteamUGC = SteamAPI_SteamUGC(); - call->p_handler = on_workshop_UGCQueryComplete; + call->cb = on_workshop_UGCQueryComplete; call->userdata = NULL; UGCQueryHandle_t handle = SteamAPI_ISteamUGC_CreateQueryUserUGCRequest ( - hSteamUGC, + _steam_api.pSteamUGC, steamid.m_comp.m_unAccountID, k_EUserUGCList_Published, k_EUGCMatchingUGCType_Items, k_EUserUGCListSortOrder_CreationOrderDesc, SKATERIFT_APPID, SKATERIFT_APPID, 1 ); - SteamAPI_ISteamUGC_SetReturnMetadata( hSteamUGC, handle, 1 ); - call->id = SteamAPI_ISteamUGC_SendQueryUGCRequest( hSteamUGC, handle ); + SteamAPI_ISteamUGC_SetReturnMetadata( _steam_api.pSteamUGC, handle, 1 ); + call->id = SteamAPI_ISteamUGC_SendQueryUGCRequest( _steam_api.pSteamUGC, handle ); return 0; } @@ -1313,8 +1300,7 @@ static void workshop_form_gui_edit_page( ui_context *ctx, ui_rect content ) if( ui_button_text( ctx, btn_right, "\xb2", 2 ) == 1 ) { - ISteamFriends *hSteamFriends = SteamAPI_SteamFriends(); - SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage( hSteamFriends, + SteamAPI_ISteamFriends_ActivateGameOverlayToWebPage( _steam_api.pSteamFriends, "https://steamcommunity.com/sharedfiles/workshoplegalagreement", k_EActivateGameOverlayToWebPageMode_Default ); } @@ -1555,25 +1541,3 @@ void workshop_form_gui( ui_context *ctx ) workshop_form_gui_sidebar( ctx, sidebar ); } - -/* - * Some async api stuff - * ----------------------------------------------------------------------------- - */ - -#if 0 -void async_workshop_get_filepath( void *data, u32 len ) -{ - struct async_workshop_filepath_info *info = data; - - u64 _size; - u32 _ts; - - ISteamUGC *hSteamUGC = SteamAPI_SteamUGC(); - if( !SteamAPI_ISteamUGC_GetItemInstallInfo( hSteamUGC, info->id, &_size, info->buf, info->len, &_ts )) - { - vg_error( "GetItemInstallInfo failed\n" ); - info->buf[0] = '\0'; - } -} -#endif diff --git a/src/workshop.h b/src/workshop.h index 5c4e2f4..86dd180 100644 --- a/src/workshop.h +++ b/src/workshop.h @@ -1,11 +1,7 @@ #pragma once #include "addon_types.h" -#include "vg/vg_steam_remote_storage.h" +#include "vg/vg_steam2.h" #include "skaterift.h" -#include "vg/vg_steam_auth.h" -#include "vg/vg_steam_ugc.h" -#include "vg/vg_steam_friends.h" -#include "steam.h" #include "ent_skateshop.h" struct async_workshop_filepath_info{ diff --git a/src/world_entity.c b/src/world_entity.c index 18d36ca..f354a78 100644 --- a/src/world_entity.c +++ b/src/world_entity.c @@ -1,5 +1,4 @@ -#include "vg/vg_steam.h" -#include "vg/vg_steam_user_stats.h" +#include "vg/vg_steam2.h" #include "model.h" #include "entity.h" #include "world.h" diff --git a/src/world_routes.c b/src/world_routes.c index 3907a22..fe85807 100644 --- a/src/world_routes.c +++ b/src/world_routes.c @@ -15,7 +15,6 @@ #include "font.h" #include "gui.h" -#include "steam.h" #include "network_msg.h" #include "network_common.h" @@ -147,10 +146,7 @@ static void world_routes_time_lap( u32 route_index ) { struct track_info *ti = &track_infos[ route->anon.official_track_id ]; if( ti->achievement_id ) - { - steam_set_achievement( ti->achievement_id ); - steam_store_achievements(); - } + vg_steam_set_achievement( ti->achievement_id, 1 ); } char mod_uid[ ADDON_UID_MAX ];