From d49a7fdc120a7ad011e2a80d3bc204c7da87785a Mon Sep 17 00:00:00 2001 From: sys4-fr Date: Mon, 31 Dec 2018 13:36:52 +0100 Subject: [PATCH] =?UTF-8?q?Ajoute=20la=20possibilit=C3=A9=20de=20d=C3=A9po?= =?UTF-8?q?ser=20de=20l'argent=20via=20l'ATM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- atm.lua | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 2 deletions(-) diff --git a/atm.lua b/atm.lua index f6342a8..93fb7a7 100644 --- a/atm.lua +++ b/atm.lua @@ -2,14 +2,21 @@ local exchange = ... local atm_form = "global_exchange:atm_form" +local atm_pos = {} local main_menu =[[ size[6,2] +button[0,0;2,1;deposit;Deposit] button[2,0;2,1;info;Account Info] button[4,0;2,1;wire;Wire Monies] 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) return "button[" .. x .. "," .. y .. ";2,1;logout;Log Out]" @@ -36,6 +43,25 @@ local function unique() return ret 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 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)) end + if fields.deposit then + minetest.show_formspec(p_name, atm_form, deposit_fs(p_name)) + end + return true end) @@ -192,6 +222,7 @@ minetest.register_node("global_exchange:atm_bottom", { {0.375, 1.375, -0.3125, 0.5, 1.5, -0.25}, }, }, + groups = {cracky=2, atm = 1}, on_place = function(itemstack, placer, pointed_thing) local under = pointed_thing.under local pos @@ -230,10 +261,42 @@ minetest.register_node("global_exchange:atm_bottom", { minetest.remove_node(pos2) 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) + 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.show_formspec(clicker:get_player_name(), atm_form, main_menu) + minetest.show_formspec(p_name, atm_form, main_menu) end, })