mirror of
https://github.com/acidicoala/SmokeAPI.git
synced 2024-11-10 01:10:33 +00:00
Updated app id status
This commit is contained in:
parent
59fa68a7b4
commit
30f1076261
@ -83,7 +83,7 @@ SmokeAPI does not require any manual configuration. By default, it uses the most
|
|||||||
|
|
||||||
¹ DLC/Item IDs can be obtained from https://steamdb.info. You need to be logged in with your steam account in order to see accurate inventory item IDs.
|
¹ DLC/Item IDs can be obtained from https://steamdb.info. You need to be logged in with your steam account in order to see accurate inventory item IDs.
|
||||||
|
|
||||||
[SmokeAPI.json]: res/SmokeAPI.json
|
[SmokeAPI.json]: res/SmokeAPI.config.json
|
||||||
|
|
||||||
[manually maintained list of DLC IDs]: https://github.com/acidicoala/public-entitlements/blob/main/steam/v1/dlc.json
|
[manually maintained list of DLC IDs]: https://github.com/acidicoala/public-entitlements/blob/main/steam/v1/dlc.json
|
||||||
|
|
||||||
|
@ -3,15 +3,10 @@
|
|||||||
"logging": true,
|
"logging": true,
|
||||||
"unlock_family_sharing": true,
|
"unlock_family_sharing": true,
|
||||||
"default_app_status": "unlocked",
|
"default_app_status": "unlocked",
|
||||||
"default_dlc_status": "unlocked",
|
|
||||||
"override_app_status": {
|
"override_app_status": {
|
||||||
"1234": "locked",
|
"1234": "original",
|
||||||
"4321": "unlocked"
|
"4321": "unlocked",
|
||||||
},
|
"5678": "locked"
|
||||||
"override_dlc_status": {
|
|
||||||
"56789": "locked",
|
|
||||||
"98765": "unlocked",
|
|
||||||
"16384": "original"
|
|
||||||
},
|
},
|
||||||
"extra_dlcs": {
|
"extra_dlcs": {
|
||||||
"1234": {
|
"1234": {
|
@ -2,6 +2,7 @@
|
|||||||
#include <core/paths.hpp>
|
#include <core/paths.hpp>
|
||||||
#include <koalabox/util.hpp>
|
#include <koalabox/util.hpp>
|
||||||
#include <koalabox/io.hpp>
|
#include <koalabox/io.hpp>
|
||||||
|
#include <koalabox/logger.hpp>
|
||||||
|
|
||||||
namespace smoke_api::config {
|
namespace smoke_api::config {
|
||||||
Config instance; // NOLINT(cert-err58-cpp)
|
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);
|
|
||||||
|
|
||||||
if (instance.override_app_status.contains(app_id_key)) {
|
|
||||||
return instance.override_app_status[app_id_key];
|
|
||||||
}
|
|
||||||
|
|
||||||
return instance.default_app_status;
|
|
||||||
}
|
|
||||||
|
|
||||||
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];
|
|
||||||
}
|
|
||||||
|
|
||||||
return instance.default_dlc_status;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool is_dlc_unlocked(AppId_t app_id, AppId_t dlc_id, const Function<bool()>& original_function) {
|
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 app_id_str = std::to_string(app_id);
|
||||||
const auto dlc_status = config::get_dlc_status(dlc_id);
|
const auto dlc_id_str = std::to_string(dlc_id);
|
||||||
|
|
||||||
const auto app_unlocked = app_status == config::AppStatus::UNLOCKED;
|
auto status = instance.default_app_status;
|
||||||
const auto dlc_unlocked = dlc_status == config::DlcStatus::UNLOCKED ||
|
|
||||||
dlc_status != config::DlcStatus::LOCKED &&
|
|
||||||
original_function();
|
|
||||||
|
|
||||||
return app_unlocked && dlc_unlocked;
|
if (instance.override_app_status.contains(app_id_str)) {
|
||||||
|
status = instance.override_app_status[app_id_str];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (instance.override_app_status.contains(dlc_id_str)) {
|
||||||
|
status = instance.override_app_status[dlc_id_str];
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
)
|
||||||
|
|
||||||
|
return is_unlocked;
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector<DLC> get_extra_dlcs(AppId_t app_id) {
|
Vector<DLC> get_extra_dlcs(AppId_t app_id) {
|
||||||
|
@ -4,30 +4,19 @@
|
|||||||
#include <koalabox/core.hpp>
|
#include <koalabox/core.hpp>
|
||||||
|
|
||||||
namespace smoke_api::config {
|
namespace smoke_api::config {
|
||||||
|
|
||||||
enum class AppStatus {
|
enum class AppStatus {
|
||||||
LOCKED,
|
UNDEFINED,
|
||||||
|
ORIGINAL,
|
||||||
UNLOCKED,
|
UNLOCKED,
|
||||||
UNDEFINED
|
LOCKED,
|
||||||
};
|
};
|
||||||
|
|
||||||
NLOHMANN_JSON_SERIALIZE_ENUM(AppStatus, {
|
NLOHMANN_JSON_SERIALIZE_ENUM(AppStatus, {
|
||||||
{ AppStatus::UNDEFINED, nullptr },
|
{ AppStatus::UNDEFINED, nullptr },
|
||||||
{ AppStatus::LOCKED, "locked" },
|
{ AppStatus::ORIGINAL, "original" },
|
||||||
{ AppStatus::UNLOCKED, "unlocked" },
|
{ AppStatus::UNLOCKED, "unlocked" },
|
||||||
})
|
{ AppStatus::LOCKED, "locked" },
|
||||||
|
|
||||||
enum class DlcStatus {
|
|
||||||
LOCKED,
|
|
||||||
UNLOCKED,
|
|
||||||
ORIGINAL,
|
|
||||||
UNDEFINED
|
|
||||||
};
|
|
||||||
|
|
||||||
NLOHMANN_JSON_SERIALIZE_ENUM(DlcStatus, {
|
|
||||||
{ DlcStatus::UNDEFINED, nullptr },
|
|
||||||
{ DlcStatus::LOCKED, "locked" },
|
|
||||||
{ DlcStatus::UNLOCKED, "unlocked" },
|
|
||||||
{ DlcStatus::ORIGINAL, "original" },
|
|
||||||
})
|
})
|
||||||
|
|
||||||
struct Config {
|
struct Config {
|
||||||
@ -35,9 +24,7 @@ namespace smoke_api::config {
|
|||||||
bool logging = false;
|
bool logging = false;
|
||||||
bool unlock_family_sharing = true;
|
bool unlock_family_sharing = true;
|
||||||
AppStatus default_app_status = AppStatus::UNLOCKED;
|
AppStatus default_app_status = AppStatus::UNLOCKED;
|
||||||
DlcStatus default_dlc_status = DlcStatus::UNLOCKED;
|
|
||||||
Map<String, AppStatus> override_app_status;
|
Map<String, AppStatus> override_app_status;
|
||||||
Map<String, DlcStatus> override_dlc_status;
|
|
||||||
AppDlcNameMap extra_dlcs;
|
AppDlcNameMap extra_dlcs;
|
||||||
bool auto_inject_inventory = true;
|
bool auto_inject_inventory = true;
|
||||||
Vector<uint32_t> extra_inventory_items;
|
Vector<uint32_t> extra_inventory_items;
|
||||||
@ -50,9 +37,7 @@ namespace smoke_api::config {
|
|||||||
logging,
|
logging,
|
||||||
unlock_family_sharing,
|
unlock_family_sharing,
|
||||||
default_app_status,
|
default_app_status,
|
||||||
default_dlc_status,
|
|
||||||
override_app_status,
|
override_app_status,
|
||||||
override_dlc_status,
|
|
||||||
extra_dlcs,
|
extra_dlcs,
|
||||||
auto_inject_inventory,
|
auto_inject_inventory,
|
||||||
extra_inventory_items,
|
extra_inventory_items,
|
||||||
@ -64,10 +49,6 @@ namespace smoke_api::config {
|
|||||||
|
|
||||||
void init();
|
void init();
|
||||||
|
|
||||||
AppStatus get_app_status(uint32_t app_id);
|
|
||||||
|
|
||||||
DlcStatus get_dlc_status(uint32_t dlc_id);
|
|
||||||
|
|
||||||
bool is_dlc_unlocked(uint32_t app_id, uint32_t dlc_id, const Function<bool()>& original_function);
|
bool is_dlc_unlocked(uint32_t app_id, uint32_t dlc_id, const Function<bool()>& original_function);
|
||||||
|
|
||||||
Vector<DLC> get_extra_dlcs(AppId_t app_id);
|
Vector<DLC> get_extra_dlcs(AppId_t app_id);
|
||||||
|
Loading…
Reference in New Issue
Block a user