debug_utilities.lua 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. ---
  2. --- Link these functions to your mod through some commands, ie. /yourmod info arena_name
  3. ---
  4. local S = minetest.get_translator("arena_lib")
  5. local function value_to_string() end
  6. function arena_lib.print_arenas(sender, mod)
  7. local n = 0
  8. for id, arena in pairs(arena_lib.mods[mod].arenas) do
  9. n = n+1
  10. minetest.chat_send_player(sender, "ID: " .. id .. ", " .. S("name: ") .. arena.name )
  11. end
  12. minetest.chat_send_player(sender, S("Total arenas: ") .. n )
  13. end
  14. function arena_lib.print_arena_info(sender, mod, arena_name)
  15. local arena_ID, arena = arena_lib.get_arena_by_name(mod, arena_name)
  16. if not arena then
  17. minetest.chat_send_player(sender, minetest.colorize("#e6482e", S("[!] This arena doesn't exist!")))
  18. return end
  19. local mod_ref = arena_lib.mods[mod]
  20. local arena_min_players = arena.min_players * #arena.teams
  21. local arena_max_players = arena.max_players * #arena.teams
  22. local teams = ""
  23. local min_players_per_team = ""
  24. local max_players_per_team = ""
  25. local players_inside_per_team = ""
  26. local spectators_inside_per_team = ""
  27. -- concateno eventuali team
  28. if arena.teams_enabled then
  29. min_players_per_team = minetest.colorize("#eea160", S("Players required per team: ")) .. minetest.colorize("#cfc6b8", arena.min_players) .. "\n"
  30. max_players_per_team = minetest.colorize("#eea160", S("Players supported per team: ")) .. minetest.colorize("#cfc6b8", arena.max_players) .. "\n"
  31. for i = 1, #arena.teams do
  32. teams = teams .. "'" .. arena.teams[i].name .. "' "
  33. players_inside_per_team = players_inside_per_team .. "'" .. arena.teams[i].name .. "' : " .. arena.players_amount_per_team[i] .. " "
  34. if mod_ref.spectate_mode then
  35. spectators_inside_per_team = spectators_inside_per_team .. "'" .. arena.teams[i].name .. "' : " .. arena.spectators_amount_per_team[i] .. " "
  36. end
  37. end
  38. players_inside_per_team = minetest.colorize("#eea160", S("Players inside per team: ")) .. minetest.colorize("#cfc6b8", players_inside_per_team) .. "\n"
  39. if mod_ref.spectate_mode then
  40. spectators_inside_per_team = minetest.colorize("#eea160", S("Spectators inside per team: ")) .. minetest.colorize("#cfc6b8", spectators_inside_per_team) .. "\n"
  41. end
  42. else
  43. teams = "---"
  44. end
  45. -- concateno eventuali danni disabilitati
  46. local disabled_damage_types = ""
  47. if next(mod_ref.disabled_damage_types) then
  48. for _, dmg_type in pairs(mod_ref.disabled_damage_types) do
  49. disabled_damage_types = disabled_damage_types .. " " .. dmg_type
  50. end
  51. else
  52. disabled_damage_types = "---"
  53. end
  54. -- concateno nomi giocatori
  55. local p_names = ""
  56. for pl, stats in pairs(arena.players) do
  57. p_names = p_names .. " " .. pl
  58. end
  59. -- concateno nomi spettatori
  60. local sp_names = ""
  61. for sp_name, stats in pairs(arena.spectators) do
  62. sp_names = sp_names .. " " .. sp_name
  63. end
  64. -- concateno giocatori e spettatori (per verificare che campo sia giusto)
  65. local psp_names = ""
  66. local psp_amount = 0
  67. for psp_name, _ in pairs(arena.players_and_spectators) do
  68. psp_names = psp_names .. " " .. psp_name
  69. psp_amount = psp_amount + 1
  70. end
  71. -- concateno giocatori presenti e passati
  72. local ppp_names = ""
  73. local ppp_names_amount = 0
  74. for ppp_name, _ in pairs(arena.past_present_players) do
  75. ppp_names = ppp_names .. " " .. ppp_name
  76. ppp_names_amount = ppp_names_amount + 1
  77. end
  78. -- concateno giocatori presenti e passati
  79. local ppp_names_inside = ""
  80. local ppp_names_inside_amount = 0
  81. for ppp_name_inside, _ in pairs(arena.past_present_players_inside) do
  82. ppp_names_inside = ppp_names_inside .. " " .. ppp_name_inside
  83. ppp_names_inside_amount = ppp_names_inside_amount + 1
  84. end
  85. -- calcolo stato arena
  86. local status
  87. if arena.in_queue then
  88. status = S("in queue")
  89. elseif arena.in_loading then
  90. status = S("loading")
  91. elseif arena.in_game then
  92. status = S("in game")
  93. elseif arena.in_celebration then
  94. status = S("celebrating")
  95. else
  96. status = S("waiting")
  97. end
  98. -- calcolo cartello
  99. local sign_pos
  100. if next(arena.sign) then
  101. sign_pos = minetest.pos_to_string(arena.sign)
  102. else
  103. sign_pos = "---"
  104. end
  105. -- calcolo coordinate spawn point
  106. local spawners_pos = ""
  107. if arena.teams_enabled then
  108. for i = 1, #arena.teams do
  109. spawners_pos = spawners_pos .. arena.teams[i].name .. ": "
  110. for j = 1 + (arena.max_players * (i-1)), arena.max_players * i do
  111. if arena.spawn_points[j] then
  112. spawners_pos = spawners_pos .. " " .. minetest.pos_to_string(arena.spawn_points[j].pos) .. " "
  113. end
  114. end
  115. spawners_pos = spawners_pos .. "; "
  116. end
  117. else
  118. for spawn_id, spawn_params in pairs(arena.spawn_points) do
  119. spawners_pos = spawners_pos .. " " .. minetest.pos_to_string(spawn_params.pos) .. " "
  120. end
  121. end
  122. -- calcolo eventuale tempo
  123. local time = ""
  124. if mod_ref.time_mode ~= "none" then
  125. local current_time = not arena.current_time and "---" or arena.current_time
  126. time = minetest.colorize("#eea160", S("Initial time: ")) .. minetest.colorize("#cfc6b8", arena.initial_time .. " (" .. S("current: ") .. current_time .. ")") .. "\n"
  127. end
  128. --calcolo proprietà
  129. local properties = ""
  130. for property, _ in pairs(mod_ref.properties) do
  131. local value = value_to_string(arena[property])
  132. properties = properties .. property .. " = " .. value .. "; "
  133. end
  134. --calcolo proprietà temporanee
  135. local temp_properties = ""
  136. if arena.in_game == true then
  137. for temp_property, _ in pairs(mod_ref.temp_properties) do
  138. local value = value_to_string(arena[temp_property])
  139. temp_properties = temp_properties .. temp_property .. " = " .. value .. "; "
  140. end
  141. else
  142. for temp_property, _ in pairs(mod_ref.temp_properties) do
  143. temp_properties = temp_properties .. temp_property .. "; "
  144. end
  145. end
  146. local team_properties = ""
  147. if not arena.teams_enabled then
  148. team_properties = "---"
  149. else
  150. if arena.in_game == true then
  151. for i = 1, #arena.teams do
  152. team_properties = team_properties .. arena.teams[i].name .. ": "
  153. for team_property, _ in pairs(mod_ref.team_properties) do
  154. local value = value_to_string(arena.teams[i][team_property])
  155. team_properties = team_properties .. " " .. team_property .. " = " .. value .. ";"
  156. end
  157. team_properties = team_properties .. "|"
  158. end
  159. else
  160. for team_property, _ in pairs(mod_ref.team_properties) do
  161. team_properties = team_properties .. team_property .. "; "
  162. end
  163. end
  164. end
  165. minetest.chat_send_player(sender,
  166. minetest.colorize("#cfc6b8", "====================================") .. "\n" ..
  167. minetest.colorize("#eea160", S("Name: ")) .. minetest.colorize("#cfc6b8", arena_name ) .. "\n" ..
  168. minetest.colorize("#eea160", S("Author: ")) .. minetest.colorize("#cfc6b8", arena.author ) .. "\n" ..
  169. minetest.colorize("#eea160", "ID: ") .. minetest.colorize("#cfc6b8", arena_ID) .. "\n" ..
  170. minetest.colorize("#eea160", S("Teams: ")) .. minetest.colorize("#cfc6b8", teams) .. "\n" ..
  171. minetest.colorize("#eea160", S("Disabled damage types: ")) .. minetest.colorize("#cfc6b8", disabled_damage_types) .. "\n" ..
  172. min_players_per_team ..
  173. max_players_per_team ..
  174. minetest.colorize("#eea160", S("Players required: ")) .. minetest.colorize("#cfc6b8", arena_min_players) .. "\n" ..
  175. minetest.colorize("#eea160", S("Players supported: ")) .. minetest.colorize("#cfc6b8", arena_max_players) .. "\n" ..
  176. minetest.colorize("#eea160", S("Players inside: ")) .. minetest.colorize("#cfc6b8", arena.players_amount .. " ( ".. p_names .. " )") .. "\n" ..
  177. players_inside_per_team ..
  178. minetest.colorize("#eea160", S("Spectators inside: ")) .. minetest.colorize("#cfc6b8", arena.spectators_amount .. " ( ".. sp_names .. " )") .. "\n" ..
  179. spectators_inside_per_team ..
  180. minetest.colorize("#eea160", S("Players and spectators inside: ")) .. minetest.colorize("#cfc6b8", psp_amount .. " ( ".. psp_names .. " )") .. "\n" ..
  181. minetest.colorize("#eea160", S("Past and present players: ")) .. minetest.colorize("#cfc6b8", ppp_names_amount .. " ( " .. ppp_names .. " )") .."\n" ..
  182. minetest.colorize("#eea160", S("Past and present players inside: ")) .. minetest.colorize("#cfc6b8", ppp_names_inside_amount .. " ( " .. ppp_names_inside .. " )") .."\n" ..
  183. minetest.colorize("#eea160", S("Enabled: ")) .. minetest.colorize("#cfc6b8", tostring(arena.enabled)) .. "\n" ..
  184. minetest.colorize("#eea160", S("Status: ")) .. minetest.colorize("#cfc6b8", status) .. "\n" ..
  185. minetest.colorize("#eea160", S("Sign: ")) .. minetest.colorize("#cfc6b8", sign_pos) .. "\n" ..
  186. minetest.colorize("#eea160", S("Spawn points: ")) .. minetest.colorize("#cfc6b8", #arena.spawn_points .. " ( " .. spawners_pos .. ")") .. "\n" ..
  187. time ..
  188. minetest.colorize("#eea160", S("Properties: ")) .. minetest.colorize("#cfc6b8", properties) .. "\n" ..
  189. minetest.colorize("#eea160", S("Temp properties: ")) .. minetest.colorize("#cfc6b8", temp_properties) .. "\n" ..
  190. minetest.colorize("#eea160", S("Team properties: ")) .. minetest.colorize("#cfc6b8", team_properties)
  191. )
  192. end
  193. function arena_lib.print_arena_stats(sender, mod, arena_name)
  194. local arena_ID, arena = arena_lib.get_arena_by_name(mod, arena_name)
  195. if arena == nil then
  196. minetest.chat_send_player(sender, minetest.colorize("#e6482e", S("[!] This arena doesn't exist!")))
  197. return end
  198. if not arena.in_game and not arena.in_celebration then
  199. minetest.chat_send_player(sender, minetest.colorize("#e6482e", S("[!] No ongoing game!")))
  200. return end
  201. for pl_name, stats in pairs(arena.players) do
  202. -- calcolo proprietà del giocatore
  203. local p_properties = ""
  204. for k, v in pairs(arena_lib.mods[mod].player_properties) do
  205. p_properties = p_properties .. ", " .. k .. ": " .. tostring(stats[k])
  206. end
  207. minetest.chat_send_player(sender,
  208. S("Player: ") .. pl_name ..
  209. S(", kills: ") .. stats.kills ..
  210. S(", deaths: ") .. stats.deaths ..
  211. p_properties)
  212. end
  213. end
  214. function arena_lib.flush_arena(mod, arena, sender)
  215. if arena.in_queue or arena.in_game then
  216. minetest.chat_send_player(sender, minetest.colorize("#e6482e", S("[!] You can't perform this action during an ongoing game!")))
  217. return end
  218. arena.players = {}
  219. arena.spectators = {}
  220. arena.players_and_spectators = {}
  221. arena.past_present_players = {}
  222. arena.past_present_players_inside = {}
  223. arena.players_amount = 0
  224. if arena.teams_enabled then
  225. local mod_ref = arena_lib.mods[mod]
  226. for i = 1, #arena.teams do
  227. arena.players_amount_per_team[i] = 0
  228. if mod_ref.spectate_mode then
  229. arena.spectators_amount_per_team[i] = 0
  230. end
  231. end
  232. end
  233. arena.current_time = nil
  234. minetest.chat_send_player(sender, "Sluuush!")
  235. end
  236. ----------------------------------------------
  237. ---------------FUNZIONI LOCALI----------------
  238. ----------------------------------------------
  239. function value_to_string(value)
  240. if type(value) == "table" then
  241. return tostring(dump(value)):gsub("\n", "")
  242. else
  243. return tostring(value)
  244. end
  245. end