Repixture/mods/rp_default/achievements.lua

241 lines
5.7 KiB
Lua

if not minetest.get_modpath("rp_achievements") then
return
end
local mg_name = minetest.get_mapgen_setting("mg_name")
local S = minetest.get_translator("rp_default")
-- Digging wood
achievements.register_achievement(
-- REFERENCE ACHIEVEMENT 1
"timber",
{
title = S("Timber"),
description = S("Dig a tree trunk."),
times = 1,
dignode = "group:tree",
item_icon = "rp_default:tree",
difficulty = 1,
})
-- Tools
achievements.register_achievement(
-- REFERENCE ACHIEVEMENT 2
"first_pickaxe",
{
title = S("My First Pickaxe"),
description = S("Craft a pickaxe."),
times = 1,
craftitem = "group:pickaxe",
item_icon = "rp_default:pick_wood",
difficulty = 2,
})
achievements.register_achievement(
"hardened_miner",
{
title = S("Hardened Miner"),
description = S("Craft a carbon steel pickaxe."),
times = 1,
craftitem = "rp_default:pick_carbon_steel",
difficulty = 5.9,
})
achievements.register_achievement(
"off_to_battle",
{
title = S("Off to Battle"),
description = S("Craft a weapon."),
times = 1,
craftitem = "group:weapon",
item_icon = "rp_default:spear_wrought_iron",
difficulty = 2.1,
})
-- Stone
achievements.register_achievement(
-- REFERENCE ACHIEVEMENT 3
"mineority",
{
title = S("Mineority"),
description = S("Mine a stone."),
times = 1,
dignode = "rp_default:stone",
difficulty = 3,
})
achievements.register_achievement(
"smelting_room",
{
title = S("Smelting Room"),
description = S("Craft a furnace."),
times = 1,
craftitem = "rp_default:furnace",
difficulty = 3.1,
})
achievements.register_achievement(
-- REFERENCE ACHIEVEMENT 4
"metal_age",
{
title = S("Metal Age"),
description = S("Put a mineral and some fuel in a furnace to smelt an ingot."),
times = 1,
item_icon = "rp_default:ingot_wrought_iron",
difficulty = 4,
})
-- Farming
achievements.register_achievement(
"fertile",
{
title = S("Fertile"),
description = S("Use fertilizer to fertilize the ground."),
times = 1,
item_icon = "rp_default:fertilizer",
difficulty = 4.2,
})
achievements.register_achievement(
"mega_papyrus",
{
title = S("Overgrowth"),
description = S("Grow a papyrus to its maximum height, then harvest it."),
times = 1,
icon = "rp_default_achievement_mega_papyrus.png",
difficulty = 4.3,
})
-- Literature
achievements.register_achievement(
"librarian",
{
title = S("Librarian"),
description = S("Craft a bookshelf."),
times = 1,
craftitem = "rp_default:bookshelf",
difficulty = 4.2,
})
-- Plant all saplings
do
local saplings = {}
local saplings_readable = {}
for k,v in pairs(minetest.registered_nodes) do
if minetest.get_item_group(k, "sapling") > 0 then
table.insert(saplings, k)
table.insert(saplings_readable, v.description)
end
end
achievements.register_achievement("forester",
{
title = S("Forester"),
description = S("Plant one of every sapling."),
times = 0,
icon = "rp_default_achievement_forester.png",
subconditions = saplings,
subconditions_readable = saplings_readable,
difficulty = 5.6,
})
end
if mg_name ~= "v6" then
-- Visit all biomes
local main_biomes = default.get_main_biomes()
local biomes = {}
local biomes_readable = {}
for b=1, #main_biomes do
local biomename = main_biomes[b]
local binfo = default.get_biome_info(biomename)
if binfo and binfo.class ~= "undergroundy" then
local biome = minetest.registered_biomes[biomename]
if biome then
table.insert(biomes, biomename)
table.insert(biomes_readable, biome._description)
end
end
end
achievements.register_achievement(
-- REFERENCE ACHIEVEMENT 10
"find_all_biomes",
{
title = S("Explorer"),
description = S("Visit all surface biomes."),
subconditions = biomes,
subconditions_readable = biomes_readable,
times = 0,
item_icon = "rp_armor:boots_steel",
difficulty = 10,
})
local timer = 0
local BIOME_CHECK_TIME = 1
minetest.register_globalstep(function(dtime)
timer = timer + dtime
if timer < BIOME_CHECK_TIME then
return
end
timer = 0
local players = minetest.get_connected_players()
for p=1, #players do
local player = players[p]
local biomedata = minetest.get_biome_data(player:get_pos())
if biomedata then
local biome = minetest.get_biome_name(biomedata.biome)
local biomeinfo = default.get_biome_info(biome)
if biomeinfo then
local main_biome = biomeinfo.main_biome
achievements.trigger_subcondition(player, "find_all_biomes", main_biome)
end
end
end
end)
end
minetest.register_on_mods_loaded(function()
if not minetest.get_modpath("rp_checkitem") then
return
end
local minerals = {}
local minerals_readable = {}
for k,v in pairs(minetest.registered_items) do
if minetest.get_item_group(k, "mineral_natural") == 1 then
table.insert(minerals, k)
table.insert(minerals_readable, ItemStack(k):get_short_description())
end
end
-- Achievement for collecting all minerals that generate naturally in the world
-- (e.g. coal lump, iron lump, etc.).
achievements.register_achievement(
"find_all_minerals",
{
title = S("A Complete Collection"),
description = S("Obtain one of each minerals."),
subconditions = minerals,
subconditions_readable = minerals_readable,
times = 0,
icon = "rp_default_achievement_find_all_minerals.png",
difficulty = 6.5,
})
for m=1, #minerals do
rp_checkitem.register_on_got_item(minerals[m], function(player)
achievements.trigger_subcondition(player, "find_all_minerals", minerals[m])
end)
end
end)