diff --git a/src/Mass/Mass.cpp b/src/Mass/Mass.cpp index 246006e..0e181d4 100644 --- a/src/Mass/Mass.cpp +++ b/src/Mass/Mass.cpp @@ -558,7 +558,19 @@ auto Mass::writeFrameCustomStyle(UnsignedLong index) -> bool { return false; } - return setCustomStyle(_frame.customStyles[index], index, "FrameStyle_44_04A44C9440363CCEC5443D98BFAF22AA"); + auto unit_data = _mass->at("UnitData"); + if(!unit_data) { + _state = State::Invalid; + return false; + } + + auto frame_styles = unit_data->at("FrameStyle_44_04A44C9440363CCEC5443D98BFAF22AA"); + if(!frame_styles) { + _state = State::Invalid; + return false; + } + + return setCustomStyle(_frame.customStyles[index], index, frame_styles); } auto Mass::armourParts() -> Containers::StaticArrayView<38, ArmourPart> { @@ -823,7 +835,19 @@ auto Mass::writeArmourCustomStyle(UnsignedLong index) -> bool { return false; } - return setCustomStyle(_armour.customStyles[index], index, "ArmorStyle_42_E2F6AC3647788CB366BD469B3B7E899E"); + auto unit_data = _mass->at("UnitData"); + if(!unit_data) { + _state = State::Invalid; + return false; + } + + auto armour_styles = unit_data->at("ArmorStyle_42_E2F6AC3647788CB366BD469B3B7E899E"); + if(!armour_styles) { + _state = State::Invalid; + return false; + } + + return setCustomStyle(_armour.customStyles[index], index, armour_styles); } auto Mass::meleeWeapons() -> Containers::StaticArrayView<8, Weapon> { @@ -926,7 +950,19 @@ auto Mass::writeGlobalStyle(UnsignedLong index) -> bool { return false; } - return setCustomStyle(_globalStyles[index], index, "GlobalStyles_57_6A681C114035241F7BDAAE9B43A8BF1B"); + auto unit_data = _mass->at("UnitData"); + if(!unit_data) { + _state = State::Invalid; + return false; + } + + auto global_styles = unit_data->at("GlobalStyles_57_6A681C114035241F7BDAAE9B43A8BF1B"); + if(!global_styles) { + _state = State::Invalid; + return false; + } + + return setCustomStyle(_globalStyles[index], index, global_styles); } auto Mass::updateSteamId(const std::string& steam_id) -> bool { @@ -943,20 +979,12 @@ auto Mass::updateSteamId(const std::string& steam_id) -> bool { return _mass->saveToFile(); } -auto Mass::setCustomStyle(const CustomStyle& style, UnsignedLong index, const char* prop_name) -> bool { - auto unit_data = _mass->at("UnitData"); - if(!unit_data) { - _state = State::Invalid; +auto Mass::setCustomStyle(const CustomStyle& style, UnsignedLong index, ArrayProperty* style_array) -> bool { + if(!style_array) { return false; } - auto frame_styles = unit_data->at(prop_name); - if(!frame_styles) { - _state = State::Invalid; - return false; - } - - auto style_prop = frame_styles->at(index); + auto style_prop = style_array->at(index); style_prop->at("Name_27_1532115A46EF2B2FA283908DF561A86B")->value = style.name; auto colour_prop = style_prop->at("Color_5_F0D383DF40474C9464AE48A0984A212E"); diff --git a/src/Mass/Mass.h b/src/Mass/Mass.h index 719845f..57a289e 100644 --- a/src/Mass/Mass.h +++ b/src/Mass/Mass.h @@ -32,6 +32,8 @@ using namespace Corrade; using namespace Magnum; +struct ArrayProperty; + struct Joints { Float neck = 0.0f; Float body = 0.0f; @@ -197,7 +199,7 @@ class Mass { auto updateSteamId(const std::string& steam_id) -> bool; private: - auto setCustomStyle(const CustomStyle& style, UnsignedLong index, const char* prop_name) -> bool; + auto setCustomStyle(const CustomStyle& style, UnsignedLong index, ArrayProperty* style_array) -> bool; void getWeaponType(const char* prop_name, Containers::ArrayView weapon_array);