#include <properties.h>
gehe zum Quellcode dieser Datei
Makrodefinitionen | |
| #define | ROOM(x) "/players/boing/orakel/"+x |
| #define | TIPS(x) "/secure/ARCH/ZT/"+x |
| #define | POTIONMASTER "/secure/potionmaster" |
| #define | WANNWIEVIEL |
| #define | KEINTIPTEXT "Der Nebel ueber der Kugel ruehrt sich nicht.\n" |
Funktionen | |
| create () | |
| int | NeuerTip () |
| int | ZTAuswahl () |
| Vision () | |
| string | TipListe () |
| trinken (str) | |
| meditieren () | |
| werfen (str) | |
Variablen | |
| inherit std | room |
| #define KEINTIPTEXT "Der Nebel ueber der Kugel ruehrt sich nicht.\n" |
| #define POTIONMASTER "/secure/potionmaster" |
Definiert in Zeile 10 der Datei orakel.c.
Wird benutzt von create(), FindPotion(), raise(), SelectWhich(), TipListe(), Vision() und ZTAuswahl().
| #define ROOM | ( | x | ) | "/players/boing/orakel/"+x |
| #define TIPS | ( | x | ) | "/secure/ARCH/ZT/"+x |
Definiert in Zeile 8 der Datei orakel.c.
Wird benutzt von TipLesen().
| #define WANNWIEVIEL |
({ 0, 0, 0, 0,\
25, 50, 75, 100, 125, 150, 175, 200, 225, 250, 275, 300, 325, 350, 375,\
400, 425, 450, 475, 500, 525, 550, 575, 600, 625, 650, 675, 700, 725,\
750,\
790, 830, 870, 910, 950, 990, 1030, 1070, 1110, 1150, 1190, 1230, 1270,\
1310, 1350, 1390, 1430, 1470, 1510, 1550, 1590, 1630, 1670, 1710, 1750,\
1790,\
1860, 1930, 2000, 2070, 2140, 2210, 2280, 2350, 2420, 2490,\
2590, 2690, 2790, 2890, 2990, 3090, 3190, 3290, 3390, 3490 })
Definiert in Zeile 19 der Datei orakel.c.
Wird benutzt von NeuerTip().
| create | ( | ) |
Definiert in Zeile 32 der Datei orakel.c.
Benutzt AddCmd(), AddDetail(), AddExit(), create(), P_INDOORS, P_INT_LONG, P_INT_SHORT, P_LIGHT und SetProp().
00033 { 00034 ::create(); 00035 SetProp(P_INDOORS, 1); 00036 SetProp(P_LIGHT, 1); 00037 SetProp(P_INT_SHORT, "Das heilige Orakel von Tingan"); 00038 SetProp(P_INT_LONG, 00039 "Du befindest Dich in einer mittelgrossen Hoehle, die sich halbkugel-\n"+ 00040 "foermig ueber Deinem Kopf erhebt. Die Hoehle wird fast komplett vom\n"+ 00041 "gruenlich schimmernden Quellsee des Osterbachs ausgefuellt. Ueber dem\n"+ 00042 "See schwebt eingehuellt in langsam ziehende Nebelschwaden eine magisch\n"+ 00043 "leuchtende Kugel, das heilige Orakel von Tingan. Im Osten fliesst das\n"+ 00044 "Wasser des Sees durch einen schmalen Gang ab, dem Du folgen koenntest.\n"); 00045 AddDetail("boden", "Der Boden ist groesstenteils mit Wasser bedeckt.\n"); 00046 AddDetail("decke", "Die Decke ist aus massivem Felsgestein, Du willst gar nicht wissen,\nwieviele Tonnen davon ueber Deinem Kopf lasten.\n"); 00047 AddDetail(({"fels", "gestein", "felsgestein"}), "Sowas ist im Gebirge recht haeufig.\n"); 00048 AddDetail(({"wand", "waende"}), "Die Waende sind feucht.\n"); 00049 AddDetail(({"quellsee", "see"}), "Er ist die Quelle des Osterbachs.\n"); 00050 AddDetail("quelle", "Das heisst, der Bach entspringt hier.\n"); 00051 AddDetail(({"bach", "osterbach"}), "Er fliesst nach Osten ab.\n"); 00052 AddDetail("wasser", "Es ist klar und frisch.\n"); 00053 AddDetail("gang", "Er fuehrt nach Osten.\n"); 00054 AddDetail("orakel", "Du fuehlst grosses Wissen in Deiner Umgebung.\n"); 00055 AddDetail("umgebung", "Die Umgebung ist das, was Dich umgibt.\n"); 00056 AddDetail("wissen", "Vielleicht nuetzt es Dir ja was.\n"); 00057 AddDetail(({"nebel", "schwaden", "nebelschwaden"}), "Sie ziehen langsam ueber den See.\n"); 00058 AddDetail("kugel", "Die Kugel leuchtet in magischem Licht und laedt Dich fast zum meditieren ein.\n"); 00059 AddDetail("licht", "Magisches Licht erhellt den Raum.\n"); 00060 AddDetail("raum", "Schau Dich einfach mal um.\n"); 00061 AddDetail("hoehle", "Du befindest Dich tatsaechlich in einer Hoehle.\n"); 00062 AddDetail("kopf", "Das anzuschauen duerfte Dir schwer fallen.\n"); 00063 AddCmd(({"trink", "trinke"}), "trinken"); 00064 AddCmd("meditiere", "meditieren"); 00065 AddCmd(({"wirf", "werfe"}), "werfen"); 00066 AddExit("osten", "/players/boing/orakel/organg2"); 00067 }

