water_life/lua_api.txt

276 lines
7.2 KiB
Plaintext

---------------
Water_life Api:
---------------
useful constants:
------------------
water_life.abr = minetest.get_mapgen_setting('active_block_range') or 2
water_life.abo = minetest.get_mapgen_setting('active_object_send_range_blocks') or 3
water_life.maxwhales = 1
water_life.maxsharks = water_life.abo/2
water_life.maxmobs = 30
helper functions:
-----------------
##########################
water_life.random(min,max)
##########################
uses minetest PcgRandom generator for better random numbers
https://en.wikipedia.org/wiki/Permuted_congruential_generator
a bit slower, but better numbers than math.random
water_life.random() will return a float between 0 and 1
water_life.random(10) will return integer number between 1 and 10
water_life.random(50,100) will return integer number betwwen 50 and 100
###############################
water_life_get_biome_data(pos)
###############################
gets biome data at >pos< and return a table or nil
biome.id = biome id number
biome.name = biome name
biome.temp = temperature in celsius (integer rounded)
biome.humid = humidity in % (float rounded, two decimal places)
################################
water_life.water_depth(pos,max)
###############################
will try to find a liquid surface at position pos, give up after #max nodes
returns a table:
table.surface = position of water surface node
table.water_depth = liquid depth at that position
table.type = string of liquid source node found
#####################################
water_life.temp_show(pos,time,pillar)
#####################################
(convenience function for older people like me :D )
shows a marker entity at >pos< for >time< seconds.
if pillar set, >pillar< nodes high
########################
water_life.leftorright()
########################
returns true with a possibility of 50% else returns false
####################################
water_life.register_shark_food(name)
####################################
register enitiy "name" as shark food. Will be attacked by sharks if in water and in sight
##########################################
water_life.count_objects(pos,radius,name)
##########################################
counts objects around >pos< with >radius< in nodes and returns a table:
(>name< is a string or nil)
table.all - total number of all objects
table.sharks - total number of sharks
table.whales - total number of whales
table.fish - total number of fish wild/tamed
table.name - total number of mob "name"
if radius is nil radius will be the active_object_send_range_blocks * 16
if name is nil table.name is 0
#############################
water_life.handle_drops(self)
#############################
call this on death of an entity and define drops in entity definition like this:
chances are in 100/x. So chance =1 means 100%, 2 = 50%, 3 = 33 1/3 %, ...
drops = {
{name = "default:diamond", chance = 5, min = 1, max = 5,},
{name = "water_life:meat_raw", chance = 2, min = 1, max = 5,},
},
#########################################
water_life.get_yaw_to_object(self,tgtobj)
#########################################
returns 2D angle in rad tgtobj seen from self
##########################################
water_life.find_collision(pos1,pos2,water)
##########################################
throws a raycast from pos1 to pos2
if water is true then water is handled as obstacle
returns distance to obstacle in integer or nil
if nothing found
#########################################
water_life.radar(pos, yaw, radius, water)
#########################################
radar function which will give you back 6 integers:
left, right, up, down, under, above
pos: this should be the pos of the entity
yaw: yaw of the entity
radius: radius from pos to scan for obstacles
water: if true waternodes are obstacles
(in general higher values mean more and nearer obstacles)
calculation for left and right value:
left right
+44 +33 +22 +11 0 -11 -22 -33 -44 yaw add/subtract in degrees
pos.y+6 1 2 3 4 5 4 3 2 1
pos.y+4 1 2 3 4 5 4 3 2 1
pos.y+2 1 2 3 4 5 4 3 2 1
pos.y 1 2 3 4 5 4 3 2 1
if found an obstacle at a position the value of above table is added to right or
left value. Position at 0 is added to left and right value
pos is the position in yaw +/- degrees in distance of radius in front of the entiy
that means, the higher values of left and/or right, the more obstacles found near to
center position in distance of radius in front of the entity.
calculation of up and down value:
+33 +22 +11 0 -11 -22 -33
pos.y+-4 0 1 2 3 2 1 0
pos.y+-3 1 2 3 4 3 2 1
pos.y+-2 2 3 4 5 4 3 2
pos.y+-1 3 4 5 6 5 4 3
pos.y+-0 4 5 6 7 6 5 4
if found an obstacle at a position the value from above table is
multiplied by (distance to obstacle/radius) *2. That means if an
obstacle is right in front the table value is doubled.
calculation of under value:
this is the distance between entity pos.y value and the ground
calculation of above value:
this is the distance between entity pos.y value and ceiling above
HQ Behaviors:
-----------
#################################################
water_life.hq_swimto(self,prty,speed,node,tgtpos)
#################################################
mob will swim to given node which must be in its view_range
node can be a string or a table of string
OR
if tgtpos is set it will swim there, node will be ignored then
returns if distance <= 1 node
#########################################################
water_life.hq_swimfrom(self,prty,tgtobj,speed,outofsight)
#########################################################
mob will turn 180 degrees away from target and try to escape until target is out of sight (if nil viewrange + 50%)
#################################################
water_life.big_hq_aqua_turn(self,prty,tyaw,speed)
#################################################
will turn mob with large collisionbox to tyaw with speed
#########################################
water_life.big_aqua_roam(self,prty,speed)
#########################################
mob with large collisionbox will roam the waters with given speed.
A bit like mobkit.hq_aqua_roam with less turns
Chat commands:
----------------
########
wl_bdata
########
needs server privs, shows biome id,name,temperature in celsius and humidity at player position
##########
wl_version
##########
will print out water_life version number, needs server priv