master
runs 2022-03-20 10:28:03 +01:00
parent bdac37ae7c
commit 200c2d04dc
22 changed files with 251 additions and 95 deletions

View File

@ -3,18 +3,24 @@ allow_defined_top = false
max_line_length = false max_line_length = false
globals = { globals = {
"eat",
"bedz",
"farmz",
"flowers",
"furn", "furn",
"helper",
"minetest", "minetest",
"nodez", "nodez",
"playerz", "playerz",
"playerphysics",
"samz", "samz",
"sfinv", "sfinv",
"sound", "sound",
"stairs", "stairs",
"svrz", "svrz",
"treez", "treez",
"wield3d" "wield3d",
"mapgen",
} }
read_globals = { read_globals = {
@ -22,7 +28,7 @@ read_globals = {
table = {fields = {"copy", "getn"}}, table = {fields = {"copy", "getn"}},
-- Builtin -- Builtin
"vector", "ItemStack", "vector", "ItemStack", "math",
"dump", "DIR_DELIM", "VoxelArea", "Settings", "dump", "DIR_DELIM", "VoxelArea", "Settings",
-- MTG -- MTG

View File

@ -93,9 +93,9 @@ local function unmark_bed(pos)
end end
end end
local function rest_player(player, rest) local function rest_player(player, rest_hours)
local hp = player:get_hp() local hp = player:get_hp()
hp = hp + (rest * 0.5) hp = hp + (rest_hours * 0.5)
player:set_hp(hp) player:set_hp(hp)
end end
@ -112,11 +112,12 @@ local function stop_sleep(player)
--playerz.player_attached[player_name] = false --playerz.player_attached[player_name] = false
end end
local function awake(player, rest) local function awake(player, rest_hours)
if playerz.get_status(player) == "sleep" then if playerz.get_status(player) == "sleep" then
stop_sleep(player, rest) stop_sleep(player)
if rest then if rest_hours then
rest_player(player, rest) rest_player(player, rest_hours)
playerz.change_hunger(player, -(rest_hours*(playerz.max_hunger/playerz.starving_hours))) --decrease hunger
end end
return true return true
else else

34
mods/eat/init.lua Normal file
View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 B

View File

@ -97,17 +97,14 @@ end
function farmz.register_plant(name, def) function farmz.register_plant(name, def)
local plant_name = modname..":"..name local plant_name = modname..":"..name
for i = 1,2 do for i = 1,2 do
local description = "" local description
local _type = "" local _plant_name
local _plant_name = "" local texture
local texture = modname.."_"..name
if i == 1 then if i == 1 then
_type = "plant"
_plant_name = plant_name.."_plant" _plant_name = plant_name.."_plant"
texture = modname.."_"..name.."_plant.png" texture = modname.."_"..name.."_plant.png"
description = def.description.." "..S("Plant") description = def.description.." "..S("Plant")
else else
_type = "sprout"
_plant_name = plant_name.."_sprout" _plant_name = plant_name.."_sprout"
texture = modname.."_"..name.."_sprout.png" texture = modname.."_"..name.."_sprout.png"
description = def.description.." "..S("Plant").." ".."("..S("Sprout")..")" description = def.description.." "..S("Plant").." ".."("..S("Sprout")..")"

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

View File

@ -36,6 +36,17 @@ function playerz.get_animation(player)
} }
end 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) function playerz.is_dead(player)
if player:get_hp() <= 0 then if player:get_hp() <= 0 then
return true return true
@ -108,23 +119,37 @@ local function yaw_to_degrees(yaw)
return(yaw * 180.0 / math.pi) return(yaw * 180.0 / math.pi)
end end
local last_look_at_dir local last_look = {}
local function move_head(player, on_water) local function move_head(player, on_water)
local pname = player:get_player_name()
local look_at_dir = player:get_look_dir() 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 --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 return
else 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 end
local pitch = yaw_to_degrees(math.asin(look_at_dir.y)) 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 pitch = pitch + 70
end end
local head_rotation = {x= pitch, y= 0, z= 0} --the head movement {pitch, yaw, roll} local head_rotation = {x= pitch, y= 0, z= 0} --the head movement {pitch, yaw, roll}
local head_offset = 6.3 local head_offset
local head_position = {x=0, y=head_offset, z=0} 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 player:set_bone_position("Head", head_position, head_rotation) --set the head movement
end end
@ -302,7 +327,7 @@ minetest.register_globalstep(function(dtime)
if on_water and player_pos.y < 0 then if on_water and player_pos.y < 0 then
if timer > 1 then if timer > 1 then
player_pos.y = player_pos.y + 1 player_pos.y = player_pos.y + 1
minetest.addadd_particlespawner({ minetest.add_particlespawner({
amount = 6, amount = 6,
time = 1, time = 1,
minpos = player_pos, minpos = player_pos,

View File

@ -1,7 +1,12 @@
local player_hunger = {} local player_hunger = {}
--Time to decrease Hunger --Const: Max Hunger Points
local hunger_tick = 1500 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 --Time to produce health damage when starving
local hunger_tick_damage = 4 local hunger_tick_damage = 4
@ -36,15 +41,27 @@ function playerz.get_hunger(player)
return hunger return hunger
end 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) function playerz.reset_hunger(player)
local name = player:get_player_name() local name = player:get_player_name()
local hunger = 20 local hunger = playerz.max_hunger
player_hunger[name].points = hunger player_hunger[name].points = hunger
playerz.hb_change(player, hunger) playerz.hb_change(player, hunger)
end end
function playerz.init_hunger(player) 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() local name = player:get_player_name()
player_hunger[name] = { player_hunger[name] = {
points = hunger, points = hunger,

View File

@ -1,10 +1,13 @@
-- player/init.lua -- player/init.lua
dofile(minetest.get_modpath("playerz") .. "/api.lua") local modname = minetest.get_current_modname()
dofile(minetest.get_modpath("playerz") .. "/base_texture.lua") local modpath = minetest.get_modpath(modname)
dofile(minetest.get_modpath("playerz") .. "/cloths.lua")
dofile(minetest.get_modpath("playerz") .. "/freeze.lua") dofile(modpath .. "/api.lua")
dofile(minetest.get_modpath("playerz") .. "/hunger.lua") dofile(modpath .. "/base_texture.lua")
dofile(modpath .. "/cloths.lua")
dofile(modpath .. "/freeze.lua")
dofile(modpath .. "/hunger.lua")
-- Default player appearance -- Default player appearance
playerz.register_model("character.b3d", { 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}, collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3},
stepheight = 0.6, stepheight = 0.6,
eye_height = 1.47, eye_height = 1.47,
}) })
-- Update appearance when the player joins -- Update appearance when the player joins

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 565 B

65
mods/stairs/api.lua Normal file
View File

@ -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

View File

@ -1,61 +1,8 @@
stairs = {} stairs = {}
-- Node will be called stairs:stair_<subname> local modname = minetest.get_current_modname()
function stairs.register_stair(subname, recipeitem, groups, images, description) local modpath = minetest.get_modpath(modname)
minetest.register_node(":stairs:stair_" .. subname, { local S = minetest.get_translator(modname)
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
-- Node will be called stairs:slab_<subname> assert(loadfile(modpath .. "/api.lua"))()
function stairs.register_slab(subname, recipeitem, groups, images, description) assert(loadfile(modpath .. "/stairs.lua"))(S)
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"
)

View File

@ -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

View File

@ -1,3 +1,3 @@
name = stairs name = stairs
description = Adds stairs and slabs description = Adds stairs and slabs
depends = nodez depends = nodez, treez

43
mods/stairs/stairs.lua Normal file
View File

@ -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")
})

View File

@ -7,7 +7,8 @@ local tree_grow_time = 5 --3600 by default
function treez.register_tree(name, def) function treez.register_tree(name, def)
--Fruit --Fruit
if def.fruit then 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), description = S(def.fruit.description),
drawtype = "plantlike", drawtype = "plantlike",
tiles = {"treez_"..def.fruit.name..".png"}, tiles = {"treez_"..def.fruit.name..".png"},
@ -24,7 +25,10 @@ function treez.register_tree(name, def)
leafdecay = 3, leafdecay_drop = 1}, leafdecay = 3, leafdecay_drop = 1},
sounds = sound.leaves(), 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) after_place_node = function(pos, placer, itemstack)
minetest.set_node(pos, {name = "treez:"..def.fruit.name, param2 = 1}) minetest.set_node(pos, {name = "treez:"..def.fruit.name, param2 = 1})

Binary file not shown.

Before

Width:  |  Height:  |  Size: 575 B

After

Width:  |  Height:  |  Size: 574 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 577 B

After

Width:  |  Height:  |  Size: 573 B

View File

@ -3,7 +3,9 @@ treez.register_tree("apple_tree", {
description = "Apple Tree", description = "Apple Tree",
fruit = { fruit = {
name = "apple", name = "apple",
description = "Apple" description = "Apple",
hp = 2,
hunger = 1.5
}, },
deco = { deco = {
biomes = {"forest"}, biomes = {"forest"},
@ -24,7 +26,9 @@ treez.register_tree("cherry_tree", {
description = "Cherry Tree", description = "Cherry Tree",
fruit = { fruit = {
name = "cherries", name = "cherries",
description = "Cherries" description = "Cherries",
hp = 1.5,
hunger = 1,
}, },
deco = { deco = {
biomes = {"forest"}, biomes = {"forest"},