Extra error checking: global variables
This commit is contained in:
parent
bf26b8bee1
commit
1648bc459f
17 changed files with 362 additions and 323 deletions
456
elixir.lua
456
elixir.lua
|
@ -169,23 +169,130 @@ if count > 15 then
|
|||
end
|
||||
|
||||
|
||||
fun_caves.register_status({
|
||||
name = 'breathe',
|
||||
terminate = function(player)
|
||||
if not player then
|
||||
return
|
||||
end
|
||||
if fun_caves.register_status and fun_caves.set_status then
|
||||
fun_caves.register_status({
|
||||
name = 'breathe',
|
||||
terminate = function(player)
|
||||
if not player then
|
||||
return
|
||||
end
|
||||
|
||||
local player_name = player:get_player_name()
|
||||
minetest.chat_send_player(player_name, minetest.colorize('#FF0000', 'Your breathing becomes more difficult...'))
|
||||
end,
|
||||
})
|
||||
local player_name = player:get_player_name()
|
||||
minetest.chat_send_player(player_name, minetest.colorize('#FF0000', 'Your breathing becomes more difficult...'))
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("fun_caves:elixir_breathe", {
|
||||
description = 'Dr Robertson\'s Patented Easy Breathing Elixir',
|
||||
inventory_image = "fun_caves_elixir_breathe.png",
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
if not (itemstack and user) then
|
||||
minetest.register_craftitem("fun_caves:elixir_breathe", {
|
||||
description = 'Dr Robertson\'s Patented Easy Breathing Elixir',
|
||||
inventory_image = "fun_caves_elixir_breathe.png",
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
if not (itemstack and user) then
|
||||
return
|
||||
end
|
||||
|
||||
local player_name = user:get_player_name()
|
||||
if not (player_name and type(player_name) == 'string' and player_name ~= '') then
|
||||
return
|
||||
end
|
||||
|
||||
fun_caves.set_status(player_name, 'breathe', elixir_duration)
|
||||
minetest.chat_send_player(player_name, 'Your breathing becomes easier...')
|
||||
itemstack:take_item()
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'fun_caves:elixir_breathe',
|
||||
recipe = {
|
||||
'mobs_slimes:green_slimeball',
|
||||
'fun_caves:coral_gem',
|
||||
"vessels:glass_bottle",
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'fun_caves:elixir_breathe',
|
||||
recipe = {
|
||||
'fun_caves:syrup',
|
||||
'fun_caves:coral_gem',
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
fun_caves.register_status({
|
||||
name = 'damage_elixir',
|
||||
terminate = function(player)
|
||||
if not (player and fun_caves.db.status) then
|
||||
return
|
||||
end
|
||||
|
||||
local player_name = player:get_player_name()
|
||||
minetest.chat_send_player(player_name, minetest.colorize('#FF0000', 'You feel weaker...'))
|
||||
fun_caves.db.status[player_name].damage_elixir = nil
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
fun_caves.register_status({
|
||||
name = 'armor_elixir',
|
||||
terminate = function(player)
|
||||
if not (player and fun_caves.db.status and fun_caves.display_armor) then
|
||||
return
|
||||
end
|
||||
|
||||
local player_name = player:get_player_name()
|
||||
if not (player_name and type(player_name) == 'string' and player_name ~= '') then
|
||||
return
|
||||
end
|
||||
|
||||
local armor_elixir = fun_caves.db.status[player_name].armor_elixir
|
||||
local factor = armor_elixir.factor
|
||||
local armor = player:get_armor_groups()
|
||||
if not (armor and armor.fleshy) then
|
||||
return
|
||||
end
|
||||
|
||||
armor.fleshy = math.min(100, math.max(1, math.ceil(armor.fleshy / factor)))
|
||||
player:set_armor_groups(armor)
|
||||
minetest.chat_send_player(player_name, minetest.colorize('#FF0000', 'Your skin feels softer...'))
|
||||
fun_caves.db.status[player_name].armor_elixir = nil
|
||||
fun_caves.display_armor(player)
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
if fun_caves.expire_elixir_on_death then
|
||||
minetest.register_on_dieplayer(function(player)
|
||||
if not (player and fun_caves.db.status and fun_caves.display_armor) then
|
||||
return
|
||||
end
|
||||
|
||||
local player_name = player:get_player_name()
|
||||
if not (player_name and type(player_name) == 'string' and player_name ~= '') then
|
||||
return
|
||||
end
|
||||
|
||||
if fun_caves.db.status[player_name] and fun_caves.db.status[player_name].armor_elixir then
|
||||
local factor = fun_caves.db.status[player_name].armor_elixir.factor
|
||||
local armor = player:get_armor_groups()
|
||||
if not (armor and armor.fleshy) then
|
||||
return
|
||||
end
|
||||
|
||||
armor.fleshy = math.min(100, math.max(1, math.ceil(armor.fleshy / factor)))
|
||||
player:set_armor_groups(armor)
|
||||
fun_caves.db.status[player_name].armor_elixir = nil
|
||||
fun_caves.display_armor(player)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
|
||||
local function increase_damage(user, bonus)
|
||||
if not (user and fun_caves.set_status) then
|
||||
return
|
||||
end
|
||||
|
||||
|
@ -194,169 +301,117 @@ minetest.register_craftitem("fun_caves:elixir_breathe", {
|
|||
return
|
||||
end
|
||||
|
||||
fun_caves.set_status(player_name, 'breathe', elixir_duration)
|
||||
minetest.chat_send_player(player_name, 'Your breathing becomes easier...')
|
||||
itemstack:take_item()
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'fun_caves:elixir_breathe',
|
||||
recipe = {
|
||||
'mobs_slimes:green_slimeball',
|
||||
'fun_caves:coral_gem',
|
||||
"vessels:glass_bottle",
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'fun_caves:elixir_breathe',
|
||||
recipe = {
|
||||
'fun_caves:syrup',
|
||||
'fun_caves:coral_gem',
|
||||
},
|
||||
})
|
||||
minetest.chat_send_player(player_name, 'You feel strong...')
|
||||
fun_caves.set_status(player_name, 'damage_elixir', elixir_duration, {bonus = bonus})
|
||||
end
|
||||
|
||||
|
||||
fun_caves.register_status({
|
||||
name = 'damage_elixir',
|
||||
terminate = function(player)
|
||||
if not player then
|
||||
local function armor(user, factor)
|
||||
if not (user and fun_caves.db.status and fun_caves.display_armor and fun_caves.set_status) then
|
||||
return
|
||||
end
|
||||
|
||||
local player_name = player:get_player_name()
|
||||
minetest.chat_send_player(player_name, minetest.colorize('#FF0000', 'You feel weaker...'))
|
||||
fun_caves.db.status[player_name].damage_elixir = nil
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
fun_caves.register_status({
|
||||
name = 'armor_elixir',
|
||||
terminate = function(player)
|
||||
if not player then
|
||||
return
|
||||
end
|
||||
|
||||
local player_name = player:get_player_name()
|
||||
local player_name = user:get_player_name()
|
||||
if not (player_name and type(player_name) == 'string' and player_name ~= '') then
|
||||
return
|
||||
end
|
||||
|
||||
local armor_elixir = fun_caves.db.status[player_name].armor_elixir
|
||||
local factor = armor_elixir.factor
|
||||
local armor = player:get_armor_groups()
|
||||
local armor = user:get_armor_groups()
|
||||
if not (armor and armor.fleshy) then
|
||||
return
|
||||
end
|
||||
|
||||
armor.fleshy = math.min(100, math.max(1, math.ceil(armor.fleshy / factor)))
|
||||
player:set_armor_groups(armor)
|
||||
minetest.chat_send_player(player_name, minetest.colorize('#FF0000', 'Your skin feels softer...'))
|
||||
fun_caves.db.status[player_name].armor_elixir = nil
|
||||
fun_caves.display_armor(player)
|
||||
end,
|
||||
})
|
||||
|
||||
|
||||
if fun_caves.expire_elixir_on_death then
|
||||
minetest.register_on_dieplayer(function(player)
|
||||
if not player then
|
||||
return
|
||||
if fun_caves.db.status[player_name].armor_elixir then
|
||||
local old_factor = fun_caves.db.status[player_name].armor_elixir.factor
|
||||
armor.fleshy = math.min(100, math.max(1, math.ceil(armor.fleshy / old_factor)))
|
||||
end
|
||||
|
||||
local player_name = player:get_player_name()
|
||||
if not (player_name and type(player_name) == 'string' and player_name ~= '') then
|
||||
return
|
||||
armor.fleshy = math.min(100, math.max(1, math.ceil(armor.fleshy * factor)))
|
||||
user:set_armor_groups(armor)
|
||||
minetest.chat_send_player(player_name, 'Your skin feels harder...')
|
||||
fun_caves.set_status(player_name, 'armor_elixir', elixir_duration, {factor = factor})
|
||||
fun_caves.display_armor(user)
|
||||
end
|
||||
|
||||
local descs = {
|
||||
{'wood', 0.95, 'group:wood'},
|
||||
{'stone', 0.9, 'group:stone'},
|
||||
{'steel', 0.8, 'default:steel_ingot'},
|
||||
{'copper', 0.85, 'default:copper_ingot'},
|
||||
{'bronze', 0.7, 'default:bronze_ingot'},
|
||||
{'gold', 0.6, 'default:gold_ingot'},
|
||||
{'diamond', 0.5, 'default:diamond'},
|
||||
{'silver', 0.4, 'fun_caves:silver_ingot'},
|
||||
{'mese', 0.3, 'default:mese_crystal'},
|
||||
--{'', 0.2, ''},
|
||||
--{'adamant', 0.1, 'fun_caves:adamant'},
|
||||
}
|
||||
|
||||
if fun_caves.elixir_armor then
|
||||
for _, desc in pairs(descs) do
|
||||
local name = desc[1]
|
||||
local value = desc[2]
|
||||
local cap = name:gsub('^%l', string.upper)
|
||||
minetest.register_craftitem("fun_caves:liquid_"..name, {
|
||||
description = 'Dr Robertson\'s Patented Liquid '..cap..' Elixir',
|
||||
drawtype = "plantlike",
|
||||
paramtype = "light",
|
||||
tiles = {'fun_caves_liquid_'..name..'.png'},
|
||||
inventory_image = 'fun_caves_liquid_'..name..'.png',
|
||||
groups = {dig_immediate = 3, vessel = 1},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
if not (itemstack and user) then
|
||||
return
|
||||
end
|
||||
|
||||
armor(user, value)
|
||||
itemstack:take_item()
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'fun_caves:liquid_'..name,
|
||||
recipe = {
|
||||
'mobs_slimes:green_slimeball',
|
||||
desc[3],
|
||||
"vessels:glass_bottle",
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'fun_caves:liquid_'..name,
|
||||
recipe = {
|
||||
'fun_caves:syrup',
|
||||
desc[3],
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
if fun_caves.db.status[player_name] and fun_caves.db.status[player_name].armor_elixir then
|
||||
local factor = fun_caves.db.status[player_name].armor_elixir.factor
|
||||
local armor = player:get_armor_groups()
|
||||
if not (armor and armor.fleshy) then
|
||||
return
|
||||
end
|
||||
|
||||
armor.fleshy = math.min(100, math.max(1, math.ceil(armor.fleshy / factor)))
|
||||
player:set_armor_groups(armor)
|
||||
fun_caves.db.status[player_name].armor_elixir = nil
|
||||
fun_caves.display_armor(player)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
|
||||
local function increase_damage(user, bonus)
|
||||
if not user then
|
||||
return
|
||||
end
|
||||
|
||||
local player_name = user:get_player_name()
|
||||
if not (player_name and type(player_name) == 'string' and player_name ~= '') then
|
||||
return
|
||||
end
|
||||
|
||||
minetest.chat_send_player(player_name, 'You feel strong...')
|
||||
fun_caves.set_status(player_name, 'damage_elixir', elixir_duration, {bonus = bonus})
|
||||
end
|
||||
local descs = {
|
||||
{'boar', 2, 'fun_caves:meteorite'},
|
||||
{'lion', 4, 'fun_caves:eternal_ice_crystal'},
|
||||
{'grizzly', 6},
|
||||
{'bull', 8},
|
||||
{'rhino', 10},
|
||||
{'elephant', 12},
|
||||
}
|
||||
|
||||
|
||||
local function armor(user, factor)
|
||||
if not user then
|
||||
return
|
||||
end
|
||||
|
||||
local player_name = user:get_player_name()
|
||||
if not (player_name and type(player_name) == 'string' and player_name ~= '') then
|
||||
return
|
||||
end
|
||||
|
||||
local armor = user:get_armor_groups()
|
||||
if not (armor and armor.fleshy) then
|
||||
return
|
||||
end
|
||||
|
||||
if fun_caves.db.status[player_name].armor_elixir then
|
||||
local old_factor = fun_caves.db.status[player_name].armor_elixir.factor
|
||||
armor.fleshy = math.min(100, math.max(1, math.ceil(armor.fleshy / old_factor)))
|
||||
end
|
||||
|
||||
armor.fleshy = math.min(100, math.max(1, math.ceil(armor.fleshy * factor)))
|
||||
user:set_armor_groups(armor)
|
||||
minetest.chat_send_player(player_name, 'Your skin feels harder...')
|
||||
fun_caves.set_status(player_name, 'armor_elixir', elixir_duration, {factor = factor})
|
||||
fun_caves.display_armor(user)
|
||||
end
|
||||
|
||||
local descs = {
|
||||
{'wood', 0.95, 'group:wood'},
|
||||
{'stone', 0.9, 'group:stone'},
|
||||
{'steel', 0.8, 'default:steel_ingot'},
|
||||
{'copper', 0.85, 'default:copper_ingot'},
|
||||
{'bronze', 0.7, 'default:bronze_ingot'},
|
||||
{'gold', 0.6, 'default:gold_ingot'},
|
||||
{'diamond', 0.5, 'default:diamond'},
|
||||
{'silver', 0.4, 'fun_caves:silver_ingot'},
|
||||
{'mese', 0.3, 'default:mese_crystal'},
|
||||
--{'', 0.2, ''},
|
||||
--{'adamant', 0.1, 'fun_caves:adamant'},
|
||||
}
|
||||
|
||||
if fun_caves.elixir_armor then
|
||||
for _, desc in pairs(descs) do
|
||||
local name = desc[1]
|
||||
local value = desc[2]
|
||||
local cap = name:gsub('^%l', string.upper)
|
||||
minetest.register_craftitem("fun_caves:liquid_"..name, {
|
||||
description = 'Dr Robertson\'s Patented Liquid '..cap..' Elixir',
|
||||
local uname = name:gsub("(%l)(%w*)", function(a,b) return string.upper(a)..b end)
|
||||
local bonus = desc[2]
|
||||
minetest.register_craftitem("fun_caves:elixir_strength_"..name, {
|
||||
description = 'Dr Robertson\'s Patented '..uname..' Strength Elixir',
|
||||
drawtype = "plantlike",
|
||||
paramtype = "light",
|
||||
tiles = {'fun_caves_liquid_'..name..'.png'},
|
||||
inventory_image = 'fun_caves_liquid_'..name..'.png',
|
||||
tiles = {'fun_caves_elixir_strength_'..name..'.png'},
|
||||
inventory_image = 'fun_caves_elixir_strength_'..name..'.png',
|
||||
groups = {dig_immediate = 3, vessel = 1},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
|
@ -364,84 +419,31 @@ if fun_caves.elixir_armor then
|
|||
return
|
||||
end
|
||||
|
||||
armor(user, value)
|
||||
increase_damage(user, bonus)
|
||||
itemstack:take_item()
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'fun_caves:liquid_'..name,
|
||||
recipe = {
|
||||
'mobs_slimes:green_slimeball',
|
||||
desc[3],
|
||||
"vessels:glass_bottle",
|
||||
},
|
||||
})
|
||||
if desc[3] then
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'fun_caves:elixir_strength_'..name,
|
||||
recipe = {
|
||||
'mobs_slimes:green_slimeball',
|
||||
desc[3],
|
||||
"vessels:glass_bottle",
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'fun_caves:liquid_'..name,
|
||||
recipe = {
|
||||
'fun_caves:syrup',
|
||||
desc[3],
|
||||
},
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local descs = {
|
||||
{'boar', 2, 'fun_caves:meteorite'},
|
||||
{'lion', 4, 'fun_caves:eternal_ice_crystal'},
|
||||
{'grizzly', 6},
|
||||
{'bull', 8},
|
||||
{'rhino', 10},
|
||||
{'elephant', 12},
|
||||
}
|
||||
|
||||
for _, desc in pairs(descs) do
|
||||
local name = desc[1]
|
||||
local uname = name:gsub("(%l)(%w*)", function(a,b) return string.upper(a)..b end)
|
||||
local bonus = desc[2]
|
||||
minetest.register_craftitem("fun_caves:elixir_strength_"..name, {
|
||||
description = 'Dr Robertson\'s Patented '..uname..' Strength Elixir',
|
||||
drawtype = "plantlike",
|
||||
paramtype = "light",
|
||||
tiles = {'fun_caves_elixir_strength_'..name..'.png'},
|
||||
inventory_image = 'fun_caves_elixir_strength_'..name..'.png',
|
||||
groups = {dig_immediate = 3, vessel = 1},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
if not (itemstack and user) then
|
||||
return
|
||||
end
|
||||
|
||||
increase_damage(user, bonus)
|
||||
itemstack:take_item()
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
|
||||
if desc[3] then
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'fun_caves:elixir_strength_'..name,
|
||||
recipe = {
|
||||
'mobs_slimes:green_slimeball',
|
||||
desc[3],
|
||||
"vessels:glass_bottle",
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'fun_caves:elixir_strength_'..name,
|
||||
recipe = {
|
||||
'fun_caves:syrup',
|
||||
desc[3],
|
||||
},
|
||||
})
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'fun_caves:elixir_strength_'..name,
|
||||
recipe = {
|
||||
'fun_caves:syrup',
|
||||
desc[3],
|
||||
},
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue