diff --git a/data/items/items.xml b/data/items/items.xml
index 8cec8f05ec6..0afe5ebe858 100644
--- a/data/items/items.xml
+++ b/data/items/items.xml
@@ -4027,6 +4027,9 @@
+
+
+
-
@@ -4342,6 +4345,9 @@
+
+
+
-
@@ -20590,6 +20596,9 @@
+
+
+
-
@@ -26310,6 +26319,9 @@
+
+
+
-
@@ -26319,6 +26331,9 @@
+
+
+
-
@@ -26328,6 +26343,9 @@
+
+
+
@@ -45774,6 +45792,9 @@ hands of its owner. Granted by TibiaRoyal.com"/>
+
+
+
-
@@ -45781,6 +45802,9 @@ hands of its owner. Granted by TibiaRoyal.com"/>
+
+
+
-
@@ -45788,6 +45812,9 @@ hands of its owner. Granted by TibiaRoyal.com"/>
+
+
+
-
@@ -45796,6 +45823,9 @@ hands of its owner. Granted by TibiaRoyal.com"/>
+
+
+
@@ -58245,6 +58275,9 @@ hands of its owner. Granted by TibiaRoyal.com"/>
+
+
+
-
diff --git a/src/lua/functions/core/game/config_functions.cpp b/src/lua/functions/core/game/config_functions.cpp
index d0e77a69352..b839f720057 100644
--- a/src/lua/functions/core/game/config_functions.cpp
+++ b/src/lua/functions/core/game/config_functions.cpp
@@ -70,12 +70,21 @@ int ConfigFunctions::luaConfigManagerGetBoolean(lua_State* L) {
}
int ConfigFunctions::luaConfigManagerGetFloat(lua_State* L) {
- auto key = getNumber(L, -1);
+ // configManager.getFloat(key, shouldRound = true)
+
+ // Ensure the first argument (key) is provided and is a valid enum
+ auto key = getNumber(L, 1);
if (!key) {
reportErrorFunc("Wrong enum");
return 1;
}
- lua_pushnumber(L, g_configManager().getFloat(key, __FUNCTION__));
+ // Check if the second argument (shouldRound) is provided and is a boolean; default to true if not provided
+ bool shouldRound = getBoolean(L, 2, true);
+ float value = g_configManager().getFloat(key, __FUNCTION__);
+ double finalValue = shouldRound ? static_cast(std::round(value * 100.0) / 100.0) : value;
+
+ g_logger().debug("[{}] key: {}, finalValue: {}, shouldRound: {}", __METHOD_NAME__, magic_enum::enum_name(key), finalValue, shouldRound);
+ lua_pushnumber(L, finalValue);
return 1;
}
diff --git a/src/lua/functions/core/game/config_functions.hpp b/src/lua/functions/core/game/config_functions.hpp
index ae4952e9643..9806a35f426 100644
--- a/src/lua/functions/core/game/config_functions.hpp
+++ b/src/lua/functions/core/game/config_functions.hpp
@@ -17,6 +17,33 @@ class ConfigFunctions final : LuaScriptInterface {
static void init(lua_State* L);
private:
+ /**
+ * @brief Retrieves a float configuration value from the configuration manager, with an optional rounding.
+ *
+ * This function is a Lua binding used to get a float value from the configuration manager. It requires
+ * a key as the first argument, which should be a valid enumeration. An optional second boolean argument
+ * specifies whether the retrieved float should be rounded to two decimal places.
+ *
+ * @param L Pointer to the Lua state. The first argument must be a valid enum key, and the second argument (optional)
+ * can be a boolean indicating whether to round the result.
+ *
+ * @return Returns 1 after pushing the result onto the Lua stack, indicating the number of return values.
+ *
+ * @exception reportErrorFunc Throws an error if the first argument is not a valid enum.
+ *
+ * Usage:
+ * local result = ConfigManager.getFloat(ConfigKey.SomeKey)
+ * local result_rounded = ConfigManager.getFloat(ConfigKey.SomeKey, false)
+ *
+ * Detailed behavior:
+ * 1. Extracts the key from the first Lua stack argument as an enumeration of type `ConfigKey_t`.
+ * 2. Checks if the second argument is provided; if not, defaults to true for rounding.
+ * 3. Retrieves the float value associated with the key from the configuration manager.
+ * 4. If rounding is requested, rounds the value to two decimal places.
+ * 5. Logs the method call and the obtained value using the debug logger.
+ * 6. Pushes the final value (rounded or original) back onto the Lua stack.
+ * 7. Returns 1 to indicate a single return value.
+ */
static int luaConfigManagerGetFloat(lua_State* L);
static int luaConfigManagerGetBoolean(lua_State* L);
static int luaConfigManagerGetNumber(lua_State* L);