@@ -55,13 +55,49 @@ if not gem.foreign_amulet then local img = sorcery.lib.image local img_stone = img('sorcery_amulet.png'):multiply(sorcery.lib.color(gem.tone)) local img_sparkle = img('sorcery_amulet_sparkle.png') + local useamulet = function(stack,user,target) + local sp = sorcery.amulet.getspell(stack) + if not sp or not sp.cast then return nil end + local stats = sorcery.amulet.stats(stack) + + local ctx = { + caster = user; + target = target; + stats = stats; + sound = "xdecor_enchanting"; --FIXME make own sounds + sparkle = true; + amulet = stack; + meta = stack:get_meta(); -- avoid spell boilerplate + color = sorcery.lib.color(sp.tone); + } + print('casting') + local res = sp.cast(ctx) + + if res == nil or res == true then + minetest.sound_play(ctx.sound, { + pos = user:get_pos(); + gain = 1; + }) + end + if ctx.sparkle then + sorcery.vfx.cast_sparkle(user, ctx.color, stats.power,0.5) + end + if res == nil then + if not minetest.check_player_privs(user, 'sorcery:infinirune') then + sorcery.amulet.setrune(stack) + end + end + + return ctx.amulet + end; minetest.register_craftitem(amuletname, { description = sorcery.lib.str.capitalize(name) .. ' amulet'; inventory_image = img_sparkle:blit(img_stone):render(); wield_scale = { x = 0.6, y = 0.6, z = 0.6 }; groups = { sorcery_amulet = 1 }; + on_use = useamulet; _sorcery = { material = { gem = true, id = name, data = gem; value = (5 * shards_per_gem) + 4; @@ -77,8 +113,9 @@ description = string.format("%s-framed %s amulet",sorcery.lib.str.capitalize(metalid), name); inventory_image = img_sparkle:blit(img_frame):blit(img_stone):render(); wield_scale = { x = 0.6, y = 0.6, z = 0.6 }; groups = { sorcery_amulet = 1 }; + on_use = useamulet; _sorcery = { amulet = { base = name, frame = metalid }; }; })