Iniziato storaggio stat giocatori

master
Marco 2020-05-01 00:23:55 +02:00
parent 56602080fd
commit 6fffc4447b
7 changed files with 148 additions and 7 deletions

View File

@ -113,6 +113,7 @@ arena_lib.on_death("quake", function(arena, p_name, reason)
arena.players[p_name].kills = arena.players[p_name].kills - 1
quake.update_HUD(arena, p_name, "KLS_data", arena.players[p_name].kills)
quake.update_stats(arena)
quake.subtract_exp(p_name, 10)
-- ricalcolo kill leader se ero kill leader
if arena.kill_leader == p_name then

View File

@ -8,10 +8,6 @@ local mod = "quake"
ChatCmdBuilder.new("quakeadmin", function(cmd)
cmd:sub("prop :arena :prop", function(name, arena_name, prop)
arena_lib.funzione(mod, arena_name, prop)
end)
-- creazione arene
cmd:sub("create :arena", function(name, arena_name)
arena_lib.create_arena(name, mod, arena_name)
@ -69,3 +65,17 @@ end, {
description = "descrizione",
privs = { quake_admin = true }
})
ChatCmdBuilder.new("quake", function(cmd)
cmd:sub("stats", function(name)
quake.show_stats(name)
end)
cmd:sub("stats :playername", function(name, p_name)
quake.show_stats(name, p_name)
end)
end,{})

42
database_manager.lua Normal file
View File

@ -0,0 +1,42 @@
quake.players = {} -- KEY: p_name, INDEX: {lv (int), xp (int), kills (int), time_playing (int), achievements (table)}
local storage = minetest.get_mod_storage()
local players_list = minetest.deserialize(storage:get_string("players"))
function quake.init_storage()
-- se è il primo avvio, players_list sarà vuota
if players_list == nil then
players_list = {}
return
end
-- salvo in quake.players tutti i giocatori nello storage
for _, pl_name in pairs(players_list) do
quake.players[pl_name] = minetest.deserialize(storage:get_string("PLAYER." .. pl_name))
end
end
function quake.add_player_to_storage(p_name)
table.insert(players_list, p_name)
storage:set_string("players", minetest.serialize(players_list))
end
function quake.update_storage(p_name)
storage:set_string("PLAYER." .. p_name, quake.players[p_name])
end
function quake.is_player_in_storage(p_name)
if storage:get_string("PLAYER." .. p_name) == "" then return false
else return true
end
end

10
exp_manager.lua Normal file
View File

@ -0,0 +1,10 @@
function quake.add_xp(p_name, xp)
quake.players[p_name].XP = quake.players[p_name].XP + xp
end
function quake.subtract_exp(p_name, xp)
quake.players[p_name].XP = quake.players[p_name].XP - xp
if quake.players[p_name].XP < 0 then
quake.players[p_name].XP = 0
end
end

View File

@ -17,12 +17,18 @@ dofile(minetest.get_modpath("quake") .. "/arena_manager.lua")
dofile(minetest.get_modpath("quake") .. "/arena_properties.lua")
dofile(minetest.get_modpath("quake") .. "/chatcmdbuilder.lua")
dofile(minetest.get_modpath("quake") .. "/commands.lua")
dofile(minetest.get_modpath("quake") .. "/hud.lua")
dofile(minetest.get_modpath("quake") .. "/hud_scoreboard.lua")
dofile(minetest.get_modpath("quake") .. "/database_manager.lua")
dofile(minetest.get_modpath("quake") .. "/exp_manager.lua")
dofile(minetest.get_modpath("quake") .. "/input_manager.lua")
dofile(minetest.get_modpath("quake") .. "/items.lua")
dofile(minetest.get_modpath("quake") .. "/player_manager.lua")
dofile(minetest.get_modpath("quake") .. "/privs.lua")
dofile(minetest.get_modpath("quake") .. "/utils.lua")
dofile(minetest.get_modpath("quake") .. "/_HUD/hud.lua")
dofile(minetest.get_modpath("quake") .. "/_HUD/scoreboard.lua")
dofile(minetest.get_modpath("quake") .. "/_weapons/bullet.lua")
dofile(minetest.get_modpath("quake") .. "/_weapons/weapons.lua")
dofile(minetest.get_modpath("quake") .. "/_weapons/railgun.lua")
dofile(minetest.get_modpath("quake") .. "/_weapons/shotgun.lua")
quake.init_storage()

View File

@ -1,7 +1,28 @@
minetest.register_on_newplayer(function(ObjectRef)
local p_name = ObjectRef:get_player_name()
quake.players[p_name] = {LV = 0, XP = 0, KILLS = 0, TIME_PLAYING = 0, ACHVMTS = {}}
quake.add_player_to_storage(p_name)
quake.update_storage(p_name)
end)
minetest.register_on_joinplayer(function(player)
-- lo aggiungo allo storage se era un giocatore che si era già connesso in precedenza,
-- quando la mod ancora non esisteva
if not quake.is_player_in_storage(player:get_player_name()) then
local p_name = player:get_player_name()
quake.players[p_name] = {LV = 0, XP = 0, KILLS = 0, TIME_PLAYING = 0, ACHVMTS = {}}
quake.add_player_to_storage(p_name)
quake.update_storage(p_name)
end
player:get_meta():set_int("quake_weap_delay", 0)
player: set_physics_override({
@ -13,7 +34,7 @@ minetest.register_on_joinplayer(function(player)
local inv = player:get_inventory()
--[[ non è possibile modificare l'inventario da offline. Se sono crashati o hanno chiuso il gioco in partita,
questo è l'unico modo per togliergli l'arma]]
questo è l'unico modo per togliergli l'arma ]]
if inv:contains_item("main", ItemStack("quake:railgun")) then
inv:remove_item("main", ItemStack("quake:railgun"))
end

View File

@ -1,3 +1,7 @@
local function get_stats_formspec() return end
function quake.calc_kill_leader(arena, killer)
if arena.kill_leader == "" then
@ -9,3 +13,50 @@ function quake.calc_kill_leader(arena, killer)
end
end
function quake.show_stats(sender, player)
local player_stats = {}
local p_name = ""
if not player then
player_stats = quake.players[sender]
p_name = sender
else
player_stats = quake.players[player]
p_name = player
-- se il giocatore non esiste, annullo
if player_stats == nil then
minetest.chat_send_player(sender, "[Quake] Questo giocatore non esiste!")
return end
end
minetest.show_formspec(sender, "quake:stats", get_stats_formspec(player_stats, p_name))
end
function get_stats_formspec(p_stats, p_name)
local stats = "<style size=22><center>".. "Statistiche" .. "</center></style>"
local text = "Nick: " .. p_name .. "\n" ..
"Livello: " .. p_stats.LV .. "\n" ..
"Esperienza: " .. p_stats.XP .. "\n" ..
"Tempo in game: " .. p_stats.TIME_PLAYING .. "h\n" ..
"Achievements: " .. "---"
local formspec = {
"size[6,3.5]",
"real_coordinates[true]",
"hypertext[0,0.1;6,0.5;player_name;", stats, "]",
"label[0.375,0.8;", minetest.formspec_escape(text), "]"
}
return table.concat(formspec, "")
end