123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283 |
- ------------------- anti grav beam initiator off --------------------
- ------------------------------------------------------------------------
- ------------------------------------------------------------------------
- minetest.register_node("ufowreck:alien_antigrav", {
- description = minetest.colorize("#0E0", "Alien ")..minetest.colorize("#A0F", "Antigrav Beam"),
- tiles = {
- "alien_ag_top_off.png",
- "alien_ag_bottom.png",
- "alien_ag_side_off.png",
- "alien_ag_side_off.png",
- "alien_ag_side_off.png",
- "alien_ag_side_off.png",
- },
- groups = {cracky=2, mesecon_effector_off = 1 },
- connect_sides = {"bottom"},
- sounds = default.node_sound_metal_defaults(),
- drop = "ufowreck:alien_antigrav",
- mesecons = {effector = {
- rules = {
- {x=0, y=0, z=-1},
- {x=1, y=0, z=0},
- {x=-1, y=0, z=0},
- {x=0, y=0, z=1},
- {x=1, y=1, z=0},
- {x=1, y=-1, z=0},
- {x=-1, y=1, z=0},
- {x=-1, y=-1, z=0},
- {x=0, y=1, z=1},
- {x=0, y=-1, z=1},
- {x=0, y=1, z=-1},
- {x=0, y=-1, z=-1},
- {x=0, y=-1, z=0},
- },
- action_on = function (pos, node)
- local meta = minetest.get_meta(pos)
- minetest.swap_node(pos, {name = "ufowreck:alien_antigrav_on"})
- meta:set_string("infotext", minetest.colorize("#0E0", "Alien ").."Antigrav Beam (On)")
- pos.y = pos.y + 1
- local yi
-
- minetest.sound_play("ag_on",{max_hear_distance = 16,pos = pos,gain = 1.0})
- for yi = 0, 100 do
- if (minetest.get_node(pos)).name == "air" or (minetest.get_node(pos)).name == "ufowreck:ag_beam_off" then
- minetest.set_node(pos,{name = "ufowreck:ag_beam_on"})
- else
- break
- end
- pos.y = pos.y + 1
- end
-
- end,
-
- }},
- after_dig_node = function(pos, oldnode, oldmetadata, digger) --gets rid of the beam when it is dug
- pos.y = pos.y + 1
- local yi
-
- for yi = 0, 100 do
- if (minetest.get_node(pos)).name == "ufowreck:ag_beam_on" or (minetest.get_node(pos)).name == "ufowreck:ag_beam_off" then
- minetest.set_node(pos,{name = "air"})
- else
- break
- end
- pos.y = pos.y + 1
- end
-
- end,
- })
- ------------------- anti grav beam initiator on --------------------
- ------------------------------------------------------------------------
- ------------------------------------------------------------------------
- minetest.register_node("ufowreck:alien_antigrav_on", {
- description = minetest.colorize("#0E0", "Alien ").."Antigrav Beam (On)",
- tiles = {
- {name="alien_ag_top.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.00},},
- "alien_ag_bottom.png",
- {name="alien_ag_side.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.00},},
- {name="alien_ag_side.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.00},},
- {name="alien_ag_side.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.00},},
- {name="alien_ag_side.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.00},},
- },
- light_source = 5,
- groups = {cracky=2, not_in_creative_inventory = 1, mesecon_effector_on = 1,fall_damage_add_percent = -90,},
- connect_sides = {"bottom"},
- sounds = default.node_sound_metal_defaults(),
- drop = "ufowreck:alien_antigrav",
- on_construct = function(pos)
- local meta = minetest.get_meta(pos)
- meta:set_string("infotext", minetest.colorize("#0E0", "Alien ").."Antigrav Beam (On)")
- pos.y = pos.y + 1
- local yi
-
- for yi = 0, 100 do
- if (minetest.get_node(pos)).name == "air" then
- minetest.set_node(pos,{name = "ufowreck:ag_beam_on"})
- else
- break
- end
- pos.y = pos.y + 1
- end
-
- end,
- on_destruct = function(pos) --gets rid of the beam when it is dug
- pos.y = pos.y + 1
- local yi
-
- for yi = 0, 100 do
- if (minetest.get_node(pos)).name == "ufowreck:ag_beam_on" or (minetest.get_node(pos)).name == "ufowreck:ag_beam_off" then
- minetest.set_node(pos,{name = "air"})
- else
- break
- end
- pos.y = pos.y + 1
- end
-
- end,
- mesecons = {effector = {
- rules = lightstone_rules,
- action_off = function (pos, node)
- local meta = minetest.get_meta(pos)
- minetest.swap_node(pos,{name = "ufowreck:alien_antigrav"})
- meta:set_string("infotext", minetest.colorize("#0E0", "Alien ").."Antigrav Beam (Off)")
- pos.y = pos.y + 1
- local yi
- for yi = 0, 100 do
- if (minetest.get_node(pos)).name == "ufowreck:ag_beam_on" then
- minetest.set_node(pos,{name = "air"})
- end
- pos.y = pos.y + 1
- end
- end,
- }},
- after_dig_node = function(pos, oldnode, oldmetadata, digger) --gets rid of the beam when it is dug
- pos.y = pos.y + 1
- local yi
-
- for yi = 0, 100 do
- if (minetest.get_node(pos)).name == "ufowreck:ag_beam_on" or (minetest.get_node(pos)).name == "ufowreck:ag_beam_off" then
- minetest.set_node(pos,{name = "air"})
- else
- break
- end
- pos.y = pos.y + 1
- end
-
- end,
- })
- ------------------- anti grav beam nodes -----------------------------
- ------------------------------------------------------------------------
- ------------------------------------------------------------------------
- -------zero_grav effect ------------
- local gravity = player_monoids.gravity
- local timer = 0
- ufowreck.antigrav_players = {}
- minetest.register_globalstep(function(dtime)
- timer = timer + dtime;
- if timer >= 1 then
- for _,player in pairs(minetest.get_connected_players()) do
- if minetest.get_node(player:get_pos()).name == "ufowreck:ag_beam_on" and ufowreck.antigrav_players[player:get_player_name()] == nil then
- -- player is standing in the ag_beam_on node, and is not on the list
- ufowreck.antigrav_players[player:get_player_name()] = player
- gravity:add_change(player, 0, "ufowreck_0_grav")
- player:add_velocity(vector.new(0,2,0))
- else
- if ufowreck.antigrav_players[player:get_player_name()] ~= nil then
- --player is on the list
- if minetest.get_node(player:get_pos()).name ~= "ufowreck:ag_beam_on" then
- --the player is not in an ag_beam_on node
- gravity:del_change(player, "ufowreck_0_grav")
- ufowreck.antigrav_players[player:get_player_name()] = nil
- end
- end
- end
- end
- end
- end)
- minetest.register_on_leaveplayer(function(player)
- if ufowreck.antigrav_players[player:get_player_name()] == nil then
- return
- else
- ufowreck.antigrav_players[player:get_player_name()] = nil
- gravity:del_change(player, "ufowreck_0_grav")
- end
- end)
- minetest.register_node("ufowreck:ag_beam_on", {
- description = "Alien Antigrav Beam node (on)",
- paramtype = "light",
- tiles = {
- "alien_ag_beam.png",
- },
- drawtype = "nodebox",
- paramtype = "light",
- use_texture_alpha = true,
- light_source = 14,
- sunlight_propagates = true,
- pointable = false,
- diggable = false,
- buildable_to = false,
- walkable = false,
- climbable = false,
- drop = "",
- on_construct = function(pos)
- local timer = minetest.get_node_timer(pos)
- timer:start(.3) -- in seconds
- end,
- on_destruct = function(pos)
- local timer = minetest.get_node_timer(pos)
- timer:stop()
- end,
- on_timer = function(pos)
- local obj_list = minetest.get_objects_inside_radius(pos, .6)
- for _,obj in ipairs(obj_list) do
- local is_p = false
- if obj:is_player() then
- is_p = true
- end
- if not(is_p) then
- local ent = obj:get_luaentity()
- if ent ~= nil then
- vel = obj:get_velocity()
- obj:set_velocity({x=vel.x, y=10, z=vel.z})
- end
- end
- end
- if minetest.get_node(pos).name == "ufowreck:ag_beam_on" then
- return true
- else
- return false
- end
- end,
-
- groups = {not_in_creative_inventory = 1},
- })
- ------------------- CRAFTS -----------------------------
- ------------------------------------------------------------------------
- ------------------------------------------------------------------------
- minetest.register_craft({
- type = "shapeless",
- output = "ufowreck:alien_antigrav",
- recipe = {
- "ufowreck:alien_antigrav_broken",
- "mesecons_fpga:fpga0000",
- "default:mese_crystal_fragment",
- },
- })
|