b·010527

NAME_UACT

27. Mai 2001, 03:13:40
Bug
RejectedSunrise

HR Image

Irgendwie wird das Flag NAME_UACT nicht richtig ausgewertet. 100%
funktioniert es erst nachdem man die Units abgelegt und wieder genommen oder
verschenkt hat (zumindest bei meinem File). Ich hatte den Verdacht, dass das
UACT erst beim moven aktualisiert wird, aber bei:

(aus /d/berge/sunrise/riesengebirge/room/bw1o17)

int zweige_brechen()
{
  object ob;

  if (!zweige)
    return notify_fail("Hier wurden schon genug Zweige abgebrochen.\n");
  write("Du brichst einen Ginsterzweig ab.\n");
  say(PL->name(WER, NAME_DEF|NAME_CAP)+" bricht einen Ginsterzweig ab.\n");
  ob = clone_object(OBJ("ginsterzweig"));
  zweige --;
  if (ob -> move(PL, M_GET) != MOVE_OK)
  {
    write("Du laesst den Ginsterzweig fallen.\n");
    say(PL->name(WER, NAME_DEF|NAME_CAP)+" laesst etwas fallen.\n", PL);
    ob -> move(ME, M_DROP);
  }
  return 1;
}

wird ja auch gemoved (mit M_GET) und es geht trotzdem nicht.
                    
Hier ein "Mitschnitt" des Bugs:

[xdo 6#breche zweig]
Du brichst einen Ginsterzweig ab.
Du brichst einen Ginsterzweig ab.
Du brichst einen Ginsterzweig ab.
Du brichst einen Ginsterzweig ab.
Du brichst einen Ginsterzweig ab.
Du brichst einen Ginsterzweig ab.
> [clone +wunderland/erzgraeber/donald/hoehle/obj/schnur]
Cloned [/d/wunderland/erzgraeber/donald/hoehle/obj/schnur#55211].
> [binde besen aus zweigen]
Du bindest einen Ginsterzweig mit der Schnur zu einem Besen.


Aber:
[xdo 6#breche zweig]
Du brichst einen Ginsterzweig ab.
Du brichst einen Ginsterzweig ab.
Du brichst einen Ginsterzweig ab.
Du brichst einen Ginsterzweig ab.
Du brichst einen Ginsterzweig ab.
Du brichst einen Ginsterzweig ab.
> [clone +wunderland/erzgraeber/donald/hoehle/obj/schnur]
Cloned [/d/wunderland/erzgraeber/donald/hoehle/obj/schnur#55203].
> Du legst sechs Ginsterzweige des Besenginsters ab.
> Du nimmst sechs Ginsterzweige des Besenginsters.
> [binde besen aus zweigen]
Du bindest sechs Ginsterzweige mit der Schnur zu einem Besen.

Ausschnitt aus dem Code (File:
/d/berge/sunrise/riesengebirge/obj/ginsterzweig)
                             
write("Du bindest "+name(WEN, NAME_UACT)+" mit "+
  schnur->name(WEM, NAME_DEF)+" zu einem Besen.\n");
say(PL->name(WER, NAME_DEF|NAME_CAP)+" bindet aus "+
  name(WEM, NAME_UACT)+" einen Besen.\n");

Sunrise
*dem verzweifeln langsam aber sicher sehr nahe*

---

Hier liegt ein Missverstaendnis vor in der Bedienung von Units.
Damit man immer die "gewuenschte" Anzahl von Units ansprechen kann
wird id() benutzt und dessen Wert gemerkt.

Also zum Beispiel habe ich 10 Bernsteine. Ich kann dann aber auch
"unt 3 bernsteine" machen und sehe mir nur die drei an. Oder fuer
ein (fiktives) Kommando in den Bernsteinen: "binde 3 bernsteine zu
bernsteinbesen". Dann muss das Bernstein-Unit ja Texte korrekt
erzeugen koennen, es wird also gemerkt dass 3 bernsteine gemeint
sind.

Wenn du also 6 Einheiten eines Units fuer deine Texte willst, so
muss du U_REQ entweder von Hand auf 6 setzen oder irgendwie id()
so benutzen dass das Unit weisss das 6 Stueck gefragt sind.

Fini, 15.3.03

---

P.S. unit->name(WEM, NAME_UACT) wird auch falsch gebildet:
     Sunrise bindet aus sechs Ginsterzweige einen Besen.

Start » Magierhandbuch » Todo » b·010527 Letzte Generierung: 15.03.2003, 10:10
Email an: mud@wl.mud.de
Valid HTML 4.01!