From e2b534501cac1658b0bfb92ab6b041bf4b1aceb4 Mon Sep 17 00:00:00 2001 From: Aaron Kimbrell Date: Sun, 5 Apr 2026 03:24:26 -0500 Subject: [PATCH] Update dGame/dComponents/PropertyManagementComponent.cpp Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../PropertyManagementComponent.cpp | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/dGame/dComponents/PropertyManagementComponent.cpp b/dGame/dComponents/PropertyManagementComponent.cpp index 609ef6aa..981c0ce4 100644 --- a/dGame/dComponents/PropertyManagementComponent.cpp +++ b/dGame/dComponents/PropertyManagementComponent.cpp @@ -90,13 +90,33 @@ PropertyManagementComponent::PropertyManagementComponent(Entity* parent, const i } // Load reputation config - auto configFloat = [](const std::string& key, float def) { + auto configFloat = [](const std::string& key, const float def) { const auto& val = Game::config->GetValue(key); - return val.empty() ? def : std::stof(val); + if (val.empty()) { + return def; + } + + float parsedValue {}; + if (GeneralUtils::TryParse(val, parsedValue)) { + return parsedValue; + } + + LOG("Invalid config value for '%s': '%s'. Using default: %f", key.c_str(), val.c_str(), def); + return def; }; - auto configUint = [](const std::string& key, uint32_t def) { + auto configUint = [](const std::string& key, const std::uint32_t def) { const auto& val = Game::config->GetValue(key); - return val.empty() ? def : static_cast(std::stoul(val)); + if (val.empty()) { + return def; + } + + std::uint32_t parsedValue {}; + if (GeneralUtils::TryParse(val, parsedValue)) { + return parsedValue; + } + + LOG("Invalid config value for '%s': '%s'. Using default: %u", key.c_str(), val.c_str(), def); + return def; }; m_RepInterval = configFloat("property_rep_interval", 60.0f); m_RepDailyCap = configUint("property_rep_daily_cap", 50);