Give experience for digging ores. Add a level up message.

master
Stefan Vukanović 2017-08-28 09:20:30 +02:00
parent 79df0f9654
commit 48f119d614
2 changed files with 24 additions and 4 deletions

View File

@ -3,6 +3,7 @@ levels_api.player_hud_ids = {}
local ADDED_XP_PER_LEVEL = 100
function levels_api.get_player_attribute(name, attr, defval)
minetest.debug(name)
local player = minetest.get_player_by_name(name)
if not player then
return false
@ -19,7 +20,7 @@ function levels_api.set_player_attribute(name, attr, value)
end
function levels_api.increment_attribute(name, attr)
local current_attr = levels_api.get_player_attribute(name, attr, 0)
local current_attr = levels_api.get_player_attribute(name, attr, 0) or 0
levels_api.set_player_attribute(name, attr, current_attr + 1)
return true
end
@ -54,10 +55,11 @@ function levels_api.update_level(name)
local current_xp = levels_api.get_player_attribute(name, "levels:xp", 0)
local needed_xp = ADDED_XP_PER_LEVEL * current_level
while current_xp >= needed_xp do
minetest.chat_send_player(name, "You have leveled up!")
minetest.chat_send_player(name, "You have received 1 more attribute point.")
current_level = current_level + 1
current_xp = current_xp - needed_xp
levels_api.increment_attribute(name, "levels:points")
needed_xp = ADDED_XP_PER_LEVEL * current_level
end
levels_api.set_player_attribute(name, "levels:level", current_level)

View File

@ -3,6 +3,16 @@ dofile(path .. "/api.lua")
local levels = {}
local ores = {
{"default:stone_with_coal", 5},
{"default:stone_with_iron", 10},
{"default:stone_with_copper", 10},
{"default:stone_with_tin", 15},
{"default:stone_with_gold", 25},
{"default:stone_with_mese", 30},
{"default:stone_with_diamond", 30}
}
local SPEED_MULTIPLER = 0.05
local JUMP_MULTIPLER = 0.01
@ -64,7 +74,7 @@ minetest.register_on_joinplayer(function(player)
levels_api.update_hud(player:get_player_name())
end)
minetest.register_on_newplayer(function(player)
levels_api.increment_attribute("levels:points")
levels_api.increment_attribute(player:get_player_name(), "levels:points")
end)
minetest.register_chatcommand("levels", {
description = "Open levels UI",
@ -84,7 +94,6 @@ minetest.register_chatcommand("givexp", {
minetest.register_chatcommand("getxp", {
description = "How much XP have we got here?",
func = function(name, text)
levels_api.update_level(name)
return true, levels_api.get_player_attribute(name, "levels:xp", 0)
end,
})
@ -108,3 +117,12 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
end
end
end)
minetest.register_on_dignode(function(pos, oldnode, player)
local name = oldnode.name
for key,value in pairs(ores) do
if value[1] == name then
levels_api.set_player_attribute(player:get_player_name(), "levels:xp", levels_api.get_player_attribute("singleplayer","levels:xp", 0) + value[2])
levels_api.update_level(player:get_player_name())
end
end
end)