hunger
|
@ -3,18 +3,24 @@ allow_defined_top = false
|
|||
max_line_length = false
|
||||
|
||||
globals = {
|
||||
"eat",
|
||||
"bedz",
|
||||
"farmz",
|
||||
"flowers",
|
||||
"furn",
|
||||
"helper",
|
||||
"minetest",
|
||||
"nodez",
|
||||
"playerz",
|
||||
"playerphysics",
|
||||
"samz",
|
||||
"sfinv",
|
||||
"sound",
|
||||
"stairs",
|
||||
"svrz",
|
||||
"treez",
|
||||
"wield3d"
|
||||
|
||||
"wield3d",
|
||||
"mapgen",
|
||||
}
|
||||
|
||||
read_globals = {
|
||||
|
@ -22,7 +28,7 @@ read_globals = {
|
|||
table = {fields = {"copy", "getn"}},
|
||||
|
||||
-- Builtin
|
||||
"vector", "ItemStack",
|
||||
"vector", "ItemStack", "math",
|
||||
"dump", "DIR_DELIM", "VoxelArea", "Settings",
|
||||
|
||||
-- MTG
|
||||
|
|
|
@ -93,9 +93,9 @@ local function unmark_bed(pos)
|
|||
end
|
||||
end
|
||||
|
||||
local function rest_player(player, rest)
|
||||
local function rest_player(player, rest_hours)
|
||||
local hp = player:get_hp()
|
||||
hp = hp + (rest * 0.5)
|
||||
hp = hp + (rest_hours * 0.5)
|
||||
player:set_hp(hp)
|
||||
end
|
||||
|
||||
|
@ -112,11 +112,12 @@ local function stop_sleep(player)
|
|||
--playerz.player_attached[player_name] = false
|
||||
end
|
||||
|
||||
local function awake(player, rest)
|
||||
local function awake(player, rest_hours)
|
||||
if playerz.get_status(player) == "sleep" then
|
||||
stop_sleep(player, rest)
|
||||
if rest then
|
||||
rest_player(player, rest)
|
||||
stop_sleep(player)
|
||||
if rest_hours then
|
||||
rest_player(player, rest_hours)
|
||||
playerz.change_hunger(player, -(rest_hours*(playerz.max_hunger/playerz.starving_hours))) --decrease hunger
|
||||
end
|
||||
return true
|
||||
else
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
eat = {}
|
||||
|
||||
local function eat_particlespawner(user, item_name, itemstack)
|
||||
local pos = user:getpos()
|
||||
pos.y = pos.y + 1.43
|
||||
local texture = minetest.registered_items[item_name].inventory_image
|
||||
local dir = user:get_look_dir()
|
||||
|
||||
minetest.add_particlespawner({
|
||||
amount = 8,
|
||||
time = 0.1,
|
||||
minpos = pos,
|
||||
maxpos = pos,
|
||||
minvel = {x = dir.x - 1, y = dir.y, z = dir.z - 1},
|
||||
maxvel = {x = dir.x + 1, y = dir.y, z = dir.z + 1},
|
||||
minacc = {x = 0, y = -5, z = 0},
|
||||
maxacc = {x = 0, y = -9, z = 0},
|
||||
minexptime = 0.3,
|
||||
maxexptime = 0.5,
|
||||
minsize = 1.5,
|
||||
maxsize = 3,
|
||||
texture = "eat_particles.png^"..texture.."^eat_particles.png^[makealpha:255,126,126",
|
||||
})
|
||||
end
|
||||
|
||||
function eat.item_eat(itemstack, user, item_name, hp, hunger)
|
||||
if user and user:is_player() then
|
||||
playerz.change_hp(user, hp or 1, "eat")
|
||||
eat_particlespawner(user, item_name, itemstack)
|
||||
playerz.change_hunger(user, hunger or 1)
|
||||
end
|
||||
itemstack:take_item()
|
||||
return itemstack
|
||||
end
|
After Width: | Height: | Size: 269 B |
|
@ -97,17 +97,14 @@ end
|
|||
function farmz.register_plant(name, def)
|
||||
local plant_name = modname..":"..name
|
||||
for i = 1,2 do
|
||||
local description = ""
|
||||
local _type = ""
|
||||
local _plant_name = ""
|
||||
local texture = modname.."_"..name
|
||||
local description
|
||||
local _plant_name
|
||||
local texture
|
||||
if i == 1 then
|
||||
_type = "plant"
|
||||
_plant_name = plant_name.."_plant"
|
||||
texture = modname.."_"..name.."_plant.png"
|
||||
description = def.description.." "..S("Plant")
|
||||
else
|
||||
_type = "sprout"
|
||||
_plant_name = plant_name.."_sprout"
|
||||
texture = modname.."_"..name.."_sprout.png"
|
||||
description = def.description.." "..S("Plant").." ".."("..S("Sprout")..")"
|
||||
|
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 6.9 KiB |
|
@ -36,6 +36,17 @@ function playerz.get_animation(player)
|
|||
}
|
||||
end
|
||||
|
||||
--Hp
|
||||
|
||||
function playerz.change_hp(player, value, reason)
|
||||
local hp = player:get_hp()
|
||||
hp = hp + value
|
||||
player:set_hp(hp, reason or "")
|
||||
return hp
|
||||
end
|
||||
|
||||
--Helper Functions
|
||||
|
||||
function playerz.is_dead(player)
|
||||
if player:get_hp() <= 0 then
|
||||
return true
|
||||
|
@ -108,23 +119,37 @@ local function yaw_to_degrees(yaw)
|
|||
return(yaw * 180.0 / math.pi)
|
||||
end
|
||||
|
||||
local last_look_at_dir
|
||||
local last_look = {}
|
||||
|
||||
local function move_head(player, on_water)
|
||||
local pname = player:get_player_name()
|
||||
local look_at_dir = player:get_look_dir()
|
||||
local lastlook = last_look[pname]
|
||||
local anim = player_anim[pname] or ""
|
||||
local anim_base = string.sub(anim, 1, 4)
|
||||
--apply change only if the pitch changed
|
||||
if last_look_at_dir and look_at_dir.y == last_look_at_dir.y then
|
||||
if lastlook and look_at_dir.y == lastlook.dir.y and
|
||||
anim_base == lastlook.anim then
|
||||
return
|
||||
else
|
||||
last_look_at_dir = look_at_dir
|
||||
last_look[pname] = {}
|
||||
last_look[pname].dir = look_at_dir
|
||||
last_look[pname].anim = anim_base
|
||||
end
|
||||
local pitch = yaw_to_degrees(math.asin(look_at_dir.y))
|
||||
if on_water then
|
||||
if pitch > 70 then pitch = 70 end
|
||||
if pitch < -50 then pitch = -50 end
|
||||
if anim_base == "swin" or on_water then
|
||||
pitch = pitch + 70
|
||||
end
|
||||
local head_rotation = {x= pitch, y= 0, z= 0} --the head movement {pitch, yaw, roll}
|
||||
local head_offset = 6.3
|
||||
local head_position = {x=0, y=head_offset, z=0}
|
||||
local head_offset
|
||||
if minetest.get_modpath("3d_armor")~=nil then
|
||||
head_offset = 6.75
|
||||
else
|
||||
head_offset = 6.3
|
||||
end
|
||||
local head_position = {x=0, y= head_offset, z=0}
|
||||
player:set_bone_position("Head", head_position, head_rotation) --set the head movement
|
||||
end
|
||||
|
||||
|
@ -302,7 +327,7 @@ minetest.register_globalstep(function(dtime)
|
|||
if on_water and player_pos.y < 0 then
|
||||
if timer > 1 then
|
||||
player_pos.y = player_pos.y + 1
|
||||
minetest.addadd_particlespawner({
|
||||
minetest.add_particlespawner({
|
||||
amount = 6,
|
||||
time = 1,
|
||||
minpos = player_pos,
|
||||
|
|
|
@ -1,7 +1,12 @@
|
|||
local player_hunger = {}
|
||||
|
||||
--Time to decrease Hunger
|
||||
local hunger_tick = 1500
|
||||
--Const: Max Hunger Points
|
||||
playerz.max_hunger = 20
|
||||
--Game Hours to hunger to 0
|
||||
playerz.starving_hours = 48
|
||||
--24 game hours = 20 real min
|
||||
--1 game hour = 50 real seconds
|
||||
local hunger_tick = (playerz.starving_hours * 50)/playerz.max_hunger
|
||||
--Time to produce health damage when starving
|
||||
local hunger_tick_damage = 4
|
||||
|
||||
|
@ -36,15 +41,27 @@ function playerz.get_hunger(player)
|
|||
return hunger
|
||||
end
|
||||
|
||||
function playerz.change_hunger(player, value)
|
||||
local hunger = playerz.get_hunger(player)
|
||||
hunger = hunger + value
|
||||
if hunger < 0 then
|
||||
hunger = 0
|
||||
elseif hunger > playerz.max_hunger then
|
||||
hunger = playerz.max_hunger
|
||||
end
|
||||
playerz.set_hunger(player, hunger)
|
||||
return hunger
|
||||
end
|
||||
|
||||
function playerz.reset_hunger(player)
|
||||
local name = player:get_player_name()
|
||||
local hunger = 20
|
||||
local hunger = playerz.max_hunger
|
||||
player_hunger[name].points = hunger
|
||||
playerz.hb_change(player, hunger)
|
||||
end
|
||||
|
||||
function playerz.init_hunger(player)
|
||||
local hunger = playerz.save_hunger(player, 20)
|
||||
local hunger = playerz.save_hunger(player, playerz.max_hunger)
|
||||
local name = player:get_player_name()
|
||||
player_hunger[name] = {
|
||||
points = hunger,
|
||||
|
|
|
@ -1,10 +1,13 @@
|
|||
-- player/init.lua
|
||||
|
||||
dofile(minetest.get_modpath("playerz") .. "/api.lua")
|
||||
dofile(minetest.get_modpath("playerz") .. "/base_texture.lua")
|
||||
dofile(minetest.get_modpath("playerz") .. "/cloths.lua")
|
||||
dofile(minetest.get_modpath("playerz") .. "/freeze.lua")
|
||||
dofile(minetest.get_modpath("playerz") .. "/hunger.lua")
|
||||
local modname = minetest.get_current_modname()
|
||||
local modpath = minetest.get_modpath(modname)
|
||||
|
||||
dofile(modpath .. "/api.lua")
|
||||
dofile(modpath .. "/base_texture.lua")
|
||||
dofile(modpath .. "/cloths.lua")
|
||||
dofile(modpath .. "/freeze.lua")
|
||||
dofile(modpath .. "/hunger.lua")
|
||||
|
||||
-- Default player appearance
|
||||
playerz.register_model("character.b3d", {
|
||||
|
@ -26,7 +29,6 @@ playerz.register_model("character.b3d", {
|
|||
collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3},
|
||||
stepheight = 0.6,
|
||||
eye_height = 1.47,
|
||||
|
||||
})
|
||||
|
||||
-- Update appearance when the player joins
|
||||
|
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 565 B |
|
@ -0,0 +1,65 @@
|
|||
-- Node will be called stairs:stair_<subname>
|
||||
function stairs.register_stair(subname, recipeitem, groups, images, description)
|
||||
local stairs_name = "stairs:stair_" .. subname
|
||||
minetest.register_node("stairs:stair_" .. subname, {
|
||||
description = description,
|
||||
drawtype = "nodebox",
|
||||
tiles = images,
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = true,
|
||||
groups = groups,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0, 0.5},
|
||||
{-0.5, 0, 0, 0.5, 0.5, 0.5},
|
||||
},
|
||||
},
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = stairs_name,
|
||||
type = "shaped",
|
||||
recipe = {
|
||||
{recipeitem, "",
|
||||
recipeitem}, {recipeitem, "", ""},
|
||||
{"", "", ""},
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
-- Node will be called stairs:slab_<subname>
|
||||
function stairs.register_slab(subname, recipeitem, groups, images, description)
|
||||
local slab_name = "stairs:slab_" .. subname
|
||||
minetest.register_node("stairs:slab_" .. subname, {
|
||||
description = description,
|
||||
drawtype = "nodebox",
|
||||
tiles = images,
|
||||
paramtype = "light",
|
||||
is_ground_content = true,
|
||||
groups = groups,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
|
||||
},
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = slab_name,
|
||||
type = "shaped",
|
||||
recipe = {
|
||||
{"", "",
|
||||
recipeitem}, {recipeitem, "", ""},
|
||||
{"", "", ""},
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
-- Nodes will be called stairs:{stair,slab}_<subname>
|
||||
function stairs.register_stair_and_slab(subname, def)
|
||||
stairs.register_stair(subname, def.recipeitem, def.groups, def.images, def.desc_stair)
|
||||
stairs.register_slab(subname, def.recipeitem, def.groups, def.images, def.desc_slab)
|
||||
end
|
|
@ -1,61 +1,8 @@
|
|||
stairs = {}
|
||||
|
||||
-- Node will be called stairs:stair_<subname>
|
||||
function stairs.register_stair(subname, recipeitem, groups, images, description)
|
||||
minetest.register_node(":stairs:stair_" .. subname, {
|
||||
description = description,
|
||||
drawtype = "nodebox",
|
||||
tiles = images,
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = true,
|
||||
groups = groups,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0, 0.5},
|
||||
{-0.5, 0, 0, 0.5, 0.5, 0.5},
|
||||
},
|
||||
},
|
||||
})
|
||||
end
|
||||
local modname = minetest.get_current_modname()
|
||||
local modpath = minetest.get_modpath(modname)
|
||||
local S = minetest.get_translator(modname)
|
||||
|
||||
-- Node will be called stairs:slab_<subname>
|
||||
function stairs.register_slab(subname, recipeitem, groups, images, description)
|
||||
minetest.register_node(":stairs:slab_" .. subname, {
|
||||
description = description,
|
||||
drawtype = "nodebox",
|
||||
tiles = images,
|
||||
paramtype = "light",
|
||||
is_ground_content = true,
|
||||
groups = groups,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
-- Nodes will be called stairs:{stair,slab}_<subname>
|
||||
function stairs.register_stair_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab)
|
||||
stairs.register_stair(subname, recipeitem, groups, images, desc_stair)
|
||||
stairs.register_slab(subname, recipeitem, groups, images, desc_slab)
|
||||
end
|
||||
|
||||
stairs.register_stair_and_slab("stone", "nodez:stone",
|
||||
{cracky=3},
|
||||
{"nodez_stone.png"},
|
||||
"Stone Stair",
|
||||
"Stone Slab"
|
||||
)
|
||||
|
||||
stairs.register_stair_and_slab("cobble", "nodez:cobble",
|
||||
{cracky=3},
|
||||
{"nodez_cobble.png"},
|
||||
"Cobblestone Stair",
|
||||
"Cobblestone Slab"
|
||||
)
|
||||
assert(loadfile(modpath .. "/api.lua"))()
|
||||
assert(loadfile(modpath .. "/stairs.lua"))(S)
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
# textdomain: stairs
|
||||
Apple Wood Stair=Escalera de manzano
|
||||
Apple Wood Slab=Losa de manzano
|
||||
Cherry Wood Stair=Escalera de cerezo
|
||||
Cherry Wood Slab=Losa de cerezo
|
||||
Cobblestone Stair=Escalera de empedrado
|
||||
Cobblestone Slab=Losa de empedrado
|
||||
Sandstone Stair=Escalera de arenisca
|
||||
Sandstone Slab=Losa de arenisca
|
||||
Stone Stair=Escalera de piedra
|
||||
Stone Slab=Losa de piedra
|
|
@ -1,3 +1,3 @@
|
|||
name = stairs
|
||||
description = Adds stairs and slabs
|
||||
depends = nodez
|
||||
depends = nodez, treez
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
local S = ...
|
||||
|
||||
stairs.register_stair_and_slab("stone", {
|
||||
recipeitem = "nodez:stone",
|
||||
groups = {cracky=3},
|
||||
images = {"nodez_stone.png"},
|
||||
desc_stair = S("Stone Stair"),
|
||||
desc_slab = S("Stone Slab")
|
||||
})
|
||||
|
||||
stairs.register_stair_and_slab("cobble", {
|
||||
recipeitem = "nodez:cobble",
|
||||
groups = {cracky=3},
|
||||
images = {"nodez_cobble.png"},
|
||||
desc_stair = S("Cobblestone Stair"),
|
||||
desc_slab = S("Cobblestone Slab")
|
||||
})
|
||||
|
||||
stairs.register_stair_and_slab("sandstone", {
|
||||
recipeitem = "nodez:sandstone",
|
||||
groups = {crumbly=3},
|
||||
images = {"nodez_sandstone.png"},
|
||||
desc_stair = S("Sandstone Stair"),
|
||||
desc_slab = S("Sandstone Slab")
|
||||
})
|
||||
|
||||
--Treez-->
|
||||
|
||||
stairs.register_stair_and_slab("apple_tree", {
|
||||
recipeitem = "treez:apple_tree_wood",
|
||||
groups = {choppy = 2},
|
||||
images = {"treez_apple_tree_wood.png"},
|
||||
desc_stair = S("Apple Wood Stair"),
|
||||
desc_slab = S("Apple Wood Slab")
|
||||
})
|
||||
|
||||
stairs.register_stair_and_slab("cherry_tree", {
|
||||
recipeitem = "treez:cherry_tree_wood",
|
||||
groups = {choppy = 2},
|
||||
images = {"treez_cherry_tree_wood.png"},
|
||||
desc_stair = S("Cherry Wood Stair"),
|
||||
desc_slab = S("Cherry Wood Slab")
|
||||
})
|
|
@ -7,7 +7,8 @@ local tree_grow_time = 5 --3600 by default
|
|||
function treez.register_tree(name, def)
|
||||
--Fruit
|
||||
if def.fruit then
|
||||
minetest.register_node("treez:"..def.fruit.name, {
|
||||
local fruit_name = "treez:"..def.fruit.name
|
||||
minetest.register_node(fruit_name, {
|
||||
description = S(def.fruit.description),
|
||||
drawtype = "plantlike",
|
||||
tiles = {"treez_"..def.fruit.name..".png"},
|
||||
|
@ -24,7 +25,10 @@ function treez.register_tree(name, def)
|
|||
leafdecay = 3, leafdecay_drop = 1},
|
||||
sounds = sound.leaves(),
|
||||
|
||||
on_use = minetest.item_eat(2),
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
eat.item_eat(itemstack, user, fruit_name, def.fruit.hp, def.fruit.hunger)
|
||||
return itemstack
|
||||
end,
|
||||
|
||||
after_place_node = function(pos, placer, itemstack)
|
||||
minetest.set_node(pos, {name = "treez:"..def.fruit.name, param2 = 1})
|
||||
|
|
Before Width: | Height: | Size: 575 B After Width: | Height: | Size: 574 B |
Before Width: | Height: | Size: 577 B After Width: | Height: | Size: 573 B |
|
@ -3,7 +3,9 @@ treez.register_tree("apple_tree", {
|
|||
description = "Apple Tree",
|
||||
fruit = {
|
||||
name = "apple",
|
||||
description = "Apple"
|
||||
description = "Apple",
|
||||
hp = 2,
|
||||
hunger = 1.5
|
||||
},
|
||||
deco = {
|
||||
biomes = {"forest"},
|
||||
|
@ -24,7 +26,9 @@ treez.register_tree("cherry_tree", {
|
|||
description = "Cherry Tree",
|
||||
fruit = {
|
||||
name = "cherries",
|
||||
description = "Cherries"
|
||||
description = "Cherries",
|
||||
hp = 1.5,
|
||||
hunger = 1,
|
||||
},
|
||||
deco = {
|
||||
biomes = {"forest"},
|
||||
|
|