Combat: Delay beim Auto-Attack; rennt ein NPC weg, darf der den
  aktuellen Angreifer nicht hunten (da der dann staerker ist), ausser
  vielleicht bei 'nachtragenheit'
Combat: Man muss nach Enemy-Selektion und Angriffsauswahl
  eingreifen koennen, z.B. um die Angriffsstaerke auf den Gegner
  abzustimmen.
Weapon, Armour: Degradation unterhalb der Schwelle sollte sich akkumulieren.
Weapon: WeaponHands bei Schadensberechnung berucksichtigen?
/std/player/body: P_AGE!
Sobald das neue Kampfsystem da ist, /std/weapon und /std/armour
  rueckwarts kompatibel machen, also die neuen Aufrufe auf die alten
  umlenken, um deren Ueberlagerungen zu fangen.
  Alternativ alle Ueberlagerungen per function exists finden und von 
  Hand aendern.
/obj/weapon, /obj/armour fuer alte Mudlib schon mal schaffen.
Living: wenn man ein SetRace("<foo>") macht und diese rasse in
  /obj/race existiert und man keine eigene long geschrieben hat
  koennte man dasnn nicht die aus /obj/race als default nehmen?
  Hmm, SetDefault() mit race-Argument sollte dafuer ausreichen.
living: information objects fuer Tod, kampf, angirff, verteidigung.
BronzeRider Mazoli tells you: ich suche ein notify_fight, aber rover sagt ihm
   faellt nur ein es mit call_out zu versuchen. kann man nicht ein
   nitify_fight aehnlich einem notify_enter in die mudlib aufnehmen?
   fuer die familiars. sie fragen staendig mit nem
   call_out die QueryEnemies() ihres owners ab. das ist zeitaufwendig. genauso
   wie es mit catch_tell waere
Thragor tells you: Folgendes Problem: Eine sehr schwarze Gilde, um die
   Vollendung zu erreichen, muss man einen Arm opfern (also ggf. nur noch eine
   Hand zum kaempfen) ...
   Thragor tells you: SOlange das Guildobjekt da ist, kein Problem
   Thragor tells you: Wenn derjenige aus der Guilde aber wieder
   austritt, hat er seinen Arm wieder :-(
   Insofern ueberlege ich, ob es nicht interessant waere, die
   Haende mit abzuspeichern
Die SplitOffAndMoveTheNonIDed-Methode von obj/money fuer /std/unit nutzen.
Playerkillings/-attacks am Player sichtbar machen (Long description)?
  Ab drei Kills den Player 'tomatisch als vogelfrei deklarieren?
  Cadra sagt: das problem ist, dass das mit den pk im spieler buggy is
  Cadra sagt: ausserdem muesste man testies rausfiltern
  Cadra sagt: thragor hatte als er wiz wurde 5 playerkills oder so
  Cadra sagt: weil er sich selber umbrachte
  Testies!
Stun-Combat (NPCs/Players):
  'Ja, unconscious abfragen, und evtl. mit einer HP untergrenze kombinieren.
  Du sagst: Ja, sowas abfragen, und evtl. mit einer HP untergrenze
  kombinieren.
  Dazu gehoert einiges in die Enemy-Verwaltung.
  Siehe Knockout-Check im jetzigen living/combat.c
  Stunning nur einmal pro Fight im Schnitt, sonst wirds nur frustrierend.
Cadra says: wenn ein spieler in einem raum was anschaut
  Cadra says: was als wort in der short, long oder im detail erwaehnt
  wird aber nicht da ist kann auch mehr als ein wort sein kommt es in
  eine spezielle liste.
  Mit 'items' kann man sich alle fehlenden teile im raum anzeigenlassen
  Ein wiz, der in einen raum kommt bekommt sowieso alles automatisch
  angezeigt, nervt, is aber heilsam ;)
  Mit 'items list' kann man alle anzeigen lassen, die im eigene wizdir
  sind
  Mit items list <pattern> alle items, die irgendwo in dem pfadnamen
   ihres files <pattern> stehen haben
  Alle missing details, die in einem raum sind, der im eigenen /players steht
  Thragor says: Wird wohl einfach ein regexp(explode(read_file(...)
     druebergejagt
  Mateese grinst: Wir haben properties - wir koennen exakt abfragen,
    was in der Beschreibung steht. 
  Rover says: dann muessen die Details aber auch mit abgefragt werden
    weil manche Details erst in anderen Details erwaehnt werden
  Thragor says: ein regexp ist einfacher, da evtl. auch spezielle Sachen
     definiert werden
  'Grummel, bei einem Regexp bekommst du allen moegliche bloedsinn mit.
  Cadra says: mit items rm log <filename> kann man das log des files loeschen
Cadra says: Mateese? noch eine Idee, die ich aus Tapp habe:
  Dort wird mitgeloggt, nach was npcs gefragt werden generell
  und wenn ein wiz dort auftaucht erzaehlt der npc ihm, wonach er
  alles gefragt wurde
  man sollte es dann aber auch loeschen koennen, wie bei den missing
  details
Details auf Mappings umstellen, die bei Search() dann auch
  zurueckgegeben werden. Dazu ein Satz simul_efuns, die auch die
  Ausfuehrung von Funktionen darauf zulassen. Standardobjekte darauf
  umstellen. Siehe Unitopia/MG-Loesung.
  Details on Details?
EPs einfuehren, diese von Str+2*Con abhaengig machen. Dann teste, ob
  die Skalierung der Trefferpunkte mit dem Treffererfolg noch sinnvoll
  ist. Evtl.: HP = DamageHP * Treffererfolg, und EP immer voll
  abziehen. 'Eins-Kam-Durch-Regel' fuer beides beibehalten.
  EP verlangt dann auch ein ChangeEP(), HealEP() und ReduceEP().
Skillberechnungen im Master als Closures compilieren und so im Living cachen.
eff str/dex bei Verwundung verkleinern?
/obj/npcdoor mit Beispielen im LPC-Dungeon. In die NPCs den Door-Mode einbauen.
'Hmm, dann waere IS_WIZARD == wizard-Bit gesetzt
  'IS_DOMAIN_FUZZY == eintrag in domains && IS_WIZARD
  'IS_PROJECT_MAN == eintrag in project && IS_WIZARD
  'IS_ARCH == archwiz != 0
  'IS_ADMIN == archwiz = 'admin'
NPC/Players: move() sollte UseStat(dex) und bei load>50% auch
  UseStat(Str) machen.
Verallgemeinertes vereinfachtes Delay-Handling -> std/npc/actions:
  AddDelay(int time, closure|string msg, int actions[default: 1])
    zieht fuer <time> heartbeats <actions> Aktionen ab, und gibt (wenn
    derweil <msg> aus).
  Intern werden die gesetzten Delays in einer Liste sortiert nach
  aufsteigenden times gehalten. Der erste Eintrag ist der aktuelle
  aktive Delay, der in lokalen Vars gecachet wird.
  Wird waehrend eines aktiven Delays ein neuer Delay hinzugefuegt,
  wird der an stelle <time>+(liste[0].time-cached_time) eingetragen.
  Die gecachte time 'cached_time' wird mit jedem HB runtergezaehlt.
  Wird 0 erreicht, wird list[0].time von allen list[0..].time
  abgezogen, und dann vom Anfang alle Eintraege entfernt, deren .time
  <= 0 ist (also auch der bisher aktuelle). Der dann erste Eintrag ist
  der neue aktuelle Delay.
  Die Summe der list[].actions ist die aktuelle Verminderung der
  verfuegbaren actions.
Evtl. vereinfachtes Actions-Handling:
  AddSimpleAction(int time, closure|object what, int actions, int priority)
    <actions> >= 0: Muss nicht in jedem Heartbeat aufgerufen werden.
    <actions> < 0; Muss in jedem Heartbeat aufgerufen werden, sonst Aua.
  Funktionsparameter ist 'time_left', > 0 fuer die Wartezeit, = 0 im
  letzten Aufruf, < 0 bei 'continuous actions' wenn abgebrochen wird.
ActionPriorites: nach combat, vor combat, vor delay.
 - Damage-Types als Integer+BitFlags interpretieren:
      DT_HEAT : Hitze, Feuer
      DT_HEAT | DF_MAGIC: Fireball
      DT_HEAT | DF_LOCAL: glowing Needle (does not affect whole victim)
   Auf jeden fall combat.h mit altem combat.h/magic.h abgleichen
Die Weather-Server sollten sich bei NIGHTDAY anmelden zwecks Synchronisation.
Ab und an die Mudlib nach P_NOWIZ/NoWiz durchkaemmen und uebertragen.
/std/thing: "details on things" als 'ExtDetails' ermoeglichen.
  Cadra says: Mateese? Ich habe grad in Tapp was recht nettes mitbekommen:
  Cadra says: das aequivalent zu AddDetail() kann man dort auch in monstern
   nutzen
  Cadra says: macht man dann in einem raum, indem ein monster mit fur steht exa
   fur, sieht man sich das detail am monster an
  'look at <detail> on <monster>?
  Cadra says: z.b.
  Cadra says: und wenn das detail im raum nicht existiert, aber im monster
  Cadra says: dann wird das vom monster beschrieben
  'Und wenn es im Raum und am Monster/Ding existiert?
  Cadra says: aber exa sollte gehen, denke dran ;)
  Cadra says: dann wuerde ich persoenlich das vom raum nehmen
  Cadra says: und das vom monster kann man mit exa <detail> on <monster>
  Cadra says: anschaun
In Objekte darauf achten, dass clean_up keine Annahmen ueber die
  Inheritance macht, da auch die basis-Klassen separat gecleanupped werden.
combat:
  Einen Angriff ignorieren koennen
  victim wechsel per random?
  DodgeObjs?, SkillObjs? CastObj ?
Compatibility modules fuer npc/living. Evtl die neuen npc/living in
  'npc2' und 'living2' nennen.
Player: age nicht ueber heartbeat
/std/npc,player: Lichtaenderungen merken und mit Meldungen versehen.
AddItem() fuer NPCs realisieren, das auch nachguckt, ob das
  betreffende Teil evtl schon im env() rumliegt und dann jenes
  verwendet. Oder sogar eins, dass 'lediglich' vom selben Typ, aber
  bessere Werte hat.
/obj/sunglasses
RaceMaster anpassen: StatBoni, P_SIZE
Komplexes actionhandling erst in npc/actions;
Idlness, netdeath und description im im player::_long ueberlagern.
Dynamische Sehbereiche.
Unlimited flags im Playerobject; reservierbar durch Wizards.
P_REAL_LEVEL nicht vergessen, RecomputeSkills() bei save
NPC: PushAttr(), PopAttr() fuer Morphing, mit A_PERSISTANCE fuer
  die Zeitdauer bis zum automatischen zurueckmorphen (o oder
  -1: ewig).
X: Y->add_init_hook(closure); closure wird von Y's init() aufgerufen.
/std/shop (Thragor), /std/pub, /std,room/guild
Generisches Fassadenobjekt, dass alle Commands und die wichtigsten
  Funktionsaufrufe auf das eigentlich Objekt umlenkt.
Player: Wenn er von Wetteraenderungen informiert wird, muss er den
  Lichtlevel ueberpruefen, und jeweils mit dem letzten vergleichen,
  sonst bekommt er Sonnenlichaenderungen nicht mit.
  Dito bei Bewegungen im Rahmen von LookAtRoom().
npc/player: Die() darf bei linkdead/wizard/ghost-Playern nicht toeten (siehe
  altes std/living/life). Ebenso fehlt noch ->second_life() (dazu
  Death() ueberladen).
/room/privacy: In /room/privacy ist snoopen unmoeglich, und schaltet
  snoops beim reinkommen ab. Inheritable. Evtl. Einschraenken: Arches
  duerfen weitersnoopen.
/obj/chmaster: zumindest die Intermud-Channels sollten dynamisch
  angelegt werden (in send_local_message()).
Thragor says: Ein converse via tell
  Und dann 'query mateese,rover,cadra'
  Daraufhin hat man eine kleine Konferenz
Thragor says: 'tell mateese fasel'
  Thragor says: 'tell % huhu'
  Thragor says: -> You told Mateese: huhu
  Cadra says: statt % wuerde ich . vorschlagen -  einfacher zu
  erreichen, ohne shift :)

