aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README7
-rw-r--r--depends.txt1
-rw-r--r--faregate.lua81
-rw-r--r--init.lua30
4 files changed, 112 insertions, 7 deletions
diff --git a/README b/README
index 2c0edf4..33df7a3 100644
--- a/README
+++ b/README
@@ -1 +1,6 @@
-This mod adds a farebox that emmits a mesecons signal whenever a payment is accepted. \ No newline at end of file
+This mod adds a farebox that emmits a mesecons signal whenever a payment is accepted.
+
+It also adds faregates that open when a payment is received and close
+when they receive a mesecons signal, i.e. from a pressure pad right
+behind them that verifies that the player has passed through the
+faregate. \ No newline at end of file
diff --git a/depends.txt b/depends.txt
index 2768bc1..e8b1ab6 100644
--- a/depends.txt
+++ b/depends.txt
@@ -1,2 +1,3 @@
mesecons
default
+doors
diff --git a/faregate.lua b/faregate.lua
new file mode 100644
index 0000000..a065002
--- /dev/null
+++ b/faregate.lua
@@ -0,0 +1,81 @@
+-- Faregates
+-- Copyright (c) 2017 Gabriel PĂ©rez-Cerezo, see LICENSE file for more details.
+-- Nodeboxes generated with NodeBoxEditor.
+
+minetest.register_node("farebox:faregate", {
+ tiles = {
+ "default_steel_block.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ description = "Faregate",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5, -0.5, -0.4375, -0.4375, 0.5, 0.4375}, -- NodeBox3
+ {0.4375, -0.5, -0.4375, 0.5, 0.5, 0.4375}, -- NodeBox5
+ {-0.4375, -0.5, -0.0625, -0.0625, 0.6875, 0}, -- NodeBox6
+ {0.0625, -0.5, -0.0625, 0.4375, 0.6875, 0}, -- NodeBox7
+ }
+ },
+ mesecons = {
+ effector = {
+ rules = mesecon.rules.default,
+ action_on = function (pos, node)
+ farebox.open_faregate(pos)
+ minetest.after(1, farebox.close_faregate, pos)
+ end,
+ }},
+ 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("main", 32)
+ end,
+ groups = {cracky=3},
+ on_rightclick = function(pos, node, player, itemstack, pointed_thing)
+ farebox.show_formspec(pos, player)
+ end,
+
+})
+
+minetest.register_node("farebox:faregate_open", {
+ tiles = {
+ "default_steel_block.png"
+ },
+ description = "Open Faregate",
+ mesecons = {
+ effector = {
+ rules = mesecon.rules.default,
+ action_on = function (pos, node)
+ farebox.close_faregate(pos)
+ end,
+ }},
+ groups = {not_in_creative_inventory = 1, cracky=3},
+ drawtype = "nodebox",
+ paramtype = "light",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5, -0.5, -0.4375, -0.4375, 0.5, 0.4375}, -- NodeBox3
+ {0.4375, -0.5, -0.4375, 0.5, 0.5, 0.4375}, -- NodeBox5
+ {-0.4375, -0.5, -0.0625, -0.375, 0.6875, 0.3125}, -- NodeBox6
+ {0.375, -0.5, -0.0625, 0.4375, 0.6875, 0.3125}, -- NodeBox7
+ }
+ },
+ drop = "farebox:faregate"
+})
+
+minetest.register_craft({output = "farebox:faregate",
+ recipe = {
+
+
+ {"farebox:farebox", "doors:door_steel"},
+ }
+})
diff --git a/init.lua b/init.lua
index 0a30a37..3b0c84a 100644
--- a/init.lua
+++ b/init.lua
@@ -35,6 +35,17 @@ farebox.rules =
{{x=0, y=-2, z=0},
{x=0, y=2, z=0}}
+function farebox.open_faregate(pos)
+ minetest.swap_node(pos, {name="farebox:faregate_open"})
+ minetest.sound_play("doors_steel_door_open",
+ {pos = pos, gain = 0.3, max_hear_distance = 10})
+end
+function farebox.close_faregate(pos)
+ minetest.swap_node(pos, {name="farebox:faregate"})
+ minetest.sound_play("doors_steel_door_close",
+ {pos = pos, gain = 0.3, max_hear_distance = 10})
+end
+
minetest.register_on_player_receive_fields(function(player, form, pressed)
if string.sub(form,1,string.len("farebox:")) == "farebox:" then
@@ -44,6 +55,7 @@ minetest.register_on_player_receive_fields(function(player, form, pressed)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
local pname = player:get_player_name()
+ local nodename = minetest.get_node(pos).name
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
@@ -59,13 +71,17 @@ minetest.register_on_player_receive_fields(function(player, form, pressed)
minetest.chat_send_player(pname, "Owner's inventory is full")
end
end
- if pressed.open or open then
+ if pressed.open or open then
minetest.chat_send_player(pname, "Payment accepted.")
- mesecon.receptor_on(pos,farebox.rules)
- minetest.after(1, function (_)
- mesecon.receptor_off(pos,farebox.rules)
-
- end)
+ if nodename == "farebox:farebox" then
+ mesecon.receptor_on(pos,farebox.rules)
+ minetest.after(1, function (_)
+ mesecon.receptor_off(pos,farebox.rules)
+
+ end)
+ elseif nodename == "farebox:faregate" then
+ farebox.open_faregate(pos)
+ end
minetest.close_formspec(pname, form)
end
end
@@ -116,3 +132,5 @@ minetest.register_craft({output = "farebox:farebox",
{"group:wood", "mesecons:mesecon", "group:wood"},
}
})
+local modpath = minetest.get_modpath("farebox")
+dofile(modpath .. "/faregate.lua")