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