Toto je starší verze dokumentu!


Server patche

Základní git commit minetestserveru je

commit 382357d61cde9d6d1b3cb94053ab1127db9d5462
Author: proller <proller@github.com>
Date:   Fri Oct 18 21:56:34 2013 +0400
 
    Masterserver totals fix

Náš server je patchnutý následovně:

Víc než 4000 nodů:

patch

nodelimit.patch
From 8bc68645cb0c0145c8229bc6876bf590a8eef0ca Mon Sep 17 00:00:00 2001
From: ShadowNinja <noreply@gmail.com>
Date: Wed, 30 Oct 2013 15:46:52 -0400
Subject: [PATCH] Raise the maximum node limit to 0x7fff
 
As agreed to by kahrl
---
 src/mapnode.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
 
diff --git a/src/mapnode.h b/src/mapnode.h
index 3c62084..f19885d 100644
--- a/src/mapnode.h
+++ b/src/mapnode.h
@@ -43,7 +43,7 @@
 	there is enough room for dummy node IDs, which are created when
 	a MapBlock containing unknown node names is loaded from disk.
 */
-#define MAX_REGISTERED_CONTENT 0xfffU
+#define MAX_REGISTERED_CONTENT 0x7fffU
 
 /*
 	A solid walkable node with the texture unknown_node.png.
-- 
1.8.5.1

Poznámka: tento commit je jen druhý následující od našeho základního commitu, předchozí commit je neškodný: Move new core devs to the "Core Developpers" section of mainmenu. Proto lze s klidným svědomím doporučit případný git checkout rovnou na commit měnící limit nodů.

Prejoin callback:

patch

prejoin-callback.patch
From 33de69a173a3646d8f5b9bf91b3e48d76cd40ae6 Mon Sep 17 00:00:00 2001
From: kaeza <kaeza@users.sf.net>
Date: Thu, 12 Dec 2013 04:51:35 -0200
Subject: [PATCH] Add 'on_prejoinplayer' callback
 
---
 builtin/misc_register.lua       |  1 +
 doc/lua_api.txt                 |  3 +++
 src/script/cpp_api/s_player.cpp | 18 ++++++++++++++++++
 src/script/cpp_api/s_player.h   |  1 +
 src/server.cpp                  | 13 +++++++++++++
 5 files changed, 36 insertions(+)
 
diff --git a/builtin/misc_register.lua b/builtin/misc_register.lua
index 249d272..6c50ff0 100644
--- a/builtin/misc_register.lua
+++ b/builtin/misc_register.lua
@@ -380,6 +380,7 @@ minetest.registered_on_generateds, minetest.register_on_generated = make_registr
 minetest.registered_on_newplayers, minetest.register_on_newplayer = make_registration()
 minetest.registered_on_dieplayers, minetest.register_on_dieplayer = make_registration()
 minetest.registered_on_respawnplayers, minetest.register_on_respawnplayer = make_registration()
+minetest.registered_on_prejoinplayers, minetest.register_on_prejoinplayer = make_registration()
 minetest.registered_on_joinplayers, minetest.register_on_joinplayer = make_registration()
 minetest.registered_on_leaveplayers, minetest.register_on_leaveplayer = make_registration()
 minetest.registered_on_player_receive_fields, minetest.register_on_player_receive_fields = make_registration_reverse()
diff --git a/doc/lua_api.txt b/doc/lua_api.txt
index cc8044f..ae71444 100644
--- a/doc/lua_api.txt
+++ b/doc/lua_api.txt
@@ -1175,6 +1175,9 @@ minetest.register_on_respawnplayer(func(ObjectRef))
 ^ Called when player is to be respawned
 ^ Called _before_ repositioning of player occurs
 ^ return true in func to disable regular player placement
+minetest.register_on_prejoinplayer(func(name, ip))
+^ Called before a player joins the game
+^ If it returns a string, the player is disconnected with that string as reason
 minetest.register_on_joinplayer(func(ObjectRef))
 ^ Called when a player joins the game
 minetest.register_on_leaveplayer(func(ObjectRef))
diff --git a/src/script/cpp_api/s_player.cpp b/src/script/cpp_api/s_player.cpp
index 215a34d..d357689 100644
--- a/src/script/cpp_api/s_player.cpp
+++ b/src/script/cpp_api/s_player.cpp
@@ -19,6 +19,7 @@
 
 #include "cpp_api/s_player.h"
 #include "cpp_api/s_internal.h"
+#include "util/string.h"
 
 void ScriptApiPlayer::on_newplayer(ServerActiveObject *player)
 {
@@ -58,6 +59,23 @@ bool ScriptApiPlayer::on_respawnplayer(ServerActiveObject *player)
 	return positioning_handled_by_some;
 }
 
+bool ScriptApiPlayer::on_prejoinplayer(std::string name, std::string ip, std::string &reason)
+{
+	SCRIPTAPI_PRECHECKHEADER
+
+	// Get minetest.registered_on_prejoinplayers
+	lua_getglobal(L, "minetest");
+	lua_getfield(L, -1, "registered_on_prejoinplayers");
+	lua_pushstring(L, name.c_str());
+	lua_pushstring(L, ip.c_str());
+	script_run_callbacks(L, 2, RUN_CALLBACKS_MODE_OR);
+	if (lua_isstring(L, -1)) {
+		reason.assign(lua_tostring(L, -1));
+		return true;
+	}
+	return false;
+}
+
 void ScriptApiPlayer::on_joinplayer(ServerActiveObject *player)
 {
 	SCRIPTAPI_PRECHECKHEADER
diff --git a/src/script/cpp_api/s_player.h b/src/script/cpp_api/s_player.h
index 88221f4..c77d397 100644
--- a/src/script/cpp_api/s_player.h
+++ b/src/script/cpp_api/s_player.h
@@ -34,6 +34,7 @@ class ScriptApiPlayer
 	void on_newplayer(ServerActiveObject *player);
 	void on_dieplayer(ServerActiveObject *player);
 	bool on_respawnplayer(ServerActiveObject *player);
+	bool on_prejoinplayer(std::string name, std::string ip, std::string &reason);
 	void on_joinplayer(ServerActiveObject *player);
 	void on_leaveplayer(ServerActiveObject *player);
 	void on_cheat(ServerActiveObject *player, const std::string &cheat_type);
diff --git a/src/server.cpp b/src/server.cpp
index 13b59e7..2c38c66 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -1970,6 +1970,19 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
 			return;
 		}
 
+		{
+			std::string reason;
+			if(m_script->on_prejoinplayer(playername, addr_s, reason))
+			{
+				actionstream<<"Server: Player with the name \""<<playername<<"\" "
+						<<"tried to connect from "<<addr_s<<" "
+						<<"but it was disallowed for the following reason: "
+						<<reason<<std::endl;
+				DenyAccess(peer_id, narrow_to_wide(reason.c_str()));
+				return;
+			}
+		}
+
 		infostream<<"Server: New connection: \""<<playername<<"\" from "
 				<<addr_s<<" (peer_id="<<peer_id<<")"<<std::endl;
 
-- 
1.8.5.1
Navigace

Obecné

Vývoj

Naše minetest games

Jiné minetest games

Minecraft

Wurm Unlimited

Ostatní

O této wiki

Tisk/export
Jazyky