X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=enchanting.lua;h=1c5450da8116615cf6acf8b15395d0282c0236c1;hb=cb70c37765118897426e16669c9805d4d1e48882;hp=d264b1f5bfdf5c437f7f07982398e39fa8e23ee6;hpb=e9cff1f8d3b74ced210e789648f6afd94a529cb7;p=xdecor.git diff --git a/enchanting.lua b/enchanting.lua index d264b1f..1c5450d 100644 --- a/enchanting.lua +++ b/enchanting.lua @@ -5,39 +5,15 @@ screwdriver = screwdriver or {} local mese_cost = 1 -- Force of the enchantments. -enchanting.uses = 1.2 -enchanting.times = 0.1 -enchanting.damages = 1 -enchanting.strength = 1.2 -enchanting.speed = 0.2 -enchanting.jump = 0.2 - --- Enchanted tools registration. --- Available enchantments: durable, fast, sharp, strong, speed. -enchanting.tools = { - --[[ Registration format: - [Mod name] = { - materials, - {tool name, enchantments} - } - ]] - ["default"] = { - "steel, bronze, mese, diamond", - {"axe", "durable, fast"}, - {"pick", "durable, fast"}, - {"shovel", "durable, fast"}, - {"sword", "sharp"} - }, - ["3d_armor"] = { - "steel, bronze, gold, diamond", - {"boots", "strong, speed"}, - {"chestplate", "strong"}, - {"helmet", "strong"}, - {"leggings", "strong"} - } -} +enchanting.uses = 1.2 -- Durability +enchanting.times = 0.1 -- Efficiency +enchanting.damages = 1 -- Sharpness +enchanting.strength = 1.2 -- Armor strength (3d_armor only) +enchanting.speed = 0.2 -- Player speed (3d_armor only) +enchanting.jump = 0.2 -- Player jumping (3d_armor only) function enchanting.formspec(pos, num) + local meta = minetest.get_meta(pos) local formspec = [[ size[9,9;] bgcolor[#080808BB;true] background[0,0;9,9;ench_ui.png] @@ -45,32 +21,38 @@ function enchanting.formspec(pos, num) list[context;mese;2,2.9;1,1;] list[current_player;main;0.5,4.5;8,4;] image[2,2.9;1,1;mese_layout.png] - tooltip[sharp;Your sword inflicts more damage] - tooltip[durable;Your tool is more resistant] - tooltip[fast;Your tool is more powerful] + tooltip[sharp;Your weapon inflicts more damages] + tooltip[durable;Your tool last longer] + tooltip[fast;Your tool digs faster] tooltip[strong;Your armor is more resistant] tooltip[speed;Your speed is increased] ]] ..default.gui_slots..default.get_hotbar_bg(0.5,4.5) - local tool_enchs = { + local enchant_buttons = { [[ image_button[3.9,0.85;4,0.92;bg_btn.png;fast;Efficiency] image_button[3.9,1.77;4,1.12;bg_btn.png;durable;Durability] ]], "image_button[3.9,0.85;4,0.92;bg_btn.png;strong;Strength]", "image_button[3.9,2.9;4,0.92;bg_btn.png;sharp;Sharpness]", [[ image_button[3.9,0.85;4,0.92;bg_btn.png;strong;Strength] - image_button[3.9,1.77;4,1.12;bg_btn.png;speed;Speed] ]] } + image_button[3.9,1.77;4,1.12;bg_btn.png;speed;Speed] ]] + } - formspec = formspec..(tool_enchs[num] or "") - minetest.get_meta(pos):set_string("formspec", formspec) + formspec = formspec..(enchant_buttons[num] or "") + meta:set_string("formspec", formspec) end function enchanting.on_put(pos, listname, _, stack) if listname == "tool" then - for k, v in pairs({"axe, pick, shovel", - "chestplate, leggings, helmet", - "sword", "boots"}) do - if v:match(stack:get_name():match(":(.-)%_")) then - enchanting.formspec(pos, k) + local stackname = stack:get_name() + local tool_groups = { + "axe, pick, shovel", + "chestplate, leggings, helmet", + "sword", "boots" + } + + for idx, tools in pairs(tool_groups) do + if tools:find(stackname:match(":(%w+)")) then + enchanting.formspec(pos, idx) end end end @@ -83,7 +65,7 @@ function enchanting.fields(pos, _, fields) local mese = inv:get_stack("mese", 1) local orig_wear = tool:get_wear() local mod, name = tool:get_name():match("(.*):(.*)") - local enchanted_tool = mod..":enchanted_"..name.."_"..next(fields) + local enchanted_tool = (mod or "")..":enchanted_"..(name or "").."_"..next(fields) if mese:get_count() >= mese_cost and minetest.registered_tools[enchanted_tool] then tool:replace(enchanted_tool) @@ -101,7 +83,7 @@ end local function allowed(tool) for item in pairs(minetest.registered_tools) do - if item:match("enchanted_"..tool) then return true end + if item:find("enchanted_"..tool) then return true end end return false end @@ -117,9 +99,7 @@ function enchanting.put(_, listname, _, stack) end function enchanting.on_take(pos, listname) - if listname == "tool" then - enchanting.formspec(pos, nil) - end + if listname == "tool" then enchanting.formspec(pos, nil) end end function enchanting.construct(pos) @@ -134,12 +114,10 @@ end xdecor.register("enchantment_table", { description = "Enchantment Table", - tiles = { - "xdecor_enchantment_top.png", "xdecor_enchantment_bottom.png", - "xdecor_enchantment_side.png", "xdecor_enchantment_side.png", - "xdecor_enchantment_side.png", "xdecor_enchantment_side.png" - }, - groups = {cracky=1, oddly_breakable_by_hand=1, level=1}, + tiles = {"xdecor_enchantment_top.png", "xdecor_enchantment_bottom.png", + "xdecor_enchantment_side.png", "xdecor_enchantment_side.png", + "xdecor_enchantment_side.png", "xdecor_enchantment_side.png"}, + groups = {cracky=1, level=1}, sounds = default.node_sound_stone_defaults(), on_rotate = screwdriver.rotate_simple, can_dig = enchanting.dig, @@ -153,14 +131,13 @@ xdecor.register("enchantment_table", { local function cap(S) return S:gsub("^%l", string.upper) end -for mod, defs in pairs(enchanting.tools) do -for material in defs[1]:gmatch("[%w_]+") do -for _, tooldef in next, defs, 1 do -for enchant in tooldef[2]:gmatch("[%w_]+") do - local tool, group = tooldef[1], "" - local original_tool = minetest.registered_tools[mod..":"..tool.."_"..material] +function enchanting:register_tools(mod, def) + for tool in pairs(def.tools) do + for material in def.materials:gmatch("[%w_]+") do + for enchant in def.tools[tool].enchants:gmatch("[%w_]+") do + local original_tool = minetest.registered_tools[mod..":"..tool.."_"..material] + if not original_tool then return end - if original_tool then if original_tool.tool_capabilities then local original_damage_groups = original_tool.tool_capabilities.damage_groups local original_groupcaps = original_tool.tool_capabilities.groupcaps @@ -168,13 +145,13 @@ for enchant in tooldef[2]:gmatch("[%w_]+") do local fleshy = original_damage_groups.fleshy local full_punch_interval = original_tool.tool_capabilities.full_punch_interval local max_drop_level = original_tool.tool_capabilities.max_drop_level - group = tostring(next(original_groupcaps)) + local group = next(original_groupcaps) if enchant == "durable" then groupcaps[group].uses = math.ceil(original_groupcaps[group].uses * enchanting.uses) elseif enchant == "fast" then - for i = 1, 3 do - groupcaps[group].times[i] = original_groupcaps[group].times[i] - enchanting.times + for i, time in pairs(original_groupcaps[group].times) do + groupcaps[group].times[i] = time - enchanting.times end elseif enchant == "sharp" then fleshy = fleshy + enchanting.damages @@ -217,8 +194,27 @@ for enchant in tooldef[2]:gmatch("[%w_]+") do }) end end + end + end end -end -end -end + +enchanting:register_tools("default", { + materials = "steel, bronze, mese, diamond", + tools = { + axe = {enchants = "durable, fast"}, + pick = {enchants = "durable, fast"}, + shovel = {enchants = "durable, fast"}, + sword = {enchants = "sharp"} + } +}) + +enchanting:register_tools("3d_armor", { + materials = "steel, bronze, gold, diamond", + tools = { + boots = {enchants = "strong, speed"}, + chestplate = {enchants = "strong"}, + helmet = {enchants = "strong"}, + leggings = {enchants = "strong"} + } +})