diff options
Diffstat (limited to 'triggers.lua')
-rw-r--r-- | triggers.lua | 449 |
1 files changed, 144 insertions, 305 deletions
diff --git a/triggers.lua b/triggers.lua index 7d028ee..476ca7f 100644 --- a/triggers.lua +++ b/triggers.lua @@ -14,143 +14,75 @@ -- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -- -local S, NS = awards.gettext, awards.ngettext +awards.register_trigger("death", { + type = "counted", + progress = "@1/@2 deaths", + auto_description = { "Die once", "Die @1 times" }, +}) +minetest.register_on_dieplayer(awards.notify_death) -awards.register_trigger("dig", function(def) - local tmp = { - award = def.name, - node = def.trigger.node, - target = def.trigger.target, - } - table.insert(awards.on.dig, tmp) - def.getProgress = function(self, data) - local itemcount - if tmp.node then - itemcount = awards.get_item_count(data, "count", tmp.node) or 0 - else - itemcount = awards.get_total_item_count(data, "count") - end - return { - perc = itemcount / tmp.target, - label = S("@1/@2 dug", itemcount, tmp.target), - } - end - def.getDefaultDescription = function(self) - local n = self.trigger.target - if self.trigger.node then - local nname = minetest.registered_nodes[self.trigger.node].description - if nname == nil then - nname = self.trigger.node - end - -- Translators: @1 is count, @2 is description. - return NS("Mine: @2", "Mine: @1×@2", n, n, nname) - else - return NS("Mine @1 block.", "Mine @1 blocks.", n, n) - end +awards.register_trigger("chat", { + type = "counted", + progress = "@1/@2 chat messages", + auto_description = { "Send a chat message", "Chat @1 times" }, +}) +minetest.register_on_chat_message(function(name, message) + local player = minetest.get_player_by_name(name) + if not player or string.find(message, "/") then + return end -end) -awards.register_trigger("place", function(def) - local tmp = { - award = def.name, - node = def.trigger.node, - target = def.trigger.target, - } - table.insert(awards.on.place, tmp) - def.getProgress = function(self, data) - local itemcount - if tmp.node then - itemcount = awards.get_item_count(data, "place", tmp.node) or 0 - else - itemcount = awards.get_total_item_count(data, "place") - end - return { - perc = itemcount / tmp.target, - label = S("@1/@2 placed", itemcount, tmp.target), - } - end - def.getDefaultDescription = function(self) - local n = self.trigger.target - if self.trigger.node then - local nname = minetest.registered_nodes[self.trigger.node].description - if nname == nil then - nname = self.trigger.node - end - -- Translators: @1 is count, @2 is description. - return NS("Place: @2", "Place: @1×@2", n, n, nname) - else - return NS("Place a block.", "Place @1 blocks.", n, n) - end - end + awards.notify_chat(player) end) -awards.register_trigger("eat", function(def) - local tmp = { - award = def.name, - item = def.trigger.item, - target = def.trigger.target, - } - table.insert(awards.on.eat, tmp) - def.getProgress = function(self, data) - local itemcount - if tmp.item then - itemcount = awards.get_item_count(data, "eat", tmp.item) or 0 - else - itemcount = awards.get_total_item_count(data, "eat") - end - return { - perc = itemcount / tmp.target, - label = S("@1/@2 eaten", itemcount, tmp.target), - } - end - def.getDefaultDescription = function(self) - local n = self.trigger.target - if self.trigger.item then - local iname = minetest.registered_items[self.trigger.item].description - if iname == nil then - iname = self.trigger.iode - end - -- Translators: @1 is count, @2 is description. - return NS("Eat: @2", "Eat: @1×@2", n, n, iname) - else - return NS("Eat an item.", "Eat @1 items.", n, n) - end - end -end) +awards.register_trigger("join", { + type = "counted", + progress = "@1/@2 joins", + auto_description = { "Join once", "Join @1 times" }, +}) +minetest.register_on_joinplayer(awards.notify_join) + +-- +-- awards.register_trigger("dig", { +-- type = "counted_key", +-- progress = "@1/@2 dug", +-- auto_description = { "Mine: @2", "Mine: @1×@2" }, +-- auto_description_total = { "Mine @1 block.", "Mine @1 blocks." }, +-- get_key = function(self, def) +-- return minetest.registered_aliases[def.trigger.node] or def.trigger.node +-- end +-- }) +-- +-- minetest.register_on_dignode(function(pos, oldnode, player) +-- if not player or not pos or not oldnode then +-- return +-- end +-- +-- local node_name = oldnode.name +-- node_name = minetest.registered_aliases[node_name] or node_name +-- awards.notify_dig(player, node_name) +-- end) +-- +-- awards.register_trigger("place", { +-- type = "counted_key", +-- progress = "@1/@2 placed", +-- auto_description = { "Place: @2", "Place: @1×@2" }, +-- auto_description_total = { "Place @1 block.", "Place @1 blocks." }, +-- get_key = function(self, def) +-- return minetest.registered_aliases[def.trigger.node] or def.trigger.node +-- end +-- }) +-- +-- awards.register_trigger("craft", { +-- type = "counted_key", +-- progress = "@1/@2 crafted", +-- auto_description = { "Craft: @2", "Craft: @1×@2" }, +-- auto_description_total = { "Craft @1 item", "Craft @1 items." }, +-- get_key = function(self, def) +-- return minetest.registered_aliases[def.trigger.item] or def.trigger.item +-- end +-- }) -awards.register_trigger("craft", function(def) - local tmp = { - award = def.name, - item = def.trigger.item, - target = def.trigger.target, - } - table.insert(awards.on.craft, tmp) - def.getProgress = function(self, data) - local itemcount - if tmp.item then - itemcount = awards.get_item_count(data, "craft", tmp.item) or 0 - else - itemcount = awards.get_total_item_count(data, "craft") - end - return { - perc = itemcount / tmp.target, - label = S("@1/@2 crafted", itemcount, tmp.target), - } - end - def.getDefaultDescription = function(self) - local n = self.trigger.target - if self.trigger.item then - local iname = minetest.registered_items[self.trigger.item].description - if iname == nil then - iname = self.trigger.item - end - -- Translators: @1 is count, @2 is description. - return NS("Craft: @2", "Craft: @1×@2", n, n, iname) - else - return NS("Craft an item.", "Craft @1 items.", n) - end - end -end) -- Backwards compatibility awards.register_onDig = awards.register_on_dig @@ -161,177 +93,84 @@ awards.register_onJoin = awards.register_on_join awards.register_onCraft = awards.register_on_craft -- Trigger Handles -minetest.register_on_dignode(function(pos, oldnode, digger) - if not digger or not pos or not oldnode then - return - end - - local data = awards.players[digger:get_player_name()] - if not awards.increment_item_counter(data, "count", oldnode.name) then - return - end - awards.run_trigger_callbacks(digger, data, "dig", function(entry) - if entry.target then - if entry.node then - local tnodedug = string.split(entry.node, ":") - local tmod = tnodedug[1] - local titem = tnodedug[2] - if not (not tmod or not titem or not data.count[tmod] or - not data.count[tmod][titem]) and - data.count[tmod][titem] > entry.target-1 then - return entry.award - end - elseif awards.get_total_item_count(data, "count") > entry.target-1 then - return entry.award - end - end - end) -end) - -minetest.register_on_placenode(function(pos, node, digger) - if not digger or not pos or not node or not digger:get_player_name() or digger:get_player_name()=="" then - return - end - local data = awards.players[digger:get_player_name()] - if not awards.increment_item_counter(data, "place", node.name) then - return - end - - awards.run_trigger_callbacks(digger, data, "place", function(entry) - if entry.target then - if entry.node then - local tnodedug = string.split(entry.node, ":") - local tmod = tnodedug[1] - local titem = tnodedug[2] - if not (not tmod or not titem or not data.place[tmod] or - not data.place[tmod][titem]) and - data.place[tmod][titem] > entry.target-1 then - return entry.award - end - elseif awards.get_total_item_count(data, "place") > entry.target-1 then - return entry.award - end - end - end) -end) - -minetest.register_on_item_eat(function(hp_change, replace_with_item, itemstack, user, pointed_thing) - if not user or not itemstack or not user:get_player_name() or user:get_player_name()=="" then - return - end - local data = awards.players[user:get_player_name()] - if not awards.increment_item_counter(data, "eat", itemstack:get_name()) then - return - end - awards.run_trigger_callbacks(user, data, "eat", function(entry) - if entry.target then - if entry.item then - local titemstring = string.split(entry.item, ":") - local tmod = titemstring[1] - local titem = titemstring[2] - if not (not tmod or not titem or not data.eat[tmod] or - not data.eat[tmod][titem]) and - data.eat[tmod][titem] > entry.target-1 then - return entry.award - end - elseif awards.get_total_item_count(data, "eat") > entry.target-1 then - return entry.award - end - end - end) -end) - -minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) - if not player or not itemstack then - return - end - - local data = awards.players[player:get_player_name()] - if not awards.increment_item_counter(data, "craft", itemstack:get_name(), itemstack:get_count()) then - return - end - - awards.run_trigger_callbacks(player, data, "craft", function(entry) - if entry.target then - if entry.item then - local titemcrafted = string.split(entry.item, ":") - local tmod = titemcrafted[1] - local titem = titemcrafted[2] - if not (not tmod or not titem or not data.craft[tmod] or - not data.craft[tmod][titem]) and - data.craft[tmod][titem] > entry.target-1 then - return entry.award - end - elseif awards.get_total_item_count(data, "craft") > entry.target-1 then - return entry.award - end - end - end) -end) - -awards.register_trigger_counted("death", function(def) - local tmp = { - award = def.name, - target = def.trigger.target, - } - table.insert(awards.on.death, tmp) - def.getProgress = function(self, data) - local itemcount = data.deaths or 0 - return { - perc = itemcount / tmp.target, - label = S("@1/@2 deaths", itemcount, tmp.target), - } - end - def.getDefaultDescription = function(self) - local n = self.trigger.target - return NS("Die.", "Die @1 times.", n, n) - end -end) -minetest.register_on_dieplayer(awards.notify_death) - -awards.register_trigger_counted("chat", function(def) - local tmp = { - award = def.name, - target = def.trigger.target, - } - table.insert(awards.on.chat, tmp) - def.getProgress = function(self, data) - local itemcount = data.chats or 0 - return { - perc = itemcount / tmp.target, - label = S("@1/@2 chat messages", itemcount, tmp.target), - } - end - def.getDefaultDescription = function(self) - local n = self.trigger.target - return NS("Write something in chat.", "Write @1 chat messages.", n, n) - end -end) -minetest.register_on_chat_message(function(name, message) - local player = minetest.get_player_by_name(name) - if not player or string.find(message, "/") then - return - end - - awards.notify_chat(player) -end) - -awards.register_trigger_counted("join", function(def) - local tmp = { - award = def.name, - target = def.trigger.target, - } - table.insert(awards.on.join, tmp) - def.getProgress = function(self, data) - local itemcount = data.joins or 0 - return { - perc = itemcount / tmp.target, - label = S("@1/@2 game joins", itemcount, tmp.target), - } - end - def.getDefaultDescription = function(self) - local n = self.trigger.target - return NS("Join the game.", "Join the game @1 times.", n, n) - end -end) -minetest.register_on_joinplayer(awards.notify_join) +-- +-- minetest.register_on_placenode(function(pos, node, digger) +-- if not digger or not pos or not node or not digger:get_player_name() or digger:get_player_name()=="" then +-- return +-- end +-- local data = awards.players[digger:get_player_name()] +-- if not awards.increment_item_counter(data, "place", node.name) then +-- return +-- end +-- +-- awards.run_trigger_callbacks(digger, data, "place", function(entry) +-- if entry.target then +-- if entry.node then +-- local tnodedug = string.split(entry.node, ":") +-- local tmod = tnodedug[1] +-- local titem = tnodedug[2] +-- if not (not tmod or not titem or not data.place[tmod] or +-- not data.place[tmod][titem]) and +-- data.place[tmod][titem] > entry.target-1 then +-- return entry.award +-- end +-- elseif awards.get_total_item_count(data, "place") > entry.target-1 then +-- return entry.award +-- end +-- end +-- end) +-- end) +-- +-- minetest.register_on_item_eat(function(hp_change, replace_with_item, itemstack, user, pointed_thing) +-- if not user or not itemstack or not user:get_player_name() or user:get_player_name()=="" then +-- return +-- end +-- local data = awards.players[user:get_player_name()] +-- if not awards.increment_item_counter(data, "eat", itemstack:get_name()) then +-- return +-- end +-- awards.run_trigger_callbacks(user, data, "eat", function(entry) +-- if entry.target then +-- if entry.item then +-- local titemstring = string.split(entry.item, ":") +-- local tmod = titemstring[1] +-- local titem = titemstring[2] +-- if not (not tmod or not titem or not data.eat[tmod] or +-- not data.eat[tmod][titem]) and +-- data.eat[tmod][titem] > entry.target-1 then +-- return entry.award +-- end +-- elseif awards.get_total_item_count(data, "eat") > entry.target-1 then +-- return entry.award +-- end +-- end +-- end) +-- end) +-- +-- minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) +-- if not player or not itemstack then +-- return +-- end +-- +-- local data = awards.players[player:get_player_name()] +-- if not awards.increment_item_counter(data, "craft", itemstack:get_name(), itemstack:get_count()) then +-- return +-- end +-- +-- awards.run_trigger_callbacks(player, data, "craft", function(entry) +-- if entry.target then +-- if entry.item then +-- local titemcrafted = string.split(entry.item, ":") +-- local tmod = titemcrafted[1] +-- local titem = titemcrafted[2] +-- if not (not tmod or not titem or not data.craft[tmod] or +-- not data.craft[tmod][titem]) and +-- data.craft[tmod][titem] > entry.target-1 then +-- return entry.award +-- end +-- elseif awards.get_total_item_count(data, "craft") > entry.target-1 then +-- return entry.award +-- end +-- end +-- end) +-- end) |