1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Implement minetest.register_can_bypass_userlimit (#6369)

* Implement minetest.register_on_userlimit_check

This new callback permits to bypass the max_users parameter with new mods condition, based on player name or IP
Only one mod needs to permit it.

Move core part for builtin privileges checks to builtin
This commit is contained in:
Loïc Blot 2017-09-04 22:08:59 +02:00 committed by GitHub
parent c05228fa6d
commit 40dd03e328
6 changed files with 28 additions and 6 deletions

View file

@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "cpp_api/s_internal.h"
#include "common/c_converter.h"
#include "common/c_content.h"
#include "debug.h"
#include "util/string.h"
void ScriptApiPlayer::on_newplayer(ServerActiveObject *player)
@ -123,6 +124,20 @@ bool ScriptApiPlayer::on_prejoinplayer(
return false;
}
bool ScriptApiPlayer::can_bypass_userlimit(const std::string &name, const std::string &ip)
{
SCRIPTAPI_PRECHECKHEADER
// Get core.registered_on_prejoinplayers
lua_getglobal(L, "core");
lua_getfield(L, -1, "registered_can_bypass_userlimit");
lua_pushstring(L, name.c_str());
lua_pushstring(L, ip.c_str());
runCallbacks(2, RUN_CALLBACKS_MODE_OR);
FATAL_ERROR_IF(!lua_isboolean(L, -1), "on_user_limitcheck must return a boolean");
return lua_toboolean(L, -1);
}
void ScriptApiPlayer::on_joinplayer(ServerActiveObject *player)
{
SCRIPTAPI_PRECHECKHEADER

View file

@ -35,6 +35,7 @@ public:
bool on_respawnplayer(ServerActiveObject *player);
bool on_prejoinplayer(const std::string &name, const std::string &ip,
std::string *reason);
bool can_bypass_userlimit(const std::string &name, const std::string &ip);
void on_joinplayer(ServerActiveObject *player);
void on_leaveplayer(ServerActiveObject *player, bool timeout);
void on_cheat(ServerActiveObject *player, const std::string &cheat_type);