[sneeker] Update to Git commit b69cc98:

https://github.com/AntumDeluge/mtmod-sneeker/tree/b69cc98
master
AntumDeluge 2017-05-29 03:02:15 -07:00
parent d434226284
commit d2f78defe0
8 changed files with 81 additions and 39 deletions

View File

@ -60,7 +60,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m
* mobiles/aggressive/
* [mobs_goblins][] ([CC-BY-SA / CC-BY / CC0][lic.mobs_goblins]) -- version: [a346f85 Git][ver.mobs_goblins] *2015-09-12* ([patched][patch.mobs_goblins])
* [mobs_monster][] ([MIT][lic.mobs_monster]) -- version: [f6d0e01 Git][ver.mobs_monster] *2017-04-27*
* [sneeker][] ([WTFPL][lic.wtfpl] / [CC0][lic.cc0]) -- version: [d336800 Git][ver.sneeker] *2017-05-29*
* [sneeker][] ([WTFPL][lic.wtfpl] / [CC0][lic.cc0]) -- version: [b69cc98 Git][ver.sneeker] *2017-05-29*
* [spidermob][] ([LGPL][lic.lgpl2.1] / [CC BY-SA][lic.ccbysa3.0] / [MIT][lic.mit] / [WTFPL][lic.spidermob] / [Unlicense][lic.unlicense]) -- version [c72d2ff Git][ver.spidermob] *2016-08-14* ([patched][patch.spidermob])
* mobiles/engine/
* mobiles/general/
@ -462,7 +462,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m
[ver.rainbow_ore]: https://github.com/FsxShader2012/rainbow_ore/tree/6e77693
[ver.signs_lib]: https://github.com/minetest-mods/signs_lib/tree/2c36937
[ver.simple_protection]: https://github.com/SmallJoker/simple_protection/tree/23c024f
[ver.sneeker]: https://github.com/AntumDeluge/mtmod-sneeker/tree/d336800
[ver.sneeker]: https://github.com/AntumDeluge/mtmod-sneeker/tree/b69cc98
[ver.snowdrift]: https://github.com/paramat/snowdrift/tree/fcb0537
[ver.spawneggs]: https://github.com/thefamilygrog66/spawneggs/tree/4650370
[ver.spectator_mode]: https://github.com/minetest-mods/spectator_mode/tree/7d68bec

View File

@ -1769,19 +1769,24 @@ sneeker.debug = true
# Sets maximum number of spawns that can exist in world.
# type: int
# default: 50
#sneeker.spawn_cap = 50
# default: 25
#sneeker.spawn_cap = 25
# Sets possibility for sneeker mob spawn.
# type: int
# default: 18000
#sneeker.spawn_chance = 18000
# default: 2
#sneeker.spawn_chance = 2
# Sets frequency of sneeker mob spawn chance. Default 1200 is
# equivalent to 40 minutes (60 * 40).
# type: int
# default: 2400
#sneeker.spawn_interval = 2400
#sneeker.spawn_interval = 120
# Sets the maximum light that a node can have for spawn to occur.
# type: int
# default: 7
#sneeker.spawn_maxlight = 7

View File

@ -1,14 +1,30 @@
-- Functions for sneeker mod
local log_mods = minetest.setting_getbool('log_mods')
-- Displays a message in log output
function sneeker.log(message)
minetest.log('action', '[' .. sneeker.modname .. '] ' .. message)
if log_mods then
minetest.log('action', '[' .. sneeker.modname .. '] ' .. message)
end
end
-- Displays a message in log output only if 'sneeker.debug' is set to 'true'
function sneeker.log_debug(message)
if sneeker.debug then
sneeker.log('[DEBUG] ' .. message)
sneeker.log('DEBUG: ' .. message)
end
end
-- Spawns a sneeker entity
function sneeker.spawn(pos)
minetest.add_entity(pos, sneeker.mob_name)
sneeker.log_debug('Spawned entity "' .. sneeker.mob_name .. '" at ' .. tostring(pos.x) .. ',' .. tostring(pos.y))
end
-- Retrieves pos coordinates in string value
function sneeker.get_pos_string(pos)
return 'x=' .. tostring(pos.x) .. ', y=' .. tostring(pos.y) .. ', z=' .. tostring(pos.z)
end

View File

