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