95 lines
2.2 KiB
Lua
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
|