commands.lua 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. minetest.register_privilege("levels_admin", {"Grants Access to Player Level Editor Commmands", give_to_singleplayer = false})
  2. -- Sets a Level to a player
  3. minetest.register_chatcommand("set_level",{
  4. description = "Sets a specified level to a player.",
  5. params = "<playername> <level>",
  6. func = function(name, param)
  7. local target = (param:split(' ')[1])
  8. local level = tonumber((param:split(' ')[2]))
  9. local verified = nil
  10. if not minetest.check_player_privs(name, {levels_admin=true}) then
  11. return false, "**You are not authorized to change or set someone\'s player level!"
  12. end
  13. if minetest.check_player_privs(name, {levels_admin=true}) then
  14. if target == "" or target == nil then
  15. minetest.chat_send_player(name, "*You must add a player name to execute this command!")
  16. else
  17. if minetest.env:get_player_by_name(target) == "" or minetest.env:get_player_by_name(target) == nil then
  18. minetest.chat_send_player(name, "*Invalid player name!")
  19. else
  20. local playername = nil
  21. for _,player in ipairs(minetest.get_connected_players()) do
  22. local name = player:get_player_name()
  23. if name == target then
  24. playername = name
  25. verified = player
  26. break
  27. end
  28. end
  29. if level == "" or level == nil then
  30. minetest.chat_send_player(name, "*You must include a number for "..playername.."\'s player level!")
  31. else
  32. if level >=1 then
  33. set_player_level(verified, level)
  34. check_player_current_level(verified)
  35. minetest.chat_send_player(name, "*Successfully changed "..playername.."\'s player level to "..level.."!")
  36. else
  37. minetest.chat_send_player(name, "*Player level must be 1 or greater!")
  38. end
  39. end
  40. end
  41. end
  42. end
  43. end
  44. });
  45. -- Sets a number of EXP to a player
  46. minetest.register_chatcommand("set_exp",{
  47. description = "Sets total EXP to player.",
  48. params = "<playername> <level>",
  49. func = function(name, param)
  50. local target = (param:split(' ')[1])
  51. local exp = tonumber((param:split(' ')[2]))
  52. local verified = nil
  53. if not minetest.check_player_privs(name, {levels_admin=true}) then
  54. return false, "**You are not authorized to change or set someone\'s total EXP!"
  55. end
  56. if minetest.check_player_privs(name, {levels_admin=true}) then
  57. if target == "" or target == nil then
  58. minetest.chat_send_player(name, "**You must add a player name to execute this command!")
  59. else
  60. if minetest.env:get_player_by_name(target) == "" or minetest.env:get_player_by_name(target) == nil then
  61. minetest.chat_send_player(name, "**Invalid player name!")
  62. else
  63. local playername = nil
  64. for _,player in ipairs(minetest.get_connected_players()) do
  65. local name = player:get_player_name()
  66. if name == target then
  67. playername = name
  68. verified = player
  69. break
  70. end
  71. end
  72. if exp == "" or exp == nil then
  73. minetest.chat_send_player(name, "**You must include a number for "..playername.."\'s EXP!")
  74. else
  75. if exp >= 0 then
  76. local required_exp = tonumber(get_player_required_exp(verified))
  77. --Avoid overflow
  78. if exp >= required_exp then
  79. exp = required_exp
  80. end
  81. minetest.chat_send_player(name, "**Successfully changed "..playername.."\'s EXP to "..exp.."!")
  82. set_player_exp(verified, exp)
  83. check_player_current_level(verified)
  84. else
  85. minetest.chat_send_player(name, "**EXP must be 0 or greater!")
  86. end
  87. end
  88. end
  89. end
  90. end
  91. end
  92. });
  93. -- Sets a number of EXP to a player
  94. minetest.register_chatcommand("add_exp",{
  95. description = "Adds a specified ammount of EXP to a player.",
  96. params = "<playername> <exp>",
  97. func = function(name, param)
  98. local target = (param:split(' ')[1])
  99. local exp = tonumber((param:split(' ')[2]))
  100. local verified = nil
  101. if not minetest.check_player_privs(name, {levels_admin=true}) then
  102. return false, "**You are not authorized to change or set someone\'s total EXP!"
  103. end
  104. if minetest.check_player_privs(name, {levels_admin=true}) then
  105. if target == "" or target == nil then
  106. minetest.chat_send_player(name, "**You must add a player name to execute this command!")
  107. else
  108. if minetest.env:get_player_by_name(target) == "" or minetest.env:get_player_by_name(target) == nil then
  109. minetest.chat_send_player(name, "**Invalid player name!")
  110. else
  111. local playername = nil
  112. for _,player in ipairs(minetest.get_connected_players()) do
  113. local name = player:get_player_name()
  114. if name == target then
  115. playername = name
  116. verified = player
  117. break
  118. end
  119. end
  120. if exp == "" or exp == nil then
  121. minetest.chat_send_player(name, "**You must include a number for "..playername.."\'s EXP!")
  122. else
  123. if exp >= 0 then
  124. local required_exp = tonumber(get_player_required_exp(verified))
  125. --Avoid overflow
  126. if exp >= required_exp then
  127. exp = required_exp
  128. end
  129. minetest.chat_send_player(name, "**Successfully added "..exp.." EXP to "..playername.."!")
  130. add_player_exp(verified, exp)
  131. check_player_current_level(verified)
  132. else
  133. minetest.chat_send_player(name, "**EXP must be 0 or greater!")
  134. end
  135. end
  136. end
  137. end
  138. end
  139. end
  140. });
  141. -- Sets Level Cap
  142. minetest.register_chatcommand("set_level_cap", {
  143. params = "<level>",
  144. description = "Sets or changes the max level cap.",
  145. func = function(name, param)
  146. local level = tonumber(param)
  147. local players = minetest.get_connected_players()
  148. if not minetest.check_player_privs(name, {server=true}) then
  149. return false, "**You are not authorized to change or set the max level cap!"
  150. end
  151. if type(level) == "number" then
  152. if level >= 1 then
  153. set_level_cap(level)
  154. --update everyone's level status
  155. for k,v in ipairs(players) do
  156. local player = minetest.get_player_by_name(v)
  157. check_player_current_level(player)
  158. end
  159. minetest.chat_send_player(name, "**Player level cap is now set to "..level.."!")
  160. else
  161. return false, "**Level cap must be greater than 0!"
  162. end
  163. else
  164. return false, "**You must insert a number!"
  165. end
  166. end
  167. });