Start Info Community Spielen
 
 

Morgengrauner Dokumentation

Dateipfad: /home/mud/mudlib/doc/lfun/PreventMove

PreventMove()
*************


PreventMove()
=============


FUNKTION
========

   protected int PreventMove(object dest, object oldenv, int method);


DEFINIERT IN
============

   /std/thing/moving.c /std/living/moving.c /std/player/moving.c


ARGUMENTE
=========

   dest
      Das Ziel des Moves

   oldenv
      Das (Noch-)Environment des Objekts

   method
      Die Move-Methode(n), mit der/denen bewegt werden soll


BESCHREIBUNG
============

   Mit dieser Funktion prueft ein Objekt, ob es von 'oldenv' nach
   'dest' bewegt werden mag. Dabei wird 'method' beruecksichtigt (z.B.
   schaltet M_NOCHECK die meisten Pruefungen ab). Bei Gegenstaenden
   wird z.B. P_NODROP, P_NOGET, das Gewicht, ob das Ziel das Objekt
   aufnehmen will (MayAddWeight(), PreventInsert) oder auch
   PreventLeave() geprueft. Bei Lebewesen wird z.B. P_NO_TPORT in
   'dest' und 'oldenv' und PreventLeaveLiving/PreventInsertLiving()
   ausgewertet. Bei Spielern wird auch noch getestet, ob method M_GO
   oder M_TPORT enthaelt und ob das Ziel nur von Testspielern betreten
   werden kann.


RUeCKGABEWERT
=============

   0, wenn das Objekt bewegt werden darf. Wenn es nicht bewegt werden
   darf, sind als Rueckgabewerte die in /sys/moving.h definierten
   Move-Fehlerwerte zulaessig (s. move()). Sollte hier ein ungueltiger
   Fehlerwert zurueckgegeben werden, wird das move() ebenfalls
   abgebrochen und ME_DONT_WANT_TO_BE_MOVED zurueckgeben.


BEMERKUNGEN
===========

   Diese Funktion kann ueberschrieben, um feinere Kontrolle ueber die
   Bewegungen des Objekt zu haben. Dabei aber bitte einige Dinge
   beachten:

   1. Denkt daran, ggf. M_NOCHECK zu beruecksichtigen und und eure
   Pruefungen nur zu machen, wenn es nicht in method vorkommt.

   2. *GANZ WICHTIG*: Wenn ihr mit euren Pruefungen fertig sein und
   das Objekt bewegt werden duerfte, die geerbten Pruefungen noch
   testen, also *IMMER* das geerbte PreventMove() noch aufrufen und
   dessen Wert zurueckgeben/beruecksichtigen, da sonst Pruefungen des
   Gewichts etc. nicht funktionieren oder bei Lebewesen die Prevent*()
   im Environment nicht gerufen werden!

   3. Die Funktion ist nur objektintern zu verwenden, Call-Other von
   aussen sind nicht moeglich, beim Ueberschreiben 'protected' nicht
   vergessen.

   4. Nochmal: Geerbtes PreventMove() *NICHT VERGESSEN*!


BEISPIELE
=========

   Ein Objekt, was nur im Sternenlicht aufgenommen werden kann (warum
   auch immer):

   protected int PreventMove(object dest, object oldenv, int method) {
     if ( (method & M_NOCHECK) ) {
         // wenn mit M_NOCHECK bewegt, ist das Sternenlicht egal, nur
         // geerbtes PreventMove() beruecksichten:
         return ::PreventMove(dest, oldenv, method);
     }
     else if ( method & M_GET) {
         // wenn es aufgenommen werden soll: nach Sternenlicht im Raum
         // gucken:
         if (objectp(dest) &&
             (dest->QueryProp(P_LIGHT_TYPE) != LT_STARS))
             return ME_CANT_BE_TAKEN;
     }
     // Fall-through:
     return ::PreventMove(dest, oldenv, method);
   }


SIEHE AUCH
==========


PreventLeave(), NotifyInsert(), NotifyLeave(), MayAddObject(), PreventInsertLiving(), PreventLeaveLiving(), NotifyMove(), PreventMove(), MayAddWeight(), move()

Last modified: 09.01.2020, Zesstra


zurück zur Übersicht

YOUTUBE | FACEBOOK | TWITTER | DISCORD | FEEDBACK | IMPRESSUM | DATENSCHUTZ 1992–2023 © MorgenGrauen.