From 1761d9e8445d84acc7cc626f63b78928672f669b Mon Sep 17 00:00:00 2001 From: FaceDeer Date: Sat, 18 Jan 2020 17:43:23 -0700 Subject: [PATCH] removing API half, leaving only the market definitions --- default_markets.lua | 528 ------------ doc.lua | 41 - formspecs.lua | 790 ------------------ init.lua | 545 +++++++++++- locale/template.pot | 476 +---------- market.lua | 720 ---------------- mod.conf | 7 +- persistence.lua | 200 ----- readme.md | 88 +- screenshot.jpg | Bin 0 -> 110070 bytes screenshot.png | Bin 77423 -> 0 bytes settingtypes.txt | 17 +- sounds/commoditymarket_error.ogg | Bin 11504 -> 0 bytes sounds/commoditymarket_register_closed.ogg | Bin 25702 -> 0 bytes sounds/commoditymarket_register_opened.ogg | Bin 34242 -> 0 bytes sounds/license.txt | 3 - textures/commoditymarket_caravan_sign.png | Bin 196 -> 194 bytes ...commoditymarket_caravan_sign_inventory.png | Bin 446 -> 444 bytes textures/commoditymarket_clear.png | Bin 539 -> 0 bytes textures/commoditymarket_search.png | Bin 1290 -> 0 bytes textures/commoditymarket_shingles_wood.png | Bin 562 -> 723 bytes textures/license.txt | 1 - 22 files changed, 573 insertions(+), 2843 deletions(-) delete mode 100644 default_markets.lua delete mode 100644 doc.lua delete mode 100644 formspecs.lua delete mode 100644 market.lua delete mode 100644 persistence.lua create mode 100644 screenshot.jpg delete mode 100644 screenshot.png delete mode 100644 sounds/commoditymarket_error.ogg delete mode 100644 sounds/commoditymarket_register_closed.ogg delete mode 100644 sounds/commoditymarket_register_opened.ogg delete mode 100644 sounds/license.txt delete mode 100644 textures/commoditymarket_clear.png delete mode 100644 textures/commoditymarket_search.png diff --git a/default_markets.lua b/default_markets.lua deleted file mode 100644 index 16d2316..0000000 --- a/default_markets.lua +++ /dev/null @@ -1,528 +0,0 @@ -local default_modpath = minetest.get_modpath("default") -if not default_modpath then return end - --- internationalization boilerplate -local MP = minetest.get_modpath(minetest.get_current_modname()) -local S, NS = dofile(MP.."/intllib.lua") - --- Only register gold coins once, if required -local gold_coins_registered = false -local register_gold_coins = function() - if not gold_coins_registered then - minetest.register_craftitem("commoditymarket:gold_coins", { - description = S("Gold Coins"), - _doc_items_longdesc = S("A gold ingot is far too valuable to use as a basic unit of value, so it has become common practice to divide the standard gold bar into one thousand small disks to make trade easier."), - _doc_items_usagehelp = S("Gold coins can be deposited and withdrawn from markets that accept them as currency. These markets can make change if you have a thousand coins and would like them back in ingot form again."), - inventory_image = "commoditymarket_gold_coins.png", - stack_max = 1000, - }) - gold_coins_registered = true - end -end - -local default_items = {"default:axe_bronze","default:axe_diamond","default:axe_mese","default:axe_steel","default:axe_steel","default:axe_stone","default:axe_wood","default:pick_bronze","default:pick_diamond","default:pick_mese","default:pick_steel","default:pick_stone","default:pick_wood","default:shovel_bronze","default:shovel_diamond","default:shovel_mese","default:shovel_steel","default:shovel_stone","default:shovel_wood","default:sword_bronze","default:sword_diamond","default:sword_mese","default:sword_steel","default:sword_stone","default:sword_wood", "default:blueberries", "default:book", "default:bronze_ingot", "default:clay_brick", "default:clay_lump", "default:coal_lump", "default:copper_ingot", "default:copper_lump", "default:diamond", "default:flint", "default:gold_ingot", "default:gold_lump", "default:iron_lump", "default:mese_crystal", "default:mese_crystal_fragment", "default:obsidian_shard", "default:paper", "default:steel_ingot", "default:stick", "default:tin_ingot", "default:tin_lump", "default:acacia_tree", "default:acacia_wood", "default:apple", "default:aspen_tree", "default:aspen_wood", "default:blueberry_bush_sapling", "default:bookshelf", "default:brick", "default:bronzeblock", "default:bush_sapling", "default:cactus", "default:clay", "default:coalblock", "default:cobble", "default:copperblock", "default:desert_cobble", "default:desert_sand", "default:desert_sandstone", "default:desert_sandstone_block", "default:desert_sandstone_brick", "default:desert_stone", "default:desert_stone_block", "default:desert_stonebrick", "default:diamondblock", "default:dirt", "default:glass", "default:goldblock", "default:gravel", "default:ice", "default:junglegrass", "default:junglesapling", "default:jungletree", "default:junglewood", "default:ladder_steel", "default:ladder_wood", "default:large_cactus_seedling", "default:mese", "default:mese_post_light", "default:meselamp", "default:mossycobble", "default:obsidian", "default:obsidian_block", "default:obsidian_glass", "default:obsidianbrick", "default:papyrus", "default:pine_sapling", "default:pine_tree", "default:pine_wood", "default:sand", "default:sandstone", "default:sandstone_block", "default:sandstonebrick", "default:sapling", "default:silver_sand", "default:silver_sandstone", "default:silver_sandstone_block", "default:silver_sandstone_brick", "default:snow", "default:snowblock", "default:steelblock", "default:stone", "default:stone_block", "default:stonebrick", "default:tinblock", "default:tree", "default:wood",} - -local usage_help = S("Right-click on this to open the market interface.") - ------------------------------------------------------------------------------- --- King's Market - -if minetest.settings:get_bool("commoditymarket_enable_kings_market") then - -local kings_def = { - description = S("King's Market"), - long_description = S("The largest and most accessible market for the common man, the King's Market uses gold coins as its medium of exchange (or the equivalent in gold ingots - 1000 coins to the ingot). However, as a respectable institution of the surface world, the King's Market operates only during the hours of daylight. The purchase and sale of swords and explosives is prohibited in the King's Market. Gold coins are represented by a '☼' symbol."), - currency = { - ["default:gold_ingot"] = 1000, - ["commoditymarket:gold_coins"] = 1 - }, - currency_symbol = "☼", -- "\u{263C}" Alchemical symbol for gold - allow_item = function(item) - if item:sub(1,13) == "default:sword" or item:sub(1,4) == "tnt:" then - return false - end - return true - end, - inventory_limit = 100000, - --sell_limit =, -- no sell limit for the King's Market - initial_items = default_items, -} - -register_gold_coins() - -commoditymarket.register_market("kings", kings_def) - -local kings_protect = minetest.settings:get_bool("commoditymarket_protect_kings_market", true) -local on_blast -if kings_protect then - on_blast = function() end -end - -minetest.register_node("commoditymarket:kings_market", { - description = kings_def.description, - _doc_items_longdesc = kings_def.long_description, - _doc_items_usagehelp = usage_help, - tiles = {"default_chest_top.png","default_chest_top.png", - "default_chest_side.png","default_chest_side.png", - "commoditymarket_empty_shelf.png","default_chest_side.png^commoditymarket_crown.png",}, - paramtype2 = "facedir", - is_ground_content = false, - groups = {choppy = 2, oddly_breakable_by_hand = 1,}, - sounds = default.node_sound_wood_defaults(), - on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - local timeofday = minetest.get_timeofday() - if timeofday > 0.2 and timeofday < 0.8 then - commoditymarket.show_market("kings", clicker:get_player_name()) - else - minetest.chat_send_player(clicker:get_player_name(), S("At this time of day the King's Market is closed.")) - minetest.sound_play({name = "commoditymarket_error", gain = 0.1}, {to_player=clicker:get_player_name()}) - end - end, - can_dig = function(pos, player) - return not kings_protect or minetest.check_player_privs(player, "protection_bypass") - end, - on_blast = on_blast, -}) -end -------------------------------------------------------------------------------- --- Night Market - -if minetest.settings:get_bool("commoditymarket_enable_night_market") then -local night_def = { - description = S("Night Market"), - long_description = "When the sun sets and the stalls of the King's Market close, other vendors are just waking up to share their wares. The Night Market is not as voluminous as the King's Market but accepts a wider range of wares. It accepts the same gold coinage of the realm, one thousand coins to the gold ingot.", - currency = { - ["default:gold_ingot"] = 1000, - ["commoditymarket:gold_coins"] = 1 - }, - currency_symbol = "☼", --"\u{263C}" - inventory_limit = 10000, - --sell_limit =, -- no sell limit for the Night Market - initial_items = default_items, - anonymous = true, -} - -register_gold_coins() - -commoditymarket.register_market("night", night_def) - -local night_protect = minetest.settings:get_bool("commoditymarket_protect_night_market", true) -local on_blast -if night_protect then - on_blast = function() end -end - -minetest.register_node("commoditymarket:night_market", { - description = night_def.description, - _doc_items_longdesc = night_def.long_description, - _doc_items_usagehelp = usage_help, - tiles = {"default_chest_top.png","default_chest_top.png", - "default_chest_side.png","default_chest_side.png", - "commoditymarket_empty_shelf.png","default_chest_side.png^commoditymarket_moon.png",}, - paramtype2 = "facedir", - is_ground_content = false, - groups = {choppy = 2, oddly_breakable_by_hand = 1,}, - sounds = default.node_sound_wood_defaults(), - on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - local timeofday = minetest.get_timeofday() - if timeofday < 0.2 or timeofday > 0.8 then - commoditymarket.show_market("night", clicker:get_player_name()) - else - minetest.chat_send_player(clicker:get_player_name(), S("At this time of day the Night Market is closed.")) - minetest.sound_play({name = "commoditymarket_error", gain = 0.1}, {to_player=clicker:get_player_name()}) - end - end, - can_dig = function(pos, player) - return not night_protect or minetest.check_player_privs(player, "protection_bypass") - end, - on_blast = on_blast, -}) -end - -------------------------------------------------------------------------------- -if minetest.settings:get_bool("commoditymarket_enable_caravan_market", true) then --- "Trader's Caravan" - small-capacity market that players can summon - -local time_until_caravan = 120 -- caravan arrives in two minutes -local dwell_time = 600 -- caravan leaves ten minutes after last usage - -local caravan_def = { - description = S("Trader's Caravan"), - long_description = S("Unlike most markets that have well-known fixed locations that travelers congregate to, the network of Trader's Caravans is fluid and dynamic in their locations. A Trader's Caravan can show up anywhere, make modest trades, and then be gone the next time you visit them. These caravans accept gold and gold coins as a currency (one gold ingot to one thousand gold coins exchange rate). Any reasonably-wealthy person can create a signpost marking a location where Trader's Caravans will make a stop."), - currency = { - ["default:gold_ingot"] = 1000, - ["commoditymarket:gold_coins"] = 1 - }, - currency_symbol = "☼", --"\u{263C}" - inventory_limit = 1000, - sell_limit = 1000, - initial_items = default_items, -} - -register_gold_coins() - -minetest.register_craft({ - output = "commoditymarket:caravan_post", - recipe = { - {'group:wood', 'group:wood', ''}, - {'group:wood', "default:gold_ingot", ''}, - {'group:wood', "default:chest_locked", ''}, - } -}) - -commoditymarket.register_market("caravan", caravan_def) - -local create_caravan_def = function(override_table) -local def = { - description = caravan_def.description, - _doc_items_longdesc = caravan_def.long_description, - _doc_items_usagehelp = usage_help, - drawtype = "mesh", - mesh = "commoditymarket_wagon.obj", - tiles = { - { name = "commoditymarket_door_wood.png", backface_culling = true }, -- door - { name = "default_wood.png", backface_culling = true }, -- base wood - { name = "default_fence_rail_wood.png", backface_culling = true }, -- wheel sides - { name = "default_coal_block.png", backface_culling = true }, -- wheel tyre - { name = "commoditymarket_shingles_wood.png", backface_culling = true }, -- roof - { name = "default_junglewood.png", backface_culling = true }, -- corner wood - }, - collision_box = { - type = "fixed", - fixed = { - {-0.75, -0.5, -1.25, 0.75, 1.5, 1.25}, - }, - }, - selection_box = { - type = "fixed", - fixed = { - {-0.75, -0.5, -1.25, 0.75, 1.5, 1.25}, - }, - }, - - paramtype2 = "facedir", - drop = "", - groups = {choppy = 2, oddly_breakable_by_hand = 1, not_in_creative_inventory = 1}, - sounds = default.node_sound_wood_defaults(), - on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - commoditymarket.show_market("caravan", clicker:get_player_name()) - local timer = minetest.get_node_timer(pos) - timer:start(dwell_time) - end, - after_destruct = function(pos, oldnode) - local facedir = oldnode.param2 - local dir = minetest.facedir_to_dir(facedir) - local target = vector.add(pos, vector.multiply(dir,-3)) - local target_node = minetest.get_node(target) - if target_node.name == "commoditymarket:caravan_post" then - local meta = minetest.get_meta(target) - meta:set_string("infotext", S("Right-click to summon a trader's caravan")) - end - end, - on_timer = function(pos, elapsed) - minetest.set_node(pos, {name="air"}) - minetest.sound_play("commoditymarket_register_closed", { - pos = pos, - gain = 1.0, -- default - max_hear_distance = 32, -- default, uses an euclidean metric - }) - end, - } - if override_table then - for k, v in pairs(override_table) do - def[k] = v - end - end - return def -end - --- Create five caravans with different textures, randomly pick which one shows up. -minetest.register_node("commoditymarket:caravan_market_1", create_caravan_def()) -minetest.register_node("commoditymarket:caravan_market_2", create_caravan_def({ -tiles = { - { name = "commoditymarket_door_wood.png^[multiply:#CCCCFF", backface_culling = true }, -- door - { name = "default_acacia_wood.png", backface_culling = true }, -- base wood - { name = "default_fence_rail_wood.png", backface_culling = true }, -- wheel sides - { name = "default_copper_block.png", backface_culling = true }, -- wheel tyre - { name = "commoditymarket_shingles_wood.png^[multiply:#CC8888", backface_culling = true }, -- roof - { name = "default_wood.png", backface_culling = true }, -- corner wood -} -})) -minetest.register_node("commoditymarket:caravan_market_3", create_caravan_def({ -tiles = { - { name = "commoditymarket_door_wood.png", backface_culling = true }, -- door - { name = "default_aspen_wood.png", backface_culling = true }, -- base wood - { name = "default_fence_aspen_wood.png", backface_culling = true }, -- wheel sides - { name = "default_cobble.png", backface_culling = true }, -- wheel tyre - { name = "default_stone_brick.png", backface_culling = true }, -- roof - { name = "default_pine_tree.png", backface_culling = true }, -- corner wood -} -})) -minetest.register_node("commoditymarket:caravan_market_4", create_caravan_def({ -tiles = { - { name = "commoditymarket_door_wood.png", backface_culling = true }, -- door - { name = "default_junglewood.png", backface_culling = true }, -- base wood - { name = "default_fence_rail_junglewood.png", backface_culling = true }, -- wheel sides - { name = "default_obsidian.png", backface_culling = true }, -- wheel tyre - { name = "commoditymarket_shingles_wood.png^[multiply:#88FF88", backface_culling = true }, -- roof - { name = "default_tree.png", backface_culling = true }, -- corner wood -} -})) -minetest.register_node("commoditymarket:caravan_market_5", create_caravan_def({ -tiles = { - { name = "commoditymarket_door_wood.png", backface_culling = true }, -- door - { name = "default_pine_wood.png", backface_culling = true }, -- base wood - { name = "default_chest_lock.png", backface_culling = true }, -- wheel sides - { name = "default_chest_top.png", backface_culling = true }, -- wheel tyre - { name = "default_furnace_top.png", backface_culling = true }, -- roof - { name = "default_wood.png", backface_culling = true }, -- corner wood -} -})) - -local caravan_protect = minetest.settings:get_bool("commoditymarket_protect_caravan_market", true) -local on_blast -if caravan_protect then - on_blast = function() end -end - --- This one doesn't delete itself, server admins can place a permanent instance of it that way. Maybe inside towns next to bigger stationary markets. -minetest.register_node("commoditymarket:caravan_market_permanent", { - description = caravan_def.description, - _doc_items_longdesc = caravan_def.long_description, - _doc_items_usagehelp = usage_help, - drawtype = "mesh", - mesh = "commoditymarket_wagon.obj", - tiles = { - { name = "commoditymarket_door_wood.png", backface_culling = true }, -- door - { name = "default_wood.png", backface_culling = true }, -- base wood - { name = "default_fence_rail_wood.png", backface_culling = true }, -- wheel sides - { name = "default_coal_block.png", backface_culling = true }, -- wheel tyre - { name = "commoditymarket_shingles_wood.png", backface_culling = true }, -- roof - { name = "default_junglewood.png", backface_culling = true }, -- corner wood - }, - collision_box = { - type = "fixed", - fixed = { - {-0.75, -0.5, -1.25, 0.75, 1.5, 1.25}, - }, - }, - selection_box = { - type = "fixed", - fixed = { - {-0.75, -0.5, -1.25, 0.75, 1.5, 1.25}, - }, - }, - - paramtype2 = "facedir", - is_ground_content = false, - groups = {choppy = 2, oddly_breakable_by_hand = 1,}, - sounds = default.node_sound_wood_defaults(), - on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - commoditymarket.show_market("caravan", clicker:get_player_name()) - end, - can_dig = function(pos, player) - return not caravan_protect or minetest.check_player_privs(player, "protection_bypass") - end, - on_blast = on_blast, -}) - --- is a 5x3 area centered around pos clear of obstruction and has usable ground? -local is_suitable_caravan_space = function(pos, facedir) - local x_dim = 2 - local z_dim = 2 - local dir = minetest.facedir_to_dir(facedir) - if dir.x ~= 0 then - z_dim = 1 - elseif dir.z ~= 0 then - x_dim = 1 - end - - -- walkable ground? - for x = pos.x - x_dim, pos.x + x_dim, 1 do - for z = pos.z - z_dim, pos.z + z_dim, 1 do - local node = minetest.get_node({x=x, y=pos.y-1, z=z}) - local node_def = minetest.registered_nodes[node.name] - if node_def == nil or node_def.walkable ~= true then return false end - end - end - -- buildable_to in the rest? - for y = pos.y, pos.y+2, 1 do - for x = pos.x - x_dim, pos.x + x_dim, 1 do - for z = pos.z - z_dim, pos.z + z_dim, 1 do - local node = minetest.get_node({x=x, y=y, z=z}) - local node_def = minetest.registered_nodes[node.name] - if node_def == nil or node_def.buildable_to ~= true then return false end - end - end - end - return true -end - -minetest.register_node("commoditymarket:caravan_post", { - description = S("Trading Post"), - _long_items_longdesc = S("This post signals passing caravan traders that customers can be found here, and signals to customers that caravan traders can be found here. If no caravan is present, right-click to summon one."), - _doc_items_usagehelp = S("The trader's caravan requires a suitable open space next to the trading post for it to arrive, and takes some time to arrive after being summoned. The post gives a countdown to the caravan's arrival when moused over."), - tiles = {"commoditymarket_sign.png^[transformR90", "commoditymarket_sign.png^[transformR270", - "commoditymarket_sign.png^commoditymarket_caravan_sign.png", "commoditymarket_sign.png^commoditymarket_caravan_sign.png^[transformFX", - "commoditymarket_sign_post.png", "commoditymarket_sign_post.png"}, - groups = {choppy = 2, oddly_breakable_by_hand = 1,}, - sounds = default.node_sound_wood_defaults(), - inventory_image = "commoditymarket_caravan_sign_inventory.png", - paramtype= "light", - paramtype2 = "facedir", - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - {-0.125,-0.5,-0.5,0.125,2.0625,-0.25}, - {-0.0625,1.4375,-0.25,0.0625,2.0,0.5}, - }, - }, - on_construct = function(pos) - local timer = minetest.get_node_timer(pos) - timer:start(1.0) - end, - on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - local timer = minetest.get_node_timer(pos) - timer:start(1.0) - end, - on_timer = function(pos, elapsed) - local node = minetest.get_node(pos) - local meta = minetest.get_meta(pos) - if node.name ~= "commoditymarket:caravan_post" then - return -- the node was removed - end - local facedir = node.param2 - local dir = minetest.facedir_to_dir(facedir) - local target = vector.add(pos, vector.multiply(dir,3)) - - local target_node = minetest.get_node(target) - - if target_node.name:sub(1,string.len("commoditymarket:caravan_market")) == "commoditymarket:caravan_market" then - -- It's already here somehow, shut down timer. - meta:set_string("infotext", "") - meta:set_float("wait_time", 0) - return - end - - local is_suitable_space = is_suitable_caravan_space(target, facedir) - - if not is_suitable_space then - meta:set_string("infotext", S("Indicated parking area isn't suitable.\nA 5x3 open space with solid ground\nis required for a caravan.")) - meta:set_float("wait_time", 0) - local timer = minetest.get_node_timer(pos) - timer:start(1.0) - return - end - - local wait_time = (meta:get_float("wait_time") or 0) + elapsed - meta:set_float("wait_time", wait_time) - if wait_time < time_until_caravan then - meta:set_string("infotext", S("Caravan summoned\nETA: @1 seconds.", math.floor(time_until_caravan - wait_time))) - local timer = minetest.get_node_timer(pos) - timer:start(1.0) - return - end - - -- spawn the caravan. We've already established that the target pos is clear. - minetest.set_node(target, {name="commoditymarket:caravan_market_"..math.random(1,5), param2=facedir}) - minetest.sound_play("commoditymarket_register_opened", { - pos = target, - gain = 1.0, -- default - max_hear_distance = 32, -- default, uses an euclidean metric - }) - local timer = minetest.get_node_timer(target) - timer:start(dwell_time) - meta:set_string("infotext", "") - meta:set_float("wait_time", 0) - end, -}) -end - -------------------------------------------------------------------------------- --- "Goblin Exchange" -if minetest.settings:get_bool("commoditymarket_enable_goblin_market") then - -local goblin_def = { - description = S("Goblin Exchange"), - long_description = S("One does not usually associate Goblins with the sort of sophistication that running a market requires. Usually one just associates Goblins with savagery and violence. But they understand the principle of tit-for-tat exchange, and if approached correctly they actually respect the concepts of ownership and debt. However, for some peculiar reason they understand this concept in the context of coal lumps. Goblins deal in the standard coal lump as their form of currency, conceptually divided into 100 coal centilumps (though Goblin brokers prefer to \"keep the change\" when giving back actual coal lumps)."), - currency = { - ["default:coal_lump"] = 100 - }, - currency_symbol = "¢", --"\u{00A2}" cent symbol - inventory_limit = 1000, - --sell_limit =, -- no sell limit -} - -commoditymarket.register_market("goblin", goblin_def) - -local goblin_protect = minetest.settings:get_bool("commoditymarket_protect_goblin_market", true) -local on_blast -if goblin_protect then - on_blast = function() end -end - -minetest.register_node("commoditymarket:goblin_market", { - description = goblin_def.description, - _doc_items_longdesc = goblin_def.long_description, - _doc_items_usagehelp = usage_help, - tiles = {"default_chest_top.png^(default_coal_block.png^[opacity:128)","default_chest_top.png^(default_coal_block.png^[opacity:128)", - "default_chest_side.png^(default_coal_block.png^[opacity:128)","default_chest_side.png^(default_coal_block.png^[opacity:128)", - "commoditymarket_empty_shelf.png^(default_coal_block.png^[opacity:128)","default_chest_side.png^(default_coal_block.png^[opacity:128)^commoditymarket_goblin.png",}, - paramtype2 = "facedir", - is_ground_content = false, - groups = {choppy = 2, oddly_breakable_by_hand = 1,}, - sounds = default.node_sound_wood_defaults(), - on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - commoditymarket.show_market("goblin", clicker:get_player_name()) - end, - can_dig = function(pos, player) - return not goblin_protect or minetest.check_player_privs(player, "protection_bypass") - end, - on_blast = on_blast, -}) -end --------------------------------------------------------------------------------- - -if minetest.settings:get_bool("commoditymarket_enable_under_market") then -local undermarket_def = { - description = S("Undermarket"), - long_description = S("Deep in the bowels of the world, below even the goblin-infested warrens and ancient delvings of the dwarves, dark and mysterious beings once dwelled. A few still linger to this day, and facilitate barter for those brave souls willing to travel in their lost realms. The Undermarket uses Mese chips ('₥') as a currency - twenty chips to the Mese fragment. Though traders are loathe to physically break Mese crystals up into units that small, as it renders it useless for other purposes."), - currency = { - ["default:mese"] = 9*9*20, - ["default:mese_crystal"] = 9*20, - ["default:mese_crystal_fragment"] = 20 - }, - currency_symbol = "₥", --"\u{20A5}" mill sign - inventory_limit = 10000, - --sell_limit =, -- no sell limit -} - -commoditymarket.register_market("under", undermarket_def) - -local under_protect = minetest.settings:get_bool("commoditymarket_protect_under_market", true) -local on_blast -if under_protect then - on_blast = function() end -end - -minetest.register_node("commoditymarket:under_market", { - description = undermarket_def.description, - _doc_items_longdesc = undermarket_def.long_description, - _doc_items_usagehelp = usage_help, - tiles = {"commoditymarket_under_top.png","commoditymarket_under_top.png", - "commoditymarket_under.png","commoditymarket_under.png","commoditymarket_under.png","commoditymarket_under.png"}, - paramtype2 = "facedir", - is_ground_content = false, - groups = {choppy = 2, oddly_breakable_by_hand = 1,}, - sounds = default.node_sound_stone_defaults(), - on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - commoditymarket.show_market("under", clicker:get_player_name()) - end, - can_dig = function(pos, player) - return not under_protect or minetest.check_player_privs(player, "protection_bypass") - end, - on_blast = on_blast, -}) -end ------------------------------------------------------------------- diff --git a/doc.lua b/doc.lua deleted file mode 100644 index 7fa24db..0000000 --- a/doc.lua +++ /dev/null @@ -1,41 +0,0 @@ -if not minetest.get_modpath("doc") then - return -end - --- internationalization boilerplate -local MP = minetest.get_modpath(minetest.get_current_modname()) -local S, NS = dofile(MP.."/intllib.lua") - -doc.add_category("commoditymarket", -{ - name = S("Commodity Markets"), - description = S("Game-wide marketplaces where goods can be bought and sold at prices of your choice."), - build_formspec = doc.entry_builders.text_and_gallery, -}) - -doc.add_entry("commoditymarket", "ui_inventory", { - name = S("User Interface: Inventory"), - data = { text = -S("Each player's account has an inventory that serves as a holding area for items that are destined to be sold or that have been bought by the player but not yet retrieved. This inventory is a bit different from the standard Minetest inventory in that it doesn't hold item \"stacks\", it just tracks the total number of that item present. Some markets allow for extremely large quantities of an item to be stored here for sale." -.."\n\n".. -"To add an item to your market inventory for eventual sale either shift-click on the item in your player inventory or drag the item stack to the inventory slot below the main market inventory list. Some markets may have restrictions on what items can be bought and sold, if an item is not valid for that market it won't go into the market's inventory. Some items are considered \"currency\" and will add to your account's currency balance instead of being listed in your market inventory." -.."\n\n".. -"Tools cannot be added to the market inventory if they have any wear on them. The market also can't handle items with attached metadata such as books that have had text added to them." -.."\n\n".. -"To remove an item from your market inventory, double-click in it in the market inventory list. As much of the item as can fit into your player inventory will be transferred to you, with any remainder staying behind in the market inventory. To withdraw currency from your market balance type the amount you'd like to withdraw in the field next to the \"Withdraw\" button. The currency will be converted into items and added to your player inventory, with whatever cannot be converted remaining behind in your market balance.") -}}) - -doc.add_entry("commoditymarket", "ui_orders", { - name = S("User Interface: Orders"), - data = { text = -S( -"At the core of how a market operates are \"buy\" and \"sell\" orders. A buy order is an announcement to the world that you are interested in purchasing a certain quantity of item and are willing to pay a certain amount of currency in exchange for each unit of that item. Conversely, a sell order is an announcement to the world that you are interested in selling a certain quantity of item and will accept a certain amount of currency in exchange for each unit of that item." -.."\n\n".. -"The market price of an item is determined by where the existing buy and sell orders for that item intersect. When you offer to buy an item for a price that someone is offering to sell it at, the item is transferred to you and currency is transferred from your account to theirs to cover the cost. The market will keep track of the most recent price that an item was successfully sold for, but note that this information is for historical interest only - there's no guarantee that anyone is currently willing to match the historical price." -.."\n\n".. -"When an item is selected in the upper list, the currently existing buy and sell orders for that item will be displayed in the lower list. Sell orders are listed first in descending price, followed by buy orders in ascending price. The current market price will be somewhere in between the lowest sell order and the highest buy order. If you wish to cancel a buy or sell order that you've placed for an item, double-click on the order and the item or currency that you put into that order will be returned to your inventory." -.."\n\n".. -"If you place a buy order and there are already sell orders for the item that meet or are below your price, some or all of your buy order might be immediately fulfilled. Your purchases will be made at the price that the sell orders have been set to - if you were willing to pay 15 units of currency per item but someone was already offering to sell for 2 units of currency per item, you only pay 2 units for each of that offer's items. If there aren't enough compatible sell orders to fulfill your buy order, the remainder will be placed into the market and made available for future sellers to see and fulfill if they agree to your price. Your buy order will immediately deduct the currency required for it from your account's balance, but if you cancel your order you will get that currency back - it's not gone until the order is actually fulfilled." -.."\n\n".. -"If you place a sell order and there are already buy orders that meet or exceed your price, some or all of your sell order may be immediately fulfilled. You'll be paid the price that the buyers are offering rather than the amount you're demanding. If any of your sell offer is left unfulfilled, the sell order will be added to the market for future buyers to see. The items for this offer will be immediately taken from your market inventory but if you cancel your order you will get those items back.") -}}) \ No newline at end of file diff --git a/formspecs.lua b/formspecs.lua deleted file mode 100644 index e3b40a3..0000000 --- a/formspecs.lua +++ /dev/null @@ -1,790 +0,0 @@ --- internationalization boilerplate -local MP = minetest.get_modpath(minetest.get_current_modname()) -local S, NS = dofile(MP.."/intllib.lua") - -local truncate_item_names_to = 30 - --- Large textures can screw with the formspecs. --- See https://github.com/minetest/minetest/issues/9300 for a feature request that would simplify and improve icon generation, if supported. --- In the meantime, here's some methods for overriding item icons to manually work around this: -local override_item_icon = {} -commoditymarket.override_item_icon = function(item_name, new_icon_texture) - override_item_icon[item_name] = new_icon_texture -end -local override_image_icon = {} -commoditymarket.override_image_icon = function(old_icon_texture, new_icon_texture) - override_image_icon[old_icon_texture] = new_icon_texture -end --- And a setting for disabling icons entirely: -local global_enable_item_icons = minetest.settings:get_bool("commoditymarket_enable_item_icons", true) - ---[inventorycube{{{ ---Escaping does not apply here and `^` is replaced by `&` in texture names instead. ---Example: --- [inventorycube{grass.png{dirt.png&grass_side.png{dirt.png&grass_side.png ---Creates an inventorycube with `grass.png`, `dirt.png^grass_side.png` and `dirt.png^grass_side.png` textures -local process_inventory_cube = function(texture_string) - if not texture_string:sub(1,14) == "[inventorycube" then - return texture_string - end - local split = texture_string:split("{") - local left = split[3] -- the "front" of the cube we're seeing in the inventory list - if left == nil then -- in case something weird happens, don't crash. - return texture_string - end - left = left:gsub("&", "^") - return left -end - -local get_icon = function(item) - local def = minetest.registered_items[item] - local returnstring = "unknown_item.png" - if def == nil then - return returnstring - end - - local override = override_item_icon[item] - if override then - return override - end - - local inventory_image = def.inventory_image - if inventory_image and inventory_image ~= "" then - returnstring = inventory_image - else - local tiles = def.tiles - if tiles then - local tilecount = #tiles - -- Textures of node; +Y, -Y, +X, -X, +Z, -Z - local selected_tile = tiles[math.min(5,tilecount)] - if type(selected_tile) == "string" then - returnstring = selected_tile - else - local tile_name = selected_tile.name - if tile_name then - returnstring = tile_name - end - end - end - end - returnstring = process_inventory_cube(returnstring) - - -- Formspec tables can't handle image compositing and modifiers - local found_caret = returnstring:find("%^") - if found_caret then - returnstring = returnstring:sub(1, found_caret-1) - end - - override = override_image_icon[returnstring] - if override then - return override - end - - return minetest.formspec_escape(returnstring) -end --- Exposed so that the purge_unknowns command can use it. -commoditymarket.get_icon = get_icon - - -local truncate_string = function(target, length) - if target:len() > length then - return target:sub(1,length-2).."..." - end - return target -end - -local get_item_description = function(item) - local def = minetest.registered_items[item] - if def then - local description = def.description - if description then - return minetest.formspec_escape(description:gsub("\n", " ")) - end - end - return S("Unknown Item") -end - --- Inventory formspec -------------------------------------------------------------------------------------- - -local inventory_item_comp = function(invitem1, invitem2) return invitem1.item < invitem2.item end -local inventory_desc_comp = function(invitem1, invitem2) return invitem1.description < invitem2.description end - -local get_account_formspec = function(market, account) - local show_itemnames = account.show_itemnames == "true" - local show_icons = global_enable_item_icons and ((account.show_icons or "true") == "true") - local market_def = market.def - - local inventory = {} - local inventory_count = 0 - for item, quantity in pairs(account.inventory) do - local icon - if show_icons then - icon = get_icon(item) - end - table.insert(inventory, {item=item, quantity=quantity, icon=icon, description=get_item_description(item)}) - inventory_count = inventory_count + quantity - end - if show_itemnames then - table.sort(inventory, inventory_item_comp) - else - table.sort(inventory, inventory_desc_comp) - end - - local formspec = { - "size[10,10]" - .."tabheader[0,0;tabs;"..market_def.description..","..S("Your Inventory")..","..S("Market Orders")..";2;false;true]" - } - formspec[#formspec+1] = "tablecolumns[" - - if show_icons then - formspec[#formspec+1] = "image" - for i=1, #inventory, 2 do - formspec[#formspec+1] = ","..i.."="..inventory[i].icon - end - formspec[#formspec+1] = ";" - end - if show_itemnames then - formspec[#formspec+1] = "text;" - end - formspec[#formspec+1] = "text;text,align=center" - if show_icons then - formspec[#formspec+1] = ";image" - for i=2, #inventory, 2 do - formspec[#formspec+1] = ","..i.."="..inventory[i].icon - end - end - if show_itemnames then - formspec[#formspec+1] = ";text" - end - formspec[#formspec+1] = ";text;text,align=center]" - .."tooltip[inventory;"..S("All the items you've transfered to the market to sell and the items you've\npurchased with buy orders. Double-click on an item to bring it back into your\npersonal inventory.").."]" - .."table[0,0;9.75,4;inventory;" - if show_icons then - formspec[#formspec+1] = "0," - end - if show_itemnames then - formspec[#formspec+1] = S("Item").."," - end - formspec[#formspec+1] = S("Description")..","..S("Quantity") - if show_icons then - formspec[#formspec+1] = ",0" - end - if show_itemnames then - formspec[#formspec+1] = ","..S("Item") - end - formspec[#formspec+1] = ","..S("Description")..","..S("Quantity") - - for i, entry in ipairs(inventory) do - if show_icons then - formspec[#formspec+1] = "," .. i - end - if show_itemnames then - formspec[#formspec+1] = "," .. truncate_string(entry.item, truncate_item_names_to) - end - -- no need to formspec_escape description here, it gets done when it's initially added to the inventory table - formspec[#formspec+1] = "," .. entry.description .. "," .. entry.quantity - end - - formspec[#formspec+1] = "]container[1,4.5]list[detached:commoditymarket:" .. market.name .. ";add;0,0;1,1;]" - .."label[1,0;"..S("Drop items here to\nadd to your account").."]" - .."listring[current_player;main]listring[detached:commoditymarket:" .. market.name .. ";add]" - - if market_def.inventory_limit then - formspec[#formspec+1] = "label[3,0;"..S("Inventory limit:").."\n" .. inventory_count.."/" .. market_def.inventory_limit .. "]" - .. "tooltip[3,0;1.5,1;"..S("You can still receive purchased items if you've exceeded your inventory limit,\nbut you won't be able to transfer items from your personal inventory into\nthe market until you've emptied it back down below the limit again.").."]" - end - formspec[#formspec+1] = "label[4.9,0;Balance:\n" .. market_def.currency_symbol .. account.balance .. "]" - .."tooltip[4.9,0;3.5,1;"..S("Enter the amount of currency you'd like to withdraw then click the 'Withdraw'\nbutton to convert it into items and transfer it to your personal inventory.").."]" - .."field[6.1,0.325;1,1;withdrawamount;;]" - .."field_close_on_enter[withdrawamount;false]" - .."button[6.7,0;1.2,1;withdraw;"..S("Withdraw").."]" - .."container_end[]" - .."container[1,5.75]list[current_player;main;0,0;8,1;]" - .."list[current_player;main;0,1.25;8,3;8]container_end[]" - - return table.concat(formspec) -end - - --- Market formspec --------------------------------------------------------------------------------------------------------- - -local compare_market_item = function(mkt1, mkt2) - return mkt1.item < mkt2.item -end -local compare_market_desc = function(mkt1, mkt2) - return get_item_description(mkt1.item) < get_item_description(mkt2.item) -end -local compare_buy_volume = function(mkt1, mkt2) - return mkt1.buy_volume > mkt2.buy_volume -end -local compare_buy_max = function(mkt1, mkt2) - return ((mkt1.buy_orders[#mkt1.buy_orders] or {}).price or -2^30) > ((mkt2.buy_orders[#mkt2.buy_orders] or {}).price or -2^30) -end -local compare_sell_volume = function(mkt1, mkt2) - return mkt1.sell_volume > mkt2.sell_volume -end -local compare_sell_min = function(mkt1, mkt2) - return ((mkt1.sell_orders[#mkt1.sell_orders] or {}).price or 2^31) < ((mkt2.sell_orders[#mkt2.sell_orders] or {}).price or 2^31) -end -local compare_last_price = function(mkt1, mkt2) - return (mkt1.last_price or 2^31) < (mkt2.last_price or 2^31) -end - -local sort_marketlist = function(item_list, account) - -- I think tonumber is now redundant here, leaving it in in case upgrading a world that has text recorded in this field for an existing player account - local sort_by = tonumber(account.sort_markets_by_column) - if sort_by == nil then return end - local show_itemnames = account.show_itemnames == "true" - local show_icons = global_enable_item_icons and ((account.show_icons or "true") == "true") - - local icon_displace = 0 - if show_icons then - icon_displace = 1 - end - local itemname_displace = 0 - if show_itemnames then - itemname_displace = 1 - end - - -- "Icon,Item,Description,#00FF00,Buy Vol,Buy Max,#FF0000,Sell Vol,Sell Min,Last Price" - if sort_by == 1 + icon_displace and show_itemnames then - table.sort(item_list, compare_market_item) - elseif sort_by == 1 + icon_displace + itemname_displace then - table.sort(item_list, compare_market_desc) - elseif sort_by == 3 + icon_displace + itemname_displace then - table.sort(item_list, compare_buy_volume) - elseif sort_by == 4 + icon_displace + itemname_displace then - table.sort(item_list, compare_buy_max) - elseif sort_by == 6 + icon_displace + itemname_displace then - table.sort(item_list, compare_sell_volume) - elseif sort_by == 7 + icon_displace + itemname_displace then - table.sort(item_list, compare_sell_min) - elseif sort_by == 8 + icon_displace + itemname_displace then - table.sort(item_list, compare_last_price) - elseif sort_by == 9 + icon_displace + itemname_displace then - table.sort(item_list, function(mkt1, mkt2) - -- Define locally so that account is available - return (account.inventory[mkt1.item] or 0) > (account.inventory[mkt2.item] or 0) - end) - end -end - -local make_marketlist = function(market, account) - local market_list = {} - local search_filter = account.search or "" - for item, row in pairs(market.orders_for_items) do - if (search_filter == "" or string.find(item, search_filter)) then - if account.filter_participating == "true" then - local found = false - for _, order in ipairs(row.buy_orders) do - if account == order.account then - found = true - break - end - end - if not found then - for _, order in ipairs(row.sell_orders) do - if account == order.account then - found = true - break - end - end - end - if found then - table.insert(market_list, row) - end - else - table.insert(market_list, row) - end - end - end - sort_marketlist(market_list, account) - return market_list -end - -local get_account_name = function(target_account, this_account, anonymous) - if anonymous and target_account ~= this_account then - return "" - end - return target_account.name -end - -local get_market_formspec = function(market, account) - local market_def = market.def - local selected = account.selected - local market_list = make_marketlist(market, account) - local show_itemnames = account.show_itemnames == "true" - local show_icons = global_enable_item_icons and ((account.show_icons or "true") == "true") - local anonymous = market_def.anonymous - - local formspec = { - "size[10,10]" - .."tabheader[0,0;tabs;"..market_def.description..","..S("Your Inventory")..","..S("Market Orders")..";3;false;true]" - } - - -- column definitions - formspec[#formspec+1] = "tablecolumns[" - if show_icons then - formspec[#formspec+1] = "image" -- icon - for i, row in ipairs(market_list) do - formspec[#formspec+1] = "," .. i .. "=" .. get_icon(row.item) - end - formspec[#formspec+1] = ";" - end if show_itemnames then - formspec[#formspec+1] = "text;" -- itemname - end - formspec[#formspec+1] = "text;" -- description - .."color,span=2;" - .."text,align=right,tooltip="..S("Number of items there's demand for in the market.")..";" - .."text,align=right,tooltip="..S("Maximum price being offered to buy one of these.")..";" - .."color,span=2;" - .."text,align=right,tooltip="..S("Number of items available for sale in the market.")..";" - .."text,align=right,tooltip="..S("Minimum price being demanded to sell one of these.")..";" - .."text,align=right,tooltip="..S("Price paid for one of these the last time one was sold.")..";" - .."text,align=right,tooltip="..S("Quantity of this item that you have in your inventory ready to sell.").."]" - .."table[0,0;9.75,5;summary;" - if show_icons then - formspec[#formspec+1] = "0,"-- icon - end - - -- header row - if show_itemnames then - formspec[#formspec+1] = "Item," -- itemname - end - formspec[#formspec+1] = S("Description")..",#00FF00,"..S("Buy Vol")..","..S("Buy Max") - ..",#FF0000,"..S("Sell Vol")..","..S("Sell Min")..","..S("Last Price")..","..S("Inventory") - - local selected_idx - local selected_row - - -- Show list of item market summaries - for i, row in ipairs(market_list) do - if show_icons then - formspec[#formspec+1] = ","..i -- icon - end - - if show_itemnames then - formspec[#formspec+1] = "," .. truncate_string(row.item, truncate_item_names_to) - end - - formspec[#formspec+1] = "," .. get_item_description(row.item) - .. ",#00FF00," - .. row.buy_volume - .. "," .. ((row.buy_orders[#row.buy_orders] or {}).price or "-") - .. ",#FF0000," - .. row.sell_volume - .. "," .. ((row.sell_orders[#row.sell_orders] or {}).price or "-") - .. "," .. (row.last_price or "-") - .. "," .. (account.inventory[row.item] or "-") - - -- we happen to be processing the row that matches the item this player has selected. Record that. - if selected == row.item then - selected_row = row - selected_idx = i + 1 - end - - end - -- a row that's visible is marked as the selected item, so make it selected in the formspec - if selected_row then - formspec[#formspec+1] = ";"..selected_idx - end - formspec[#formspec+1] = "]" - - -- search field - formspec[#formspec+1] = "container[2.5,5]field_close_on_enter[search_filter;false]" - .."field[0,0.85;2.5,1;search_filter;;"..minetest.formspec_escape(account.search or "").."]" - .."image_button[2.05,0.65;0.8,0.8;commoditymarket_search.png;apply_search;]" - .."image_button[2.7,0.65;0.8,0.8;commoditymarket_clear.png;clear_search;]" - .."checkbox[1.77,0;filter_participating;"..S("My orders")..";".. account.filter_participating .."]" - .."tooltip[filter_participating;"..S("Select this to show only the markets where you have either a buy or a sell order pending.").."]" - .."tooltip[search_filter;"..S("Enter substring to search item identifiers for.").."]" - .."tooltip[apply_search;"..S("Apply search to outputs.").."]" - .."tooltip[clear_search;"..S("Clear search.").."]" - .."container_end[]" - - -- if a visible item market is selected, show the orders for it in detail - if selected_row then - local current_time = minetest.get_gametime() - - local desc_display - if show_itemnames then - desc_display = selected - else - local def = minetest.registered_items[selected_row.item] or {description=S("Unknown Item")} - desc_display = minetest.formspec_escape(def.description:gsub("\n", " ")) - end - - -- player inventory for this item and for currency - formspec[#formspec+1] = "label[0.1,5.1;"..desc_display.."\n"..S("In inventory:").." " - .. tostring(account.inventory[selected] or 0) .."\n"..S("Balance:").." "..market_def.currency_symbol..account.balance .."]" - -- buy/sell controls - .. "container[6.1,5]" - local sell_limit = market_def.sell_limit - if sell_limit then - local total_sell = 0 - for item, orders in pairs(market.orders_for_items) do - for _, order in ipairs(orders.sell_orders) do - if order.account == account then - total_sell = total_sell + order.quantity - end - end - end - formspec[#formspec+1] = "label[0,0;"..S("Sell limit:").." ".. total_sell .. "/" .. sell_limit .."]" - .."tooltip[0,0;2,0.25;"..S("This market limits the total number of items a given seller can have for sale at a time.\nYou have @1 items remaining. Cancel old sell orders to free up space.", sell_limit-total_sell).."]" - end - -- Buy, sell, quantity and price button - formspec[#formspec+1] = "tooltip[0,0.25;3.75,1;"..S("Use these fields to enter buy and sell orders for the selected item.").."]" - .."button[0,0.55;1,1;buy;"..S("Buy").."]field[1.2,0.85;1,1;quantity;"..S("Quantity")..";]" - .."field[2.1,0.85;1,1;price;"..S("Price per")..";]button[2.7,0.55;1,1;sell;Sell]" - .."field_close_on_enter[quantity;false]field_close_on_enter[price;false]" - .."container_end[]" - -- table of buy and sell orders - .."tablecolumns[color;text;" - .."text,align=right,tooltip="..S("The price per item in this order.")..";" - .."text,align=right,tooltip="..S("The total amount of items in this particular order.")..";" - .."text,align=right,tooltip="..S("The total amount of items available at this price accounting for the other orders also currently being offered.")..";" - .."text,tooltip="..S("The name of the player who placed this order.\nDouble-click your own orders to cancel them.")..";" - .."text,align=right,tooltip="..S("How many days ago this order was placed.").."]" - .."table[0,6.5;9.75,3.5;orders;#FFFFFF,"..S("Order")..","..S("Price")..","..S("Quantity")..","..S("Total Volume")..","..S("Player")..","..S("Days Old") - - local sell_volume = selected_row.sell_volume - for i, sell in ipairs(selected_row.sell_orders) do - formspec[#formspec+1] = ",#FF0000,"..S("Sell").."," - ..sell.price.."," - ..sell.quantity.."," - ..sell_volume.."," - ..get_account_name(sell.account, account, anonymous).."," - ..math.floor((current_time-sell.timestamp)/86400) - sell_volume = sell_volume - sell.quantity - end - local buy_volume = 0 - local buy_orders = selected_row.buy_orders - local buy_count = #buy_orders - -- Show buy orders in reverse order - for i = buy_count, 1, -1 do - local buy = buy_orders[i] - buy_volume = buy_volume + buy.quantity - formspec[#formspec+1] = ",#00FF00,"..S("Buy").."," - ..buy.price.."," - ..buy.quantity.."," - ..buy_volume.."," - ..get_account_name(buy.account, account, anonymous).."," - ..math.floor((current_time-buy.timestamp)/86400) - end - formspec[#formspec+1] = "]" - else - formspec[#formspec+1] = "label[0.1,5.1;"..S("Select an item to view or place orders.").."]" - end - - return table.concat(formspec) -end - -------------------------------------------------------------------------------------- --- Information formspec - ---{item=item, quantity=quantity, price=price, purchaser=purchaser, seller=seller, timestamp = minetest.get_gametime()} -local log_to_string = function(market, log_entry, account) - local anonymous = market.def.anonymous - local purchaser = log_entry.purchaser - local seller = log_entry.seller - local purchaser_name - if purchaser == seller then - purchaser_name = S("yourself") - elseif anonymous and purchaser ~= account then - purchaser_name = S("someone") - elseif purchaser == account then - purchaser_name = S("you") - else - purchaser_name = purchaser.name - end - local seller_name - if anonymous and seller ~= account then - seller_name = S("someone") - elseif seller == account then - seller_name = S("you") - else - seller_name = seller.name - end - local colour - local new - local last_acknowledged = account.last_acknowledged or 0 - if log_entry.timestamp > last_acknowledged then - colour = "#FFFF00" - new = true - else - colour = "#FFFFFF" - new = false - end - local show_itemnames = account.show_itemnames == "true" - local itemname = log_entry.item - if not show_itemnames then - local item_def = minetest.registered_items[log_entry.item] - if item_def then - itemname = minetest.formspec_escape(item_def.description:gsub("\n", " ")) - end - end - - return colour .. S("On day @1 @2 sold @3 @4 to @5 at @6@7 each for a total of @6@8.", - math.ceil(log_entry.timestamp/86400), seller_name, log_entry.quantity, itemname, - purchaser_name, market.def.currency_symbol, log_entry.price, log_entry.quantity*log_entry.price), new -end - - -local get_info_formspec = function(market, account) - local formspec = { - "size[10,10]" - .."tabheader[0,0;tabs;"..market.def.description..","..S("Your Inventory")..","..S("Market Orders")..";1;false;true]" - .."textarea[0.75,0.5;9.25,1.5;;"..S("Description:")..";"..market.def.long_description.."]" - .."label[0.5,2.2;"..S("Your Recent Purchases and Sales:").."]" - .."textlist[0.5,2.6;8.75,4;log_entries;" - } - if next(account.log) then - local new = false - for _, log_entry in ipairs(account.log) do - local log_string, new_log = log_to_string(market, log_entry, account) - new = new or new_log - formspec[#formspec+1] = log_string - formspec[#formspec+1] = "," - end - formspec[#formspec] = "]" -- Note: there's no +1 here deliberately, that way the "]" overwrites the last comma added by the loop above. - if new then - formspec[#formspec+1] = "button[7.1,6.9;2,0.5;acknowledge_log;"..S("Mark logs as read").."]" .. - "tooltip[acknowledge_log;"..S("Log entries in yellow are new since last time you marked your log as read.").."]" - end - else - formspec[#formspec+1] = "#CCCCCC"..S("No logged activites in this market yet.").."]" - end - local show_itemnames = account.show_itemnames or "false" - - formspec[#formspec+1] = "]container[0.5, 7.5]label[0,0;Settings:]checkbox[0,0.25;show_itemnames;"..S("Show Itemnames")..";" - ..show_itemnames.."]" - if global_enable_item_icons then - local show_icons = account.show_icons or "true" - formspec[#formspec+1] = "checkbox[2,0.25;show_icons;"..S("Show Icons")..";"..show_icons.."]" - end - formspec[#formspec+1] = "container_end[]" - - return table.concat(formspec) -end - ---------------------------------------------------------------------------------------- - -commoditymarket.get_formspec = function(market, account) - local tab = account.tab - if tab == 1 then - return get_info_formspec(market, account) - elseif tab == 2 then - return get_account_formspec(market, account) - else - return get_market_formspec(market, account) - end -end - - ------------------------------------------------------------------------------------- --- Handling recieve_fields - -local add_to_player_inventory = function(name, item, amount) - local playerinv = minetest.get_inventory({type="player", name=name}) - local not_full = true - while amount > 0 and not_full do - local stack = ItemStack(item .. " " .. amount) - amount = amount - stack:get_count() - local leftover = playerinv:add_item("main", stack) - if leftover:get_count() > 0 then - amount = amount + leftover:get_count() - return amount - end - end - return amount -end - -minetest.register_on_player_receive_fields(function(player, formname, fields) - local formname_split = formname:split(":") - - if formname_split[1] ~= "commoditymarket" then - return false - end - local market = commoditymarket.registered_markets[formname_split[2]] - if not market then - return false - end - - local name = formname_split[3] - if name ~= player:get_player_name() then - return false - end - - local account = market:get_account(name) - local show_icons = global_enable_item_icons and ((account.show_icons or "true") == "true") - - local something_changed = false - if fields.tabs then - account.tab = tonumber(fields.tabs) - something_changed = true - end - -- player clicked on an item in the market summary table - if fields.summary then - local summaryevent = minetest.explode_table_event(fields.summary) - if summaryevent.type == "DCL" or summaryevent.type == "CHG" then - if summaryevent.row == 1 then - -- header clicked, sort by column - local column = tonumber(summaryevent.column) - if not (column == 1 and show_icons) then -- ignore clicks on the icon column header - account.sort_markets_by_column = column - end - else - -- item clicked, recreate the list to find out which one - local marketlist = make_marketlist(market, account) - local selected = marketlist[summaryevent.row-1] - if selected then - account.selected = selected.item - end - end - elseif summaryevent.type == "INV" then - account.selected = nil - end - something_changed = true - end - if fields.orders then - local ordersevent = minetest.explode_table_event(fields.orders) - if ordersevent.type == "DCL" and ordersevent.column > 0 then - local selected_idx = ordersevent.row - 1 -- account for header - local selected_row = market.orders_for_items[account.selected] -- sell orders come first - local sell_orders = selected_row.sell_orders - local sell_order_count = #sell_orders - local selected_order - if selected_idx <= sell_order_count then -- if the index is within the range of sell orders, - selected_order = sell_orders[selected_idx] - if selected_order and selected_order.account == account then -- and the order belongs to the current player, - market:cancel_sell(account.selected, selected_order) -- cancel it - something_changed = true - end - else - -- otherwise we're in the buy group, shift the index up by sell_order_count and reverse index order - local buy_orders = selected_row.buy_orders - local buy_orders_count = #buy_orders - selected_order = buy_orders[buy_orders_count - (selected_idx - sell_order_count - 1)] - if selected_order and selected_order.account == account then - market:cancel_buy(account.selected, selected_order) - something_changed = true - end - end - end - end - - if fields.buy then - local quantity = tonumber(fields.quantity) - local price = tonumber(fields.price) - if price ~= nil and quantity ~= nil then - market:buy(name, account.selected, quantity, price) - something_changed = true - end - end - if fields.sell then - local quantity = tonumber(fields.quantity) - local price = tonumber(fields.price) - if price ~= nil and quantity ~= nil then - market:sell(name, account.selected, quantity, price) - something_changed = true - end - end - - -- player clicked in their inventory table, may need to give him his stuff back - if fields.inventory then - local invevent = minetest.explode_table_event(fields.inventory) - if invevent.type == "DCL" and invevent.column > 0 then - local col_count = 8 - local show_itemnames = account.show_itemnames == "true" - if not show_itemnames then - col_count = col_count - 2 - end - if not show_icons then - col_count = col_count - 2 - end - local index = math.floor(((invevent.row-1)*col_count + invevent.column - 1)/(col_count/2)) - 1 - local account = market:get_account(name) - -- build a local copy of the inventory that would be displayed in the formspec so we can - -- figure out what item the index we were given is pointing to - local inventory = {} - for item, quantity in pairs(account.inventory) do - table.insert(inventory, {item=item, quantity=quantity, description=get_item_description(item)}) - end - if show_itemnames then - table.sort(inventory, inventory_item_comp) - else - table.sort(inventory, inventory_desc_comp) - end - if inventory[index] then - local item = inventory[index].item - local amount = account.inventory[item] - local remaining = add_to_player_inventory(name, item, amount) - if remaining == 0 then - account.inventory[item] = nil - else - account.inventory[item] = remaining - end - if remaining ~= amount then - something_changed = true - end - end - end - end - - if fields.withdraw or fields.key_enter_field == "withdrawamount" then - local withdrawvalue = tonumber(fields.withdrawamount) - if withdrawvalue then - local account = market:get_account(name) - withdrawvalue = math.min(withdrawvalue, account.balance) - for _, currency in ipairs(market.def.currency_ordered) do - this_unit_amount = math.floor(withdrawvalue/currency.amount) - if this_unit_amount > 0 then - local remaining = add_to_player_inventory(name, currency.item, this_unit_amount) - local value_given = (this_unit_amount - remaining) * currency.amount - account.balance = account.balance - value_given - withdrawvalue = withdrawvalue - value_given - something_changed = true - end - end - end - end - - if fields.search_filter then - local value = string.lower(fields.search_filter) - if account.search ~= value then - account.search = value - end - end - - local process_checkbox = function(property_name, fields, account) - if (fields[property_name] == "true" and account[property_name] ~= "true") or - (fields[property_name] == "false" and account[property_name] ~= "false") then - account[property_name] = fields[property_name] - return true - end - return false - end - - if process_checkbox("filter_participating", fields, account) then something_changed = true end - if process_checkbox("show_itemnames", fields, account) then something_changed = true end - if process_checkbox("show_icons", fields, account) then something_changed = true end - - if fields.acknowledge_log then - account.last_acknowledged = minetest.get_gametime() - something_changed = true - end - - if fields.apply_search or fields.key_enter_field == "search_filter" then - something_changed = true - end - - if fields.clear_search then - account.search = "" - something_changed = true - end - if something_changed then - minetest.show_formspec(name, formname, market:get_formspec(account)) - end -end) diff --git a/init.lua b/init.lua index 8e8098c..fca29b8 100644 --- a/init.lua +++ b/init.lua @@ -1,10 +1,541 @@ -commoditymarket = {} +local modpath = minetest.get_modpath(minetest.get_current_modname()) -local MP = minetest.get_modpath(minetest.get_current_modname()) -dofile(MP.."/formspecs.lua") -dofile(MP.."/market.lua") -dofile(MP.."/doc.lua") +minetest.register_alias("commoditymarket:kings_market", "commoditymarket_fantasy:kings_market") +minetest.register_alias("commoditymarket:gold_coins", "commoditymarket_fantasy:gold_coins") +minetest.register_alias("commoditymarket:night_market", "commoditymarket_fantasy:night_market") +minetest.register_alias("commoditymarket:goblin_market", "commoditymarket_fantasy:goblin_market") +minetest.register_alias("commoditymarket:under_market", "commoditymarket_fantasy:under_market") +minetest.register_alias("commoditymarket:caravan_post", "commoditymarket_fantasy:caravan_post") +minetest.register_alias("commoditymarket:caravan_market_1", "commoditymarket_fantasy:caravan_market_1") +minetest.register_alias("commoditymarket:caravan_market_2", "commoditymarket_fantasy:caravan_market_2") +minetest.register_alias("commoditymarket:caravan_market_3", "commoditymarket_fantasy:caravan_market_3") +minetest.register_alias("commoditymarket:caravan_market_4", "commoditymarket_fantasy:caravan_market_4") +minetest.register_alias("commoditymarket:caravan_market_5", "commoditymarket_fantasy:caravan_market_5") +minetest.register_alias("commoditymarket:caravan_market_permanent", "commoditymarket_fantasy:caravan_market_permanent") -dofile(MP.."/default_markets.lua") -dofile(MP.."/mapgen_dungeon_markets.lua") +-- internationalization boilerplate +local S, NS = dofile(modpath.."/intllib.lua") +dofile(modpath.."/mapgen_dungeon_markets.lua") + +-- Only register gold coins once, if required +local gold_coins_registered = false +local register_gold_coins = function() + if not gold_coins_registered then + minetest.register_craftitem("commoditymarket_fantasy:gold_coins", { + description = S("Gold Coins"), + _doc_items_longdesc = S("A gold ingot is far too valuable to use as a basic unit of value, so it has become common practice to divide the standard gold bar into one thousand small disks to make trade easier."), + _doc_items_usagehelp = S("Gold coins can be deposited and withdrawn from markets that accept them as currency. These markets can make change if you have a thousand coins and would like them back in ingot form again."), + inventory_image = "commoditymarket_gold_coins.png", + stack_max = 1000, + }) + gold_coins_registered = true + end +end + +local default_items = {"default:axe_bronze","default:axe_diamond","default:axe_mese","default:axe_steel","default:axe_steel","default:axe_stone","default:axe_wood","default:pick_bronze","default:pick_diamond","default:pick_mese","default:pick_steel","default:pick_stone","default:pick_wood","default:shovel_bronze","default:shovel_diamond","default:shovel_mese","default:shovel_steel","default:shovel_stone","default:shovel_wood","default:sword_bronze","default:sword_diamond","default:sword_mese","default:sword_steel","default:sword_stone","default:sword_wood", "default:blueberries", "default:book", "default:bronze_ingot", "default:clay_brick", "default:clay_lump", "default:coal_lump", "default:copper_ingot", "default:copper_lump", "default:diamond", "default:flint", "default:gold_ingot", "default:gold_lump", "default:iron_lump", "default:mese_crystal", "default:mese_crystal_fragment", "default:obsidian_shard", "default:paper", "default:steel_ingot", "default:stick", "default:tin_ingot", "default:tin_lump", "default:acacia_tree", "default:acacia_wood", "default:apple", "default:aspen_tree", "default:aspen_wood", "default:blueberry_bush_sapling", "default:bookshelf", "default:brick", "default:bronzeblock", "default:bush_sapling", "default:cactus", "default:clay", "default:coalblock", "default:cobble", "default:copperblock", "default:desert_cobble", "default:desert_sand", "default:desert_sandstone", "default:desert_sandstone_block", "default:desert_sandstone_brick", "default:desert_stone", "default:desert_stone_block", "default:desert_stonebrick", "default:diamondblock", "default:dirt", "default:glass", "default:goldblock", "default:gravel", "default:ice", "default:junglegrass", "default:junglesapling", "default:jungletree", "default:junglewood", "default:ladder_steel", "default:ladder_wood", "default:large_cactus_seedling", "default:mese", "default:mese_post_light", "default:meselamp", "default:mossycobble", "default:obsidian", "default:obsidian_block", "default:obsidian_glass", "default:obsidianbrick", "default:papyrus", "default:pine_sapling", "default:pine_tree", "default:pine_wood", "default:sand", "default:sandstone", "default:sandstone_block", "default:sandstonebrick", "default:sapling", "default:silver_sand", "default:silver_sandstone", "default:silver_sandstone_block", "default:silver_sandstone_brick", "default:snow", "default:snowblock", "default:steelblock", "default:stone", "default:stone_block", "default:stonebrick", "default:tinblock", "default:tree", "default:wood",} + +local usage_help = S("Right-click on this to open the market interface.") + +------------------------------------------------------------------------------ +-- King's Market + +if minetest.settings:get_bool("commoditymarket_enable_kings_market") then + +local kings_def = { + description = S("King's Market"), + long_description = S("The largest and most accessible market for the common man, the King's Market uses gold coins as its medium of exchange (or the equivalent in gold ingots - 1000 coins to the ingot). However, as a respectable institution of the surface world, the King's Market operates only during the hours of daylight. The purchase and sale of swords and explosives is prohibited in the King's Market. Gold coins are represented by a '☼' symbol."), + currency = { + ["default:gold_ingot"] = 1000, + ["commoditymarket_fantasy:gold_coins"] = 1 + }, + currency_symbol = "☼", -- "\u{263C}" Alchemical symbol for gold + allow_item = function(item) + if item:sub(1,13) == "default:sword" or item:sub(1,4) == "tnt:" then + return false + end + return true + end, + inventory_limit = 100000, + --sell_limit =, -- no sell limit for the King's Market + initial_items = default_items, +} + +register_gold_coins() + +commoditymarket.register_market("kings", kings_def) + +local kings_protect = minetest.settings:get_bool("commoditymarket_protect_kings_market", true) +local on_blast +if kings_protect then + on_blast = function() end +end + +minetest.register_node("commoditymarket_fantasy:kings_market", { + description = kings_def.description, + _doc_items_longdesc = kings_def.long_description, + _doc_items_usagehelp = usage_help, + tiles = {"default_chest_top.png","default_chest_top.png", + "default_chest_side.png","default_chest_side.png", + "commoditymarket_empty_shelf.png","default_chest_side.png^commoditymarket_crown.png",}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {choppy = 2, oddly_breakable_by_hand = 1,}, + sounds = default.node_sound_wood_defaults(), + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + local timeofday = minetest.get_timeofday() + if timeofday > 0.2 and timeofday < 0.8 then + commoditymarket.show_market("kings", clicker:get_player_name()) + else + minetest.chat_send_player(clicker:get_player_name(), S("At this time of day the King's Market is closed.")) + minetest.sound_play({name = "commoditymarket_error", gain = 0.1}, {to_player=clicker:get_player_name()}) + end + end, + can_dig = function(pos, player) + return not kings_protect or minetest.check_player_privs(player, "protection_bypass") + end, + on_blast = on_blast, +}) +end +------------------------------------------------------------------------------- +-- Night Market + +if minetest.settings:get_bool("commoditymarket_enable_night_market") then +local night_def = { + description = S("Night Market"), + long_description = "When the sun sets and the stalls of the King's Market close, other vendors are just waking up to share their wares. The Night Market is not as voluminous as the King's Market but accepts a wider range of wares. It accepts the same gold coinage of the realm, one thousand coins to the gold ingot.", + currency = { + ["default:gold_ingot"] = 1000, + ["commoditymarket_fantasy:gold_coins"] = 1 + }, + currency_symbol = "☼", --"\u{263C}" + inventory_limit = 10000, + --sell_limit =, -- no sell limit for the Night Market + initial_items = default_items, + anonymous = true, +} + +register_gold_coins() + +commoditymarket.register_market("night", night_def) + +local night_protect = minetest.settings:get_bool("commoditymarket_protect_night_market", true) +local on_blast +if night_protect then + on_blast = function() end +end + +minetest.register_node("commoditymarket_fantasy:night_market", { + description = night_def.description, + _doc_items_longdesc = night_def.long_description, + _doc_items_usagehelp = usage_help, + tiles = {"default_chest_top.png","default_chest_top.png", + "default_chest_side.png","default_chest_side.png", + "commoditymarket_empty_shelf.png","default_chest_side.png^commoditymarket_moon.png",}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {choppy = 2, oddly_breakable_by_hand = 1,}, + sounds = default.node_sound_wood_defaults(), + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + local timeofday = minetest.get_timeofday() + if timeofday < 0.2 or timeofday > 0.8 then + commoditymarket.show_market("night", clicker:get_player_name()) + else + minetest.chat_send_player(clicker:get_player_name(), S("At this time of day the Night Market is closed.")) + minetest.sound_play({name = "commoditymarket_error", gain = 0.1}, {to_player=clicker:get_player_name()}) + end + end, + can_dig = function(pos, player) + return not night_protect or minetest.check_player_privs(player, "protection_bypass") + end, + on_blast = on_blast, +}) +end + +------------------------------------------------------------------------------- +if minetest.settings:get_bool("commoditymarket_enable_caravan_market", true) then +-- "Trader's Caravan" - small-capacity market that players can summon + +local time_until_caravan = 120 -- caravan arrives in two minutes +local dwell_time = 600 -- caravan leaves ten minutes after last usage + +local caravan_def = { + description = S("Trader's Caravan"), + long_description = S("Unlike most markets that have well-known fixed locations that travelers congregate to, the network of Trader's Caravans is fluid and dynamic in their locations. A Trader's Caravan can show up anywhere, make modest trades, and then be gone the next time you visit them. These caravans accept gold and gold coins as a currency (one gold ingot to one thousand gold coins exchange rate). Any reasonably-wealthy person can create a signpost marking a location where Trader's Caravans will make a stop."), + currency = { + ["default:gold_ingot"] = 1000, + ["commoditymarket_fantasy:gold_coins"] = 1 + }, + currency_symbol = "☼", --"\u{263C}" + inventory_limit = 1000, + sell_limit = 1000, + initial_items = default_items, +} + +register_gold_coins() + +minetest.register_craft({ + output = "commoditymarket_fantasy:caravan_post", + recipe = { + {'group:wood', 'group:wood', ''}, + {'group:wood', "default:gold_ingot", ''}, + {'group:wood', "default:chest_locked", ''}, + } +}) + +commoditymarket.register_market("caravan", caravan_def) + +local create_caravan_def = function(override_table) +local def = { + description = caravan_def.description, + _doc_items_longdesc = caravan_def.long_description, + _doc_items_usagehelp = usage_help, + drawtype = "mesh", + mesh = "commoditymarket_wagon.obj", + tiles = { + { name = "commoditymarket_door_wood.png", backface_culling = true }, -- door + { name = "default_wood.png", backface_culling = true }, -- base wood + { name = "default_fence_rail_wood.png", backface_culling = true }, -- wheel sides + { name = "default_coal_block.png", backface_culling = true }, -- wheel tyre + { name = "commoditymarket_shingles_wood.png", backface_culling = true }, -- roof + { name = "default_junglewood.png", backface_culling = true }, -- corner wood + }, + collision_box = { + type = "fixed", + fixed = { + {-0.75, -0.5, -1.25, 0.75, 1.5, 1.25}, + }, + }, + selection_box = { + type = "fixed", + fixed = { + {-0.75, -0.5, -1.25, 0.75, 1.5, 1.25}, + }, + }, + + paramtype2 = "facedir", + drop = "", + groups = {choppy = 2, oddly_breakable_by_hand = 1, not_in_creative_inventory = 1}, + sounds = default.node_sound_wood_defaults(), + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + commoditymarket.show_market("caravan", clicker:get_player_name()) + local timer = minetest.get_node_timer(pos) + timer:start(dwell_time) + end, + after_destruct = function(pos, oldnode) + local facedir = oldnode.param2 + local dir = minetest.facedir_to_dir(facedir) + local target = vector.add(pos, vector.multiply(dir,-3)) + local target_node = minetest.get_node(target) + if target_node.name == "commoditymarket_fantasy:caravan_post" then + local meta = minetest.get_meta(target) + meta:set_string("infotext", S("Right-click to summon a trader's caravan")) + end + end, + on_timer = function(pos, elapsed) + minetest.set_node(pos, {name="air"}) + minetest.sound_play("commoditymarket_register_closed", { + pos = pos, + gain = 1.0, -- default + max_hear_distance = 32, -- default, uses an euclidean metric + }) + end, + } + if override_table then + for k, v in pairs(override_table) do + def[k] = v + end + end + return def +end + +-- Create five caravans with different textures, randomly pick which one shows up. +minetest.register_node("commoditymarket_fantasy:caravan_market_1", create_caravan_def()) +minetest.register_node("commoditymarket_fantasy:caravan_market_2", create_caravan_def({ +tiles = { + { name = "commoditymarket_door_wood.png^[multiply:#CCCCFF", backface_culling = true }, -- door + { name = "default_acacia_wood.png", backface_culling = true }, -- base wood + { name = "default_fence_rail_wood.png", backface_culling = true }, -- wheel sides + { name = "default_copper_block.png", backface_culling = true }, -- wheel tyre + { name = "commoditymarket_shingles_wood.png^[multiply:#CC8888", backface_culling = true }, -- roof + { name = "default_wood.png", backface_culling = true }, -- corner wood +} +})) +minetest.register_node("commoditymarket_fantasy:caravan_market_3", create_caravan_def({ +tiles = { + { name = "commoditymarket_door_wood.png", backface_culling = true }, -- door + { name = "default_aspen_wood.png", backface_culling = true }, -- base wood + { name = "default_fence_aspen_wood.png", backface_culling = true }, -- wheel sides + { name = "default_cobble.png", backface_culling = true }, -- wheel tyre + { name = "default_stone_brick.png", backface_culling = true }, -- roof + { name = "default_pine_tree.png", backface_culling = true }, -- corner wood +} +})) +minetest.register_node("commoditymarket_fantasy:caravan_market_4", create_caravan_def({ +tiles = { + { name = "commoditymarket_door_wood.png", backface_culling = true }, -- door + { name = "default_junglewood.png", backface_culling = true }, -- base wood + { name = "default_fence_rail_junglewood.png", backface_culling = true }, -- wheel sides + { name = "default_obsidian.png", backface_culling = true }, -- wheel tyre + { name = "commoditymarket_shingles_wood.png^[multiply:#88FF88", backface_culling = true }, -- roof + { name = "default_tree.png", backface_culling = true }, -- corner wood +} +})) +minetest.register_node("commoditymarket_fantasy:caravan_market_5", create_caravan_def({ +tiles = { + { name = "commoditymarket_door_wood.png", backface_culling = true }, -- door + { name = "default_pine_wood.png", backface_culling = true }, -- base wood + { name = "default_chest_lock.png", backface_culling = true }, -- wheel sides + { name = "default_chest_top.png", backface_culling = true }, -- wheel tyre + { name = "default_furnace_top.png", backface_culling = true }, -- roof + { name = "default_wood.png", backface_culling = true }, -- corner wood +} +})) + +local caravan_protect = minetest.settings:get_bool("commoditymarket_protect_caravan_market", true) +local on_blast +if caravan_protect then + on_blast = function() end +end + +-- This one doesn't delete itself, server admins can place a permanent instance of it that way. Maybe inside towns next to bigger stationary markets. +minetest.register_node("commoditymarket_fantasy:caravan_market_permanent", { + description = caravan_def.description, + _doc_items_longdesc = caravan_def.long_description, + _doc_items_usagehelp = usage_help, + drawtype = "mesh", + mesh = "commoditymarket_wagon.obj", + tiles = { + { name = "commoditymarket_door_wood.png", backface_culling = true }, -- door + { name = "default_wood.png", backface_culling = true }, -- base wood + { name = "default_fence_rail_wood.png", backface_culling = true }, -- wheel sides + { name = "default_coal_block.png", backface_culling = true }, -- wheel tyre + { name = "commoditymarket_shingles_wood.png", backface_culling = true }, -- roof + { name = "default_junglewood.png", backface_culling = true }, -- corner wood + }, + collision_box = { + type = "fixed", + fixed = { + {-0.75, -0.5, -1.25, 0.75, 1.5, 1.25}, + }, + }, + selection_box = { + type = "fixed", + fixed = { + {-0.75, -0.5, -1.25, 0.75, 1.5, 1.25}, + }, + }, + + paramtype2 = "facedir", + is_ground_content = false, + groups = {choppy = 2, oddly_breakable_by_hand = 1,}, + sounds = default.node_sound_wood_defaults(), + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + commoditymarket.show_market("caravan", clicker:get_player_name()) + end, + can_dig = function(pos, player) + return not caravan_protect or minetest.check_player_privs(player, "protection_bypass") + end, + on_blast = on_blast, +}) + +-- is a 5x3 area centered around pos clear of obstruction and has usable ground? +local is_suitable_caravan_space = function(pos, facedir) + local x_dim = 2 + local z_dim = 2 + local dir = minetest.facedir_to_dir(facedir) + if dir.x ~= 0 then + z_dim = 1 + elseif dir.z ~= 0 then + x_dim = 1 + end + + -- walkable ground? + for x = pos.x - x_dim, pos.x + x_dim, 1 do + for z = pos.z - z_dim, pos.z + z_dim, 1 do + local node = minetest.get_node({x=x, y=pos.y-1, z=z}) + local node_def = minetest.registered_nodes[node.name] + if node_def == nil or node_def.walkable ~= true then return false end + end + end + -- buildable_to in the rest? + for y = pos.y, pos.y+2, 1 do + for x = pos.x - x_dim, pos.x + x_dim, 1 do + for z = pos.z - z_dim, pos.z + z_dim, 1 do + local node = minetest.get_node({x=x, y=y, z=z}) + local node_def = minetest.registered_nodes[node.name] + if node_def == nil or node_def.buildable_to ~= true then return false end + end + end + end + return true +end + +minetest.register_node("commoditymarket_fantasy:caravan_post", { + description = S("Trading Post"), + _long_items_longdesc = S("This post signals passing caravan traders that customers can be found here, and signals to customers that caravan traders can be found here. If no caravan is present, right-click to summon one."), + _doc_items_usagehelp = S("The trader's caravan requires a suitable open space next to the trading post for it to arrive, and takes some time to arrive after being summoned. The post gives a countdown to the caravan's arrival when moused over."), + tiles = {"commoditymarket_sign.png^[transformR90", "commoditymarket_sign.png^[transformR270", + "commoditymarket_sign.png^commoditymarket_caravan_sign.png", "commoditymarket_sign.png^commoditymarket_caravan_sign.png^[transformFX", + "commoditymarket_sign_post.png", "commoditymarket_sign_post.png"}, + groups = {choppy = 2, oddly_breakable_by_hand = 1,}, + sounds = default.node_sound_wood_defaults(), + inventory_image = "commoditymarket_caravan_sign_inventory.png", + paramtype= "light", + paramtype2 = "facedir", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.125,-0.5,-0.5,0.125,2.0625,-0.25}, + {-0.0625,1.4375,-0.25,0.0625,2.0,0.5}, + }, + }, + on_construct = function(pos) + local timer = minetest.get_node_timer(pos) + timer:start(1.0) + end, + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + local timer = minetest.get_node_timer(pos) + timer:start(1.0) + end, + on_timer = function(pos, elapsed) + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + if node.name ~= "commoditymarket_fantasy:caravan_post" then + return -- the node was removed + end + local facedir = node.param2 + local dir = minetest.facedir_to_dir(facedir) + local target = vector.add(pos, vector.multiply(dir,3)) + + local target_node = minetest.get_node(target) + + if target_node.name:sub(1,string.len("commoditymarket_fantasy:caravan_market")) == "commoditymarket_fantasy:caravan_market" then + -- It's already here somehow, shut down timer. + meta:set_string("infotext", "") + meta:set_float("wait_time", 0) + return + end + + local is_suitable_space = is_suitable_caravan_space(target, facedir) + + if not is_suitable_space then + meta:set_string("infotext", S("Indicated parking area isn't suitable.\nA 5x3 open space with solid ground\nis required for a caravan.")) + meta:set_float("wait_time", 0) + local timer = minetest.get_node_timer(pos) + timer:start(1.0) + return + end + + local wait_time = (meta:get_float("wait_time") or 0) + elapsed + meta:set_float("wait_time", wait_time) + if wait_time < time_until_caravan then + meta:set_string("infotext", S("Caravan summoned\nETA: @1 seconds.", math.floor(time_until_caravan - wait_time))) + local timer = minetest.get_node_timer(pos) + timer:start(1.0) + return + end + + -- spawn the caravan. We've already established that the target pos is clear. + minetest.set_node(target, {name="commoditymarket_fantasy:caravan_market_"..math.random(1,5), param2=facedir}) + minetest.sound_play("commoditymarket_register_opened", { + pos = target, + gain = 1.0, -- default + max_hear_distance = 32, -- default, uses an euclidean metric + }) + local timer = minetest.get_node_timer(target) + timer:start(dwell_time) + meta:set_string("infotext", "") + meta:set_float("wait_time", 0) + end, +}) +end + +------------------------------------------------------------------------------- +-- "Goblin Exchange" +if minetest.settings:get_bool("commoditymarket_enable_goblin_market") then + +local goblin_def = { + description = S("Goblin Exchange"), + long_description = S("One does not usually associate Goblins with the sort of sophistication that running a market requires. Usually one just associates Goblins with savagery and violence. But they understand the principle of tit-for-tat exchange, and if approached correctly they actually respect the concepts of ownership and debt. However, for some peculiar reason they understand this concept in the context of coal lumps. Goblins deal in the standard coal lump as their form of currency, conceptually divided into 100 coal centilumps (though Goblin brokers prefer to \"keep the change\" when giving back actual coal lumps)."), + currency = { + ["default:coal_lump"] = 100 + }, + currency_symbol = "¢", --"\u{00A2}" cent symbol + inventory_limit = 1000, + --sell_limit =, -- no sell limit +} + +commoditymarket.register_market("goblin", goblin_def) + +local goblin_protect = minetest.settings:get_bool("commoditymarket_protect_goblin_market", true) +local on_blast +if goblin_protect then + on_blast = function() end +end + +minetest.register_node("commoditymarket_fantasy:goblin_market", { + description = goblin_def.description, + _doc_items_longdesc = goblin_def.long_description, + _doc_items_usagehelp = usage_help, + tiles = {"default_chest_top.png^(default_coal_block.png^[opacity:128)","default_chest_top.png^(default_coal_block.png^[opacity:128)", + "default_chest_side.png^(default_coal_block.png^[opacity:128)","default_chest_side.png^(default_coal_block.png^[opacity:128)", + "commoditymarket_empty_shelf.png^(default_coal_block.png^[opacity:128)","default_chest_side.png^(default_coal_block.png^[opacity:128)^commoditymarket_goblin.png",}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {choppy = 2, oddly_breakable_by_hand = 1,}, + sounds = default.node_sound_wood_defaults(), + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + commoditymarket.show_market("goblin", clicker:get_player_name()) + end, + can_dig = function(pos, player) + return not goblin_protect or minetest.check_player_privs(player, "protection_bypass") + end, + on_blast = on_blast, +}) +end +-------------------------------------------------------------------------------- + +if minetest.settings:get_bool("commoditymarket_enable_under_market") then +local undermarket_def = { + description = S("Undermarket"), + long_description = S("Deep in the bowels of the world, below even the goblin-infested warrens and ancient delvings of the dwarves, dark and mysterious beings once dwelled. A few still linger to this day, and facilitate barter for those brave souls willing to travel in their lost realms. The Undermarket uses Mese chips ('₥') as a currency - twenty chips to the Mese fragment. Though traders are loathe to physically break Mese crystals up into units that small, as it renders it useless for other purposes."), + currency = { + ["default:mese"] = 9*9*20, + ["default:mese_crystal"] = 9*20, + ["default:mese_crystal_fragment"] = 20 + }, + currency_symbol = "₥", --"\u{20A5}" mill sign + inventory_limit = 10000, + --sell_limit =, -- no sell limit +} + +commoditymarket.register_market("under", undermarket_def) + +local under_protect = minetest.settings:get_bool("commoditymarket_protect_under_market", true) +local on_blast +if under_protect then + on_blast = function() end +end + +minetest.register_node("commoditymarket_fantasy:under_market", { + description = undermarket_def.description, + _doc_items_longdesc = undermarket_def.long_description, + _doc_items_usagehelp = usage_help, + tiles = {"commoditymarket_under_top.png","commoditymarket_under_top.png", + "commoditymarket_under.png","commoditymarket_under.png","commoditymarket_under.png","commoditymarket_under.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {choppy = 2, oddly_breakable_by_hand = 1,}, + sounds = default.node_sound_stone_defaults(), + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + commoditymarket.show_market("under", clicker:get_player_name()) + end, + can_dig = function(pos, player) + return not under_protect or minetest.check_player_privs(player, "protection_bypass") + end, + on_blast = on_blast, +}) +end +------------------------------------------------------------------ diff --git a/locale/template.pot b/locale/template.pot index 4cc3688..55bd289 100644 --- a/locale/template.pot +++ b/locale/template.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-12-31 14:12-0700\n" +"POT-Creation-Date: 2020-01-18 16:58-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,33 +17,33 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: commoditymarket\default_markets.lua:13 +#: commoditymarket_fantasy\init.lua:26 msgid "Gold Coins" msgstr "" -#: commoditymarket\default_markets.lua:14 +#: commoditymarket_fantasy\init.lua:27 msgid "" "A gold ingot is far too valuable to use as a basic unit of value, so it has " "become common practice to divide the standard gold bar into one thousand " "small disks to make trade easier." msgstr "" -#: commoditymarket\default_markets.lua:15 +#: commoditymarket_fantasy\init.lua:28 msgid "" "Gold coins can be deposited and withdrawn from markets that accept them as " "currency. These markets can make change if you have a thousand coins and " "would like them back in ingot form again." msgstr "" -#: commoditymarket\default_markets.lua:25 +#: commoditymarket_fantasy\init.lua:38 msgid "Right-click on this to open the market interface." msgstr "" -#: commoditymarket\default_markets.lua:33 +#: commoditymarket_fantasy\init.lua:46 msgid "King's Market" msgstr "" -#: commoditymarket\default_markets.lua:34 +#: commoditymarket_fantasy\init.lua:47 msgid "" "The largest and most accessible market for the common man, the King's Market " "uses gold coins as its medium of exchange (or the equivalent in gold ingots " @@ -53,23 +53,23 @@ msgid "" "Market. Gold coins are represented by a '☼' symbol." msgstr "" -#: commoditymarket\default_markets.lua:77 +#: commoditymarket_fantasy\init.lua:90 msgid "At this time of day the King's Market is closed." msgstr "" -#: commoditymarket\default_markets.lua:92 +#: commoditymarket_fantasy\init.lua:105 msgid "Night Market" msgstr "" -#: commoditymarket\default_markets.lua:131 +#: commoditymarket_fantasy\init.lua:144 msgid "At this time of day the Night Market is closed." msgstr "" -#: commoditymarket\default_markets.lua:150 +#: commoditymarket_fantasy\init.lua:163 msgid "Trader's Caravan" msgstr "" -#: commoditymarket\default_markets.lua:151 +#: commoditymarket_fantasy\init.lua:164 msgid "" "Unlike most markets that have well-known fixed locations that travelers " "congregate to, the network of Trader's Caravans is fluid and dynamic in " @@ -80,46 +80,46 @@ msgid "" "a location where Trader's Caravans will make a stop." msgstr "" -#: commoditymarket\default_markets.lua:219 +#: commoditymarket_fantasy\init.lua:232 msgid "Right-click to summon a trader's caravan" msgstr "" -#: commoditymarket\default_markets.lua:362 +#: commoditymarket_fantasy\init.lua:375 msgid "Trading Post" msgstr "" -#: commoditymarket\default_markets.lua:363 +#: commoditymarket_fantasy\init.lua:376 msgid "" "This post signals passing caravan traders that customers can be found here, " "and signals to customers that caravan traders can be found here. If no " "caravan is present, right-click to summon one." msgstr "" -#: commoditymarket\default_markets.lua:364 +#: commoditymarket_fantasy\init.lua:377 msgid "" "The trader's caravan requires a suitable open space next to the trading post " "for it to arrive, and takes some time to arrive after being summoned. The " "post gives a countdown to the caravan's arrival when moused over." msgstr "" -#: commoditymarket\default_markets.lua:411 +#: commoditymarket_fantasy\init.lua:424 msgid "" "Indicated parking area isn't suitable.\n" "A 5x3 open space with solid ground\n" "is required for a caravan." msgstr "" -#: commoditymarket\default_markets.lua:421 +#: commoditymarket_fantasy\init.lua:434 msgid "" "Caravan summoned\n" "ETA: @1 seconds." msgstr "" -#: commoditymarket\default_markets.lua:447 +#: commoditymarket_fantasy\init.lua:460 msgid "Goblin Exchange" msgstr "" -#: commoditymarket\default_markets.lua:448 +#: commoditymarket_fantasy\init.lua:461 msgid "" "One does not usually associate Goblins with the sort of sophistication that " "running a market requires. Usually one just associates Goblins with savagery " @@ -131,11 +131,11 @@ msgid "" "brokers prefer to \"keep the change\" when giving back actual coal lumps)." msgstr "" -#: commoditymarket\default_markets.lua:489 +#: commoditymarket_fantasy\init.lua:502 msgid "Undermarket" msgstr "" -#: commoditymarket\default_markets.lua:490 +#: commoditymarket_fantasy\init.lua:503 msgid "" "Deep in the bowels of the world, below even the goblin-infested warrens and " "ancient delvings of the dwarves, dark and mysterious beings once dwelled. A " @@ -145,435 +145,3 @@ msgid "" "loathe to physically break Mese crystals up into units that small, as it " "renders it useless for other purposes." msgstr "" - -#: commoditymarket\doc.lua:11 -msgid "Commodity Markets" -msgstr "" - -#: commoditymarket\doc.lua:12 -msgid "" -"Game-wide marketplaces where goods can be bought and sold at prices of your " -"choice." -msgstr "" - -#: commoditymarket\doc.lua:17 -msgid "User Interface: Inventory" -msgstr "" - -#: commoditymarket\doc.lua:19 -msgid "" -"Each player's account has an inventory that serves as a holding area for " -"items that are destined to be sold or that have been bought by the player " -"but not yet retrieved. This inventory is a bit different from the standard " -"Minetest inventory in that it doesn't hold item \"stacks\", it just tracks " -"the total number of that item present. Some markets allow for extremely " -"large quantities of an item to be stored here for sale.\n" -"\n" -"To add an item to your market inventory for eventual sale either shift-click " -"on the item in your player inventory or drag the item stack to the inventory " -"slot below the main market inventory list. Some markets may have " -"restrictions on what items can be bought and sold, if an item is not valid " -"for that market it won't go into the market's inventory. Some items are " -"considered \"currency\" and will add to your account's currency balance " -"instead of being listed in your market inventory.\n" -"\n" -"Tools cannot be added to the market inventory if they have any wear on them. " -"The market also can't handle items with attached metadata such as books that " -"have had text added to them.\n" -"\n" -"To remove an item from your market inventory, double-click in it in the " -"market inventory list. As much of the item as can fit into your player " -"inventory will be transferred to you, with any remainder staying behind in " -"the market inventory. To withdraw currency from your market balance type the " -"amount you'd like to withdraw in the field next to the \"Withdraw\" button. " -"The currency will be converted into items and added to your player " -"inventory, with whatever cannot be converted remaining behind in your market " -"balance." -msgstr "" - -#: commoditymarket\doc.lua:29 -msgid "User Interface: Orders" -msgstr "" - -#: commoditymarket\doc.lua:32 -msgid "" -"At the core of how a market operates are \"buy\" and \"sell\" orders. A buy " -"order is an announcement to the world that you are interested in purchasing " -"a certain quantity of item and are willing to pay a certain amount of " -"currency in exchange for each unit of that item. Conversely, a sell order is " -"an announcement to the world that you are interested in selling a certain " -"quantity of item and will accept a certain amount of currency in exchange " -"for each unit of that item.\n" -"\n" -"The market price of an item is determined by where the existing buy and sell " -"orders for that item intersect. When you offer to buy an item for a price " -"that someone is offering to sell it at, the item is transferred to you and " -"currency is transferred from your account to theirs to cover the cost. The " -"market will keep track of the most recent price that an item was " -"successfully sold for, but note that this information is for historical " -"interest only - there's no guarantee that anyone is currently willing to " -"match the historical price.\n" -"\n" -"When an item is selected in the upper list, the currently existing buy and " -"sell orders for that item will be displayed in the lower list. Sell orders " -"are listed first in descending price, followed by buy orders in ascending " -"price. The current market price will be somewhere in between the lowest sell " -"order and the highest buy order. If you wish to cancel a buy or sell order " -"that you've placed for an item, double-click on the order and the item or " -"currency that you put into that order will be returned to your inventory.\n" -"\n" -"If you place a buy order and there are already sell orders for the item that " -"meet or are below your price, some or all of your buy order might be " -"immediately fulfilled. Your purchases will be made at the price that the " -"sell orders have been set to - if you were willing to pay 15 units of " -"currency per item but someone was already offering to sell for 2 units of " -"currency per item, you only pay 2 units for each of that offer's items. If " -"there aren't enough compatible sell orders to fulfill your buy order, the " -"remainder will be placed into the market and made available for future " -"sellers to see and fulfill if they agree to your price. Your buy order will " -"immediately deduct the currency required for it from your account's balance, " -"but if you cancel your order you will get that currency back - it's not gone " -"until the order is actually fulfilled.\n" -"\n" -"If you place a sell order and there are already buy orders that meet or " -"exceed your price, some or all of your sell order may be immediately " -"fulfilled. You'll be paid the price that the buyers are offering rather than " -"the amount you're demanding. If any of your sell offer is left unfulfilled, " -"the sell order will be added to the market for future buyers to see. The " -"items for this offer will be immediately taken from your market inventory " -"but if you cancel your order you will get those items back." -msgstr "" - -#: commoditymarket\formspecs.lua:43 -#: commoditymarket\formspecs.lua:137 -#: commoditymarket\formspecs.lua:275 -#: commoditymarket\formspecs.lua:323 -msgid "Unknown Item" -msgstr "" - -#: commoditymarket\formspecs.lua:71 -#: commoditymarket\formspecs.lua:225 -#: commoditymarket\formspecs.lua:448 -msgid "Your Inventory" -msgstr "" - -#: commoditymarket\formspecs.lua:71 -#: commoditymarket\formspecs.lua:225 -#: commoditymarket\formspecs.lua:448 -msgid "Market Orders" -msgstr "" - -#: commoditymarket\formspecs.lua:88 -msgid "" -"All the items you've transfered to the market to sell and the items you've\n" -"purchased with buy orders. Double-click on an item to bring it back into " -"your\n" -"personal inventory." -msgstr "" - -#: commoditymarket\formspecs.lua:91 -#: commoditymarket\formspecs.lua:95 -msgid "Item" -msgstr "" - -#: commoditymarket\formspecs.lua:93 -#: commoditymarket\formspecs.lua:97 -#: commoditymarket\formspecs.lua:253 -msgid "Description" -msgstr "" - -#: commoditymarket\formspecs.lua:93 -#: commoditymarket\formspecs.lua:97 -#: commoditymarket\formspecs.lua:347 -#: commoditymarket\formspecs.lua:359 -msgid "Quantity" -msgstr "" - -#: commoditymarket\formspecs.lua:109 -msgid "" -"Drop items here to\n" -"add to your account" -msgstr "" - -#: commoditymarket\formspecs.lua:113 -msgid "Inventory limit:" -msgstr "" - -#: commoditymarket\formspecs.lua:114 -msgid "" -"You can still receive purchased items if you've exceeded your inventory " -"limit,\n" -"but you won't be able to transfer items from your personal inventory into\n" -"the market until you've emptied it back down below the limit again." -msgstr "" - -#: commoditymarket\formspecs.lua:119 -msgid "Withdraw" -msgstr "" - -#: commoditymarket\formspecs.lua:120 -msgid "" -"Enter the amount of currency you'd like to withdraw then click the " -"'Withdraw'\n" -"button to convert it into items and transfer it to your personal inventory." -msgstr "" - -#: commoditymarket\formspecs.lua:239 -msgid "Number of items there's demand for in the market." -msgstr "" - -#: commoditymarket\formspecs.lua:240 -msgid "Maximum price being offered to buy one of these." -msgstr "" - -#: commoditymarket\formspecs.lua:242 -msgid "Number of items available for sale in the market." -msgstr "" - -#: commoditymarket\formspecs.lua:243 -msgid "Minimum price being demanded to sell one of these." -msgstr "" - -#: commoditymarket\formspecs.lua:244 -msgid "Price paid for one of these the last time one was sold." -msgstr "" - -#: commoditymarket\formspecs.lua:245 -msgid "Quantity of this item that you have in your inventory ready to sell." -msgstr "" - -#: commoditymarket\formspecs.lua:253 -msgid "Buy Vol" -msgstr "" - -#: commoditymarket\formspecs.lua:253 -msgid "Buy Max" -msgstr "" - -#: commoditymarket\formspecs.lua:254 -msgid "Sell Vol" -msgstr "" - -#: commoditymarket\formspecs.lua:254 -msgid "Sell Min" -msgstr "" - -#: commoditymarket\formspecs.lua:254 -msgid "Last Price" -msgstr "" - -#: commoditymarket\formspecs.lua:254 -msgid "Inventory" -msgstr "" - -#: commoditymarket\formspecs.lua:308 -msgid "My orders" -msgstr "" - -#: commoditymarket\formspecs.lua:309 -msgid "" -"Select this to show only the markets where you have either a buy or a sell " -"order pending." -msgstr "" - -#: commoditymarket\formspecs.lua:310 -msgid "Enter substring to search item identifiers for." -msgstr "" - -#: commoditymarket\formspecs.lua:311 -msgid "Apply search to outputs." -msgstr "" - -#: commoditymarket\formspecs.lua:312 -msgid "Clear search." -msgstr "" - -#: commoditymarket\formspecs.lua:328 -msgid "In inventory:" -msgstr "" - -#: commoditymarket\formspecs.lua:329 -msgid "Balance:" -msgstr "" - -#: commoditymarket\formspecs.lua:342 -msgid "Sell limit:" -msgstr "" - -#: commoditymarket\formspecs.lua:343 -msgid "" -"This market limits the total number of items a given seller can have for " -"sale at a time.\n" -"You have @1 items remaining. Cancel old sell orders to free up space." -msgstr "" - -#: commoditymarket\formspecs.lua:346 -msgid "Use these fields to enter buy and sell orders for the selected item." -msgstr "" - -#: commoditymarket\formspecs.lua:347 -#: commoditymarket\formspecs.lua:378 -msgid "Buy" -msgstr "" - -#: commoditymarket\formspecs.lua:348 -msgid "Price per" -msgstr "" - -#: commoditymarket\formspecs.lua:353 -msgid "The price per item in this order." -msgstr "" - -#: commoditymarket\formspecs.lua:354 -msgid "The total amount of items in this particular order." -msgstr "" - -#: commoditymarket\formspecs.lua:355 -msgid "" -"The total amount of items available at this price accounting for the other " -"orders also currently being offered." -msgstr "" - -#: commoditymarket\formspecs.lua:356 -msgid "" -"The name of the player who placed this order.\n" -"Double-click your own orders to cancel them." -msgstr "" - -#: commoditymarket\formspecs.lua:357 -msgid "How many days ago this order was placed." -msgstr "" - -#: commoditymarket\formspecs.lua:359 -msgid "Order" -msgstr "" - -#: commoditymarket\formspecs.lua:359 -msgid "Price" -msgstr "" - -#: commoditymarket\formspecs.lua:359 -msgid "Total Volume" -msgstr "" - -#: commoditymarket\formspecs.lua:359 -msgid "Player" -msgstr "" - -#: commoditymarket\formspecs.lua:359 -msgid "Days Old" -msgstr "" - -#: commoditymarket\formspecs.lua:363 -msgid "Sell" -msgstr "" - -#: commoditymarket\formspecs.lua:387 -msgid "Select an item to view or place orders." -msgstr "" - -#: commoditymarket\formspecs.lua:402 -msgid "yourself" -msgstr "" - -#: commoditymarket\formspecs.lua:404 -#: commoditymarket\formspecs.lua:412 -msgid "someone" -msgstr "" - -#: commoditymarket\formspecs.lua:406 -#: commoditymarket\formspecs.lua:414 -msgid "you" -msgstr "" - -#: commoditymarket\formspecs.lua:439 -msgid "On day @1 @2 sold @3 @4 to @5 at @6@7 each for a total of @6@8." -msgstr "" - -#: commoditymarket\formspecs.lua:449 -msgid "Description:" -msgstr "" - -#: commoditymarket\formspecs.lua:450 -msgid "Your Recent Purchases and Sales:" -msgstr "" - -#: commoditymarket\formspecs.lua:463 -msgid "Mark logs as read" -msgstr "" - -#: commoditymarket\formspecs.lua:464 -msgid "" -"Log entries in yellow are new since last time you marked your log as read." -msgstr "" - -#: commoditymarket\formspecs.lua:467 -msgid "No logged activites in this market yet." -msgstr "" - -#: commoditymarket\formspecs.lua:472 -msgid "Show Itemnames" -msgstr "" - -#: commoditymarket\market.lua:198 -msgid "" -"You have too many items listed for sale in this market, please cancel some " -"sell orders to make room for new ones." -msgstr "" - -#: commoditymarket\market.lua:200 -msgid "You can't sell items for a negative price." -msgstr "" - -#: commoditymarket\market.lua:202 -msgid "You can't sell fewer than one item." -msgstr "" - -#: commoditymarket\market.lua:204 -msgid "" -"You don't have enough of that item in your inventory to post this sell order." -msgstr "" - -#: commoditymarket\market.lua:295 -msgid "You can't pay less than nothing for an item." -msgstr "" - -#: commoditymarket\market.lua:297 -msgid "You have to buy at least one item." -msgstr "" - -#: commoditymarket\market.lua:299 -msgid "You can't afford that many of this item." -msgstr "" - -#: commoditymarket\market.lua:474 -msgid "1 @1 = @2@3" -msgstr "" - -#: commoditymarket\market.lua:478 -msgid "Market inventory is limited to @1 items." -msgstr "" - -#: commoditymarket\market.lua:480 -msgid "Market has unlimited inventory space." -msgstr "" - -#: commoditymarket\market.lua:485 -msgid "Total pending sell orders are limited to @1 items." -msgstr "" - -#: commoditymarket\market.lua:487 -msgid "Market supports unlimited pending sell orders." -msgstr "" - -#: commoditymarket\market.lua:494 -msgid "Currency item values:" -msgstr "" - -#: commoditymarket\market.lua:509 -msgid "Market" -msgstr "" - -#: commoditymarket\market.lua:510 -msgid "A market where orders to buy or sell items can be placed and fulfilled." -msgstr "" diff --git a/market.lua b/market.lua deleted file mode 100644 index 99a304f..0000000 --- a/market.lua +++ /dev/null @@ -1,720 +0,0 @@ --- internationalization boilerplate -local MP = minetest.get_modpath(minetest.get_current_modname()) -local S, NS = dofile(MP.."/intllib.lua") - -commoditymarket.registered_markets = {} -local log_length_limit = 30 - --- from http://lua-users.org/wiki/BinaryInsert ---[[ - table.bininsert( table, value [, comp] ) - - Inserts a given value through BinaryInsert into the table sorted by [, comp]. - - If 'comp' is given, then it must be a function that receives - two table elements, and returns true when the first is less - than the second, e.g. comp = function(a, b) return a > b end, - will give a sorted table, with the biggest value on position 1. - [, comp] behaves as in table.sort(table, value [, comp]) - returns the index where 'value' was inserted -]]-- -local comp_default = function(a, b) return a < b end -function table.bininsert(t, value, comp) - -- Initialise compare function - local comp = comp or comp_default - -- Initialise numbers - local iStart, iEnd, iMid, iState = 1, #t, 1, 0 - -- Get insert position - while iStart <= iEnd do - -- calculate middle - iMid = math.floor( (iStart+iEnd)/2 ) - -- compare - if comp(value, t[iMid]) then - iEnd, iState = iMid - 1, 0 - else - iStart, iState = iMid + 1, 1 - end - end - local target = iMid+iState - table.insert(t, target, value) - return target -end - --- lowest price first -local buy_comp = function(order1, order2) - local price1 = order1.price - local price2 = order2.price - if price1 < price2 then - return true - elseif price1 == price2 and order1.timestamp < order2.timestamp then - return true - end - return false -end --- highest price first -local sell_comp = function(order1, order2) - local price1 = order1.price - local price2 = order2.price - if price1 > price2 then - return true - elseif price1 == price2 and order1.timestamp < order2.timestamp then - return true - end - return false -end - ---------------------------------- - -local get_account = function(market, player_name) - local account = market.player_accounts[player_name] - if account then - return account - end - account = {} - account.search = "" - account.name = player_name - account.balance = 0 -- currency - account.inventory = {} -- items stored in the market inventory that aren't part of sell orders yet. stored as "[item] = count" - account.filter_participating = "false" - account.log = {} -- might want to use a more sophisticated queue, but this isn't going to be a big list so that's more trouble than it's worth right now. - market.player_accounts[player_name] = account - return account -end - --- Caution: the data structures produced by sale logging caused me to discover --- issue https://github.com/minetest/minetest/issues/8719 with minetest.serialize() --- I'm working around it by using the code in persistence.lua instead -local log_sale = function(item, quantity, price, purchaser, seller) - local log_entry = {item=item, quantity=quantity, price=price, purchaser=purchaser, seller=seller, timestamp = minetest.get_gametime()} - local purchaser_log = purchaser.log - local seller_log = seller.log - table.insert(purchaser_log, log_entry) - if #purchaser_log > log_length_limit then - table.remove(purchaser_log, 1) - end - if (purchaser ~= seller) then - table.insert(seller_log, log_entry) - if #seller_log > log_length_limit then - table.remove(seller_log, 1) - end - end -end - -local remove_orders_by_account = function(orders, account) - if not orders then return end - local i = 1 - while i < #orders do - local order = orders[i] - if order.account == account then - table.remove(orders, i) - else - i = i + 1 - end - end -end - -local remove_account = function(player_name) - local account = player_accounts[player_name] - if account == nil then - return - end - - player_accounts[player_name] = nil - for item, lists in pairs(market) do - remove_orders_by_account(lists.buy_orders, account) - remove_orders_by_account(lists.sell_orders, account) - end -end - ------------------------------------------------------------------------------------------- - -local add_inventory_to_account = function(market, account, item, quantity) - if quantity < 1 then - return false - end - - if market.def.currency[item] then - account.balance = account.balance + market.def.currency[item] * quantity - else - account.inventory[item] = (account.inventory[item] or 0) + quantity - end - return true -end - -local remove_inventory_from_account = function(account, item, quantity) - if quantity < 1 then - return false - end - - local inventory = account.inventory - local current_quantity = inventory[item] or 0 - if current_quantity < quantity then - return false - end - - local new_quantity = current_quantity - quantity - if new_quantity == 0 then - inventory[item] = nil - else - inventory[item] = new_quantity - end - return true -end - -local remove_order = function(order, array) - for i, market_order in ipairs(array) do - if order == market_order then - table.remove(array, i) - return true - end - end - return false -end - ------------------------------------------------------------------------------------------------------------ - -local add_sell = function(market, account, item, price, quantity) - price = tonumber(price) - quantity = tonumber(quantity) - - local sell_limit = market.def.sell_limit - local sell_limit_exceeded - if sell_limit then - local total_sell = 0 - for item, orders in pairs(market.orders_for_items) do - for _, order in ipairs(orders.sell_orders) do - if order.account == account then - total_sell = total_sell + order.quantity - end - end - end - sell_limit_exceeded = total_sell + quantity > sell_limit - end - - -- validate that this sell order is possible - if sell_limit_exceeded or price < 0 or quantity < 1 or not remove_inventory_from_account(account, item, quantity) then - minetest.sound_play({name = "commoditymarket_error", gain = 0.1}, {to_player=account.name}) - if sell_limit_exceeded then - minetest.chat_send_player(account.name, S("You have too many items listed for sale in this market, please cancel some sell orders to make room for new ones.")) - elseif price < 0 then - minetest.chat_send_player(account.name, S("You can't sell items for a negative price.")) - elseif quantity < 1 then - minetest.chat_send_player(account.name, S("You can't sell fewer than one item.")) - else - minetest.chat_send_player(account.name, S("You don't have enough of that item in your inventory to post this sell order.")) - end - return false - end - - local buy_market = market.orders_for_items[item].buy_orders - local buy_order = buy_market[#buy_market] - local current_buy_volume = market.orders_for_items[item].buy_volume - - -- go through existing buy orders that are more expensive than or equal to the price - -- we're demanding, selling them at the order's price until we run out of - -- buy orders or run out of demand - while quantity > 0 and buy_order and buy_order.price >= price do - local quantity_to_sell = math.min(buy_order.quantity, quantity) - quantity = quantity - quantity_to_sell - local earned = quantity_to_sell*buy_order.price - account.balance = account.balance + earned - add_inventory_to_account(market, buy_order.account, item, quantity_to_sell) - buy_order.quantity = buy_order.quantity - quantity_to_sell - current_buy_volume = current_buy_volume - quantity_to_sell - - if buy_order.account ~= account then - -- don't update the last price if a player is just buying and selling from themselves - market.orders_for_items[item].last_price = buy_order.price - end - - log_sale(item, quantity_to_sell, buy_order.price, buy_order.account, account) - - if buy_order.quantity == 0 then - table.remove(buy_market, #buy_market) - end - buy_order = buy_market[#buy_market] - end - market.orders_for_items[item].buy_volume = current_buy_volume - - if quantity > 0 then - local sell_market = market.orders_for_items[item].sell_orders - - -- create the order and insert it into order arrays - local order = {account=account, price=price, quantity=quantity, timestamp=minetest.get_gametime()} - table.bininsert(sell_market, order, sell_comp) - market.orders_for_items[item].sell_volume = market.orders_for_items[item].sell_volume + quantity - end - - minetest.sound_play({name = "commoditymarket_register_opened", gain = 0.1}, {to_player=account.name}) - return true -end - -local cancel_sell = function(market, item, order) - local account = order.account - local quantity = order.quantity - - local sell_market = market.orders_for_items[item].sell_orders - - remove_order(order, sell_market) - market.orders_for_items[item].sell_volume = market.orders_for_items[item].sell_volume - quantity - add_inventory_to_account(market, account, item, quantity) - - minetest.sound_play({name = "commoditymarket_register_closed", gain = 0.1}, {to_player=account.name}) -end - ------------------------------------------------------------------------------------------------------------ - -local test_buy = function(market, balance, item, price, quantity) - local sell_market = market.orders_for_items[item].sell_orders - local test_quantity = quantity - local test_balance = balance - local i = 0 - local sell_order = sell_market[#sell_market] - while test_quantity > 0 and sell_order and sell_order.price <= price do - local quantity_to_buy = math.min(sell_order.quantity, test_quantity) - test_quantity = test_quantity - quantity_to_buy - test_balance = test_balance - quantity_to_buy*sell_order.price - i = i + 1 - sell_order = sell_market[#sell_market-i] - end - local spent = balance - test_balance - test_balance = test_balance - test_quantity*price - if test_balance < 0 then - return false, spent, test_quantity - end - - return true, spent, test_quantity -end - -local add_buy = function(market, account, item, price, quantity) - price = tonumber(price) - quantity = tonumber(quantity) - if price < 0 or quantity < 1 or not test_buy(market, account.balance, item, price, quantity) then - minetest.sound_play({name = "commoditymarket_error", gain = 0.1}, {to_player=account.name}) - if price < 0 then - minetest.chat_send_player(account.name, S("You can't pay less than nothing for an item.")) - elseif quantity < 1 then - minetest.chat_send_player(account.name, S("You have to buy at least one item.")) - else - minetest.chat_send_player(account.name, S("You can't afford that many of this item.")) - end - return false - end - - local sell_market = market.orders_for_items[item].sell_orders - local sell_order = sell_market[#sell_market] - local current_sell_volume = market.orders_for_items[item].sell_volume - - -- go through existing sell orders that are cheaper than or equal to the price - -- we're wanting to offer, buying them up at the offered price until we run out of - -- sell orders or run out of supply - while quantity > 0 and sell_order and sell_order.price <= price do - local quantity_to_buy = math.min(sell_order.quantity, quantity) - quantity = quantity - quantity_to_buy - local spent = quantity_to_buy*sell_order.price - account.balance = account.balance - spent - sell_order.account.balance = sell_order.account.balance + spent - sell_order.quantity = sell_order.quantity - quantity_to_buy - current_sell_volume = current_sell_volume - quantity_to_buy - add_inventory_to_account(market, account, item, quantity_to_buy) - - if sell_order.account ~= account then - -- don't update the last price if a player is just buying and selling from themselves - market.orders_for_items[item].last_price = sell_order.price - end - - log_sale(item, quantity_to_buy, sell_order.price, account, sell_order.account) - - -- Sell order completely used up, remove it - if sell_order.quantity == 0 then - table.remove(sell_market, #sell_market) - end - - -- get the next sell order - sell_order = sell_market[#sell_market] - end - market.orders_for_items[item].sell_volume = current_sell_volume - - if quantity > 0 then - local buy_market = market.orders_for_items[item].buy_orders - -- create the order for the remainder and insert it into order arrays - local order = {account=account, price=price, quantity=quantity, timestamp=minetest.get_gametime()} - account.balance = account.balance - quantity*price -- buy orders are pre-paid - table.bininsert(buy_market, order, buy_comp) - market.orders_for_items[item].buy_volume = market.orders_for_items[item].buy_volume + quantity - end - - minetest.sound_play({name = "commoditymarket_register_opened", gain = 0.1}, {to_player=account.name}) - return true -end - -local cancel_buy = function(market, item, order) - local account = order.account - local quantity = order.quantity - local price = order.price - - local buy_market = market.orders_for_items[item].buy_orders - market.orders_for_items[item].buy_volume = market.orders_for_items[item].buy_volume - quantity - - remove_order(order, buy_market) - - account.balance = account.balance + price*quantity - - minetest.sound_play({name = "commoditymarket_register_closed", gain = 0.1}, {to_player=account.name}) -end - -local initialize_market_item = function(orders_for_items, item) - if orders_for_items[item] == nil then - local lists = {} - lists.buy_orders = {} - lists.sell_orders = {} - lists.buy_volume = 0 - lists.sell_volume = 0 - lists.item = item - -- leave last_price nil to indicate it's never been sold before - orders_for_items[item] = lists - end -end - ------------------------------------------------------------------------------------------------------------ --- Chat commands - -minetest.register_chatcommand("market.show", { - params = "marketname", - privs = {server=true}, - description = S("show market formspec"), - func = function(name, param) - local market = commoditymarket.registered_markets[param] - if market == nil then return end - local formspec = market:get_formspec(market:get_account(name)) - minetest.show_formspec(name, "commoditymarket:"..param..":"..name, formspec) - end, -}) - -minetest.register_chatcommand("market.list", { - params = "", - privs = {server=true}, - description = S("list all registered markets"), - func = function(name, param) - local list = {} - for marketname, def in pairs(commoditymarket.registered_markets) do - table.insert(list, marketname) - end - table.sort(list) - minetest.chat_send_player(name, "Registered markets: " .. table.concat(list, ", ")) - end, -}) - -local remove_market_item = function(market, item) - local marketitem = market.orders_for_items[item] - if marketitem then - local buy_orders = marketitem.buy_orders - while #buy_orders > 0 do - market:cancel_buy(item, buy_orders[#buy_orders]) - end - local sell_orders = marketitem.sell_orders - while #sell_orders > 0 do - market:cancel_sell(item, sell_orders[#sell_orders]) - end - market.orders_for_items[item] = nil - end -end - -minetest.register_chatcommand("market.removeitem", { - params = "marketname item", - privs = {server=true}, - description = S("remove item from market. All existing buys and sells will be canceled."), - func = function(name, param) - local params = param:split(" ") - if #params ~= 2 then - minetest.chat_send_player(name, "Incorrect parameter count") - return - end - local market = commoditymarket.registered_markets[params[1]] - if market == nil then - minetest.chat_send_player(name, "No such market: " .. params[1]) - return - end - remove_market_item(market, params[2]) - end, -}) - -minetest.register_chatcommand("market.purge_unknowns", { - params = "", - privs = {server=true}, - description = S("removes all unknown items from all markets. All existing buys and sells for those items will be canceled."), - func = function(name, param) - for market_name, market in pairs(commoditymarket.registered_markets) do - local items_to_remove = {} - local items_to_move = {} - for item, orders in pairs(market.orders_for_items) do - local icon = commoditymarket.get_icon(item) - if icon == "unknown_item.png" then - table.insert(items_to_remove, item) - end - end - for _, item in ipairs(items_to_remove) do - minetest.chat_send_player(name, S("Purging item: @1 from market: @2", tostring(item), market_name)) - minetest.log("warning", "[commoditymarket] Purging unknown item: " .. tostring(item) .. " from market: " .. market_name) - remove_market_item(market, item) - end - end - end, -}) - --- Used during development and debugging to find items that break the market formspecs when added -local debugging_commands = false -if debugging_commands then - minetest.register_chatcommand("market.addeverything", { - params = "marketname", - privs = {server=true}, - description = S("Add all registered items to the provided market"), - func = function(name, param) - local params = param:split(" ") - if #params ~= 1 then - minetest.chat_send_player(name, "Incorrect parameter count") - return - end - local market = commoditymarket.registered_markets[params[1]] - if market == nil then - minetest.chat_send_player(name, "No such market: " .. params[1]) - return - end - for item_name, def in pairs(minetest.registered_items) do - initialize_market_item(market.orders_for_items, item_name) - end - end, - }) -end - ------------------------------------------------------------------------------------------------------------ - --- API exposed to the outside world -local add_inventory = function(self, player_name, item, quantity) - return add_inventory_to_account(self, get_account(self, player_name), item, quantity) -end -local remove_inventory = function(self, player_name, item, quantity) - return remove_inventory_from_account(get_account(self, player_name), item, quantity) -end -local sell = function(self, player_name, item, quantity, price) - return add_sell(self, get_account(self, player_name), item, price, quantity) -end -local buy = function(self, player_name, item, quantity, price) - return add_buy(self, get_account(self, player_name), item, price, quantity) -end - --- Using this instead of minetest.serialize because of https://github.com/minetest/minetest/issues/8719 -local MP = minetest.get_modpath(minetest.get_current_modname()) -local persistence_store, persistence_load = dofile(MP.."/persistence.lua") - -local worldpath = minetest.get_worldpath() -local load_market_data = function(marketname) - local filename = worldpath .. "/market_"..marketname..".lua" - return persistence_load(filename) -end - -local save_market_data = function(market) - local filename = worldpath .. "/market_"..market.name..".lua" - local data = {} - data.player_accounts = market.player_accounts - data.orders_for_items = market.orders_for_items - persistence_store(filename, data) - return true -end - -local make_doc_entry = function() return end -if minetest.get_modpath("doc") then - make_doc_entry = function(market_name, market_def) - local currencies = {} - for _, currency_item in ipairs(market_def.currency_ordered) do - local item_def = minetest.registered_items[currency_item.item] - table.insert(currencies, S("1 @1 = @2@3", item_def.description, market_def.currency_symbol, currency_item.amount)) - end - local inventory_limit - if market_def.inventory_limit then - inventory_limit = S("Market inventory is limited to @1 items.", market_def.inventory_limit) - else - inventory_limit = S("Market has unlimited inventory space.") - end - - local sell_limit - if market_def.sell_limit then - sell_limit = S("Total pending sell orders are limited to @1 items.", market_def.inventory_limit) - else - sell_limit = S("Market supports unlimited pending sell orders.") - end - - doc.add_entry("commoditymarket", "market_"..market_name, { - name = market_def.description, - data = { text = market_def.long_description - .."\n\n" - ..S("Currency item values:") .. "\n " .. table.concat(currencies, "\n ") - .."\n\n" - ..inventory_limit - .."\n" - ..sell_limit - } - }) - end -end - -commoditymarket.register_market = function(market_name, market_def) - assert(not commoditymarket.registered_markets[market_name]) - assert(market_def.currency) - - market_def.currency_symbol = market_def.currency_symbol or "¤" -- \u{00A4} -- defaults to the generic currency symbol ("scarab") - market_def.description = market_def.description or S("Market") - market_def.long_description = market_def.long_description or S("A market where orders to buy or sell items can be placed and fulfilled.") - - -- Reprocess currency table into a form easier for the withdraw code to work with - market_def.currency_ordered = {} - for item, amount in pairs(market_def.currency) do - table.insert(market_def.currency_ordered, {item=item, amount=amount}) - end - table.sort(market_def.currency_ordered, function(currency1, currency2) return currency1.amount > currency2.amount end) - - make_doc_entry(market_name, market_def) -- market_def has now been normalized, make documentation for it if doc is installed. - - -- Just in case a developer supplied strings that don't work well in formspecs, escape them now so we don't have to do it - -- wherever they're used. - market_def.currency_symbol = minetest.formspec_escape(market_def.currency_symbol) - market_def.description = minetest.formspec_escape(market_def.description) - market_def.long_description = minetest.formspec_escape(market_def.long_description) - - local new_market = {} - new_market.def = market_def - commoditymarket.registered_markets[market_name] = new_market - - local loaded_data = load_market_data(market_name) - if loaded_data then - new_market.player_accounts = loaded_data.player_accounts - new_market.orders_for_items = loaded_data.orders_for_items - else - new_market.player_accounts = {} - new_market.orders_for_items = {} - end - - -- If there's a list of initial items in the market def, initialize them. allow_item can trump this. - local initial_items = market_def.initial_items - if initial_items then - -- defer until after to ensure that all initial items have been registered, so we can guard against invalid items - minetest.after(0, - function() - for _, item in ipairs(initial_items) do - if minetest.registered_items[item] and - ((not market_def.allow_item) or market_def.allow_item(item)) and - not market_def.currency[item] then - initialize_market_item(new_market.orders_for_items, item) - end - end - end) - end - market_def.initial_items = nil -- don't need this any more - - new_market.name = market_name - - new_market.add_inventory = add_inventory - new_market.remove_inventory = remove_inventory - new_market.sell = sell - new_market.buy = buy - new_market.cancel_sell = cancel_sell - new_market.cancel_buy = cancel_buy - new_market.get_formspec = commoditymarket.get_formspec - new_market.get_account = get_account - new_market.save = save_market_data - - -- save markets on shutdown - minetest.register_on_shutdown(function() new_market:save() end) - - -- and also every ten minutes, to be on the safe side in case Minetest crashes - -- TODO: a more sophisticated approach that checks whether the market data is "dirty" before actually saving - local until_next_save = 600 - minetest.register_globalstep(function(dtime) - until_next_save = until_next_save - dtime - if until_next_save < 0 then - new_market:save() - until_next_save = 600 - end - end) - - ---------------------------------------------------------------------- - -- Detached inventory for adding items into the market - - local inv = minetest.create_detached_inventory("commoditymarket:"..market_name, { - allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) - return 0 - end, - allow_put = function(inv, listname, index, stack, player) - local item = stack:get_name() - - -- reject unknown items - if minetest.registered_items[item] == nil then - return 0 - end - - -- Currency items are always allowed - if new_market.def.currency[item] then - return stack:get_count() - end - - -- only new tools, no used tools - if stack:get_wear() ~= 0 then - return 0 - end - - --nothing with metadata permitted - local meta = stack:get_meta():to_table() - local fields = meta.fields - local inventory = meta.inventory - if (fields and next(fields)) or (inventory and next(inventory)) then - return 0 - end - - -- If there's no allow_item function defined, allow everything. Otherwise check if the item is allowed - if (not market_def.allow_item) or market_def.allow_item(item) then - local allowed_count = stack:get_count() - - if market_def.inventory_limit then - -- limit additions to the inventory_limit, if there is one - local current_count = 0 - for _, inventory_quantity in pairs(new_market:get_account(player:get_player_name()).inventory) do - current_count = current_count + inventory_quantity - end - allowed_count = math.min(allowed_count, allowed_count + market_def.inventory_limit - (current_count+allowed_count)) - if allowed_count <= 0 then return 0 end - end - - --ensures the item is in the market listing if it wasn't before - initialize_market_item(new_market.orders_for_items, item) - return allowed_count - end - return 0 - end, - allow_take = function(inv, listname, index, stack, player) - return 0 - end, - on_move = function(inv, from_list, from_index, to_list, to_index, count, player) - end, - on_take = function(inv, listname, index, stack, player) - end, - on_put = function(inv, listname, index, stack, player) - if listname == "add" then - local item = stack:get_name() - local count = stack:get_count() - new_market:add_inventory(player:get_player_name(), item, count) - inv:set_list("add", {}) - local name = player:get_player_name() - local formspec = new_market:get_formspec(new_market:get_account(name)) - minetest.show_formspec(name, "commoditymarket:"..market_name..":"..name, formspec) - end - end - }) - inv:set_size("add", 1) -end - -commoditymarket.show_market = function(market_name, player_name) - local market = commoditymarket.registered_markets[market_name] - if market == nil then return end - local formspec = market:get_formspec(market:get_account(player_name)) - minetest.show_formspec(player_name, "commoditymarket:"..market_name..":"..player_name, formspec) -end \ No newline at end of file diff --git a/mod.conf b/mod.conf index ab4ea7a..76ad58d 100644 --- a/mod.conf +++ b/mod.conf @@ -1,3 +1,4 @@ -name = commoditymarket -description = Provides support for various in-world commodity markets -optional_depends = default, doc \ No newline at end of file +name = commoditymarket_fantasy +description = Adds a number of fantasy-themed marketplaces +depends = commoditymarket, default +optional_depends = doc \ No newline at end of file diff --git a/persistence.lua b/persistence.lua deleted file mode 100644 index edff9b1..0000000 --- a/persistence.lua +++ /dev/null @@ -1,200 +0,0 @@ --- Internal persistence library - ---[[ Provides ]] --- persistence.store(path, ...): Stores arbitrary items to the file at the given path --- persistence.load(path): Loads files that were previously stored with store and returns them - ---[[ Limitations ]] --- Does not export userdata, threads or most function values --- Function export is not portable - ---[[ License: MIT (see bottom) ]] - --- Private methods -local write, writeIndent, writers, refCount; - --- write thing (dispatcher) -write = function (file, item, level, objRefNames) - writers[type(item)](file, item, level, objRefNames); -end; - --- write indent -writeIndent = function (file, level) - for i = 1, level do - file:write("\t"); - end; -end; - --- recursively count references -refCount = function (objRefCount, item) - -- only count reference types (tables) - if type(item) == "table" then - -- Increase ref count - if objRefCount[item] then - objRefCount[item] = objRefCount[item] + 1; - else - objRefCount[item] = 1; - -- If first encounter, traverse - for k, v in pairs(item) do - refCount(objRefCount, k); - refCount(objRefCount, v); - end; - end; - end; -end; - --- Format items for the purpose of restoring -writers = { - ["nil"] = function (file, item) - file:write("nil"); - end; - ["number"] = function (file, item) - file:write(tostring(item)); - end; - ["string"] = function (file, item) - file:write(string.format("%q", item)); - end; - ["boolean"] = function (file, item) - if item then - file:write("true"); - else - file:write("false"); - end - end; - ["table"] = function (file, item, level, objRefNames) - local refIdx = objRefNames[item]; - if refIdx then - -- Table with multiple references - file:write("multiRefObjects["..refIdx.."]"); - else - -- Single use table - file:write("{\n"); - for k, v in pairs(item) do - writeIndent(file, level+1); - file:write("["); - write(file, k, level+1, objRefNames); - file:write("] = "); - write(file, v, level+1, objRefNames); - file:write(";\n"); - end - writeIndent(file, level); - file:write("}"); - end; - end; - ["function"] = function (file, item) - -- Does only work for "normal" functions, not those - -- with upvalues or c functions - local dInfo = debug.getinfo(item, "uS"); - if dInfo.nups > 0 then - file:write("nil --[[functions with upvalue not supported]]"); - elseif dInfo.what ~= "Lua" then - file:write("nil --[[non-lua function not supported]]"); - else - local r, s = pcall(string.dump,item); - if r then - file:write(string.format("loadstring(%q)", s)); - else - file:write("nil --[[function could not be dumped]]"); - end - end - end; - ["thread"] = function (file, item) - file:write("nil --[[thread]]\n"); - end; - ["userdata"] = function (file, item) - file:write("nil --[[userdata]]\n"); - end; -} - -return function (path, ...) - local file, e; - if type(path) == "string" then - -- Path, open a file - file, e = io.open(path, "w"); - if not file then - return error(e); - end - else - -- Just treat it as file - file = path; - end - local n = select("#", ...); - -- Count references - local objRefCount = {}; -- Stores reference that will be exported - for i = 1, n do - refCount(objRefCount, (select(i,...))); - end; - -- Export Objects with more than one ref and assign name - -- First, create empty tables for each - local objRefNames = {}; - local objRefIdx = 0; - file:write("-- Persistent Data\n"); - file:write("local multiRefObjects = {\n"); - for obj, count in pairs(objRefCount) do - if count > 1 then - objRefIdx = objRefIdx + 1; - objRefNames[obj] = objRefIdx; - file:write("{};"); -- table objRefIdx - end; - end; - file:write("\n} -- multiRefObjects\n"); - -- Then fill them (this requires all empty multiRefObjects to exist) - for obj, idx in pairs(objRefNames) do - for k, v in pairs(obj) do - file:write("multiRefObjects["..idx.."]["); - write(file, k, 0, objRefNames); - file:write("] = "); - write(file, v, 0, objRefNames); - file:write(";\n"); - end; - end; - -- Create the remaining objects - for i = 1, n do - file:write("local ".."obj"..i.." = "); - write(file, (select(i,...)), 0, objRefNames); - file:write("\n"); - end - -- Return them - if n > 0 then - file:write("return obj1"); - for i = 2, n do - file:write(" ,obj"..i); - end; - file:write("\n"); - else - file:write("return\n"); - end; - file:close(); -end, function (path) - local f, e = loadfile(path); - if f then - return f(); - else - return nil, e; - end; -end - ---[[ - Copyright (c) 2010 Gerhard Roethlin - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation - files (the "Software"), to deal in the Software without - restriction, including without limitation the rights to use, - copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following - conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. -]] diff --git a/readme.md b/readme.md index e5f1ef9..d5750a6 100644 --- a/readme.md +++ b/readme.md @@ -1,65 +1,4 @@ -This mod implements marketplaces where players can post buy and sell offers for various items, allowing for organic market forces to determine the relative values of the resources in a world. - -The basic market interface is the same across all markets and market types, but this mod allows for a variety of different ways that markets can be configured to support different playstyles. Markets can have restrictions on what they will allow to be bought and sold, different types of "currency", and can share a common inventory across multiple locations or can be localized to just one spot at the discretion of the server owner. - -![](screenshot.png) - -## Currency - -Each market has one or more "currency" items defined that are treated differently from the other items that can be bought and sold there. Currency items are translated into a player's currency balance rather than being bought and sold directly. - -For example, the default market offered by this mod has this currency definition: - - { - ["default:gold_ingot"] = 1000, - ["commoditymarket:gold_coin"] = 1 - } - -When a gold ingot is added to the player's market account it turns into 1000 units of currency. When a gold coin is added it turns into 1 unit of currency. You can't buy and sell gold directly in this market, it is instead the "standard" by which the value of other items is measured. - -There's no reason that all markets in a given world have to use the same currency. Having variety in currency types adds flavour to the world and also introduces opportunities for enterprising traders to make a profit by moneychanging between different marketplaces. - -## Account Inventory - -In addition to tracking a player's currency balance, each player's account has an inventory that serves as a holding area for items that are destined to be sold or that have been bought by the player but not yet retrieved. This inventory is a bit different from the standard Minetest inventory in that it doesn't hold individual item "stacks", allowing for larger quantities of items to be accumulated than would otherwise be practical. If a player needs to buy 20,000 stone bricks for a major construction project then their account's inventory will hold that. - -To prevent abuse of the market inventory as a free storage space, or just to add some unique flavor to a particular market, a limit on the inventory's size can be added. This limit only affects transfers from a player's personal inventory into the market inventory; the limit can be exceeded by incoming items being sold to the player. - -Note that tools cannot be added to the market inventory if they have any wear on them, nor can the market handle items with attached metadata (such as books that have had text added to them). - -## Placing a "Buy" Order - -A buy order is an offer to give a certain amount of currency in exchange for a particular type of item. To place a buy order go to the "Market Orders" tab of the market's interface and select the item from the list of items on the market. If the item isn't listed it may be that the market is simply "unaware" of the item's existence; try placing an example of the item into your personal inventory and if the item is permitted on the market a new entry will be added to Market Orders. - -Enter the quantity and price you desire and then click the "buy" button to place a buy order. - -If there are already "sell" orders for the item when you place a buy order, some or all of your buy order might be immediately fulfilled provided you are offering a sufficient price. Your purchases will be made at the price that the sell orders have been set to - if you were willing to pay 15 units of currency per item but someone was already offering to sell for 2 units of currency per item, you only pay 2 units for each of that offer's items. - -If there aren't enough compatible sell orders to fulfill your buy order, the remainder will be placed into the market and made available for future sellers to see and fulfill if they agree to your price. Your buy order will immediately deduct the currency required for it from your account's balance, but if you cancel your order you will get that currency back - it's not gone until the order is actually fulfilled. - -Double-click on your order in the orders list to cancel it. - -## Placing a "Sell" Order - -Sell orders are an offer of a certain amount of an item and a price you're willing to accept in exchange for them. They're placed in a similar manner to buy orders, except by clicking the "sell" button instead of the "buy" button. - -If there are already buyers with buy orders that meet or exceed your price, some or all of your sell order may be immediately fulfilled. You'll be paid the price that the buyers are offering rather than the amount you're demanding. - -If any of your sell offer is left unfulfilled, the sell order will be added to the market for future buyers to see. The items for this offer will be immediately taken from your market inventory but if you cancel your order you will get those items back. - -Double-click on your order in the orders list to cancel it. - -## Commands - -This mod has several commands that a server administrator can use: - -* market.removeitem marketname item -- cancels all existing buy and sell orders for an item and removes its entry from the market tab. This is useful if you've changed what items are permitted in a particular market and need to clear out items that are no longer allowed. -* market.show marketname -- opens the market's formspec -* market.list -- lists the marketnames of all registered markets - -## Registering a market - -The file "default_markets.lua" contains a number of pre-defined markets that provide examples of what's possible with this mod. They can be enabled as-is with game settings and include: +This mod implements a number of fantasy-themed marketplaces where players can post buy and sell offers for various items, allowing for organic market forces to determine the relative values of the resources in a world. * King's Market - a basic sort of "commoner's marketplace", only open during the day * Night Market - the shadier side of commerce, only open during the night @@ -67,27 +6,10 @@ The file "default_markets.lua" contains a number of pre-defined markets that pro * Goblin Exchange - a strange marketplace that uses coal as a currency * Undermarket - where dark powers make their trades, using Mese as a currency -All of these except for the Trader's Caravan are intended to be placed in specific locations by server administrators, they don't have crafting recipes. Modifying these markets or creating your own from scratch should hopefully be a fairly straightforward task. +![](screenshot.jpg) -### Market definition API +All of these except for the Trader's Caravan are intended to be placed in specific locations by server administrators, they don't have crafting recipes. -``` -local market_def = { - description = "Night Market", -- A short name for this market, appears as the text of the "info" tab of the market's UI - long_description = "When the sun sets and the stalls of the King's Market close, other vendors are just waking up to share their wares. The Night Market is not as voluminous as the King's Market but accepts a wider range of wares. It accepts the same gold coinage of the realm, one thousand coins to the gold ingot.", -- A longer description with flavor text and other information to present to the user, shown in the info tab. Optional. - currency = { - ["default:gold_ingot"] = 1000, - ["commoditymarket:gold_coins"] = 1 - }, -- List all items that get translated into "currency" here, along with their conversion rates. Take care to ensure there's no way for a player to multiply their money when crafting currency items into each other (eg, if there was some way to get more than 1000 coin items out of a gold ingot, in this case) - currency_symbol = "☼", -- Used in various places in the UI. If not defined, defaults to "¤" (the generic currency symbol) - inventory_limit = 10000, -- Optional, when set this prevents the player from adding items to their market inventory when it's over this limit - sell_limit = 10000, -- Optional, when set this prevents sell orders from being added if the player already has this many items for sale - initial_items = {"default:cobble", "default:wood"}, -- Optional, a list of items that the market will be initialized with on startup. Players can add other items during play. - allow_item = function(item) return true end, -- Optional, this function is used to determine whether the market permits a player to add a particular item to its inventory. - anonymous = true, -- If set to true then the player won't be able to see the names associated with other player's orders, only their own. -} +An option exists to allow Goblin markets and Undermarkets to be automatically placed inside dungeons by world gen. -commoditymarket.register_market("market_name", market_def) -``` - -Once a market is defined, use `commoditymarket.show_market(market_name, player_name)` to show the market interface to a player. \ No newline at end of file +The [settlements](https://github.com/FaceDeer/settlements) mod scatters small settlements around on the surface of the world that can contain King's Markets and Night Markets. diff --git a/screenshot.jpg b/screenshot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..652997448a02e2d6064349e56c839a9183d2d6b9 GIT binary patch literal 110070 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

)2*<~=d#2E8m8Ou@T{v@3*`oY|9 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

