Fix hud_change stat argument retrieval
authorkwolekr <kwolekr@minetest.net>
Sun, 21 Apr 2013 16:55:46 +0000 (12:55 -0400)
committerkwolekr <kwolekr@minetest.net>
Sun, 21 Apr 2013 16:55:46 +0000 (12:55 -0400)
src/scriptapi_object.cpp

index 3d56aad29c1dc588abec44fed3b80f01ebba278f..9152c9eb357c498d7290d21924cdb500072e2bc3 100644 (file)
@@ -788,15 +788,17 @@ int ObjectRef::l_hud_change(lua_State *L)
        if (player == NULL)
                return 0;
 
-       u32 id = -1;
-       if (!lua_isnil(L, 2))
-               id = lua_tonumber(L, 2);
-       
-       HudElementStat stat = (HudElementStat)getenumfield(L, 3, "stat",
-                                                               es_HudElementStat, HUD_STAT_NUMBER);
-       
+       u32 id = !lua_isnil(L, 2) ? lua_tonumber(L, 2) : -1;
        if (id >= player->hud.size())
                return 0;
+               
+       HudElementStat stat = HUD_STAT_NUMBER;
+       if (!lua_isnil(L, 3)) {
+               int statint;
+               std::string statstr = lua_tostring(L, 3);
+               stat = string_to_enum(es_HudElementStat, statint, statstr) ?
+                               (HudElementStat)statint : HUD_STAT_NUMBER;
+       }
        
        void *value = NULL;
        HudElement *e = player->hud[id];
@@ -832,7 +834,7 @@ int ObjectRef::l_hud_change(lua_State *L)
                        e->dir = lua_tonumber(L, 4);
                        value = &e->dir;
        }
-       
+
        get_server(L)->hudChange(player, id, stat, value);
 
        lua_pushboolean(L, true);