Initial commit.

master
Gabriel Pérez-Cerezo 2017-08-23 00:20:30 +02:00
commit 12b84fe173
No known key found for this signature in database
GPG Key ID: 90422B01A46D0B3E
6 changed files with 129 additions and 0 deletions

15
LICENSE Normal file
View File

@ -0,0 +1,15 @@
ISC License
Copyright (c) 2017 Gabriel Pérez-Cerezo
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.

1
README Normal file
View File

@ -0,0 +1 @@
This mod adds a farebox that emmits a mesecons signal whenever a payment is accepted.

2
depends.txt Normal file
View File

@ -0,0 +1,2 @@
mesecons
default

111
init.lua Normal file
View File

@ -0,0 +1,111 @@
-- Farebox mod
-- adds a box that emmits a mesecons signal when the requested
-- quantity is paid. Ideal to charge admission from visitors to your
-- buildings
farebox = {}
function farebox.show_formspec(pos, player)
local spos = pos.x .. "," ..pos.y .. "," .. pos.z
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
local owner = meta:get_string("owner")
local formspec = ""
if owner and player:get_player_name()==owner then
formspec = "size[8,10]"..
"label[0.5,0.5; Entrance fee:]"..
"list[nodemeta:" .. spos .. ";request;2.5,0.25;1,1;]" ..
"button[6,0.25;2,1;open;Open]"..
"list[nodemeta:" .. spos .. ";main;0,1.5;8,4]"..
"list[current_player;main;0,5.75;8,1;]"..
"list[current_player;main;0,7;8,3;8]"..
"listring[]".. default.get_hotbar_bg(0, 4.25)
else
formspec = "size[8,4]"..
"label[0.5,1.5; Owner Wants:]"..
"item_image_button[2.5,1.25;1,1;"..inv:get_stack("request",1):get_name()..";buy;\n\n\b\b\b\b\b"..inv:get_stack("request",1):get_count() .."]"..
"label[3.5,1.5; (Click on the item to pay)]"..
"listring[]".. default.get_hotbar_bg(0, 4.25)
end
minetest.after((0.1), function(gui)
return minetest.show_formspec(player:get_player_name(), "farebox:"..spos,gui)
end, formspec)
end
farebox.rules =
{{x=0, y=-1, z=0},
{x=0, y=1, z=0}}
minetest.register_on_player_receive_fields(function(player, form, pressed)
if string.sub(form,1,string.len("farebox:")) == "farebox:" then
local spos = string.sub(form,string.len("farebox:")+1,-1)
local pos = minetest.string_to_pos(spos)
local pinv=player:get_inventory()
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
local open = false
if pressed.buy then
if pinv:contains_item("main", inv:get_stack("request",1)) and inv:room_for_item("main", inv:get_stack("request",1)) then
if not (creative and creative.is_enabled_for
and creative.is_enabled_for(player:get_player_name())) then
pinv:remove_item("main", inv:get_stack("request",1))
end
inv:add_item("main", inv:get_stack("request",1))
open = true
elseif not pinv:contains_item("main", inv:get_stack("request",1)) then
minetest.chat_send_player(player:get_player_name(), "You don't have enough items to enter")
elseif not inv:room_for_item("main", inv:get_stack("request",1)) then
minetest.chat_send_player(player:get_player_name(), "Owner's inventory is full")
end
end
if pressed.open or open then
minetest.chat_send_player(player:get_player_name(), "Payment accepted.")
mesecon.receptor_on(pos,farebox.rules)
minetest.after(3, function (_)
mesecon.receptor_off(pos,farebox.rules)
end)
end
end
end)
minetest.register_node("farebox:farebox", {
description = "Farebox",
tiles = {
"farebox_side.png", "farebox_side.png",
"farebox_side.png", "farebox_side.png",
"farebox_side.png", "farebox_front.png"
},
paramtype2 = "facedir",
groups = {cracky=2},
legacy_facedir_simple = true,
is_ground_content = false,
sounds = default.node_sound_stone_defaults(),
mesecons = {receptor = {
state = mesecon.state.off,
rules = farebox.rules
}},
can_dig = can_dig,
after_place_node = function(pos, player, _)
local meta = minetest.get_meta(pos)
local player_name = player:get_player_name()
meta:set_string("owner", player_name)
meta:set_string("infotext", "Owned by "..player_name)
local inv = meta:get_inventory()
inv:set_size("request", 1)
inv:set_size("drop", 1)
inv:set_size("main", 32)
end,
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
farebox.show_formspec(pos, player)
end,
})

BIN
textures/farebox_front.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 B

BIN
textures/farebox_side.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 508 B