176 lines
3.4 KiB
Lua
176 lines
3.4 KiB
Lua
--[[
|
|
Mod Xpro para Minetest
|
|
Copyright (C) 2018 BrunoMine (https://github.com/BrunoMine)
|
|
|
|
Recebeste uma cópia da GNU Lesser General
|
|
Public License junto com esse software,
|
|
se não, veja em <http://www.gnu.org/licenses/>.
|
|
|
|
API
|
|
]]
|
|
|
|
-- Niveis de acoordo com XP
|
|
xpro.niveis = {
|
|
0, -- Nivel 1
|
|
150, -- Nivel 2
|
|
300, -- Nivel 3
|
|
600, -- Nivel 4
|
|
900, -- Nivel 5
|
|
1200, -- Nivel 6
|
|
1500, -- Nivel 7
|
|
2000, -- Nivel 8
|
|
2500, -- Nivel 9
|
|
3000, -- Nivel 10
|
|
3500, -- Nivel 11
|
|
4000, -- Nivel 12
|
|
4600, -- Nivel 13
|
|
5200, -- Nivel 14
|
|
6000, -- Nivel 15
|
|
6900, -- Nivel 16
|
|
8000, -- Nivel 17
|
|
9200, -- Nivel 18
|
|
10500, -- Nivel 19
|
|
11900, -- Nivel 20
|
|
13400, -- Nivel 21
|
|
15000, -- Nivel 22
|
|
16700, -- Nivel 23
|
|
18500, -- Nivel 24
|
|
20400, -- Nivel 25
|
|
22400, -- Nivel 26
|
|
24500, -- Nivel 27
|
|
26700, -- Nivel 28
|
|
29000, -- Nivel 29
|
|
31400, -- Nivel 30
|
|
33900, -- Nivel 31
|
|
36500, -- Nivel 32
|
|
39200, -- Nivel 33
|
|
42000, -- Nivel 34
|
|
44900, -- Nivel 35
|
|
47900, -- Nivel 36
|
|
51000, -- Nivel 37
|
|
54200, -- Nivel 38
|
|
57500, -- Nivel 39
|
|
}
|
|
local tb_niveis = xpro.niveis
|
|
|
|
-- Pegar nivel de acordo com XP
|
|
local get_lvl = function(my_xp)
|
|
local my_lvl = 1
|
|
for lvl,xp in ipairs(tb_niveis) do
|
|
if xp > my_xp then
|
|
return my_lvl -- Retorna o nivel anterior
|
|
end
|
|
-- Tem o xp necessario para esse nivel
|
|
my_lvl = lvl
|
|
end
|
|
return my_lvl
|
|
end
|
|
|
|
-- Pegar xp de um jogador (informar)
|
|
xpro.get_player_xp = function(name)
|
|
return xpro.bd.pegar("player:"..name, "xp")
|
|
end
|
|
|
|
-- Pegar nivel de um jogador (informar)
|
|
xpro.get_player_lvl = function(name)
|
|
return xpro.bd.pegar("player:"..name, "lvl")
|
|
end
|
|
|
|
|
|
-- Registro basico
|
|
minetest.register_on_joinplayer(function(player)
|
|
|
|
-- Verifica se jogador ja possui registro no BD
|
|
if xpro.bd.verif("player:"..player:get_player_name(), "xp") ~= true then
|
|
|
|
-- Criar registro
|
|
local tb_name = "player:"..player:get_player_name()
|
|
|
|
-- XP
|
|
xpro.bd.salvar(tb_name, "xp", 0)
|
|
|
|
-- Nivel
|
|
xpro.bd.salvar(tb_name, "lvl", 1)
|
|
|
|
end
|
|
|
|
end)
|
|
|
|
|
|
-- Callback ao adicionar XP
|
|
local callbacks_add_xp = {}
|
|
xpro.register_on_add_xp = function(func)
|
|
table.insert(callbacks_add_xp, func)
|
|
end
|
|
|
|
-- Adicionar XP
|
|
xpro.add_xp = function(name, xp_add)
|
|
|
|
-- Nome da tabela referente ao jogador no banco de dados
|
|
local tb_name = "player:"..name
|
|
|
|
local xp_atual = xpro.get_player_xp(name)
|
|
|
|
-- Evita salvar xp negativo
|
|
local new_xp = xp_atual+xp_add
|
|
if new_xp < 0 then
|
|
xpro.bd.salvar(tb_name, "xp", 0)
|
|
else
|
|
xpro.bd.salvar(tb_name, "xp", new_xp)
|
|
end
|
|
|
|
-- Atualiza nivel
|
|
local old_lvl = xpro.get_player_lvl(name)
|
|
local new_level = get_lvl(new_xp)
|
|
xpro.bd.salvar(tb_name, "lvl", new_level)
|
|
|
|
-- Executa callback registradas
|
|
for _,func in ipairs(callbacks_add_xp) do
|
|
func(name, xp_add, old_lvl ~= new_level)
|
|
end
|
|
|
|
end
|
|
|
|
|
|
-- Callback ao remover XP
|
|
local callbacks_rem_xp = {}
|
|
xpro.register_on_rem_xp = function(func)
|
|
table.insert(callbacks_rem_xp, func)
|
|
end
|
|
|
|
-- Remover XP
|
|
xpro.rem_xp = function(name, xp_rem)
|
|
|
|
-- Nome da tabela referente ao jogador no banco de dados
|
|
local tb_name = "player:"..name
|
|
|
|
local xp_atual = xpro.get_player_xp(name)
|
|
|
|
-- Evita salvar xp negativo
|
|
local new_xp = xp_atual-xp_rem
|
|
if new_xp < 0 then
|
|
xpro.bd.salvar(tb_name, "xp", 0)
|
|
else
|
|
xpro.bd.salvar(tb_name, "xp", new_xp)
|
|
end
|
|
|
|
-- Atualiza nivel
|
|
local old_lvl = xpro.get_player_lvl(name)
|
|
local new_level = get_lvl(new_xp)
|
|
xpro.bd.salvar(tb_name, "lvl", new_level)
|
|
|
|
-- Executa callback registradas
|
|
for _,func in ipairs(callbacks_rem_xp) do
|
|
func(name, xp_rem, old_lvl ~= new_level)
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|