Ein Shadow dient dazu, bestimmte Funktionen eines Objekts (zeitweise) zu überlagern. Dazu wird der Shadow "über" das Objekt "gelegt". Wird nun die Funktion aufgerufen, so wird die Funktion des Shadows statt die des Objekts verwendet. Der Shadow wird mit der Funktion int init_shadow(object victim [, int arg ] ) übergeworfen. Vorsicht, einen Shadow darf man nicht mit zz zerstört werden, das wird an das geshadowte Objekt weitergeleitet! Wie mach ich nun einen Shadow, der den Geruch eines Spielers für 5 Minuten verändert? --------------------- snip ------------------------------------------------ inherit "/i/shadow"; void setup_shadow(object opfer) { init_shadow(opfer); // Shadow überwerfen write("Du stinkst nach Knoblauch!"); call_out("ende",300); // Für das Ende sorgen } string query_smell() // Den query_smell überlagern { return wrap(Der(query_shadow_owner())+" stinkt entsetzlich nach " "Knoblauch."); } void ende() { write("Dein Knoblauchgestank hat nachgelassen.\n"); remove_shadow(this_object()); // und nicht remove() !!! } --------------------- snip ------------------------------------------------ Nun muss man eigentlich nur noch setup_shadow(player); aufrufen, und schon stinkt der Gute...