[modding] Frage zu minetest.is_protected

German
Post Reply
Hectic
Member
Posts: 36
Joined: Sun Sep 20, 2015 12:24
In-game: Hectic

[modding] Frage zu minetest.is_protected

by Hectic » Post

So, jetzt muss ich auch mal 'ne Frage stellen:

Folgender code tut genau das was ich möchte:

Code: Select all

minetest.register_on_punchplayer(
		function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage)
		
		if not player or not hitter then
			print("[pvpdis] on_punchplayer called with nil objects")
		end
		
		local pos			= player:getpos()
		local playername	= player:get_player_name()
		local hittername	= hitter:get_player_name()

		local old_is_protected = minetest.is_protected
		
		if(minetest.is_protected(pos, hittername)) then
			print("[pvpdis] Area is owned by " .. playername .. ": PvP inactive")
			return true
		else
			print("[pvpdis] Area is NOT owned by " .. playername .. ": PvP active")
			return false
		end
		
		return old_is_protected(pos, hittername)
		
end)
Mein Problem ist, dass ich nicht verstehe warum! Außerdem sind die beiden Debugmeldungen nicht schlüssig für mich. Folgendes soll passieren:

Code: Select all

                    |Spieler1            |Spieler2
--------------------+--------------------+--------------------
Gebiet von Spieler1 |macht Schaden       |macht keinen Schaden
Gebiet von Spieler2 |macht keinen Schaden|macht Schaden
gehört niemandem    |macht Schaden       |macht Schaden
gehört einem Fremden|macht keinen Schaden|macht keinen Schaden
Ein Spieler soll also immer nur genau dann Schaden an anderen Spielern verursachen können, wenn das Gebiet auf dem er steht entweder ihm gehört oder niemanden. Wie oben bereits geschrieben klappt das auch. ABER: Wenn das Gebiet von jemand anderem geschützt wurde und somit kein Schaden verursacht werden kann, zeigt mir meine Debugausgabe, dass das Gebiet dem player gehört und somit kein Schaden verursacht werden kann. Genau das stimmt aber nicht.

Was genau prüft denn minetest.is_protected(pos, playername)?
- nur ob pos geschützt ist?
- ob pos von playername geschützt ist?
- ob pos von demjenigen geschützt ist, der den code ausgelöst hat?

Ich habe keine Ahnung was hier geschieht. Wäre prima wenn mich wer erleuchten könnte ;-)

Liebe Grüße,
Hectic

User avatar
Krock
Developer
Posts: 4649
Joined: Thu Oct 03, 2013 07:48
GitHub: SmallJoker
Location: Switzerland
Contact:

Re: [modding] Frage zu minetest.is_protected

by Krock » Post

Code: Select all

minetest.is_protected(pos, playername)
Diese Funktion überprüft, ob Spieler "playername" bei der Position "pos" das Gebiet verändern kann.
Somit lässt sich nicht überprüfen, wem das Gebiet gehört, sondern wer darauf zugreiffen kann.

Generelle Notiz für den folgenden Code-Ausschnitt:

Code: Select all

if (some_function(var)) then
     return true
else
     return false
end
return some_other_function(var)
In diesem Fall wird "some_other_function" nie aufgerufen, da sowohl im zutreffenden "if then"-Teil als auch im "else"-Teil ein "return" vorhanden ist.
Look, I programmed a bug for you. >> Mod Search Engine << - Mods by Krock - DuckDuckGo mod search bang: !mtmod <keyword here>

Hectic
Member
Posts: 36
Joined: Sun Sep 20, 2015 12:24
In-game: Hectic

Re: [modding] Frage zu minetest.is_protected

by Hectic » Post

Hi Krock,

vielen Dank für die Erleuchtung! Kurz, bündig, klar verständlich :-)

Liebe Grüße,
Hectic

Post Reply

Who is online

Users browsing this forum: No registered users and 3 guests