Imported from trollstream "ContentDB"
commit
c504577227
|
@ -0,0 +1,30 @@
|
|||
Timed World Modifiers library
|
||||
=============================
|
||||
|
||||
* Version 0.1
|
||||
* Licence LGPLv2 or, at your discretion, any later version.
|
||||
|
||||
Twmlib (Timed World Modifier) adds a kind of environmental ABM that could be triggered on a very wide range of nodes but only a few at a time.
|
||||
See twmlib_api.txt for documentation.
|
||||
|
||||
|
||||
Licence
|
||||
-------
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
https://www.gnu.org/licenses/licenses.html#LGPL
|
||||
|
||||
|
||||
Authors of source code
|
||||
----------------------
|
||||
|
||||
Karamel
|
|
@ -0,0 +1,80 @@
|
|||
|
||||
twmlib = {}
|
||||
twmlib.registered_twm = {}
|
||||
function twmlib.next_interval()
|
||||
return tonumber(minetest.settings:get("twmlib.interval")) or 2
|
||||
end
|
||||
local mod_path = minetest.get_modpath(minetest.get_current_modname())
|
||||
|
||||
function twmlib.register_twm(twm_definition)
|
||||
for _, nodename in ipairs(twm_definition.nodenames) do
|
||||
if twmlib.registered_twm[nodename] == nil then
|
||||
twmlib.registered_twm[nodename] = {}
|
||||
end
|
||||
table.insert(twmlib.registered_twm[nodename], twm_definition)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local range = (minetest.settings:get("active_block_range") or 3) * 16
|
||||
local function loop()
|
||||
-- Take one player at random
|
||||
local players = minetest.get_connected_players()
|
||||
if #players == 0 then return end -- players not loaded yet
|
||||
local picked = players[math.random(1, #players)]
|
||||
-- Take a random position around
|
||||
local pos = picked:get_pos()
|
||||
if not pos then return end -- player not positioned yet
|
||||
pos.y = pos.y + math.random(-range, range)
|
||||
pos.x = pos.x + math.random(-range, range)
|
||||
pos.z = pos.z + math.random(-range, range)
|
||||
local rand_pos = vector.new(pos.x, pos.y, pos.z)
|
||||
local node = minetest.get_node(rand_pos)
|
||||
if node.name == "air" then
|
||||
-- go up or down a few times until something is found
|
||||
local dy = (math.random() > 0.5)
|
||||
if dy then
|
||||
dy = 1
|
||||
else
|
||||
dy = -1
|
||||
end
|
||||
local i = 0
|
||||
while i < range / 2 and node.name == "air" do
|
||||
rand_pos = vector.add(rand_pos, vector.new(0, dy, 0))
|
||||
node = minetest.get_node(rand_pos)
|
||||
i = i + 1
|
||||
end
|
||||
end
|
||||
if node.name == "air" or node.name == "ignore" then return end
|
||||
-- look for a registered twm for the node or group
|
||||
if twmlib.registered_twm[node.name] then
|
||||
-- trigger twm by node
|
||||
for _, def in ipairs(twmlib.registered_twm[node.name]) do
|
||||
if def.chance then
|
||||
if math.random(1, def.chance) == 1 then
|
||||
def.action(rand_pos, node)
|
||||
end
|
||||
else
|
||||
def.action(rand_pos, node)
|
||||
end
|
||||
end
|
||||
end
|
||||
local node_def = minetest.registered_nodes[node.name]
|
||||
for group, level in ipairs(node_def.groups) do
|
||||
local str_group = "group:" .. group
|
||||
if twmlib.registered_twm[str_group] then
|
||||
-- trigger twm by group
|
||||
for _, def in ipairs(twmlib.registered_twm[str_group]) do
|
||||
if def.chance then
|
||||
if math.random(1, def.chance) == 1 then
|
||||
def.action(rand_pos, node)
|
||||
end
|
||||
else
|
||||
def.action(rand_pos, node)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
minetest.after(twmlib.next_interval(), loop)
|
||||
end
|
||||
minetest.after(twmlib.next_interval(), loop)
|
|
@ -0,0 +1 @@
|
|||
description = Timed World Modifiers, triggers on random nodes library
|
|
@ -0,0 +1,33 @@
|
|||
Twmlib Lua API
|
||||
==============
|
||||
|
||||
Table of contents
|
||||
-- Introduction
|
||||
-- API
|
||||
---- twmlib.register_twm
|
||||
-- TWM definition
|
||||
|
||||
|
||||
Introduction
|
||||
------------
|
||||
|
||||
Twmlib (Timed World Modifier) adds a kind of environmental ABM that could be triggered on a very wide range of nodes but only a few at a time.
|
||||
|
||||
On a regular and rather short interval, a random node is picked around a player. If this node has a registered TWM, it can be triggered.
|
||||
|
||||
|
||||
API
|
||||
---
|
||||
|
||||
### twmlib.register_twm(twm_definition)
|
||||
|
||||
* `twm_definition` see below
|
||||
|
||||
TWM definition
|
||||
--------------
|
||||
|
||||
A TWM definition is like an ABM definition.
|
||||
|
||||
* `nodenames` a table of node names, that can include groups with "group:<name>" rather than simple node name.
|
||||
* `chance` optional inverted chance of the TWM to be triggered. Default it 1.
|
||||
* `action` the function(pos, node) to be called when the TWM is triggered.
|
Loading…
Reference in New Issue