------------------------------------------------------------------------------- -- 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 main module file responsible for including all parts of mob framework mod --! @copyright Sapier --! @author Sapier --! @date 2012-08-09 -- --! @defgroup framework_int Internal framework subcomponent API --! @brief this functions are used to provide additional features to mob framework --! e.g. add additional spawn algorithms, movement generators, environments ... -- -- --! @defgroup framework_mob Mob Framework API --! @brief this functions are used to add a mob to mob framework -- -- Contact sapier a t gmx net ------------------------------------------------------------------------------- core.log("action","MOD: mobf loading ...") --! @brief runtime data required to be setup once on start mobf_rtd = { --!is mob running with fire support fire_enabled = false, --!do we have luatrace luatrace_enabled = false, --!do we have inventory plus support have_adv_spawning = false, --!do we have factions support factions_available = false, --!registry for movement patterns movement_patterns = {}, --!registry of mobs registred_mob = {}, --!registred mobs_data registred_mob_data = {}, --!timesource timesource = "os.clock() (10ms ONLY!)", --!total spawned mobs total_spawned = 0, --!detailed debug state detailed_state = false, } --!path of mod mobf_modpath = minetest.get_modpath("mobf") LOGLEVEL_INFO = "verbose" LOGLEVEL_NOTICE = "info" LOGLEVEL_WARNING = "action" LOGLEVEL_ERROR = "error" LOGLEVEL_CRITICAL = "error" -- initialize luatrace if necessary if mobf_rtd.luatrace_enabled then luatrace = require("luatrace") end -- minetest workarounds if not type(core.global_exists) ~= "function" then core.global_exists = function(name) return core[name] ~= nil end end --include debug trace functions dofile (mobf_modpath .. "/utils/text.lua") dofile (mobf_modpath .. "/debug_trace.lua") --include engine dofile (mobf_modpath .. "/utils/error_handling.lua") dofile (mobf_modpath .. "/utils/settings.lua") dofile (mobf_modpath .. "/utils/generic_functions.lua") dofile (mobf_modpath .. "/utils/data_storage.lua") dofile (mobf_modpath .. "/utils/tracing.lua") dofile (mobf_modpath .. "/utils/geometry.lua") dofile (mobf_modpath .. "/utils/permanent_data.lua") dofile (mobf_modpath .. "/lifebar.lua") dofile (mobf_modpath .. "/env_constants.lua") dofile (mobf_modpath .. "/environment.lua") dofile (mobf_modpath .. "/attention.lua") dofile (mobf_modpath .. "/movement_generic.lua") dofile (mobf_modpath .. "/graphics.lua") dofile (mobf_modpath .. "/movement_gen_registry.lua") dofile (mobf_modpath .. "/harvesting.lua") dofile (mobf_modpath .. "/fighting.lua") dofile (mobf_modpath .. "/random_drop.lua") dofile (mobf_modpath .. "/sound.lua") dofile (mobf_modpath .. "/ride.lua") dofile (mobf_modpath .. "/mobf.lua") dofile (mobf_modpath .. "/api.lua") dofile (mobf_modpath .. "/debug.lua") dofile (mobf_modpath .. "/mob_state.lua") dofile (mobf_modpath .. "/inventory.lua") dofile (mobf_modpath .. "/path.lua") dofile (mobf_modpath .. "/factions.lua") dofile (mobf_modpath .. "/step_quota.lua") --include spawning support dofile (mobf_modpath .. "/spawning.lua") --include movement generators dofile (mobf_modpath .. "/mgen_probab/main_probab.lua") dofile (mobf_modpath .. "/mgen_follow/main_follow.lua") dofile (mobf_modpath .. "/mgen_rasterized/mgen_raster.lua") dofile (mobf_modpath .. "/mgen_jordan4ibanez/mgen_jordan4ibanez.lua") dofile (mobf_modpath .. "/mgen_pathbased/main.lua") dofile (mobf_modpath .. "/mgen_flee/main_flee.lua") dofile (mobf_modpath .. "/mov_gen_none.lua") mobf_version = "2.5.1" --! @brief main initialization function function mobf_init_framework() minetest.log(LOGLEVEL_NOTICE,"MOBF: Initializing mob framework") minetest.log(LOGLEVEL_NOTICE,"MOBF: Reading mob blacklist") local mobf_mob_blacklist_string = minetest.world_setting_get("mobf_blacklist") if mobf_mob_blacklist_string ~= nil then mobf_rtd.registred_mob = minetest.deserialize(mobf_mob_blacklist_string) if mobf_rtd.registred_mob == nil then minetest.log(LOGLEVEL_ERROR,"MOBF: Error on serializing blacklist!") mobf_rtd.registred_mob = {} end end minetest.log(LOGLEVEL_NOTICE,"MOBF: Initialize timesource...") mobf_init_timesource() minetest.log(LOGLEVEL_NOTICE,"MOBF: Initialize statistics...") mobf_init_statistics() minetest.log(LOGLEVEL_NOTICE,"MOBF: Initialize factions support...") mobf_factions.init() minetest.log(LOGLEVEL_NOTICE,"MOBF: Initialize external mod dependencys...") mobf_init_mod_deps() minetest.log(LOGLEVEL_NOTICE,"MOBF: Initializing probabilistic movement generator") movement_gen.initialize() minetest.log(LOGLEVEL_NOTICE,"MOBF: Initializing debug hooks..") mobf_debug.init() minetest.log(LOGLEVEL_NOTICE,"MOBF: Initializing mob preservation..") local preserved_mobs_raw = mobf_get_world_setting("mobf_preserve_mobs") if preserved_mobs_raw ~= nil then mobf.current_preserve_list = minetest.deserialize(preserved_mobs_raw) end if mobf.current_preserve_list == nil then mobf.current_preserve_list = {} end minetest.log(LOGLEVEL_NOTICE,"MOBF: Initialize path handling subsystem..") mobf_path.init() minetest.log(LOGLEVEL_NOTICE,"MOBF: Initialize lifebar subsystem..") mobf_lifebar.init() minetest.log(LOGLEVEL_NOTICE,"MOBF: Initialize spawning subsystem..") spawning.init() minetest.log(LOGLEVEL_NOTICE,"MOBF: Initialize mobf supplied modules..") mobf_init_modules() minetest.log(LOGLEVEL_NOTICE,"MOBF: Register rightclick button handler..") minetest.register_on_player_receive_fields(mobf.rightclick_button_handler) minetest.log(LOGLEVEL_NOTICE,"MOBF: Initializing step time quota .. ") mobf_step_quota.initialize() -- register privilege to change mobf settings minetest.register_privilege("mobfw_admin", { description = "Player may change mobf settings", give_to_singleplayer = true }) core.log("action","MOD: mob framework mod "..mobf_version.." loaded") end --! @brief initialize mod dependencys function mobf_init_mod_deps() local modlist = minetest.get_modnames() for i=1,#modlist,1 do if modlist[i] == "fire" then mobf_rtd.fire_enabled = true end if modlist[i] == "adv_spawning" then mobf_rtd.have_adv_spawning = true end end end --! @brief initialize mobf submodules function mobf_init_modules() --state change callback mobf.register_on_step_callback({ name = "state_change", handler = mob_state.callback, init = mob_state.initialize, configcheck = function(entity) if entity.data.states ~= nil then return true end return false end }) --auto transform hook mobf.register_on_step_callback({ name = "transform", handler = transform, init = nil, configcheck = function(entity) if entity.data.auto_transform ~= nil then return true end return false end }) --combat hook mobf.register_on_step_callback({ name = "combat", handler = fighting.combat, init = fighting.init_dynamic_data, configcheck = function(entity) if entity.data.combat ~= nil then return true end return false end }) --attention hook mobf.register_on_step_callback({ name = "attention", handler = attention.callback, init = attention.init_dynamic_data, configcheck = function(entity) if entity.data.attention ~= nil or entity.data.combat ~= nil then return true end return false end }) --workaround for shortcomings in spawn algorithm mobf.register_on_step_callback({ name = "check_pop_dense", handler = spawning.population_density_check, init = spawning.init_dynamic_data, configcheck = function(entity) if entity.data.generic.population_density ~= nil or entity.data.spawning ~= nil then return true else return false end end }) --random drop hook mobf.register_on_step_callback({ name = "random_drop", handler = random_drop.callback, init = random_drop.init_dynamic_data, configcheck = function(entity) if entity.data.random_drop ~= nil then return true end return false end }) --random sound hook mobf.register_on_step_callback({ name = "sound", handler = sound.play_random, init = sound.init_dynamic_data, configcheck = function(entity) if entity.data.sound ~= nil and entity.data.sound.random ~= nil then return true end return false end }) --visual change hook mobf.register_on_step_callback({ name = "update_graphics", handler = graphics.update, init = graphics.init_dynamic_data, configcheck = function(entity) return true end }) --custom hook mobf.register_on_step_callback({ name = "custom_hooks", handler = function(entity,now,dtime) if type(entity.data.generic.custom_on_step_handler) == "function" then entity.data.generic.custom_on_step_handler(entity,now,dtime) end end, configcheck = function(entity) return true end }) --on punch callbacks mobf.register_on_punch_callback({ name = "harvesting", handler = harvesting.callback, init = harvesting.init_dynamic_data, configcheck = function(entity) if (entity.data.catching ~= nil and entity.data.catching.tool ~= "" ) or entity.data.harvest ~= nil then return true end return false end }) mobf.register_on_punch_callback({ name = "riding", handler = mobf_ride.on_punch_callback, configcheck = mobf_ride.is_enabled }) mobf.register_on_punch_callback({ name = "punching", handler = fighting.hit, configcheck = function(entity) return true end }) --on rightclick callbacks mobf.register_on_rightclick_callback({ name = "tradercallback", visiblename = "Trade", handler = mob_inventory.trader_callback, configcheck = mob_inventory.config_check }) mobf.register_on_rightclick_callback({ name = "debugcallback", visiblename = "Show debuginfo", handler = mobf_debug.rightclick_callback, configcheck = function(entity) return true end, privs = {mobfw_admin=true} }) mobf.register_on_rightclick_callback({ name = "pathcallback", visiblename = mobf_path.buttontext, handler = mobf_path.mob_rightclick_callback, configcheck = mobf_path.config_check }) mobf.register_on_rightclick_callback({ name = "factions", visiblename = "Factions", handler = mobf_factions.mob_rightclick_callback, configcheck = mobf_factions.config_check }) mobf.register_on_rightclick_callback({ name = "heal", visiblename = fighting.heal_caption, handler = fighting.heal, configcheck = function(entity) return true end, }) end mobf_init_framework() dofile (mobf_modpath .. "/compatibility.lua")