@ -5,21 +5,19 @@ sneeker = {}
sneeker.modname = minetest.get_current_modname()
sneeker.modpath = minetest.get_modpath(sneeker.modname)
local log_mods = minetest.setting_getbool('log_mods')
if log_mods then
if minetest.setting_getbool('log_mods') then
minetest.log('action', 'Loading mod "' .. sneeker.modname .. '" ...')
end
dofile(sneeker.modpath .. '/settings.lua')
dofile(sneeker.modpath .. '/functions.lua')
sneeker.log_debug('Debugging is on')
sneeker.mob_name = sneeker.modname .. ':' .. sneeker.modname
sneeker.spawnegg_name = sneeker.modname .. ':spawnegg'
if log_mods then
sneeker.log('Spawn cap: ' .. tostring(sneeker.spawn_cap))
end
sneeker.log('Spawn cap: ' .. tostring(sneeker.spawn_cap))
local scripts = {
'tnt_function',

View File

@ -2,4 +2,9 @@
sneeker.debug = minetest.setting_get('sneeker.debug') or false
-- Maximum number of spawns active at one time
sneeker.spawn_cap = minetest.setting_get('sneeker.spawn_cap') or 25
-- Maximum light of node for spawn
sneeker.spawn_maxlight = minetest.setting_get('sneeker.spawn_maxlight') or 7

View File

@ -5,8 +5,11 @@ sneeker.debug (Log debug output) bool false
sneeker.spawn_cap (Maximum spawns) int 25
# Sets possibility for spawn.
sneeker.spawn_chance (Spawn chance) int 18000
sneeker.spawn_chance (Spawn chance) int 2
# Sets frequency of spawn chance.
# Default 1200 is equivalent to 20 minutes (60 * 40).
sneeker.spawn_interval (Spawn interval) int 2400
# Default 120 is equivalent to 2 minutes (60 * 2).
sneeker.spawn_interval (Spawn interval) int 120
# Sets the maximum light that a node can have for spawn to occur.
sneeker.spawn_maxlight (Max light for spawn) int 7

View File

@ -5,13 +5,13 @@ local time_min = 60
local time_hr = time_min * 60
local time_day = time_hr * 24
local spawn_chance = minetest.setting_get('sneeker.spawn_chance') or 18000
local spawn_interval = minetest.setting_get('sneeker.spawn_interval') or time_min * 40 -- Default interval is 40 minutes
local spawn_chance = minetest.setting_get('sneeker.spawn_chance') or 2 -- 50% chance of spawn
local spawn_interval = minetest.setting_get('sneeker.spawn_interval') or time_min * 2 -- Default interval is 2 minutes
if minetest.setting_getbool('log_mods') then
sneeker.log('Spawn chance: ' .. tostring(spawn_chance) .. ' (1/' .. tostring(spawn_chance) .. ')')
sneeker.log('Spawn interval: ' .. tostring(spawn_interval) .. ' (' .. tostring(spawn_interval/60) .. ' minutes)')
end
local spawn_chance_percent = tostring(math.floor(1 / spawn_chance * 100)) .. '%'
sneeker.log('Spawn chance: ' .. spawn_chance_percent)
sneeker.log('Spawn interval: ' .. tostring(spawn_interval) .. ' (' .. tostring(spawn_interval/60) .. ' minute(s))')
minetest.register_abm({
nodenames = {'default:dirt_with_grass', 'default:stone'},
@ -22,19 +22,25 @@ minetest.register_abm({
if active_object_count_wider > 5 then
return
end
-- Check light value of node
pos.y = pos.y+1
if not minetest.get_node_light(pos) then
return
end
if minetest.get_node_light(pos) > 5 then
return
end
if minetest.get_node_light(pos) < -1 then
local node_light = minetest.get_node_light(pos)
-- Debugging spawning
sneeker.log_debug('Node light level at ' .. sneeker.get_pos_string(pos) .. ': ' .. tostring(node_light))
if not node_light or node_light > sneeker.spawn_maxlight or node_light < -1 then
sneeker.log_debug('Node not dark enough for spawn')
return
end
-- Spawn range
if pos.y > 31000 then
return
end
-- Node must be touching air
if minetest.get_node(pos).name ~= 'air' then
return
end
@ -44,14 +50,20 @@ minetest.register_abm({
end
-- Get total count of sneekers in world
local name, count
for name in pairs(minetest.luaentities) do
if name == sneeker.mob_name then
local count = 0
for I in pairs(minetest.luaentities) do
if minetest.luaentities[I].name == sneeker.mob_name then
count = count + 1
end
end
if count >= sneeker.spawn_cap then return end -- Max sneekers already exist
minetest.add_entity(pos, sneeker.mob_name)
sneeker.log_debug('Current active spawns: ' .. tostring(count) .. '/' .. tostring(sneeker.spawn_cap))
if count >= sneeker.spawn_cap then
sneeker.log_debug('Max spawns reached')
return
end
sneeker.spawn(pos)
end
})

View File

@ -107,11 +107,14 @@ sneeker.debug (Log debug output) bool false
sneeker.spawn_cap (Maximum spawns) int 25
# Sets possibility for spawn.
sneeker.spawn_chance (Spawn chance) int 18000
sneeker.spawn_chance (Spawn chance) int 2
# Sets frequency of spawn chance.
# Default 1200 is equivalent to 20 minutes (60 * 40).
sneeker.spawn_interval (Spawn interval) int 2400
# Default 120 is equivalent to 2 minutes (60 * 2).
sneeker.spawn_interval (Spawn interval) int 120
# Sets the maximum light that a node can have for spawn to occur.
sneeker.spawn_maxlight (Max node light for spawn) int 7
[*Player Visuals]