@ -2,6 +2,7 @@
# include <core/paths.hpp>
# include <koalabox/util.hpp>
# include <koalabox/io.hpp>
# include <koalabox/logger.hpp>
namespace smoke_api : : config {
Config instance ; // NOLINT(cert-err58-cpp)
@ -19,42 +20,39 @@ namespace smoke_api::config {
}
}
AppStatus get_app_status ( AppId_t app_id ) {
if ( app_id = = 0 ) {
// 0 is a special internal value reserved for cases where we don't know id.
// This is typically the case in non-koalageddon modes, hence we treat it as unlocked.
return AppStatus : : UNLOCKED ;
}
const auto app_id_key = std : : to_string ( app_id ) ;
bool is_dlc_unlocked ( AppId_t app_id , AppId_t dlc_id , const Function < bool ( ) > & original_function ) {
const auto app_id_str = std : : to_string ( app_id ) ;
const auto dlc_id_str = std : : to_string ( dlc_id ) ;
if ( instance . override_app_status . contains ( app_id_key ) ) {
return instance . override_app_status [ app_id_key ] ;
}
auto status = instance . default_app_status ;
return instance . default_app_status ;
if ( instance . override_app_status . contains ( app_id_str ) ) {
status = instance . override_app_status [ app_id_str ] ;
}
DlcStatus get_dlc_status ( AppId_t dlc_id ) {
const auto dlc_id_key = std : : to_string ( dlc_id ) ;
if ( instance . override_dlc_status . contains ( dlc_id_key ) ) {
return instance . override_dlc_status [ dlc_id_key ] ;
if ( instance . override_app_status . contains ( dlc_id_str ) ) {
status = instance . override_app_status [ dlc_id_str ] ;
}
return instance . default_dlc_status ;
bool is_unlocked ;
switch ( status ) {
case AppStatus : : UNLOCKED :
is_unlocked = true ;
break ;
case AppStatus : : LOCKED :
is_unlocked = false ;
break ;
case AppStatus : : ORIGINAL :
case AppStatus : : UNDEFINED :
is_unlocked = original_function ( ) ;
break ;
}
LOG_TRACE (
" App ID: {}, DLC ID: {}, Status: {}, Original: {}, Is Unlocked: {} " ,
app_id_str , dlc_id_str , Json ( status ) . dump ( ) , original_function ( ) , is_unlocked
)
bool is_dlc_unlocked ( AppId_t app_id , AppId_t dlc_id , const Function < bool ( ) > & original_function ) {
const auto app_status = config : : get_app_status ( app_id ) ;
const auto dlc_status = config : : get_dlc_status ( dlc_id ) ;
const auto app_unlocked = app_status = = config : : AppStatus : : UNLOCKED ;
const auto dlc_unlocked = dlc_status = = config : : DlcStatus : : UNLOCKED | |
dlc_status ! = config : : DlcStatus : : LOCKED & &
original_function ( ) ;
return app_unlocked & & dlc_unlocked ;
return is_unlocked ;
}
Vector < DLC > get_extra_dlcs ( AppId_t app_id ) {