parent
ce9f06d38e
commit
5b26333f0c
|
@ -36,9 +36,12 @@ Here are some of the other highlights of the Mobs Lite engine:
|
||||||
* Mobs can be randomly spawned in the vicinity of players, thus relieving the overhead of
|
* Mobs can be randomly spawned in the vicinity of players, thus relieving the overhead of
|
||||||
costly ABM-based spawners.
|
costly ABM-based spawners.
|
||||||
|
|
||||||
* Timekeeper helper class ensures efficient dispatching of mob-related callbacks for the
|
* Timekeeper helper class ensures efficient dispatching of mob-related callbacks at the
|
||||||
appropriate server cycle.
|
appropriate server cycle.
|
||||||
|
|
||||||
|
* Animals can be programmed to follow players or to grab items that are wielded by or
|
||||||
|
dropped by nearby players.
|
||||||
|
|
||||||
* And of course, much much more!
|
* And of course, much much more!
|
||||||
|
|
||||||
Since Mobs Lite is still in early beta, there is the likelihood of lingering bugs. The API
|
Since Mobs Lite is still in early beta, there is the likelihood of lingering bugs. The API
|
||||||
|
|
28
animals.lua
28
animals.lua
|
@ -48,21 +48,19 @@ mobs.register_mob( "mobs:kitten", {
|
||||||
run_velocity = 1.2,
|
run_velocity = 1.2,
|
||||||
escape_range = 3.0,
|
escape_range = 3.0,
|
||||||
follow_range = 2.0,
|
follow_range = 2.0,
|
||||||
|
pickup_range = 2.0,
|
||||||
can_jump = false,
|
can_jump = false,
|
||||||
can_walk = true,
|
can_walk = true,
|
||||||
enable_fall_damage = true,
|
enable_fall_damage = true,
|
||||||
|
|
||||||
watch_wielditems = {
|
watch_wielditems = {
|
||||||
["mobs:meat_raw"] = "follow",
|
["mobs:meat_raw"] = mobs.presets.grab_handout { can_eat = true, grab_chance = 8, wait_chance = 1 },
|
||||||
["mobs:meat"] = "follow",
|
|
||||||
},
|
},
|
||||||
watch_spawnitems = {
|
watch_spawnitems = {
|
||||||
["mobs:meat_raw"] = "follow",
|
["mobs:meat_raw"] = mobs.presets.grab_handout { can_eat = true, grab_chance = 1, wait_chance = 2 },
|
||||||
["mobs:meat"] = "follow",
|
|
||||||
},
|
},
|
||||||
watch_players = { },
|
watch_players = { },
|
||||||
|
|
||||||
hunger = 5,
|
|
||||||
hp_max = 4,
|
hp_max = 4,
|
||||||
hp_low = 3,
|
hp_low = 3,
|
||||||
armor = 100,
|
armor = 100,
|
||||||
|
@ -145,17 +143,16 @@ mobs.register_mob( "mobs:rat", {
|
||||||
run_velocity = 1.2,
|
run_velocity = 1.2,
|
||||||
escape_range = 0.0,
|
escape_range = 0.0,
|
||||||
follow_range = 2.0,
|
follow_range = 2.0,
|
||||||
|
pickup_range = 2.0,
|
||||||
can_jump = false,
|
can_jump = false,
|
||||||
can_walk = true,
|
can_walk = true,
|
||||||
enable_fall_damage = true,
|
enable_fall_damage = true,
|
||||||
|
|
||||||
watch_wielditems = {
|
watch_wielditems = {
|
||||||
["mobs:meat_raw"] = "follow",
|
|
||||||
["mobs:meat"] = "follow",
|
["mobs:meat"] = "follow",
|
||||||
},
|
},
|
||||||
watch_spawnitems = {
|
watch_spawnitems = {
|
||||||
["mobs:meat_raw"] = "follow",
|
["mobs:meat"] = mobs.presets.grab_handout { can_eat = true, grab_chance = 2, wait_chance = 4 },
|
||||||
["mobs:meat"] = "follow",
|
|
||||||
},
|
},
|
||||||
watch_players = { },
|
watch_players = { },
|
||||||
|
|
||||||
|
@ -229,15 +226,17 @@ mobs.register_mob( "mobs:hare", {
|
||||||
run_velocity = 3.5,
|
run_velocity = 3.5,
|
||||||
escape_range = 3.0,
|
escape_range = 3.0,
|
||||||
follow_range = 3.0,
|
follow_range = 3.0,
|
||||||
|
pickup_range = 2.0,
|
||||||
can_jump = true,
|
can_jump = true,
|
||||||
can_walk = true,
|
can_walk = true,
|
||||||
enable_fall_damage = true,
|
enable_fall_damage = true,
|
||||||
|
|
||||||
watch_wielditems = {
|
watch_wielditems = {
|
||||||
["default:apple"] = "follow",
|
["default:apple"] = "follow",
|
||||||
["default:orange"] = "follow",
|
|
||||||
},
|
},
|
||||||
watch_spawnitems = { },
|
watch_spawnitems = {
|
||||||
|
["default:apple"] = mobs.presets.grab_handout { can_eat = true, grab_chance = 2, wait_chance = 5 },
|
||||||
|
},
|
||||||
watch_players = { },
|
watch_players = { },
|
||||||
|
|
||||||
hp_max = 4,
|
hp_max = 4,
|
||||||
|
@ -320,19 +319,20 @@ mobs.register_mob( "mobs:chicken", {
|
||||||
recoil_velocity = 2.0,
|
recoil_velocity = 2.0,
|
||||||
run_velocity = 2.0,
|
run_velocity = 2.0,
|
||||||
follow_range = 3.0,
|
follow_range = 3.0,
|
||||||
|
pickup_range = 2.0,
|
||||||
escape_range = 3.0,
|
escape_range = 3.0,
|
||||||
can_jump = true,
|
can_jump = true,
|
||||||
can_walk = true,
|
can_walk = true,
|
||||||
enable_fall_damage = true,
|
enable_fall_damage = true,
|
||||||
|
|
||||||
watch_wielditems = {
|
watch_wielditems = {
|
||||||
["default:apple"] = "follow",
|
["farming:seed_wheat"] = mobs.presets.grab_handout { can_eat = true, grab_chance = 1, wait_chance = 1 },
|
||||||
["default:orange"] = "follow",
|
},
|
||||||
|
watch_spawnitems = {
|
||||||
|
["farming:seed_wheat"] = mobs.presets.grab_handout { can_eat = true, grab_chance = 2, wait_chance = 4 },
|
||||||
},
|
},
|
||||||
watch_spawnitems = { },
|
|
||||||
watch_players = { },
|
watch_players = { },
|
||||||
|
|
||||||
hunger = 10,
|
|
||||||
hp_max = 10,
|
hp_max = 10,
|
||||||
hp_low = 9,
|
hp_low = 9,
|
||||||
armor = 100,
|
armor = 100,
|
||||||
|
|
47
init.lua
47
init.lua
|
@ -1389,6 +1389,53 @@ end
|
||||||
|
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
|
mobs.presets = {
|
||||||
|
grab_handout = function ( def )
|
||||||
|
local grab_chance = def.grab_chance
|
||||||
|
local wait_chance = def.wait_chance
|
||||||
|
local can_eat = def.can_eat
|
||||||
|
|
||||||
|
return function ( self, target, elapsed )
|
||||||
|
|
||||||
|
if random( grab_chance ) == 1 then
|
||||||
|
local target_pos = vector.offset_y( target:get_pos( ) )
|
||||||
|
local dist = vector.distance( self.pos, target_pos )
|
||||||
|
|
||||||
|
if self:get_target_yaw_delta( target_pos ) < rad_30 and dist <= self.pickup_range then
|
||||||
|
if target:is_player( ) then
|
||||||
|
target:get_wielded_item( ):take_item( )
|
||||||
|
target:set_wielded_item( "" )
|
||||||
|
elseif target:get_entity_name( ) == "__builtin:item" then
|
||||||
|
target:remove( )
|
||||||
|
end
|
||||||
|
if can_eat then
|
||||||
|
-- minetest.sound_play( "hbhunger_eat_generic", {
|
||||||
|
-- object = self.object,
|
||||||
|
-- max_hear_distance = 10,
|
||||||
|
-- gain = 1.0
|
||||||
|
-- } )
|
||||||
|
minetest.add_particle( {
|
||||||
|
pos = vector.offset_y( self.pos, 0.5 ),
|
||||||
|
velocity = { x = 0, y = 0.8, z = 0 },
|
||||||
|
acceleration = { x = 0, y = 0, z = 0 },
|
||||||
|
exptime = 4.0,
|
||||||
|
size = 3,
|
||||||
|
collisiondetection = false,
|
||||||
|
vertical = true,
|
||||||
|
texture = "heart.png",
|
||||||
|
} )
|
||||||
|
end
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return random( wait_chance ) == 1 and "follow" or nil
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
|
||||||
dofile( minetest.get_modpath( "mobs" ) .. "/extras.lua" )
|
dofile( minetest.get_modpath( "mobs" ) .. "/extras.lua" )
|
||||||
dofile( minetest.get_modpath( "mobs" ) .. "/monsters.lua" )
|
dofile( minetest.get_modpath( "mobs" ) .. "/monsters.lua" )
|
||||||
dofile( minetest.get_modpath( "mobs" ) .. "/animals.lua" )
|
dofile( minetest.get_modpath( "mobs" ) .. "/animals.lua" )
|
||||||
|
|
Loading…
Reference in New Issue