Notes:
-----
 - Es gibt jetzt einen einfachen Weg, rassenabhaenige Details zu definieren:
   Man uebergibt bei AddDetail ein Mapping, dessen keys die Rassen-
   Bezeichnungen (in Kleinbuchstaben) sind, mit einem Zusatzeintrag "0" fuer
   den Defaultwert (der wird bei Rassen genommen, fuer die nix
   eingetragen ist). Beispiel:
   (["mensch":"Du willst gar nicht durch das Fenster schauen",
     "zwerg": "Du kommst nicht ran.",
     "elf":   "Du bist zu gross uns willst Dich nicht buecken.",
     0:       "Magier lesen keine Details!"]));
 - set_modify_command (object|string): qtyper in player einbauen
 - Beim Angucken wirklich das ganze Inventory ausgeben?
 - Playercmds: follow, away
     who ignore: wer ignoriert gerade wen, mit levelcheck ala snoop
 - A_IVISION,A_UVISION absolute Endwerte
   A_EIVISION, A_VISION_RANGE: aktueller Sehbereich
   A_VISION_ADAPT: Lichtlevels/HB der Sichtadaption.
   Bei Lich ausserhalb der Extremwerte ist der SPieler blind.
   Bei Licht ausserhalb des effektiven Bereichs reduziert die Chance
   das Search was findet, und zeigt Inventories nur ausschnittweise
   ("You see foo, bar and some shapes.") anhand gecachter Sehfhigkeit.
   Lichtaenderung -> StartHeart(HEAL), heal-heartbeat adaptiert
   Lichtlevel und errechnet Sehfaehigkeit (-100..100), die
   gecachet wird.
 - Alk, Essen & Heal: Hunger, Durst unter 30% von Normal reduzieren
   Heal-Rate bis auf 0. _Diese_ Healrate wird durch Alkohol um 50%
   der Normalwerts verdoppelt, alles andere proportional.
 - In die log/KILLER log/AGGRESSORS die Gildenzugehoerigkeit
   mitaufnehmen: datum, uhrzeit in eine zeile, und die gegner in der
   naechsten schreiben
 - cd @thragor wechselt zu dem Verzeichnis, in dem der Raum in dem
   Thragor gerade steht, drin ist.
 - say()s sollten im umgebenden Raum das catch_tell() erreichen?
 - Ein edierender Wizard sollte eingehende tells kurzzeitig abschalten
   koennen. Oder gleich eine Incoming-Queue?

