Improve techage:ta4_wind_turbine checks
This commit is contained in:
parent
b632ee6212
commit
efc364bbfc
@ -20,6 +20,7 @@ local function chat_message(player_name, msg)
|
|||||||
if player_name then
|
if player_name then
|
||||||
minetest.chat_send_player(player_name, S("[TA4 Wind Turbine]").." "..msg)
|
minetest.chat_send_player(player_name, S("[TA4 Wind Turbine]").." "..msg)
|
||||||
end
|
end
|
||||||
|
return false, msg
|
||||||
end
|
end
|
||||||
|
|
||||||
-- num_turbines is the mx number of valid wind turbines. In the case of a tool
|
-- num_turbines is the mx number of valid wind turbines. In the case of a tool
|
||||||
@ -29,20 +30,17 @@ function techage.valid_place_for_windturbine(pos, player_name, num_turbines)
|
|||||||
|
|
||||||
-- Check if occean (only for tool)
|
-- Check if occean (only for tool)
|
||||||
if num_turbines == 0 and pos.y ~= 1 then
|
if num_turbines == 0 and pos.y ~= 1 then
|
||||||
chat_message(player_name, S("This is not the surface of the ocean!"))
|
return chat_message(player_name, S("This is not the surface of the ocean!"))
|
||||||
return false
|
|
||||||
end
|
end
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
if num_turbines == 0 and node.name ~= "default:water_source" then
|
if num_turbines == 0 and node.name ~= "default:water_source" then
|
||||||
chat_message(player_name, S("This is no ocean water!"))
|
return chat_message(player_name, S("This is no ocean water!"))
|
||||||
return false
|
|
||||||
end
|
end
|
||||||
local data = minetest.get_biome_data({x=pos.x, y=-2, z=pos.z})
|
local data = minetest.get_biome_data({x=pos.x, y=-2, z=pos.z})
|
||||||
if data then
|
if data then
|
||||||
local name = minetest.get_biome_name(data.biome)
|
local name = minetest.get_biome_name(data.biome)
|
||||||
if not string.find(name, "ocean") then
|
if not string.find(name, "ocean") then
|
||||||
chat_message(player_name, S("This is a").." "..name.." "..S("biome and no ocean!"))
|
return chat_message(player_name, S("This is a").." "..name.." "..S("biome and no ocean!"))
|
||||||
return false
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- check the space over ocean
|
-- check the space over ocean
|
||||||
@ -51,9 +49,8 @@ function techage.valid_place_for_windturbine(pos, player_name, num_turbines)
|
|||||||
num = #minetest.find_nodes_in_area(pos1, pos2, {"air", "ignore"})
|
num = #minetest.find_nodes_in_area(pos1, pos2, {"air", "ignore"})
|
||||||
if num < (41 * 41 * 21 * 0.9) then
|
if num < (41 * 41 * 21 * 0.9) then
|
||||||
techage.mark_region(player_name, pos1, pos2, "")
|
techage.mark_region(player_name, pos1, pos2, "")
|
||||||
chat_message(player_name,
|
return chat_message(player_name,
|
||||||
S("Here is not enough wind (A free air space of 41x41x21 m is necessary)!"))
|
S("Here is not enough wind\n(A free air space of 41x41x21 m is necessary)!"))
|
||||||
return false
|
|
||||||
end
|
end
|
||||||
-- Check for water surface (occean)
|
-- Check for water surface (occean)
|
||||||
pos1 = {x=pos.x-20, y=1, z=pos.z-20}
|
pos1 = {x=pos.x-20, y=1, z=pos.z-20}
|
||||||
@ -63,8 +60,7 @@ function techage.valid_place_for_windturbine(pos, player_name, num_turbines)
|
|||||||
|
|
||||||
if num < (41*41 * 0.8) then
|
if num < (41*41 * 0.8) then
|
||||||
techage.mark_region(player_name, pos1, pos2, "")
|
techage.mark_region(player_name, pos1, pos2, "")
|
||||||
chat_message(player_name, S("Here is not enough water (41x41 m)!"))
|
return chat_message(player_name, S("Here is not enough water (41x41 m)!"))
|
||||||
return false
|
|
||||||
end
|
end
|
||||||
-- Check for next wind turbine
|
-- Check for next wind turbine
|
||||||
pos1 = {x=pos.x-13, y=2, z=pos.z-13}
|
pos1 = {x=pos.x-13, y=2, z=pos.z-13}
|
||||||
@ -73,13 +69,12 @@ function techage.valid_place_for_windturbine(pos, player_name, num_turbines)
|
|||||||
num = #minetest.find_nodes_in_area(pos1, pos2, {"techage:ta4_wind_turbine"})
|
num = #minetest.find_nodes_in_area(pos1, pos2, {"techage:ta4_wind_turbine"})
|
||||||
if num > num_turbines then
|
if num > num_turbines then
|
||||||
techage.mark_region(player_name, pos1, pos2, "")
|
techage.mark_region(player_name, pos1, pos2, "")
|
||||||
chat_message(player_name, S("The next wind turbines is too close!"))
|
return chat_message(player_name, S("The next wind turbines is too close!"))
|
||||||
return false
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if num_turbines == 0 then
|
if num_turbines == 0 then
|
||||||
chat_message(player_name, minetest.pos_to_string(pos).." "..
|
chat_message(player_name, minetest.pos_to_string(pos).." "..
|
||||||
S("is a suitable place for a wind turbine!"))
|
S("is a suitable place for a wind turbine!"))
|
||||||
end
|
end
|
||||||
return true
|
return true, "ok"
|
||||||
end
|
end
|
||||||
|
@ -1147,7 +1147,9 @@ techage.manual_DE.aText = {
|
|||||||
"\n"..
|
"\n"..
|
||||||
"\n",
|
"\n",
|
||||||
"Der Windkraftanlagenblock (Rotor) ist das Herzstück der Windkraftanlage. Dieser Block muss oben auf den Mast gesetzt werden. Idealerweise auf Y = 15\\, dann bleibst du noch gerade innerhalb eines Map-/Forceload-Blocks.\n"..
|
"Der Windkraftanlagenblock (Rotor) ist das Herzstück der Windkraftanlage. Dieser Block muss oben auf den Mast gesetzt werden. Idealerweise auf Y = 15\\, dann bleibst du noch gerade innerhalb eines Map-/Forceload-Blocks.\n"..
|
||||||
"Sofern alle Bedingungen erfüllt sind\\, erscheinen beim Setzen dieses Blocks auch automatisch die Rotorblätter (Flügel). Anderenfalls wird dir eine Fehlermeldung angezeigt.\n"..
|
"Nach dem Setzen des Blocks wird ein Check durchgeführt\\, ob alle Bedingungen für den Betrieb der Windkraftanlage erfüllt sind. Sofern alle Bedingungen erfüllt sind\\, erscheinen beim Setzen dieses Blocks auch automatisch die Rotorblätter (Flügel). Anderenfalls wird dir eine Fehlermeldung angezeigt. \n"..
|
||||||
|
"\n"..
|
||||||
|
"Durch Schlagen auf den Block kann der Check wiederholt werden.\n"..
|
||||||
"\n"..
|
"\n"..
|
||||||
"\n"..
|
"\n"..
|
||||||
"\n",
|
"\n",
|
||||||
|
@ -1124,7 +1124,9 @@ techage.manual_EN.aText = {
|
|||||||
"\n"..
|
"\n"..
|
||||||
"\n",
|
"\n",
|
||||||
"The wind turbine block (rotor) is the heart of the wind turbine. This block must be placed on top of the mast. Ideally at Y = 15\\, then you just stay within a map / forceload block.\n"..
|
"The wind turbine block (rotor) is the heart of the wind turbine. This block must be placed on top of the mast. Ideally at Y = 15\\, then you just stay within a map / forceload block.\n"..
|
||||||
"If all conditions are met\\, the rotor blades appear automatically when this block is set. Otherwise you will see an error message.\n"..
|
"After the block has been set\\, a check is carried out to determine whether all conditions for the operation of the wind turbine have been met. If all conditions are met\\, the rotor blades (wings) appear automatically when this block is set. Otherwise you will get an error message.\n"..
|
||||||
|
"\n"..
|
||||||
|
"The check can be repeated by hitting the block. \n"..
|
||||||
"\n"..
|
"\n"..
|
||||||
"\n"..
|
"\n"..
|
||||||
"\n",
|
"\n",
|
||||||
|
@ -1050,7 +1050,7 @@ This is not the surface of the ocean!=Das ist nicht die Meeresoberfläche!
|
|||||||
This is no ocean water!= Dies ist kein Meerwasser!
|
This is no ocean water!= Dies ist kein Meerwasser!
|
||||||
This is a=Dies ist ein
|
This is a=Dies ist ein
|
||||||
biome and no ocean!=Biom und keine Meer (ocean)!
|
biome and no ocean!=Biom und keine Meer (ocean)!
|
||||||
Here is not enough wind (A free air space of 41x41x21 m is necessary)!=Hier ist nicht genug Wind (Ein freier Luftraum von 41x41x21 m ist notwendig)!
|
Here is not enough wind@n(A free air space of 41x41x21 m is necessary)!=Hier ist nicht genug Wind@n(Ein freier Luftraum von 41x41x21 m ist notwendig)!
|
||||||
Here is not enough water (41x41 m)!=Hier ist nicht genug Wasser (41x41 m)!
|
Here is not enough water (41x41 m)!=Hier ist nicht genug Wasser (41x41 m)!
|
||||||
The next wind turbines is too close!= Die nächste Windkraftanlagen iat zu nahe!
|
The next wind turbines is too close!= Die nächste Windkraftanlagen iat zu nahe!
|
||||||
is a suitable place for a wind turbine!=ist ein geeigneter Ort für eine Windkraftanlage!
|
is a suitable place for a wind turbine!=ist ein geeigneter Ort für eine Windkraftanlage!
|
||||||
|
@ -23,7 +23,9 @@ Die Windkraftanlage liefert eine Leistung von 70 ku, aber dies nur 8 Stunden am
|
|||||||
### TA4 Windkraftanlage / Wind Turbine
|
### TA4 Windkraftanlage / Wind Turbine
|
||||||
|
|
||||||
Der Windkraftanlagenblock (Rotor) ist das Herzstück der Windkraftanlage. Dieser Block muss oben auf den Mast gesetzt werden. Idealerweise auf Y = 15, dann bleibst du noch gerade innerhalb eines Map-/Forceload-Blocks.
|
Der Windkraftanlagenblock (Rotor) ist das Herzstück der Windkraftanlage. Dieser Block muss oben auf den Mast gesetzt werden. Idealerweise auf Y = 15, dann bleibst du noch gerade innerhalb eines Map-/Forceload-Blocks.
|
||||||
Sofern alle Bedingungen erfüllt sind, erscheinen beim Setzen dieses Blocks auch automatisch die Rotorblätter (Flügel). Anderenfalls wird dir eine Fehlermeldung angezeigt.
|
Nach dem Setzen des Blocks wird ein Check durchgeführt, ob alle Bedingungen für den Betrieb der Windkraftanlage erfüllt sind. Sofern alle Bedingungen erfüllt sind, erscheinen beim Setzen dieses Blocks auch automatisch die Rotorblätter (Flügel). Anderenfalls wird dir eine Fehlermeldung angezeigt.
|
||||||
|
|
||||||
|
Durch Schlagen auf den Block kann der Check wiederholt werden.
|
||||||
|
|
||||||
[ta4_windturbine|image]
|
[ta4_windturbine|image]
|
||||||
|
|
||||||
|
@ -23,7 +23,9 @@ The wind turbine delivers 70 ku, but only 8 hours a day (see above).
|
|||||||
### TA4 Wind Turbine
|
### TA4 Wind Turbine
|
||||||
|
|
||||||
The wind turbine block (rotor) is the heart of the wind turbine. This block must be placed on top of the mast. Ideally at Y = 15, then you just stay within a map / forceload block.
|
The wind turbine block (rotor) is the heart of the wind turbine. This block must be placed on top of the mast. Ideally at Y = 15, then you just stay within a map / forceload block.
|
||||||
If all conditions are met, the rotor blades appear automatically when this block is set. Otherwise you will see an error message.
|
After the block has been set, a check is carried out to determine whether all conditions for the operation of the wind turbine have been met. If all conditions are met, the rotor blades (wings) appear automatically when this block is set. Otherwise you will get an error message.
|
||||||
|
|
||||||
|
The check can be repeated by hitting the block.
|
||||||
|
|
||||||
[ta4_windturbine|image]
|
[ta4_windturbine|image]
|
||||||
|
|
||||||
|
@ -29,8 +29,6 @@ local power = techage.power
|
|||||||
|
|
||||||
local Rotors = {}
|
local Rotors = {}
|
||||||
|
|
||||||
local MAX_NUM_FOREIGN_NODES = 50
|
|
||||||
|
|
||||||
local Face2Dir = {[0]=
|
local Face2Dir = {[0]=
|
||||||
{x=0, y=0, z=1},
|
{x=0, y=0, z=1},
|
||||||
{x=1, y=0, z=0},
|
{x=1, y=0, z=0},
|
||||||
@ -48,44 +46,51 @@ local function pos_and_yaw(pos, param2)
|
|||||||
return pos, {x=0, y=yaw, z=0}
|
return pos, {x=0, y=yaw, z=0}
|
||||||
end
|
end
|
||||||
|
|
||||||
local function add_rotor(pos, nvm, player_name)
|
local function check_rotor(pos, nvm)
|
||||||
nvm.error = false
|
local resp, err = techage.valid_place_for_windturbine(pos, nil, 1)
|
||||||
|
if not resp then
|
||||||
if not techage.valid_place_for_windturbine(pos, player_name, 1) then
|
M(pos):set_string("infotext", S("TA4 Wind Turbine")..": "..err)
|
||||||
nvm.error = true
|
nvm.error = true
|
||||||
M(pos):set_string("infotext", S("TA4 Wind Turbine")..": "..S("Not suitable position!"))
|
return false
|
||||||
return
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local hash = minetest.hash_node_position(pos)
|
|
||||||
if not Rotors[hash] then
|
|
||||||
local node = minetest.get_node(pos)
|
|
||||||
local npos, yaw = pos_and_yaw(pos, node.param2)
|
|
||||||
local obj = minetest.add_entity(npos, "techage:rotor_ent")
|
|
||||||
obj:set_animation({x = 0, y = 119}, 0, 0, true)
|
|
||||||
obj:set_rotation(yaw)
|
|
||||||
Rotors[hash] = obj
|
|
||||||
end
|
|
||||||
|
|
||||||
local own_num = M(pos):get_string("node_number") or ""
|
|
||||||
M(pos):set_string("infotext", S("TA4 Wind Turbine").." "..own_num)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function start_rotor(pos, nvm)
|
|
||||||
local npos = techage.get_pos(pos, "F")
|
local npos = techage.get_pos(pos, "F")
|
||||||
local node = techage.get_node_lvm(npos)
|
local node = techage.get_node_lvm(npos)
|
||||||
if node.name ~= "techage:ta4_wind_turbine_nacelle" then
|
if node.name ~= "techage:ta4_wind_turbine_nacelle" then
|
||||||
M(pos):set_string("infotext", S("TA4 Wind Turbine").." "..S("Nacelle is missing"))
|
M(pos):set_string("infotext", S("TA4 Wind Turbine").." "..S("Nacelle is missing"))
|
||||||
nvm.error = true
|
nvm.error = true
|
||||||
return
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
nvm.providing = true
|
local own_num = M(pos):get_string("node_number") or ""
|
||||||
nvm.delivered = 0
|
M(pos):set_string("infotext", S("TA4 Wind Turbine").." "..own_num)
|
||||||
power.generator_start(pos, Cable, CYCLE_TIME, 5)
|
nvm.error = false
|
||||||
local hash = minetest.hash_node_position(pos)
|
return true
|
||||||
if Rotors[hash] then
|
end
|
||||||
Rotors[hash]:set_animation_frame_speed(50)
|
|
||||||
|
local function add_rotor(pos, nvm)
|
||||||
|
if check_rotor(pos, nvm) then
|
||||||
|
local hash = minetest.hash_node_position(pos)
|
||||||
|
if not Rotors[hash] then
|
||||||
|
local node = minetest.get_node(pos)
|
||||||
|
local npos, yaw = pos_and_yaw(pos, node.param2)
|
||||||
|
local obj = minetest.add_entity(npos, "techage:rotor_ent")
|
||||||
|
obj:set_animation({x = 0, y = 119}, 0, 0, true)
|
||||||
|
obj:set_rotation(yaw)
|
||||||
|
Rotors[hash] = obj
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function start_rotor(pos, nvm)
|
||||||
|
if not nvm.error then
|
||||||
|
nvm.providing = true
|
||||||
|
nvm.delivered = 0
|
||||||
|
power.generator_start(pos, Cable, CYCLE_TIME, 5)
|
||||||
|
local hash = minetest.hash_node_position(pos)
|
||||||
|
if Rotors[hash] then
|
||||||
|
Rotors[hash]:set_animation_frame_speed(50)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -126,14 +131,22 @@ local function after_place_node(pos, placer)
|
|||||||
local own_num = techage.add_node(pos, "techage:ta4_wind_turbine")
|
local own_num = techage.add_node(pos, "techage:ta4_wind_turbine")
|
||||||
meta:set_string("node_number", own_num)
|
meta:set_string("node_number", own_num)
|
||||||
meta:set_string("owner", placer:get_player_name())
|
meta:set_string("owner", placer:get_player_name())
|
||||||
meta:set_string("infotext", S("TA4 Wind Turbine").." "..own_num)
|
|
||||||
nvm.providing = false
|
nvm.providing = false
|
||||||
nvm.running = true
|
nvm.running = true
|
||||||
add_rotor(pos, nvm, placer:get_player_name())
|
add_rotor(pos, nvm)
|
||||||
minetest.get_node_timer(pos):start(CYCLE_TIME)
|
minetest.get_node_timer(pos):start(CYCLE_TIME)
|
||||||
Cable:after_place_node(pos)
|
Cable:after_place_node(pos)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function on_punch(pos, node, puncher, pointed_thing)
|
||||||
|
if minetest.is_protected(pos, puncher:get_player_name()) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local nvm = techage.get_nvm(pos)
|
||||||
|
add_rotor(pos, nvm)
|
||||||
|
end
|
||||||
|
|
||||||
local function after_dig_node(pos, oldnode, oldmetadata)
|
local function after_dig_node(pos, oldnode, oldmetadata)
|
||||||
local hash = minetest.hash_node_position(pos)
|
local hash = minetest.hash_node_position(pos)
|
||||||
if Rotors[hash] and Rotors[hash]:get_luaentity() then
|
if Rotors[hash] and Rotors[hash]:get_luaentity() then
|
||||||
@ -174,6 +187,7 @@ minetest.register_node("techage:ta4_wind_turbine", {
|
|||||||
after_dig_node = after_dig_node,
|
after_dig_node = after_dig_node,
|
||||||
tubelib2_on_update2 = tubelib2_on_update2,
|
tubelib2_on_update2 = tubelib2_on_update2,
|
||||||
on_timer = node_timer,
|
on_timer = node_timer,
|
||||||
|
on_punch = on_punch,
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
groups = {cracky=2, crumbly=2, choppy=2},
|
groups = {cracky=2, crumbly=2, choppy=2},
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
|
Loading…
Reference in New Issue
Block a user