| meditieren | ( | ) |
Definiert in Zeile 205 der Datei orakel.c.
00206 { 00207 write( 00208 "Du sammelst Deine geistigen Kraefte und verfaellst schon schnell in einen\n"+ 00209 "tranceartigen Zustand. Eine Vision eines Helden, der eine Muenze in den\n"+ 00210 "See wirft erscheint vor Deinen Augen, verschwindet aber schon schnell\n"+ 00211 "wieder. Als Du wieder aufwachst, ist alles wie vorher.\n"); 00212 return 1; 00213 }
| int NeuerTip | ( | ) |
Definiert in Zeile 70 der Datei orakel.c.
Benutzt P_ATTRIBUTES, P_KNOWN_POTIONROOMS, P_LEP und WANNWIEVIEL.
Wird benutzt von Vision().
00071 { 00072 mapping platt; // Attributmapping des Spielers 00073 int summe; // Summe der Attribute des Spielers + der noch zu findenen 00074 // aber bekannten Zaubertrankstellen 00075 int sps; // Stufenpunkte des Spielers 00076 00077 platt = this_player()->QueryProp(P_ATTRIBUTES); 00078 summe = (int)platt["int"] + (int)platt["con"] + 00079 (int)platt["dex"] + (int)platt["str"] - 4; 00080 summe += sizeof(this_player()->QueryProp(P_KNOWN_POTIONROOMS)); 00081 sps = this_player()->QueryProp(P_LEP); 00082 00083 // Wenn genug Stufenpunkte da sind, dann wird 1 zurueckgegeben, sonst 0 00084 if (summe>79) 00085 return 0; 00086 if (sps > WANNWIEVIEL[summe]) 00087 return 1; 00088 return 0; 00089 }

| string TipListe | ( | ) |
Definiert in Zeile 167 der Datei orakel.c.
Benutzt P_KNOWN_POTIONROOMS und POTIONMASTER.
00168 { 00169 int* pll; 00170 string* tip; 00171 string ret; 00172 int plsize, i; 00173 00174 ret = ""; 00175 pll = this_interactive()->QueryProp(P_KNOWN_POTIONROOMS); 00176 plsize = sizeof(pll); 00177 00178 for (i=0; i<plsize; i++) 00179 { 00180 tip = POTIONMASTER->TipLesen(pll[i]); 00181 if (sizeof(tip)) 00182 { 00183 ret += tip[random(sizeof(tip))]; 00184 ret += "--------------------------------------------------------------------------\n"; 00185 } 00186 } 00187 00188 if (ret=="") 00189 return "Du kennst momentan keine Tips zu Zaubertraenken.\n"; 00190 else 00191 return "--------------------------------------------------------------------------\n"+ret; 00192 }
| trinken | ( | str | ) |
Definiert in Zeile 194 der Datei orakel.c.
Benutzt notify_fail().
Wird benutzt von liste().
00195 { 00196 notify_fail("Was moechtest Du trinken?\n"); 00197 if (!str || str=="") return 0; 00198 notify_fail("Das kannst Du hier nicht trinken!\n"); 00199 if (str!="wasser") 00200 return 0; 00201 write("Du trinkst einen Schluck Quellwasser und fuehlst Dich koestlich erfrischt.\n"); 00202 return 1; 00203 }


| Vision | ( | ) |
Definiert in Zeile 132 der Datei orakel.c.
Benutzt KEINTIPTEXT, liste(), NeuerTip(), P_KNOWN_POTIONROOMS, POTIONMASTER, text() und ZTAuswahl().
Wird benutzt von werfen().
00133 { 00134 int nr; 00135 string* text; 00136 int* liste; 00137 00138 if (!NeuerTip()) 00139 return KEINTIPTEXT + "Du hast wahrscheinlich zu wenig Stufenpunkte.\n"; 00140 00141 nr = ZTAuswahl(); 00142 if (nr == -1) 00143 return KEINTIPTEXT + "Du hast schon alle Zaubertraenke gefunden.\n"; 00144 00145 text = POTIONMASTER->TipLesen(nr); 00146 // Das Folgende kann passieren, wenn entweder die Datei zu einem ZT nicht 00147 // existiert oder das Einlesen sonstwie fehlschlaegt. Zur Behebung des 00148 // Fehlers sollte man sich als erstes die Datei <nr>.zt anschauen. 00149 if (intp(text) || !sizeof(text)) 00150 return 00151 "Ploetzlich wird es totenstill im Raum, die Nebelschwaden beginnen sich\n"+ 00152 "um die Kugel zu drehen. Immer schneller wird der wirbelnde Tanz, bis\n"+ 00153 "sich das Ganze unmerklich zu einer Schrift formt:\n"+ 00154 " Fehler im Raum-Zeit-Gefuege, bitte wende Dich an Rikus\n"+ 00155 " und melde ihm die Zahl '"+nr+"'!\n"+ 00156 "Dann zerfliesst der Nebel und alles ist beim Alten.\n"; 00157 00158 liste = this_player()->QueryProp(P_KNOWN_POTIONROOMS); 00159 this_player()->AddKnownPotion(nr); 00160 00161 //bis nach Reboot noetig!!! Rikus 00162 // "/players/boing/orakel/orakel"->AddKnownPotion(nr); 00163 00164 return "Der Nebel ueber der Kugel beginnt sich zu bewegen, dann hoerst Du eine\ntiefe Stimme in Deinem Kopf erklingen:\n\n"+text[random(sizeof(text))]; 00165 }


| werfen | ( | str | ) |
Definiert in Zeile 215 der Datei orakel.c.
Benutzt name, QueryMoney() und Vision().
00216 { 00217 if (str=="muenze in see" || str=="muenze in wasser" || 00218 str=="muenze in quellsee") 00219 { 00220 if (this_player()->QueryMoney()<1) 00221 { 00222 write("Du hast keine Muenze.\n"); 00223 return 1; 00224 } 00225 this_player()->AddMoney(-1); 00226 write("Du wirfst eine Muenze ins Wasser.\n"); 00227 say(capitalize(this_player()->name())+" wirft eine Muenze ins Wasser.\n"); 00228 write(Vision()); 00229 return 1; 00230 } 00231 }

| int ZTAuswahl | ( | ) |
Definiert in Zeile 93 der Datei orakel.c.
Benutzt i, P_KNOWN_POTIONROOMS, P_POTIONROOMS und POTIONMASTER.
Wird benutzt von Vision().
00094 { 00095 int* pllist; 00096 int pllsize; 00097 int i; 00098 mixed sorted_list; // ({ ({liste1}), ({liste2}), ..., ({liste8}) }) 00099 00100 // Initialisierung 00101 sorted_list = ({ ({ }), ({ }), ({ }), ({ }), ({ }), ({ }), ({ }), ({ }) }); 00102 pllist = this_player()->QueryProp(P_POTIONROOMS); 00103 pllsize = sizeof(pllist); 00104 00105 // Zaubertraenke werden gemaess ihrer Liste in den neuen Array eingetragen. 00106 for (i=0; i<pllsize; i++) 00107 sorted_list[POTIONMASTER->GetListByNumber(pllist[i])] += ({ pllist[i] }); 00108 00109 // Alle Unterarrays werden aneinandergehaengt. 00110 pllist = ({ }); 00111 for (i=0; i<8; i++) 00112 pllist += sorted_list[i]; 00113 pllist -= this_player()->QueryProp(P_KNOWN_POTIONROOMS); 00114 00115 // Jetzt sind alle Zaubertraenke wieder in der Liste, sortiert nach dem 00116 // Schwierigkeitsgrad, bis auf die Zaubertraenke, die der Spieler bereits 00117 // kennt (d.h. wo er schon den Tip bekommen hat, sie aber noch nicht 00118 // gefunden hat). 00119 00120 00121 // Einer der leichtesten Zaubertraenke wird ausgewaehlt und zurueckgegeben. 00122 pllsize = sizeof(pllist); 00123 if (!pllsize) 00124 return -1; 00125 if (pllsize>10) 00126 return pllist[random(10)]; 00127 else 00128 return pllist[random(pllsize)]; 00129 }

1.6.3