Added 'currency' as dependency; added cash deposit and withdrawal
This commit is contained in:
parent
5eaa5db555
commit
8e8e8607c6
57
atm.lua
57
atm.lua
|
@ -6,6 +6,7 @@ local atm_form = "global_exchange:atm_form"
|
||||||
|
|
||||||
local main_menu =[[
|
local main_menu =[[
|
||||||
size[6,2]
|
size[6,2]
|
||||||
|
button[0,0;2,1;cash;Cash In/Out]
|
||||||
button[2,0;2,1;info;Account Info]
|
button[2,0;2,1;info;Account Info]
|
||||||
button[4,0;2,1;wire;Wire Monies]
|
button[4,0;2,1;wire;Wire Monies]
|
||||||
button[1,1;4,1;transaction_log;Transaction Log]
|
button[1,1;4,1;transaction_log;Transaction Log]
|
||||||
|
@ -37,6 +38,33 @@ local function unique()
|
||||||
return ret
|
return ret
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function cash_fs(p_name)
|
||||||
|
local balance = exchange:get_balance(p_name)
|
||||||
|
local formspec =
|
||||||
|
'size[8,9]'..
|
||||||
|
'label[0,0;' .. p_name .. '\'s account]' ..
|
||||||
|
'label[0,1;Balance: ' .. balance .. ']' ..
|
||||||
|
--money
|
||||||
|
'list[detached:global_exchange;money;0,2;3,1;]'..
|
||||||
|
--player inventory
|
||||||
|
'list[current_player;main;0,5;8,4;]'
|
||||||
|
--print(formspec)
|
||||||
|
return formspec
|
||||||
|
end
|
||||||
|
|
||||||
|
function bills2balance(stack, p_name)
|
||||||
|
local bal = exchange:get_balance(p_name)
|
||||||
|
local name = stack:get_name()
|
||||||
|
local count = stack:get_count()
|
||||||
|
if name == 'currency:minegeld' then
|
||||||
|
bal = bal + count
|
||||||
|
elseif name == 'currency:minegeld_5' then
|
||||||
|
bal = bal + count * 5
|
||||||
|
elseif name == 'currency:minegeld_10' then
|
||||||
|
bal = bal + count * 10
|
||||||
|
end
|
||||||
|
return bal
|
||||||
|
end
|
||||||
|
|
||||||
local function info_fs(p_name)
|
local function info_fs(p_name)
|
||||||
local balance = exchange:get_balance(p_name)
|
local balance = exchange:get_balance(p_name)
|
||||||
|
@ -133,6 +161,35 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
minetest.show_formspec(p_name, atm_form, main_menu)
|
minetest.show_formspec(p_name, atm_form, main_menu)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if fields.cash then
|
||||||
|
minetest.show_formspec(p_name, atm_form, cash_fs(p_name))
|
||||||
|
local balance = exchange:get_balance(p_name)
|
||||||
|
local inv = minetest.get_inventory({type="detached", name="global_exchange"})
|
||||||
|
inv:set_size('money', 3)
|
||||||
|
local stacks = inv:get_list('money')
|
||||||
|
local tens = math.floor(balance/10)
|
||||||
|
if tens > 0 then
|
||||||
|
inv:set_stack('money', 1, 'currency:minegeld_10 ' .. tens)
|
||||||
|
balance = balance - tens * 10
|
||||||
|
else
|
||||||
|
inv:set_stack('money', 1, '')
|
||||||
|
end
|
||||||
|
local fives = math.floor(balance/5)
|
||||||
|
if fives > 0 then
|
||||||
|
inv:set_stack('money', 2, 'currency:minegeld_5 ' .. fives)
|
||||||
|
balance = balance - fives * 5
|
||||||
|
else
|
||||||
|
inv:set_stack('money', 2, '')
|
||||||
|
end
|
||||||
|
local ones = math.floor(balance)
|
||||||
|
if ones > 0 then
|
||||||
|
inv:set_stack('money', 3, 'currency:minegeld ' .. ones)
|
||||||
|
balance = balance - ones
|
||||||
|
else
|
||||||
|
inv:set_stack('money', 3, '')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if fields.info then
|
if fields.info then
|
||||||
minetest.show_formspec(p_name, atm_form, info_fs(p_name))
|
minetest.show_formspec(p_name, atm_form, info_fs(p_name))
|
||||||
end
|
end
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
default?
|
default?
|
||||||
|
currency
|
|
@ -198,6 +198,63 @@ minetest.after(0, function()
|
||||||
inv:add_item("main", item_name)
|
inv:add_item("main", item_name)
|
||||||
show_main(p_name, item_name)
|
show_main(p_name, item_name)
|
||||||
end,
|
end,
|
||||||
|
on_put = function(inv, listname, index, stack, player)
|
||||||
|
local p_name = player:get_player_name()
|
||||||
|
if listname == 'money' and minetest.get_item_group(stack:get_name(), 'minegeld') then
|
||||||
|
local balance = bills2balance(stack, p_name)
|
||||||
|
exchange:set_balance(p_name, balance)
|
||||||
|
local stacks = inv:get_list('money')
|
||||||
|
local tens = math.floor(balance/10)
|
||||||
|
if tens > 0 then
|
||||||
|
inv:set_stack('money', 1, 'currency:minegeld_10 ' .. tens)
|
||||||
|
balance = balance - tens * 10
|
||||||
|
else
|
||||||
|
inv:set_stack('money', 1, '')
|
||||||
|
end
|
||||||
|
local fives = math.floor(balance/5)
|
||||||
|
if fives > 0 then
|
||||||
|
inv:set_stack('money', 2, 'currency:minegeld_5 ' .. fives)
|
||||||
|
balance = balance - fives * 5
|
||||||
|
else
|
||||||
|
inv:set_stack('money', 2, '')
|
||||||
|
end
|
||||||
|
local ones = math.floor(balance)
|
||||||
|
if ones > 0 then
|
||||||
|
inv:set_stack('money', 3, 'currency:minegeld ' .. ones)
|
||||||
|
balance = balance - ones
|
||||||
|
else
|
||||||
|
inv:set_stack('money', 3, '')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
minetest.show_formspec(p_name, "global_exchange:atm_form", cash_fs(p_name)) --redraw with new balance
|
||||||
|
end,
|
||||||
|
allow_put = function(inv, listname, index, stack, player)
|
||||||
|
local name = stack:get_name()
|
||||||
|
if listname == 'money' and minetest.get_item_group(name, 'minegeld') > 0 then
|
||||||
|
return stack:get_count()
|
||||||
|
end
|
||||||
|
return 0
|
||||||
|
end,
|
||||||
|
on_take = function(inv, listname, index, stack, player)
|
||||||
|
local p_name = player:get_player_name()
|
||||||
|
if listname == 'money' and minetest.get_item_group(stack:get_name(), 'minegeld') then
|
||||||
|
local name = stack:get_name()
|
||||||
|
local count = stack:get_count()
|
||||||
|
local delta
|
||||||
|
if name == 'currency:minegeld' then
|
||||||
|
delta = count
|
||||||
|
elseif name == 'currency:minegeld_5' then
|
||||||
|
delta = count * 5
|
||||||
|
elseif name == 'currency:minegeld_10' then
|
||||||
|
delta = count * 10
|
||||||
|
end
|
||||||
|
exchange:change_balance(p_name, -delta) --let's hope it always returns success
|
||||||
|
end
|
||||||
|
minetest.show_formspec(p_name, "global_exchange:atm_form", cash_fs(p_name)) --redraw with new balance
|
||||||
|
end,
|
||||||
|
allow_take = function(inv, listname, index, stack, player)
|
||||||
|
return stack:get_count()
|
||||||
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
local selectable_list,n = {},1
|
local selectable_list,n = {},1
|
||||||
|
|
Loading…
Reference in New Issue