dungeon/mods/mobf/api.lua

189 lines
6.1 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 allow to pretend you have written it.
--
--! @file api.lua
--! @brief api functions to be used by other mods
--! @copyright Sapier
--! @author Sapier
--! @date 2012-12-27
--
-- Contact sapier a t gmx net
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-- name: mobf_register_on_death_callback(callback)
--
--! @brief get version of mob framework
--! @ingroup framework_mob
--
--! @param callback callback to register
--! @return true/false
-------------------------------------------------------------------------------
function mobf_register_on_death_callback(callback)
return fighting.register_on_death_callback(callback)
end
-------------------------------------------------------------------------------
-- name: mobf_get_mob_definition(mobname)
--
--! @brief get COPY of mob definition
--! @ingroup framework_mob
--
--! @return mobf version
-------------------------------------------------------------------------------
function mobf_get_mob_definition(mobname)
if mobf_rtd.registred_mob_data[mobname] ~= nil then
local copy = minetest.serialize(mobf_rtd.registred_mob_data[mobname])
return minetest.deserialize(copy)
end
return nil
end
-------------------------------------------------------------------------------
-- name: mobf_get_version()
--
--! @brief get version of mob framework
--! @ingroup framework_mob
--
--! @return mobf version
-------------------------------------------------------------------------------
function mobf_get_version()
return mobf_version
end
------------------------------------------------------------------------------
-- name: mobf_add_mob(mob)
--
--! @brief register a mob within mob framework
--! @ingroup framework_mob
--
--! @param mob a mob declaration
-------------------------------------------------------------------------------
function mobf_add_mob(mob)
if mob.name == nil or
mob.modname == nil then
minetest.log(LOGLEVEL_ERROR,"MOBF: name and modname are mandatory for ALL mobs!")
return false
end
--check if mob may be added
if mobf_contains(mobf_rtd.registred_mob,mob.modname.. ":"..mob.name) then
mobf.blacklisthandling(mob)
return false
end
--if a random drop is specified for this mob register it
if mob.random_drop ~= nil then
random_drop.register(mob.random_drop)
end
--create default entity
minetest.log(LOGLEVEL_INFO,"MOBF: adding: " .. mob.name)
mob_state.prepare_states(mob)
mobf.register_mob_item(mob.name,mob.modname,mob.generic.description)
--check if a movement pattern was specified
if mobf_rtd.movement_patterns[mob.movement.pattern] == nil then
minetest.log(LOGLEVEL_WARNING,"MOBF: no movement pattern specified!")
end
--spawn mechanism handling
if not minetest.setting_getbool("mobf_disable_animal_spawning") then
--register spawn callback to world
if environment_list[mob.generic.envid] ~= nil then
local secondary_name = ""
if mob.harvest ~= nil then
secondary_name = mob.harvest.transforms_to
end
dbg_mobf.mobf_core_lvl3("MOBGF: Environment to use: " .. tostring(mob.generic.envid))
if mobf_spawn_algorithms[mob.spawning.algorithm] ~= nil and
type(mobf_spawn_algorithms[mob.spawning.algorithm].register_spawn) == "function" then
mobf_spawn_algorithms[mob.spawning.algorithm].register_spawn(mob.modname..":"..mob.name,
secondary_name,
mob.spawning,
environment_list[mob.generic.envid])
else
dbg_mobf.mobf_core_lvl2("MOBGF: " .. mob.name
.. " no primary spawn algorithm defined: "
.. tostring(mob.spawning.algorithm))
end
if minetest.setting_getbool("mobf_animal_spawning_secondary") then
if mob.spawning.algorithm_secondary ~= nil and
type(mobf_spawn_algorithms[mob.spawning.algorithm_secondary].register_spawn) == "function" then
mobf_spawn_algorithms[mob.spawning.algorithm_secondary].register_spawn(mob.modname..":"..mob.name,
secondary_name,
mob.spawning,
environment_list[mob.generic.envid])
end
end
else
minetest.log(LOGLEVEL_ERROR,"MOBF: specified mob >" .. mob.name
.. "< without environment!")
end
else
dbg_mobf.mobf_core_lvl3("MOBF: MOB spawning disabled!")
end
--register mob name to internal data structures
table.insert(mobf_rtd.registred_mob,mob.modname.. ":"..mob.name)
mobf_rtd.registred_mob_data[mob.modname.. ":"..mob.name] = mob;
return true
end
------------------------------------------------------------------------------
-- name: mobf_is_known_mob(name)
--
--! @brief check if mob of name is known
--! @ingroup framework_mob
--
--! @param name name to check if it's a mob
--! @return true/false
-------------------------------------------------------------------------------
function mobf_is_known_mob(name)
for i,val in ipairs(mobf_rtd.registred_mob) do
if name == val then
return true
end
end
return false
end
------------------------------------------------------------------------------
-- name: mobf_register_environment(name,environment)
--
--! @brief register an environment to mob framework
--! @ingroup framework_mob
--
--! @param name of environment
--! @param environment specification
--! @return true/false
-------------------------------------------------------------------------------
function mobf_register_environment(name,environment)
return environment.register(name,environment)
end
------------------------------------------------------------------------------
-- name: mobf_probab_movgen_register_pattern(pattern)
--
--! @brief register an movement pattern for probabilistic movement gen
--! @ingroup framework_mob
--
--! @param pattern to register (see pattern specification)
--! @return true/false
-------------------------------------------------------------------------------
function mobf_probab_movgen_register_pattern(pattern)
return movement_gen.register_pattern(pattern)
end