2024-12-30 22:05:28 -06:00

95 lines
2.2 KiB
Lua

PyuTest.potion_recipes = {}
PyuTest.make_potion = function (name, desc, options)
local colorspec = core.colorspec_to_colorstring(options.color or "red")
local texture = string.format("pyutest-glass-bottle.png^(pyutest-bottle-overlay.png^[colorize:%s)", colorspec)
local ptexture = string.format("pyutest-snowball-particle.png^[colorize:%s", colorspec)
local l = options.length or 60
local m = options.multiplier or 1.15
local e_id = name .. "_splash"
if options.craft ~= nil then
PyuTest.potion_recipes[options.craft] = name
end
local function drink(itemstack, user, pointed_thing)
if user == nil or not user:is_player() then
return
end
if options.action then
options.action(itemstack, user, pointed_thing)
else
local playername = user:get_player_name()
PyuTest.status_effect_add(playername, options.effect, m, l)
end
itemstack:take_item()
return itemstack
end
local function splash(pos)
local rad = options.radius or 2
for o in core.objects_inside_radius(pos, rad) do
if o:is_valid() then
if o:is_player() then
if options.action_splash then
options.action_splash(o)
else
local playername = o:get_player_name()
PyuTest.status_effect_add(playername, options.effect, m, l)
end
end
end
end
local vel = 2
core.add_particlespawner({
amount = math.random(5, 10),
time = 0.8,
exptime = 0.4,
vertical = true,
glow = core.LIGHT_MAX,
minsize = 1.3,
maxsize = 1.3,
texture = ptexture,
pos = pos,
minvel = vector.new(-vel, -vel, -vel),
maxvel = vector.new(vel, vel, vel),
})
end
local function launch(itemstack, user, pointed_thing)
core.sound_play("pyutest-throw", {
player = user:get_player_name()
})
PyuTest.shoot_projectile_from_object(e_id, user)
itemstack:take_item()
return itemstack
end
PyuTest.make_projectile(e_id, {
visual = "sprite",
textures = {texture},
}, {
}, {
on_hit_node = function (self, pos, node)
splash(pos + vector.new(0, 1, 0))
end,
on_hit_object = function (self, object)
splash(self.object:get_pos())
end,
})
PyuTest.make_item(name, desc, {
potion = 1
}, texture, {
on_use = drink,
on_place = launch,
on_secondary_use = launch
})
end