first commit
62
api.txt
Normal file
@ -0,0 +1,62 @@
|
||||
|
||||
|
||||
table minercantile.stock
|
||||
table minercantile.stock.items
|
||||
items stock
|
||||
int minercantile.stock.money
|
||||
money stock
|
||||
|
||||
|
||||
table minercantile.shop
|
||||
function minercantile.shop.get_money()
|
||||
return found money
|
||||
|
||||
function minercantile.shop.give_money(amount, bool)
|
||||
param amount:amount of money, bool:save file
|
||||
add money
|
||||
|
||||
function minercantile.shop.take_money(amount, bool)
|
||||
param amount:amount of money, bool:save file
|
||||
remove money
|
||||
|
||||
|
||||
|
||||
files
|
||||
minercantile_stock.txt
|
||||
table money and items
|
||||
|
||||
minercantile_stock_base.txt
|
||||
table items defined by default
|
||||
|
||||
|
||||
|
||||
wallets
|
||||
table minercantile.wallets[player]
|
||||
int money
|
||||
table transactions
|
||||
|
||||
table minercantile.wallet
|
||||
function minercantile.wallet.load_wallet(name)
|
||||
load player's money
|
||||
|
||||
function minercantile.wallet.save_wallet(name)
|
||||
save player's money
|
||||
|
||||
function minercantile.wallet.get_money(name)
|
||||
return player's money
|
||||
|
||||
function minercantile.wallet.give_money(name, amount, transaction)
|
||||
add money
|
||||
|
||||
function minercantile.wallet.take_money(name, amount, transaction)
|
||||
remove money
|
||||
|
||||
function minercantile.wallet.get_transactions(name)
|
||||
return player's transactions
|
||||
|
||||
function minercantile.add_transactions(name, new_transaction)
|
||||
|
||||
|
||||
function minercantile.send_money(sender, receiver, amount)
|
||||
send money from sender to receiver
|
||||
|
110
change.lua
Normal file
@ -0,0 +1,110 @@
|
||||
|
||||
--[[
|
||||
"maptools:copper_coin"
|
||||
"maptools:silver_coin"
|
||||
"maptools:gold_coin"
|
||||
|
||||
100 pc = 1pa, 100pa = 1po
|
||||
--]]
|
||||
|
||||
local convertion = { ["maptools:copper_coin"] = 1, ["maptools:silver_coin"]=100, ["maptools:gold_coin"]=1000}
|
||||
|
||||
local function get_bancomatic_formspec(pos, name)
|
||||
local spos = pos.x .. "," .. pos.y .. "," .. pos.z
|
||||
local formspec =
|
||||
"size[8,9]label[3.35,0;Bancomatic]" ..
|
||||
"label[0,0;Your money:"..minercantile.wallet.get_money(name).."$]" ..
|
||||
"label[2,1;Put your coins to convert on your wallet]" ..
|
||||
|
||||
"image[0,1.5;1,1;maptools_gold_coin.png]" ..
|
||||
"label[1,1.7;= "..convertion["maptools:gold_coin"].."$]" ..
|
||||
"image[0,2.5;1,1;maptools_silver_coin.png]" ..
|
||||
"label[1,2.7;= "..convertion["maptools:silver_coin"].."$]" ..
|
||||
"image[0,3.5;1,1;maptools_copper_coin.png]" ..
|
||||
"label[1,3.7;= "..convertion["maptools:copper_coin"].."$]" ..
|
||||
|
||||
"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]" --..
|
||||
--default.get_hotbar_bg(0,4.85)
|
||||
return formspec
|
||||
end
|
||||
|
||||
|
||||
|
||||
--change money.
|
||||
minetest.register_node("minercantile:bancomatic", {
|
||||
description = "Bancomatic",
|
||||
tiles = {
|
||||
"minercantile_bancomatic_back.png",
|
||||
"minercantile_bancomatic_back.png",
|
||||
"minercantile_bancomatic_side.png",
|
||||
"minercantile_bancomatic_side.png",
|
||||
"minercantile_bancomatic_back.png",
|
||||
"minercantile_bancomatic_front.png",
|
||||
},
|
||||
--top, bottom, right, left, back, front
|
||||
paramtype2 = "facedir",
|
||||
--groups = {choppy = 2, oddly_breakable_by_hand = 2},
|
||||
groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2},
|
||||
legacy_facedir_simple = true,
|
||||
is_ground_content = false,
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("infotext", "Bancomatic")
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("main", 1 * 1)
|
||||
end,
|
||||
can_dig = function(pos,player)
|
||||
local name = player:get_player_name()
|
||||
return (minetest.check_player_privs(name, {protection_bypass = true}) or minetest.check_player_privs(name, {server = true}))
|
||||
end,
|
||||
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
return 0
|
||||
end,
|
||||
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
local item = stack:get_name()
|
||||
if item == "maptools:copper_coin" or item == "maptools:silver_coin" or item == "maptools:gold_coin" then
|
||||
return stack:get_count()
|
||||
end
|
||||
return 0
|
||||
end,
|
||||
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||
return 0
|
||||
end,
|
||||
on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
local item = stack:get_name()
|
||||
if item == "maptools:copper_coin" or item == "maptools:silver_coin" or item == "maptools:gold_coin" then
|
||||
local name = player:get_player_name()
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local nb = stack:get_count()
|
||||
local amount = convertion[item]*nb
|
||||
minercantile.wallet.give_money(name, amount)
|
||||
inv:set_stack(listname, index, nil)
|
||||
minetest.log("action", player:get_player_name() .. " put " .. stack:get_name() .. " to bancomatic at " .. minetest.pos_to_string(pos))
|
||||
minetest.show_formspec(name, "minercantile:bancomatic", get_bancomatic_formspec(pos, name))
|
||||
end
|
||||
end,
|
||||
on_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||
end,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
minetest.show_formspec(clicker:get_player_name(), "minercantile:bancomatic", get_bancomatic_formspec(pos, clicker:get_player_name()))
|
||||
end,
|
||||
on_blast = function() end,
|
||||
})
|
||||
|
||||
|
||||
--nodes
|
||||
minetest.register_craft({
|
||||
output = "minercantile:bancomatic",
|
||||
recipe = {
|
||||
{"default:wood", "default:mese", "default:wood"},
|
||||
{"default:wood", "default:mese", "default:wood"},
|
||||
{"default:wood", "default:mese", "default:wood"},
|
||||
},
|
||||
})
|
||||
|
2
depends.txt
Executable file
@ -0,0 +1,2 @@
|
||||
default
|
||||
unified_inventory?
|
775
init.lua
Normal file
@ -0,0 +1,775 @@
|
||||
minercantile = {}
|
||||
|
||||
--path
|
||||
minercantile.path = minetest.get_worldpath()
|
||||
minercantile.path_wallet = minercantile.path.. "/minercantile_wallet/"
|
||||
minercantile.file_stock_base = minercantile.path.."/minercantile_stock_base.txt"
|
||||
minercantile.file_stock = minercantile.path.."/minercantile_stock.txt"
|
||||
minetest.mkdir(minercantile.path_wallet)
|
||||
|
||||
--items
|
||||
minercantile.stock_base = {}
|
||||
minercantile.stock = {} -- table saved money, items list
|
||||
minercantile.shop = {}
|
||||
minercantile.shop.items_inventory = {}
|
||||
minercantile.stock.items = {}
|
||||
minercantile.stock.money = 10000
|
||||
|
||||
--functions specific to wallet
|
||||
minercantile.wallet = {}
|
||||
-- table players wallets
|
||||
minercantile.wallets = {}
|
||||
--load money
|
||||
dofile(minetest.get_modpath("minercantile") .. "/wallets.lua")
|
||||
dofile(minetest.get_modpath("minercantile") .. "/change.lua")
|
||||
local shop = {} --formspec temporary variables
|
||||
local shop_buy = {}
|
||||
local shop_items_nb
|
||||
--function save items_base
|
||||
function minercantile.save_stock_base()
|
||||
local input, err = io.open(minercantile.file_stock_base, "w")
|
||||
if input then
|
||||
input:write(minetest.serialize(minercantile.stock_base))
|
||||
input:close()
|
||||
else
|
||||
minetest.log("error", "open(" .. minercantile.file_stock_base .. ", 'w') failed: " .. err)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--function load items_base from file
|
||||
function minercantile.load_stock_base()
|
||||
local file = io.open(minercantile.file_stock_base, "r")
|
||||
if file then
|
||||
local data = minetest.deserialize(file:read("*all"))
|
||||
file:close()
|
||||
if data and type(data) == "table" then
|
||||
minercantile.stock_base = table.copy(data)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--function save stock items
|
||||
function minercantile.save_stock()
|
||||
local input, err = io.open(minercantile.file_stock, "w")
|
||||
if input then
|
||||
input:write(minetest.serialize(minercantile.stock))
|
||||
input:close()
|
||||
else
|
||||
minetest.log("error", "open(" .. minercantile.file_stock .. ", 'w') failed: " .. err)
|
||||
end
|
||||
minercantile.set_items_inventory()
|
||||
end
|
||||
|
||||
|
||||
--function load stock items from file
|
||||
function minercantile.load_stock()
|
||||
local file = io.open(minercantile.file_stock, "r")
|
||||
if file then
|
||||
local data = minetest.deserialize(file:read("*all"))
|
||||
file:close()
|
||||
if data and type(data) == "table" then
|
||||
if data.money then
|
||||
minercantile.stock.money = data.money
|
||||
end
|
||||
if data.items then
|
||||
minercantile.stock.items = table.copy(data.items)
|
||||
end
|
||||
minercantile.set_items_inventory()
|
||||
return
|
||||
end
|
||||
end
|
||||
if minercantile.stock_base then
|
||||
minercantile.stock.items = table.copy(minercantile.stock_base)
|
||||
end
|
||||
minercantile.set_items_inventory()
|
||||
end
|
||||
|
||||
|
||||
function minercantile.shop.get_money()
|
||||
return (minercantile.stock.money or 0)
|
||||
end
|
||||
|
||||
|
||||
function minercantile.shop.take_money(money, saving)
|
||||
minercantile.stock.money = minercantile.shop.get_money() - money
|
||||
if minercantile.shop.get_money() < 0 then
|
||||
minercantile.stock.money = 0
|
||||
end
|
||||
if saving then
|
||||
minercantile.save_stock()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function minercantile.shop.give_money(money, saving)
|
||||
minercantile.stock.money = minercantile.shop.get_money() + money
|
||||
if saving then
|
||||
minercantile.save_stock()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- sell fonction
|
||||
function minercantile.calcul_prices(item, object)
|
||||
local price = nil
|
||||
local money = minercantile.shop.get_money()
|
||||
if not minercantile.stock.items[item] then
|
||||
minercantile.stock.items[item] = {nb=1000} --FIXME random nb
|
||||
--minercantile.save_stock()
|
||||
end
|
||||
|
||||
if minercantile.stock.items[item].price ~= nil then -- if defined price
|
||||
price = math.ceil(minercantile.stock.items[item].price)
|
||||
elseif object == "sell" then
|
||||
local nb = minercantile.stock.items[item].nb
|
||||
price = math.ceil((((money/2)/nb) - 0.49))
|
||||
elseif object == "buy" then
|
||||
local nb = minercantile.stock.items[item].nb
|
||||
price = math.ceil((((money/2)/nb) + 0.49))
|
||||
end
|
||||
if price < 1 then price = 1 end
|
||||
return price
|
||||
end
|
||||
|
||||
|
||||
function minercantile.get_formspec_shop_admin_shop(pos, node_name, name)
|
||||
if not shop[name] then
|
||||
shop[name] = {}
|
||||
end
|
||||
shop[name].pos = pos
|
||||
shop[name].node_name = node_name
|
||||
|
||||
local formspec = {"size[6,6]label[2.2,0;Shop Admin]button[4.5,0;1.5,1;shop;Shop]"}
|
||||
local isnode = minetest.get_node_or_nil(pos)
|
||||
if not isnode or isnode.name ~= node_name then return end
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
||||
local isopen = meta:get_int("open") or 0
|
||||
if isopen == 1 then
|
||||
table.insert(formspec, "label[1,1;Is Open: Yes]button[3.5,0.8;1.5,1;open_close;No]")
|
||||
else
|
||||
table.insert(formspec, "label[1,1;Is Open: No]button[3.5,0.8;1.5,1;open_close;Yes]")
|
||||
end
|
||||
|
||||
local always_open = meta:get_int("always_open") or 0
|
||||
if always_open == 1 then
|
||||
table.insert(formspec, "label[1,2;Open 24/24: Yes]button[3.5,1.8;1.5,1;always_open;No]")
|
||||
else
|
||||
table.insert(formspec, "label[1,2;Open 24/24: No]button[3.5,1.8;1.5,1;always_open;Yes]")
|
||||
end
|
||||
|
||||
table.insert(formspec, "button_exit[2.4,5.3;1.5,1;close;Close]")
|
||||
return table.concat(formspec)
|
||||
end
|
||||
|
||||
|
||||
function minercantile.set_items_inventory()
|
||||
local count = 0
|
||||
for Index, Value in pairs(minercantile.stock.items) do
|
||||
count = count + 1
|
||||
end
|
||||
if shop_items_nb ~= count then
|
||||
shop_items_nb = count
|
||||
minercantile.shop.items_inventory = {}
|
||||
for n, def in pairs(minercantile.stock.items) do
|
||||
local item = minetest.registered_items[n]
|
||||
if item then
|
||||
table.insert(minercantile.shop.items_inventory, n)
|
||||
end
|
||||
end
|
||||
table.sort(minercantile.shop.items_inventory)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local function set_pages_by_search(name, search)
|
||||
shop_buy[name].page = 1
|
||||
shop_buy[name].search = minetest.formspec_escape(search)
|
||||
shop_buy[name].items_list = {}
|
||||
local match = false
|
||||
for n, def in pairs(minercantile.stock.items) do
|
||||
local item = minetest.registered_items[n]
|
||||
if item then
|
||||
if string.find(item.name, search) or (item.description and item.description ~= "" and string.find(string.lower(item.description), search)) then
|
||||
table.insert(shop_buy[name].items_list, n)
|
||||
--shop_buy[name].items_list[n]
|
||||
end
|
||||
end
|
||||
end
|
||||
table.sort(shop_buy[name].items_list)
|
||||
end
|
||||
|
||||
|
||||
local function get_shop_inventory_by_page(name)
|
||||
local page = shop_buy[name].page
|
||||
local search = shop_buy[name].search
|
||||
local nb_items, nb_pages
|
||||
local inv_list = {}
|
||||
if search ~= "" then
|
||||
nb_items = #shop_buy[name].items_list
|
||||
nb_pages = math.ceil(nb_items/32)
|
||||
if page > nb_pages then page = nb_pages end
|
||||
local index = 0
|
||||
if nb_pages >1 then
|
||||
index = (page*32)-32
|
||||
end
|
||||
for i=1, 32 do
|
||||
local item = shop_buy[name].items_list[index+i]
|
||||
if not item then break end
|
||||
local nb = minercantile.stock.items[item].nb
|
||||
local price = minercantile.calcul_prices(item, "buy")
|
||||
table.insert(inv_list, {name=item,nb=nb,price=price})
|
||||
end
|
||||
else
|
||||
nb_items = shop_items_nb
|
||||
nb_pages = math.ceil(nb_items/32)
|
||||
if page > nb_pages then page = nb_pages end
|
||||
local index = 0
|
||||
if nb_pages >1 then
|
||||
index = (page*32)-32
|
||||
end
|
||||
for i=1, 32 do
|
||||
local item = minercantile.shop.items_inventory[index+i]
|
||||
if item then
|
||||
local nb = minercantile.stock.items[item].nb
|
||||
local price = minercantile.calcul_prices(item, "buy")
|
||||
table.insert(inv_list, {name=item,nb=nb,price=price})
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
shop_buy[name].nb_pages = nb_pages
|
||||
return inv_list
|
||||
end
|
||||
|
||||
|
||||
--buy
|
||||
function minercantile.buy(name, item, nb, price)
|
||||
local player = minetest.get_player_by_name(name)
|
||||
if not player then return false end
|
||||
local player_inv = player:get_inventory()
|
||||
local shop_money = minercantile.shop.get_money()
|
||||
local player_money = minercantile.wallet.get_money(name)
|
||||
if player_money < 1 then
|
||||
minetest.show_formspec(name, "minercantile:confirmed", "size[6,3]label[2.6,0;Shop]label[1,1;Sorry, you have not enough money]button[1.3,2.1;1.5,1;return;Return]button_exit[3.3,2.1;1.5,1;close;Close]")
|
||||
return false
|
||||
end
|
||||
|
||||
local items_nb = minercantile.stock.items[item].nb -4
|
||||
if items_nb < 1 then
|
||||
minetest.show_formspec(name, "minercantile:confirmed", "size[6,3]label[2.6,0;Shop]label[1.7,1;Sorry, shop have 0 item ..".. item.."]button[1.3,2.1;1.5,1;return;Return]button_exit[3.3,2.1;1.5,1;close;Close]")
|
||||
return false
|
||||
end
|
||||
|
||||
local item_can_sell = nb
|
||||
if items_nb/4 < nb then
|
||||
item_can_sell = items_nb/4
|
||||
end
|
||||
|
||||
local price_total = math.floor(item_can_sell * price)
|
||||
local player_can_buy = item_can_sell
|
||||
if player_money < price_total then
|
||||
player_can_buy = math.floor(player_money/price)
|
||||
end
|
||||
print("player_can_buy:"..dump(player_can_buy))
|
||||
local sell_price = player_can_buy * price
|
||||
|
||||
|
||||
local stack = ItemStack(item.." "..player_can_buy)
|
||||
--player_inv:room_for_item("main", stack)
|
||||
local nn = player_inv:add_item("main", stack)
|
||||
local count = nn:get_count()
|
||||
if count > 0 then
|
||||
minetest.spawn_item(player:getpos(), {name=item, count=count, wear=0, metadata=""})
|
||||
end
|
||||
|
||||
|
||||
minercantile.stock.items[item].nb = minercantile.stock.items[item].nb - player_can_buy
|
||||
minercantile.shop.give_money(sell_price, true)
|
||||
|
||||
minercantile.wallet.take_money(name, sell_price, " Buy "..player_can_buy .." "..item..", price "..sell_price)
|
||||
minetest.show_formspec(name, "minercantile:confirmed", "size[6,3]label[2.6,0;Shop]label[1,1;You buy "..player_can_buy .." "..item..", price "..sell_price.."]button[1.3,2.1;1.5,1;return;Return]button_exit[3.3,2.1;1.5,1;close;Close]")
|
||||
return true
|
||||
end
|
||||
|
||||
local function show_formspec_to_buy(name)
|
||||
local player = minetest.get_player_by_name(name)
|
||||
if not player then return end
|
||||
if not shop_buy[name] then
|
||||
shop_buy[name] = {page=1, search=""}
|
||||
end
|
||||
local formspec = {"size[10,10]bgcolor[#2A2A2A;]label[0,0;shop money:"..minercantile.shop.get_money().."$]label[4.4,0;Buy Items]"}
|
||||
local inv_items = get_shop_inventory_by_page(name)
|
||||
table.insert(formspec, "label[0,0.5;Your money:"..minercantile.wallet.get_money(name) .."$]")
|
||||
table.insert(formspec, "label[0.2,1.4;Page: ".. shop_buy[name].page.." of ".. shop_buy[name].nb_pages.."]")
|
||||
if shop_buy[name].search ~= "" then
|
||||
table.insert(formspec, "label[2,1.4;Filter: ".. minetest.formspec_escape(shop_buy[name].search) .."]")
|
||||
end
|
||||
local x = 0.2
|
||||
local y = 2
|
||||
local j = 1
|
||||
for i=1, 32 do
|
||||
local item = inv_items[i]
|
||||
if item then
|
||||
table.insert(formspec, "item_image_button["..x..","..y..";1,1;"..tostring(item.name)..";buttonchoice_"..tostring(item.name)..";"..item.nb.."]")
|
||||
table.insert(formspec, "label["..(x)..","..(y+0.8)..";"..item.price.."$]")
|
||||
else
|
||||
table.insert(formspec, "image["..x..","..y..";1,1;minercantile_img_inv.png]")
|
||||
end
|
||||
x = x +1.2
|
||||
j = j +1
|
||||
if j > 8 then
|
||||
j = 1
|
||||
x = 0.2
|
||||
y = y + 1.4
|
||||
end
|
||||
end
|
||||
|
||||
table.insert(formspec, "field[3.75,8.75;2.2,1;searchbox;;]")
|
||||
table.insert(formspec, "image_button[5.55,8.52;.8,.8;ui_search_icon.png;searchbutton;]tooltip[searchbutton;Search]")
|
||||
table.insert(formspec, "button[4,9.3;1,1;page_dec;<]")
|
||||
table.insert(formspec, "button[4.9,9.3;1,1;page_inc;>]")
|
||||
table.insert(formspec, "button_exit[8.2,9.3;1.5,1;choice;Close]")
|
||||
minetest.show_formspec(name, "minercantile:shop_buy", table.concat(formspec))
|
||||
end
|
||||
|
||||
|
||||
local function get_formspec_buy_items(name)
|
||||
local item = shop_buy[name].item
|
||||
local max = shop_buy[name].max
|
||||
local nb = shop_buy[name].nb
|
||||
local price = shop_buy[name].price
|
||||
local formspec = {"size[8,6]label[3.5,0;Buy Items]"}
|
||||
table.insert(formspec, "button[0.6,2;1,1;amount;-1]")
|
||||
table.insert(formspec, "button[1.6,2;1,1;amount;-10]")
|
||||
table.insert(formspec, "button[2.6,2;1,1;amount;-20]")
|
||||
table.insert(formspec, "item_image_button[3.6,2;1,1;"..item..";buttonchoice_"..item..";"..nb.."]")
|
||||
table.insert(formspec, "button[4.6,2;1,1;amount;+20]")
|
||||
table.insert(formspec, "button[5.6,2;1,1;amount;+10]")
|
||||
table.insert(formspec, "button[6.6,2;1,1;amount;+1]")
|
||||
|
||||
table.insert(formspec, "size[8,6]label[3,3;Buy ".. nb.."x"..price.."="..nb * price.."]")
|
||||
table.insert(formspec, "button[3.3,4;1.5,1;confirm;Confirm]")
|
||||
table.insert(formspec, "button[0,0;1.5,1;abort;Return]")
|
||||
return table.concat(formspec)
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- sell
|
||||
function minercantile.sell(name, item, nb, price)
|
||||
local player = minetest.get_player_by_name(name)
|
||||
if not player then return false end
|
||||
local player_inv = player:get_inventory()
|
||||
local shop_money = minercantile.shop.get_money()
|
||||
|
||||
if shop_money < 1 then
|
||||
minetest.show_formspec(name, "minercantile:confirmed", "size[6,3]label[2.6,0;Shop]label[1,1;Sorry, shop have not enough money]button[1.3,2.1;1.5,1;return;Return]button_exit[3.3,2.1;1.5,1;close;Close]")
|
||||
return false
|
||||
end
|
||||
|
||||
local items_nb = 0
|
||||
for i=1,player_inv:get_size("main") do
|
||||
if player_inv:get_stack("main", i):get_name() == item then
|
||||
items_nb = items_nb + player_inv:get_stack("main", i):get_count()
|
||||
end
|
||||
end
|
||||
|
||||
if items_nb == 0 then
|
||||
minetest.show_formspec(name, "minercantile:confirmed", "size[6,3]label[2.6,0;Shop]label[1.7,1;Sorry, You have 0 item ..".. item.."]button[1.3,2.1;1.5,1;return;Return]button_exit[3.3,2.1;1.5,1;close;Close]")
|
||||
return false
|
||||
end
|
||||
|
||||
local item_can_sell = nb
|
||||
if items_nb < nb then
|
||||
item_can_sell = items_nb
|
||||
end
|
||||
|
||||
local price_total = math.floor(item_can_sell * price)
|
||||
local shop_can_buy = item_can_sell
|
||||
if (shop_money/4) < price_total then
|
||||
shop_can_buy = math.floor((shop_money/4)/price)
|
||||
elseif shop_money < price_total then
|
||||
shop_can_buy = math.floor(shop_money/price)
|
||||
end
|
||||
print("shop_can_buy:"..dump(shop_can_buy))
|
||||
local sell_price = shop_can_buy * price
|
||||
|
||||
for i=1,player_inv:get_size("main") do
|
||||
if player_inv:get_stack("main", i):get_name() == item then
|
||||
items_nb = items_nb + player_inv:get_stack("main", i):get_count()
|
||||
end
|
||||
end
|
||||
|
||||
local stack = ItemStack(item.." "..shop_can_buy)
|
||||
player_inv:remove_item("main", stack)
|
||||
|
||||
minercantile.stock.items[item].nb = minercantile.stock.items[item].nb + shop_can_buy
|
||||
minercantile.shop.take_money(sell_price, true)
|
||||
|
||||
minercantile.wallet.give_money(name, sell_price, " Sell "..shop_can_buy .." "..item..", price "..sell_price)
|
||||
minetest.show_formspec(name, "minercantile:confirmed", "size[6,3]label[2.6,0;Shop]label[1,1;You sell "..shop_can_buy .." "..item..", price "..sell_price.."]button[1.3,2.1;1.5,1;return;Return]button_exit[3.3,2.1;1.5,1;close;Close]")
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
-- show sell formspec
|
||||
local function show_formspec_to_sell(name)
|
||||
local player = minetest.get_player_by_name(name)
|
||||
if not player then return end
|
||||
local formspec = {"size[10,8]bgcolor[#2A2A2A;]label[4,0;Sell Items]"}
|
||||
table.insert(formspec, "label[0,0;shop money:"..minercantile.shop.get_money().."$]")
|
||||
table.insert(formspec, "label[0,0.5;Your money:"..minercantile.wallet.get_money(name) .."$]")
|
||||
local player_inv = player:get_inventory()
|
||||
local inv_items = {}
|
||||
for i=1, player_inv:get_size("main") do
|
||||
if not player_inv:get_stack("main", i):is_empty() and minetest.registered_items[player_inv:get_stack("main", i):get_name()] then
|
||||
local item = player_inv:get_stack("main", i):get_name()
|
||||
if not inv_items[item] then
|
||||
inv_items[item] = {nb=0}
|
||||
end
|
||||
inv_items[item].nb = inv_items[item].nb + player_inv:get_stack("main", i):get_count()
|
||||
if not inv_items[item].price then
|
||||
inv_items[item].price = minercantile.calcul_prices(item, "sell")
|
||||
end
|
||||
end
|
||||
end
|
||||
shop[name] = {}
|
||||
shop[name].items = table.copy(inv_items)
|
||||
local x = 0.2
|
||||
local y = 1
|
||||
for n, def in pairs(inv_items) do
|
||||
table.insert(formspec, "item_image_button["..x..","..y..";1,1;"..n..";buttonchoice_"..n..";"..def.nb.."]")
|
||||
table.insert(formspec, "label["..(x+0.2)..","..(y+0.8)..";"..def.price.."]")
|
||||
x = x +1.1
|
||||
if x > 8 then
|
||||
x = 0.2
|
||||
y = y + 1.4
|
||||
end
|
||||
end
|
||||
table.insert(formspec, "button_exit[1.3,7.3;1.5,1;choice;Close]")
|
||||
minetest.show_formspec(name, "minercantile:shop_sell", table.concat(formspec))
|
||||
end
|
||||
|
||||
|
||||
local function get_formspec_sell_items(name)
|
||||
local item = shop[name].item
|
||||
local max = shop[name].max
|
||||
local nb = shop[name].nb
|
||||
local price = shop[name].price
|
||||
local formspec = {"size[8,6]label[3.5,0;Sell Items]"}
|
||||
|
||||
table.insert(formspec, "button[0.6,2;1,1;amount;-1]")
|
||||
table.insert(formspec, "button[1.6,2;1,1;amount;-10]")
|
||||
table.insert(formspec, "button[2.6,2;1,1;amount;-20]")
|
||||
--table.insert(formspec, "label[3.7,5.2;"..tostring(nb).."]")
|
||||
table.insert(formspec, "item_image_button[3.6,2;1,1;"..item..";buttonchoice_"..item..";"..nb.."]")
|
||||
table.insert(formspec, "button[4.6,2;1,1;amount;+20]")
|
||||
table.insert(formspec, "button[5.6,2;1,1;amount;+10]")
|
||||
table.insert(formspec, "button[6.6,2;1,1;amount;+1]")
|
||||
|
||||
table.insert(formspec, "size[8,6]label[3,3;sell ".. nb.."x"..price.."="..nb * price.."]")
|
||||
table.insert(formspec, "button[3.3,4;1.5,1;confirm;Confirm]")
|
||||
table.insert(formspec, "button[0,0;1.5,1;abort;Return]")
|
||||
return table.concat(formspec)
|
||||
end
|
||||
|
||||
|
||||
local function get_formspec_welcome(name)
|
||||
local formspec = {"size[6,5]label[2.6,0;Shop]"}
|
||||
table.insert(formspec, "image[1,1;5,1.25;minercantile_shop_welcome.png]")
|
||||
table.insert(formspec, "button[1.3,3.3;1.5,1;choice;Buy]")
|
||||
table.insert(formspec, "button[3.5,3.3;1.5,1;choice;Sell]")
|
||||
return table.concat(formspec)
|
||||
end
|
||||
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
local name = player:get_player_name()
|
||||
if not name or name == "" then return end
|
||||
if formname == "minercantile:shop_welcome" then
|
||||
if fields["choice"] then
|
||||
if fields["choice"] == "Buy" then
|
||||
show_formspec_to_buy(name)
|
||||
elseif fields["choice"] == "Sell" then
|
||||
show_formspec_to_sell(name)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
elseif formname == "minercantile:shop_buy" then
|
||||
for b, n in pairs(fields) do
|
||||
if string.find(b, "buttonchoice_") then
|
||||
if not shop_buy[name] then
|
||||
shop_buy[name] = {}
|
||||
end
|
||||
local item = string.sub(b, 14)
|
||||
shop_buy[name].item = item
|
||||
shop_buy[name].max = tonumber(n)
|
||||
shop_buy[name].nb = 1
|
||||
--shop_buy[name].price = shop_buy[name].items[shop_buy[name].item].price
|
||||
shop_buy[name].price = minercantile.calcul_prices(item, "buy")
|
||||
minetest.show_formspec(name, "minercantile:shop_buy_items", get_formspec_buy_items(name))
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
if fields["quit"] then
|
||||
return
|
||||
elseif fields["searchbutton"] then
|
||||
local search = string.sub(string.lower(fields["searchbox"]), 1, 14)
|
||||
set_pages_by_search(name, search)
|
||||
elseif fields["page_inc"] then
|
||||
if shop_buy[name].page < shop_buy[name].nb_pages then
|
||||
shop_buy[name].page = shop_buy[name].page+1
|
||||
end
|
||||
elseif fields["page_dec"] then
|
||||
if shop_buy[name].page > 1 then
|
||||
shop_buy[name].page = shop_buy[name].page-1
|
||||
end
|
||||
end
|
||||
show_formspec_to_buy(name)
|
||||
elseif formname == "minercantile:shop_buy_items" then
|
||||
if fields["amount"] then
|
||||
local inc = tonumber(fields["amount"])
|
||||
if inc ~= nil then
|
||||
shop_buy[name].nb = shop_buy[name].nb + inc
|
||||
end
|
||||
if shop_buy[name].nb > shop_buy[name].max then
|
||||
shop_buy[name].nb = shop_buy[name].max
|
||||
end
|
||||
if shop_buy[name].nb > 99 then
|
||||
shop_buy[name].nb = 99
|
||||
end
|
||||
if shop_buy[name].nb < 1 then
|
||||
shop_buy[name].nb = 1
|
||||
end
|
||||
elseif fields["abort"] then
|
||||
show_formspec_to_buy(name)
|
||||
return
|
||||
elseif fields["confirm"] then
|
||||
minercantile.buy(name, shop_buy[name].item, shop_buy[name].nb, shop_buy[name].price)
|
||||
return
|
||||
elseif fields["quit"] then
|
||||
shop_buy[name] = nil
|
||||
return
|
||||
end
|
||||
minetest.show_formspec(name, "minercantile:shop_buy_items", get_formspec_buy_items(name))
|
||||
elseif formname == "minercantile:shop_buy_confirm" then
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
elseif formname == "minercantile:shop_sell" then
|
||||
for b, n in pairs(fields) do
|
||||
if string.find(b, "buttonchoice_") then
|
||||
if not shop[name] then
|
||||
shop[name] = {}
|
||||
end
|
||||
shop[name].item = string.sub(b, 14)
|
||||
shop[name].max = tonumber(n)
|
||||
shop[name].nb = 1
|
||||
shop[name].price = shop[name].items[shop[name].item].price
|
||||
minetest.show_formspec(name, "minercantile:shop_sell_items", get_formspec_sell_items(name))
|
||||
break
|
||||
end
|
||||
end
|
||||
return
|
||||
elseif formname == "minercantile:shop_sell_items" then
|
||||
if fields["amount"] then
|
||||
local inc = tonumber(fields["amount"])
|
||||
if inc ~= nil then
|
||||
shop[name].nb = shop[name].nb + inc
|
||||
end
|
||||
if shop[name].nb > shop[name].max then
|
||||
shop[name].nb = shop[name].max
|
||||
end
|
||||
if shop[name].nb > 99 then
|
||||
shop[name].nb = 99
|
||||
end
|
||||
if shop[name].nb < 1 then
|
||||
shop[name].nb = 1
|
||||
end
|
||||
elseif fields["abort"] then
|
||||
show_formspec_to_sell(name)
|
||||
return
|
||||
elseif fields["confirm"] then
|
||||
minercantile.sell(name, shop[name].item, shop[name].nb, shop[name].price)
|
||||
return
|
||||
elseif fields["quit"] then
|
||||
shop[name] = nil
|
||||
return
|
||||
end
|
||||
minetest.show_formspec(name, "minercantile:shop_sell_items", get_formspec_sell_items(name))
|
||||
elseif formname == "minercantile:confirmed" then
|
||||
if fields["return"] then
|
||||
show_formspec_to_sell(name)
|
||||
end
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
elseif formname == "minercantile:shop_admin_shop" then
|
||||
if fields["quit"] then
|
||||
shop[name] = nil
|
||||
return
|
||||
elseif fields["shop"] then
|
||||
minetest.show_formspec(name, "minercantile:shop_welcome", get_formspec_welcome(name))
|
||||
return
|
||||
end
|
||||
local pos = shop[name].pos
|
||||
local node_name = shop[name].node_name
|
||||
local isnode = minetest.get_node_or_nil(pos)
|
||||
if not isnode or isnode.name ~= node_name then return end --FIXME
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
||||
if fields["open_close"] then
|
||||
local open = 0
|
||||
if fields["open_close"] == "Yes" then
|
||||
open = 1
|
||||
end
|
||||
meta:set_int("open", open)
|
||||
elseif fields["always_open"] then
|
||||
local always_open = 0
|
||||
if fields["always_open"] == "Yes" then
|
||||
always_open = 1
|
||||
end
|
||||
meta:set_int("always_open", always_open)
|
||||
end
|
||||
minetest.show_formspec(name, "minercantile:shop_admin_shop", minercantile.get_formspec_shop_admin_shop(pos, node_name, name))
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
|
||||
|
||||
--Barter shop.
|
||||
minetest.register_node("minercantile:shop", {
|
||||
description = "Barter Shop",
|
||||
tiles = {"minercantile_shop.png"},
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
paramtype2 = "facedir",
|
||||
drawtype = "mesh",
|
||||
mesh = "minercantile_shop.obj",
|
||||
paramtype = "light",
|
||||
--visual_scale = 0.5,
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("infotext", "Barter Shop")
|
||||
meta:set_int("open", 0)
|
||||
meta:set_int("always_open", 0)
|
||||
end,
|
||||
can_dig = function(pos,player)
|
||||
--return minetest.get_player_privs(player:get_player_name())["money_admin"] --FIXME
|
||||
--if minetest.check_player_privs(name, {protection_bypass = true}) or minetest.check_player_privs(name, {server = true}) then
|
||||
return true
|
||||
end,
|
||||
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
|
||||
local name = player:get_player_name()
|
||||
if not name or name == "" then return end
|
||||
if minetest.check_player_privs(name, {protection_bypass = true}) or minetest.check_player_privs(name, {server = true}) then
|
||||
minetest.show_formspec(name, "minercantile:shop_admin_shop", minercantile.get_formspec_shop_admin_shop(pos, node.name, name))
|
||||
else
|
||||
local meta = minetest.get_meta(pos)
|
||||
local isopen = meta:get_int("open")
|
||||
if (isopen and isopen == 1) then
|
||||
local always_open = meta:get_int("always_open")
|
||||
local tod = (minetest.get_timeofday() or 0) * 24000
|
||||
if always_open == 1 or (tod > 4500 and tod < 19500) then --FIXME check tod 8h-21h
|
||||
minetest.show_formspec(name, "minercantile:shop_welcome", get_formspec_welcome(name))
|
||||
else
|
||||
minetest.show_formspec(name, "minercantile:closed", "size[6,3]label[2.6,0;Shop]label[1.2,1;Sorry shop is only open 7h-21h]button_exit[2.3,2.1;1.5,1;close;Close]")
|
||||
end
|
||||
else
|
||||
minetest.show_formspec(name, "minercantile:closed", "size[6,3]label[2.6,0;Shop]label[1.7,1;Sorry shop is closed]button_exit[2.3,2.1;1.5,1;close;Close]")
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
--nodes
|
||||
minetest.register_craft({
|
||||
output = "minercantile:shop",
|
||||
recipe = {
|
||||
{"default:wood", "default:wood", "default:wood"},
|
||||
{"default:wood", "default:mese", "default:wood"},
|
||||
{"default:wood", "default:wood", "default:wood"},
|
||||
},
|
||||
})
|
||||
|
||||
--[[
|
||||
if (minetest.get_modpath("unified_inventory")) then
|
||||
unified_inventory.register_button("shop_admin", {
|
||||
type = "image",
|
||||
image = "minercantile_shop.png", --FIXME change texture
|
||||
tooltip = "Admin Shop",
|
||||
show_with = "server",
|
||||
action = function(player)
|
||||
local name = player:get_player_name()
|
||||
if not name then return end
|
||||
local formspec = minercantile.get_formspec_shop_admin(name)
|
||||
minetest.show_formspec(name, "minercantile:shop_admin", formspec)
|
||||
end,
|
||||
})
|
||||
else
|
||||
minetest.register_chatcommand("shop_admin",{
|
||||
params = "",
|
||||
description = "Show admin shop formspec",
|
||||
privs = {server = true},
|
||||
func = function (name, params)
|
||||
local formspec = minercantile.get_formspec_shop_admin(name)
|
||||
minetest.show_formspec(name, "minercantile:shop_admin", formspec)
|
||||
end,
|
||||
})
|
||||
end
|
||||
--]]
|
||||
|
||||
minetest.register_chatcommand("shop_addmoney",{
|
||||
params = "money",
|
||||
description = "give money to the shop",
|
||||
privs = {server = true},
|
||||
func = function(name, param)
|
||||
local amount = tonumber(param)
|
||||
if amount == nil then
|
||||
minetest.chat_send_player(name, "invalid, you must add amount at param")
|
||||
return
|
||||
end
|
||||
minercantile.shop.give_money(amount, true)
|
||||
minetest.chat_send_player(name, "you add "..amount.. ", new total:".. minercantile.shop.get_money())
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
minetest.register_chatcommand("shop_delmoney",{
|
||||
params = "money",
|
||||
description = "del money to the shop",
|
||||
privs = {server = true},
|
||||
func = function(name, param)
|
||||
local amount = tonumber(param)
|
||||
if (amount == nil ) then
|
||||
minetest.chat_send_player(name, "invalid, you must add amount at param")
|
||||
return
|
||||
end
|
||||
minercantile.shop.take_money(amount, true)
|
||||
minetest.chat_send_player(name, "you delete "..amount.. ", new total:".. minercantile.shop.get_money())
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
--load items base and available
|
||||
minercantile.load_stock_base()
|
||||
minercantile.load_stock()
|
||||
minetest.log("action", "[minercantile] Loaded")
|
329
models/minercantile_shop.obj
Normal file
@ -0,0 +1,329 @@
|
||||
# Blender v2.77 (sub 0) OBJ File: 'caisse1.blend'
|
||||
# www.blender.org
|
||||
mtllib caisse.mtl
|
||||
o Cube
|
||||
v -0.145637 -0.038666 0.253085
|
||||
v -0.145637 0.055666 0.253085
|
||||
v -0.205832 -0.038666 0.253010
|
||||
v -0.205832 0.055666 0.253010
|
||||
v -0.315176 0.055666 0.239985
|
||||
v -0.036259 0.055666 0.240241
|
||||
v -0.315176 0.167488 0.239985
|
||||
v -0.036259 0.167488 0.240241
|
||||
v -0.145637 -0.038666 0.298973
|
||||
v -0.145637 0.055666 0.298973
|
||||
v -0.205832 -0.038666 0.299048
|
||||
v -0.205832 0.055666 0.299048
|
||||
v -0.315176 0.055666 0.312073
|
||||
v -0.036259 0.055666 0.311817
|
||||
v -0.315176 0.167488 0.312073
|
||||
v -0.036259 0.167488 0.311817
|
||||
v -0.205860 0.055666 0.276029
|
||||
v -0.205860 -0.038666 0.276029
|
||||
v -0.145664 0.055666 0.276029
|
||||
v -0.145664 -0.038666 0.276029
|
||||
v -0.315226 0.055666 0.276029
|
||||
v -0.036308 0.055666 0.276029
|
||||
v -0.315226 0.167488 0.276029
|
||||
v -0.036308 0.167488 0.276029
|
||||
v -0.363016 -0.499073 -0.412719
|
||||
v -0.363016 -0.499073 0.391858
|
||||
v -0.363016 -0.198782 -0.412720
|
||||
v -0.363016 0.006452 0.391858
|
||||
v -0.363016 -0.295672 -0.412719
|
||||
v -0.331280 -0.277247 -0.380984
|
||||
v -0.363016 -0.258822 -0.412719
|
||||
v -0.363016 -0.295672 0.391858
|
||||
v -0.331280 -0.277247 0.360122
|
||||
v -0.363016 -0.258822 0.391858
|
||||
v -0.348973 -0.486905 -0.412719
|
||||
v -0.348973 -0.307840 -0.412719
|
||||
v -0.348973 -0.486905 -0.402216
|
||||
v -0.348973 -0.307840 -0.402216
|
||||
v -0.340920 -0.478646 -0.402216
|
||||
v -0.340920 -0.316099 -0.402216
|
||||
v -0.340920 -0.478646 -0.422506
|
||||
v -0.340920 -0.316099 -0.422506
|
||||
v -0.363016 -0.499073 0.163401
|
||||
v -0.363016 0.006452 0.163401
|
||||
v -0.363016 -0.258822 0.163401
|
||||
v -0.331280 -0.277247 0.149687
|
||||
v -0.363016 -0.295672 0.163401
|
||||
v 0.441561 -0.499073 -0.412720
|
||||
v 0.441561 -0.499073 0.391858
|
||||
v 0.441561 -0.198782 -0.412720
|
||||
v 0.441561 0.006452 0.391858
|
||||
v 0.441561 -0.295672 -0.412720
|
||||
v 0.409825 -0.277247 -0.380984
|
||||
v 0.441561 -0.258822 -0.412720
|
||||
v 0.441561 -0.295672 0.391858
|
||||
v 0.409825 -0.277247 0.360122
|
||||
v 0.441561 -0.258822 0.391858
|
||||
v 0.427518 -0.486905 -0.412720
|
||||
v 0.427518 -0.307840 -0.412720
|
||||
v 0.427518 -0.486905 -0.402216
|
||||
v 0.427518 -0.307840 -0.402216
|
||||
v 0.419465 -0.478646 -0.402216
|
||||
v 0.419465 -0.316099 -0.402216
|
||||
v 0.419465 -0.478646 -0.422507
|
||||
v 0.419465 -0.316099 -0.422507
|
||||
v 0.441561 -0.499073 0.163401
|
||||
v 0.441561 0.006452 0.163401
|
||||
v 0.441561 -0.258822 0.163401
|
||||
v 0.409825 -0.277247 0.149687
|
||||
v 0.441561 -0.295672 0.163401
|
||||
v 0.039272 -0.499073 -0.412719
|
||||
v 0.039273 -0.499073 0.391858
|
||||
v 0.039272 -0.198782 -0.412719
|
||||
v 0.039273 0.006452 0.391858
|
||||
v 0.039273 -0.295672 0.391858
|
||||
v 0.039273 -0.277247 0.360122
|
||||
v 0.039273 -0.258822 0.391858
|
||||
v 0.039272 -0.295672 -0.412719
|
||||
v 0.039272 -0.277247 -0.380984
|
||||
v 0.039272 -0.258822 -0.412719
|
||||
v 0.039272 -0.486905 -0.412719
|
||||
v 0.039272 -0.307840 -0.412719
|
||||
v 0.039272 -0.486905 -0.402216
|
||||
v 0.039272 -0.307840 -0.402216
|
||||
v 0.039272 -0.478646 -0.402216
|
||||
v 0.039272 -0.316099 -0.402216
|
||||
v 0.039272 -0.478646 -0.422506
|
||||
v 0.039272 -0.316099 -0.422506
|
||||
v 0.039272 0.006452 0.163401
|
||||
v 0.039272 -0.499073 0.163401
|
||||
vt 0.8315 0.7650
|
||||
vt 0.8089 0.7884
|
||||
vt 0.7999 0.6861
|
||||
vt 0.8171 0.6838
|
||||
vt 0.7237 0.7869
|
||||
vt 0.7577 0.6795
|
||||
vt 0.9264 0.8025
|
||||
vt 0.6024 0.8025
|
||||
vt 0.5608 0.8025
|
||||
vt 0.6024 0.9324
|
||||
vt 0.5608 0.9324
|
||||
vt 0.7043 0.7632
|
||||
vt 0.6008 0.7757
|
||||
vt 0.9264 0.9324
|
||||
vt 0.9683 0.8025
|
||||
vt 0.9683 0.9324
|
||||
vt 0.9265 0.9743
|
||||
vt 0.6024 0.9740
|
||||
vt 0.9280 0.7771
|
||||
vt 0.7355 0.6719
|
||||
vt 0.7999 0.6861
|
||||
vt 0.8089 0.7884
|
||||
vt 0.7577 0.6795
|
||||
vt 0.7237 0.7869
|
||||
vt 0.6024 0.8025
|
||||
vt 0.9264 0.8025
|
||||
vt 0.6024 0.9324
|
||||
vt 0.9264 0.8025
|
||||
vt 0.9264 0.9324
|
||||
vt 0.6024 0.9324
|
||||
vt 0.6024 0.8025
|
||||
vt 0.9264 0.9324
|
||||
vt 0.7608 0.2153
|
||||
vt 0.8893 0.2612
|
||||
vt 0.8197 0.4560
|
||||
vt 0.6912 0.4101
|
||||
vt 0.4114 0.4212
|
||||
vt 0.4466 0.3227
|
||||
vt 0.5572 0.3622
|
||||
vt 0.5220 0.4607
|
||||
vt 0.3527 0.5851
|
||||
vt 0.3986 0.4567
|
||||
vt 0.5093 0.4962
|
||||
vt 0.4634 0.6247
|
||||
vt 0.3984 0.4366
|
||||
vt 0.5003 0.4730
|
||||
vt 0.6268 0.1674
|
||||
vt 0.7253 0.2026
|
||||
vt 0.6557 0.3974
|
||||
vt 0.7431 0.2090
|
||||
vt 0.6789 0.3884
|
||||
vt 0.2372 0.0282
|
||||
vt 0.1676 0.2230
|
||||
vt 0.1638 0.2149
|
||||
vt 0.2325 0.0265
|
||||
vt 0.0678 0.2042
|
||||
vt 0.0736 0.1989
|
||||
vt 0.0792 0.1933
|
||||
vt 0.1604 0.2098
|
||||
vt 0.2284 0.0250
|
||||
vt 0.1576 0.2045
|
||||
vt 0.2252 0.0238
|
||||
vt 0.0829 0.1906
|
||||
vt 0.1515 0.1956
|
||||
vt 0.2173 0.0208
|
||||
vt 0.0929 0.1815
|
||||
vt 0.1414 0.3447
|
||||
vt 0.1324 0.3215
|
||||
vt 0.1197 0.3570
|
||||
vt 0.1093 0.3861
|
||||
vt 0.5162 0.1279
|
||||
vt 0.4637 0.6419
|
||||
vt 0.4637 0.9889
|
||||
vt 0.2354 0.9889
|
||||
vt 0.2354 0.6419
|
||||
vt 0.0832 0.0001
|
||||
vt 0.0964 0.0002
|
||||
vt 0.0798 0.0001
|
||||
vt 0.0679 0.0001
|
||||
vt 0.0728 0.0001
|
||||
vt 0.0492 0.1881
|
||||
vt 0.0306 0.2042
|
||||
vt 0.0306 0.0001
|
||||
vt 0.0492 0.0001
|
||||
vt 0.0001 0.2042
|
||||
vt 0.0002 0.0001
|
||||
vt 0.9303 0.4956
|
||||
vt 0.9999 0.3008
|
||||
vt 0.6912 0.4101
|
||||
vt 0.8197 0.4560
|
||||
vt 0.4114 0.4212
|
||||
vt 0.5220 0.4607
|
||||
vt 0.5572 0.3622
|
||||
vt 0.4466 0.3227
|
||||
vt 0.3527 0.5851
|
||||
vt 0.4634 0.6247
|
||||
vt 0.5093 0.4962
|
||||
vt 0.3986 0.4567
|
||||
vt 0.5003 0.4730
|
||||
vt 0.3984 0.4366
|
||||
vt 0.6557 0.3974
|
||||
vt 0.6789 0.3884
|
||||
vt 0.1638 0.2149
|
||||
vt 0.1676 0.2230
|
||||
vt 0.0736 0.1989
|
||||
vt 0.0678 0.2042
|
||||
vt 0.1604 0.2098
|
||||
vt 0.0792 0.1933
|
||||
vt 0.1576 0.2045
|
||||
vt 0.0829 0.1906
|
||||
vt 0.1515 0.1956
|
||||
vt 0.0929 0.1815
|
||||
vt 0.1414 0.3447
|
||||
vt 0.1324 0.3215
|
||||
vt 0.1197 0.3570
|
||||
vt 0.1093 0.3861
|
||||
vt 0.0072 0.6419
|
||||
vt 0.0072 0.9889
|
||||
vt 0.0492 0.1881
|
||||
vt 0.0306 0.2042
|
||||
vt 0.0001 0.2042
|
||||
vt 0.9303 0.4956
|
||||
vn -1.0000 0.0000 -0.0012
|
||||
vn 0.0012 0.0000 -1.0000
|
||||
vn 0.0000 -1.0000 0.0000
|
||||
vn 1.0000 0.0000 0.0014
|
||||
vn 0.0009 0.0000 -1.0000
|
||||
vn -1.0000 0.0000 -0.0014
|
||||
vn 0.0000 1.0000 0.0000
|
||||
vn 1.0000 0.0000 0.0012
|
||||
vn -1.0000 0.0000 0.0012
|
||||
vn 0.0013 0.0000 1.0000
|
||||
vn 1.0000 0.0000 -0.0014
|
||||
vn 0.0009 0.0000 1.0000
|
||||
vn -1.0000 0.0000 0.0014
|
||||
vn 1.0000 0.0000 -0.0012
|
||||
vn 0.0000 -0.0000 1.0000
|
||||
vn -1.0000 0.0000 -0.0000
|
||||
vn -0.5021 -0.8648 0.0000
|
||||
vn -0.5021 0.8648 0.0000
|
||||
vn 0.0000 0.8648 0.5021
|
||||
vn -0.0000 -0.8648 0.5021
|
||||
vn -0.0000 0.0000 -1.0000
|
||||
vn 1.0000 -0.0000 0.0000
|
||||
vn 0.0000 0.9420 -0.3356
|
||||
vn 0.0000 -0.8648 -0.5021
|
||||
vn -0.0000 0.8648 -0.5021
|
||||
vn 0.5021 -0.8648 -0.0000
|
||||
vn 0.5021 0.8648 -0.0000
|
||||
usemtl Material
|
||||
s off
|
||||
f 17/1/1 4/2/1 3/3/1 18/4/1
|
||||
f 4/2/2 2/5/2 1/6/2 3/3/2
|
||||
f 2/5/3 4/2/3 5/7/3 6/8/3
|
||||
f 22/9/4 6/8/4 8/10/4 24/11/4
|
||||
f 19/12/3 2/5/3 6/8/3 22/13/3
|
||||
f 6/8/5 5/7/5 7/14/5 8/10/5
|
||||
f 5/7/6 21/15/6 23/16/6 7/14/6
|
||||
f 8/10/7 7/14/7 23/17/7 24/18/7
|
||||
f 4/2/3 17/1/3 21/19/3 5/7/3
|
||||
f 2/5/8 19/12/8 20/20/8 1/6/8
|
||||
f 17/1/9 18/4/9 11/21/9 12/22/9
|
||||
f 12/22/10 11/21/10 9/23/10 10/24/10
|
||||
f 10/24/3 14/25/3 13/26/3 12/22/3
|
||||
f 22/9/11 24/11/11 16/27/11 14/25/11
|
||||
f 19/12/3 22/13/3 14/25/3 10/24/3
|
||||
f 14/28/12 16/29/12 15/30/12 13/31/12
|
||||
f 13/26/13 15/32/13 23/16/13 21/15/13
|
||||
f 16/27/7 24/18/7 23/17/7 15/32/7
|
||||
f 12/22/3 13/26/3 21/19/3 17/1/3
|
||||
f 10/24/14 9/23/14 20/20/14 19/12/14
|
||||
f 77/33/15 74/34/15 28/35/15 34/36/15
|
||||
f 47/37/16 43/38/16 26/39/16 32/40/16
|
||||
f 44/41/16 45/42/16 34/43/16 28/44/16
|
||||
f 45/42/17 46/45/17 33/46/17 34/43/17
|
||||
f 46/45/18 47/37/18 32/40/18 33/46/18
|
||||
f 72/47/15 75/48/15 32/49/15 26/39/15
|
||||
f 75/48/19 76/50/19 33/51/19 32/49/19
|
||||
f 76/50/20 77/33/20 34/36/20 33/51/20
|
||||
f 71/52/21 25/53/21 35/54/21 81/55/21
|
||||
f 25/53/21 29/56/21 36/57/21 35/54/21
|
||||
f 35/54/22 36/57/22 38/58/22 37/59/22
|
||||
f 81/55/7 35/54/7 37/59/7 83/60/7
|
||||
f 83/60/21 37/59/21 39/61/21 85/62/21
|
||||
f 37/59/21 38/58/21 40/63/21 39/61/21
|
||||
f 85/62/3 39/61/3 41/64/3 87/65/3
|
||||
f 39/61/16 40/63/16 42/66/16 41/64/16
|
||||
f 30/67/18 29/68/18 47/37/18 46/45/18
|
||||
f 31/69/17 30/67/17 46/45/17 45/42/17
|
||||
f 27/70/16 31/69/16 45/42/16 44/41/16
|
||||
f 29/68/16 25/53/16 43/38/16 47/37/16
|
||||
f 25/53/3 71/52/3 90/71/3 43/38/3
|
||||
f 27/72/23 44/73/23 89/74/23 73/75/23
|
||||
f 40/63/7 86/76/7 88/77/7 42/66/7
|
||||
f 41/64/21 42/66/21 88/77/21 87/65/21
|
||||
f 38/58/21 84/78/21 86/76/21 40/63/21
|
||||
f 29/56/21 78/79/21 82/80/21 36/57/21
|
||||
f 36/57/3 82/80/3 84/78/3 38/58/3
|
||||
f 30/81/24 31/82/24 80/83/24 79/84/24
|
||||
f 29/56/25 30/81/25 79/84/25 78/79/25
|
||||
f 31/82/21 27/85/21 73/86/21 80/83/21
|
||||
f 44/87/7 28/35/7 74/34/7 89/88/7
|
||||
f 43/38/3 90/71/3 72/47/3 26/39/3
|
||||
f 77/33/15 57/89/15 51/90/15 74/34/15
|
||||
f 70/91/22 55/92/22 49/93/22 66/94/22
|
||||
f 67/95/22 51/96/22 57/97/22 68/98/22
|
||||
f 68/98/26 57/97/26 56/99/26 69/100/26
|
||||
f 69/100/27 56/99/27 55/92/27 70/91/27
|
||||
f 72/47/15 49/93/15 55/101/15 75/48/15
|
||||
f 75/48/19 55/101/19 56/102/19 76/50/19
|
||||
f 76/50/20 56/102/20 57/89/20 77/33/20
|
||||
f 71/52/21 81/55/21 58/103/21 48/104/21
|
||||
f 48/104/21 58/103/21 59/105/21 52/106/21
|
||||
f 58/103/16 60/107/16 61/108/16 59/105/16
|
||||
f 81/55/7 83/60/7 60/107/7 58/103/7
|
||||
f 83/60/21 85/62/21 62/109/21 60/107/21
|
||||
f 60/107/21 62/109/21 63/110/21 61/108/21
|
||||
f 85/62/3 87/65/3 64/111/3 62/109/3
|
||||
f 62/109/22 64/111/22 65/112/22 63/110/22
|
||||
f 53/113/27 69/100/27 70/91/27 52/114/27
|
||||
f 54/115/26 68/98/26 69/100/26 53/113/26
|
||||
f 50/116/22 67/95/22 68/98/22 54/115/22
|
||||
f 52/114/22 70/91/22 66/94/22 48/104/22
|
||||
f 48/104/3 66/94/3 90/71/3 71/52/3
|
||||
f 50/117/23 73/75/23 89/74/23 67/118/23
|
||||
f 63/110/7 65/112/7 88/77/7 86/76/7
|
||||
f 64/111/21 87/65/21 88/77/21 65/112/21
|
||||
f 61/108/21 63/110/21 86/76/21 84/78/21
|
||||
f 52/106/21 59/105/21 82/80/21 78/79/21
|
||||
f 59/105/3 61/108/3 84/78/3 82/80/3
|
||||
f 53/119/24 79/84/24 80/83/24 54/120/24
|
||||
f 52/106/25 78/79/25 79/84/25 53/119/25
|
||||
f 54/120/21 80/83/21 73/86/21 50/121/21
|
||||
f 67/122/7 89/88/7 74/34/7 51/90/7
|
||||
f 66/94/3 49/93/3 72/47/3 90/71/3
|
BIN
textures/minercantile_bancomatic_back.png
Normal file
After Width: | Height: | Size: 139 B |
BIN
textures/minercantile_bancomatic_front.png
Normal file
After Width: | Height: | Size: 248 B |
BIN
textures/minercantile_bancomatic_side.png
Normal file
After Width: | Height: | Size: 279 B |
BIN
textures/minercantile_img_inv.png
Normal file
After Width: | Height: | Size: 293 B |
BIN
textures/minercantile_minecoins2.png
Normal file
After Width: | Height: | Size: 353 B |
BIN
textures/minercantile_money.png
Normal file
After Width: | Height: | Size: 392 B |
BIN
textures/minercantile_shop.png
Normal file
After Width: | Height: | Size: 3.0 KiB |
BIN
textures/minercantile_shop_welcome.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
310
wallets.lua
Normal file
@ -0,0 +1,310 @@
|
||||
local states = {}
|
||||
|
||||
--function load a player's wallet
|
||||
function minercantile.wallet.load_wallet(name)
|
||||
if minercantile.wallets[name] == nil then
|
||||
minercantile.wallets[name] = {}
|
||||
end
|
||||
local file, err = io.open(minercantile.path_wallet..name, "r")
|
||||
if file then
|
||||
local data = minetest.deserialize(file:read("*all"))
|
||||
file:close()
|
||||
if data and type(data) == "table" then
|
||||
if data.money then
|
||||
minercantile.wallets[name].money = data.money
|
||||
else
|
||||
minercantile.wallets[name].money = 0
|
||||
end
|
||||
if data.transactions then
|
||||
minercantile.wallets[name].transactions = table.copy(data.transactions)
|
||||
else
|
||||
minercantile.wallets[name].transactions = {}
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
--if new player then wallet is empty
|
||||
minercantile.wallets[name].money = 0
|
||||
minercantile.wallets[name].transactions = {}
|
||||
end
|
||||
|
||||
|
||||
function minercantile.wallet.save_wallet(name)
|
||||
local input, err = io.open(minercantile.path_wallet..name, "w")
|
||||
if input then
|
||||
input:write(minetest.serialize(minercantile.wallets[name]))
|
||||
input:close()
|
||||
minetest.log("info", "saved " .. minercantile.path_wallet..name)
|
||||
else
|
||||
minetest.log("error", "open(" .. minercantile.path_wallet..name .. ", 'w') failed: " .. err)
|
||||
end
|
||||
|
||||
--unload wallet if player offline
|
||||
local connected = false
|
||||
for _, player in pairs(minetest.get_connected_players()) do
|
||||
local player_name = player:get_player_name()
|
||||
if player_name and player_name ~= "" and player_name == name then
|
||||
connected = true
|
||||
break
|
||||
end
|
||||
end
|
||||
if not connected then
|
||||
minercantile.wallets[name] = nil
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function minercantile.wallet.get_money(name)
|
||||
if minercantile.wallets[name] == nil then
|
||||
minercantile.wallet.load_wallet(name)
|
||||
end
|
||||
return minercantile.wallets[name].money
|
||||
end
|
||||
|
||||
|
||||
function minercantile.wallet.give_money(name, amount, transaction)
|
||||
if minercantile.wallets[name] == nil then
|
||||
minercantile.wallet.load_wallet(name)
|
||||
end
|
||||
minercantile.wallets[name].money = minercantile.wallet.get_money(name) + amount
|
||||
if transaction then
|
||||
local trans = os.date().. ":"..transaction..", new amount:"..minercantile.wallet.get_money(name)
|
||||
minercantile.add_transactions(name, trans)
|
||||
end
|
||||
minercantile.wallet.save_wallet(name)
|
||||
end
|
||||
|
||||
|
||||
function minercantile.wallet.take_money(name, amount, transaction)
|
||||
if minercantile.wallets[name] == nil then
|
||||
minercantile.wallet.load_wallet(name)
|
||||
end
|
||||
minercantile.wallets[name].money = minercantile.wallet.get_money(name) - amount
|
||||
if transaction then
|
||||
local trans = os.date().. ": "..transaction..", new amount:"..minercantile.wallet.get_money(name)
|
||||
minercantile.add_transactions(name, trans)
|
||||
end
|
||||
minercantile.wallet.save_wallet(name)
|
||||
end
|
||||
|
||||
|
||||
function minercantile.wallet.get_transactions(name)
|
||||
if minercantile.wallets[name] == nil then
|
||||
minercantile.wallet.load_wallet(name)
|
||||
end
|
||||
return minercantile.wallets[name].transactions
|
||||
end
|
||||
|
||||
|
||||
function minercantile.add_transactions(name, new_transaction)
|
||||
local old = minercantile.wallet.get_transactions(name)
|
||||
minercantile.wallets[name].transactions = {new_transaction}
|
||||
for _, trans in pairs(old) do
|
||||
table.insert(minercantile.wallets[name].transactions, trans)
|
||||
if #minercantile.wallets[name].transactions > 9 then
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function minercantile.send_money(sender, receiver, amount)
|
||||
if minercantile.wallet.get_money(sender) < amount then
|
||||
return false
|
||||
end
|
||||
minercantile.wallet.take_money(sender, amount, "Send "..amount.." Minecoins to "..receiver)
|
||||
minercantile.wallet.give_money(receiver, amount, "Received "..amount.." Minecoins from "..sender)
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
function minercantile.get_formspec_wallet(name)
|
||||
if minercantile.wallets[name] == nil then
|
||||
minercantile.wallet.load_wallet(name)
|
||||
end
|
||||
local formspec = {}
|
||||
table.insert(formspec,"size[10,9]label[4.4,0;My Wallet]")
|
||||
table.insert(formspec,"image[1,2;1,1;minercantile_money.png]") --FIXME add image
|
||||
table.insert(formspec,"label[2,2.2;total:".. tostring(minercantile.wallet.get_money(name)) .."]")
|
||||
table.insert(formspec,"label[4,3.3;10 last transactions]")
|
||||
|
||||
local transactions = minercantile.wallet.get_transactions(name)
|
||||
if #transactions < 1 then
|
||||
table.insert(formspec,"label[3.5,5;There are no transactions]")
|
||||
else
|
||||
local y = 4
|
||||
for _,transac in pairs(transactions) do
|
||||
table.insert(formspec,"label[0,"..y..";".. transac .."]")
|
||||
y = y+0.4
|
||||
end
|
||||
end
|
||||
|
||||
table.insert(formspec,"button[0,8.2;1.5,1;page;Transfert]")
|
||||
table.insert(formspec,"button_exit[8,8.2;1.5,1;close;Close]")
|
||||
return table.concat(formspec)
|
||||
end
|
||||
|
||||
|
||||
function minercantile.get_formspec_wallet_transfert(name)
|
||||
local money = minercantile.wallet.get_money(name)
|
||||
local formspec = {}
|
||||
table.insert(formspec,"size[10,9]label[4.4,0;My Wallet]")
|
||||
table.insert(formspec,"image[1,2;1,1;minercantile_money.png]")
|
||||
table.insert(formspec,"label[2,2.2;total:".. tostring(money) .."]")
|
||||
|
||||
if money < 5 then
|
||||
table.insert(formspec, "label[2,4.5;Sorry you can't send Minecoins, minimum amount is 5]")
|
||||
else
|
||||
if not states[name] then
|
||||
states[name] = {}
|
||||
end
|
||||
if not states[name].players_list or states[name].refresh then
|
||||
states[name].refresh = nil
|
||||
states[name].players_list = {}
|
||||
states[name].selected_id = 0
|
||||
for _,player in pairs(minetest.get_connected_players()) do
|
||||
local player_name = player:get_player_name()
|
||||
if player_name and player_name ~= "" and player_name ~= name then
|
||||
table.insert(states[name].players_list, player_name)
|
||||
end
|
||||
end
|
||||
states[name]["receiver"] = nil
|
||||
end
|
||||
if not states[name].amount then
|
||||
states[name].amount = 5
|
||||
end
|
||||
if #states[name].players_list == 0 then
|
||||
table.insert(formspec, "label[2,3.6;There are no player, refresh]")
|
||||
table.insert(formspec,"button[6,3.4;2,1;refresh;refresh list]")
|
||||
else
|
||||
table.insert(formspec, "dropdown[3,3.5;3,1;receiver;"..table.concat(states[name].players_list, ",")..";"..states[name].selected_id.."]")
|
||||
table.insert(formspec, "label[3.5,6.5;Send "..states[name]["amount"].." to "..(states[name]["receiver"] or "").." ?]")
|
||||
table.insert(formspec,"button[4.1,7;1.5,1;send;send]")
|
||||
table.insert(formspec,"button[6,3.4;1.5,1;refresh;refresh list]")
|
||||
table.insert(formspec, "label[3.5,4.5;amount to send(minimum 5)]")
|
||||
table.insert(formspec, "button[1.7,5;1,1;amount;-1]")
|
||||
table.insert(formspec, "button[2.7,5;1,1;amount;-10]")
|
||||
table.insert(formspec, "button[3.7,5;1,1;amount;-100]")
|
||||
table.insert(formspec, "label[4.7,5.2;"..tostring(states[name]["amount"]).."]")
|
||||
table.insert(formspec, "button[5.4,5;1,1;amount;+100]")
|
||||
table.insert(formspec, "button[6.4,5;1,1;amount;+10]")
|
||||
table.insert(formspec, "button[7.4,5;1,1;amount;+1]")
|
||||
end
|
||||
end
|
||||
table.insert(formspec,"button[0,8.2;1.5,1;page;wallet]")
|
||||
table.insert(formspec,"button_exit[8,8.2;1.5,1;close;Close]")
|
||||
return table.concat(formspec)
|
||||
end
|
||||
|
||||
|
||||
function minercantile.get_formspec_wallet_transfert_send(name)
|
||||
local formspec = {"size[6,3]label[2,0;Validate sending]"}
|
||||
table.insert(formspec, "label[1,1.2;Send "..tostring(states[name]["amount"]).." Minecoins to ".. states[name]["receiver"] .."]")
|
||||
table.insert(formspec, "button_exit[1.1,2.1;1.5,1;close;Abort]")
|
||||
table.insert(formspec, "button[3.3,2.1;1.5,1;send;Send]")
|
||||
return table.concat(formspec)
|
||||
end
|
||||
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
local name = player:get_player_name()
|
||||
if not name or name == "" then return end
|
||||
if formname == "minercantile:ended" then
|
||||
states[name] = nil
|
||||
return
|
||||
elseif formname == "minercantile:wallet" then
|
||||
if fields["quit"] or fields["close"] then
|
||||
states[name] = nil
|
||||
return
|
||||
elseif fields["page"] then
|
||||
minetest.show_formspec(name, "minercantile:transfert", minercantile.get_formspec_wallet_transfert(name))
|
||||
return
|
||||
end
|
||||
elseif formname == "minercantile:transfert" then
|
||||
if fields["quit"] then
|
||||
states[name] = nil
|
||||
return
|
||||
elseif fields["page"] then
|
||||
minetest.show_formspec(name, "minercantile:wallet", minercantile.get_formspec_wallet(name))
|
||||
return
|
||||
elseif fields["refresh"] then
|
||||
states[name].refresh = true
|
||||
elseif fields["amount"] then
|
||||
local inc = tonumber(fields["amount"])
|
||||
if inc ~= nil then
|
||||
states[name]["amount"] = states[name]["amount"] + inc
|
||||
end
|
||||
if states[name]["amount"] > minercantile.wallet.get_money(name) then
|
||||
states[name]["amount"] = minercantile.wallet.get_money(name)
|
||||
end
|
||||
if states[name]["amount"] < 5 then
|
||||
states[name]["amount"] = 5
|
||||
end
|
||||
elseif fields["send"] then
|
||||
if states[name]["receiver"] and states[name]["receiver"] ~= "" then
|
||||
minetest.show_formspec(name, "minercantile:transfert_send", minercantile.get_formspec_wallet_transfert_send(name))
|
||||
return
|
||||
end
|
||||
elseif fields["receiver"] then
|
||||
for i, n in pairs(states[name].players_list) do
|
||||
if n == fields["receiver"] then
|
||||
states[name]["receiver"] = fields["receiver"]
|
||||
states[name].selected_id = i
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
minetest.show_formspec(name, "minercantile:transfert", minercantile.get_formspec_wallet_transfert(name))
|
||||
elseif formname == "minercantile:transfert_send" then
|
||||
if fields["send"] then
|
||||
if minercantile.send_money( name, states[name]["receiver"], states[name]["amount"]) then
|
||||
minetest.show_formspec(name, "minercantile:ended", "size[5,3]label[1.8,0;Validated]label[1.6,1;Minecoins sent]button_exit[1.8,2.1;1.5,1;close;Close]")
|
||||
else
|
||||
minetest.show_formspec(name, "minercantile:ended", "size[5,3]label[1.6,0;Error]label[1.5,1;Error occured]button_exit[1.8,2.1;1.5,1;close;Close]")
|
||||
end
|
||||
elseif fields["quit"] or fields["close"] then
|
||||
states[name] = nil
|
||||
return
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
if (minetest.get_modpath("unified_inventory")) then
|
||||
unified_inventory.register_button("wallet", {
|
||||
type = "image",
|
||||
image = "minercantile_money.png",
|
||||
tooltip = "My Wallet",
|
||||
show_with = "interact",
|
||||
action = function(player)
|
||||
local name = player:get_player_name()
|
||||
if not name then return end
|
||||
local formspec = minercantile.get_formspec_wallet(name)
|
||||
minetest.show_formspec(name, "minercantile:wallet", formspec)
|
||||
end,
|
||||
})
|
||||
else
|
||||
minetest.register_chatcommand("wallet",{
|
||||
params = "",
|
||||
description = "Shows your money wallet",
|
||||
privs = {interact= true},
|
||||
func = function (name, params)
|
||||
local formspec = minercantile.get_formspec_wallet(name)
|
||||
minetest.show_formspec(name, "minercantile:wallet", formspec)
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
local name = player:get_player_name()
|
||||
if not name or name == "" then return end
|
||||
minercantile.wallet.load_wallet(name)
|
||||
end)
|
||||
|
||||
minetest.register_on_leaveplayer(function(player)
|
||||
local name = player:get_player_name()
|
||||
if not name or name == "" then return end
|
||||
minercantile.wallets[name] = nil
|
||||
end)
|
||||
|