Allow Disabling of Hydration mechanics
Disables the hydration mechanics when the user sets the game difficulty to easy in the crops_settings.txt file. This makes the mod much easier to play on easy mode. This was acheived by only executing the parts of the code that pertain to hydration when the hydration variable in settings is set to true. Otherwise the code that does hydration is never executed.
This commit is contained in:
parent
25ebe3ecfa
commit
77d00903ad
252
init.lua
252
init.lua
@ -27,6 +27,7 @@ settings.easy = {
|
|||||||
damage_tick_min = 0,
|
damage_tick_min = 0,
|
||||||
damage_tick_max = 1,
|
damage_tick_max = 1,
|
||||||
damage_max = 25,
|
damage_max = 25,
|
||||||
|
hydration = false,
|
||||||
}
|
}
|
||||||
settings.normal = {
|
settings.normal = {
|
||||||
chance = 8,
|
chance = 8,
|
||||||
@ -40,6 +41,7 @@ settings.normal = {
|
|||||||
damage_tick_min = 0,
|
damage_tick_min = 0,
|
||||||
damage_tick_max = 5,
|
damage_tick_max = 5,
|
||||||
damage_max = 50,
|
damage_max = 50,
|
||||||
|
hydration = true,
|
||||||
}
|
}
|
||||||
settings.difficult = {
|
settings.difficult = {
|
||||||
chance = 16,
|
chance = 16,
|
||||||
@ -53,6 +55,7 @@ settings.difficult = {
|
|||||||
damage_tick_min = 3,
|
damage_tick_min = 3,
|
||||||
damage_tick_max = 7,
|
damage_tick_max = 7,
|
||||||
damage_max = 100,
|
damage_max = 100,
|
||||||
|
hydration = true,
|
||||||
}
|
}
|
||||||
|
|
||||||
local worldpath = minetest.get_worldpath()
|
local worldpath = minetest.get_worldpath()
|
||||||
@ -86,6 +89,9 @@ if not crops.settings then
|
|||||||
minetest.log("error", "Defaulting to \"normal\" difficulty settings")
|
minetest.log("error", "Defaulting to \"normal\" difficulty settings")
|
||||||
crops.settings = settings.normal
|
crops.settings = settings.normal
|
||||||
end
|
end
|
||||||
|
if crops.settings.hydration then
|
||||||
|
minetest.log("action", "[crops] Hydration and dehydration mechanics are enabled.")
|
||||||
|
end
|
||||||
|
|
||||||
local find_plant = function(node)
|
local find_plant = function(node)
|
||||||
for i = 1,table.getn(crops.plants) do
|
for i = 1,table.getn(crops.plants) do
|
||||||
@ -119,20 +125,24 @@ crops.can_grow = function(pos)
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local water = meta:get_int("crops_water")
|
if crops.settings.hydration then
|
||||||
if water < plant.properties.wither or water > plant.properties.soak then
|
local water = meta:get_int("crops_water")
|
||||||
if math.random(0,1) == 0 then
|
if water < plant.properties.wither or water > plant.properties.soak then
|
||||||
return false
|
if math.random(0,1) == 0 then
|
||||||
|
return false
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
-- growing costs water!
|
||||||
|
meta:set_int("crops_water", math.max(1, water - 10))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- damaged plants are less likely to grow
|
||||||
local damage = meta:get_int("crops_damage")
|
local damage = meta:get_int("crops_damage")
|
||||||
if not damage == 0 then
|
if not damage == 0 then
|
||||||
if math.random(math.min(50, damage), 100) > 75 then
|
if math.random(math.min(50, damage), 100) > 75 then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- growing costs water!
|
|
||||||
meta:set_int("crops_water", math.max(1, water - 10))
|
|
||||||
|
|
||||||
-- allow the plant to grow
|
-- allow the plant to grow
|
||||||
return true
|
return true
|
||||||
@ -278,115 +288,9 @@ crops.die = function(pos)
|
|||||||
minetest.sound_play("crops_flies", {pos=pos, gain=0.8})
|
minetest.sound_play("crops_flies", {pos=pos, gain=0.8})
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_tool("crops:watering_can", {
|
if crops.settings.hydration then
|
||||||
description = "Watering Can",
|
dofile(modpath .. "/tools.lua")
|
||||||
inventory_image = "crops_watering_can.png",
|
end
|
||||||
liquids_pointable = true,
|
|
||||||
range = 2.5,
|
|
||||||
stack_max = 1,
|
|
||||||
wear = 65535,
|
|
||||||
tool_capabilities = {},
|
|
||||||
on_use = function(itemstack, user, pointed_thing)
|
|
||||||
local pos = pointed_thing.under
|
|
||||||
local ppos = pos
|
|
||||||
if not pos then
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
-- filling it up?
|
|
||||||
local wear = itemstack:get_wear()
|
|
||||||
if minetest.get_item_group(minetest.get_node(pos).name, "water") >= 3 then
|
|
||||||
if wear ~= 1 then
|
|
||||||
minetest.sound_play("crops_watercan_entering", {pos=pos, gain=0.8})
|
|
||||||
minetest.after(math.random()/2, function(pos)
|
|
||||||
if math.random(2) == 1 then
|
|
||||||
minetest.sound_play("crops_watercan_splash_quiet", {pos=pos, gain=0.1})
|
|
||||||
end
|
|
||||||
if math.random(3) == 1 then
|
|
||||||
minetest.after(math.random()/2, function(pos)
|
|
||||||
minetest.sound_play("crops_watercan_splash_small", {pos=pos, gain=0.7})
|
|
||||||
end, pos)
|
|
||||||
end
|
|
||||||
if math.random(3) == 1 then
|
|
||||||
minetest.after(math.random()/2, function(pos)
|
|
||||||
minetest.sound_play("crops_watercan_splash_big", {pos=pos, gain=0.7})
|
|
||||||
end, pos)
|
|
||||||
end
|
|
||||||
end, pos)
|
|
||||||
itemstack:set_wear(1)
|
|
||||||
end
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
-- using it on a top-half part of a plant?
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
if meta:get_int("crops_top_half") == 1 then
|
|
||||||
meta = minetest.get_meta({x=pos.x, y=pos.y-1, z=pos.z})
|
|
||||||
end
|
|
||||||
-- using it on a plant?
|
|
||||||
local water = meta:get_int("crops_water")
|
|
||||||
if water < 1 then
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
-- empty?
|
|
||||||
if wear == 65534 then
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
crops.particles(ppos, 2)
|
|
||||||
minetest.sound_play("crops_watercan_watering", {pos=pos, gain=0.8})
|
|
||||||
water = math.min(water + crops.settings.watercan, crops.settings.watercan_max)
|
|
||||||
meta:set_int("crops_water", water)
|
|
||||||
|
|
||||||
itemstack:set_wear(math.min(65534, wear + (65535 / crops.settings.watercan_uses)))
|
|
||||||
return itemstack
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_tool("crops:hydrometer", {
|
|
||||||
description = "Hydrometer",
|
|
||||||
inventory_image = "crops_hydrometer.png",
|
|
||||||
liquids_pointable = false,
|
|
||||||
range = 2.5,
|
|
||||||
stack_max = 1,
|
|
||||||
tool_capabilities = {
|
|
||||||
},
|
|
||||||
on_use = function(itemstack, user, pointed_thing)
|
|
||||||
local pos = pointed_thing.under
|
|
||||||
if not pos then
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
-- doublesize plant?
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
if meta:get_int("crops_top_half") == 1 then
|
|
||||||
meta = minetest.get_meta({x=pos.x, y=pos.y-1, z=pos.z})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- using it on a plant?
|
|
||||||
local water = meta:get_int("crops_water")
|
|
||||||
if water == nil then
|
|
||||||
itemstack:set_wear(65534)
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
itemstack:set_wear(65535 - ((65534 / 100) * water))
|
|
||||||
return itemstack
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "crops:watering_can",
|
|
||||||
recipe = {
|
|
||||||
{ "default:steel_ingot", "", "" },
|
|
||||||
{ "default:steel_ingot", "", "default:steel_ingot" },
|
|
||||||
{ "", "default:steel_ingot", "" },
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "crops:hydrometer",
|
|
||||||
recipe = {
|
|
||||||
{ "default:mese_crystal_fragment", "", "" },
|
|
||||||
{ "", "default:steel_ingot", "" },
|
|
||||||
{ "", "", "default:steel_ingot" },
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
-- crop nodes, crafts, craftitems
|
-- crop nodes, crafts, craftitems
|
||||||
dofile(modpath .. "/melon.lua")
|
dofile(modpath .. "/melon.lua")
|
||||||
@ -402,70 +306,72 @@ for i = 1,table.getn(crops.plants) do
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- water handling code
|
-- water handling code
|
||||||
minetest.register_abm({
|
if crops.settings.hydration then
|
||||||
nodenames = nodenames,
|
minetest.register_abm({
|
||||||
interval = crops.settings.damage_interval,
|
nodenames = nodenames,
|
||||||
chance = crops.settings.damage_chance,
|
interval = crops.settings.damage_interval,
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
chance = crops.settings.damage_chance,
|
||||||
local meta = minetest.get_meta(pos)
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||||
local water = meta:get_int("crops_water")
|
local meta = minetest.get_meta(pos)
|
||||||
local damage = meta:get_int("crops_damage")
|
local water = meta:get_int("crops_water")
|
||||||
|
local damage = meta:get_int("crops_damage")
|
||||||
|
|
||||||
-- get plant specific data
|
-- get plant specific data
|
||||||
local plant = find_plant(node)
|
local plant = find_plant(node)
|
||||||
if plant == nil then
|
if plant == nil then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
-- increase water for nearby water sources
|
-- increase water for nearby water sources
|
||||||
local f = minetest.find_node_near(pos, 1, {"default:water_source", "default:water_flowing"})
|
local f = minetest.find_node_near(pos, 1, {"default:water_source", "default:water_flowing"})
|
||||||
if not f == nil then
|
|
||||||
water = math.min(100, water + 2)
|
|
||||||
else
|
|
||||||
local f = minetest.find_node_near(pos, 2, {"default:water_source", "default:water_flowing"})
|
|
||||||
if not f == nil then
|
if not f == nil then
|
||||||
|
water = math.min(100, water + 2)
|
||||||
|
else
|
||||||
|
local f = minetest.find_node_near(pos, 2, {"default:water_source", "default:water_flowing"})
|
||||||
|
if not f == nil then
|
||||||
|
water = math.min(100, water + 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if minetest.get_node_light(pos, nil) < plant.properties.night then
|
||||||
|
-- compensate for light: at night give some water back to the plant
|
||||||
water = math.min(100, water + 1)
|
water = math.min(100, water + 1)
|
||||||
|
else
|
||||||
|
-- dry out the plant
|
||||||
|
water = math.max(1, water - plant.properties.wateruse)
|
||||||
|
end
|
||||||
|
|
||||||
|
meta:set_int("crops_water", water)
|
||||||
|
|
||||||
|
-- for convenience, copy water attribute to top half
|
||||||
|
if not plant.properties.doublesize == nil and plant.properties.doublesize then
|
||||||
|
local above = { x = pos.x, y = pos.y + 1, z = pos.z}
|
||||||
|
local meta = minetest.get_meta(above)
|
||||||
|
meta:set_int("crops_water", water)
|
||||||
|
end
|
||||||
|
|
||||||
|
if water <= plant.properties.wither_damage then
|
||||||
|
crops.particles(pos, 0)
|
||||||
|
damage = damage + math.random(crops.settings.damage_tick_min, crops.settings.damage_tick_max)
|
||||||
|
elseif water <= plant.properties.wither then
|
||||||
|
crops.particles(pos, 0)
|
||||||
|
return
|
||||||
|
elseif water >= plant.properties.soak_damage then
|
||||||
|
crops.particles(pos, 1)
|
||||||
|
damage = damage + math.random(crops.settings.damage_tick_min, crops.settings.damage_tick_max)
|
||||||
|
elseif water >= plant.properties.soak then
|
||||||
|
crops.particles(pos, 1)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
meta:set_int("crops_damage", math.min(crops.settings.damage_max, damage))
|
||||||
|
|
||||||
|
-- is it dead?
|
||||||
|
if damage >= 100 then
|
||||||
|
crops.die(pos)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
})
|
||||||
if minetest.get_node_light(pos, nil) < plant.properties.night then
|
end
|
||||||
-- compensate for light: at night give some water back to the plant
|
|
||||||
water = math.min(100, water + 1)
|
|
||||||
else
|
|
||||||
-- dry out the plant
|
|
||||||
water = math.max(1, water - plant.properties.wateruse)
|
|
||||||
end
|
|
||||||
|
|
||||||
meta:set_int("crops_water", water)
|
|
||||||
|
|
||||||
-- for convenience, copy water attribute to top half
|
|
||||||
if not plant.properties.doublesize == nil and plant.properties.doublesize then
|
|
||||||
local above = { x = pos.x, y = pos.y + 1, z = pos.z}
|
|
||||||
local meta = minetest.get_meta(above)
|
|
||||||
meta:set_int("crops_water", water)
|
|
||||||
end
|
|
||||||
|
|
||||||
if water <= plant.properties.wither_damage then
|
|
||||||
crops.particles(pos, 0)
|
|
||||||
damage = damage + math.random(crops.settings.damage_tick_min, crops.settings.damage_tick_max)
|
|
||||||
elseif water <= plant.properties.wither then
|
|
||||||
crops.particles(pos, 0)
|
|
||||||
return
|
|
||||||
elseif water >= plant.properties.soak_damage then
|
|
||||||
crops.particles(pos, 1)
|
|
||||||
damage = damage + math.random(crops.settings.damage_tick_min, crops.settings.damage_tick_max)
|
|
||||||
elseif water >= plant.properties.soak then
|
|
||||||
crops.particles(pos, 1)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
meta:set_int("crops_damage", math.min(crops.settings.damage_max, damage))
|
|
||||||
|
|
||||||
-- is it dead?
|
|
||||||
if damage >= 100 then
|
|
||||||
crops.die(pos)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
})
|
|
||||||
|
|
||||||
-- cooking recipes that mix craftitems
|
-- cooking recipes that mix craftitems
|
||||||
dofile(modpath .. "/cooking.lua")
|
dofile(modpath .. "/cooking.lua")
|
||||||
|
119
tools.lua
Normal file
119
tools.lua
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
--[[
|
||||||
|
|
||||||
|
Copyright (C) 2015 - Auke Kok <sofar@foo-projects.org>
|
||||||
|
|
||||||
|
"crops" is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Lesser General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2.1
|
||||||
|
of the license, or (at your option) any later version.
|
||||||
|
|
||||||
|
--]]
|
||||||
|
minetest.register_tool("crops:watering_can", {
|
||||||
|
description = "Watering Can",
|
||||||
|
inventory_image = "crops_watering_can.png",
|
||||||
|
liquids_pointable = true,
|
||||||
|
range = 2.5,
|
||||||
|
stack_max = 1,
|
||||||
|
wear = 65535,
|
||||||
|
tool_capabilities = {},
|
||||||
|
on_use = function(itemstack, user, pointed_thing)
|
||||||
|
local pos = pointed_thing.under
|
||||||
|
local ppos = pos
|
||||||
|
if not pos then
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
-- filling it up?
|
||||||
|
local wear = itemstack:get_wear()
|
||||||
|
if minetest.get_item_group(minetest.get_node(pos).name, "water") >= 3 then
|
||||||
|
if wear ~= 1 then
|
||||||
|
minetest.sound_play("crops_watercan_entering", {pos=pos, gain=0.8})
|
||||||
|
minetest.after(math.random()/2, function(pos)
|
||||||
|
if math.random(2) == 1 then
|
||||||
|
minetest.sound_play("crops_watercan_splash_quiet", {pos=pos, gain=0.1})
|
||||||
|
end
|
||||||
|
if math.random(3) == 1 then
|
||||||
|
minetest.after(math.random()/2, function(pos)
|
||||||
|
minetest.sound_play("crops_watercan_splash_small", {pos=pos, gain=0.7})
|
||||||
|
end, pos)
|
||||||
|
end
|
||||||
|
if math.random(3) == 1 then
|
||||||
|
minetest.after(math.random()/2, function(pos)
|
||||||
|
minetest.sound_play("crops_watercan_splash_big", {pos=pos, gain=0.7})
|
||||||
|
end, pos)
|
||||||
|
end
|
||||||
|
end, pos)
|
||||||
|
itemstack:set_wear(1)
|
||||||
|
end
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
-- using it on a top-half part of a plant?
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
if meta:get_int("crops_top_half") == 1 then
|
||||||
|
meta = minetest.get_meta({x=pos.x, y=pos.y-1, z=pos.z})
|
||||||
|
end
|
||||||
|
-- using it on a plant?
|
||||||
|
local water = meta:get_int("crops_water")
|
||||||
|
if water < 1 then
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
-- empty?
|
||||||
|
if wear == 65534 then
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
crops.particles(ppos, 2)
|
||||||
|
minetest.sound_play("crops_watercan_watering", {pos=pos, gain=0.8})
|
||||||
|
water = math.min(water + crops.settings.watercan, crops.settings.watercan_max)
|
||||||
|
meta:set_int("crops_water", water)
|
||||||
|
|
||||||
|
itemstack:set_wear(math.min(65534, wear + (65535 / crops.settings.watercan_uses)))
|
||||||
|
return itemstack
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_tool("crops:hydrometer", {
|
||||||
|
description = "Hydrometer",
|
||||||
|
inventory_image = "crops_hydrometer.png",
|
||||||
|
liquids_pointable = false,
|
||||||
|
range = 2.5,
|
||||||
|
stack_max = 1,
|
||||||
|
tool_capabilities = {
|
||||||
|
},
|
||||||
|
on_use = function(itemstack, user, pointed_thing)
|
||||||
|
local pos = pointed_thing.under
|
||||||
|
if not pos then
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
-- doublesize plant?
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
if meta:get_int("crops_top_half") == 1 then
|
||||||
|
meta = minetest.get_meta({x=pos.x, y=pos.y-1, z=pos.z})
|
||||||
|
end
|
||||||
|
|
||||||
|
-- using it on a plant?
|
||||||
|
local water = meta:get_int("crops_water")
|
||||||
|
if water == nil then
|
||||||
|
itemstack:set_wear(65534)
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
itemstack:set_wear(65535 - ((65534 / 100) * water))
|
||||||
|
return itemstack
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "crops:watering_can",
|
||||||
|
recipe = {
|
||||||
|
{ "default:steel_ingot", "", "" },
|
||||||
|
{ "default:steel_ingot", "", "default:steel_ingot" },
|
||||||
|
{ "", "default:steel_ingot", "" },
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "crops:hydrometer",
|
||||||
|
recipe = {
|
||||||
|
{ "default:mese_crystal_fragment", "", "" },
|
||||||
|
{ "", "default:steel_ingot", "" },
|
||||||
|
{ "", "", "default:steel_ingot" },
|
||||||
|
},
|
||||||
|
})
|
Loading…
x
Reference in New Issue
Block a user