From 17994ed8dbd5343d5f5dc148e5b5418e2ced39df Mon Sep 17 00:00:00 2001 From: OgelGames Date: Sat, 20 Jun 2020 22:35:24 +1000 Subject: [PATCH 1/4] add luacheck and github workflow (#13) --- .github/workflows/build.yml | 13 +++++++++++++ .luacheckrc | 18 ++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 .github/workflows/build.yml create mode 100644 .luacheckrc diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..a2d63a0 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,13 @@ +name: Build +on: [push, pull_request] +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: apt + run: sudo apt-get install -y luarocks + - name: luacheck install + run: luarocks install --local luacheck + - name: luacheck run + run: $HOME/.luarocks/bin/luacheck ./ diff --git a/.luacheckrc b/.luacheckrc new file mode 100644 index 0000000..560847f --- /dev/null +++ b/.luacheckrc @@ -0,0 +1,18 @@ +unused_args = false +allow_defined_top = true + +globals = { + "minetest", +} + +read_globals = { + string = {fields = {"split"}}, + table = {fields = {"copy", "getn"}}, + + -- Builtin + "vector", "ItemStack", + "dump", "DIR_DELIM", "VoxelArea", "Settings", + + -- MTG + "default", "sfinv", "creative", +} From d000b4b20f3e48ce5c4a06856a4b8a435cd049ba Mon Sep 17 00:00:00 2001 From: OgelGames Date: Sat, 20 Jun 2020 22:41:30 +1000 Subject: [PATCH 2/4] fix tool description for old and unused tools (#14) --- README.md | 2 +- init.lua | 25 ++++++++++++++----------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 07edc66..4f30c9f 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ If so, to support this mod, add this code to your mod, after your tool's code: if minetest.get_modpath("toolranks") then minetest.override_item("mymod:mytool", { original_description = "My Tool", - description = toolranks.create_description("My Tool", 0, 1), + description = toolranks.create_description("My Tool"), after_use = toolranks.new_afteruse }) end diff --git a/init.lua b/init.lua index 56fdad0..67dfd46 100644 --- a/init.lua +++ b/init.lua @@ -32,12 +32,19 @@ function toolranks.get_tool_type(description) elseif string.find(d, "sword") then return "sword" else - return "tool" + return "tool" end end end -function toolranks.create_description(name, uses, level) +function toolranks.get_level(uses) + if type(uses) == "number" and uses > 0 then + return math.min(max_level, math.floor(uses / level_digs)) + end + return 0 +end + +function toolranks.create_description(name, uses) local description = name local tooltype = toolranks.get_tool_type(description) local newdesc = S( @@ -45,18 +52,14 @@ function toolranks.create_description(name, uses, level) toolranks.colors.green, description, toolranks.colors.gold, - (level or 1), + toolranks.get_level(uses), S(tooltype), toolranks.colors.grey, - (uses or 0) + (type(uses) == "number" and uses or 0) ) return newdesc end -function toolranks.get_level(uses) - return math.min(max_level, math.floor(uses / level_digs)) -end - function toolranks.new_afteruse(itemstack, user, node, digparams) local itemmeta = itemstack:get_meta() local itemdef = itemstack:get_definition() @@ -107,7 +110,6 @@ function toolranks.new_afteruse(itemstack, user, node, digparams) to_player = user:get_player_name(), gain = 2.0, }) - itemmeta:set_string("lastlevel", level) local speed_multiplier = 1 + (level * level_multiplier * (max_speed - 1)) local use_multiplier = 1 + (level * level_multiplier * (max_use - 1)) @@ -125,7 +127,8 @@ function toolranks.new_afteruse(itemstack, user, node, digparams) itemmeta:set_tool_capabilities(caps) end - itemmeta:set_string("description", toolranks.create_description(itemdesc, dugnodes, level)) + itemmeta:set_string("lastlevel", level) + itemmeta:set_string("description", toolranks.create_description(itemdesc, dugnodes)) itemstack:add_wear(digparams.wear) return itemstack end @@ -135,7 +138,7 @@ function toolranks.add_tool(name) local desc = ItemStack(name):get_definition().description minetest.override_item(name, { original_description = desc, - description = toolranks.create_description(desc, 0, 1), + description = toolranks.create_description(desc), after_use = toolranks.new_afteruse }) end From 12af618f9b66951b6da407be36c02b8e76c7f553 Mon Sep 17 00:00:00 2001 From: OgelGames Date: Wed, 1 Jul 2020 02:30:12 +1000 Subject: [PATCH 3/4] Add check for `tool_capabilities` and fallback if not defined (#15) * add check for `tool_capabilities` and fallback if not defined * fix whitespace --- init.lua | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/init.lua b/init.lua index 67dfd46..bfbc365 100644 --- a/init.lua +++ b/init.lua @@ -110,26 +110,35 @@ function toolranks.new_afteruse(itemstack, user, node, digparams) to_player = user:get_player_name(), gain = 2.0, }) + -- Make tool better by modifying tool_capabilities (if defined) + if itemdef.tool_capabilities then + local speed_multiplier = 1 + (level * level_multiplier * (max_speed - 1)) + local use_multiplier = 1 + (level * level_multiplier * (max_use - 1)) + local caps = table.copy(itemdef.tool_capabilities) - local speed_multiplier = 1 + (level * level_multiplier * (max_speed - 1)) - local use_multiplier = 1 + (level * level_multiplier * (max_use - 1)) - local caps = table.copy(itemdef.tool_capabilities) + caps.full_punch_interval = caps.full_punch_interval and (caps.full_punch_interval / speed_multiplier) + caps.punch_attack_uses = caps.punch_attack_uses and (caps.punch_attack_uses * use_multiplier) - caps.full_punch_interval = caps.full_punch_interval and (caps.full_punch_interval / speed_multiplier) - caps.punch_attack_uses = caps.punch_attack_uses and (caps.punch_attack_uses * use_multiplier) - - for _,c in pairs(caps.groupcaps) do - c.uses = c.uses * use_multiplier - for i,t in ipairs(c.times) do - c.times[i] = t / speed_multiplier + for _,c in pairs(caps.groupcaps) do + c.uses = c.uses * use_multiplier + for i,t in ipairs(c.times) do + c.times[i] = t / speed_multiplier + end end - end - itemmeta:set_tool_capabilities(caps) + itemmeta:set_tool_capabilities(caps) + end + end + + -- Old method for compatibility with tools without tool_capabilities defined + local wear = digparams.wear + if level > 0 and not itemdef.tool_capabilities then + local use_multiplier = 1 + (level * level_multiplier * (max_use - 1)) + wear = wear / use_multiplier end itemmeta:set_string("lastlevel", level) itemmeta:set_string("description", toolranks.create_description(itemdesc, dugnodes)) - itemstack:add_wear(digparams.wear) + itemstack:add_wear(wear) return itemstack end From 8010feb5bfecd369c7a9353ac786bc6c83384174 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Sun, 22 Nov 2020 14:32:59 +0000 Subject: [PATCH 4/4] Add nil check afteruse Add player nil check to toolranks.new_afteruse() to fix error. --- init.lua | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/init.lua b/init.lua index bfbc365..e44aea8 100644 --- a/init.lua +++ b/init.lua @@ -63,11 +63,13 @@ end function toolranks.new_afteruse(itemstack, user, node, digparams) local itemmeta = itemstack:get_meta() local itemdef = itemstack:get_definition() - local itemdesc = itemdef.original_description + local itemdesc = itemdef.original_description or "" local dugnodes = tonumber(itemmeta:get_string("dug")) or 0 local lastlevel = tonumber(itemmeta:get_string("lastlevel")) or 0 local most_digs = mod_storage:get_int("most_digs") or 0 local most_digs_user = mod_storage:get_string("most_digs_user") or 0 + local pname = user:get_player_name() + if not pname then return itemstack end -- player nil check if digparams.wear > 0 then -- Only count nodes that spend the tool dugnodes = dugnodes + 1 @@ -75,24 +77,24 @@ function toolranks.new_afteruse(itemstack, user, node, digparams) end if dugnodes > most_digs then - if most_digs_user ~= user:get_player_name() then -- Avoid spam. + if most_digs_user ~= pname then -- Avoid spam. minetest.chat_send_all(S( "Most used tool is now a @1@2@3 owned by @4 with @5 uses.", toolranks.colors.green, itemdesc, toolranks.colors.white, - user:get_player_name(), + pname, dugnodes )) end mod_storage:set_int("most_digs", dugnodes) - mod_storage:set_string("most_digs_user", user:get_player_name()) + mod_storage:set_string("most_digs_user", pname) end if itemstack:get_wear() > 60135 then minetest.chat_send_player(user:get_player_name(), S("Your tool is about to break!")) minetest.sound_play("default_tool_breaks", { - to_player = user:get_player_name(), + to_player = pname, gain = 2.0, }) end @@ -107,7 +109,7 @@ function toolranks.new_afteruse(itemstack, user, node, digparams) ) minetest.chat_send_player(user:get_player_name(), levelup_text) minetest.sound_play("toolranks_levelup", { - to_player = user:get_player_name(), + to_player = pname, gain = 2.0, }) -- Make tool better by modifying tool_capabilities (if defined)