Ajoute la possibilité de déposer de l'argent via l'ATM

This commit is contained in:
sys4-fr 2018-12-31 13:36:52 +01:00
parent 7db6fb3ca7
commit d49a7fdc12

67
atm.lua
View File

@ -2,14 +2,21 @@
local exchange = ... local exchange = ...
local atm_form = "global_exchange:atm_form" local atm_form = "global_exchange:atm_form"
local atm_pos = {}
local main_menu =[[ local main_menu =[[
size[6,2] size[6,2]
button[0,0;2,1;deposit;Deposit]
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]
]] ]]
local coins_convert = {
["minercantile:copper_coin"]=1, ["minercantile:silver_coin"]=9, ["minercantile:gold_coin"]=81,
["maptools:copper_coin"]=1, ["maptools:silver_coin"]=9, ["maptools:gold_coin"]=81,
["bitchange:mineninth"]=729, ["bitchange:minecoin"]=6561, ["bitchange:minecoinblock"]=59049
}
local function logout(x,y) local function logout(x,y)
return "button[" .. x .. "," .. y .. ";2,1;logout;Log Out]" return "button[" .. x .. "," .. y .. ";2,1;logout;Log Out]"
@ -36,6 +43,25 @@ local function unique()
return ret return ret
end end
local function deposit_fs(p_name)
local balance = exchange:get_balance(p_name)
local spos = atm_pos[p_name].x..","..atm_pos[p_name].y..","..atm_pos[p_name].z
local fs
if not balance then
fs = label(0.5,0.5, "You don't have an account.")
else
fs = label(0.5,0.5, "Balance: " .. balance) ..
label(1,1,"Put your coins to credit your account")..
"list[nodemeta:"..spos..";main;3.5,2.5;1,1;]"..
"list[current_player;main;0,4.85;8,1;]"..
"list[current_player;main;0,6.08;8,3;8]" ..
"listring[nodemeta:"..spos..";main]"..
"listring[current_player;main]"
end
return "size[8,9]" .. fs .. logout(0.5,2)
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)
@ -149,6 +175,10 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
minetest.show_formspec(p_name, atm_form, log_fs(p_name)) minetest.show_formspec(p_name, atm_form, log_fs(p_name))
end end
if fields.deposit then
minetest.show_formspec(p_name, atm_form, deposit_fs(p_name))
end
return true return true
end) end)
@ -192,6 +222,7 @@ minetest.register_node("global_exchange:atm_bottom", {
{0.375, 1.375, -0.3125, 0.5, 1.5, -0.25}, {0.375, 1.375, -0.3125, 0.5, 1.5, -0.25},
}, },
}, },
groups = {cracky=2, atm = 1},
on_place = function(itemstack, placer, pointed_thing) on_place = function(itemstack, placer, pointed_thing)
local under = pointed_thing.under local under = pointed_thing.under
local pos local pos
@ -230,10 +261,42 @@ minetest.register_node("global_exchange:atm_bottom", {
minetest.remove_node(pos2) minetest.remove_node(pos2)
end end
end, end,
groups = {cracky=2, atm = 1}, on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("infotext", "ATM")
local inv = meta:get_inventory()
inv:set_size("main", 1)
end,
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
local itname = stack:get_name()
if coins_convert[itname] ~= nil then
return stack:get_count()
end
return 0
end,
on_metadata_inventory_put = function(pos, listname, index, stack, player)
local itname = stack:get_name()
if coins_convert[itname] ~= nil then
local p_name = player:get_player_name()
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
local nb = stack:get_count()
local amount = coins_convert[itname] * nb
local succ, msg = exchange:give_credits(p_name, amount, "Cash deposit (+"..amount..")")
if succ then
inv:set_stack(listname, index, nil)
minetest.log("action", p_name.." put "..nb.." "..stack:get_name() .. " to ATM at " .. minetest.pos_to_string(pos))
minetest.show_formspec(p_name, atm_form, deposit_fs(p_name))
else
minetest.log("error", p_name.." want to put "..nb.." "..stack:get_name().." to ATM at ".. minetest.pos_to_string(pos).." but: "..msg)
end
end
end,
on_rightclick = function(pos, _, clicker) on_rightclick = function(pos, _, clicker)
local p_name = clicker:get_player_name()
atm_pos[p_name] = pos
minetest.sound_play("atm_beep", {pos = pos, gain = 0.3, max_hear_distance = 5}) minetest.sound_play("atm_beep", {pos = pos, gain = 0.3, max_hear_distance = 5})
minetest.show_formspec(clicker:get_player_name(), atm_form, main_menu) minetest.show_formspec(p_name, atm_form, main_menu)
end, end,
}) })