Problemfall 7

aus LPCWiki, der freien Wissensdatenbank

Wie führt man etwas bei allen Spielern gleichzeitig in einem Raum aus?

Dieses Beispiel zeigt, wie man es anstellen kann, dass alle Spieler in einem Raum taub werden.

int tell_func(object ob) 
{
   ob->SetProp(P_DEAF, 60);
     return 1;
}

int funktion()
{
  mixed *people;
  
  people=filter_array( all_inventory(ENV(TO)), #'interactive );
  map_array(people, #'tell_func);
   
  tell_room(ENV(TO), "WUMMMMMMMSSS...KRAAAWUUUUUUMMMM...RUUUUUFFFFFFFZZZZ...\n");

    return 1;	
}

Erklärung

Als erstes wird die tell_func() geschrieben. In ihr wird festgelegt, was für jeden Spieler gemacht werden soll. In unserem Beispiel wird der Spieler für 60 Sekunden taub gemacht.

Die eigentliche interessante Sache, ist aber das Closure in der funktion() Funktion. Hier werden alle interactives, also alle Spieler im Raum, in dem sich das Objekt befindet in ein Array gesetzt. Natürlich nur, wenn sich das Objekt mit der funktion() auch im Raum befindet. Anschliessend wird bei jedem Spieler, der sich in diesem Array befindet, die tell_func(), die wir vorher definiert haben, aufgerufen. Zusätzlich wurde hier noch eine Meldung an alle in den Raum gesetzt, die z.B. einem Knall entspricht.

Abkürzungen

 TO          this_object()
 ENV         environment(x)
'Persönliche Werkzeuge