Melhorias
10
API.txt
|
@ -14,6 +14,16 @@ API para mod Xpro v1.0.0
|
|||
* Retorna o numero de pontos de xp do jogador
|
||||
* `xpro.get_player_lvl(name)`
|
||||
* Retorna o numero do nivel do jogador
|
||||
* `xpro.registrar_premio(name, Definições do Prêmio)`
|
||||
* Registra um premio para ser trocado por cash xp
|
||||
* `name` é o nome de exibição do item na lista de prêmios
|
||||
* Definições de Prêmio
|
||||
{
|
||||
item=<itemstring>, -- Item string do item a ser dado ao jogador
|
||||
qtd=<number of itens>, -- Quantidade de itens a ser dado ao jogador
|
||||
custo=<cost in xp cash>, -- Custo da troca em cash xp que o jogador vai ter que pagar
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
4
api.lua
|
@ -100,7 +100,7 @@ end
|
|||
|
||||
-- Adicionar XP
|
||||
xpro.add_xp = function(name, xp_add)
|
||||
|
||||
minetest.chat_send_all(name.." recebeu "..xp_add.."XP")
|
||||
-- Nome da tabela referente ao jogador no banco de dados
|
||||
local tb_name = "jogador_"..name
|
||||
|
||||
|
@ -135,7 +135,7 @@ end
|
|||
|
||||
-- Remover XP
|
||||
xpro.rem_xp = function(name, xp_rem)
|
||||
|
||||
minetest.chat_send_all(name.." perdeu "..xp_rem.."XP")
|
||||
-- Nome da tabela referente ao jogador no banco de dados
|
||||
local tb_name = "jogador_"..name
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
default
|
||||
intllib?
|
||||
sfinv?
|
||||
hudbars?
|
||||
|
|
|
@ -0,0 +1,244 @@
|
|||
--[[
|
||||
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/>.
|
||||
|
||||
Hud de XP e nivel
|
||||
]]
|
||||
|
||||
local S = xpro.S
|
||||
|
||||
-- Mod Hudbars
|
||||
if hb then
|
||||
|
||||
local get_progress = function(my_xp, my_lvl)
|
||||
local xp = xpro.niveis[my_lvl] - my_xp
|
||||
local xp_t = xpro.niveis[my_lvl] - xpro.niveis[my_lvl+1]
|
||||
local p = xp/xp_t
|
||||
local r = math.ceil(p*100)
|
||||
if r == 100 and (p*100) < 100 then r = 99 end
|
||||
return r
|
||||
end
|
||||
|
||||
-- Atualizar barra
|
||||
local update_hb = function(name)
|
||||
|
||||
local player = minetest.get_player_by_name(name)
|
||||
|
||||
local my_xp = xpro.get_player_xp(name)
|
||||
local my_lvl = xpro.get_player_lvl(name)
|
||||
|
||||
hb.change_hudbar(
|
||||
-- player
|
||||
player,
|
||||
-- identifier
|
||||
"xpro:xp",
|
||||
-- new_value
|
||||
get_progress(my_xp, my_lvl)
|
||||
-- new_max_value
|
||||
--nil,
|
||||
-- new_icon
|
||||
--"xpro_xp_icon.png",
|
||||
-- new_bgicon
|
||||
--"xpro_xp_bar_bgicon.png",
|
||||
-- new_bar
|
||||
--"xpro_xp_bar_icon.png",
|
||||
-- new_label
|
||||
--"Nivel "..my_lvl,
|
||||
-- new_text_color
|
||||
--"0xFFFFFF"
|
||||
)
|
||||
end
|
||||
|
||||
-- Inicializa HUD
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
|
||||
local name = player:get_player_name()
|
||||
local my_xp = xpro.get_player_xp(name)
|
||||
local my_lvl = xpro.get_player_lvl(name)
|
||||
|
||||
hb.init_hudbar(
|
||||
-- player
|
||||
player,
|
||||
-- identifier
|
||||
"xpro:xp",
|
||||
-- start_value
|
||||
get_progress(my_xp, my_lvl),
|
||||
-- start_max
|
||||
nil,
|
||||
-- start_hidden
|
||||
false
|
||||
)
|
||||
|
||||
end)
|
||||
|
||||
-- Registrar barra
|
||||
hb.register_hudbar(
|
||||
-- identifier
|
||||
"xpro:xp",
|
||||
-- text_color
|
||||
"0xFFFFFF",
|
||||
-- label
|
||||
"XP",
|
||||
-- textures
|
||||
{
|
||||
bar = "xpro_hudbars_bar_xp.png",
|
||||
icon = "xpro_hudbars_icon_xp.png",
|
||||
bgicon = "xpro_hudbars_bgicon_xp.png",
|
||||
},
|
||||
-- default_start_value
|
||||
0,
|
||||
-- default_start_max
|
||||
100,
|
||||
-- default_start_hidden
|
||||
false,
|
||||
-- format_string
|
||||
"%s: %d%%"
|
||||
)
|
||||
|
||||
-- Alterar barra ao adicionar XP
|
||||
xpro.register_on_add_xp(function(name)
|
||||
update_hb(name)
|
||||
end)
|
||||
-- Alterar barra ao remover XP
|
||||
xpro.register_on_rem_xp(function(name)
|
||||
update_hb(name)
|
||||
end)
|
||||
|
||||
end
|
||||
|
||||
-- Exibir pontos recebidos no hub
|
||||
-- Remover elemento do hud
|
||||
local remover_hud = function(player, id)
|
||||
if player == nil then return end
|
||||
player:hud_remove(id)
|
||||
end
|
||||
-- Adicionar elemento no hud
|
||||
local adicionar_hud = function(player, def, time)
|
||||
if player == nil then return end
|
||||
local id = player:hud_add(def)
|
||||
-- Remover apos `time` segundos
|
||||
minetest.after(time, remover_hud, player, id)
|
||||
end
|
||||
|
||||
-- Alterar barra ao adicionar XP
|
||||
xpro.register_on_add_xp(function(name, xp_added, lvl_changed)
|
||||
-- Elemento
|
||||
local def = {
|
||||
hud_elem_type = "text",
|
||||
position = {x=(math.random(1, 100)/100)*0.5+0.23,y=(math.random(1, 100)/100)*0.15+0.58},
|
||||
scale = {x=500,y=500},
|
||||
text = "+"..xp_added.."XP",
|
||||
number = 0x00FF00,
|
||||
alignment = {x=1,y=1},
|
||||
offset = {x=0, y=0},
|
||||
}
|
||||
adicionar_hud(minetest.get_player_by_name(name), def, 3)
|
||||
|
||||
-- Ao evoluir de nivel e liga
|
||||
if lvl_changed == true then
|
||||
local new_lvl = xpro.get_player_lvl(name)
|
||||
local liga = xpro.ligas[new_lvl]
|
||||
local def_bg_liga = {
|
||||
hud_elem_type = "image",
|
||||
position = {x=0.5,y=0.15},
|
||||
scale = {x=0.3,y=0.3},
|
||||
text = "(xpro_bg_alfa.png^[resize:500x500)^xpro_liga_bg.png",
|
||||
alignment = {x=0,y=0},
|
||||
offset = {x=0, y=0},
|
||||
}
|
||||
adicionar_hud(minetest.get_player_by_name(name), def_bg_liga, 8)
|
||||
local def_liga = {
|
||||
hud_elem_type = "image",
|
||||
position = {x=0.5,y=0.15},
|
||||
scale = {x=0.27,y=0.27},
|
||||
text = "("..liga.img..")^xpro_bg_alfa.png^[resize:500x500",
|
||||
alignment = {x=0,y=0},
|
||||
offset = {x=0, y=0},
|
||||
}
|
||||
adicionar_hud(minetest.get_player_by_name(name), def_liga, 8)
|
||||
local def_text_liga = {
|
||||
hud_elem_type = "text",
|
||||
position = {x=0.505,y=0.265},
|
||||
scale = {x=500,y=500},
|
||||
text = "Liga "..liga.name,
|
||||
number = 0x00FF00,
|
||||
alignment = {x=0,y=0},
|
||||
offset = {x=0, y=0},
|
||||
}
|
||||
adicionar_hud(minetest.get_player_by_name(name), def_text_liga, 8)
|
||||
local def_text_lvl = {
|
||||
hud_elem_type = "text",
|
||||
position = {x=0.505,y=0.29},
|
||||
scale = {x=500,y=500},
|
||||
text = "Nivel "..new_lvl,
|
||||
number = 0x00FF00,
|
||||
alignment = {x=0,y=0},
|
||||
offset = {x=0, y=0},
|
||||
}
|
||||
adicionar_hud(minetest.get_player_by_name(name), def_text_lvl, 8)
|
||||
end
|
||||
end)
|
||||
-- Alterar barra ao remover XP
|
||||
xpro.register_on_rem_xp(function(name, xp_removed, lvl_changed)
|
||||
-- Elemento
|
||||
local def = {
|
||||
hud_elem_type = "text",
|
||||
position = {x=(math.random(1, 100)/100)*0.5+0.23,y=(math.random(1, 100)/100)*0.15+0.58},
|
||||
scale = {x=500,y=500},
|
||||
text = "-"..xp_removed.."XP",
|
||||
number = 0xFF0000,
|
||||
alignment = {x=1,y=1},
|
||||
offset = {x=0, y=0},
|
||||
}
|
||||
adicionar_hud(minetest.get_player_by_name(name), def, 5)
|
||||
|
||||
-- Ao evoluir de nivel e liga
|
||||
if lvl_changed == true then
|
||||
local new_lvl = xpro.get_player_lvl(name)
|
||||
local liga = xpro.ligas[new_lvl]
|
||||
local def_bg_liga = {
|
||||
hud_elem_type = "image",
|
||||
position = {x=0.5,y=0.15},
|
||||
scale = {x=0.3,y=0.3},
|
||||
text = "(xpro_bg_alfa.png^[resize:500x500)^xpro_liga_bg.png",
|
||||
alignment = {x=0,y=0},
|
||||
offset = {x=0, y=0},
|
||||
}
|
||||
adicionar_hud(minetest.get_player_by_name(name), def_bg_liga, 8)
|
||||
local def_liga = {
|
||||
hud_elem_type = "image",
|
||||
position = {x=0.5,y=0.15},
|
||||
scale = {x=0.27,y=0.27},
|
||||
text = "("..liga.img..")^xpro_bg_alfa.png^[resize:500x500",
|
||||
alignment = {x=0,y=0},
|
||||
offset = {x=0, y=0},
|
||||
}
|
||||
adicionar_hud(minetest.get_player_by_name(name), def_liga, 8)
|
||||
local def_text_liga = {
|
||||
hud_elem_type = "text",
|
||||
position = {x=0.505,y=0.265},
|
||||
scale = {x=500,y=500},
|
||||
text = "Liga "..liga.name,
|
||||
number = 0xFF0000,
|
||||
alignment = {x=0,y=0},
|
||||
offset = {x=0, y=0},
|
||||
}
|
||||
adicionar_hud(minetest.get_player_by_name(name), def_text_liga, 8)
|
||||
local def_text_lvl = {
|
||||
hud_elem_type = "text",
|
||||
position = {x=0.505,y=0.29},
|
||||
scale = {x=500,y=500},
|
||||
text = "Nivel "..new_lvl,
|
||||
number = 0xFF0000,
|
||||
alignment = {x=0,y=0},
|
||||
offset = {x=0, y=0},
|
||||
}
|
||||
adicionar_hud(minetest.get_player_by_name(name), def_text_lvl, 8)
|
||||
end
|
||||
|
||||
end)
|
||||
|
5
init.lua
|
@ -27,7 +27,7 @@ notificar("Carregando scripts...")
|
|||
-- Criação do banco de dados
|
||||
xpro.bd = dofile(modpath.."/lib/memor.lua")
|
||||
|
||||
-- Plucar itens "PLUS"
|
||||
-- Lib tror
|
||||
xpro.tror = dofile(modpath.."/lib/tror.lua")
|
||||
|
||||
-- Variaveis personalizaveis
|
||||
|
@ -40,8 +40,11 @@ dofile(modpath.."/shop.lua")
|
|||
dofile(modpath.."/sfinv.lua")
|
||||
dofile(modpath.."/progresso.lua")
|
||||
dofile(modpath.."/ranking.lua")
|
||||
dofile(modpath.."/hud.lua")
|
||||
|
||||
-- Metodos para evoluir
|
||||
dofile(modpath.."/metodos/die.lua")
|
||||
dofile(modpath.."/metodos/craft.lua")
|
||||
dofile(modpath.."/metodos/dig_node.lua")
|
||||
dofile(modpath.."/metodos/place_node.lua")
|
||||
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
--[[
|
||||
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/>.
|
||||
|
||||
Eventos de ganho ou perca de XP ao craftar um node
|
||||
]]
|
||||
|
||||
-- Lista de itens que geram recompensa
|
||||
xpro.craft_xp_list = {
|
||||
--["default:torch"] = 1,
|
||||
}
|
||||
|
||||
-- Chamada global
|
||||
minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv)
|
||||
|
||||
-- Verifica se node gera XP
|
||||
local name = itemstack:get_name()
|
||||
if xpro.craft_xp_list[name] then
|
||||
if xpro.craft_xp_list[name] > 0 then
|
||||
xpro.add_xp(player:get_player_name(), xpro.craft_xp_list[name])
|
||||
else
|
||||
xpro.rem_xp(player:get_player_name(), math.abs(xpro.craft_xp_list[name]))
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
--[[
|
||||
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/>.
|
||||
|
||||
Regredir pontos de XP ao morrer
|
||||
]]
|
||||
|
||||
-- Chamada Global
|
||||
minetest.register_on_dieplayer(function(player)
|
||||
local name = player:get_player_name()
|
||||
local lvl = xpro.get_player_lvl(name)
|
||||
local xp_rem = 25*lvl
|
||||
xpro.rem_xp(name, xp_rem)
|
||||
end)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -6,14 +6,31 @@
|
|||
Public License junto com esse software,
|
||||
se não, veja em <http://www.gnu.org/licenses/>.
|
||||
|
||||
Evoluir ao cavar um node
|
||||
Eventos de ganho ou perca de XP ao cavar um node
|
||||
]]
|
||||
|
||||
-- Lista de itens que geram recompensa
|
||||
xpro.dig_node_xp_list = {
|
||||
["default:stone_with_coal"] = 1,
|
||||
["default:stone_with_tin"] = 1,
|
||||
["default:stone_with_copper"] = 2,
|
||||
["default:stone_with_iron"] = 3,
|
||||
["default:stone_with_gold"] = 5,
|
||||
["default:stone_with_mese"] = 5,
|
||||
["default:stone_with_diamond"] = 5,
|
||||
}
|
||||
|
||||
-- Chamada global
|
||||
minetest.register_on_dignode(function(pos, oldnode, digger)
|
||||
|
||||
xpro.add_xp(digger:get_player_name(), 200)
|
||||
|
||||
|
||||
-- Verifica se node gera XP
|
||||
if xpro.dig_node_xp_list[oldnode.name] then
|
||||
if xpro.dig_node_xp_list[oldnode.name] > 0 then
|
||||
xpro.add_xp(digger:get_player_name(), xpro.dig_node_xp_list[oldnode.name])
|
||||
else
|
||||
xpro.rem_xp(digger:get_player_name(), math.abs(xpro.dig_node_xp_list[oldnode.name]))
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
|
|
|
@ -6,13 +6,26 @@
|
|||
Public License junto com esse software,
|
||||
se não, veja em <http://www.gnu.org/licenses/>.
|
||||
|
||||
Evoluir ao colocar um node
|
||||
Eventos de ganho ou perca de XP ao colocar um node
|
||||
]]
|
||||
|
||||
-- Lista de itens que geram recompensa
|
||||
xpro.place_node_xp_list = {
|
||||
--["default:stone_with_coal"] = 1,
|
||||
--["default:stone_with_mese"] = -5,
|
||||
}
|
||||
|
||||
-- Chamada global
|
||||
minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack, pointed_thing)
|
||||
|
||||
xpro.rem_xp(placer:get_player_name(), 200)
|
||||
|
||||
|
||||
-- Verifica se node gera XP
|
||||
if xpro.place_node_xp_list[newnode.name] then
|
||||
if xpro.place_node_xp_list[newnode.name] > 0 then
|
||||
xpro.add_xp(placer:get_player_name(), xpro.place_node_xp_list[newnode.name])
|
||||
else
|
||||
xpro.rem_xp(placer:get_player_name(), math.abs(xpro.place_node_xp_list[newnode.name]))
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@ sfinv.register_page("xpro:info", {
|
|||
local my_lvl = xpro.get_player_lvl(name)
|
||||
local xp_gasto = player:get_attribute("xpro_xp_gasto")
|
||||
local xp_disp = my_xp-xp_gasto
|
||||
if xp_disp < 0 then xp_disp = 0 end
|
||||
|
||||
-- Calcula progresso da barra
|
||||
local progresso = 1
|
||||
|
@ -40,7 +41,7 @@ sfinv.register_page("xpro:info", {
|
|||
.."button[0,2.5;3,1;ranking;Ranking Global]"
|
||||
|
||||
-- Liga
|
||||
.."image[2.8,0.4;"..(1.3*5)..","..(1.3*3)..";xpro_liga_bg.png]"
|
||||
.."image[3.8,0.34;4,4;xpro_liga_bg.png]"
|
||||
.."label[3,0;Liga "..xpro.ligas[my_lvl].name.."]"
|
||||
.."image[4.17,0.7;3.2,3.2;"..xpro.ligas[my_lvl].img.."]"
|
||||
|
||||
|
|
41
shop.lua
|
@ -30,15 +30,13 @@ end)
|
|||
|
||||
|
||||
-- Itens a venda
|
||||
xpro.premios = {
|
||||
{name="Terra", item="default:dirt", qtd=20, custo=5000},
|
||||
{name="Pedregulho", item="default:cobble", qtd=25, custo=50},
|
||||
}
|
||||
xpro.premios = {}
|
||||
|
||||
|
||||
-- Lista de itens do menu do shop em formato de string
|
||||
local string_menu_shop = ""
|
||||
local atualizar_string_menu_shop = function()
|
||||
string_menu_shop = "" -- zera string
|
||||
for _,d in pairs(xpro.premios) do
|
||||
if string_menu_shop ~= "" then string_menu_shop = string_menu_shop .. "," end
|
||||
string_menu_shop = string_menu_shop .. d.name
|
||||
|
@ -54,7 +52,7 @@ xpro.acessar_shop = function(name, aviso)
|
|||
local xp_gasto = player:get_attribute("xpro_xp_gasto")
|
||||
local my_xp = xpro.get_player_xp(name)
|
||||
local xp_disp = my_xp-xp_gasto
|
||||
|
||||
if xp_disp < 0 then xp_disp = 0 end
|
||||
|
||||
local formspec = "size[8,5]"
|
||||
..default.gui_bg
|
||||
|
@ -64,7 +62,7 @@ xpro.acessar_shop = function(name, aviso)
|
|||
.."textlist[3.2,0;4.5,5;menu;"..string_menu_shop.."]"
|
||||
|
||||
if aviso then
|
||||
formspec = formspec .. "textarea[0.36,1.1;3.2,1;;"..aviso..";]"
|
||||
formspec = formspec .. "textarea[0.26,1;3.2,1.2;;"..aviso..";]"
|
||||
end
|
||||
|
||||
-- Nenhum item escolhido
|
||||
|
@ -91,7 +89,6 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
local name = player:get_player_name()
|
||||
local n = string.split(fields.menu, ":")
|
||||
acessos[name].escolha = tonumber(n[2]) or 1
|
||||
|
||||
xpro.acessar_shop(name)
|
||||
|
||||
-- Comprar
|
||||
|
@ -102,6 +99,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
local my_xp = xpro.get_player_xp(name)
|
||||
local xp_gasto = player:get_attribute("xpro_xp_gasto")
|
||||
local xp_disp = my_xp-xp_gasto
|
||||
if xp_disp < 0 then xp_disp = 0 end
|
||||
|
||||
-- Tenta trocar
|
||||
if xp_disp < escolha.custo then
|
||||
|
@ -111,7 +109,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
xpro.acessar_shop(name, "Inventario lotado")
|
||||
else
|
||||
player:set_attribute("xpro_xp_gasto", (xp_gasto+escolha.custo))
|
||||
xpro.acessar_shop(name, "Adiquirido")
|
||||
xpro.acessar_shop(name, minetest.colorize("#0C0", "Adiquirido"))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -119,3 +117,30 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
end)
|
||||
|
||||
|
||||
-- Registrar premios
|
||||
xpro.registrar_premio = function(name, def)
|
||||
table.insert(xpro.premios,
|
||||
{
|
||||
name=name,
|
||||
item=def.item,
|
||||
qtd=def.qtd,
|
||||
custo=def.custo,
|
||||
}
|
||||
)
|
||||
-- Atualiza lista de exibição
|
||||
atualizar_string_menu_shop()
|
||||
end
|
||||
|
||||
|
||||
-- Premios basicos
|
||||
for _,dados in ipairs({
|
||||
{name="Pedras", item="default:dirt", qtd=50, custo=100},
|
||||
{name="Pedregulho", item="default:cobble", qtd=25, custo=50},
|
||||
}) do
|
||||
xpro.registrar_premio(dados.name, {
|
||||
item=dados.item,
|
||||
qtd=dados.qtd,
|
||||
custo=dados.custo,
|
||||
})
|
||||
end
|
||||
|
||||
|
|
After Width: | Height: | Size: 91 B |
After Width: | Height: | Size: 101 B |
After Width: | Height: | Size: 181 B |
After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 8.0 KiB |
After Width: | Height: | Size: 1.9 KiB |