From 641921f4c7da7ef64e8592f470929897704fc91b Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Mon, 17 Feb 2020 16:17:35 +0100 Subject: [PATCH] Add tool stats in help --- mods/HELP/mcl_doc/init.lua | 110 +++++++++++++++++++++++++ mods/HELP/mcl_doc/locale/mcl_doc.de.tr | 16 ++++ mods/HELP/mcl_doc/locale/template.txt | 16 ++++ mods/ITEMS/mcl_tools/init.lua | 60 ++++++++------ 4 files changed, 177 insertions(+), 25 deletions(-) diff --git a/mods/HELP/mcl_doc/init.lua b/mods/HELP/mcl_doc/init.lua index f5f2f88fe..c4018f85e 100644 --- a/mods/HELP/mcl_doc/init.lua +++ b/mods/HELP/mcl_doc/init.lua @@ -267,4 +267,114 @@ doc.sub.items.register_factoid("nodes", "drops", function(itemstring, def) return "" end) +-- Digging capabilities of tool +doc.sub.items.register_factoid("tools", "misc", function(itemstring, def) + if not def.tool_capabilities then + return "" + end + local groupcaps = def.tool_capabilities.groupcaps + if not groupcaps then + return "" + end + local formstring = "" + local capstr = "" + local caplines = 0 + for k,v in pairs(groupcaps) do + local speedstr = "" + local miningusesstr = "" + -- Mining capabilities + caplines = caplines + 1 + local maxlevel = v.maxlevel + if not maxlevel then + -- Default from tool.h + maxlevel = 1 + end + + -- Digging speed + local speed_class = def.groups and def.groups.dig_speed_class + if speed_class == 1 then + speedstr = S("Painfully slow") + elseif speed_class == 2 then + speedstr = S("Very slow") + elseif speed_class == 3 then + speedstr = S("Slow") + elseif speed_class == 4 then + speedstr = S("Fast") + elseif speed_class == 5 then + speedstr = S("Very fast") + elseif speed_class == 6 then + speedstr = S("Extremely fast") + elseif speed_class == 7 then + speedstr = S("Instantaneous") + end + + -- Number of mining uses + local base_uses = v.uses + if not base_uses then + -- Default from tool.h + base_uses = 20 + end + if def._doc_items_durability == nil and base_uses > 0 then + local real_uses = base_uses * math.pow(3, maxlevel) + if real_uses < 65535 then + miningusesstr = S("@1 uses", real_uses) + else + miningusesstr = S("Unlimited uses") + end + end + + if speedstr ~= "" then + capstr = capstr .. S("Mining speed: @1", speedstr) .. "\n" + end + if miningusesstr ~= "" then + capstr = capstr .. S("Mining durability: @1", miningusesstr) .. "\n" + end + + -- Only show one group at max + break + end + if caplines > 0 then + formstring = formstring .. S("This tool is capable of mining.") .. "\n" + -- Capabilities + formstring = formstring .. capstr + -- Max. drop level + local mdl = def.tool_capabilities.max_drop_level + if not def.tool_capabilities.max_drop_level then + mdl = 0 + end + formstring = formstring .. S("Block breaking strength: @1", mdl) .. "\n" + end + if caplines > 0 then + formstring = formstring .. "\n\n" + end + return formstring +end) + +-- Melee damage +doc.sub.items.register_factoid("tools", "misc", function(itemstring, def) + local tool_capabilities = def.tool_capabilities + if not tool_capabilities then + return "" + end + + local formstring = "" + -- Weapon data + local damage_groups = tool_capabilities.damage_groups + if damage_groups ~= nil and damage_groups.fleshy ~= nil then + formstring = formstring .. S("This is a melee weapon which deals damage by punching.") .. "\n" + + -- Damage groups + local dmg = damage_groups.fleshy + formstring = formstring .. S("Maximum damage: @1 HP", dmg) .. "\n" + + -- Full punch interval + local punch = 1.0 + if tool_capabilities.full_punch_interval ~= nil then + punch = tool_capabilities.full_punch_interval + end + formstring = formstring .. S("Full punch interval: @1 s", string.format("%.1f", punch)) + formstring = formstring .. "\n" + end + return formstring +end) diff --git a/mods/HELP/mcl_doc/locale/mcl_doc.de.tr b/mods/HELP/mcl_doc/locale/mcl_doc.de.tr index b9207b4a6..dc4e85624 100644 --- a/mods/HELP/mcl_doc/locale/mcl_doc.de.tr +++ b/mods/HELP/mcl_doc/locale/mcl_doc.de.tr @@ -55,3 +55,19 @@ This blocks drops the following when mined by shears: @1=Dieser Block wird folge • Shears=• Schere • Sword=• Schwert • Hand=• Hand +This is a melee weapon which deals damage by punching.=Dies ist eine Nahkampfwaffe, die Schaden durch Schläge verursacht. +Maximum damage: @1 HP=Maximalschaden: @1 HP +Full punch interval: @1 s=Ausholintervall: @1 s +This tool is capable of mining.=Dieses Werkzeug kann Blöcke abbauen. +Mining speed: @1=Grabegeschwindigkeit: @1 +Painfully slow=Furchtbar langsam +Very slow=Sehr langsam +Slow=Langsam +Fast=Schnell +Very fast=Sehr schnell +Extremely fast=Extrem schnell +Instantaneous=Unmittelbar +@1 uses=@1 Verwendungen +Unlimited uses=Unbegrenzte Verwendungen +Block breaking strength: @1=Blockbruchstärke: @1 +Mining durability: @1=Grabehaltbarkeit: @1 diff --git a/mods/HELP/mcl_doc/locale/template.txt b/mods/HELP/mcl_doc/locale/template.txt index 542d29403..b622bde9f 100644 --- a/mods/HELP/mcl_doc/locale/template.txt +++ b/mods/HELP/mcl_doc/locale/template.txt @@ -55,3 +55,19 @@ This blocks drops the following when mined by shears: @1= • Shears= • Sword= • Hand= +This is a melee weapon which deals damage by punching.= +Maximum damage: @1 HP= +Full punch interval: @1 s= +This tool is capable of mining.= +Mining speed: @1= +Painfully slow= +Very slow= +Slow= +Fast= +Very fast= +Extremely fast= +Instantaneous= +@1 uses= +Unlimited uses= +Block breaking strength: @1= +Mining durability: @1= diff --git a/mods/ITEMS/mcl_tools/init.lua b/mods/ITEMS/mcl_tools/init.lua index 3078d7f59..bb8f620c3 100644 --- a/mods/ITEMS/mcl_tools/init.lua +++ b/mods/ITEMS/mcl_tools/init.lua @@ -13,12 +13,19 @@ local S = minetest.get_translator("mcl_tools") - 3: Stone - 4: Iron - 5: Diamond + +dig_speed_class group: +- 1: Painfully slow +- 2: Very slow +- 3: Slow +- 4: Fast +- 5: Very fast +- 6: Extremely fast +- 7: Instantaneous ]] --- TODO: Add legacy support for Minetest Game groups like crumbly, snappy, cracky, etc. for all tools - -- The hand -local groupcaps, hand_range +local groupcaps, hand_range, hand_groups if minetest.settings:get_bool("creative_mode") then -- Instant breaking in creative mode groupcaps = { @@ -29,11 +36,13 @@ if minetest.settings:get_bool("creative_mode") then groupcaps[k] = { times = v, uses = 0 } end hand_range = 10 + hand_groups = { dig_speed_class = 7 } else groupcaps = { handy_dig = {times=mcl_autogroup.digtimes.handy_dig, uses=0}, } hand_range = 4 + hand_groups = { dig_speed_class = 1 } end minetest.register_item(":", { type = "none", @@ -50,7 +59,8 @@ minetest.register_item(":", { max_drop_level = 0, groupcaps = groupcaps, damage_groups = {fleshy=1}, - } + }, + groups = hand_groups, }) -- Help texts @@ -68,7 +78,7 @@ minetest.register_tool("mcl_tools:pick_wood", { _doc_items_longdesc = pickaxe_longdesc, _doc_items_hidden = false, inventory_image = "default_tool_woodpick.png", - groups = { tool=1, pickaxe=1 }, + groups = { tool=1, pickaxe=1, dig_speed_class=2, }, tool_capabilities = { -- 1/1.2 full_punch_interval = 0.83333333, @@ -85,7 +95,7 @@ minetest.register_tool("mcl_tools:pick_stone", { description = S("Stone Pickaxe"), _doc_items_longdesc = pickaxe_longdesc, inventory_image = "default_tool_stonepick.png", - groups = { tool=1, pickaxe=1 }, + groups = { tool=1, pickaxe=1, dig_speed_class=3, }, tool_capabilities = { -- 1/1.2 full_punch_interval = 0.83333333, @@ -102,7 +112,7 @@ minetest.register_tool("mcl_tools:pick_iron", { description = S("Iron Pickaxe"), _doc_items_longdesc = pickaxe_longdesc, inventory_image = "default_tool_steelpick.png", - groups = { tool=1, pickaxe=1 }, + groups = { tool=1, pickaxe=1, dig_speed_class=4, }, tool_capabilities = { -- 1/1.2 full_punch_interval = 0.83333333, @@ -119,7 +129,7 @@ minetest.register_tool("mcl_tools:pick_gold", { description = S("Golden Pickaxe"), _doc_items_longdesc = pickaxe_longdesc, inventory_image = "default_tool_goldpick.png", - groups = { tool=1, pickaxe=1 }, + groups = { tool=1, pickaxe=1, dig_speed_class=6, }, tool_capabilities = { -- 1/1.2 full_punch_interval = 0.83333333, @@ -136,7 +146,7 @@ minetest.register_tool("mcl_tools:pick_diamond", { description = S("Diamond Pickaxe"), _doc_items_longdesc = pickaxe_longdesc, inventory_image = "default_tool_diamondpick.png", - groups = { tool=1, pickaxe=1 }, + groups = { tool=1, pickaxe=1, dig_speed_class=5, }, tool_capabilities = { -- 1/1.2 full_punch_interval = 0.83333333, @@ -254,7 +264,7 @@ minetest.register_tool("mcl_tools:shovel_wood", { _doc_items_hidden = false, inventory_image = "default_tool_woodshovel.png", wield_image = "default_tool_woodshovel.png^[transformR90", - groups = { tool=1, shovel=1 }, + groups = { tool=1, shovel=1, dig_speed_class=2, }, tool_capabilities = { full_punch_interval = 1, max_drop_level=1, @@ -273,7 +283,7 @@ minetest.register_tool("mcl_tools:shovel_stone", { _doc_items_usagehelp = shovel_use, inventory_image = "default_tool_stoneshovel.png", wield_image = "default_tool_stoneshovel.png^[transformR90", - groups = { tool=1, shovel=1 }, + groups = { tool=1, shovel=1, dig_speed_class=3, }, tool_capabilities = { full_punch_interval = 1, max_drop_level=3, @@ -292,7 +302,7 @@ minetest.register_tool("mcl_tools:shovel_iron", { _doc_items_usagehelp = shovel_use, inventory_image = "default_tool_steelshovel.png", wield_image = "default_tool_steelshovel.png^[transformR90", - groups = { tool=1, shovel=1 }, + groups = { tool=1, shovel=1, dig_speed_class=4, }, tool_capabilities = { full_punch_interval = 1, max_drop_level=4, @@ -311,7 +321,7 @@ minetest.register_tool("mcl_tools:shovel_gold", { _doc_items_usagehelp = shovel_use, inventory_image = "default_tool_goldshovel.png", wield_image = "default_tool_goldshovel.png^[transformR90", - groups = { tool=1, shovel=1 }, + groups = { tool=1, shovel=1, dig_speed_class=6, }, tool_capabilities = { full_punch_interval = 1, max_drop_level=2, @@ -330,7 +340,7 @@ minetest.register_tool("mcl_tools:shovel_diamond", { _doc_items_usagehelp = shovel_use, inventory_image = "default_tool_diamondshovel.png", wield_image = "default_tool_diamondshovel.png^[transformR90", - groups = { tool=1, shovel=1 }, + groups = { tool=1, shovel=1, dig_speed_class=5, }, tool_capabilities = { full_punch_interval = 1, max_drop_level=5, @@ -350,7 +360,7 @@ minetest.register_tool("mcl_tools:axe_wood", { _doc_items_longdesc = axe_longdesc, _doc_items_hidden = false, inventory_image = "default_tool_woodaxe.png", - groups = { tool=1, axe=1 }, + groups = { tool=1, axe=1, dig_speed_class=2, }, tool_capabilities = { full_punch_interval = 1.25, max_drop_level=1, @@ -366,7 +376,7 @@ minetest.register_tool("mcl_tools:axe_stone", { description = S("Stone Axe"), _doc_items_longdesc = axe_longdesc, inventory_image = "default_tool_stoneaxe.png", - groups = { tool=1, axe=1 }, + groups = { tool=1, axe=1, dig_speed_class=3, }, tool_capabilities = { full_punch_interval = 1.25, max_drop_level=3, @@ -382,7 +392,7 @@ minetest.register_tool("mcl_tools:axe_iron", { description = S("Iron Axe"), _doc_items_longdesc = axe_longdesc, inventory_image = "default_tool_steelaxe.png", - groups = { tool=1, axe=1 }, + groups = { tool=1, axe=1, dig_speed_class=4, }, tool_capabilities = { -- 1/0.9 full_punch_interval = 1.11111111, @@ -399,7 +409,7 @@ minetest.register_tool("mcl_tools:axe_gold", { description = S("Golden Axe"), _doc_items_longdesc = axe_longdesc, inventory_image = "default_tool_goldaxe.png", - groups = { tool=1, axe=1 }, + groups = { tool=1, axe=1, dig_speed_class=6, }, tool_capabilities = { full_punch_interval = 1.0, max_drop_level=2, @@ -415,7 +425,7 @@ minetest.register_tool("mcl_tools:axe_diamond", { description = S("Diamond Axe"), _doc_items_longdesc = axe_longdesc, inventory_image = "default_tool_diamondaxe.png", - groups = { tool=1, axe=1 }, + groups = { tool=1, axe=1, dig_speed_class=5, }, tool_capabilities = { full_punch_interval = 1.0, max_drop_level=5, @@ -434,7 +444,7 @@ minetest.register_tool("mcl_tools:sword_wood", { _doc_items_longdesc = sword_longdesc, _doc_items_hidden = false, inventory_image = "default_tool_woodsword.png", - groups = { weapon=1 }, + groups = { weapon=1, sword=1, dig_speed_class=2, }, tool_capabilities = { full_punch_interval = 0.625, max_drop_level=1, @@ -451,7 +461,7 @@ minetest.register_tool("mcl_tools:sword_stone", { description = S("Stone Sword"), _doc_items_longdesc = sword_longdesc, inventory_image = "default_tool_stonesword.png", - groups = { weapon=1 }, + groups = { weapon=1, sword=1, dig_speed_class=3, }, tool_capabilities = { full_punch_interval = 0.625, max_drop_level=3, @@ -468,7 +478,7 @@ minetest.register_tool("mcl_tools:sword_iron", { description = S("Iron Sword"), _doc_items_longdesc = sword_longdesc, inventory_image = "default_tool_steelsword.png", - groups = { weapon=1 }, + groups = { weapon=1, sword=1, dig_speed_class=4, }, tool_capabilities = { full_punch_interval = 0.625, max_drop_level=4, @@ -485,7 +495,7 @@ minetest.register_tool("mcl_tools:sword_gold", { description = S("Golden Sword"), _doc_items_longdesc = sword_longdesc, inventory_image = "default_tool_goldsword.png", - groups = { weapon=1 }, + groups = { weapon=1, sword=1, dig_speed_class=6, }, tool_capabilities = { full_punch_interval = 0.625, max_drop_level=2, @@ -502,7 +512,7 @@ minetest.register_tool("mcl_tools:sword_diamond", { description = S("Diamond Sword"), _doc_items_longdesc = sword_longdesc, inventory_image = "default_tool_diamondsword.png", - groups = { weapon=1 }, + groups = { weapon=1, sword=1, dig_speed_class=5, }, tool_capabilities = { full_punch_interval = 0.625, max_drop_level=5, @@ -524,7 +534,7 @@ minetest.register_tool("mcl_tools:shears", { inventory_image = "default_tool_shears.png", wield_image = "default_tool_shears.png", stack_max = 1, - groups = { tool=1, shears=1 }, + groups = { tool=1, shears=1, dig_speed_class=4, }, tool_capabilities = { full_punch_interval = 0.5, max_drop_level=1,