forked from h-v-smacker/atm
-
Notifications
You must be signed in to change notification settings - Fork 6
/
nodes.lua
162 lines (150 loc) · 4.54 KB
/
nodes.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
local S = atm.S
local function isempty(s)
return s == nil or s == '' or s == 0
end
local handle_after_place = function(pos, placer, itemstack, pointed_thing)
-- Store node owner
local meta = minetest.get_meta(pos)
local owner = placer:get_player_name()
meta:set_string("owner", owner)
end
local tube_config = {
can_insert = function(pos, node, stack, direction)
local accept = false
-- Check ATM has owner
local meta = minetest.get_meta(pos)
local owner = meta:get_string("owner")
if not isempty(owner) then
local input = ItemStack(stack)
local input_name = input:get_name()
accept = input_name:match('^currency:minegeld_%d+$') or
input_name:match('^currency:minegeld$') or
input_name:match('^currency:minegeld_cent_%d+$')
end
return accept
end,
insert_object = function(pos, node, stack, direction)
local input = ItemStack(stack)
local input_name = input:get_name()
local return_stack = nil
local minegeld_type = nil
local mg_count = 0
local multiplier = 1
-- Get ATM owner
local meta = minetest.get_meta(pos)
local owner = meta:get_string("owner")
atm.read_account(owner)
-- Determine minegeld type
if input_name:match('^currency:minegeld_%d+$') then
minegeld_type = string.gsub(input_name, "currency:minegeld_", "")
minegeld_type = tonumber(minegeld_type)
elseif input_name:match('^currency:minegeld$') then
minegeld_type = 1
elseif input_name:match('^currency:minegeld_cent_%d+$') then
multiplier = .01
minegeld_type = string.gsub(input_name, "currency:minegeld_cent_", "")
minegeld_type = tonumber(minegeld_type)
end
-- Count minegeld
if not isempty(minegeld_type) then
mg_count = math.floor(multiplier * minegeld_type * input:get_count())
input:take_item(mg_count / (multiplier * minegeld_type))
return_stack = input
end
-- Update player balance if possible,
-- return input stack otherwise
if not isempty(mg_count) then
atm.balance[owner] = math.floor(atm.balance[owner] + mg_count)
atm.save_account(owner)
minetest.chat_send_player(
owner,
"Received " .. mg_count .. " minegeld by tube; balance: " .. atm.balance[owner]
)
else
return_stack = stack
end
-- Return unrelated items or leftover coins
return ItemStack(return_stack)
end,
connect_sides = {
left = 1, right = 1,
front = 1, back = 1,
top = 1, bottom = 1
}
}
-- ATM node definitions
minetest.register_node("atm:atm", {
description = S("ATM"),
tiles = {
"atm_top.png", "atm_top.png",
"atm_side.png", "atm_side.png",
"atm_side.png", "atm_front.png"
},
paramtype2 = "facedir",
groups = {cracky = 2, bank_equipment = 1},
legacy_facedir_simple = true,
is_ground_content = false,
sounds = default.node_sound_stone_defaults(),
on_rightclick = function(_, _, player)
atm.showform(player)
end,
})
minetest.register_node("atm:atm2", {
description = S("ATM model 2"),
tiles = {
"atm2_top.png", "atm2_top.png",
"atm2_side.png", "atm2_side.png",
"atm2_side.png", "atm2_front.png"
},
paramtype2 = "facedir",
groups = {cracky = 2, bank_equipment = 2},
legacy_facedir_simple = true,
is_ground_content = false,
sounds = default.node_sound_stone_defaults(),
on_rightclick = function(_, _, player)
atm.showform2(player)
end,
})
minetest.register_node("atm:atm3", {
description = S("ATM model 3"),
tiles = {
"atm3_top.png", "atm3_top.png",
"atm3_side.png", "atm3_side.png",
"atm3_side.png", "atm3_front.png"
},
paramtype2 = "facedir",
groups = {
cracky = 2, bank_equipment = 1,
tubedevice = 1, tubedevice_receiver = 1
},
legacy_facedir_simple = true,
is_ground_content = false,
sounds = default.node_sound_stone_defaults(),
on_rightclick = function(_, _, player)
atm.showform3(player)
end,
after_place_node = handle_after_place,
tube = tube_config,
})
-- Wire transfer terminal node
minetest.register_node("atm:wtt", {
description = S("Wire Transfer Terminal"),
tiles = {
"atm_top.png", "atm_top.png",
"atm_side_wt.png", "atm_side_wt.png",
"atm_side_wt.png", "atm_front_wt.png"
},
paramtype2 = "facedir",
groups = {
cracky = 2, bank_equipment = 1,
tubedevice = 1, tubedevice_receiver = 1
},
legacy_facedir_simple = true,
is_ground_content = false,
sounds = default.node_sound_stone_defaults(),
on_rightclick = function(_, _, player)
atm.showform_wt(player)
end,
after_place_node = handle_after_place,
tube = tube_config,
})