init
This commit is contained in:
commit
2d26db1c5b
38 changed files with 2837 additions and 0 deletions
170
init.lua
Normal file
170
init.lua
Normal file
|
|
@ -0,0 +1,170 @@
|
|||
-- Exit if damage is not enabled and create dummy functions so mods using the
|
||||
-- API do not crash the server.
|
||||
if not core.is_yes(core.settings:get('enable_damage')) then
|
||||
local info = 'Hunger NG is disabled because damage is disabled.'
|
||||
|
||||
local call = function (function_name)
|
||||
core.log('warning', ('+m tried to use +f but +i'):gsub('%+%a+', {
|
||||
['+m'] = core.get_current_modname(),
|
||||
['+f'] = 'hunger_ng.'..function_name..'()',
|
||||
['+i'] = info
|
||||
}))
|
||||
end
|
||||
|
||||
hunger_ng = {
|
||||
add_hunger_data = function () call('add_hunger_data') end,
|
||||
alter_hunger = function () call('alter_hunger') end,
|
||||
configure_hunger = function () call('configure_hunger') end,
|
||||
get_hunger_information = function () call('get_hunger_information') end,
|
||||
hunger_bar_image = '',
|
||||
interoperability = {
|
||||
settings = {},
|
||||
attributes = {},
|
||||
translator = function () call('interoperability.translator') end,
|
||||
get_data = function () call('interoperability.get_data') end,
|
||||
set_data = function () call('interoperability.set_data') end,
|
||||
}
|
||||
}
|
||||
|
||||
core.log('info', '[hunger_ng] '..info)
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
-- Paths for later use
|
||||
local modpath = core.get_modpath('hunger_ng')..DIR_DELIM
|
||||
local worldpath = core.get_worldpath()..DIR_DELIM
|
||||
local configpath = worldpath..'_hunger_ng'..DIR_DELIM..'hunger_ng_settings.conf'
|
||||
|
||||
|
||||
-- World-specific configuration interface for use in the get function
|
||||
local worldconfig = Settings(configpath)
|
||||
|
||||
|
||||
-- Wrapper for getting configuration options
|
||||
--
|
||||
-- The function automatically prefixes the given setting with `hunger_ng_` and
|
||||
-- returns the requested setting from one of the three sources.
|
||||
--
|
||||
-- 1. world-specific `./worlds/worldname/_hunger_ng/hunger_ng.conf` file
|
||||
-- 2. server-specific configuration file
|
||||
-- 3. the given default value
|
||||
--
|
||||
-- If 1. is found then it will be returned from there. If 2. is found then it
|
||||
-- will be returned from there and after that it will be returned using 3.
|
||||
--
|
||||
-- @param setting The unprefixed setting name
|
||||
-- @param default The default value if the setting is not found
|
||||
-- @return string The value for the requested setting
|
||||
local get = function (setting, default)
|
||||
local parameter = 'hunger_ng_'..setting
|
||||
local global_setting = core.settings:get(parameter)
|
||||
local world_specific_setting = worldconfig:get(parameter)
|
||||
return world_specific_setting or global_setting or default
|
||||
end
|
||||
|
||||
|
||||
-- Global hunger_ng table that will be used to pass around variables and use
|
||||
-- them later in the game. The table is not to be used by mods. Mods should
|
||||
-- only use the interoperability functionality. This table is for internal
|
||||
-- use only.
|
||||
hunger_ng = {
|
||||
functions = {},
|
||||
food_items = {
|
||||
satiating = 0,
|
||||
starving = 0,
|
||||
healing = 0,
|
||||
injuring = 0,
|
||||
},
|
||||
attributes = {
|
||||
hunger_bar_id = 'hunger_ng:hunger_bar_id',
|
||||
hunger_value = 'hunger_ng:hunger_value',
|
||||
eating_timestamp = 'hunger_ng:eating_timestamp',
|
||||
hunger_disabled = 'hunger_ng:hunger_disabled',
|
||||
effect_heal = 'hunger_ng:effect_heal',
|
||||
effect_hunger = 'hunger_ng:effect_hunger',
|
||||
effect_starve = 'hunger_ng:effect_starve'
|
||||
},
|
||||
configuration = {
|
||||
debug_mode = core.is_yes(get('debug_mode', false)),
|
||||
log_prefix = '[hunger_ng] ',
|
||||
translator = core.get_translator('hunger_ng')
|
||||
},
|
||||
settings = {
|
||||
hunger_bar = {
|
||||
image = get('hunger_bar_image', 'hunger_ng_builtin_bread_icon.png'),
|
||||
use = core.is_yes(get('use_hunger_bar', true)),
|
||||
force_builtin_image = get('force_builtin_image', false),
|
||||
},
|
||||
timers = {
|
||||
heal = tonumber(get('timer_heal', 5)),
|
||||
starve = tonumber(get('timer_starve', 10)),
|
||||
basal_metabolism = tonumber(get('timer_basal_metabolism', 60)),
|
||||
movement = tonumber(get('timer_movement', 0.5))
|
||||
},
|
||||
hunger = {
|
||||
timeout = tonumber(get('hunger_timeout', 0)),
|
||||
persistent = core.is_yes(get('hunger_persistent', true)),
|
||||
start_with = tonumber(get('hunger_start_with', 20)),
|
||||
maximum = tonumber(get('hunger_maximum', 20))
|
||||
}
|
||||
},
|
||||
effects = {
|
||||
heal = {
|
||||
above = tonumber(get('heal_above', 16)),
|
||||
amount = tonumber(get('heal_amount', 1)),
|
||||
},
|
||||
starve = {
|
||||
below = tonumber(get('starve_below', 1)),
|
||||
amount = tonumber(get('starve_amount', 1)),
|
||||
die = core.is_yes(get('starve_die', false))
|
||||
},
|
||||
disabled_attribute = 'hunger_ng:hunger_disabled'
|
||||
},
|
||||
costs = {
|
||||
base = tonumber(get('cost_base', 0.1)),
|
||||
dig = tonumber(get('cost_dig', 0.005)),
|
||||
place = tonumber(get('cost_place', 0.01)),
|
||||
movement = tonumber(get('cost_movement', 0.008))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-- Load mod parts
|
||||
dofile(modpath..'system'..DIR_DELIM..'hunger_functions.lua')
|
||||
dofile(modpath..'system'..DIR_DELIM..'chat_commands.lua')
|
||||
dofile(modpath..'system'..DIR_DELIM..'timers.lua')
|
||||
dofile(modpath..'system'..DIR_DELIM..'register_on.lua')
|
||||
dofile(modpath..'system'..DIR_DELIM..'add_hunger_data.lua')
|
||||
dofile(modpath..'system'..DIR_DELIM..'interoperability.lua')
|
||||
|
||||
|
||||
-- Log debug mode warning
|
||||
if hunger_ng.configuration.debug_mode then
|
||||
local log_prefix = hunger_ng.configuration.log_prefix
|
||||
core.log('warning', log_prefix..'Mod loaded with debug mode enabled!')
|
||||
end
|
||||
|
||||
|
||||
-- Replace the global table used for easy variable access within the mod with
|
||||
-- an API-like global table for other mods to utilize.
|
||||
local api_functions = {
|
||||
add_hunger_data = hunger_ng.functions.add_hunger_data,
|
||||
alter_hunger = hunger_ng.functions.alter_hunger,
|
||||
configure_hunger = hunger_ng.functions.configure_hunger,
|
||||
set_effect = hunger_ng.set_effect,
|
||||
get_hunger_information = hunger_ng.functions.get_hunger_information,
|
||||
hunger_bar_image = hunger_ng.settings.hunger_bar.image,
|
||||
food_items = hunger_ng.food_items,
|
||||
interoperability = {
|
||||
settings = hunger_ng.settings,
|
||||
attributes = hunger_ng.attributes,
|
||||
translator = hunger_ng.configuration.translator,
|
||||
get_data = hunger_ng.functions.get_data,
|
||||
set_data = hunger_ng.functions.set_data
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-- Replace the internal global table with the api functions
|
||||
hunger_ng = api_functions
|
||||
Loading…
Add table
Add a link
Reference in a new issue