diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 671640e..9add043 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -121,6 +121,7 @@ add_executable(MassBuilderSaveTool WIN32 ProfileManager/ProfileManager.cpp Profile/Profile.h Profile/Profile.cpp + Profile/ResourceIDs.h MassManager/MassManager.h MassManager/MassManager.cpp Mass/Locators.h diff --git a/src/Profile/Profile.cpp b/src/Profile/Profile.cpp index 69ddccc..7c850de 100644 --- a/src/Profile/Profile.cpp +++ b/src/Profile/Profile.cpp @@ -27,6 +27,8 @@ #include "../UESaveFile/Types/IntProperty.h" #include "../UESaveFile/Types/StringProperty.h" +#include "ResourceIDs.h" + #include "Profile.h" using namespace Corrade; @@ -70,11 +72,52 @@ auto Profile::steamId() const -> std::string const& { } void Profile::refreshValues() { - _profile.reloadData(); + if(!_profile.reloadData()) { + _lastError = _profile.lastError(); + return; + } + + _name = _profile.at("CompanyName")->value; + + auto prop = _profile.at("ActiveFrameSlot"); + _activeFrameSlot = prop ? prop->value : 0; + + prop = _profile.at("Credit"); + _credits = prop ? prop->value : 0; + + prop = _profile.at("StoryProgress"); + _storyProgress = prop ? prop->value : 0; + + prop = _profile.at("LastMissionID"); + _lastMissionId = prop ? prop->value : 0; + + _verseSteel = getResource("ResourceMaterial", VerseSteel); + _undinium = getResource("ResourceMaterial", Undinium); + _necriumAlloy = getResource("ResourceMaterial", NecriumAlloy); + _lunarite = getResource("ResourceMaterial", Lunarite); + _asterite = getResource("ResourceMaterial", Asterite); + + _ednil = getResource("ResourceMaterial", Ednil); + _nuflalt = getResource("ResourceMaterial", Nuflalt); + _aurelene = getResource("ResourceMaterial", Aurelene); + _soldus = getResource("ResourceMaterial", Soldus); + _synthesisedN = getResource("ResourceMaterial", SynthesisedN); + + _alcarbonite = getResource("ResourceMaterial", Alcarbonite); + _keriphene = getResource("ResourceMaterial", Keriphene); + _nitinolCM = getResource("ResourceMaterial", NitinolCM); + _quarkium = getResource("ResourceMaterial", Quarkium); + _alterene = getResource("ResourceMaterial", Alterene); + + _mixedComposition = getResource("ResourceQuarkData", MixedComposition); + _voidResidue = getResource("ResourceQuarkData", VoidResidue); + _muscularConstruction = getResource("ResourceQuarkData", MuscularConstruction); + _mineralExoskeletology = getResource("ResourceQuarkData", MineralExoskeletology); + _carbonisedSkin = getResource("ResourceQuarkData", CarbonisedSkin); } -auto Profile::companyName() -> std::string const& { - return _profile.at("CompanyName")->value; +auto Profile::companyName() const -> std::string const& { + return _name; } auto Profile::renameCompany(const std::string& new_name) -> bool { @@ -90,14 +133,12 @@ auto Profile::renameCompany(const std::string& new_name) -> bool { return true; } -auto Profile::activeFrameSlot() -> Int { - auto active_frame_slot_prop = _profile.at("ActiveFrameSlot"); - return active_frame_slot_prop ? active_frame_slot_prop->value : 0; +auto Profile::activeFrameSlot() const -> Int { + return _activeFrameSlot; } -auto Profile::credits() -> Int { - auto credits_prop = _profile.at("Credit"); - return credits_prop ? credits_prop->value : 0; +auto Profile::credits() const -> Int { + return _credits; } auto Profile::setCredits(Int amount) -> bool { @@ -118,9 +159,8 @@ auto Profile::setCredits(Int amount) -> bool { return true; } -auto Profile::storyProgress() -> Int { - auto story_progress_prop = _profile.at("StoryProgress"); - return story_progress_prop ? story_progress_prop->value : 0; +auto Profile::storyProgress() const -> Int { + return _storyProgress; } auto Profile::setStoryProgress(Int progress) -> bool { @@ -141,174 +181,177 @@ auto Profile::setStoryProgress(Int progress) -> bool { return true; } -auto Profile::lastMissionId() -> Int { - auto last_mission_id_prop = _profile.at("LastMissionID"); - return last_mission_id_prop ? last_mission_id_prop->value : 0; +auto Profile::lastMissionId() const -> Int { + return _lastMissionId; } -auto Profile::verseSteel() -> Int { - return resource("ResourceMaterial", 0xC3500); +auto Profile::verseSteel() const -> Int { + return _verseSteel; } auto Profile::setVerseSteel(Int amount) -> bool { - return setResource("ResourceMaterial", 0xC3500, amount); + return setResource("ResourceMaterial", VerseSteel, amount); } -auto Profile::undinium() -> Int { - return resource("ResourceMaterial", 0xC3501); +auto Profile::undinium() const -> Int { + return _undinium; } auto Profile::setUndinium(Int amount) -> bool { - return setResource("ResourceMaterial", 0xC3501, amount); + return setResource("ResourceMaterial", Undinium, amount); } -auto Profile::necriumAlloy() -> Int { - return resource("ResourceMaterial", 0xC3502); +auto Profile::necriumAlloy() const -> Int { + return _necriumAlloy; } auto Profile::setNecriumAlloy(Int amount) -> bool { - return setResource("ResourceMaterial", 0xC3502, amount); + return setResource("ResourceMaterial", NecriumAlloy, amount); } -auto Profile::lunarite() -> Int { - return resource("ResourceMaterial", 0xC3503); +auto Profile::lunarite() const -> Int { + return _lunarite; } auto Profile::setLunarite(Int amount) -> bool { - return setResource("ResourceMaterial", 0xC3503, amount); + return setResource("ResourceMaterial", Lunarite, amount); } -auto Profile::asterite() -> Int { - return resource("ResourceMaterial", 0xC3504); +auto Profile::asterite() const -> Int { + return _asterite; } auto Profile::setAsterite(Int amount) -> bool { - return setResource("ResourceMaterial", 0xC3504, amount); + return setResource("ResourceMaterial", Asterite, amount); } -auto Profile::ednil() -> Int { - return resource("ResourceMaterial", 0xC350A); +auto Profile::ednil() const -> Int { + return _ednil; } auto Profile::setEdnil(Int amount) -> bool { - return setResource("ResourceMaterial", 0xC350A, amount); + return setResource("ResourceMaterial", Ednil, amount); } -auto Profile::nuflalt() -> Int { - return resource("ResourceMaterial", 0xC350B); +auto Profile::nuflalt() const -> Int { + return _nuflalt; } auto Profile::setNuflalt(Int amount) -> bool { - return setResource("ResourceMaterial", 0xC350B, amount); + return setResource("ResourceMaterial", Nuflalt, amount); } -auto Profile::aurelene() -> Int { - return resource("ResourceMaterial", 0xC350C); +auto Profile::aurelene() const -> Int { + return _aurelene; } auto Profile::setAurelene(Int amount) -> bool { - return setResource("ResourceMaterial", 0xC350C, amount); + return setResource("ResourceMaterial", Aurelene, amount); } -auto Profile::soldus() -> Int { - return resource("ResourceMaterial", 0xC350D); +auto Profile::soldus() const -> Int { + return _soldus; } auto Profile::setSoldus(Int amount) -> bool { - return setResource("ResourceMaterial", 0xC350D, amount); + return setResource("ResourceMaterial", Soldus, amount); } -auto Profile::synthesizedN() -> Int { - return resource("ResourceMaterial", 0xC350E); +auto Profile::synthesisedN() const -> Int { + return _synthesisedN; } -auto Profile::setSynthesizedN(Int amount) -> bool { - return setResource("ResourceMaterial", 0xC350E, amount); +auto Profile::setSynthesisedN(Int amount) -> bool { + return setResource("ResourceMaterial", SynthesisedN, amount); } -auto Profile::alcarbonite() -> Int { - return resource("ResourceMaterial", 0xC3514); +auto Profile::alcarbonite() const -> Int { + return _alcarbonite; } auto Profile::setAlcarbonite(Int amount) -> bool { - return setResource("ResourceMaterial", 0xC3514, amount); + return setResource("ResourceMaterial", Alcarbonite, amount); } -auto Profile::keriphene() -> Int { - return resource("ResourceMaterial", 0xC3515); +auto Profile::keriphene() const -> Int { + return _keriphene; } auto Profile::setKeriphene(Int amount) -> bool { - return setResource("ResourceMaterial", 0xC3515, amount); + return setResource("ResourceMaterial", Keriphene, amount); } -auto Profile::nitinolCM() -> Int { - return resource("ResourceMaterial", 0xC3516); +auto Profile::nitinolCM() const -> Int { + return _nitinolCM; } auto Profile::setNitinolCM(Int amount) -> bool { - return setResource("ResourceMaterial", 0xC3516, amount); + return setResource("ResourceMaterial", NitinolCM, amount); } -auto Profile::quarkium() -> Int { - return resource("ResourceMaterial", 0xC3517); +auto Profile::quarkium() const -> Int { + return _quarkium; } auto Profile::setQuarkium(Int amount) -> bool { - return setResource("ResourceMaterial", 0xC3517, amount); + return setResource("ResourceMaterial", Quarkium, amount); } -auto Profile::alterene() -> Int { - return resource("ResourceMaterial", 0xC3518); +auto Profile::alterene() const -> Int { + return _alterene; } auto Profile::setAlterene(Int amount) -> bool { - return setResource("ResourceMaterial", 0xC3518, amount); + return setResource("ResourceMaterial", Alterene, amount); } -auto Profile::mixedComposition() -> Int { - return resource("ResourceQuarkData", 0xDBBA0); +auto Profile::mixedComposition() const -> Int { + return _mixedComposition; } auto Profile::setMixedComposition(Int amount) -> bool { - return setResource("ResourceQuarkData", 0xDBBA0, amount); + return setResource("ResourceQuarkData", MixedComposition, amount); } -auto Profile::voidResidue() -> Int { - return resource("ResourceQuarkData", 0xDBBA1); +auto Profile::voidResidue() const -> Int { + return _voidResidue; } auto Profile::setVoidResidue(Int amount) -> bool { - return setResource("ResourceQuarkData", 0xDBBA1, amount); + return setResource("ResourceQuarkData", VoidResidue, amount); } -auto Profile::muscularConstruction() -> Int { - return resource("ResourceQuarkData", 0xDBBA2); +auto Profile::muscularConstruction() const -> Int { + return _muscularConstruction; } auto Profile::setMuscularConstruction(Int amount) -> bool { - return setResource("ResourceQuarkData", 0xDBBA2, amount); + return setResource("ResourceQuarkData", MuscularConstruction, amount); } -auto Profile::mineralExoskeletology() -> Int { - return resource("ResourceQuarkData", 0xDBBA3); +auto Profile::mineralExoskeletology() const -> Int { + return _mineralExoskeletology; } auto Profile::setMineralExoskeletology(Int amount) -> bool { - return setResource("ResourceQuarkData", 0xDBBA3, amount); + return setResource("ResourceQuarkData", MineralExoskeletology, amount); } -auto Profile::carbonizedSkin() -> Int { - return resource("ResourceQuarkData", 0xDBBA4); +auto Profile::carbonisedSkin() const -> Int { + return _carbonisedSkin; } -auto Profile::setCarbonizedSkin(Int amount) -> bool { - return setResource("ResourceQuarkData", 0xDBBA4, amount); +auto Profile::setCarbonisedSkin(Int amount) -> bool { + return setResource("ResourceQuarkData", CarbonisedSkin, amount); } -auto Profile::resource(const char* container, Int id) -> Int { +auto Profile::getResource(const char* container, Int id) -> Int { auto mats_prop = _profile.at(container); + if(!mats_prop) { + return 0; + } + static auto predicate = [&id](UnrealPropertyBase::ptr& prop){ auto res_prop = static_cast(prop.get()); return res_prop->id == id; @@ -321,6 +364,10 @@ auto Profile::resource(const char* container, Int id) -> Int { auto Profile::setResource(const char* container, Int id, Int amount) -> bool { auto mats_prop = _profile.at(container); + if(!mats_prop) { + return false; + } + static auto predicate = [&id](UnrealPropertyBase::ptr& prop){ auto res_prop = static_cast(prop.get()); return res_prop->id == id; diff --git a/src/Profile/Profile.h b/src/Profile/Profile.h index 513e817..3d7061b 100644 --- a/src/Profile/Profile.h +++ b/src/Profile/Profile.h @@ -45,81 +45,81 @@ class Profile { void refreshValues(); - auto companyName() -> std::string const&; + auto companyName() const -> std::string const&; auto renameCompany(const std::string& new_name) -> bool; - auto activeFrameSlot() -> Int; + auto activeFrameSlot() const -> Int; - auto credits() -> Int; + auto credits() const -> Int; auto setCredits(Int credits) -> bool; - auto storyProgress() -> Int; + auto storyProgress() const -> Int; auto setStoryProgress(Int progress) -> bool; - auto lastMissionId() -> Int; + auto lastMissionId() const -> Int; - auto verseSteel() -> Int; + auto verseSteel() const -> Int; auto setVerseSteel(Int amount) -> bool; - auto undinium() -> Int; + auto undinium() const -> Int; auto setUndinium(Int amount) -> bool; - auto necriumAlloy() -> Int; + auto necriumAlloy() const -> Int; auto setNecriumAlloy(Int amount) -> bool; - auto lunarite() -> Int; + auto lunarite() const -> Int; auto setLunarite(Int amount) -> bool; - auto asterite() -> Int; + auto asterite() const -> Int; auto setAsterite(Int amount) -> bool; - auto ednil() -> Int; + auto ednil() const -> Int; auto setEdnil(Int amount) -> bool; - auto nuflalt() -> Int; + auto nuflalt() const -> Int; auto setNuflalt(Int amount) -> bool; - auto aurelene() -> Int; + auto aurelene() const -> Int; auto setAurelene(Int amount) -> bool; - auto soldus() -> Int; + auto soldus() const -> Int; auto setSoldus(Int amount) -> bool; - auto synthesizedN() -> Int; - auto setSynthesizedN(Int amount) -> bool; + auto synthesisedN() const -> Int; + auto setSynthesisedN(Int amount) -> bool; - auto alcarbonite() -> Int; + auto alcarbonite() const -> Int; auto setAlcarbonite(Int amount) -> bool; - auto keriphene() -> Int; + auto keriphene() const -> Int; auto setKeriphene(Int amount) -> bool; - auto nitinolCM() -> Int; + auto nitinolCM() const -> Int; auto setNitinolCM(Int amount) -> bool; - auto quarkium() -> Int; + auto quarkium() const -> Int; auto setQuarkium(Int amount) -> bool; - auto alterene() -> Int; + auto alterene() const -> Int; auto setAlterene(Int amount) -> bool; - auto mixedComposition() -> Int; + auto mixedComposition() const -> Int; auto setMixedComposition(Int amount) -> bool; - auto voidResidue() -> Int; + auto voidResidue() const -> Int; auto setVoidResidue(Int amount) -> bool; - auto muscularConstruction() -> Int; + auto muscularConstruction() const -> Int; auto setMuscularConstruction(Int amount) -> bool; - auto mineralExoskeletology() -> Int; + auto mineralExoskeletology() const -> Int; auto setMineralExoskeletology(Int amount) -> bool; - auto carbonizedSkin() -> Int; - auto setCarbonizedSkin(Int amount) -> bool; + auto carbonisedSkin() const -> Int; + auto setCarbonisedSkin(Int amount) -> bool; private: - auto resource(const char* container, Int id) -> Int; + auto getResource(const char* container, Int id) -> Int; auto setResource(const char* container, Int id, Int amount) -> bool; std::string _profileDirectory; @@ -129,6 +129,36 @@ class Profile { UESaveFile _profile; + std::string _name; + Int _activeFrameSlot; + Int _credits; + Int _storyProgress; + Int _lastMissionId; + + Int _verseSteel = 0; + Int _undinium = 0; + Int _necriumAlloy = 0; + Int _lunarite = 0; + Int _asterite = 0; + + Int _ednil = 0; + Int _nuflalt = 0; + Int _aurelene = 0; + Int _soldus = 0; + Int _synthesisedN = 0; + + Int _alcarbonite = 0; + Int _keriphene = 0; + Int _nitinolCM = 0; + Int _quarkium = 0; + Int _alterene = 0; + + Int _mixedComposition = 0; + Int _voidResidue = 0; + Int _muscularConstruction = 0; + Int _mineralExoskeletology = 0; + Int _carbonisedSkin = 0; + std::string _steamId; bool _valid = false; diff --git a/src/Profile/ResourceIDs.h b/src/Profile/ResourceIDs.h new file mode 100644 index 0000000..085bf40 --- /dev/null +++ b/src/Profile/ResourceIDs.h @@ -0,0 +1,47 @@ +#pragma once + +// MassBuilderSaveTool +// Copyright (C) 2021 Guillaume Jacquemin +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#include + +using namespace Magnum; + +enum MaterialID : Int { + VerseSteel = 0xC3500, + Undinium = 0xC3501, + NecriumAlloy = 0xC3502, + Lunarite = 0xC3503, + Asterite = 0xC3504, + + Ednil = 0xC350A, + Nuflalt = 0xC350B, + Aurelene = 0xC350C, + Soldus = 0xC350D, + SynthesisedN = 0xC350E, + + Alcarbonite = 0xC3514, + Keriphene = 0xC3515, + NitinolCM = 0xC3516, + Quarkium = 0xC3517, + Alterene = 0xC3518, + + MixedComposition = 0xDBBA0, + VoidResidue = 0xDBBA1, + MuscularConstruction = 0xDBBA2, + MineralExoskeletology = 0xDBBA3, + CarbonisedSkin = 0xDBBA4 +};