From 5b318d2b2824dbe879b31bc026cdecb4c0576456 Mon Sep 17 00:00:00 2001 From: Beha Date: Sun, 5 Apr 2020 00:26:48 -0400 Subject: [PATCH] Fix use of uninitialized data. Since groups were notified before the `__total` count was initialized (and groups can't initialize `__total`), when run_callbacks tried to access `__total` it got `nil`. This is fixed by moving the notification of groups to *after* the counter is incremented and `__total` is initialized. --- src/api_triggers.lua | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/api_triggers.lua b/src/api_triggers.lua index d763a05..903b593 100644 --- a/src/api_triggers.lua +++ b/src/api_triggers.lua @@ -141,17 +141,6 @@ function awards.register_trigger(tname, tdef) function tdef.notify(player, key, n) n = n or 1 - if tdef.key_is_item and key:sub(1, 6) ~= "group:" then - local itemdef = minetest.registered_items[key] - if itemdef then - for groupname,rating in pairs(itemdef.groups or {}) do - if rating ~= 0 and tdef.watched_groups[groupname] then - tdef.notify(player, "group:" .. groupname, n) - end - end - end - end - assert(player and player.is_player and player:is_player() and key) local name = player:get_player_name() local data = awards.player(name) @@ -164,6 +153,17 @@ function awards.register_trigger(tname, tdef) data[tname].__total = (data[tname].__total or 0) + n end + if tdef.key_is_item and key:sub(1, 6) ~= "group:" then + local itemdef = minetest.registered_items[key] + if itemdef then + for groupname,rating in pairs(itemdef.groups or {}) do + if rating ~= 0 and tdef.watched_groups[groupname] then + tdef.notify(player, "group:" .. groupname, n) + end + end + end + end + tdef:run_callbacks(player, data, function(entry) local current if entry.key == key then