diff options
author | Gabriel Pérez-Cerezo <gabriel@gpcf.eu> | 2018-01-25 20:11:01 +0100 |
---|---|---|
committer | Gabriel Pérez-Cerezo <gabriel@gpcf.eu> | 2018-01-25 20:11:01 +0100 |
commit | dee288eed9e16781067b2da39fec32ec1c9a2e84 (patch) | |
tree | b7b0bf6c5c13de48b3f7e4ec4b3072527b443c80 |
First commit
-rw-r--r-- | depends.txt | 3 | ||||
-rw-r--r-- | init.lua | 178 | ||||
-rw-r--r-- | textures/realestate_sign.png | bin | 0 -> 351 bytes | |||
-rw-r--r-- | textures/realestate_sign_back.png | bin | 0 -> 349 bytes |
4 files changed, 181 insertions, 0 deletions
diff --git a/depends.txt b/depends.txt new file mode 100644 index 0000000..3100d6a --- /dev/null +++ b/depends.txt @@ -0,0 +1,3 @@ +areas +atm +default diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..984a905 --- /dev/null +++ b/init.lua @@ -0,0 +1,178 @@ +-- Real Estate mod for minetest +-- Sell your areas! + +realestate = {} + +local function after_place_node(pos, player) + local meta = minetest.get_meta(pos) + local owner = player:get_player_name() + meta:set_string("owner", owner) + meta:set_string("infotext", "Land for sale by "..owner) +end +local playerpos = {} + +local function get_formspec(pos,player) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local name = player:get_player_name() + local id = meta:get_int("id") + local price = meta:get_int("price") + playerpos[name] = pos + local formspec = + "size[8,6]".. + default.gui_bg.. + default.gui_bg_img.. + default.gui_slots.. + "label[2.5,0;Real estate for sale]" .. + "label[0.5,0.5;Your account balance: $".. atm.balance[player:get_player_name()].. "]" .. + "label[0.5,1.5;Area Number: XYZ]" .. + "label[0.5,2;Area Name: XYZ]" .. + "label[0.5,2.5;Area Price: $XYZ]" .. + "button_exit[0.2,5;1,1;Quit;Quit]" .. + "button[4.7,5;3,1;buy;Buy]" + if player:get_player_name() == owner then + if not id then + id = "" + end + if not price then + price = "" + end + formspec = + "size[8,6]".. + default.gui_bg.. + default.gui_bg_img.. + default.gui_slots.. + "label[2.5,0;Real estate for sale]" .. + "field[1,2;2,1;name;Area Number;"..id.."]".. + "field[4,2;2,1;price;Price;"..price.."]".. + "label[2,0.5;Your account balance: $".. atm.balance[player:get_player_name()].. "]" .. + "button_exit[0.2,5;1,1;Quit;Quit]" .. + "button[4.7,5;3,1;sell;Sell]" + minetest.after((0.1), function(gui) + return minetest.show_formspec(player:get_player_name(), "realestate.setup", gui) + end, formspec) + return + end + + if not id and not price then + minetest.chat_send_player(name, "This sale point is unconfigured") + return + end + if not areas.areas[id] then + minetest.chat_send_player(name, "The area no longer exists") + return + end + local formspec = + "size[8,6]".. + default.gui_bg.. + default.gui_bg_img.. + default.gui_slots.. + "label[2.5,0;Real estate for sale]" .. + "label[0.5,0.5;Your account balance: $".. atm.balance[player:get_player_name()].. "]" .. + "label[0.5,1.5;Area Number: "..id.."]" .. + "label[0.5,2;Area Name: "..areas.areas[id].name.."]" .. + "label[0.5,2.5;Area Price: "..price.."]" .. + "button_exit[0.2,5;1,1;Quit;Quit]" .. + "button[4.7,5;3,1;buy;Buy]" + minetest.after((0.1), function(gui) + return minetest.show_formspec(player:get_player_name(), "realestate.sell", gui) + end, formspec) +end +realestate.transfer = function (transfer) + minetest.chat_send_all("FOOOO") + areas.areas[transfer.id].owner = transfer.from + minetest.set_node(transfer.pos,{name="air"}) +end +minetest.register_on_player_receive_fields(function(player, form, pressed) + if form == "realestate.sell" then + if not pressed.buy then + return + end + local name = player:get_player_name() + if not playerpos[name] then + return + end + local meta = minetest.get_meta(playerpos[name]) + local id = meta:get_int("id") + local price = meta:get_int("price") + local owner = meta:get_string("owner") + atm.pending_transfers[name] = {from=name, to = owner, sum = price, desc = "Payment for area "..id, callback=realestate.transfer, extern=true, id=id, pos=playerpos[name]} + atm.showform_wtconf (player, owner, price, "Payment for area "..id) + return + end + if form == "realestate.setup" then + local name = player:get_player_name() + if not playerpos[name] then + return + end + local meta = minetest.get_meta(playerpos[name]) + if pressed.name then + local id = tonumber(pressed.name) + if not id then + minetest.chat_send_player(name, "Invalid area number: \""..pressed.name.."\"") + return + elseif not areas.areas[tonumber(pressed.name)] then + minetest.chat_send_player(name, "No such area with id "..pressed.name) + return + elseif areas.areas[id].owner ~= name then + minetest.chat_send_player(name, "You don't own area "..id) + return + else + minetest.chat_send_player(name, "Selling area ".. areas.areas[id].name) + meta:set_int("id",id) + end + end + if pressed.price then + local price = tonumber(pressed.price) or 15 + meta:set_int("price", price) + end + minetest.close_formspec(name, "realestate.setup") + end +end) + +minetest.register_node("realestate:sale", { + description = "For Sale marker", + tiles = { + "feedlot_milker_top.png", + "feedlot_milker_top.png", + "feedlot_milker_side.png", + "feedlot_milker_side.png", + "feedlot_milker_side.png", + "feedlot_milker_side.png", + }, + paramtype = "light", +-- on_construct = on_construct, + -- can_dig = can_dig, + after_place_node=after_place_node, + groups = {snappy = 3}, + tube = tube +}) + +minetest.register_node("realestate:sign", { + tiles = { + "default_wood.png", + "default_wood.png", + "default_wood.png", + "default_wood.png", + "realestate_sign_back.png", + "realestate_sign.png" + }, + drawtype = "nodebox", + paramtype = "light", + node_box = { + type = "fixed", + fixed = { + {0.4375, -0.5, 0, 0.5, 0.4375, 0.0625}, -- NodeBox1 + {-0.5, 0.375, 0, 0.5, 0.4375, 0.0625}, -- NodeBox2 + {-0.465, -0.2, 0, 0.4, 0.3125, 0.0625}, -- NodeBox3 + {-0.375, 0.3125, 0, -0.3125, 0.375, 0.0625}, -- NodeBox4 + {0.25, 0.3125, 0, 0.3125, 0.4375, 0.0625}, -- NodeBox5 + } + }, + after_place_node=after_place_node, + groups = {snappy = 3}, + on_rightclick = function(pos, node, player, itemstack, pointed_thing) + get_formspec(pos,player) + end, +}) + diff --git a/textures/realestate_sign.png b/textures/realestate_sign.png Binary files differnew file mode 100644 index 0000000..b9b20b8 --- /dev/null +++ b/textures/realestate_sign.png diff --git a/textures/realestate_sign_back.png b/textures/realestate_sign_back.png Binary files differnew file mode 100644 index 0000000..c7901f0 --- /dev/null +++ b/textures/realestate_sign_back.png |