Poison patches
parent
27f74f6f3f
commit
953da6228b
|
@ -8,7 +8,7 @@ local waterinterval = 20 -- check every 20 seconds for spawnpos in water
|
|||
|
||||
local function getcount(name)
|
||||
if not name then
|
||||
return 0
|
||||
return 0
|
||||
else
|
||||
return name
|
||||
end
|
||||
|
@ -19,41 +19,55 @@ local function spawnstep(dtime)
|
|||
|
||||
timer = timer + dtime
|
||||
landtimer = landtimer + dtime
|
||||
|
||||
|
||||
if timer > waterinterval then
|
||||
|
||||
|
||||
for _,plyr in ipairs(minetest.get_connected_players()) do
|
||||
|
||||
|
||||
local toomuch = false
|
||||
|
||||
|
||||
if plyr and plyr:is_player() and plyr:get_pos().y > -50 and plyr:get_pos().y < 150 then -- each player gets a spawn chance every 10s on average
|
||||
|
||||
|
||||
local pos = plyr:get_pos()
|
||||
local yaw = plyr:get_look_horizontal()
|
||||
local animal = water_life.count_objects(pos)
|
||||
local meta = plyr:get_meta()
|
||||
|
||||
|
||||
|
||||
if meta:get_int("snakepoison") > 0 then
|
||||
local score = plyr:get_hp()
|
||||
plyr:set_hp(score-1)
|
||||
poison_value = 1 --defautl poison value
|
||||
local pl_name=plyr:get_player_name() -- player name
|
||||
local hunger_ng_infos = hunger_ng.get_hunger_information(pl_name) -- information from hunger_ng
|
||||
--minetest.log(dump(hunger_ng_infos))
|
||||
local hunger_ng_interoper = hunger_ng.interoperability
|
||||
--minetest.log(dump(hunger_ng_interoper))
|
||||
-- if healing is enabled, then add healing to poison value
|
||||
-- if the same you have the chance to survive if you stay satiated
|
||||
if hunger_ng_infos.effects.healing then
|
||||
poison_value = ((waterinterval/hunger_ng_interoper.settings.timers.heal)*hunger_ng_interoper.effects.heal.amount) + 0.1 --+ poison_value -- if you want decrease healt even with healing
|
||||
end
|
||||
minetest.log("Poison: "..dump(poison_value))
|
||||
|
||||
local score = plyr:get_hp()-poison_value
|
||||
--if score < 0 then score = 0 end
|
||||
minetest.log("Health: "..dump(score))
|
||||
plyr:set_hp(score)
|
||||
end
|
||||
|
||||
|
||||
if meta:get_int("repellant") > 0 then
|
||||
if math.floor(os.clock()) - meta:get_int("repellant") > water_life.repeltime then
|
||||
water_life.change_hud(plyr,"repellant",0)
|
||||
meta:set_int("repellant",0)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
if animal.all > water_life.maxmobs then toomuch = true end
|
||||
|
||||
|
||||
-- find a pos randomly in look direction of player
|
||||
local radius = (water_life.abr * 12) -- 75% from 16 = 12 nodes
|
||||
radius = random(7,radius) -- not nearer than 7 nodes in front of player
|
||||
local angel = math.rad(random(75)) -- look for random angel 0 - 75 degrees
|
||||
if water_life.leftorright() then yaw = yaw + angel else yaw = yaw - angel end -- add or substract to/from yaw
|
||||
|
||||
|
||||
local pos2 = mobkit.pos_translate2d(pos,yaw,radius) -- calculate position
|
||||
local depth, stype, surface = water_life.water_depth(pos2,25) -- get surface pos and water depth
|
||||
local bdata = water_life_get_biome_data(pos2) -- get biome data at spawn position
|
||||
|
@ -62,116 +76,116 @@ local function spawnstep(dtime)
|
|||
local landpos = nil
|
||||
local geckopos = nil
|
||||
local moskitopos = nil
|
||||
|
||||
|
||||
-- no need of so many postions on land
|
||||
if landtimer > landinterval then
|
||||
landpos = water_life.find_node_under_air(pos2)
|
||||
geckopos = water_life.find_node_under_air(pos2,5,{"group:tree","group:leaves","default:junglegrass"})
|
||||
moskitopos = water_life.find_node_under_air(pos2,5,{"default:river_water_source","water_life:muddy_river_water_source","group:flora","default:dirt_with_rainforest_litter"})
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
if moskitopos and not water_life.dangerous then
|
||||
local mlevel = minetest.get_node_light(moskitopos)
|
||||
local ptime = water_life.get_game_time()
|
||||
local mdata = water_life_get_biome_data(moskitopos)
|
||||
--minetest.chat_send_all("MOSKITO: "..dump(moskitopos).." : "..dump(mdata.temp).." : "..dump(ptime).." : "..dump(mlevel))
|
||||
|
||||
|
||||
if ((ptime and ptime > 2) or mlevel < 8) and mdata.temp > 16 then --from 3pm to 5am or in shadows all day long
|
||||
|
||||
|
||||
minetest.set_node(moskitopos, {name = "water_life:moskito"})
|
||||
minetest.get_node_timer(moskitopos):start(random(15,45))
|
||||
local pmeta = minetest.get_meta(moskitopos)
|
||||
pmeta:set_int("mlife",math.floor(os.clock()))
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--some spawn on land, too
|
||||
|
||||
|
||||
if landpos then
|
||||
local landdata = water_life_get_biome_data(landpos)
|
||||
|
||||
|
||||
|
||||
|
||||
if not water_life.dangerous then
|
||||
-- the snake
|
||||
local mobname = 'water_life:snake'
|
||||
local faktor = (100 - getcount(animal[mobname]) * 50)
|
||||
local faktor = (100 - getcount(animal[mobname]) * 50)
|
||||
if random(100) < faktor then
|
||||
local fits = minetest.is_protected(landpos,mobname)
|
||||
--minetest.chat_send_all(dump(fits))
|
||||
|
||||
|
||||
if (string.match(landdata.name,"desert") or string.match(landdata.name,"savanna"))
|
||||
and not fits and landdata.temp > 15 then
|
||||
|
||||
|
||||
local obj=minetest.add_entity(landpos,mobname) -- ok spawn it already damnit
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
--the beaver
|
||||
local mobname = 'water_life:beaver'
|
||||
local faktor = (100 - getcount(animal[mobname]) * 25)
|
||||
local faktor = (100 - getcount(animal[mobname]) * 25)
|
||||
if random(100) < faktor then
|
||||
|
||||
|
||||
if string.match(landdata.name,"coniferous") and landdata.temp > -5 and landdata.temp < 20 then
|
||||
|
||||
|
||||
local obj=minetest.add_entity(landpos,mobname) -- ok spawn it already damnit
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
if geckopos then
|
||||
local landdata = water_life_get_biome_data(geckopos)
|
||||
|
||||
|
||||
local mobname = 'water_life:gecko'
|
||||
local faktor = (100 - getcount(animal[mobname]) * 50)
|
||||
if random(100) < faktor then
|
||||
|
||||
|
||||
|
||||
|
||||
if (string.match(landdata.name,"rainforest") or string.match(landdata.name,"savanna"))
|
||||
and landdata.temp > 20 then
|
||||
|
||||
|
||||
local obj=minetest.add_entity(geckopos,mobname) -- ok spawn it already damnit
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
--water spawn
|
||||
|
||||
if depth and depth > 0 then
|
||||
|
||||
if depth and depth > 0 then
|
||||
if water_life.radar_debug then
|
||||
water_life.temp_show(surface,9,5)
|
||||
minetest.chat_send_all(">>> Depth ="..dump(depth).." <<< "..dump(stype))
|
||||
minetest.chat_send_all(dump(bdata.name))
|
||||
end
|
||||
pos2 = surface
|
||||
|
||||
|
||||
end
|
||||
|
||||
|
||||
local liquidflag = nil
|
||||
|
||||
if stype == "default:water_source" then
|
||||
|
||||
if stype == "default:water_source" then
|
||||
liquidflag = "sea"
|
||||
|
||||
|
||||
elseif stype == "default:river_water_source" then
|
||||
liquidflag = "river"
|
||||
|
||||
|
||||
elseif stype == "water_life:muddy_river_water_source" then
|
||||
liquidflag = "muddy"
|
||||
|
||||
|
||||
end
|
||||
|
||||
|
||||
if liquidflag and not toomuch and surface then
|
||||
ground = mobkit.pos_shift(surface,{y=(dalam*-1)})
|
||||
|
||||
|
||||
|
||||
|
||||
if not water_life.dangerous then
|
||||
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
|
||||
local mobname = 'water_life:croc'
|
||||
|
@ -179,45 +193,45 @@ local function spawnstep(dtime)
|
|||
if random(100) < faktor then
|
||||
local fits = false
|
||||
if string.match(bdata.name,"rainforest") or string.match(bdata.name,"savanna") then fits = true end
|
||||
|
||||
|
||||
if depth < 4 and fits then --shark min water depth
|
||||
local obj=minetest.add_entity(surface,mobname) -- ok spawn it already damnit
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
end
|
||||
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
|
||||
|
||||
|
||||
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
|
||||
|
||||
|
||||
local mobname = 'water_life:snake'
|
||||
local faktor = (100 - getcount(animal[mobname]) * 50) +25
|
||||
if random(100) < faktor then
|
||||
local fits = false
|
||||
if string.match(bdata.name,"desert") or string.match(bdata.name,"savanna") then fits = true end
|
||||
|
||||
|
||||
if depth < 3 and fits then --snake max water depth
|
||||
local obj=minetest.add_entity(surface,mobname) -- ok spawn it already damnit
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
end
|
||||
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
|
||||
|
||||
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
|
||||
|
||||
local mobname = 'water_life:shark'
|
||||
if water_life.shark_spawn_rate >= random(1000) then
|
||||
|
||||
|
||||
local bcheck = water_life.count_objects(pos2,12)
|
||||
if getcount(animal[mobname]) < water_life.maxsharks and liquidflag == "sea" and not bcheck["water_life:shark_buoy"]
|
||||
and not animal["water_life:croc"] then
|
||||
|
||||
|
||||
if depth > 4 then --shark min water depth
|
||||
local obj=minetest.add_entity(mobkit.pos_shift(ground,{y=2}),mobname) -- spawn it 2 nodes above sea ground
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local mobname = "water_life:gull"
|
||||
local faktor = 100 - getcount(animal[mobname]) * 20
|
||||
if random(100) < faktor and liquidflag == "sea" then
|
||||
|
@ -227,12 +241,12 @@ local function spawnstep(dtime)
|
|||
local obj=minetest.add_entity(spawn,mobname) -- ok spawn it already damnit
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
|
||||
mobname = "water_life:urchin"
|
||||
if water_life.urchin_spawn_rate >= random(1000) then
|
||||
|
||||
|
||||
local upos1 = mobkit.pos_shift(ground,{x=-5,y=-2,z=-5})
|
||||
local upos2 = mobkit.pos_shift(ground,{x=5,y=2,z=5})
|
||||
local coraltable = minetest.find_nodes_in_area(upos1, upos2, water_life.urchinspawn)
|
||||
|
@ -241,14 +255,14 @@ local function spawnstep(dtime)
|
|||
local coralpos = coraltable[random(#coraltable)]
|
||||
coralpos.y = coralpos.y +1
|
||||
local node = minetest.get_node(coralpos)
|
||||
|
||||
|
||||
if node.name == "default:water_source" then
|
||||
local obj= water_life.set_urchin(coralpos) --minetest.add_entity(coralpos,mobname)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
|
||||
mobname = "water_life:clams"
|
||||
if water_life.clams_spawn_rate >= random(1000) then
|
||||
|
@ -259,29 +273,29 @@ local function spawnstep(dtime)
|
|||
local nearlife = water_life.count_objects(ground,8,"water_life:clams")
|
||||
if coraltable and #coraltable > 0 and getcount(animal[mobname]) < 10 and liquidflag == "sea" then
|
||||
local coralpos = mobkit.pos_shift(coraltable[random(#coraltable)],{y=1})
|
||||
|
||||
|
||||
local node = minetest.get_node(coralpos)
|
||||
if node.name == "default:water_source" then
|
||||
local obj= water_life.set_urchin(coralpos,"water_life:clams")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
|
||||
mobname = "water_life:jellyfish"
|
||||
|
||||
|
||||
|
||||
|
||||
local faktor = 100 - getcount(animal[mobname]) * 20
|
||||
if random(100) < faktor and liquidflag == "sea" and depth > 2 then
|
||||
local obj=minetest.add_entity(mobkit.pos_shift(ground,{y=2}),mobname)
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
mobname = "water_life:coralfish"
|
||||
|
||||
|
||||
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
|
||||
|
||||
|
||||
local cfpos1 = mobkit.pos_shift(ground,{x=-5,y=-2,z=-5})
|
||||
local cfpos2 = mobkit.pos_shift(ground,{x=5,y=2,z=5})
|
||||
local coraltable = minetest.find_nodes_in_area(cfpos1,cfpos2,water_life.urchinspawn)
|
||||
|
@ -300,11 +314,11 @@ local function spawnstep(dtime)
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
|
||||
mobname = "water_life:clownfish"
|
||||
|
||||
|
||||
faktor = 100 - getcount(animal[mobname]) * 50
|
||||
if random(100) < faktor and liquidflag == "sea" and #coraltable > 1 then
|
||||
local cfish = coraltable[random(#coraltable)]
|
||||
|
@ -315,18 +329,18 @@ local function spawnstep(dtime)
|
|||
entity.base = cfish
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
|
||||
mobname = 'water_life:fish'
|
||||
--local nearlife = water_life.count_objects(pos2,24,"water_life:piranha")
|
||||
if water_life.fish_spawn_rate >= random(1000) and ((animal.all < (water_life.maxmobs-5)) or getcount(animal[mobname]) < 5) and (liquidflag == "river" or liquidflag == "muddy") then
|
||||
|
||||
|
||||
local table = minetest.get_biome_data(pos)
|
||||
|
||||
|
||||
if not water_life.dangerous and table and water_life.piranha_biomes[minetest.get_biome_name(table.biome)] then
|
||||
mobname = "water_life:piranha"
|
||||
end
|
||||
|
||||
|
||||
if depth > 2 then -- min water depth for piranha and riverfish
|
||||
if mobname == "water_life:fish" then
|
||||
local obj=minetest.add_entity(pos2,mobname) -- ok spawn it already damnit
|
||||
|
@ -338,18 +352,18 @@ local function spawnstep(dtime)
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
end
|
||||
|
||||
|
||||
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
|
||||
|
||||
|
||||
mobname = 'water_life:whale'
|
||||
if water_life.whale_spawn_rate >= random(1000) and getcount(animal[mobname]) < (water_life.maxwhales) and liquidflag == "sea" then
|
||||
|
||||
|
||||
|
||||
|
||||
if depth > 8 then -- min water depth for whales
|
||||
|
||||
|
||||
local gotwhale = true
|
||||
local whpos = mobkit.pos_shift(surface,{y=-3})
|
||||
for i = 0,3,1 do
|
||||
|
@ -362,20 +376,19 @@ local function spawnstep(dtime)
|
|||
end
|
||||
end
|
||||
if gotwhale then local obj=minetest.add_entity(surface,mobname) end -- ok spawn it already damnit
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
timer = 0
|
||||
if landtimer > landinterval then landtimer = 0 end
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
minetest.register_globalstep(spawnstep)
|
||||
|
||||
|
|
|
@ -147,7 +147,8 @@ local api_functions = {
|
|||
attributes = hunger_ng.attributes,
|
||||
translator = hunger_ng.configuration.translator,
|
||||
get_data = hunger_ng.functions.get_data,
|
||||
set_data = hunger_ng.functions.set_data
|
||||
set_data = hunger_ng.functions.set_data,
|
||||
effects = hunger_ng.effects,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,88 @@
|
|||
|
||||
water_life.playerhud = {}
|
||||
water_life.playerhud.poison = {}
|
||||
water_life.playerhud.repellant = {}
|
||||
|
||||
|
||||
|
||||
water_life.hud_poison = {
|
||||
|
||||
hud_elem_type = "image",
|
||||
|
||||
position = {x=0.5, y=0.8},
|
||||
-- Left corner position of element
|
||||
|
||||
name = "water_life_poison",
|
||||
|
||||
scale = {x = 0.1, y = 0.1},
|
||||
|
||||
text = "water_life_emptyhud.png",
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
water_life.hud_repellant = {
|
||||
hud_elem_type = "image",
|
||||
|
||||
position = {x=0.55, y=0.8},
|
||||
-- Left corner position of element
|
||||
|
||||
name = "water_life_repellant",
|
||||
|
||||
scale = {x = 0.1, y = 0.1},
|
||||
|
||||
text = "water_life_emptyhud.png",
|
||||
}
|
||||
|
||||
|
||||
function water_life.change_hud(player,selection,switch)
|
||||
local value = ""
|
||||
if not player then return end
|
||||
if not selection then selection = "poison" end
|
||||
if not switch then switch = 1 end
|
||||
|
||||
|
||||
local name = player:get_player_name()
|
||||
|
||||
if selection == "poison" then
|
||||
if switch == 1 then value = "water_life_poison.png" else value = "water_life_emptyhud.png" end
|
||||
player:hud_change(water_life.playerhud.poison[name], "text", value)
|
||||
end
|
||||
|
||||
if selection == "repellant" then
|
||||
if switch == 1 then value = "water_life_repellanthud.png" else value = "water_life_emptyhud.png" end
|
||||
player:hud_change(water_life.playerhud.repellant[name], "text", value)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
if not player then return end
|
||||
|
||||
local meta=player:get_meta()
|
||||
meta:set_int("repellant",0)
|
||||
local name = player:get_player_name()
|
||||
|
||||
water_life.playerhud.poison[name] = player:hud_add(water_life.hud_poison)
|
||||
water_life.playerhud.repellant[name] = player:hud_add(water_life.hud_repellant)
|
||||
|
||||
if meta:get_int("snakepoison") > 0 then
|
||||
minetest.after(5, function(player)
|
||||
water_life.change_hud(player,"poison")
|
||||
end, player)
|
||||
end
|
||||
|
||||
end)
|
||||
|
||||
minetest.register_on_dieplayer(function(player)
|
||||
if not player then return end
|
||||
if water_life.poison_after_death then return end
|
||||
|
||||
local meta=player:get_meta()
|
||||
meta:set_int("snakepoison",0)
|
||||
water_life.change_hud(player,"poison",0)
|
||||
end)
|
|
@ -0,0 +1,394 @@
|
|||
local timer = 0
|
||||
local landtimer = 0
|
||||
local pi = math.pi
|
||||
local random = water_life.random
|
||||
local landinterval = 60 -- check every 60 seconds for spawnpos on land
|
||||
local waterinterval = 20 -- check every 20 seconds for spawnpos in water
|
||||
|
||||
|
||||
local function getcount(name)
|
||||
if not name then
|
||||
return 0
|
||||
else
|
||||
return name
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local function spawnstep(dtime)
|
||||
|
||||
timer = timer + dtime
|
||||
landtimer = landtimer + dtime
|
||||
|
||||
if timer > waterinterval then
|
||||
|
||||
for _,plyr in ipairs(minetest.get_connected_players()) do
|
||||
|
||||
local toomuch = false
|
||||
|
||||
if plyr and plyr:is_player() and plyr:get_pos().y > -50 and plyr:get_pos().y < 150 then -- each player gets a spawn chance every 10s on average
|
||||
|
||||
local pos = plyr:get_pos()
|
||||
local yaw = plyr:get_look_horizontal()
|
||||
local animal = water_life.count_objects(pos)
|
||||
local meta = plyr:get_meta()
|
||||
|
||||
if meta:get_int("snakepoison") > 0 then
|
||||
poison_value = 1 --defautl poison value
|
||||
local pl_name=plyr:get_player_name() -- player name
|
||||
local hunger_ng_infos = hunger_ng.get_hunger_information(pl_name) -- information from hunger_ng
|
||||
--minetest.log(dump(hunger_ng_infos))
|
||||
local hunger_ng_interoper = hunger_ng.interoperability
|
||||
--minetest.log(dump(hunger_ng_interoper))
|
||||
-- if healing is enabled, then add healing to poison value
|
||||
-- if the same you have the chance to survive if you stay satiated
|
||||
if hunger_ng_infos.effects.healing then
|
||||
poison_value = ((waterinterval/hunger_ng_interoper.settings.timers.heal)*hunger_ng_interoper.effects.heal.amount) + 0.1 --+ poison_value -- if you want decrease healt even with healing
|
||||
end
|
||||
minetest.log("Poison: "..dump(poison_value))
|
||||
|
||||
local score = plyr:get_hp()-poison_value
|
||||
--if score < 0 then score = 0 end
|
||||
minetest.log("Health: "..dump(score))
|
||||
plyr:set_hp(score)
|
||||
end
|
||||
|
||||
if meta:get_int("repellant") > 0 then
|
||||
if math.floor(os.clock()) - meta:get_int("repellant") > water_life.repeltime then
|
||||
water_life.change_hud(plyr,"repellant",0)
|
||||
meta:set_int("repellant",0)
|
||||
end
|
||||
end
|
||||
|
||||
if animal.all > water_life.maxmobs then toomuch = true end
|
||||
|
||||
-- find a pos randomly in look direction of player
|
||||
local radius = (water_life.abr * 12) -- 75% from 16 = 12 nodes
|
||||
radius = random(7,radius) -- not nearer than 7 nodes in front of player
|
||||
local angel = math.rad(random(75)) -- look for random angel 0 - 75 degrees
|
||||
if water_life.leftorright() then yaw = yaw + angel else yaw = yaw - angel end -- add or substract to/from yaw
|
||||
|
||||
local pos2 = mobkit.pos_translate2d(pos,yaw,radius) -- calculate position
|
||||
local depth, stype, surface = water_life.water_depth(pos2,25) -- get surface pos and water depth
|
||||
local bdata = water_life_get_biome_data(pos2) -- get biome data at spawn position
|
||||
local ground = {}
|
||||
local dalam = depth
|
||||
local landpos = nil
|
||||
local geckopos = nil
|
||||
local moskitopos = nil
|
||||
|
||||
-- no need of so many postions on land
|
||||
if landtimer > landinterval then
|
||||
landpos = water_life.find_node_under_air(pos2)
|
||||
geckopos = water_life.find_node_under_air(pos2,5,{"group:tree","group:leaves","default:junglegrass"})
|
||||
moskitopos = water_life.find_node_under_air(pos2,5,{"default:river_water_source","water_life:muddy_river_water_source","group:flora","default:dirt_with_rainforest_litter"})
|
||||
end
|
||||
|
||||
|
||||
if moskitopos and not water_life.dangerous then
|
||||
local mlevel = minetest.get_node_light(moskitopos)
|
||||
local ptime = water_life.get_game_time()
|
||||
local mdata = water_life_get_biome_data(moskitopos)
|
||||
--minetest.chat_send_all("MOSKITO: "..dump(moskitopos).." : "..dump(mdata.temp).." : "..dump(ptime).." : "..dump(mlevel))
|
||||
|
||||
if ((ptime and ptime > 2) or mlevel < 8) and mdata.temp > 16 then --from 3pm to 5am or in shadows all day long
|
||||
|
||||
minetest.set_node(moskitopos, {name = "water_life:moskito"})
|
||||
minetest.get_node_timer(moskitopos):start(random(15,45))
|
||||
local pmeta = minetest.get_meta(moskitopos)
|
||||
pmeta:set_int("mlife",math.floor(os.clock()))
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
--some spawn on land, too
|
||||
|
||||
if landpos then
|
||||
local landdata = water_life_get_biome_data(landpos)
|
||||
|
||||
|
||||
if not water_life.dangerous then
|
||||
-- the snake
|
||||
local mobname = 'water_life:snake'
|
||||
local faktor = (100 - getcount(animal[mobname]) * 50)
|
||||
if random(100) < faktor then
|
||||
local fits = minetest.is_protected(landpos,mobname)
|
||||
--minetest.chat_send_all(dump(fits))
|
||||
|
||||
if (string.match(landdata.name,"desert") or string.match(landdata.name,"savanna"))
|
||||
and not fits and landdata.temp > 15 then
|
||||
|
||||
local obj=minetest.add_entity(landpos,mobname) -- ok spawn it already damnit
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
|
||||
--the beaver
|
||||
local mobname = 'water_life:beaver'
|
||||
local faktor = (100 - getcount(animal[mobname]) * 25)
|
||||
if random(100) < faktor then
|
||||
|
||||
if string.match(landdata.name,"coniferous") and landdata.temp > -5 and landdata.temp < 20 then
|
||||
|
||||
local obj=minetest.add_entity(landpos,mobname) -- ok spawn it already damnit
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
if geckopos then
|
||||
local landdata = water_life_get_biome_data(geckopos)
|
||||
|
||||
local mobname = 'water_life:gecko'
|
||||
local faktor = (100 - getcount(animal[mobname]) * 50)
|
||||
if random(100) < faktor then
|
||||
|
||||
|
||||
if (string.match(landdata.name,"rainforest") or string.match(landdata.name,"savanna"))
|
||||
and landdata.temp > 20 then
|
||||
|
||||
local obj=minetest.add_entity(geckopos,mobname) -- ok spawn it already damnit
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
--water spawn
|
||||
|
||||
if depth and depth > 0 then
|
||||
if water_life.radar_debug then
|
||||
water_life.temp_show(surface,9,5)
|
||||
minetest.chat_send_all(">>> Depth ="..dump(depth).." <<< "..dump(stype))
|
||||
minetest.chat_send_all(dump(bdata.name))
|
||||
end
|
||||
pos2 = surface
|
||||
|
||||
end
|
||||
|
||||
local liquidflag = nil
|
||||
|
||||
if stype == "default:water_source" then
|
||||
liquidflag = "sea"
|
||||
|
||||
elseif stype == "default:river_water_source" then
|
||||
liquidflag = "river"
|
||||
|
||||
elseif stype == "water_life:muddy_river_water_source" then
|
||||
liquidflag = "muddy"
|
||||
|
||||
end
|
||||
|
||||
if liquidflag and not toomuch and surface then
|
||||
ground = mobkit.pos_shift(surface,{y=(dalam*-1)})
|
||||
|
||||
|
||||
if not water_life.dangerous then
|
||||
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
|
||||
local mobname = 'water_life:croc'
|
||||
local faktor = 100 - getcount(animal[mobname]) * 33
|
||||
if random(100) < faktor then
|
||||
local fits = false
|
||||
if string.match(bdata.name,"rainforest") or string.match(bdata.name,"savanna") then fits = true end
|
||||
|
||||
if depth < 4 and fits then --shark min water depth
|
||||
local obj=minetest.add_entity(surface,mobname) -- ok spawn it already damnit
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
|
||||
|
||||
|
||||
local mobname = 'water_life:snake'
|
||||
local faktor = (100 - getcount(animal[mobname]) * 50) +25
|
||||
if random(100) < faktor then
|
||||
local fits = false
|
||||
if string.match(bdata.name,"desert") or string.match(bdata.name,"savanna") then fits = true end
|
||||
|
||||
if depth < 3 and fits then --snake max water depth
|
||||
local obj=minetest.add_entity(surface,mobname) -- ok spawn it already damnit
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
|
||||
|
||||
local mobname = 'water_life:shark'
|
||||
if water_life.shark_spawn_rate >= random(1000) then
|
||||
|
||||
local bcheck = water_life.count_objects(pos2,12)
|
||||
if getcount(animal[mobname]) < water_life.maxsharks and liquidflag == "sea" and not bcheck["water_life:shark_buoy"]
|
||||
and not animal["water_life:croc"] then
|
||||
|
||||
if depth > 4 then --shark min water depth
|
||||
local obj=minetest.add_entity(mobkit.pos_shift(ground,{y=2}),mobname) -- spawn it 2 nodes above sea ground
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
local mobname = "water_life:gull"
|
||||
local faktor = 100 - getcount(animal[mobname]) * 20
|
||||
if random(100) < faktor and liquidflag == "sea" then
|
||||
if depth > 4 then
|
||||
local spawn = mobkit.pos_shift(surface,{y=12})
|
||||
--spawn.y = spawn.y + 12
|
||||
local obj=minetest.add_entity(spawn,mobname) -- ok spawn it already damnit
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
|
||||
mobname = "water_life:urchin"
|
||||
if water_life.urchin_spawn_rate >= random(1000) then
|
||||
|
||||
local upos1 = mobkit.pos_shift(ground,{x=-5,y=-2,z=-5})
|
||||
local upos2 = mobkit.pos_shift(ground,{x=5,y=2,z=5})
|
||||
local coraltable = minetest.find_nodes_in_area(upos1, upos2, water_life.urchinspawn)
|
||||
--local nearlife = water_life.count_objects(ground,5,"water_life:urchin")
|
||||
if coraltable and #coraltable > 0 and getcount(animal[mobname]) < 15 and liquidflag == "sea" then
|
||||
local coralpos = coraltable[random(#coraltable)]
|
||||
coralpos.y = coralpos.y +1
|
||||
local node = minetest.get_node(coralpos)
|
||||
|
||||
if node.name == "default:water_source" then
|
||||
local obj= water_life.set_urchin(coralpos) --minetest.add_entity(coralpos,mobname)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
|
||||
mobname = "water_life:clams"
|
||||
if water_life.clams_spawn_rate >= random(1000) then
|
||||
local clpos1 = mobkit.pos_shift(ground,{x=-8, y=-2, z=8})
|
||||
local clpos2 = mobkit.pos_shift(ground,{x=8, y=2, z=8})
|
||||
local coraltable = minetest.find_nodes_in_area(clpos1, clpos2, water_life.clams_spawn)
|
||||
----minetest.chat_send_all("seagrass ="..dump(#coraltable))
|
||||
local nearlife = water_life.count_objects(ground,8,"water_life:clams")
|
||||
if coraltable and #coraltable > 0 and getcount(animal[mobname]) < 10 and liquidflag == "sea" then
|
||||
local coralpos = mobkit.pos_shift(coraltable[random(#coraltable)],{y=1})
|
||||
|
||||
local node = minetest.get_node(coralpos)
|
||||
if node.name == "default:water_source" then
|
||||
local obj= water_life.set_urchin(coralpos,"water_life:clams")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
|
||||
mobname = "water_life:jellyfish"
|
||||
|
||||
|
||||
local faktor = 100 - getcount(animal[mobname]) * 20
|
||||
if random(100) < faktor and liquidflag == "sea" and depth > 2 then
|
||||
local obj=minetest.add_entity(mobkit.pos_shift(ground,{y=2}),mobname)
|
||||
end
|
||||
|
||||
|
||||
mobname = "water_life:coralfish"
|
||||
|
||||
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
|
||||
|
||||
local cfpos1 = mobkit.pos_shift(ground,{x=-5,y=-2,z=-5})
|
||||
local cfpos2 = mobkit.pos_shift(ground,{x=5,y=2,z=5})
|
||||
local coraltable = minetest.find_nodes_in_area(cfpos1,cfpos2,water_life.urchinspawn)
|
||||
--local nearlife = water_life.count_objects(ground,nil,mobname)
|
||||
faktor = 100 - getcount(animal[mobname]) * 6.66
|
||||
if random(100) < faktor and liquidflag == "sea" and #coraltable > 1 then
|
||||
local cfish = coraltable[random(#coraltable)]
|
||||
cfish.y = cfish.y +1
|
||||
local maxfish = random(3,7)
|
||||
for i = 1,maxfish,1 do
|
||||
local obj=minetest.add_entity(cfish,mobname)
|
||||
if obj then
|
||||
local entity = obj:get_luaentity()
|
||||
entity.base = cfish
|
||||
entity.head = random(65535)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
|
||||
mobname = "water_life:clownfish"
|
||||
|
||||
faktor = 100 - getcount(animal[mobname]) * 50
|
||||
if random(100) < faktor and liquidflag == "sea" and #coraltable > 1 then
|
||||
local cfish = coraltable[random(#coraltable)]
|
||||
cfish.y = cfish.y +1
|
||||
local obj=minetest.add_entity(cfish,mobname)
|
||||
if obj then
|
||||
local entity = obj:get_luaentity()
|
||||
entity.base = cfish
|
||||
end
|
||||
end
|
||||
|
||||
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
|
||||
mobname = 'water_life:fish'
|
||||
--local nearlife = water_life.count_objects(pos2,24,"water_life:piranha")
|
||||
if water_life.fish_spawn_rate >= random(1000) and ((animal.all < (water_life.maxmobs-5)) or getcount(animal[mobname]) < 5) and (liquidflag == "river" or liquidflag == "muddy") then
|
||||
|
||||
local table = minetest.get_biome_data(pos)
|
||||
|
||||
if not water_life.dangerous and table and water_life.piranha_biomes[minetest.get_biome_name(table.biome)] then
|
||||
mobname = "water_life:piranha"
|
||||
end
|
||||
|
||||
if depth > 2 then -- min water depth for piranha and riverfish
|
||||
if mobname == "water_life:fish" then
|
||||
local obj=minetest.add_entity(pos2,mobname) -- ok spawn it already damnit
|
||||
else
|
||||
if getcount(animal[mobname]) < 10 then
|
||||
for i = 1,3,1 do
|
||||
local obj=minetest.add_entity(pos2,mobname) -- ok spawn it already damnit
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
|
||||
|
||||
mobname = 'water_life:whale'
|
||||
if water_life.whale_spawn_rate >= random(1000) and getcount(animal[mobname]) < (water_life.maxwhales) and liquidflag == "sea" then
|
||||
|
||||
|
||||
if depth > 8 then -- min water depth for whales
|
||||
|
||||
local gotwhale = true
|
||||
local whpos = mobkit.pos_shift(surface,{y=-3})
|
||||
for i = 0,3,1 do
|
||||
local whpos2 = mobkit.pos_translate2d(whpos,math.rad(i*90),30)
|
||||
local under = water_life.find_collision(whpos,whpos2, false)
|
||||
----minetest.chat_send_all(dump(under))
|
||||
if under and under < 25 then
|
||||
gotwhale = false
|
||||
break
|
||||
end
|
||||
end
|
||||
if gotwhale then local obj=minetest.add_entity(surface,mobname) end -- ok spawn it already damnit
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
timer = 0
|
||||
if landtimer > landinterval then landtimer = 0 end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
minetest.register_globalstep(spawnstep)
|
|
@ -0,0 +1,37 @@
|
|||
diff --git a/spawn.lua b/spawn.lua
|
||||
index e6cef07..59aa23b 100644
|
||||
--- a/spawn.lua
|
||||
+++ b/spawn.lua
|
||||
@@ -33,10 +33,24 @@ local function spawnstep(dtime)
|
||||
local animal = water_life.count_objects(pos)
|
||||
local meta = plyr:get_meta()
|
||||
|
||||
-
|
||||
if meta:get_int("snakepoison") > 0 then
|
||||
- local score = plyr:get_hp()
|
||||
- plyr:set_hp(score-1)
|
||||
+ poison_value = 1 --defautl poison value
|
||||
+ local pl_name=plyr:get_player_name() -- player name
|
||||
+ local hunger_ng_infos = hunger_ng.get_hunger_information(pl_name) -- information from hunger_ng
|
||||
+ --minetest.log(dump(hunger_ng_infos))
|
||||
+ local hunger_ng_interoper = hunger_ng.interoperability
|
||||
+ --minetest.log(dump(hunger_ng_interoper))
|
||||
+ -- if healing is enabled, then add healing to poison value
|
||||
+ -- if the same you have the chance to survive if you stay satiated
|
||||
+ if hunger_ng_infos.effects.healing then
|
||||
+ poison_value = ((waterinterval/hunger_ng_interoper.settings.timers.heal)*hunger_ng_interoper.effects.heal.amount) + 0.1 --+ poison_value -- if you want decrease healt even with healing
|
||||
+ end
|
||||
+ minetest.log("Poison: "..dump(poison_value))
|
||||
+
|
||||
+ local score = plyr:get_hp()-poison_value
|
||||
+ --if score < 0 then score = 0 end
|
||||
+ minetest.log("Health: "..dump(score))
|
||||
+ plyr:set_hp(score)
|
||||
end
|
||||
|
||||
if meta:get_int("repellant") > 0 then
|
||||
@@ -378,4 +392,3 @@ end
|
||||
|
||||
|
||||
minetest.register_globalstep(spawnstep)
|
||||
-
|
|
@ -0,0 +1,14 @@
|
|||
diff --git a/init.lua b/init.lua
|
||||
index d329d0f..7a82145 100644
|
||||
--- a/init.lua
|
||||
+++ b/init.lua
|
||||
@@ -147,7 +147,8 @@ local api_functions = {
|
||||
attributes = hunger_ng.attributes,
|
||||
translator = hunger_ng.configuration.translator,
|
||||
get_data = hunger_ng.functions.get_data,
|
||||
- set_data = hunger_ng.functions.set_data
|
||||
+ set_data = hunger_ng.functions.set_data,
|
||||
+ effects = hunger_ng.effects,
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,155 @@
|
|||
-- Exit if damage is not enabled and create dummy functions so mods using the
|
||||
-- API do not crash the server.
|
||||
if not minetest.is_yes(minetest.settings:get('enable_damage')) then
|
||||
local info = 'Hunger NG is disabled because damage is disabled.'
|
||||
|
||||
local call = function (function_name)
|
||||
minetest.log('warning', ('+m tried to use +f but +i'):gsub('%+%a+', {
|
||||
['+m'] = minetest.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
|
||||
}
|
||||
|
||||
minetest.log('info', '[hunger_ng] '..info)
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
-- Paths for later use
|
||||
local modpath = minetest.get_modpath('hunger_ng')..DIR_DELIM
|
||||
local worldpath = minetest.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. default `minetest.conf` 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 = minetest.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.
|
||||
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'
|
||||
},
|
||||
configuration = {
|
||||
debug_mode = minetest.is_yes(get('debug_mode', false)),
|
||||
log_prefix = '[hunger_ng] ',
|
||||
translator = minetest.get_translator('hunger_ng')
|
||||
},
|
||||
settings = {
|
||||
hunger_bar = {
|
||||
image = get('hunger_bar_image', 'hunger_ng_builtin_bread_icon.png'),
|
||||
use = minetest.is_yes(get('use_hunger_bar', true))
|
||||
},
|
||||
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 = minetest.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 = minetest.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
|
||||
minetest.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,
|
||||
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,
|
||||
effects = hunger_ng.effects,
|
||||
}
|
||||
}
|
||||
|
||||
hunger_ng = api_functions
|
|
@ -1,4 +0,0 @@
|
|||
name = "Sam 0",
|
||||
author = "Jordach",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Tuxedo Sam",
|
||||
author = "Jordach",
|
||||
description = "CC BY-NC-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Obito",
|
||||
author = "TheGamer",
|
||||
description = "CC BY-NC-SA 4.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Shadow",
|
||||
author = "TheGamer",
|
||||
description = "CC BY-NC-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "fred-fnafhs",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Springtrap-FNAFHS",
|
||||
author = "Michuu",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Mai-FNAFHS",
|
||||
author = "Michuu",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "REDboycool",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "FoxyMinecraft",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "MLP-Fluttershy",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "MLP-Sonata",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Sans-UNDERTALE",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Emma",
|
||||
author = "Cidney7760",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Flash",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Chica-FNAFHS",
|
||||
author = "Michuu",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Venom-Ultimate spiderman",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Hatsune Miku-VOCALOID",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "fin raro",
|
||||
author = "raroooooos",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Baby-SisterLocation",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "MiniReena-SisterLocation",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Bonnie-FNAFHS",
|
||||
author = "Michuu",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "BomBom-FNAFHS",
|
||||
author = "Michuu",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Mario normal-Super mario",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "iron man(skin iron man 1)",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "iron man(skin iron man 2)",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "iron man(skin iron man 3)",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Chiantos",
|
||||
author = "Chiantos",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Goku (normal)",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Goku (super saiyan)",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Venom (arreglado)",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Minireena (arreglada)",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Flower Girl",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Super Nerd",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Super Nerd (arreglado)",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "julito (sin sombras)",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Carolina",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "carolina (con chaleco)",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "ROBLOX Noob",
|
||||
author = "Fedora P",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "ROBLOX Guest",
|
||||
author = "Fedora P",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Mermaid 2",
|
||||
author = "loupicate",
|
||||
description = "CC BY-SA 4.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Space Noob",
|
||||
author = "Fedora P",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = ":O",
|
||||
author = "Fedora P",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = ":I",
|
||||
author = "Fedora P",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Rainbow Cubey",
|
||||
author = "Fedora P",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Shadow Shadow Shadow XD",
|
||||
author = "Fedora P",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Wilber the Coyote",
|
||||
author = "Fedora P",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "niño cool",
|
||||
author = "daniel pereira",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Le_Thug",
|
||||
author = "Kris0",
|
||||
description = "CC BY-NC-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Funtime foxy-Sister location",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "TwilightWolf",
|
||||
author = "Rin",
|
||||
description = "CC BY-NC-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Rin-chan 1",
|
||||
author = "Rin",
|
||||
description = "CC BY-NC-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Rin-chan 2",
|
||||
author = "Rin",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Ocd guy",
|
||||
author = "Oscar",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "alien7u7",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "destroyed bot",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "claw alien",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "bad bot",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "good bot",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "bad bot2",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "good bot2",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Hello Neighbor",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "KOOPA",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "police",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "miku en biquini (VOCALOID)",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Steven Universe",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Peridot-Steven Universe",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Lapiz lazuli-Steven Universe",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Rose-Steven Universe",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Amatista-Stevev Universe",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Amatista-Steven Universe",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Perla-Steven Universe",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Garnet-Steven Universe",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Jasper-Steven Universe",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "diamond armor",
|
||||
author = "oscar",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "omgchad",
|
||||
author = "oscar",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Purple Armor",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "ScratchCat",
|
||||
author = "Fedora P",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Zonard",
|
||||
author = "ektor",
|
||||
description = "CC 0 (1.0)",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Keupon",
|
||||
author = "ektor",
|
||||
description = "CC 0 (1.0)",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Minato namikazi",
|
||||
author = "TheGamer",
|
||||
description = "CC BY-NC-SA 4.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Killua",
|
||||
author = "TheGamer",
|
||||
description = "CC BY-NC-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Yagami Light",
|
||||
author = "TheGamer",
|
||||
description = "CC BY-NC-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Wants",
|
||||
author = "Wants",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Otaku Gamer",
|
||||
author = "TheGamer",
|
||||
description = "CC BY-NC-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "TheGamer",
|
||||
author = "TheGamer",
|
||||
description = "CC BY-NC-SA 4.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Cool Green Boy",
|
||||
author = "ElMehdiBen",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Cool Yellow Boy",
|
||||
author = "ElMehdiBen",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Boy Blue Adidas",
|
||||
author = "ElMehdiBen",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "frisk-UNDERTALE",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "miku en biquini (arreglada)",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "papyrus-UNDRTALE",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "pacheco cara floja",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
|
@ -1,4 +0,0 @@
|
|||
name = "Chico lolo",
|
||||
author = "julito",
|
||||
description = "CC BY-SA 3.0",
|
||||
comment = "",
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue