blob: 6a712ad7daf94dada97ff11cdf777d43f58ba00f [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001SYNOPSIS
2 object previous_object();
3 object previous_object(int i);
4
5BESCHREIBUNG
6 Liefert einen Pointer auf das letzte Objekt, das einen Aufruf (mittels
7 call_other(), funcall() etc.) auf das aktuelle Objekt this_object()
8 gemacht hat. Wenn dieses aufrufende Objekt inzwischen zerstoert wurde,
9 liefert previous_object() 0.
10 Bei einem Aufruf einer eigenen Funktion durch ein Objekt bleibt das
11 bisherige previous_object() unveraendert.
12
13 Wird das Argument <i> angegeben, so verfolgt previous_object() den
14 Aufruf <i> Stufen zurueck. Zum Beispiel liefert previous_object(1) das
15 aufrufende Objekt des aufrufenden Objekts. Fuer <i> muss gelten:
16 0 <= i < call_stack_depth(). Ein Wert <i> < 0 liefert das erste
17 aufrufende Object zurueck.
18
19 Es gibt einen wichtigen Spezialfall: in Funktionen, die vom Gamedriver
20 auf Grund eines externen Ereignises aufgerufen wurden (zum Beispiel
21 Kommandi, die mit add_action() definiert wurden), liefert
22 previous_object() this_object(), previous_object(0) hingegen 0.
23
24BEISPIEL
25 int sicherheitscheck()
26 {
27 object prev;
28 if(!(prev=previous_object()));
29 else if(getuid(prev)!=getuid(this_object()));
30 else if(geteuid(prev)!=geteuid(this_object()));
31 else return 1;
32 return 0;
33 }
34 void sensible_funktion()
35 {
36 if(!sicherheitscheck())
37 return;
38 ...
39 }
40
41 Diese Funktion zeigt, wie man ueberpruefen kann, ob der letzte Aufruf
42 einer Funktion im aktuellen Objekt sicher war, oder ob die
43 Verarbeitung abgebrochen werden sollte.
44
45FEHLER
46 Werte von <i> < 0 werden wie <i> == 0 behandelt - dies ist historisch.
47
48SIEHE AUCH
49 call_other(E), this_object(E), this_player(E)
50 caller_stack(E), caller_stack_depth(E), extern_call(E)