@@ -76,8 +76,19 @@ if wand.gem ~= nil then name = wand.gem .. ' ' .. name end if wand.wire ~= nil then name = wand.wire .. 'clad ' .. name end end return u.str.capitalize(name) + end; + fullname = function(stack) + local proto = sorcery.wands.util.getproto(stack) + local wm = stack:get_meta() + local spell = wm:get_string('sorcery_wand_spell') + if spell ~= '' then + local sd = sorcery.data.spells[spell] + return u.str.capitalize(sd.name) .. ' wand'; + else + return sorcery.wands.util.basename(proto) + end end; wear = function(item) local meta = item:get_meta() local spell = meta:get_string('sorcery_wand_spell') @@ -221,9 +232,9 @@ end return img end -local createstand = function(name, desc, tex, extra) +local createstand = function(name, wood, desc, tex, extra) local hitbox = { type = "fixed"; fixed = { -0.5, -0.5, -0.3; @@ -242,8 +253,11 @@ tiles = images; selection_box = hitbox; collision_box = hitbox; use_texture_alpha = true; + _proto = { + wood = wood; + }; groups = { sorcery_wand_stand = 1; choppy = 2; oddly_breakable_by_hand = 2; @@ -250,31 +264,50 @@ }; } minetest.register_node(name, u.tbl.merge(auto,extra)) end - +local update_stand_info = function(pos) + local woodname = minetest.registered_nodes[minetest.get_node(pos).name]._proto.wood + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + if inv:is_empty('wand') then + meta:set_string('infotext',u.str.capitalize(woodname) .. ' wand stand') + else + local stack = inv:get_stack('wand',1) + local spell = stack:get_meta():get_string('sorcery_wand_spell') + local color = u.color(127,127,127) + if spell ~= '' then + color = u.color(sorcery.data.spells[spell].color):readable() + end + local wand_proto = sorcery.wands.util.getproto(stack) + meta:set_string('infotext',color:fmt(sorcery.wands.util.fullname(stack) .. ' stand')) + end +end for woodname, wood in pairs(sorcery.wands.materials.wood) do - local blank = u.image('doors_blank.png'); -- haaaaack + local blank = u.image('sorcery_transparent.png'); -- haaaaack local name = 'sorcery:wand_stand_' .. woodname - createstand(name , + createstand(name, woodname, u.str.capitalize(woodname .. 'wood wand stand'), { wood.tex; blank; blank; blank; }, { on_construct = function(pos) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() inv:set_size('wand', 1) + update_stand_info(pos) end; on_rightclick = function(pos,node,user,stack) local meta = minetest.get_meta(pos) local stand = meta:get_inventory() + local wand_proto = sorcery.wands.util.getproto(stack) if minetest.get_item_group(stack:get_name(), 'sorcery_wand') ~= 0 then stand:set_stack('wand',1,stack) minetest.swap_node(pos, { - name = sorcery.wands.util.baseid(stack:get_definition()._proto) .. '_stand_' .. woodname; + name = sorcery.wands.util.baseid(wand_proto) .. '_stand_' .. woodname; param2 = node.param2; }) stack = ItemStack(nil) end + update_stand_info(pos) return stack end } ) @@ -297,13 +330,14 @@ else gemimg = gemimg:fade(1) end createstand( kind.id .. '_stand_' .. woodname, + woodname, u.str.capitalize(woodname) .. 'wood wand stand with ' .. string.lower(sorcery.wands.util.basename(kind,true)), { wood.tex; sorcery.wands.materials.wood[kind.wood].tex; gemimg; - (kind.wire and sorcery.wands.materials.wire[kind.wire].tex) or u.image('doors_blank.png'); -- haaaaack + (kind.wire and sorcery.wands.materials.wire[kind.wire].tex) or u.image('sorcery_transparent.png'); -- haaaaack }, { drop = 'sorcery:wand_stand_' .. woodname; after_dig_node = function(pos,node,meta,digger) local stack = meta.inventory.wand[1] @@ -328,9 +362,11 @@ minetest.swap_node(pos, { name = 'sorcery:wand_stand_' .. woodname; param2 = node.param2; }) - ::failure:: return stack + ::failure:: + update_stand_info(pos) + return stack end; } ) end @@ -375,9 +411,9 @@ local spell = wm:get_string('sorcery_wand_spell') if spell ~= "" then local sd = sorcery.data.spells[spell] wm:set_string('description', u.ui.tooltip { - title = u.str.capitalize(sd.name) .. ' wand'; + title = sorcery.wands.util.fullname(stack); desc = sorcery.wands.util.basedesc(proto); props = { { color = u.color(sd.color); desc = sd.desc } };