whereis.lua 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. function serveressentials.whereis(pname, param)
  2. local target
  3. if param and param ~= "" then
  4. target = param
  5. else
  6. -- If no argument given, run function for all players.
  7. local players = minetest.get_connected_players()
  8. for _, player in ipairs(players) do
  9. local param = player:get_player_name()
  10. serveressentials.whereis(pname, param)
  11. end
  12. return
  13. end
  14. local player = minetest.get_player_by_name(target)
  15. if not player then
  16. minetest.chat_send_player(pname, "# Server: <" .. rename.gpn(target) .. "> is not online!")
  17. return
  18. end
  19. local pos = vector.round(player:get_pos())
  20. local owner = protector.get_node_owner(pos) or ""
  21. local area = "in unclaimed territory"
  22. if owner ~= "" then
  23. area = "on land claimed by <" .. rename.gpn(owner) .. ">"
  24. end
  25. local nearby = ""
  26. local plist = {}
  27. local allplayers = minetest.get_connected_players()
  28. for _, player in ipairs(allplayers) do
  29. local pn = player:get_player_name() or ""
  30. if pn ~= target and vector.distance(player:get_pos(), pos) <= 64 then
  31. plist[#plist+1] = rename.gpn(pn)
  32. end
  33. end
  34. nearby = "{" .. table.concat(plist, ", ") .. "}"
  35. local HP = "HP=" .. player:get_hp()
  36. local wieldname = serveressentials.get_short_stack_desc(player:get_wielded_item())
  37. if not wieldname or wieldname == "" then
  38. wieldname = "nothing"
  39. else
  40. wieldname = "'" .. wieldname .. "'"
  41. end
  42. local wielding = "wielding " .. wieldname
  43. minetest.chat_send_player(pname,
  44. "# Server: Player <" .. rename.gpn(target) .. ">: at " .. rc.pos_to_namestr(pos) .. ", " ..
  45. HP .. ", " .. wielding .. ", " .. area .. ". Nearby: " .. nearby .. ".")
  46. end