[modding] Frage zu minetest.is_protected

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

[modding] Frage zu minetest.is_protected

by Hectic » Sun Mar 06, 2016 10:25

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

Folgender code tut genau das was ich möchte:
Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
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:

Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
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
Member
 
Posts: 3598
Joined: Thu Oct 03, 2013 07:48
GitHub: SmallJoker

Re: [modding] Frage zu minetest.is_protected

by Krock » Mon Mar 07, 2016 18:26

Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
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:
Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
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.
Newest Win32 builds - Find a mod - All my mods
ALL YOUR DONATION ARE BELONG TO PARAMAT (Please support him and Minetest)
New DuckDuckGo !bang: !mtmod <keyword here>
 

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

Re: [modding] Frage zu minetest.is_protected

by Hectic » Mon Mar 07, 2016 18:49

Hi Krock,

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

Liebe Grüße,
Hectic
 


Return to Deutsch

Who is online

Users browsing this forum: No registered users and 2 guests

cron