Iniziato storaggio stat giocatori
parent
56602080fd
commit
6fffc4447b
|
@ -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
|
||||
|
|
18
commands.lua
18
commands.lua
|
@ -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,{})
|
||||
|
|
|
@ -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
|
|
@ -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
|
10
init.lua
10
init.lua
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
|
51
utils.lua
51
utils.lua
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue