diff options
author | Vittorio Romeo <vittorio.romeo@outlook.com> | 2021-10-27 22:43:57 +0100 |
---|---|---|
committer | Vittorio Romeo <vittorio.romeo@outlook.com> | 2021-10-27 22:43:57 +0100 |
commit | 54c83e59fa22fd90a1c9db85975eb3348647b30d (patch) | |
tree | fe90857956873c026410ed7adf29584021586691 | |
parent | 8eaf89e2b292a55097ad454c0515fa29b5c863bc (diff) |
Add hypercube god achievement to steam hardcoded achievements
-rw-r--r-- | src/SSVOpenHexagon/Core/Steam.cpp | 120 |
1 files changed, 69 insertions, 51 deletions
diff --git a/src/SSVOpenHexagon/Core/Steam.cpp b/src/SSVOpenHexagon/Core/Steam.cpp index 3fb5a140..ba490a5b 100644 --- a/src/SSVOpenHexagon/Core/Steam.cpp +++ b/src/SSVOpenHexagon/Core/Steam.cpp @@ -104,6 +104,7 @@ private: bool update_hardcoded_achievement_cube_master(); bool update_hardcoded_achievement_hypercube_master(); bool update_hardcoded_achievement_cube_god(); + bool update_hardcoded_achievement_hypercube_god(); void load_workshop_data(); @@ -139,6 +140,7 @@ public: bool set_and_store_stat(std::string_view name, int data); [[nodiscard]] bool get_achievement(bool* out, std::string_view name); [[nodiscard]] bool get_stat(int* out, std::string_view name); + [[nodiscard]] std::optional<bool> is_achievement_unlocked(const char* name); bool update_hardcoded_achievements(); @@ -429,31 +431,30 @@ bool steam_manager::steam_manager_impl::set_and_store_stat( return false; } -bool steam_manager::steam_manager_impl:: - update_hardcoded_achievement_cube_master() +[[nodiscard]] std::optional<bool> +steam_manager::steam_manager_impl::is_achievement_unlocked(const char* name) { - if(!_initialized) + bool res{false}; + const bool rc = get_achievement(&res, name); + + if(!rc) { - return false; + return std::nullopt; } - if(!_got_stats) + return res; +} + +bool steam_manager::steam_manager_impl:: + update_hardcoded_achievement_cube_master() +{ + if(!_initialized || !_got_stats) { return false; } const auto unlocked = [this](const char* name) -> int - { - bool res{false}; - const bool rc = get_achievement(&res, name); - - if(!rc) - { - return 0; - } - - return res ? 1 : 0; - }; + { return is_achievement_unlocked(name).value_or(false) ? 1 : 0; }; // "Cube Master" { @@ -491,28 +492,13 @@ bool steam_manager::steam_manager_impl:: bool steam_manager::steam_manager_impl:: update_hardcoded_achievement_hypercube_master() { - if(!_initialized) - { - return false; - } - - if(!_got_stats) + if(!_initialized || !_got_stats) { return false; } const auto unlocked = [this](const char* name) -> int - { - bool res{false}; - const bool rc = get_achievement(&res, name); - - if(!rc) - { - return 0; - } - - return res ? 1 : 0; - }; + { return is_achievement_unlocked(name).value_or(false) ? 1 : 0; }; // "Hypercube Master" { @@ -547,31 +533,15 @@ bool steam_manager::steam_manager_impl:: return true; } - bool steam_manager::steam_manager_impl::update_hardcoded_achievement_cube_god() { - if(!_initialized) - { - return false; - } - - if(!_got_stats) + if(!_initialized || !_got_stats) { return false; } const auto unlocked = [this](const char* name) -> int - { - bool res{false}; - const bool rc = get_achievement(&res, name); - - if(!rc) - { - return 0; - } - - return res ? 1 : 0; - }; + { return is_achievement_unlocked(name).value_or(false) ? 1 : 0; }; // "Cube God" { @@ -605,6 +575,49 @@ bool steam_manager::steam_manager_impl::update_hardcoded_achievement_cube_god() return true; } +bool steam_manager::steam_manager_impl:: + update_hardcoded_achievement_hypercube_god() +{ + if(!_initialized || !_got_stats) + { + return false; + } + + const auto unlocked = [this](const char* name) -> int + { return is_achievement_unlocked(name).value_or(false) ? 1 : 0; }; + + // "Hypercube Master" + { + int stat; + const bool rc = get_stat(&stat, "s3_packprogress_hypercubegod"); + + if(!rc) + { + return false; + } + + const int acc = unlocked("a38_disco_hard") + // + unlocked("a39_acceleradiant_hard") + // + unlocked("a40_gforce_hard") + // + unlocked("a41_incongruence_hard") + // + unlocked("a42_slither_hard") + // + unlocked("a43_polyhedrug_hard") + // + unlocked("a44_reppaws_hard") + // + unlocked("a45_centrifugalforce_hard") + // + unlocked("a46_massacre_hard"); + + if(acc > stat) + { + if(!set_and_store_stat("s3_packprogress_hypercubegod", acc)) + { + return false; + } + } + } + + return true; +} + bool steam_manager::steam_manager_impl::update_hardcoded_achievements() { bool success = true; @@ -624,6 +637,11 @@ bool steam_manager::steam_manager_impl::update_hardcoded_achievements() success = false; } + if(!update_hardcoded_achievement_hypercube_god()) + { + success = false; + } + return success; } |