diff --git a/schems/GiongologliosCastle.mts b/schems/GiongologliosCastle.mts new file mode 100644 index 0000000..4561372 Binary files /dev/null and b/schems/GiongologliosCastle.mts differ diff --git a/worldmods/oresplus/LICENSE b/worldmods/oresplus/LICENSE new file mode 100644 index 0000000..10ad362 --- /dev/null +++ b/worldmods/oresplus/LICENSE @@ -0,0 +1,13 @@ + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + +Copyright (C) 2004 Sam Hocevar + +Everyone is permitted to copy and distribute verbatim or modified +copies of this license document, and changing it is allowed as long +as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. \ No newline at end of file diff --git a/worldmods/oresplus/README.md b/worldmods/oresplus/README.md new file mode 100644 index 0000000..5e6fead --- /dev/null +++ b/worldmods/oresplus/README.md @@ -0,0 +1,10 @@ +## Ores Plus ## + +##### A mod for Minetest adding a reasonable bunch of Minecraft-inspired ores in an efficient way. ##### +##### List of ores : bedrock, emerald, glowstone and golden apple. ##### + +### Credits ### + +##### Special thanks to Gambit for the textures from PixelBOX ##### + +![Preview](http://i.imgur.com/iHuKziF.png) diff --git a/worldmods/oresplus/depends.txt b/worldmods/oresplus/depends.txt new file mode 100644 index 0000000..4ad96d5 --- /dev/null +++ b/worldmods/oresplus/depends.txt @@ -0,0 +1 @@ +default diff --git a/worldmods/oresplus/init.lua b/worldmods/oresplus/init.lua new file mode 100644 index 0000000..f882059 --- /dev/null +++ b/worldmods/oresplus/init.lua @@ -0,0 +1,108 @@ +------ MAPGEN ------ + +local ores_datas = { + {"bedrock", "default:stone", 1*1*1, 5, 2, -30912, -30896}, + {"golden_apple", "default:apple", 6*6*6, 2, 2, 4, 64}, + {"stone_with_emerald", "default:stone", 28*28*28, 2, 3, -30896, -1024}, + {"stone_with_glowstone_dust", "default:stone", 24*24*24, 2, 3, -30896, -512} +} + +for _, o in pairs(ores_datas) do + minetest.register_ore({ + ore_type = "scatter", + ore = "oresplus:"..o[1], + wherein = o[2], + clust_scarcity = o[3], + clust_num_ores = o[4], + clust_size = o[5], + height_min = o[6], + height_max = o[7] + }) +end + +------ NODES ------ + +minetest.register_node("oresplus:bedrock", { + description = "Bedrock", + tile_images = {"oresplus_bedrock.png"}, + groups = {unbreakable=1}, + sounds = default.node_sound_stone_defaults() +}) + +for _, n in pairs({"emerald", "glowstone_dust"}) do + minetest.register_node("oresplus:stone_with_"..n, { + description = string.gsub(n:gsub("^%l", string.upper), "_d", " D").." Ore", + paramtype = "light", + tiles = {"default_stone.png^oresplus_mineral_"..n..".png"}, + groups = {cracky=2}, + drop = "oresplus:"..n, + sounds = default.node_sound_stone_defaults() + }) + + minetest.register_craftitem("oresplus:"..n, { + description = string.gsub(n:gsub("^%l", string.upper), "_d", " D"), + inventory_image = "oresplus_"..n..".png", + wield_image = "oresplus_"..n..".png" + }) +end + +for _, b in pairs({ {"emerald_block", 0}, {"glowstone", 13} }) do + minetest.register_node("oresplus:"..b[1], { + description = string.gsub(b[1]:gsub("^%l", string.upper), "_b", " B"), + paramtype = "light", + light_source = b[2], + tiles = {"oresplus_"..b[1]..".png"}, + groups = {cracky=2}, + sounds = default.node_sound_stone_defaults() + }) +end + +minetest.register_node("oresplus:golden_apple", { + description = "Golden Apple", + drawtype = "plantlike", + paramtype = "light", + tiles = {"oresplus_golden_apple.png"}, + inventory_image = "oresplus_golden_apple.png", + wield_image = "oresplus_golden_apple.png", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.2, -0.4, -0.2, 0.2, 0.1, 0.2} + }, + groups = {fleshy=3, dig_immediate=3, flammable=1, leafdecay=3, leafdecay_drop=1}, + on_use = minetest.item_eat(20) +}) + +------ CRAFTS ------ + +minetest.register_craft({ + output = "oresplus:emerald 9", + recipe = {{"oresplus:emerald_block"}} +}) + +minetest.register_craft({ + output = "oresplus:emerald_block", + recipe = { + {"oresplus:emerald", "oresplus:emerald", "oresplus:emerald"}, + {"oresplus:emerald", "oresplus:emerald", "oresplus:emerald"}, + {"oresplus:emerald", "oresplus:emerald", "oresplus:emerald"} + } +}) + +minetest.register_craft({ + output = "oresplus:glowstone", + recipe = { + {"oresplus:glowstone_dust", "oresplus:glowstone_dust"}, + {"oresplus:glowstone_dust", "oresplus:glowstone_dust"} + } +}) + +minetest.register_craft({ + output = "oresplus:golden_apple", + recipe = { + {"default:gold_ingot", "default:gold_ingot", "default:gold_ingot"}, + {"default:gold_ingot", "default:apple", "default:gold_ingot"}, + {"default:gold_ingot", "default:gold_ingot", "default:gold_ingot"} + } +}) diff --git a/worldmods/oresplus/textures/oresplus_bedrock.png b/worldmods/oresplus/textures/oresplus_bedrock.png new file mode 100644 index 0000000..7e86943 Binary files /dev/null and b/worldmods/oresplus/textures/oresplus_bedrock.png differ diff --git a/worldmods/oresplus/textures/oresplus_emerald.png b/worldmods/oresplus/textures/oresplus_emerald.png new file mode 100644 index 0000000..16939a0 Binary files /dev/null and b/worldmods/oresplus/textures/oresplus_emerald.png differ diff --git a/worldmods/oresplus/textures/oresplus_emerald_block.png b/worldmods/oresplus/textures/oresplus_emerald_block.png new file mode 100644 index 0000000..a5b0adb Binary files /dev/null and b/worldmods/oresplus/textures/oresplus_emerald_block.png differ diff --git a/worldmods/oresplus/textures/oresplus_glowstone.png b/worldmods/oresplus/textures/oresplus_glowstone.png new file mode 100644 index 0000000..c415df8 Binary files /dev/null and b/worldmods/oresplus/textures/oresplus_glowstone.png differ diff --git a/worldmods/oresplus/textures/oresplus_glowstone_dust.png b/worldmods/oresplus/textures/oresplus_glowstone_dust.png new file mode 100644 index 0000000..79b596d Binary files /dev/null and b/worldmods/oresplus/textures/oresplus_glowstone_dust.png differ diff --git a/worldmods/oresplus/textures/oresplus_golden_apple.png b/worldmods/oresplus/textures/oresplus_golden_apple.png new file mode 100644 index 0000000..4fc01aa Binary files /dev/null and b/worldmods/oresplus/textures/oresplus_golden_apple.png differ diff --git a/worldmods/oresplus/textures/oresplus_mineral_emerald.png b/worldmods/oresplus/textures/oresplus_mineral_emerald.png new file mode 100644 index 0000000..00883c5 Binary files /dev/null and b/worldmods/oresplus/textures/oresplus_mineral_emerald.png differ diff --git a/worldmods/oresplus/textures/oresplus_mineral_glowstone_dust.png b/worldmods/oresplus/textures/oresplus_mineral_glowstone_dust.png new file mode 100644 index 0000000..7e7d93d Binary files /dev/null and b/worldmods/oresplus/textures/oresplus_mineral_glowstone_dust.png differ diff --git a/worldmods/shop/depends.txt b/worldmods/shop/depends.txt new file mode 100644 index 0000000..20be32f --- /dev/null +++ b/worldmods/shop/depends.txt @@ -0,0 +1,2 @@ +default +playereffects diff --git a/worldmods/shop/init.lua b/worldmods/shop/init.lua new file mode 100644 index 0000000..d86863b --- /dev/null +++ b/worldmods/shop/init.lua @@ -0,0 +1,12 @@ +shop = {} + +--[[shop.formspec_register = + "size[8,8]"..default.gui_bg..default.gui_bg_img..default.gui_slots.. + "label[0,0;Register]".. + "list[current_name;shopregister;0,0.25;8;4]".. + "list[current_player;main;0,4;8,4;]"--]] + +-- Shop Register & Coin +dofile(minetest.get_modpath("shop") .. "/mapgen.lua") +dofile(minetest.get_modpath("shop") .. "/privs_shop.lua") +dofile(minetest.get_modpath("shop") .. "/register.lua") diff --git a/worldmods/shop/mapgen.lua b/worldmods/shop/mapgen.lua new file mode 100644 index 0000000..fbaebed --- /dev/null +++ b/worldmods/shop/mapgen.lua @@ -0,0 +1,44 @@ +-- More gold at lower depths. +minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_gold", + wherein = "default:stone", + clust_scarcity = 15 * 15 * 15, + clust_num_ores = 3, + clust_size = 2, + y_min = -255, + y_max = -64, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_gold", + wherein = "default:stone", + clust_scarcity = 13 * 13 * 13, + clust_num_ores = 5, + clust_size = 3, + y_min = -1023, + y_max = -256, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_gold", + wherein = "default:stone", + clust_scarcity = 11 * 11 * 11, + clust_num_ores = 7, + clust_size = 5, + y_min = -4095, + y_max = -1024, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_gold", + wherein = "default:stone", + clust_scarcity = 9 * 9 * 9, + clust_num_ores = 11, + clust_size = 7, + y_min = -31000, + y_max = -4096, +}) diff --git a/worldmods/shop/privs_shop.lua b/worldmods/shop/privs_shop.lua new file mode 100644 index 0000000..bc3ecc0 --- /dev/null +++ b/worldmods/shop/privs_shop.lua @@ -0,0 +1,168 @@ +-- Privs Shop + +-- Global privs shop price, settable by /shop +shop.price = 1 + +-- Formspec +function shop.setform(pos) + local spos = pos.x..","..pos.y..","..pos.z + local formspec = + "size[8,6]" .. + default.gui_bg .. + default.gui_bg_img .. + default.gui_slots .. + "label[0,0;Priv Shop]" .. + "label[2.45,0.25;Fly]" .. + "label[4.45,0.25;Fast]" .. + "list[nodemeta:" ..spos.. ";fly;2.5,0.75;1,1;]" .. + "list[nodemeta:" ..spos.. ";fast;4.5,0.75;1,1;]" .. + "item_image[2.5,0.75;1,1;shop:coin]" .. + "item_image[4.5,0.75;1,1;shop:coin]" .. + "label[2.45,1.75;" .. shop.price .. " sec/$]" .. + "label[4.45,1.75;" .. shop.price .. " sec/$]" .. + "list[current_player;main;0,2.25;8,4;]" + return formspec +end + +function shop.buy(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + + if listname == "fly" then + local count = stack:get_count() + inv:remove_item("fly", stack) + local name = player:get_player_name() + local time = count * shop.price + + local q = playereffects.get_player_effects(name) + for i=1, #q do + if q[i].effect_type_id == "fly" then + local countdown_fly = playereffects.get_remaining_effect_time(q[i].effect_id) + local effectid_fly = playereffects.apply_effect_type("fly", time + countdown_fly, player) + return + end + end + + local effectid_fly = playereffects.apply_effect_type("fly", time, player) + + elseif listname == "fast" then + local count = stack:get_count() + inv:remove_item("fast", stack) + local name = player:get_player_name() + local time = count * shop.price + + local q = playereffects.get_player_effects(name) + for i=1, #q do + if q[i].effect_type_id == "fast" then + local countdown_fast = playereffects.get_remaining_effect_time(q[i].effect_id) + local effectid_fast = playereffects.apply_effect_type("fast", time + countdown_fast, player) + return + end + end + + local effectid_fast = playereffects.apply_effect_type("fast", time, player) + end +end + +minetest.register_alias("shop:shop", "shop:privs") +minetest.register_node("shop:privs", { + description = "Privs Shop", + tiles = {"xdecor_barrel_top.png^shop_wings.png", + "xdecor_barrel_top.png", + "xdecor_barrel_top.png^shop_wings.png", + "xdecor_barrel_top.png^shop_wings.png", + "xdecor_barrel_top.png^shop_wings.png", + "xdecor_barrel_top.png^shop_wings.png"}, + is_ground_content = true, + groups = {cracky=2, choppy=3, oddly_breakable_by_hand=1}, + paramtype2 = "facedir", + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Shop for privs") + local inv = meta:get_inventory() + inv:set_size("fly", 1) + inv:set_size("fast", 1) + end, + on_rightclick = function(pos, node, clicker, itemstack) + minetest.show_formspec(clicker:get_player_name(), "shop:privs", shop.setform(pos)) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + shop.buy(pos, listname, index, stack, player) + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + local s = stack:get_name() + local c = stack:get_count() + if listname == "fly" then + if s == "shop:coin" then + return -1 + else + return 0 + end + elseif listname == "fast" then + if s == "shop:coin" then + return -1 + else + return 0 + end + else + return 0 + end + end +}) + +-- playereffects registration +playereffects.register_effect_type("fly", "Fly mode available", nil, {"fly"}, + function(player) + local playername = player:get_player_name() + local privs = minetest.get_player_privs(playername) + privs.fly = true + minetest.set_player_privs(playername, privs) + end, + function(effect, player) + local privs = minetest.get_player_privs(effect.playername) + privs.fly = nil + minetest.set_player_privs(effect.playername, privs) + end, + false, + false) + +playereffects.register_effect_type("fast", "Fast mode available", nil, {"fast"}, + function(player) + local playername = player:get_player_name() + local privs = minetest.get_player_privs(playername) + privs.fast = true + minetest.set_player_privs(playername, privs) + end, + function(effect, player) + local privs = minetest.get_player_privs(effect.playername) + privs.fast = nil + minetest.set_player_privs(effect.playername, privs) + end, + false, + false) + + +-- /shop chat command registration +minetest.register_chatcommand("shop", { + params = "", + privs = {server=true}, + description = "Adjust privs shop price", + func = function(name, param) + param = tonumber(param) + if param then + local price = math.floor(math.abs(param)) + if price < 60 then + shop.price = price + end + end + end +}) + +minetest.register_craft({ + output = "shop:privs", + recipe = { + {"group:wood", "default:mese", "group:wood"}, + {"group:wood", "default:goldblock", "group:wood"}, + {"group:wood", "default:diamondblock", "group:wood"} + } +}) diff --git a/worldmods/shop/register.lua b/worldmods/shop/register.lua new file mode 100644 index 0000000..a722d85 --- /dev/null +++ b/worldmods/shop/register.lua @@ -0,0 +1,193 @@ +local function get_register_formspec(pos) + local meta = minetest.get_meta(pos) + local spos = pos.x.. "," ..pos.y .. "," .. pos.z + local formspec = + "size[8,6.5]" .. + --default.gui_bg .. + default.gui_bg_img .. + default.gui_slots .. + "label[0,1;Sell]" .. + "label[3,1;For]" .. + "button[0,0;2,1;stock;Stock]" .. + "button[3,0;2,1;register;Register]" .. + "button_exit[7,0;1,1;exit;X]" .. + "button[7,1;1,1;ok;OK]" .. + "list[nodemeta:" .. spos .. ";sell;1,1;1,1;]" .. + "list[nodemeta:" .. spos .. ";buy;4,1;1,1;]" .. + "list[current_player;main;0,2.75;8,4;]" + return formspec +end + +local formspec_register = + "size[8,9]" .. + default.gui_bg .. + default.gui_bg_img .. + default.gui_slots .. + "label[0,0;Register]" .. + "list[current_name;register;0,0.75;8,4;]" .. + "list[current_player;main;0,5.25;8,4;]" .. + "listring[]" + +local formspec_stock = + "size[8,9]" .. + --default.gui_bg .. + default.gui_bg_img .. + default.gui_slots .. + "label[0,0;Stock]" .. + "list[current_name;stock;0,0.75;8,4;]" .. + "list[current_player;main;0,5.25;8,4;]" .. + "listring[]" + +minetest.register_privilege("shop_admin", "Shop administration and maintainence") + +minetest.register_node("shop:register", { + description = "Shop", + tiles = { + "shop_shop_topbottom.png", + "shop_shop_topbottom.png", + "shop_shop_side.png", + "shop_shop_side.png", + "shop_shop_side.png", + "shop_shop_front.png", + }, + groups = {choppy = 3, oddly_breakable_by_hand = 1}, + paramtype2 = "facedir", + after_place_node = function(pos, placer, itemstack, pointed_thing) + local meta = minetest.get_meta(pos) + local owner = placer:get_player_name() + + meta:set_string("owner", owner) + meta:set_string("infotext", "Shop (Owned by " .. owner .. ")") + meta:set_string("formspec", get_register_formspec(pos)) + + local inv = meta:get_inventory() + inv:set_size("buy", 1) + inv:set_size("sell", 1) + inv:set_size("stock", 8*4) + inv:set_size("register", 8*4) + end, + on_receive_fields = function(pos, formname, fields, sender) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local player = sender:get_player_name() + local inv = meta:get_inventory() + local s = inv:get_list("sell") + local b = inv:get_list("buy") + local stk = inv:get_list("stock") + local reg = inv:get_list("register") + local pinv = sender:get_inventory() + + if fields.register then + if player ~= owner and (not minetest.check_player_privs(player, "shop_admin")) then + minetest.chat_send_player(player, "Only the shop owner can open the register.") + return + else + minetest.show_formspec(player, "shop:shop", formspec_register) + end + elseif fields.stock then + if player ~= owner and (not minetest.check_player_privs(player, "shop_admin")) then + minetest.chat_send_player(player, "Only the shop owner can open the stock.") + return + else + minetest.show_formspec(player, "shop:shop", formspec_stock) + end + elseif fields.ok then + if inv:is_empty("sell") or + inv:is_empty("buy") or + (not inv:room_for_item("register", b[1])) then + minetest.chat_send_player(player, "Shop closed.") + return + end + + if (pinv:contains_item("main", b[1]) or + pinv:contains_item("funds", b[1])) and + inv:contains_item("stock", s[1]) and + pinv:room_for_item("main", s[1]) then + pinv:remove_item("main", b[1]) + inv:add_item("register", b[1]) + inv:remove_item("stock", s[1]) + pinv:add_item("main", s[1]) + else + minetest.chat_send_player(player, "No funds.") + end + end + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local inv = meta:get_inventory() + local s = inv:get_list("sell") + local n = stack:get_name() + local playername = player:get_player_name() + if playername ~= owner and + (not minetest.check_player_privs(playername, "shop_admin")) then + return 0 + else + return stack:get_count() + end + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local playername = player:get_player_name() + if playername ~= owner and + (not minetest.check_player_privs(playername, "shop_admin"))then + return 0 + else + return stack:get_count() + end + end, + allow_metadata_inventory_move = function(pos, _, _, _, _, count, player) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local playername = player:get_player_name() + if playername ~= owner and + (not minetest.check_player_privs(playername, "shop_admin")) then + return 0 + else + return count + end + end, + can_dig = function(pos, player) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local inv = meta:get_inventory() + return player:get_player_name() == owner and + inv:is_empty("register") and + inv:is_empty("stock") and + inv:is_empty("buy") and + inv:is_empty("sell") + end, + +}) + +minetest.register_craftitem("shop:coin", { + description = "Gold Coin", + inventory_image = "shop_coin.png", +}) + +-- Crafts & Craft Items +minetest.register_craft({ + output = "shop:coin 9", + recipe = { + {"default:gold_ingot"}, + } +}) + +minetest.register_craft({ + output = "default:gold_ingot", + recipe = { + {"shop:coin", "shop:coin", "shop:coin"}, + {"shop:coin", "shop:coin", "shop:coin"}, + {"shop:coin", "shop:coin", "shop:coin"} + } +}) + +minetest.register_craft({ + output = "shop:register", + recipe = { + {"group:wood", "group:wood", "group:wood"}, + {"group:wood", "default:goldblock", "group:wood"}, + {"group:wood", "group:wood", "group:wood"} + } +}) diff --git a/worldmods/shop/textures/shop_coin.png b/worldmods/shop/textures/shop_coin.png new file mode 100644 index 0000000..58f2500 Binary files /dev/null and b/worldmods/shop/textures/shop_coin.png differ diff --git a/worldmods/shop/textures/shop_shop_front.png b/worldmods/shop/textures/shop_shop_front.png new file mode 100644 index 0000000..48354a6 Binary files /dev/null and b/worldmods/shop/textures/shop_shop_front.png differ diff --git a/worldmods/shop/textures/shop_shop_side.png b/worldmods/shop/textures/shop_shop_side.png new file mode 100644 index 0000000..687fa30 Binary files /dev/null and b/worldmods/shop/textures/shop_shop_side.png differ diff --git a/worldmods/shop/textures/shop_shop_topbottom.png b/worldmods/shop/textures/shop_shop_topbottom.png new file mode 100644 index 0000000..fe9438a Binary files /dev/null and b/worldmods/shop/textures/shop_shop_topbottom.png differ diff --git a/worldmods/shop/textures/shop_wings.png b/worldmods/shop/textures/shop_wings.png new file mode 100644 index 0000000..c4e74f1 Binary files /dev/null and b/worldmods/shop/textures/shop_wings.png differ