SYNOPSIS
        int remove_input_to(object player)
        int remove_input_to(object player, string fun)
        int remove_input_to(object player, closure fun)
        int remove_input_to(object player, object fun)
        int remove_input_to(object player, object obj, string fun)

BESCHREIBUNG
        Entfernt ein anhaengiges input_to() aus dem interaktiven Playerobjekt.
        Wenn <fun> nicht angegeben ist, wird der zuletzt aufgerufen input_to()
        entfernt.

        Wurde <fun> angegeben, entfernt remove_input_to das neueste auf <fun>
        aufgerufene input_to. Je nach der Definition von <fun> wird nach
        unterschiedlichen Kriterien gesucht:
          - <fun> ist ein String: gesucht wird nach dem Funktionsnamen
          - <fun> ist ein Objekt: gesucht wird nach dem Objekt, in dem
            input_to() aufgerufen wurde
          - <fun> ist eine Closure: gesucht wird nach der Closure, die
            input_to() enthaelt
          - <obj> und <fun> wurden angegeben: es wird nach Objekt und
            Funktionsname gesucht. Beide muessen uebereinstimmen.

        remove_input_to() liefert 1 bei Erfolg, sonst 0 (es wurde kein
        input_to() gefunden, das Objekt ist nicht interaktiv oder es gibt
        kein haengiges input_to() auf dem Objekt).

BEISPIELE
        Entfernt alle anhaengigen input_to()s des aktuellen Spielers,
        falls vorhanden:
            while (remove_input_to(this_interactive()));

GESCHICHTE
        Eingefuehrt in LDMud 3.2.9 / 3.3.119.

SIEHE AUCH
        input_to(E), find_input_to(E), input_to_info(E),
        query_input_pending(E)