1, answered,,
Summary-line:         msmeissn@faui01.informati  #items list
Return-Path: <msmeissn@faui01.informatik.uni-erlangen.de>
Received: from ra.ibr.cs.tu-bs.de by eos (4.1/SMI-4.1N)
	id AA22814; Thu, 17 Nov 94 22:38:16 +0100
Received: from faui45.informatik.uni-erlangen.de by ra.ibr.cs.tu-bs.de (5.65/1.341)
	id AA09591; Thu, 17 Nov 94 22:38:11 +0100
Received: from faui01.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
	id AA28626 (5.65c-6/7.3w-FAU); Thu, 17 Nov 1994 22:38:03 +0100
Received: from faui00e.informatik.uni-erlangen.de by cip.informatik.uni-erlangen.de with SMTP;
	id AA04487 (5.65c-6/7.3m-FAU); Thu, 17 Nov 1994 22:38:02 +0100
From: "Marcus Meissner (CIP 91)" <msmeissn@faui01.informatik.uni-erlangen.de>
Message-Id: <199411172138.AA04487@faui01.informatik.uni-erlangen.de>
Subject: items list
To: mateese@ibr.cs.tu-bs.de (Lars Duening)
Date: Thu, 17 Nov 1994 22:37:14 +0100 (MET)
X-Mailer: ELM [version 2.4 PL24]
Mime-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Content-Length: 1203      

*** EOOH ***
Return-Path: <msmeissn@faui01.informatik.uni-erlangen.de>
From: "Marcus Meissner (CIP 91)" <msmeissn@faui01.informatik.uni-erlangen.de>
Subject: items list
To: mateese@ibr.cs.tu-bs.de (Lars Duening)
Mime-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Content-Length: 1203      

hi

Domaris/Cadra erwaehnte gerade das Du wissen willst, wie das items list 
funktioniert bei uns.
Im 'look at' bzw. 'exa' code unseres player.c wird abgefragt, ob ein 
spezielles Item im Raum zu finden ist (mit present(), wie ueblich).
Wenn nicht, liest sich player.c den Sourcecode des Raumes ein und sucht, ob
es das item als string dadrinnen wiederfindet (das deckt dann longdescription
und itemdescriptions ab... aber leider auch strings wie 'create' 'set_long'
und '{' und so.).
Ausgewertet wird das ganze auf verschiedene Weisen:
Wenn ein Wizard in den Raum kommt, und er kann diesen raum modifizieren, wird
ihm die Liste der fehlenden Items angezeigt.
Ein Wizard kann sich die fehlenden Items aus bestimmten Raeumen mittels
'items list <dir_sub_str>' ansehen und durch Angabe von '>file' auch 
abspeichern.
Gezieltes Loeschen der gespeicherten Items geschieht durch 'items rm log'.
Intern ist das ganze ein Mapping von ([filename:([item1:cnt1,item2:cnt2])])
wobei cnt* eigentlich ueberfluessig ist.
Bei weiteren Fragen dazu stehe ich gerne zur Verfuegung :)

Marcus
-- 
        Marcus Mei_ner / Nr. 41 / 06888 Gallin / Germany
 WWW Home: "http://wwwcip.informatik.uni-erlangen.de/user/msmeissn"
