[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
|