From 7bab6df029acb41a146aed6d912e83ba558ad364 Mon Sep 17 00:00:00 2001 From: Fernando Zapata Date: Tue, 25 Sep 2012 18:45:55 -0600 Subject: [PATCH] fixed switch to caseof rename --- dispenser/depends.txt | 4 ++ dispenser/init.lua | 99 +++++++++++++++++++++++++++++ dispenser/textures/dispenser_f.png | Bin 0 -> 698 bytes dispenser/textures/dispenser_s.png | Bin 0 -> 671 bytes 4 files changed, 103 insertions(+) create mode 100644 dispenser/depends.txt create mode 100644 dispenser/init.lua create mode 100644 dispenser/textures/dispenser_f.png create mode 100644 dispenser/textures/dispenser_s.png diff --git a/dispenser/depends.txt b/dispenser/depends.txt new file mode 100644 index 0000000..353674d --- /dev/null +++ b/dispenser/depends.txt @@ -0,0 +1,4 @@ +default +helper +weapon +mesecons diff --git a/dispenser/init.lua b/dispenser/init.lua new file mode 100644 index 0000000..735fd62 --- /dev/null +++ b/dispenser/init.lua @@ -0,0 +1,99 @@ +-------------------------------------------------------------------------------- +-- Dispenser +-------------------------------------------------------------------------------- +-- Mesecons operated dispenser +-- +-- (c)2012 Fernando Zapata (ZLovesPancakes, Franz.ZPT) +-- Code licensed under GNU GPLv2 +-- http://www.gnu.org/licenses/gpl-2.0.html +-- Content licensed under CC BY-SA 3.0 +-- http://creativecommons.org/licenses/by-sa/3.0/ +-------------------------------------------------------------------------------- + +--------------------------------------------------------------- Globals -------- + +dispenser = {} + +------------------------------------------------------------- Functions -------- + +function dispenser.dispense( p, n ) + local i = minetest.env:get_meta( p ):get_inventory() + while not i:is_empty('main') do + local k = math.random( 9 ) + local s = i:get_stack( 'main', k ) + if not s:is_empty() then + local ps = s:peek_item() + s:take_item() + i:set_stack( 'main', k, s ) + local v = {x=0,y=0,z=0} + case( n.param2 ):of { + [0] = function() v.z = v.z - 1 end, + [1] = function() v.x = v.x - 1 end, + [2] = function() v.z = v.z + 1 end, + [3] = function() v.x = v.x + 1 end + } + p.x = p.x + v.x + p.z = p.z + v.z + if weapon.arrows[ps:get_name()] ~= nil then + weapon.shoot( ps:get_name(), p, v, 18, 0, + 'throwing_sound' ) + else + local o = minetest.env:add_item( p, ps ) + if o ~= nil then + v.x = v.x * 5 + math.random(-1,1) + v.z = v.z * 5 + math.random(-1,1) + o:setvelocity(v) + end + end + break + end + end +end + +---------------------------------------------------------------- Blocks -------- + +minetest.register_node( 'dispenser:dispenser', { + description = 'Dispenser', + groups = { cracky = 3, mesecon = 2 }, + tiles = { 'dispenser_s.png', 'dispenser_s.png', + 'dispenser_s.png', 'dispenser_s.png', + 'dispenser_s.png', 'dispenser_f.png' }, + paramtype2 = 'facedir', + is_ground_content = true, + sounds = default.node_sound_stone_defaults(), + on_construct = function( p ) + local m = minetest.env:get_meta( p ) + m:set_string( 'formspec', + 'size[8,8]\ + list[context;main;2.5,0;3,3;]\ + list[current_player;main;0,4;8,4;]' ) + local i = m:get_inventory() + i:set_size( 'main', 3 * 3 ) + end, + can_dig = function( p, u ) + local i = minetest.env:get_meta( p ):get_inventory() + return i:is_empty( 'main' ) + end +}) + +--------------------------------------------------------------- Recipes -------- + +minetest.register_craft({ + output = 'dispenser:dispenser', + recipe = { + { 'default:cobble', 'default:cobble', 'default:cobble' }, + { 'default:cobble', 'weapon:xbow_wood', 'default:cobble' }, + { 'default:cobble', 'mesecons:mesecon', 'default:cobble' } } +}) + +-------------------------------------------------------------- Mesecons -------- + +mesecon:register_effector( 'dispenser:dispenser', 'dispenser:dispenser' ) + +mesecon:register_on_signal_on( function( p, n ) + if n.name == 'dispenser:dispenser' then + dispenser.dispense( p, n ) + end +end) + +-------------------------------------------------------------------------------- diff --git a/dispenser/textures/dispenser_f.png b/dispenser/textures/dispenser_f.png new file mode 100644 index 0000000000000000000000000000000000000000..641931a5179df6cd83cdc671ccc8a17bc53eeb5b GIT binary patch literal 698 zcmV;r0!96aP){@&0x1LOf*=-R?f+n@r73L`0vb#i zNCHV%P{GPgBZ~S6%zH1sA3HPm_xD9j0M zDW%rBuIsh6wYsjeEVI_4)_VKG1*IhC!aGMq-usR3zkBlR-+sRjDWOu<7(@hsfA;pU zC<^DCbFSCx)lCya7z_rp|KDX(1TIym9?Xuitw!8nG|dPkytrvsf+# z=Mpiclo!QpHd{Y_?B!@81UhR43eJTw=E>8ih=^5HDWzfv#u)FtYTL3b1tLXSE@xdy zAp`&jArJsK=R}lJ;+!j`X0zGDN52BVx4XMa$);&KDge+?R*W&mSO`IDO+>$h z@A2bnmw!Mh6D1+I5P0uFg+#PiEJ6rE2t?f3{_3~i|A3DgRSO@2Qqno!ErtMaX={Tq z&Nx$2GRCf6{_*Eu9s$7ixh?BHNGWBEDe_#DE5q`W!w1^Eo7cmh5<5z3bAIfzBd1P$-T{zGIcrl&C}r?IhIqfK(0iX! zBBJ47hyv?_#q0m3AyTjC8EaBX&N(S10OWa|QbHnnzQ5nLZJy^{Q4~T5p^YITB2r38 gDXq03ge=S60}%{;5nRzY0{{R307*qoM6N<$f&)oK8~^|S literal 0 HcmV?d00001 diff --git a/dispenser/textures/dispenser_s.png b/dispenser/textures/dispenser_s.png new file mode 100644 index 0000000000000000000000000000000000000000..99bf31a2f0097c6b78ed53d2bd5235f149adc47a GIT binary patch literal 671 zcmV;Q0$}}#P)6-P=ezz;>~ znZeyN?(TZuVlg@Y;C$zZCr6Kk5YD;1#lkx0y>FUkyqm(kn48w46a4-x*Q54QO zGRC}o@j`1QB?j-AIfQWh)4SjQ_-i(sLC&PLvzCYe;J5ehsj4dPz4yMZ>tP&IjPv=t z`+QRr#df<@TC*{bvyf72?VOVUkWvDGVHk)=NV!_CXY*N1sjRBteX}>u07S&hWm!r9 z7{_rkMu2GBcABPF&yLT|uTP#nTCG;YIQIQ*2w~Z_%eGA^5dgeB{ehXcx5M$_0|4;e zKYx07d3E*b*^v-JB6{nrwe_sNyuPLwB&*w_oP(jj3^Q5=U-c5=FMgk zV?;zEdh_!8^UGz0;654*((08USig^)rDt&|W#WWKn(Qd$$D^Z!R{ zZLO`!5}Un6^VK)E#^3bAqSlCb{^4UtY^JFwipiMZ{qAh5<#M@N(f6fV!j}x;dXQJ?>Z)~tJ*r7bN1dVr2wET z%bYVY^PgvD(=?T3xuYXQL^ReiGc#+gl~T^R7-LZsUjXy9i%)gS-sk`T002ovPDHLk FV1hHlOOyZr literal 0 HcmV?d00001