]> git.lizzy.rs Git - Crafter.git/blob - mods/itemhandling/magnet.lua
remove server debug
[Crafter.git] / mods / itemhandling / magnet.lua
1 local minetest,math,vector,ipairs = minetest,math,vector,ipairs
2 local pool = {}
3
4 local name
5 minetest.register_on_joinplayer(function(player)
6         name = player:get_player_name()
7         pool[name] = 0
8 end)
9
10 local name
11 minetest.register_on_leaveplayer(function(player)
12         name = player:get_player_name()
13         pool[name] = nil
14 end)
15
16 --The item collection magnet
17 local name
18 local pos
19 local pos2
20 local diff
21 local inv
22 local entity
23 local tick = false
24 local function magnet(player)
25         --don't magnetize to dead players
26         name = player:get_player_name()
27         if player:get_hp() > 0 then
28                 pos = player:get_pos()
29                 inv = player:get_inventory()
30                 if tick == true and pool[name] > 0 then
31                         minetest.sound_play("pickup", {
32                                 to_player = player:get_player_name(),
33                                 gain = 0.4,
34                                 pitch = math.random(60,100)/100
35                         })
36                         if pool[name] > 6 then
37                                 pool[name] = 6
38                         else
39                                 pool[name] = pool[name] - 1
40                         end
41                 end
42                 --radial detection
43                 for _,object in ipairs(minetest.get_objects_inside_radius({x=pos.x,y=pos.y+0.5,z=pos.z}, 2)) do
44                         if not object:is_player() then
45                                 entity = object:get_luaentity()
46                                 if entity.name == "__builtin:item" and entity.collectable == true and object:get_luaentity().collected == false then
47                                         pos2 = object:get_pos()
48                                         diff = vector.subtract(pos2,pos).y
49                                         if diff >= 0 and inv:room_for_item("main", entity.itemstring) then
50                                                 pool[name] = pool[name] + 1     
51                                                 inv:add_item("main", entity.itemstring)
52                                                 entity.collector = player:get_player_name()
53                                                 entity.collected = true                                                 
54                                                 
55                                         end
56                                 elseif not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "experience:orb" then
57                                                 entity.collector = player:get_player_name()
58                                                 entity.collected = true
59                                 end
60                         end
61                 end
62         else
63                 pool[name] = 0
64         end
65 end
66
67
68 minetest.register_globalstep(function(dtime)
69         tick = not tick
70         for _,player in ipairs(minetest.get_connected_players()) do
71                 magnet(player)
72         end
73 end)