mirror of
https://github.com/sys4-fr/server-nalc.git
synced 2024-12-27 11:10:37 +01:00
384 lines
16 KiB
Lua
384 lines
16 KiB
Lua
|
local cube = minetest.inventorycube
|
||
|
|
||
|
-- the content of the guide
|
||
|
local guide_infos = {
|
||
|
{
|
||
|
description = "mushroom",
|
||
|
{"text", "You can find the nether mushroom on the ground of the nether and on netherrack soil, it can be dug by hand."},
|
||
|
{"y", -0.3},
|
||
|
{"image", {1, 1, "riesenpilz_nether_shroom_side.png"}},
|
||
|
{"y", 0.2},
|
||
|
{"text", "If you drop it without holding aux1 (the fast key), you can split it into its stem and head:"},
|
||
|
{"image", {1, 1, "nether_shroom_top.png", 1}},
|
||
|
{"image", {1, 1, "nether_shroom_stem.png"}},
|
||
|
{"y", 0.2},
|
||
|
{"text", "You can get more mushrooms by using a netherrack soil:\n"..
|
||
|
"1. search a dark place and, if necessary, place netherrack with air about it\n"..
|
||
|
"2. right click with cooked blood onto the netherrack to make it soiled\n"..
|
||
|
"3. right click onto the netherrack soil with a nether mushroom head to add some spores\n"..
|
||
|
"4. dig the mushroom which grew after some time to make place for another one"},
|
||
|
{"image", {1, 1, "riesenpilz_nether_shroom_side.png", 6, 0.12}},
|
||
|
{"y", 1},
|
||
|
{"image", {1, 1, "nether_netherrack.png^nether_netherrack_soil.png", 1.8}},
|
||
|
{"image", {1, 1, "nether_hotbed.png", 1.3, -0.4}},
|
||
|
{"image", {1, 1, "nether_netherrack.png^nether_netherrack_soil.png", 3.6}},
|
||
|
{"image", {1, 1, "nether_shroom_top.png", 3.1, -0.5}},
|
||
|
{"image", {1, 1, "nether_netherrack.png^nether_netherrack_soil.png", 6}},
|
||
|
{"image", {1, 1, "nether_netherrack.png"}},
|
||
|
},
|
||
|
{
|
||
|
description = "tools",
|
||
|
{"text", "You can craft 5 types of tools in the nether, which (except the mushroom pick) require sticks to be crafted:"},
|
||
|
{"y", 0.4},
|
||
|
{"image", {1, 1, "nether_pick_mushroom.png"}},
|
||
|
{"text", "strength: 1\n"..
|
||
|
"The mushroom pick needs mushroom stems and heads to be crafted."},
|
||
|
{"y", 0.2},
|
||
|
{"image", {1, 1, "nether_pick_wood.png"}},
|
||
|
{"text", "strength: 2\n"..
|
||
|
"The nether wood pick can be crafted with cooked nether blood wood."},
|
||
|
{"y", 0.2},
|
||
|
{"image", {1, 1, "nether_axe_netherrack.png", 1}},
|
||
|
{"image", {1, 1, "nether_shovel_netherrack.png", 2}},
|
||
|
{"image", {1, 1, "nether_sword_netherrack.png", 3}},
|
||
|
{"image", {1, 1, "nether_pick_netherrack.png"}},
|
||
|
{"text", "strength: 3\n"..
|
||
|
"The red netherrack tools can be crafted with usual netherrack."},
|
||
|
{"y", 0.2},
|
||
|
{"image", {1, 1, "nether_axe_netherrack_blue.png", 1}},
|
||
|
{"image", {1, 1, "nether_shovel_netherrack_blue.png", 2}},
|
||
|
{"image", {1, 1, "nether_sword_netherrack_blue.png", 3}},
|
||
|
{"image", {1, 1, "nether_pick_netherrack_blue.png"}},
|
||
|
{"text", "strength: 3\n"..
|
||
|
"The blue netherrack tools can be crafted with blue netherrack."},
|
||
|
{"y", 0.2},
|
||
|
{"image", {1, 1, "nether_axe_white.png", 1}},
|
||
|
{"image", {1, 1, "nether_shovel_white.png", 2}},
|
||
|
{"image", {1, 1, "nether_sword_white.png", 3}},
|
||
|
{"image", {1, 1, "nether_pick_white.png"}},
|
||
|
{"text", "strength: 3\n"..
|
||
|
"The siwtonic tools can be crafted with the siwtonic ore."},
|
||
|
},
|
||
|
{
|
||
|
description = "blood structures",
|
||
|
{"text", "You can find blood structures on the ground and dig their nodes even with the bare hand."},
|
||
|
{"y", 0.2},
|
||
|
{"text", "One contains 4 kinds of blocks:"},
|
||
|
{"image", {1, 1, cube("nether_blood.png"), 1}},
|
||
|
{"image", {1, 1,
|
||
|
cube("nether_blood_top.png", "nether_blood.png^nether_blood_side.png", "nether_blood.png^nether_blood_side.png"),
|
||
|
2}},
|
||
|
{"image", {1, 1, "nether_fruit.png", 3}},
|
||
|
{"image", {1, 1, cube("nether_blood_stem_top.png", "nether_blood_stem.png", "nether_blood_stem.png")}},
|
||
|
{"text", "the blood stem, blood, blood head and nether fruit"},
|
||
|
{"y", 0.2},
|
||
|
{"text", "You can craft the stem to 4 blood wood:"},
|
||
|
{"image", {1, 1, cube("nether_wood.png")}},
|
||
|
{"y", 0.2},
|
||
|
{"text", "The 4 blood nodes can be cooked and, except blood wood, their blood can be extracted."},
|
||
|
},
|
||
|
{
|
||
|
description = "fruit",
|
||
|
{"text", "You can find the nether fruit at blood structures and dig it even with the bare hand."},
|
||
|
{"y", 0.05},
|
||
|
{"image", {1, 1, "nether_fruit.png"}},
|
||
|
{"text", "You can eat it to get a bit blood because of its acid effect:"},
|
||
|
{"image", {1, 1, "nether_blood_extracted.png"}},
|
||
|
{"y", 0.2},
|
||
|
{"text", "If you eat it at the right place inside a portal, you teleport instead of getting blood."},
|
||
|
{"y", 0.2},
|
||
|
{"text", "If you drop it without holding aux1 (the fast key), you can split it into its fruit and leaf:"},
|
||
|
{"image", {1, 1, "nether_fruit_leaf.png", 1}},
|
||
|
{"image", {1, 1, "nether_fruit_no_leaf.png"}},
|
||
|
{"y", 0.2},
|
||
|
{"text", "9 fruit leaves can be crafted to a fruit leaves block and the fruit without leaf can be used for crafting a nether pearl."},
|
||
|
{"y", 0.2},
|
||
|
{"image", {1, 1, cube("nether_fruit_leaves.png")}},
|
||
|
{"text", "fruit leaves block"},
|
||
|
},
|
||
|
{
|
||
|
description = "cooking",
|
||
|
{"text", "To get a furnace you need to dig at least 8 netherrack bricks.\n"..
|
||
|
"They can be found at pyramid like constructions and require at least a strength 1 nether pick to be dug.\n"..
|
||
|
"For crafting the furnace, use the netherrack bricks like cobble:"},
|
||
|
{"y", 0.2},
|
||
|
{"image", {0.5, 0.5, cube("nether_netherrack_brick.png"), 0.5}},
|
||
|
{"image", {0.5, 0.5, cube("nether_netherrack_brick.png"), 1}},
|
||
|
{"image", {0.5, 0.5, cube("nether_netherrack_brick.png")}},
|
||
|
{"image", {0.5, 0.5, cube("nether_netherrack_brick.png"), 1}},
|
||
|
{"image", {0.5, 0.5, cube("nether_netherrack_brick.png")}},
|
||
|
{"image", {0.5, 0.5, cube("nether_netherrack_brick.png"), 0.5}},
|
||
|
{"image", {0.5, 0.5, cube("nether_netherrack_brick.png"), 1}},
|
||
|
{"image", {0.5, 0.5, cube("nether_netherrack_brick.png")}},
|
||
|
{"y", 0.2},
|
||
|
{"text", "To begin cooking stuff, you can use a mushroom or fruit.\n"..
|
||
|
"After that it's recommended to use cooked blood nodes."},
|
||
|
{"y", 0.2},
|
||
|
{"text", "Some nether items can be cooked:"},
|
||
|
{"y", 0.1},
|
||
|
{"image", {1, 1, cube("nether_blood_stem_top_cooked.png", "nether_blood_stem_cooked.png", "nether_blood_stem_cooked.png"), 0.35}},
|
||
|
{"image", {1, 1, cube("nether_blood_cooked.png"), 1.6}},
|
||
|
{"image", {1, 1,
|
||
|
cube("nether_blood_top_cooked.png", "nether_blood_cooked.png^nether_blood_side_cooked.png", "nether_blood_cooked.png^nether_blood_side_cooked.png"),
|
||
|
2.9}},
|
||
|
{"image", {1, 1, cube("nether_wood_cooked.png"), 4.3}},
|
||
|
{"y", 1},
|
||
|
{"text", "cooked blood stem, cooked blood, cooked blood head, cooked blood wood,"},
|
||
|
{"y", 0.2},
|
||
|
{"image", {1, 1, "nether_hotbed.png", 0.3}},
|
||
|
{"image", {1, 1, "nether_pearl.png", 2}},
|
||
|
{"y", 1},
|
||
|
{"text", "cooked extracted blood and nether pearl"},
|
||
|
},
|
||
|
{
|
||
|
description = "extractor",
|
||
|
{"text", "Here you can find out information about the nether extractor."},
|
||
|
{"y", 0.4},
|
||
|
{"text", "Here you can see its craft recipe:"},
|
||
|
{"y", 0.2},
|
||
|
{"image", {0.5, 0.5, cube("nether_blood_top_cooked.png", "nether_blood_cooked.png^nether_blood_side_cooked.png", "nether_blood_cooked.png^nether_blood_side_cooked.png"), 0.5}},
|
||
|
{"image", {0.5, 0.5, cube("nether_netherrack_brick.png"), 1}},
|
||
|
{"image", {0.5, 0.5, cube("nether_netherrack_brick.png")}},
|
||
|
{"image", {0.5, 0.5, cube("nether_blood_extractor.png"), 2.5}},
|
||
|
{"image", {0.5, 0.5, "nether_shroom_stem.png", 0.5}},
|
||
|
{"image", {0.5, 0.5, cube("nether_blood_cooked.png"), 1}},
|
||
|
{"image", {0.5, 0.5, cube("nether_blood_cooked.png")}},
|
||
|
{"image", {0.5, 0.5, cube("nether_blood_stem_top_cooked.png", "nether_blood_stem_cooked.png", "nether_blood_stem_cooked.png"), 0.5}},
|
||
|
{"image", {0.5, 0.5, cube("nether_netherrack_brick.png"), 1}},
|
||
|
{"image", {0.5, 0.5, cube("nether_netherrack_brick.png")}},
|
||
|
{"y", 0.2},
|
||
|
{"text", "You can extract blood from the blood nodes you get from the blood structure.\n"..
|
||
|
"You can also get blood with a nether fruit."},
|
||
|
{"y", 0.2},
|
||
|
{"text", "So you can use it:\n"..
|
||
|
"1. place it somewhere\n"..
|
||
|
"2. place blood blocks next to it (4 or less)\n"..
|
||
|
"3. right click with extracted blood onto it to power it\n"..
|
||
|
"4. take the new extracted blood and dig the extracted nodes"},
|
||
|
{"y", 0.2},
|
||
|
{"text", "Example (view from the top):"},
|
||
|
{"y", 0.88},
|
||
|
{"image", {1, 1, "nether_blood_stem_top.png", 0.82, -0.88}},
|
||
|
{"image", {1, 1, "nether_blood.png", 1.63}},
|
||
|
{"image", {1, 1, "nether_blood_extractor.png", 0.82}},
|
||
|
{"image", {1, 1, "nether_blood_stem_top_empty.png", 3.82, -0.88}},
|
||
|
{"image", {1, 1, "nether_blood_empty.png", 4.63}},
|
||
|
{"image", {1, 1, "nether_blood_empty.png", 3.001}},
|
||
|
{"image", {1, 1, "nether_blood_extractor.png", 3.82}},
|
||
|
{"image", {1, 1, "nether_blood.png"}},
|
||
|
{"image", {1, 1, "nether_blood.png", 0.82, -0.12}},
|
||
|
{"image", {1, 1, "nether_blood_empty.png", 3.82, -0.12}},
|
||
|
{"y", 1.2},
|
||
|
{"text", "The empty blood stem can be crafted to empty nether wood, which can be crafted to nether sticks."},
|
||
|
},
|
||
|
{
|
||
|
description = "ores",
|
||
|
{"text", "You can find 5 types of ores:"},
|
||
|
{"y", 0.4},
|
||
|
{"image", {1, 1, cube("nether_netherrack_black.png"), 4}},
|
||
|
{"image", {1, 1, cube("nether_netherrack.png")}},
|
||
|
{"text", "The red netherrack is generated like stone and the black netherrack is generated like gravel.\n"..
|
||
|
"Both require at least a strength 2 nether pick to be dug."},
|
||
|
{"y", 0.2},
|
||
|
{"image", {1, 1, cube("nether_white.png"), 4}},
|
||
|
{"image", {1, 1, cube("nether_netherrack_blue.png")}},
|
||
|
{"text", "The blue netherrack is generated like diamond ore and the siwtonic ore is generated like mese blocks.\n"..
|
||
|
"Both require at least a strength 3 nether pick to be dug."},
|
||
|
{"y", 0.2},
|
||
|
{"image", {1, 1, cube("nether_netherrack_tiled.png"), 4}},
|
||
|
{"image", {1, 1, cube("glow_stone.png")}},
|
||
|
{"text", "The glow stone can be used for lighting and the tiled netherrack is generated like coal ore.\n"..
|
||
|
"Glow stone requires at least a strength 1 pick to be dug.\n"..
|
||
|
"Tiled netherrack requires at least a strength 2 nether pick to be dug."},
|
||
|
},
|
||
|
{
|
||
|
description = "vines",
|
||
|
{"text", "The nether vines can be fed with blood.\n"..
|
||
|
"They can be dug by hand and drop nether children."},
|
||
|
{"image", {1, 1, "nether_vine.png"}},
|
||
|
{"y", 0.2},
|
||
|
{"text", "To let a nether child grow to a blood structure, place it at a dark place onto a blood structure head node."},
|
||
|
{"image", {1, 1, "nether_sapling.png"}},
|
||
|
{"y", -0.11},
|
||
|
{"image", {1, 1, "nether_blood.png^nether_blood_side.png"}},
|
||
|
},
|
||
|
{
|
||
|
description = "pearl",
|
||
|
{"text", "The nether pearl can be thrown for teleporting.\n"..
|
||
|
"So cou can get one:"},
|
||
|
{"y", 0.4},
|
||
|
{"text", "At first you need to craft 2 mushroom heads and 1 nether fruit without leaf together:"},
|
||
|
{"image", {1, 1, "nether_shroom_top.png"}},
|
||
|
{"image", {1, 1, "nether_fim.png", 3}},
|
||
|
{"image", {1, 1, "nether_fruit_no_leaf.png"}},
|
||
|
{"image", {1, 1, "nether_shroom_top.png"}},
|
||
|
{"y", 0.2},
|
||
|
{"text", "Then you need to put the result into the furnance to cook it to a nether pearl:"},
|
||
|
{"image", {1, 1, "nether_pearl.png"}},
|
||
|
},
|
||
|
{
|
||
|
description = "bricks",
|
||
|
{"text", "You can craft bricks of red, black and blue netherrack."},
|
||
|
{"y", 0.4},
|
||
|
{"image", {1, 1, cube("nether_netherrack_brick_black.png"), 1}},
|
||
|
{"image", {1, 1, cube("nether_netherrack_brick_blue.png"), 2}},
|
||
|
{"image", {1, 1, cube("nether_netherrack_brick.png")}},
|
||
|
{"y", 0.2},
|
||
|
{"text", "These bricks require at least a strength 1 nether pick to be dug."},
|
||
|
{"y", 0.2},
|
||
|
{"text", "Because the crafing recipe of bricks is well known, it's not shown here."},
|
||
|
},
|
||
|
{
|
||
|
description = "portal",
|
||
|
{"text", "Here you can find out how to built the nether portal."},
|
||
|
{"y", 0.4},
|
||
|
{"text", "A nether portal requires following nodes:"},
|
||
|
{"y", 0.05},
|
||
|
{"text", "21 empty nether wooden planks\n"..
|
||
|
"12 blue netherrack bricks\n"..
|
||
|
"12 black netherrack\n"..
|
||
|
"8 red netherrack\n"..
|
||
|
"8 cooked nether wood\n"..
|
||
|
"4 nether fruits\n"..
|
||
|
"2 siwtonic blocks"},
|
||
|
{"y", 0.2},
|
||
|
{"text", "It should look approximately like this one:"},
|
||
|
{"image", {5.625, 6, "nether_teleporter.png", 0, -1.5}},
|
||
|
{"y", 5.5},
|
||
|
{"text", "You can activate it by standing in the middle on a siwtonic block and eating a nether fruit.\n"..
|
||
|
"Don't forget to take enough stuff with you to be able to build a portal back."},
|
||
|
},
|
||
|
{
|
||
|
description = "nether forest",
|
||
|
{"text", "The nether forest is generated in caves above the usual nether."},
|
||
|
{"y", 0.2},
|
||
|
{"text", "There you can find some plants:"},
|
||
|
{"y", 0.2},
|
||
|
{"image", {1, 1, "nether_grass_middle.png", 1}},
|
||
|
{"image", {1, 1, "nether_grass_big.png", 2}},
|
||
|
{"image", {1, 1, "nether_grass_small.png"}},
|
||
|
{"y", 0.2},
|
||
|
{"text", "The nether forest grass can be used to get paper.\n"..
|
||
|
"Just dig it, put the grass into the furnace and craft paper out of the dried grass.\n"..
|
||
|
"The recipe is similar to the one of crafting paper with papyrus."},
|
||
|
{"y", 0.2},
|
||
|
{"image", {1, 1, cube("nether_tree_top.png", "nether_tree.png", "nether_tree.png")}},
|
||
|
{"text", "Nether trunks can be found at nether trees, you can craft nether wood out of them."},
|
||
|
{"y", 0.2},
|
||
|
{"image", {1, 1, "nether_glowflower.png"}},
|
||
|
{"text", "Currently this flower can be used for lighting and decoration."},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
-- the size of guide pages
|
||
|
local guide_size = {x=15, y=10, cx=0.1, cy=-0.2}
|
||
|
|
||
|
-- informations about settings and ...
|
||
|
local formspec_offset = {x=0.25, y=0.55}
|
||
|
local font_size
|
||
|
if minetest.is_singleplayer() then
|
||
|
font_size = tonumber(minetest.setting_get("font_size")) or 13
|
||
|
else
|
||
|
font_size = 13
|
||
|
end
|
||
|
guide_size.fx = math.floor((guide_size.x-2*(guide_size.cx+formspec_offset.x))*font_size)
|
||
|
guide_size.fy = font_size/65
|
||
|
|
||
|
-- the default guide formspecs
|
||
|
local guide_forms = {
|
||
|
contents = "size[3,"..(#guide_infos+1)*0.5 ..";]label["..guide_size.cx+0.8 ..","..guide_size.cy..";Contents:]",
|
||
|
}
|
||
|
|
||
|
-- change the infos to formspecs
|
||
|
for n,data in ipairs(guide_infos) do
|
||
|
local form = ""
|
||
|
local y = 0
|
||
|
local x = guide_size.cx
|
||
|
for _,i in ipairs(data) do
|
||
|
local typ, content = unpack(i)
|
||
|
if typ == "y" then
|
||
|
y = y+content
|
||
|
elseif typ == "x" then
|
||
|
x = math.max(x, content)
|
||
|
elseif typ == "text" then
|
||
|
local tab = minetest.splittext(content, guide_size.fx)
|
||
|
local l = guide_size.cx
|
||
|
for _,str in ipairs(tab) do
|
||
|
form = form.."label["..guide_size.cx..","..guide_size.cy+y..";"..str.."]"
|
||
|
y = y+guide_size.fy
|
||
|
l = math.max(l, #str)
|
||
|
end
|
||
|
x = math.max(x, l/font_size)
|
||
|
elseif typ == "image" then
|
||
|
local w, h, texture_name, px, py = unpack(content)
|
||
|
if not px then
|
||
|
form = form.."image["..guide_size.cx..","..guide_size.cy+y+h*0.3 ..";"..w..","..h..";"..texture_name.."]"
|
||
|
y = y+h
|
||
|
else
|
||
|
px = guide_size.cx+px
|
||
|
py = py or 0
|
||
|
form = form.."image["..px..","..
|
||
|
guide_size.cy+y+h*0.3+py ..";"..w..","..h..";"..texture_name.."]"
|
||
|
x = math.max(x, px+w)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
form = "size["..x..","..y+1 ..";]"..form.."button["..x/2-0.5 ..","..y ..";1,2;quit;back]"
|
||
|
guide_forms[n] = {data.description, form}
|
||
|
end
|
||
|
|
||
|
local desc_tab = {}
|
||
|
for n,i in ipairs(guide_forms) do
|
||
|
desc_tab[i[1]] = n
|
||
|
end
|
||
|
|
||
|
-- creates contents formspec
|
||
|
local y = 0
|
||
|
for y,i in ipairs(guide_forms) do
|
||
|
local desc, form = unpack(i)
|
||
|
local s = #desc*1.3/font_size+0.3
|
||
|
guide_forms.contents = guide_forms.contents.."button["..guide_size.cx+math.random()..","..guide_size.cy+y/2 ..";"..s..",1;name;"..desc.."]"
|
||
|
end
|
||
|
|
||
|
-- shows the contents of the formspec
|
||
|
local function show_guide(pname)
|
||
|
minetest.show_formspec(pname, "nether_guide_contents", guide_forms["contents"])
|
||
|
end
|
||
|
|
||
|
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||
|
if formname == "nether_guide_contents" then
|
||
|
local fname = fields.name
|
||
|
local pname = player:get_player_name()
|
||
|
if fname
|
||
|
and pname then
|
||
|
minetest.show_formspec(pname, "nether_guide", guide_forms[desc_tab[fname]][2])
|
||
|
end
|
||
|
elseif formname == "nether_guide" then
|
||
|
local fname = fields.quit
|
||
|
local pname = player:get_player_name()
|
||
|
if fname
|
||
|
and pname then
|
||
|
minetest.show_formspec(pname, "nether_guide_contents", guide_forms["contents"])
|
||
|
end
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
minetest.register_chatcommand("nether_help", {
|
||
|
params = "",
|
||
|
description = "Shows a nether guide",
|
||
|
func = function(name)
|
||
|
local player = minetest.get_player_by_name(name)
|
||
|
if not player then
|
||
|
minetest.chat_send_player(name, "Something went wrong.")
|
||
|
return false
|
||
|
end
|
||
|
if player:getpos().y > nether.start then
|
||
|
minetest.chat_send_player(name, "Usually you don't neet this guide here. You can view it in the nether.")
|
||
|
return false
|
||
|
end
|
||
|
minetest.chat_send_player(name, "Showing guide...")
|
||
|
show_guide(name)
|
||
|
return true
|
||
|
end
|
||
|
})
|