blob: cbf359eebfb9468ac829bc7c315ba2d8c747fc88 [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001SearchPath()
2************
MG Mud User88f12472016-06-24 23:31:02 +02003
MG Mud User88f12472016-06-24 23:31:02 +02004
Zesstra953f9972017-02-18 15:37:36 +01005FUNKTION
6========
MG Mud User88f12472016-06-24 23:31:02 +02007
Zesstra953f9972017-02-18 15:37:36 +01008 public int SearchPath(string from, string to, int para,
9 closure callback)
MG Mud User88f12472016-06-24 23:31:02 +020010
MG Mud User88f12472016-06-24 23:31:02 +020011
Zesstra953f9972017-02-18 15:37:36 +010012DEFINIERT IN
13============
MG Mud User88f12472016-06-24 23:31:02 +020014
Zesstra953f9972017-02-18 15:37:36 +010015 /p/daemon/pathd.c
Arathornae6dbc92020-07-27 23:36:15 +020016 <sys/pathd.h>
MG Mud User88f12472016-06-24 23:31:02 +020017
Zesstra953f9972017-02-18 15:37:36 +010018
19ARGUMENTE
20=========
21
22 from - Der Startpunkt
23 to - Der Endpunkt
24 para - Die Parawelt in der gesucht wird (Normalwelt: 0)
25 callback - Closure, die am Ende der Pfadsuche gerufen wird
26
27
28BESCHREIBUNG
29============
30
31 Diese Funktion berechnet - sofern moeglich - den kuerzesten Pfad zwischen
32 <from> und <to> in der (Para-)Welt <para>.
33
34
35
36 Die Pfadsuche wird anhand von Daten ueber von Spielern gelaufene Wege
37 durchgefuehrt. D.h. Gebiete, die von Spielern nicht (in letzter Zeit mal)
38 betreten werden, sind auch dem Pfaddaemon nicht bekannt. Auch kann es
39 Gebiete geben, wo zwar gebietsintern Pfade bekannt sind, aber keine Wege
40 in den Rest vom MG.
41
42 Da diese Suche im Allgemeinen SEHR aufwendig sein kann, wird sie meistens
43 nicht sofort fertig, sondern dauert eine Weile. Wenn sie fertig ist, wird
44 die Closure <callback> aufgerufen und ihr die Argumente <from>, <to>,
45 <parawelt>, <kosten>, <path> und <cmds> uebergeben. Die Bedeutung
46 dieser Argumente ist unten erklaert.
47
48 Eine Suche nach einem Pfad in einer Parawelt fuehrt durch Raeume der
49 gewuenschen Parawelt und durch Raeume der Normalwelt.
50
51
52RUeCKGABEWERT
53=============
54
55 1 - Suche wurde gestartet
56 2 - Pfad gefunden (und callback gerufen)
57 -1 - es laeuft schon ein Suchauftrage fuer die UID des anfragenden
58 Objektes
59 -2 - es laufen bereits zuviele Suchanfragen
60 -3 - <from> und/oder <to> sind nicht bekannt
61
62
63
64 An <callback> uebergebene Argumente am Ende der Pfadsuche:
65 <from> - Startpunkt des Weges (string)
66 <to> - Zielpunkt des Weges (string)
67 <para> - Parawelt des Weges (int)
68 <costs>- Kosten des Wege. (int) Je hoeher, desto
69 laenger/unguenstiger. 0, wenn kein Pfad gefunden
70 <path> - Array mit Raumnamen, die durchlaufen werden (string*)
71 0, wenn kein Pfad gefunden
72 <cmds> - Array mit Kommandos zum Ablaufen des Weges (string*)
73 0, wenn kein Pfad gefunden
74
75
76BEMERKUNGEN
77===========
78
MG Mud User88f12472016-06-24 23:31:02 +020079 Es ist natuerlich nicht dazu gedacht, Spielern fertige Routen zwischen
80 Orten zu geben - bzw. nur in Ausnahmefaellen.
81 Pfadabfrgen werden geloggt.
82
83 Die Angabe <costs> sagt grob etwas ueber die Laenge und vor allem ueber die
84 "Qualitaet" des Pfades aus. Die steigt bei Paraweltwechseln, wenig
85 abgelaufenen Verbindungen zwischen Raeumen oder wenn eine Verbindung kein
86 normaler Ausgang ist.
87
88 Die Closure <callback> sollte nicht zuviele Ticks verbrauchen.
89
Zesstra953f9972017-02-18 15:37:36 +010090
91BEISPIEL
92========
93
MG Mud User88f12472016-06-24 23:31:02 +020094 #include <pathd.h>
95 void suchergebnis(string from, string to, int para, int costs, string*
96 path, string* cmds) {
97 tell_object(find_player("zesstra"), sprintf(
98 "Ergebnis Pfadsuche von %s nach %s in Para %d fuer %d:\n %O\n %O\n",
99 from, to, para, costs, path, cmds));
100 };
101
102 ...
103 mixed res=PATHD->SearchPath("/gilden/abenteurer",
104 "/d/ebene/dancer/lucky/room/pova_la3",
105 0, #'suchergebnis);
106
MG Mud User88f12472016-06-24 23:31:02 +020010722.12.2015, Zesstra