2016-08-04 14:41:58 -07:00

210 lines
4.4 KiB
Lua

-------------------------------------------------------------------------------
-- Mob Framework Mod by Sapier
--
-- You may copy, use, modify or do nearly anything except removing this
-- copyright notice.
-- And of course you are NOT allowed to pretend you have written it.
--
--! @file init.lua
--! @brief bear implementation
--! @copyright Sapier
--! @author Sapier
--! @date 2013-09-09
--
-- Contact sapier a t gmx net
-------------------------------------------------------------------------------
minetest.log("action","MOD: mob_bear loading ...")
local version = "0.1.1"
local bear_groups = {
not_in_creative_inventory=1
}
local selectionbox_bear = {-0.7, -1, -0.7, 0.7, 0.7, 0.7}
bear_prototype = {
name="bear",
modname="mob_bear",
factions = {
member = {
"animals",
"forrest_animals",
"bears"
}
},
generic = {
description="Bear",
base_health=20,
kill_result="animalmaterials:fur 2",
armor_groups= {
fleshy=90,
},
groups = bear_groups,
addoncatch = "mob_bear:tamed_bear",
envid="on_ground_2",
population_density=1200,
},
movement = {
canfly=false,
guardspawnpoint = true,
teleportdelay = 60,
min_accel=0.3,
max_accel=0.6,
max_speed=1.0,
follow_speedup=8,
},
catching = {
tool="animalmaterials:bone",
consumed=true,
},
combat = {
starts_attack=true,
sun_sensitive=false,
melee = {
maxdamage=7,
range=3,
speed=1.5,
},
distance = nil,
self_destruct = nil,
},
sound = {
random = {
interval = 90,
max_interval_deviation = 20,
list = {
{
name="mob_bear_random",
gain = 1,
max_hear_distance = 10,
},
}
},
hit = {
name="mob_bear_hit",
gain = 1,
max_hear_distance = 5,
},
melee = {
name="mob_bear_melee",
gain = 1,
max_hear_distance = 5,
}
},
animation = {
stand = {
start_frame = 0,
end_frame = 60,
},
walk = {
start_frame = 61,
end_frame = 120,
},
sleep = {
start_frame = 121,
end_frame = 180,
},
},
ride = {
walkspeed = 4.8,
sneakspeed = 0.8,
jumpspeed = 38,
attacheoffset = { x=0,y=2,z=0},
texturemod = "^mob_bear_bear_tamed_mesh.png",
walk_anim = "walk",
saddle = "animalmaterials:lasso"
},
attention = {
hear_distance = 5,
hear_distance_value = 20,
view_angle = math.pi/2,
own_view_value = 0.2,
remote_view = false,
remote_view_value = 0,
attention_distance_value = 0.2,
watch_threshold = 10,
attack_threshold = 20,
attention_distance = 10,
attention_max = 25,
},
states = {
{
name = "default",
movgen = "follow_mov_gen",
typical_state_time = 30,
chance = 0,
animation = "stand",
graphics_3d = {
visual = "mesh",
mesh = "mob_bear.b3d",
textures = {"mob_bear_bear_mesh.png"},
collisionbox = selectionbox_bear,
visual_size= {x=3,y=3,z=3},
},
},
{
name = "sleeping",
--TODO replace by check for night
custom_preconhandler = nil,
movgen = "none",
typical_state_time = 300,
chance = 0.10,
animation = "sleep",
},
{
name = "combat",
typical_state_time = 9999,
chance = 0.0,
animation = "walk",
movgen = "follow_mov_gen"
},
}
}
local bear_name = bear_prototype.modname .. ":" .. bear_prototype.name
local bear_env = mobf_environment_by_name(bear_prototype.generic.envid)
mobf_spawner_register("bear_spawner_1",bear_name,
{
spawnee = bear_name,
spawn_interval = 300,
spawn_inside = bear_env.media,
entities_around =
{
{ type="MAX",distance=1,threshold=0 },
{ type="MAX",entityname=bear_name,
distance=bear_prototype.generic.population_density,threshold=1 },
},
nodes_around =
{
{ type="MIN", name = { "default:leaves","default:tree"},distance=3,threshold=4}
},
absolute_height =
{
min = -10,
},
mapgen =
{
enabled = true,
retries = 5,
spawntotal = 1,
},
surfaces = bear_env.surfaces.good,
collisionbox = selectionbox_bear
})
if factions~= nil and
type(factions.set_base_reputation) == "function" then
factions.set_base_reputation("bears","players",-25)
end
minetest.log("action","\tadding mob "..bear_prototype.name)
mobf_add_mob(bear_prototype)
minetest.log("action","MOD: mob_bear mod version " .. version .. " loaded")