minetest_pep/init.lua

442 lines
13 KiB
Lua
Raw Normal View History

2019-08-24 09:01:48 -07:00
local S = minetest.get_translator("pep")
local ppa = minetest.get_modpath("playerphysics")
2016-11-02 15:43:30 -07:00
pep = {}
function pep.register_potion(potiondef)
local on_use
if(potiondef.effect_type ~= nil) then
on_use = function(itemstack, user, pointed_thing)
playereffects.apply_effect_type(potiondef.effect_type, potiondef.duration, user)
itemstack:take_item()
return itemstack
end
else
on_use = function(itemstack, user, pointed_thing)
itemstack:take_item()
return itemstack
end
end
2014-09-27 18:51:54 -07:00
minetest.register_craftitem("pep:"..potiondef.basename, {
2019-08-24 09:01:48 -07:00
description = S("Glass Bottle (@1)", potiondef.contentstring),
2016-11-15 21:40:02 -08:00
_doc_items_longdesc = potiondef.longdesc,
_doc_items_usagehelp = S("Hold it in your hand, then left-click to drink it."),
2014-09-27 18:51:54 -07:00
inventory_image = "pep_"..potiondef.basename..".png",
wield_image = "pep_"..potiondef.basename..".png",
on_use = on_use,
})
end
2015-02-08 17:45:58 -08:00
pep.moles = {}
function pep.enable_mole_mode(playername)
pep.moles[playername] = true
end
function pep.disable_mole_mode(playername)
pep.moles[playername] = false
end
function pep.yaw_to_vector(yaw)
local tau = math.pi*2
yaw = yaw % tau
if yaw < tau/8 then
return { x=0, y=0, z=1}
elseif yaw < (3/8)*tau then
return { x=-1, y=0, z=0 }
elseif yaw < (5/8)*tau then
return { x=0, y=0, z=-1 }
elseif yaw < (7/8)*tau then
return { x=1, y=0, z=0 }
else
return { x=0, y=0, z=1}
end
end
function pep.moledig(playername)
local player = minetest.get_player_by_name(playername)
2019-08-24 09:05:47 -07:00
local yaw = player:get_look_horizontal()
2015-02-08 17:45:58 -08:00
2019-08-24 09:05:47 -07:00
local pos = vector.round(player:get_pos())
2015-02-08 17:45:58 -08:00
local v = pep.yaw_to_vector(yaw)
local digpos1 = vector.add(pos, v)
local digpos2 = { x = digpos1.x, y = digpos1.y+1, z = digpos1.z }
local try_dig = function(pos)
local n = minetest.get_node(pos)
local ndef = minetest.registered_nodes[n.name]
if ndef.walkable and ndef.diggable then
if ndef.can_dig ~= nil then
if ndef.can_dig() then
return true
else
return false
end
else
return true
end
else
return false
end
end
local dig = function(pos)
if try_dig(pos) then
local n = minetest.get_node(pos)
local ndef = minetest.registered_nodes[n.name]
if ndef.sounds ~= nil then
minetest.sound_play(ndef.sounds.dug, { pos = pos })
end
-- TODO: Replace this code as soon Minetest removes support for this function
local drops = minetest.get_node_drops(n.name, "default:pick_steel")
minetest.dig_node(pos)
local inv = player:get_inventory()
local leftovers = {}
for i=1,#drops do
table.insert(leftovers, inv:add_item("main", drops[i]))
end
for i=1,#leftovers do
minetest.add_item(pos, leftovers[i])
end
end
end
dig(digpos1)
dig(digpos2)
end
pep.timer = 0
minetest.register_globalstep(function(dtime)
pep.timer = pep.timer + dtime
if pep.timer > 0.5 then
for playername, is_mole in pairs(pep.moles) do
if is_mole then
pep.moledig(playername)
end
end
pep.timer = 0
end
end)
local add_physic = function(player, attribute, value)
if ppa then
playerphysics.add_physics_factor(player, attribute, "pep:"..attribute, value)
else
player:set_physics_override({[attribute]=value})
end
end
local remove_physic = function(player, attribute)
if ppa then
playerphysics.remove_physics_factor(player, attribute, "pep:"..attribute)
else
player:set_physics_override({[attribute]=1})
end
end
2016-11-02 15:50:22 -07:00
playereffects.register_effect_type("pepspeedplus", S("High speed"), "pep_speedplus.png", {"speed"},
function(player)
add_physic(player, "speed", 2)
end,
function(effect, player)
remove_physic(player, "speed")
end
)
2016-11-02 15:50:22 -07:00
playereffects.register_effect_type("pepspeedminus", S("Low speed"), "pep_speedminus.png", {"speed"},
function(player)
add_physic(player, "speed", 0.5)
end,
function(effect, player)
remove_physic(player, "speed")
end
)
2016-11-02 15:50:22 -07:00
playereffects.register_effect_type("pepspeedreset", S("Speed neutralizer"), "pep_speedreset.png", {"speed"},
2014-07-25 03:45:06 -07:00
function() end, function() end)
2016-11-02 15:50:22 -07:00
playereffects.register_effect_type("pepjumpplus", S("High jump"), "pep_jumpplus.png", {"jump"},
function(player)
add_physic(player, "jump", 2)
end,
function(effect, player)
remove_physic(player, "jump")
end
)
2016-11-02 15:50:22 -07:00
playereffects.register_effect_type("pepjumpminus", S("Low jump"), "pep_jumpminus.png", {"jump"},
function(player)
add_physic(player, "jump", 0.5)
end,
function(effect, player)
remove_physic(player, "jump")
end
)
2016-11-02 15:50:22 -07:00
playereffects.register_effect_type("pepjumpreset", S("Jump height neutralizer"), "pep_jumpreset.png", {"jump"},
2014-07-25 03:45:06 -07:00
function() end, function() end)
2016-11-02 15:50:22 -07:00
playereffects.register_effect_type("pepgrav0", S("No gravity"), "pep_grav0.png", {"gravity"},
function(player)
add_physic(player, "gravity", 0)
end,
function(effect, player)
remove_physic(player, "gravity")
end
)
2016-11-02 15:50:22 -07:00
playereffects.register_effect_type("pepgravreset", S("Gravity neutralizer"), "pep_gravreset.png", {"gravity"},
2014-07-25 03:45:06 -07:00
function() end, function() end)
2016-11-02 15:50:22 -07:00
playereffects.register_effect_type("pepregen", S("Regeneration"), "pep_regen.png", {"health"},
function(player)
player:set_hp(player:get_hp()+1)
end,
nil, nil, nil, 2
)
2016-11-02 15:50:22 -07:00
playereffects.register_effect_type("pepregen2", S("Strong regeneration"), "pep_regen2.png", {"health"},
function(player)
player:set_hp(player:get_hp()+2)
end,
nil, nil, nil, 1
)
2016-03-09 12:52:14 -08:00
if minetest.get_modpath("mana") ~= nil then
2016-11-02 15:50:22 -07:00
playereffects.register_effect_type("pepmanaregen", S("Weak mana boost"), "pep_manaregen.png", {"mana"},
2016-03-09 12:52:14 -08:00
function(player)
local name = player:get_player_name()
mana.setregen(name, mana.getregen(name) + 0.5)
end,
function(effect, player)
local name = player:get_player_name()
mana.setregen(name, mana.getregen(name) - 0.5)
end
)
2016-11-02 15:50:22 -07:00
playereffects.register_effect_type("pepmanaregen2", S("Strong mana boost"), "pep_manaregen2.png", {"mana"},
2016-03-09 12:52:14 -08:00
function(player)
local name = player:get_player_name()
mana.setregen(name, mana.getregen(name) + 1)
end,
function(effect, player)
local name = player:get_player_name()
mana.setregen(name, mana.getregen(name) - 1)
end
)
end
2016-11-02 15:50:22 -07:00
playereffects.register_effect_type("pepbreath", S("Perfect breath"), "pep_breath.png", {"breath"},
function(player)
player:set_breath(player:get_breath()+2)
end,
nil, nil, nil, 1
)
2016-11-02 15:50:22 -07:00
playereffects.register_effect_type("pepmole", S("Mole mode"), "pep_mole.png", {"autodig"},
2015-02-08 17:45:58 -08:00
function(player)
pep.enable_mole_mode(player:get_player_name())
end,
function(effect, player)
pep.disable_mole_mode(player:get_player_name())
end
)
pep.register_potion({
basename = "speedplus",
2016-11-02 15:50:22 -07:00
contentstring = S("Running Potion"),
longdesc = S("Drinking it will make you run faster for 30 seconds."),
effect_type = "pepspeedplus",
2016-11-02 15:43:30 -07:00
duration = 30,
})
pep.register_potion({
basename = "speedminus",
2016-11-02 15:50:22 -07:00
contentstring = S("Slug Potion"),
longdesc = S("Drinking it will make you walk slower for 30 seconds."),
effect_type = "pepspeedminus",
2016-11-02 15:43:30 -07:00
duration = 30,
})
2014-07-25 03:45:06 -07:00
pep.register_potion({
basename = "speedreset",
2016-11-02 15:50:22 -07:00
contentstring = S("Speed Neutralizer"),
longdesc = S("Drinking it will stop all speed effects you may currently have."),
2014-07-25 03:45:06 -07:00
effect_type = "pepspeedreset",
duration = 0
})
pep.register_potion({
basename = "breath",
2016-11-02 15:50:22 -07:00
contentstring = S("Air Potion"),
longdesc = S("Drinking it gives you breath underwater for 30 seconds."),
effect_type = "pepbreath",
2014-09-27 18:51:54 -07:00
duration = 30,
})
pep.register_potion({
basename = "regen",
2016-11-02 15:50:22 -07:00
contentstring = S("Weak Healing Potion"),
longdesc = S("Drinking it makes you regenerate health. Every 2 seconds, you get 1 HP, 10 times in total."),
effect_type = "pepregen",
duration = 10,
})
pep.register_potion({
basename = "regen2",
2016-11-02 15:50:22 -07:00
contentstring = S("Strong Healing Potion"),
longdesc = S("Drinking it makes you regenerate health quickly. Every second you get 2 HP, 10 times in total."),
effect_type = "pepregen2",
duration = 10,
})
pep.register_potion({
2014-07-25 03:29:35 -07:00
basename = "grav0",
2016-11-02 15:50:22 -07:00
contentstring = S("Non-Gravity Potion"),
longdesc = S("When you drink this potion, gravity stops affecting you, as if you were in space. The effect lasts for 20 seconds."),
2014-07-25 03:29:35 -07:00
effect_type = "pepgrav0",
duration = 20,
})
2014-07-25 03:45:06 -07:00
pep.register_potion({
basename = "gravreset",
2016-11-02 15:50:22 -07:00
contentstring = S("Gravity Neutralizer"),
longdesc = S("Drinking it will stop all gravity effects you currently have."),
2014-07-25 03:45:06 -07:00
effect_type = "pepgravreset",
duration = 0,
})
pep.register_potion({
basename = "jumpplus",
2016-11-02 15:50:22 -07:00
contentstring = S("High Jumping Potion"),
longdesc = S("Drinking it will make you jump higher for 30 seconds."),
effect_type = "pepjumpplus",
duration = 30,
})
pep.register_potion({
basename = "jumpminus",
2016-11-02 15:50:22 -07:00
contentstring = S("Low Jumping Potion"),
2016-11-02 16:04:34 -07:00
longdesc = S("Drinking it will make you jump lower for 30 seconds."),
effect_type = "pepjumpminus",
duration = 30,
})
2014-07-25 03:45:06 -07:00
pep.register_potion({
basename = "jumpreset",
2016-11-02 15:50:22 -07:00
contentstring = S("Jump Neutralizer"),
longdesc = S("Drinking it will stop all jumping effects you may currently have."),
2014-07-25 03:45:06 -07:00
effect_type = "pepjumpreset",
duration = 0,
})
2015-02-08 17:45:58 -08:00
pep.register_potion({
basename = "mole",
2016-11-02 15:50:22 -07:00
contentstring = S("Mole Potion"),
longdesc = S("Drinking it will start an effect which will magically attempt to mine any two blocks in front of you horizontally, as if you were using a steel pickaxe on them. The effect lasts for 18 seconds."),
2015-02-08 17:45:58 -08:00
effect_type = "pepmole",
duration = 18,
})
2016-03-09 12:52:14 -08:00
if(minetest.get_modpath("mana")~=nil) then
pep.register_potion({
basename = "manaregen",
2016-11-02 15:50:22 -07:00
contentstring = S("Weak Mana Potion"),
2016-03-09 12:52:14 -08:00
effect_type = "pepmanaregen",
duration = 10,
2016-11-02 15:50:22 -07:00
longdesc = S("Drinking it will increase your mana regeneration rate by 0.5 for 10 seconds."),
2016-03-09 12:52:14 -08:00
})
pep.register_potion({
basename = "manaregen2",
2016-11-02 15:50:22 -07:00
contentstring = S("Strong Mana Potion"),
2016-03-09 12:52:14 -08:00
effect_type = "pepmanaregen2",
duration = 10,
2016-11-02 15:50:22 -07:00
longdesc = S("Drinking it will increase your mana regeneration rate by 1 for 10 seconds."),
2016-03-09 12:52:14 -08:00
})
end
2014-07-25 03:29:35 -07:00
--[=[ register crafts ]=]
--[[ normal potions ]]
2014-09-27 18:51:54 -07:00
if(minetest.get_modpath("vessels")~=nil) then
if(minetest.get_modpath("default")~=nil) then
minetest.register_craft({
type = "shapeless",
output = "pep:breath",
2019-08-25 20:10:46 -07:00
recipe = { "default:coral_cyan", "default:coral_green", "default:coral_pink", "vessels:glass_bottle" }
})
minetest.register_craft({
type = "shapeless",
output = "pep:speedminus",
recipe = { "default:dry_grass_1", "default:ice", "vessels:glass_bottle" }
})
if(minetest.get_modpath("flowers") ~= nil) then
minetest.register_craft({
type = "shapeless",
output = "pep:jumpplus",
recipe = { "flowers:flower_tulip", "default:grass_1", "default:mese_crystal_fragment",
"default:mese_crystal_fragment", "vessels:glass_bottle" }
})
2016-03-09 12:52:14 -08:00
minetest.register_craft({
type = "shapeless",
output = "pep:poisoner",
recipe = { "flowers:mushroom_red", "flowers:mushroom_red", "flowers:mushroom_red", "vessels:glass_bottle" }
})
if(minetest.get_modpath("farming") ~= nil) then
minetest.register_craft({
type = "shapeless",
output = "pep:regen",
recipe = { "default:cactus", "farming:flour", "flowers:mushroom_brown", "vessels:glass_bottle" }
})
end
end
if(minetest.get_modpath("farming") ~= nil) then
minetest.register_craft({
type = "shapeless",
output = "pep:regen2",
recipe = { "default:gold_lump", "farming:flour", "pep:regen" }
})
2016-03-09 12:52:14 -08:00
if minetest.get_modpath("mana") ~= nil then
minetest.register_craft({
type = "shapeless",
output = "pep:manaregen",
recipe = { "default:dry_shrub", "default:dry_shrub", "farming:seed_cotton", "default:mese_crystal_fragment",
"vessels:glass_bottle" }
})
end
end
if minetest.get_modpath("mana") ~= nil then
minetest.register_craft({
type = "shapeless",
output = "pep:manaregen2",
recipe = { "default:dry_shrub", "default:dry_shrub", "default:dry_shrub", "default:dry_shrub", "default:junglesapling",
2019-08-25 20:10:46 -07:00
"default:marram_grass_1", "default:mese_crystal_fragment", "pep:manaregen" }
2016-03-09 12:52:14 -08:00
})
end
minetest.register_craft({
type = "shapeless",
output = "pep:jumpminus",
recipe = { "default:leaves", "default:jungleleaves", "default:iron_lump", "flowers:dandelion_yellow", "vessels:glass_bottle" }
})
minetest.register_craft({
type = "shapeless",
2014-07-25 03:29:35 -07:00
output = "pep:grav0",
2014-09-27 18:51:54 -07:00
recipe = { "default:mese_crystal", "vessels:glass_bottle" }
})
2015-02-08 17:45:58 -08:00
minetest.register_craft({
type = "shapeless",
output = "pep:mole",
recipe = { "default:pick_steel", "default:shovel_steel", "vessels:glass_bottle" },
})
2014-07-25 03:29:35 -07:00
minetest.register_craft({
type = "shapeless",
output = "pep:gravreset" ,
recipe = { "pep:grav0", "default:iron_lump" }
2014-07-25 03:29:35 -07:00
})
end
if(minetest.get_modpath("flowers") ~= nil) then
2014-09-27 18:54:36 -07:00
minetest.register_craft({
type = "shapeless",
output = "pep:speedplus",
recipe = { "default:pine_sapling", "default:cactus", "flowers:dandelion_yellow", "default:junglegrass", "vessels:glass_bottle" }
2014-09-27 18:54:36 -07:00
})
end
end
2014-09-27 18:54:36 -07:00
2014-09-27 18:51:54 -07:00
--[[ independent crafts ]]
2014-07-25 03:29:35 -07:00
minetest.register_craft({
type = "shapeless",
output = "pep:speedreset",
recipe = { "pep:speedplus", "pep:speedminus" }
})
minetest.register_craft({
type = "shapeless",
output = "pep:jumpreset",
recipe = { "pep:jumpplus", "pep:jumpminus" }
})