0j> 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≫3# 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

qESVtSJdiDIn;Wwq+zNDLCs?2Wo^5x@a zC9RY{-W;aW(wM7iH6s|+7fI>8KyLW3M6#N_svJ4e6seyGt!-~Pmtanw-)jF?cgEfB zkV4SMxgMA(D@R0=H<_zAkIPIbBMGmkus+bdtStzNgsR{H`Ngs7jFuNkd%?LX!dGs+5lY z_%TU&$rB!k)rH>{MZz$HoQV#7F*a2?S}`U^UsudC!b0p;(P&kmQeNIwHbt=V;45n4 zF(nJx_^Dsy_g?ks3VJdX=`iVySt%C%sV@_##t`Ep+5U)wNW=p5j*xmrcwfYS{B{v< zDLEmToYy#7;w4!%4s;f!vE0SFj!saWdZrXYQfuixs2XynRN!X2gMXRxe<{<8$ z3}VOPmE2V_3XF$gdzo>g5xQBcLhsMCAt0X>Rb1>_xyboAI^bI zf9id3o2|A~V8U`hgc;Tc&;?92j7Qp`K24lb_gr?JT7nhI^sH_@+Y8f@8EH02ZjAZfFT}u}KindCB;;**xsd7d zE!GM)fGF}w8vA>@4!7b;2dgih%-Ozv>`>@3UOu*AHr$NWYOu2O9TMKb3?2`QYe!w}`$;NSX zs;o#{`-N@R${6LiPWgKr0x1tyQ0eQAZXE`!X5&2&$PFX+Y%;&BmXU%;49Hriw;1fV z3)d-qtpy%}5(mF15|Yx-$e|BcJ`3S_7d8eO5gqT_G~xU*>E@^khkjU2oFJ2&y#c!ZLu5YBzAFD z4ol8rE62)13ke^(N2)_wO14~?ff9m$5zc{+pYf_Imp4?SPpUTEbws{AF%%r7B&r;i7=eC@|VRn69|WI zz~yb=AS>b8EN}xjE5R#CvHM=#;>j$5jWR)7vn_Qcg-zqy`|7SXo#f>5-lz%aBGRid z{FZ-%TtfuVtZVi6yBgpvyP)~)9tfvE?vXY4ANl4;?m?MjKwKz-X84sj20UHM&4E9u z03`-f$KqOp-oh^U{(sUG5Y$B7EYM1X&;H-_HUIeg`U5SXbN8o5V4rYvWO>5>z(>Df z5v&w7k*fqiC?I>YN7C3}rYv))4*DOi$Ef{5t&cC<*X|_*Li0^fd z+IAr%iECKZZh=T&_IDE7e@nObpN)h75Tqt#^3FOogs3b|7ra~705RDKB$v*0}X;RrDLd zby~#h)BW8I9;%s>KUs|J{xxRT15Akm)}5n2O$_l7sr~mhzPp0~qtsxis8;=bg(-zl zb;D);H&^@bfBpN#^@#ud_unu6KR@_auYOlHC`b5&#&S^Z`?q}zHtNT=8cCl*WX1P6NBfU@7#le z@B9V71y1muAL{l7@y_@H@-zuvj=tF1`1 z|9l7ecNcyg|L-sUI_>{#4WfM$R&XpY`u}YG-;L7a1_#&t=jr~@yI)Nq{YTGlfM)(` zl#c`;CWH-!%Jt&@)l#3ESg^YP7`6x4FjA9vc0{uW9ze5M5T{PSg4xegC>t0|PcYu_ ziAQ06<$9N!D=`=aR#|wHh)kZgSIE?Bad|hOX`Um6T;9BnEKX=aFxX&+#m>&G_gNGe zH>3a`lP08NomR3d75eq@mtn~_W*mh2nGQ{AlkUJ))h1lo{Zt2AVKuYD3FXBJ(+s(< zUh$*$XpbMsFum2?6!y~D>0yCU7w*<4yVjCz7E3hP4)+vVGztf;TOXJ5l})(N4*QR` zRCarA7&X;zNmN~qb$;kvLbl~S^+Bpg6~%)(r-NTkT!}s^5DiNnq>4iy4};;&wicd& z($ep5+cc}TLkizBOmrL@os}1qo4x!RbRJK%u3g}SsXwo{Yi4V|EGV_)k!3?P>Rw;X zRlPKj{8Fd_U!gEz{Gx5?=i;_Z%7&u#_V``1X{3e&JT^H~+npQWAtfd+S|Dur`hNj6 Cv#1XM diff --git a/settingtypes.txt b/settingtypes.txt index d2beeb6..0401e2a 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -1,18 +1,9 @@ -#Some item images are very large and break the market formspec. -#See https://github.com/minetest/minetest/issues/9300 -#Alternately, use: -#commoditymarket.override_item_icon(item_name, new_icon_texture) -#or -#commoditymarket.override_image_icon(old_icon_texture, new_icon_texture) -#to override a troublesome image directly. -commoditymarket_enable_item_icons (Enable item icon images in market formspecs) bool true - [Enable default markets] -commoditymarket_enable_kings_market (Enable King's Market) bool false -commoditymarket_enable_night_market (Enable Night Market) bool false +commoditymarket_enable_kings_market (Enable King's Market) bool true +commoditymarket_enable_night_market (Enable Night Market) bool true commoditymarket_enable_caravan_market (Enable Trader's Caravan) bool true -commoditymarket_enable_goblin_market (Enable Goblin Exchange) bool false -commoditymarket_enable_under_market (Enable Undermarket) bool false +commoditymarket_enable_goblin_market (Enable Goblin Exchange) bool true +commoditymarket_enable_under_market (Enable Undermarket) bool true [Market node protection] commoditymarket_protect_kings_market (Protect King's Market node) bool true diff --git a/sounds/commoditymarket_error.ogg b/sounds/commoditymarket_error.ogg deleted file mode 100644 index d1ae7c953723886e0459c05a760a01bf93715e4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11504 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 delta 88 zcmX@ac!Y66aiEQ-i(^PdT(ZOy2LYc=n+%xjnjJ{`CHC$y4b`>5Y=C3~sj>jRRTD%@}~d)78&qol`;+08cp~%m4rY diff --git a/textures/commoditymarket_caravan_sign_inventory.png b/textures/commoditymarket_caravan_sign_inventory.png index d1d3d14def86c6572fda74d0ac30ce8e286f7d13..ba7db6ae1a27deaa312ff6d07bc30bd0c0537907 100644 GIT binary patch delta 407 zcmV;I0cifd1H1!}FMm-(Gfq7(G$TUSa(I7>z}GAA5RNIuiZt1clJD}NmnS4>JoHz-CpD#W&w zn$B_l00001bW%=J06^y0W&i*H*GWV{RCr$Pl1Hkg=37Ip=);)BW$ofHoEl zvzU$FuApeyP$RlqfO6!uSfbRQ0YJZ*B~LexLg+R=l)B%PLgw$|WxAME`*ovKzq!NQ zL3*;?9`(dBZ-3&>S!+^A&A$uG^_xf%C=X*}u8|3~Wv+`=rc|@uSF^?Ra#Y+OErprX zk7#aMebUVJt%zUHO}E{LGS@d46qGqLM?dq4x#yc1-nV{cP{e0H)2&|p<`;cZ=KG|~ z_eq)WlQQ2YWxh|!e4mv0J}L8kQvPwDL!U#Re`?AQ&k(_IOEmxh002ovPDHLkV1f>2 Bw%7mw delta 409 zcmdnPypMT;e!aH5sELM*pRInNv+j9!;6#z0RJoA#u}M`8RPc7t%M*f1NmqJMSOg^U!Vgj=c0+ znP@bj&9V5+FO}P=?)7J;Fuu0B?U4LGQej)XYwY2g{Tsdo-S7}LW`4Nc>+PkA&F8|N zH!spV)f$^O`B9#B?Uf^C{!{#4EMEO@;gN4EdD3?TFPWJ4#98Y2%(Z(e^HMCd{qs~l z&p-S`yzY_T?@sHt>hHG9-*Fj@^Do)n9SGyARtO133Aol&0=>!L>FVdQ&MBb@03y`2 AVE_OC diff --git a/textures/commoditymarket_clear.png b/textures/commoditymarket_clear.png deleted file mode 100644 index ac6f3c343a47876de5714e5f98a009d36d22b3ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 539 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&nFaWSxB}__q=S#i$Nm6y3YG-< z1v4;nnVLJhc!xyCWas2xe)uFWcljg+2F7Mj7srr_xVN(o_B9*uxMY?kJMCuq^WT2= zam$dE6T3{A&hBpdb!?fyB!gHE#TEf45b>z+%NCVWM)DuedwYIbU!A{k|JPbw&${pT zlJ;8*&3WtI*j58Eoa$tKHRr-SQ^LlZ~g|MeCL179sf1fT{+lcFB5)^oAcFjwH4wOn#+8+ zx9OTY+WhBRe(a?1mj?;E>}}4(EjaQ0x%v#|`Uwg9-WbXL;Qr$=VM|EVwYghEy5%N_ zt-ja{^a5wyt2Wk%??Bdv&E{+0ZOv`3UMM%qdjE^)?d7-jusyBJ`TZ~Qg}gxwH!Lun bI_hhUX3X7o@?;kNdfHZZ)BOM?7@85kKE**Libgha(8l+@HUwRH83Oss93+}s1gBa%|mvhs>5sv5ic zCrq3&b^6SC3l=X~wqoU~)oa&n*tB`e*6llX?mlqv$k7uQE?>WK^VaP<_a8id^8Cfi zH*ep)|M2ni*Ka?5{`os6$mA{q1GAQ=i(^Pd+}oL%;kN<=+9IPTY+4bKdn8JWQ72@Z zP?=O&Q|fB&B;Jmn|Nk$PH?rL5&b$5jos@ldzH1vluia5@RKEG|@)=0rPWAEh&hD6n z6Lx#dk$t~&ZR!0^mCawzCG3jGHCuhO>3|f{mD;@0Ras)!R>r-TgKxZu6h= z;z?_Ars_N`^VRzI>5u34%Ba3uTPFqRa4n6h-cs}L^q!i8uKKTD<~ye!;W^)GqqqF> zQ_jK~w<+&RTUM{)WZ9j1x873cL*ntz4DK`Zd8S)A&itiQQC!TrWmZVizUhMdB2qU6 zIeeCR>*eEhOGp3L%LlIw50=y~yxKTr$)CU9xBS|l>H0R`_2%NW(j1ekLw+~LU)cBm zHCwvK3Db33>l7}$>FnJ2?Z349v5D@yxje@>yI%Ke9R9O?NAAWL?pF?CFW364l)O@J zzsuI*R(pQpv_;pNW^MTAd+FQTi{HMmTsx+=woIg*DA3oLaP+~GXGC)|9jlP zZJL1eAwE_A^yy+Ro&M|pI3ZNS8X>+*(8^c9E8vl*aRuk830~GE>8V?HcO_n$vSG!y zTubld?fc@}h0a)b1j|Tj9R6j;+Az6~%iz(;;vW-dUAA1vP+%9pcuS^|?|N7<+j9|y zBP+QAxFS zv&wR|sTIR7kp<$4ztTJIbzF!x{FT(QPbN9v<< z4`x`w9?<{%)Z$6}39$hU4GfRF+|&>3TvFxNQ0%*WbyrcKrybju^;su5U&Mz=3q+K} z=KDDOKiCu#y2{^-BiZ3k#@FB1uO4eS@F#uu`}v>Qk`qoIPCd|Yplf-wa?>i){_Dq* z6ZU=JlweF$-4vO?vPS45r^LbS-%qf_=dPG)(Z6r=L%{}nDaId*ft1=oagGBD4Ihsy tGt`?feQ<|TDnMTCkCZ3pk3hf|aRF}Gr)Sf0W&$%QgQu&X%Q~loCIDQ;3w{6q diff --git a/textures/commoditymarket_shingles_wood.png b/textures/commoditymarket_shingles_wood.png index 6e86ea64444bc0f7bca8d434c7873c7213bc6891..ee59df858a269277efb66972db7ae232050664f5 100644 GIT binary patch delta 697 zcmV;q0!IC^1k(kOB!8-UR9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3004N}RZiOx!ypX% z_Y@t$FEEUgCiJcwbo@HlNelO-kdZH#7U^Lr@)IW zKHL}VmiQ?l>&W@d{qj68P5-_6V0-4Y47!ptP|nTlq;z;2|U!JvK?y=0)B~8lTK2r|DNj_yg<9NAk{59;g5S00(qQO+^Rf0TTcV z8M#tZ{r~_0(Md!>R2Uf@z}<=?RTKr_wbtIJQke`*CLp$RGq>{$^H{#ES0acA3Zix= zsXF_|!jC_Gdw;!N*40(i+l-X2y+!k|b7#(%rLxj7jK^cbeaz4L5x5uu1 zsoTjf>+r=*oRJajji59{7lxag+yv_2QX7lNOaPGu3X}*3HO#89xSQyvO0*hLa@eqH z985IPhq)w@tGk=3%1v01W$s==HH6OU2I-6}xgdhZgMYh|9Bw4rNEt~0JfN9vqPkl{ zl>n91S$$YsBG_qW!|gy>6b^2pLo~W6y4K-!5Ptn@Kc8$ox2n2t`(h&O{?D8LevhC3 z{KJQczJ0pht{=1e9?vhg(}#80D(Bv(;>%^Y`%k~U`{(P&U!L39$*k9x^}CmI#*7b) zz#cWT$CH2o27kk+i?55^WZ-&Us*y1d03uti=)x>>s=!VY6@@`t7Ksp1jVg7e43IiI z3YqDqg1}ODPxQ=o3V^#e`)!N;S>2PQ3nsR)8V9c`0IO?eR{|AP#i9(c7aH5_fbhRc zXt)80#u$u>uIy}dy+1bqk8Q>tof%msf@NQCrw_W1~I fiGLsS?GgV0l*BOjUA)yJ00000NkvXXu0mjfc9~el delta 516 zcmV+f0{i{b1+oN?B!3BTNLh0L01Qq501FcVbuGES00007bV*G`2iyh<038Nj+Nv1< z00GfSL_t&-86CmhiX&AN1>m*T-ltNT3{55=)8mb|^9(+gZ|ju^B7%ab-ASs>{+Yt> z<4-@nUN7tFD(Y>