FUNKTION:
    int defuel_food();

DEFINIERT IN:
    /std/living/life.c

ARGUMENTE:
    Keine.

BESCHREIBUNG:
    Enttankt den Spieler automatisch um einen gewissen Essens-Wert,
    sofern der Spieler ueber einer bestimmten Enttank-Grenze liegt und seit
    seinem letzten Enttanken eine gewisse Zeit vergangen ist.
    Alle diese Werte sind rassenabhaengig.

    Es ist also NICHT moeglich, Einfluss auf die Menge des Enttankens
    zu nehmen. Das ist hier so gewollt.

    Hat der Spieler mindestens 
    * P_DEFUEL_LIMIT_FOOD in P_FOOD
    kann er alle
    * P_DEFUEL_TIME_FOOD
    um
    * (x=P_DRINK*P_DEFUEL_AMOUNT_FOOD/2) + random(x)
      (also um (50 bis 100 * P_FOOD) Prozent)
    enttanken.

RUECKGABEWERTE:
    DEFUEL_TOO_SOON: -2, wenn Enttankintervallzeiten zu kurz.
    DEFUEL_TOO_LOW:  -1, wenn Enttankgrenze noch nicht erreicht.
    NO_DEFUEL:        0, wenn Enttanken nicht noetig war (Spieler war leer)
    >0, wenn Erfolg (enttankte Wert wird zurueckgegeben).

    (Konstanten kommen aus /sys/defuel.h)

BEMERKUNG:
    Bitte defuel_food() benutzen und nicht P_FOOD oder P_MAX_FOOD des
    Spielers manipulieren!

    Achtung: Nur Toiletten sollten diese Funktion im Spieler aufrufen!

BEISPIEL:
    int action_enttanken() {
      string msg;
      int val = this_player()->defuel_food();

      switch (val) {
        case DEFUEL_TOO_SOON:
          msg = "Du warst doch erst vor kurzem auf Toilette...";
          break;
        case DEFUEL_TOO_LOW:
          msg = "Du versuchst Dich zu entleeren, aber irgendwie will "
                "das nicht so recht klappen.";
          break;
        case NO_DEFUEL:
          msg = "Du hast seit langem nichts gegessen, wie willst Du dann "
                "was loswerden koennen?";
          break;
        default:
          string qualifier;
          int fuzzypercent = (90+random(20)) *
                             val/this_player()->QueryProp(P_MAX_FOOD);
          switch(fuzzypercent) {
            case 0..50:  qualifier = "etwas"; break;
            case 51..75: qualifier = "enorm"; break;
            default:     qualifier = "unglaublich"; break;
          }
          msg = "Du entleerst Dich "+qualifier"+. Puh, das tat gut!";
          break;
      }
      tell_object(this_player(), break_string(msg, 78));
      return 1;
    }

SIEHE AUCH:
     Aehnlich:  defuel_drink
     Tanken:    consume, drink_alcohol, drink_soft, eat_food
     Heilung:   heal_self, restore_spell_points, restore_hit_points, 
                buffer_hp, buffer_sp
     Timing:    check_and_update_timed_key
     Props:     P_DRINK, P_FOOD, P_ALCOHOL, P_SP, P_HP,
                P_DEFUEL_TIME_FOOD, P_DEFUEL_TIME_DRINK
     Konzepte:  heilung, enttanken, food

9. August 2015 Gloinson
