2014-10-28 18:01:32 +01:00
--[[
2015-07-02 19:34:54 +02:00
Mod by Kotolegokot and Xiong ( 2012 - 2013 )
Rev . kilbith and nerzhul ( 2015 )
2014-10-28 18:01:32 +01:00
] ]
2015-07-02 19:34:54 +02:00
money = { }
dofile ( minetest.get_modpath ( " money " ) .. " /settings.txt " ) -- Loading settings.
2014-10-28 18:01:32 +01:00
local function has_shop_privilege ( meta , player ) --Does player have permissions for this shop?
return player : get_player_name ( ) == meta : get_string ( " owner " ) or minetest.get_player_privs ( player : get_player_name ( ) ) [ " money_admin " ]
end
2015-07-02 19:34:54 +02:00
minetest.register_craft ( {
2014-10-28 18:01:32 +01:00
output = " money:shop " ,
recipe = {
2015-07-02 19:34:54 +02:00
{ " default:wood " , " default:wood " , " default:wood " } ,
{ " default:wood " , " default:mese " , " default:wood " } ,
{ " default:wood " , " default:wood " , " default:wood " } ,
2014-10-28 18:01:32 +01:00
} ,
} )
minetest.register_alias ( " shop " , " money:shop " )
2015-08-29 20:33:37 +02:00
minetest.register_privilege ( " money_admin " , {
description = " Has access to admin shops " ,
give_to_singleplayer = false
} )
2014-10-28 18:01:32 +01:00
--Barter shop.
minetest.register_node ( " money:barter_shop " , {
description = " Barter Shop " ,
2015-08-31 10:48:35 +02:00
tiles = { " money_barter_shop.png " } ,
2014-10-28 18:01:32 +01:00
groups = { snappy = 2 , choppy = 2 , oddly_breakable_by_hand = 2 } ,
sounds = default.node_sound_wood_defaults ( ) ,
paramtype2 = " facedir " ,
after_place_node = function ( pos , placer )
2014-11-08 18:36:57 +01:00
local meta = minetest.get_meta ( pos )
2014-10-28 18:01:32 +01:00
meta : set_string ( " owner " , placer : get_player_name ( ) )
meta : set_string ( " infotext " , " Untuned Barter Shop (owned by " .. placer : get_player_name ( ) .. " ) " )
end ,
on_construct = function ( pos )
2014-11-08 18:36:57 +01:00
local meta = minetest.get_meta ( pos )
2014-10-28 18:01:32 +01:00
meta : set_string ( " formspec " , " size[8,5.6] " ..
" field[0.256,0.5;8,1;bartershopname;Name of your barter shop:;] " ..
" field[0.256,1.5;8,1;nodename1;What kind of a node do you want to exchange:;] " ..
" field[0.256,2.5;8,1;nodename2;for:;] " ..
" field[0.256,3.5;8,1;amount1;Amount of first kind of node:;] " ..
" field[0.256,4.5;8,1;amount2;Amount of second kind of node:;] " ..
" button_exit[3.1,5;2,1;button;Proceed] " )
meta : set_string ( " infotext " , " Untuned Barter Shop " )
meta : set_string ( " owner " , " " )
meta : set_string ( " form " , " yes " )
end ,
can_dig = function ( pos , player )
2014-11-08 18:36:57 +01:00
local meta = minetest.get_meta ( pos ) ;
2014-10-28 18:01:32 +01:00
local inv = meta : get_inventory ( )
return inv : is_empty ( " main " ) and ( meta : get_string ( " owner " ) == player : get_player_name ( ) or minetest.get_player_privs ( player : get_player_name ( ) ) [ " money_admin " ] )
end ,
allow_metadata_inventory_move = function ( pos , from_list , from_index , to_list , to_index , count , player )
2014-11-08 18:36:57 +01:00
local meta = minetest.get_meta ( pos )
2014-10-28 18:01:32 +01:00
if not has_shop_privilege ( meta , player ) then
minetest.log ( " action " , player : get_player_name ( ) ..
" tried to access a barter shop belonging to " ..
meta : get_string ( " owner " ) .. " at " ..
minetest.pos_to_string ( pos ) )
return 0
end
return count
end ,
allow_metadata_inventory_put = function ( pos , listname , index , stack , player )
2014-11-08 18:36:57 +01:00
local meta = minetest.get_meta ( pos )
2014-10-28 18:01:32 +01:00
if not has_shop_privilege ( meta , player ) then
minetest.log ( " action " , player : get_player_name ( ) ..
" tried to access a barter shop belonging to " ..
meta : get_string ( " owner " ) .. " at " ..
minetest.pos_to_string ( pos ) )
return 0
end
return stack : get_count ( )
end ,
allow_metadata_inventory_take = function ( pos , listname , index , stack , player )
2014-11-08 18:36:57 +01:00
local meta = minetest.get_meta ( pos )
2014-10-28 18:01:32 +01:00
if not has_shop_privilege ( meta , player ) then
minetest.log ( " action " , player : get_player_name ( ) ..
" tried to access a barter shop belonging to " ..
meta : get_string ( " owner " ) .. " at " ..
minetest.pos_to_string ( pos ) )
return 0
end
return stack : get_count ( )
end ,
on_metadata_inventory_move = function ( pos , from_list , from_index , to_list , to_index , count , player )
minetest.log ( " action " , player : get_player_name ( ) ..
" moves stuff in barter shop at " .. minetest.pos_to_string ( pos ) )
end ,
on_metadata_inventory_put = function ( pos , listname , index , stack , player )
minetest.log ( " action " , player : get_player_name ( ) ..
" moves stuff to barter shop at " .. minetest.pos_to_string ( pos ) )
end ,
on_metadata_inventory_take = function ( pos , listname , index , count , player )
minetest.log ( " action " , player : get_player_name ( ) ..
" takes stuff from barter shop at " .. minetest.pos_to_string ( pos ) )
end ,
on_receive_fields = function ( pos , formname , fields , sender )
2014-11-08 18:36:57 +01:00
local meta = minetest.get_meta ( pos )
2014-10-28 18:01:32 +01:00
if meta : get_string ( " form " ) == " yes " then
if fields.bartershopname ~= " " and minetest.registered_items [ fields.nodename1 ] and minetest.registered_items [ fields.nodename2 ] and tonumber ( fields.amount1 ) and tonumber ( fields.amount1 ) >= 1 and tonumber ( fields.amount2 ) and tonumber ( fields.amount2 ) >= 1 and ( meta : get_string ( " owner " ) == sender : get_player_name ( ) or minetest.get_player_privs ( sender : get_player_name ( ) ) [ " money_admin " ] ) then
meta : set_string ( " formspec " , " size[8,10;] " ..
" list[context;main;0,0;8,4;] " ..
" label[0.256,4.5; " .. fields.amount2 .. " " .. fields.nodename2 .. " --> " .. fields.amount1 .. " " .. fields.nodename1 .. " ] " ..
" button[3.1,5;2,1;button;Exchange] " ..
" list[current_player;main;0,6;8,4;] " )
meta : set_string ( " bartershopname " , fields.bartershopname )
meta : set_string ( " nodename1 " , fields.nodename1 )
meta : set_string ( " nodename2 " , fields.nodename2 )
meta : set_string ( " amount1 " , fields.amount1 )
meta : set_string ( " amount2 " , fields.amount2 )
meta : set_string ( " infotext " , " Barter Shop \" " .. fields.bartershopname .. " \" (owned by " .. meta : get_string ( " owner " ) .. " ) " )
local inv = meta : get_inventory ( )
inv : set_size ( " main " , 8 * 4 )
meta : set_string ( " form " , " no " )
end
elseif fields [ " button " ] then
local sender_name = sender : get_player_name ( )
local inv = meta : get_inventory ( )
local sender_inv = sender : get_inventory ( )
if not inv : contains_item ( " main " , meta : get_string ( " nodename1 " ) .. " " .. meta : get_string ( " amount1 " ) ) then
minetest.chat_send_player ( sender_name , " In the barter shop is not enough goods. " )
return
elseif not sender_inv : contains_item ( " main " , meta : get_string ( " nodename2 " ) .. " " .. meta : get_string ( " amount2 " ) ) then
minetest.chat_send_player ( sender_name , " In your inventory is not enough goods. " )
return
elseif not inv : room_for_item ( " main " , meta : get_string ( " nodename2 " ) .. " " .. meta : get_string ( " amount2 " ) ) then
minetest.chat_send_player ( sender_name , " In the barter shop is not enough space. " )
return
elseif not sender_inv : room_for_item ( " main " , meta : get_string ( " nodename1 " ) .. " " .. meta : get_string ( " amount1 " ) ) then
minetest.chat_send_player ( sender_name , " In your inventory is not enough space. " )
return
end
inv : remove_item ( " main " , meta : get_string ( " nodename1 " ) .. " " .. meta : get_string ( " amount1 " ) )
sender_inv : remove_item ( " main " , meta : get_string ( " nodename2 " ) .. " " .. meta : get_string ( " amount2 " ) )
inv : add_item ( " main " , meta : get_string ( " nodename2 " ) .. " " .. meta : get_string ( " amount2 " ) )
sender_inv : add_item ( " main " , meta : get_string ( " nodename1 " ) .. " " .. meta : get_string ( " amount1 " ) )
minetest.chat_send_player ( sender_name , " You exchanged " .. meta : get_string ( " amount2 " ) .. " " .. meta : get_string ( " nodename2 " ) .. " on " .. meta : get_string ( " amount1 " ) .. " " .. meta : get_string ( " nodename1 " ) .. " . " )
end
end ,
} )
--End.
2015-06-10 17:14:58 +02:00
2014-10-28 18:01:32 +01:00
minetest.register_craft ( { --Barter shop recipe.
output = " money:barter_shop " ,
recipe = {
{ " locked_sign:sign_wall_locked " } ,
{ " default:chest_locked " } ,
} ,
} )
minetest.register_alias ( " barter_shop " , " money:barter_shop " )
2015-07-02 19:34:54 +02:00
2015-08-29 20:33:37 +02:00
-- Admin barter shop
2014-10-28 18:01:32 +01:00
minetest.register_node ( " money:admin_barter_shop " , {
description = " Admin Barter Shop " ,
2015-08-31 10:48:35 +02:00
tiles = { " money_admin_barter_shop.png " } ,
2014-10-28 18:01:32 +01:00
groups = { snappy = 2 , choppy = 2 , oddly_breakable_by_hand = 2 } ,
sounds = default.node_sound_wood_defaults ( ) ,
paramtype2 = " facedir " ,
on_construct = function ( pos )
2014-11-08 18:36:57 +01:00
local meta = minetest.get_meta ( pos )
2014-10-28 18:01:32 +01:00
meta : set_string ( " formspec " , " size[8,4.6] " ..
" field[0.256,0.5;8,1;nodename1;What kind of a node do you want to exchange:;] " ..
" field[0.256,1.5;8,1;nodename2;for:;] " ..
" field[0.256,2.5;8,1;amount1;Amount of first kind of node:;] " ..
" field[0.256,3.5;8,1;amount2;Amount of second kind of node:;] " ..
" button_exit[3.1,4;2,1;button;Proceed] " )
meta : set_string ( " infotext " , " Untuned Admin Barter Shop " )
meta : set_string ( " form " , " yes " )
end ,
can_dig = function ( pos , player )
return minetest.get_player_privs ( player : get_player_name ( ) ) [ " money_admin " ]
end ,
on_receive_fields = function ( pos , formname , fields , sender )
2014-11-08 18:36:57 +01:00
local meta = minetest.get_meta ( pos )
2014-10-28 18:01:32 +01:00
if meta : get_string ( " form " ) == " yes " then
2015-08-29 20:33:37 +02:00
if minetest.registered_items [ fields.nodename1 ] and minetest.registered_items [ fields.nodename2 ] and tonumber ( fields.amount1 ) and tonumber ( fields.amount1 ) >= 1 and tonumber ( fields.amount2 ) and tonumber ( fields.amount2 ) >= 1 and ( meta : get_string ( " owner " ) == sender : get_player_name ( ) or minetest.get_player_privs ( sender : get_player_name ( ) ) . money_admin ) then
2014-10-28 18:01:32 +01:00
meta : set_string ( " formspec " , " size[8,6;] " ..
" label[0.256,0.0; " .. fields.amount2 .. " " .. fields.nodename2 .. " --> " .. fields.amount1 .. " " .. fields.nodename1 .. " ] " ..
" button[3.1,0.5;2,1;button;Exchange] " ..
" list[current_player;main;0,1.5;8,4;] " )
meta : set_string ( " nodename1 " , fields.nodename1 )
meta : set_string ( " nodename2 " , fields.nodename2 )
meta : set_string ( " amount1 " , fields.amount1 )
meta : set_string ( " amount2 " , fields.amount2 )
meta : set_string ( " infotext " , " Admin Barter Shop " )
meta : set_string ( " form " , " no " )
end
elseif fields [ " button " ] then
local sender_name = sender : get_player_name ( )
local sender_inv = sender : get_inventory ( )
if not sender_inv : contains_item ( " main " , meta : get_string ( " nodename2 " ) .. " " .. meta : get_string ( " amount2 " ) ) then
minetest.chat_send_player ( sender_name , " In your inventory is not enough goods. " )
return
elseif not sender_inv : room_for_item ( " main " , meta : get_string ( " nodename1 " ) .. " " .. meta : get_string ( " amount1 " ) ) then
minetest.chat_send_player ( sender_name , " In your inventory is not enough space. " )
return
end
sender_inv : remove_item ( " main " , meta : get_string ( " nodename2 " ) .. " " .. meta : get_string ( " amount2 " ) )
sender_inv : add_item ( " main " , meta : get_string ( " nodename1 " ) .. " " .. meta : get_string ( " amount1 " ) )
minetest.chat_send_player ( sender_name , " You exchanged " .. meta : get_string ( " amount2 " ) .. " " .. meta : get_string ( " nodename2 " ) .. " on " .. meta : get_string ( " amount1 " ) .. " " .. meta : get_string ( " nodename1 " ) .. " . " )
end
end ,
} )
--End.
minetest.register_alias ( " admin_barter_shop " , " money:admin_barter_shop " )
2015-08-29 20:33:37 +02:00
minetest.log ( " action " , " [Money] Loaded " )