b·040509

P_INVIS, name() und i -mz

 9. Mai 2004, 11:23:53
Bug
DoneGum

HR Image

[Debug] !<gum:i -mz -mz> /std/player/viewcmd.c /magier:gum 144 Bad argument 1
       to capitalize()
diesen fehler hatte ich auf -Debug bei tatjana gesehen. nach muehevollen
restaurationsarbeiten ist es uns gelungen, den uebeltaeter ausfindig zu
machen. ursache fuer den bug war der ausdauertrank, den man bei kallithrea
bekommt (/d/aussenwelt/tommy/kraeuter/obj/tausdauer.c). beim trinken wurde
der trank durch setzen von P_INVIS unsichtbar gemacht. das fuehrte aus
irgendeinem grunde dazu, dass name() keinen string sondern die zahl 101
zuruecklieferte (das hab ich nicht weiter untersucht, ist wohl ein fall fuer
fini ;)). und bei 'i -mz' wird dann in zeile 144 in /std/player/viewcmd.c zu
der 101 ein string addiert, was dann zu dem obigen bug fuehrte. als schnellen
bugfix koennte man die vorhergehende zeile 'if (!sh) continue;' aendern in
'if (!stringp(sh)) continue;'. bleibt aber immer noch die frage, warum name()
eine zahl lieferte...

Gum, der Raecher der Waelder und Schoepfer neuer Welten.


Der Fehler liegt in /std/thing/description.c::name()

  // Namen bei Unsichtbaren/rem verstecken
  if (QueryProp(P_INVIS)) {
    if (casus == RAW) sh = "etwas";
    else sh = ({ "etwas", "von etwas", "etwas", "etwas",
                 "Jemand", "Jemands", "Jemandem", "Jemanden" })
              [casus][n_flag & NAME_PERSONAL ? 1 : 0];
    if (flag & NAME_CAP) sh = capitalize(sh);
    return sh;
  }

Das Feld muesste zweidimensional sein und andersrum indiziert werden;
alternativ kann man wohl auch [casus + (n_flag & NAME_PERSONAL ? 4 : 0)]
schreiben (das passt aber nicht zum Code drumrum). Allerdings frage ich
mich, ob man Gegenstaende mit Eigennamen (wie Excalibur) wirklich als
'Jemand' bezeichnen wuerde.

--> "Du steckst Jemanden zurueck."   . o O ( Taschenmagier? )

Fuchur

Start » Magierhandbuch » Todo » b·040509 Letzte Generierung: 19.11.2007, 14:54
Email an: mud@wl.mud.de
Valid HTML 4.01!