Melhorias

master
BrunoMine 2018-07-16 18:48:56 -03:00
parent a0febf9684
commit 9f96b87b42
17 changed files with 403 additions and 20 deletions

10
API.txt
View File

@ -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
}

View File

@ -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

View File

@ -1,3 +1,4 @@
default
intllib?
sfinv?
hudbars?

244
hud.lua Normal file
View File

@ -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)

View File

@ -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")

40
metodos/craft.lua Normal file
View File

@ -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)

29
metodos/die.lua Normal file
View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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.."]"

View File

@ -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

BIN
textures/xpro_bg_alfa.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

BIN
textures/xpro_xp_icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB