Suchen und Finden im Spieler

Bild: Fehler

Liebe Mitmagier,

in diesem Beitrag geht es um Suchen und Finden von Gegenständen in Spielern.

Immer wieder kommen wir zu einem Punkt, an dem wir etwas im Spieler (oder NPC oder Raum) suchen und ggf. auch finden / identifizieren müssen.
Dabei gibt es verschiedene Vorgehensweisen, die mehr und weniger gut sind.
Ich möchte hier ein paar vorstellen:

Angenommen, ich suche im Spieler einen bestimmten Gegenstand mit der ID
“\nQuestFlasche” und dem Pfad “/d/gebirge/hoehle/obj/flasche.c”.

  1. SEHR schlecht, nicht nachmachen!
object* fl = all_inventory(spieler);

  if ( !fl || !sizeof(fl) )
   {
    tell_object(spieler,"Du hast leider keine passende Flasche dabei.\n");
    return 1;
   }
  object flasche;
  for ( i=sizeof(fl)-1; i>=0; i-- )
   if ( fl[i]->id("\nQuestFlasche") )
    {
     flasche = fl[i];
     break;
    }
   ...

Warum ist das schlecht? Aus verschiedenen Gründen:

  • Um etwas in einem Spieler zu finden brauchen wir all_inventory()
    grundsätzlich nicht explizit.
  • for() ist langsamer als foreach().
  • id() ist generell teuer, innerhalb einer Schleife ist es noch teurer. 🙂
  1. FALLS man an einer Schleife festhalten will (warum auch immer), dann
    bitte:
  int flag = 0;
  object flasche;

  foreach ( object flasche : all_inventory(spieler) )
   if ( "/d/gebirge/hoehle/obj/flasche" == load_name(flasche) )
    {
     flag = 1;
     break;
    }

  if ( !flag )
   {
    tell_object(spieler,"Du hast leider keine passende Flasche dabei.\n");
    return 1;
   }
  ...
  1. Am besten jedoch mit present_clone() und dem Pfad arbeiten:
  object flasche = present_clone("/d/gebirge/hoehle/obj/flasche",spieler);
/ bzw. noch besser, weil flexibler:
/ object flasche = present_clone(OBJ"flasche",spieler);

  if ( !objectp(flasche) )
   {
    tell_object(spieler,"Du hast leider keine passende Flasche dabei.\n");
    return 1;
   }
  ...

Bis bald!

Gruß, Torin

Neue Cloud für das Efferdland

Bild: Wolken

Hallo,

Seit einige Tagen haben wir einen neuen Rechner, der nur noch für das
Mud benutzt wird. Die Leistung ist für uns mehr als ausreichend:

  • Intel(R) Xeon(R) Gold 6140 CPU @ 2.30GHz j
  • 20 Gig Ram
  • SSD mit Schreibraten von mehr als 1 GByte / Sekunde.

Als erste Phase der Umstellung wird das Nextcloud auf al.mud.de von uns
nicht mehr benutzt.

Anstelle davon gibt es unter cloud.efferdland.de eine neues. Benutzer müssen
allerdings neu angelegt werden, die alten Files von al.mud.de auf das
neue Nextcloud übertragen werden.

Wie auch bei der alten Nextcloud auf al.mud.de können gerne auch
ambitionierte Spieler einen Account haben, um mit uns Ideen, Kritik usw.
auszutauschen.

Unser Nextcloud bietet hierfür Talbellenkalkulation, Textverarbeitung,
Mindmaps, Notizen, teilen von Files mit Gruppen oder Personen und vieles
mehr.

Bitte meldet Euch bei mir, wenn ihr einen Account benötigt.

Gruß,

  • It –