forked from mtcontrib/mobs_redo
new line_of_sight and fence_top added
This commit is contained in:
parent
f6b5effe09
commit
63c9812dad
39
api.lua
39
api.lua
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
mobs = {}
|
mobs = {}
|
||||||
mobs.mod = "redo"
|
mobs.mod = "redo"
|
||||||
mobs.version = "20180708"
|
mobs.version = "20180710"
|
||||||
|
|
||||||
|
|
||||||
-- Intllib
|
-- Intllib
|
||||||
@ -213,17 +213,17 @@ local get_distance = function(a, b)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- check line of sight (BrunoMine)
|
-- check line of sight (by BrunoMine, tweaked by Astrobe)
|
||||||
local line_of_sight = function(self, pos1, pos2, stepsize)
|
local line_of_sight = function(self, pos1, pos2, stepsize)
|
||||||
|
|
||||||
stepsize = stepsize or 1
|
stepsize = stepsize or 1
|
||||||
|
|
||||||
|
local stepv = vector.multiply(vector.direction(pos1, pos2), stepsize)
|
||||||
|
|
||||||
local s, pos = minetest.line_of_sight(pos1, pos2, stepsize)
|
local s, pos = minetest.line_of_sight(pos1, pos2, stepsize)
|
||||||
|
|
||||||
-- normal walking and flying mobs can see you through air
|
-- normal walking and flying mobs can see you through air
|
||||||
if s == true then
|
if s == true then return true end
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
-- New pos1 to be analyzed
|
-- New pos1 to be analyzed
|
||||||
local npos1 = {x = pos1.x, y = pos1.y, z = pos1.z}
|
local npos1 = {x = pos1.x, y = pos1.y, z = pos1.z}
|
||||||
@ -236,39 +236,15 @@ local line_of_sight = function(self, pos1, pos2, stepsize)
|
|||||||
-- Nodename found
|
-- Nodename found
|
||||||
local nn = minetest.get_node(pos).name
|
local nn = minetest.get_node(pos).name
|
||||||
|
|
||||||
-- Target Distance (td) to travel
|
|
||||||
local td = get_distance(pos1, pos2)
|
|
||||||
|
|
||||||
-- Actual Distance (ad) traveled
|
|
||||||
local ad = 0
|
|
||||||
|
|
||||||
-- It continues to advance in the line of sight in search of a real
|
-- It continues to advance in the line of sight in search of a real
|
||||||
-- obstruction which counts as 'normal' nodebox.
|
-- obstruction which counts as 'normal' nodebox.
|
||||||
while minetest.registered_nodes[nn]
|
while minetest.registered_nodes[nn]
|
||||||
and (minetest.registered_nodes[nn].walkable == false
|
and (minetest.registered_nodes[nn].walkable == false
|
||||||
or minetest.registered_nodes[nn].drawtype == "nodebox") do
|
or minetest.registered_nodes[nn].drawtype == "nodebox") do
|
||||||
|
|
||||||
-- Check if you can still move forward
|
npos1 = vector.add(npos1, stepv)
|
||||||
if td < ad + stepsize then
|
|
||||||
return true -- Reached the target
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Moves the analyzed pos
|
if get_distance(npos1, pos2) < stepsize then return true end
|
||||||
local d = get_distance(pos1, pos2)
|
|
||||||
|
|
||||||
npos1.x = ((pos2.x - pos1.x) / d * stepsize) + pos1.x
|
|
||||||
npos1.y = ((pos2.y - pos1.y) / d * stepsize) + pos1.y
|
|
||||||
npos1.z = ((pos2.z - pos1.z) / d * stepsize) + pos1.z
|
|
||||||
|
|
||||||
-- NaN checks
|
|
||||||
if d == 0
|
|
||||||
or npos1.x ~= npos1.x
|
|
||||||
or npos1.y ~= npos1.y
|
|
||||||
or npos1.z ~= npos1.z then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
ad = ad + stepsize
|
|
||||||
|
|
||||||
-- scan again
|
-- scan again
|
||||||
r, pos = minetest.line_of_sight(npos1, pos2, stepsize)
|
r, pos = minetest.line_of_sight(npos1, pos2, stepsize)
|
||||||
@ -277,7 +253,6 @@ local line_of_sight = function(self, pos1, pos2, stepsize)
|
|||||||
|
|
||||||
-- New Nodename found
|
-- New Nodename found
|
||||||
nn = minetest.get_node(pos).name
|
nn = minetest.get_node(pos).name
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return false
|
return false
|
||||||
|
37
crafts.lua
37
crafts.lua
@ -146,6 +146,37 @@ default.register_fence("mobs:fence_wood", {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- mob fence top (has enlarged collisionbox to stop mobs getting over)
|
||||||
|
minetest.register_node("mobs:fence_top", {
|
||||||
|
description = S("Mob Fence Top"),
|
||||||
|
drawtype = "nodebox",
|
||||||
|
tiles = {"default_wood.png"},
|
||||||
|
paramtype = "light",
|
||||||
|
is_ground_content = false,
|
||||||
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
node_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2},
|
||||||
|
},
|
||||||
|
collision_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {-0.4, -1.5, -0.4, 0.4, 0, 0.4},
|
||||||
|
},
|
||||||
|
selection_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {-0.4, -1.5, -0.4, 0.4, 0, 0.4},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "mobs:fence_top 12",
|
||||||
|
recipe = {
|
||||||
|
{"group:wood", "group:wood", "group:wood"},
|
||||||
|
{"", "default:fence_wood", ""},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
-- items that can be used as fuel
|
-- items that can be used as fuel
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
type = "fuel",
|
type = "fuel",
|
||||||
@ -182,3 +213,9 @@ minetest.register_craft({
|
|||||||
recipe = "mobs:fence_wood",
|
recipe = "mobs:fence_wood",
|
||||||
burntime = 7,
|
burntime = 7,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "fuel",
|
||||||
|
recipe = "mobs:fence_top",
|
||||||
|
burntime = 2,
|
||||||
|
})
|
||||||
|
@ -12,6 +12,7 @@ if minetest.get_modpath("lucky_block") then
|
|||||||
{"dro", {"mobs:shears"}, 1},
|
{"dro", {"mobs:shears"}, 1},
|
||||||
{"dro", {"mobs:protector"}, 1},
|
{"dro", {"mobs:protector"}, 1},
|
||||||
{"dro", {"mobs:fence_wood"}, 10},
|
{"dro", {"mobs:fence_wood"}, 10},
|
||||||
|
{"dro", {"mobs:fence_top"}, 12},
|
||||||
{"lig"},
|
{"lig"},
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
@ -17,11 +17,13 @@ Crafts:
|
|||||||
- Magic Lasso is similar to nets but with a better chance of picking up larger mobs.
|
- Magic Lasso is similar to nets but with a better chance of picking up larger mobs.
|
||||||
- Shears are used to right-click sheep and return 1-3 wool.
|
- Shears are used to right-click sheep and return 1-3 wool.
|
||||||
- Protection Rune lets you protect tamed mobs from harm by other players
|
- Protection Rune lets you protect tamed mobs from harm by other players
|
||||||
|
- Mob Fence and Fence Top (to stop mobs escaping/glitching through fences)
|
||||||
|
|
||||||
Lucky Blocks: 9
|
Lucky Blocks: 9
|
||||||
|
|
||||||
|
|
||||||
Changelog:
|
Changelog:
|
||||||
|
- 1.45- Added Fence Top to add on top of any fence to stop mobs escaping, new line_of_sight tweaked by Astrobe
|
||||||
- 1.44- Added ToolRanks support for swords when attacking mobs
|
- 1.44- Added ToolRanks support for swords when attacking mobs
|
||||||
- 1.43- Better 0.4.16 compatibility, added general attack function and settings
|
- 1.43- Better 0.4.16 compatibility, added general attack function and settings
|
||||||
- 1.42- Added "all" option to immune_to table, tidied floating mobs to be less intensive
|
- 1.42- Added "all" option to immune_to table, tidied floating mobs to be less intensive
|
||||||
|
Loading…
Reference in New Issue
Block a user