#include <player.h>#include <living/moving.h>#include <thing/properties.h>#include <config.h>#include <wizlevels.h>#include <moving.h>#include <living.h>#include <attributes.h>#include <defines.h>#include <new_skills.h>#include <combat.h>#include <transport.h>
gehe zum Quellcode dieser Datei
Makrodefinitionen | |
| #define | NEED_PROTOTYPES |
Funktionen | |
| void | create () |
| static private string | _traveller (string *s) |
| static int | reise (string str) |
| static private string _traveller | ( | string * | s | ) | [static] |
Definiert in Zeile 34 der Datei travel.c.
Wird benutzt von reise().
00035 { 00036 switch (sizeof(s)) 00037 { 00038 case 1 : return s[0]; 00039 case 2 : return s[0]+" oder "+s[1]; 00040 default: return efun::implode(s[0..<2],", ")+" oder "+s[<1]; 00041 } 00042 }

| static int reise | ( | string | str | ) | [static] |
Definiert in Zeile 44 der Datei travel.c.
Benutzt _notify_fail(), _traveller(), _unparsed_args(), break_string(), BS_INDENT_ONCE, command, harbours, HasRoute(), i, IS_WIZARD, M_NOCHECK, move(), name, notify_fail(), P_NO_TRAVELING, P_SHORT, P_TRAVEL_INFO, Query(), QueryProp(), SetProp(), TRAVELD, WEM, WEN, WER, WESSEN und x.
00045 { 00046 mixed t, ship, dstr; 00047 string mit, nach, s1, s2; 00048 int i; 00049 00050 _notify_fail("Syntax: reise mit <transportmittel> nach <zielort>\n\n" 00051 "Weitere Syntaxen moeglich, bitte 'hilfe reise' lesen.\n"); 00052 00053 t = QueryProp(P_TRAVEL_INFO); 00054 00055 if (!pointerp(t) || (sizeof(t) < 4) || !objectp(t[0]) || !objectp(t[1])) 00056 { 00057 SetProp(P_TRAVEL_INFO, t = 0); 00058 } 00059 /* * * * 00060 * REISE 00061 * * * */ 00062 if (!str) 00063 { 00064 if (!t) 00065 { 00066 write("Du hast keine Reiseroute festgelegt.\n"); 00067 } 00068 else if (t[0] == environment()) 00069 { 00070 if (environment()->id("Transporter")) 00071 { 00072 write(sprintf("Du reist mit %s%s.\n",environment()->name(WEM,1), 00073 t[2]?" "+t[3]:"")); 00074 } 00075 else 00076 { 00077 write(sprintf("Du wirst mit %s%s reisen.\n",t[1]->name(WEM,1), 00078 t[2]?" "+t[3]:"")); 00079 } 00080 } 00081 else 00082 { 00083 write(sprintf("Deine letzte Route (mit %s%s) ist hier nicht wirksam.\n", 00084 t[1]->name(WEM,1), 00085 t[2]?" "+t[3]:"")); 00086 } 00087 return 1; 00088 } 00089 00090 str = lower_case( _unparsed_args() ); 00091 /* * * * * * * 00092 * REISE ROUTE 00093 * * * * * * */ 00094 if (str == "route") 00095 { 00096 string *harbours; 00097 00098 if (environment()->id("Transporter")) 00099 { 00100 if (environment()->QueryProp(P_NO_TRAVELING)) 00101 { 00102 write(break_string( 00103 capitalize(environment()->name(WER,1))+" hat gar keine " 00104 "Reiseroute. Wo Dich das wohl hinfuehrt?",78)); 00105 return 1; 00106 } 00107 00108 harbours = environment()->QueryHarbours(1); 00109 00110 if (!sizeof(harbours) || !stringp(harbours[0])) 00111 { 00112 write("Die Reiseroute "+environment()->name(WESSEN,1)+" ist " 00113 +"leider nicht bekannt.\n"); 00114 } 00115 else 00116 { 00117 write(break_string(capitalize(efun::implode(harbours," - "))+".",78, 00118 "Reiseroute "+environment()->name(WESSEN,1)+": ",BS_INDENT_ONCE)); 00119 } 00120 return 1; 00121 } 00122 if (environment()->QueryProp(P_NO_TRAVELING)) 00123 { 00124 write(break_string("Hier kannst Du leider keine Reiseroute waehlen. " 00125 "Was nicht heisst, dass hier kein Transportmittel " 00126 "verkehrt.",78)); 00127 return 1; 00128 } 00129 if (!pointerp(ship = TRAVELD->HasShip(environment()))) 00130 { 00131 _notify_fail("Hier verkehrt kein Transportmittel.\n"); 00132 return 0; 00133 } 00134 00135 write("Hier verkehren folgende Transportmittel \n" 00136 "--------------------------------------- \n"); 00137 00138 for (i = 0; i < sizeof(ship); i++) 00139 { 00140 if (!ship[i]->Query(P_SHORT)) continue; 00141 00142 harbours = ship[i]->QueryHarbours(1); 00143 00144 if (sizeof(harbours) && stringp(harbours[0])) 00145 { 00146 write(break_string(efun::implode(harbours," - ")+".",78, 00147 ship[i]->Query(P_SHORT)+": ",BS_INDENT_ONCE)); 00148 } 00149 else 00150 { 00151 write(ship[i]->Query(P_SHORT)+": Route unbekannt.\n"); 00152 } 00153 } 00154 return 1; 00155 } 00156 /* * * * * * * 00157 * REISE AUS 00158 * REISE NICHT 00159 * * * * * * */ 00160 if (member((["aus","nicht"]),str)) 00161 { 00162 if (!t) 00163 { 00164 write("Du hattest keine Reiseroute eingestellt.\n"); 00165 } 00166 else 00167 { 00168 write("Du loeschst Deine Reiseroute.\n"); 00169 } 00170 SetProp(P_TRAVEL_INFO, 0); 00171 return 1; 00172 } 00173 00174 str = regreplace(str,"\\<(zu|zum|zur|ins|ans)\\>","nach",0); 00175 /* * * * * * * * * 00176 * REISE MIT NACH 00177 * REISE NACH MIT 00178 * * * * * * * * */ 00179 if ((sscanf(str, "mit %s nach %s", mit, nach) == 2) || 00180 (sscanf(str, "nach %s mit %s", nach, mit) == 2)) 00181 { 00182 _notify_fail("Hier kannst Du leider keine Reiseroute waehlen.\n"); 00183 00184 if (environment()->QueryProp(P_NO_TRAVELING)) 00185 { 00186 return 0; 00187 } 00188 if (!strlen(nach)) 00189 { 00190 _notify_fail("Syntax: reise mit <transportmittel> nach <zielort>\n" 00191 " reise nach <zielort> mit <transportmittel>\n"); 00192 return 0; 00193 } 00194 if (sscanf(nach,"%s %s",s1,s2) == 2) 00195 { 00196 nach = s1; 00197 } 00198 if (environment()->id("Transporter")) 00199 { 00200 if (environment()->id(mit)) 00201 { 00202 command("reise nach "+nach); 00203 return 1; 00204 } 00205 else 00206 { 00207 _notify_fail("Beende erstmal Deine aktuelle Reise mit "+ 00208 environment()->name(WEM,1)+".\n"); 00209 return 0; 00210 } 00211 } 00212 if (!pointerp(ship = TRAVELD->HasShip(environment(), mit))) 00213 { 00214 _notify_fail("So ein Transportmittel verkehrt hier nicht.\n"); 00215 return 0; 00216 } 00217 for (i = sizeof(ship) -1 ; i >= 0; i--) 00218 if (!ship[i]->HasRoute(nach)) 00219 { 00220 ship[i] = 0; 00221 } 00222 00223 ship -= ({0}); 00224 00225 if (pointerp(t) && objectp(t[1]) && (member(ship,t[1]) != -1)) 00226 { 00227 ship = ({ t[1] }); 00228 } 00229 if (sizeof(ship) > 1) 00230 { 00231 if (object_name(environment()) == ship[0]->HasRoute(nach)[0]) 00232 { 00233 _notify_fail("Aber da bist Du doch bereits.\n"); 00234 return 0; 00235 } 00236 write("Dorthin kannst Du mit "+map_objects(ship,"name",WEM)+" reisen.\n"); 00237 00238 dstr = filter( filter_objects(ship,"short"), lambda( ({'x}), 00239 ({ #'==, ({#'environment, 'x}), environment() }) ) ); 00240 00241 if (sizeof(dstr)) 00242 { 00243 ship = dstr[0]; 00244 } 00245 else 00246 { 00247 ship = ship[0]; 00248 } 00249 00250 dstr = ship->HasRoute(nach); 00251 00252 write(sprintf("Du entscheidest Dich fuer %s und reist %s.\n", 00253 ship->name(WEN,1),dstr[1])); 00254 } 00255 else if (sizeof(ship) < 1) 00256 { 00257 _notify_fail("Nach '"+capitalize(nach)+"' kann Dich das angegebene " 00258 +"Transportmittel leider nicht bringen.\n"); 00259 return 0; 00260 } 00261 else 00262 { 00263 ship = ship[0]; 00264 dstr = ship->HasRoute(nach); 00265 00266 if (object_name(environment()) == dstr[0]) 00267 { 00268 _notify_fail("Aber da bist Du doch bereits.\n"); 00269 return 0; 00270 } 00271 if (t && stringp(t[2])) 00272 { 00273 if (t[2] == dstr[0]) 00274 { 00275 _notify_fail("Aber das tust Du doch bereits.\n"); 00276 return 0; 00277 } 00278 } 00279 write(sprintf("Ok, Du reist nun mit %s %s.\n", 00280 ship->name(WEM,1),dstr[1])); 00281 } 00282 if (environment(ship)==environment() && ship->short()) 00283 { 00284 ship->Enter(this_object()); 00285 } 00286 SetProp(P_TRAVEL_INFO, ({ environment(), ship, dstr[0], dstr[1] }) ); 00287 return 1; 00288 } 00289 /* * * * * * * 00290 * REISE NACH 00291 * * * * * * */ 00292 if (sscanf(str,"nach %s",nach)) 00293 { 00294 _notify_fail("Hier kannst Du leider keine Reiseroute waehlen.\n"); 00295 00296 if (environment()->QueryProp(P_NO_TRAVELING)) 00297 { 00298 return 0; 00299 } 00300 if (sscanf(nach,"%s %s",s1,s2) == 2) 00301 { 00302 nach = s1; 00303 } 00304 if (environment()->id("Transporter")) 00305 { 00306 if (!dstr = environment()->HasRoute(nach)) 00307 { 00308 _notify_fail("Dorthin kann Dich "+environment()->name(WER,1)+ 00309 " leider nicht bringen.\n"); 00310 return 0; 00311 } 00312 if (t && stringp(t[2])) 00313 { 00314 if (t[2] == dstr[0]) 00315 { 00316 _notify_fail("Aber das tust Du doch bereits.\n"); 00317 return 0; 00318 } 00319 } 00320 write(sprintf("Ok, Du reist jetzt mit %s %s.\n", 00321 environment()->name(WEM,1),dstr[1])); 00322 00323 if (IS_WIZARD(this_object())) 00324 { 00325 write("Als Magier nimmst Du natuerlich die Abkuerzung.\n"); 00326 move(dstr[0],M_NOCHECK); 00327 return 1; 00328 } 00329 SetProp(P_TRAVEL_INFO,({ environment(), 00330 environment(), 00331 dstr[0], 00332 dstr[1] }) ); 00333 00334 if (object_name(environment(ship = environment())) == dstr[0] && 00335 ship->short()) 00336 { 00337 environment()->Leave(this_object()); 00338 00339 if (environment() != ship) 00340 { 00341 SetProp(P_TRAVEL_INFO, 0); 00342 } 00343 } 00344 return 1; 00345 } 00346 if (!pointerp(ship = TRAVELD->HasShip(environment()))) 00347 { 00348 _notify_fail("Von hier aus kannst Du nicht reisen.\n"); 00349 return 0; 00350 } 00351 for (i = sizeof(ship) - 1; i >= 0; i--) 00352 if (!ship[i]->HasRoute(nach)) 00353 { 00354 ship[i] = 0; 00355 } 00356 00357 ship -= ({ 0 }); 00358 00359 if (pointerp(t) && objectp(t[1]) && (member(ship,t[1]) != -1)) 00360 { 00361 ship = ({ t[1] }); 00362 } 00363 if (sizeof(ship) > 1) 00364 { 00365 if (object_name(environment()) == ship[0]->HasRoute(nach)[0]) 00366 { 00367 _notify_fail("Aber da bist Du doch bereits.\n"); 00368 return 0; 00369 } 00370 00371 write(break_string("Dahin kannst Du mit " 00372 +_traveller(map_objects(ship, "name", WEM))+" gelangen.",78)); 00373 00374 dstr = filter(filter_objects(ship,"short"),lambda( ({'x}), 00375 ({ #'==, ({#'environment, 'x}), environment() }) ) ); 00376 00377 if (sizeof(dstr)) 00378 { 00379 ship = dstr[0]; 00380 } 00381 else 00382 { 00383 ship = ship[0]; 00384 } 00385 00386 dstr = ship->HasRoute(nach); 00387 00388 write(sprintf("Du waehlst %s und reist %s.\n",ship->name(WEN,1), 00389 dstr[1])); 00390 } 00391 else if (sizeof(ship) < 1) 00392 { 00393 _notify_fail("Nach '"+capitalize(nach)+"' kann Dich leider keines der " 00394 +"hier verkehrenden Transportmittel bringen.\n"); 00395 return 0; 00396 } 00397 else 00398 { 00399 ship = ship[0]; 00400 dstr = ship->HasRoute(nach); 00401 00402 if (object_name(environment()) == dstr[0]) 00403 { 00404 _notify_fail("Aber da bist Du ja bereits.\n"); 00405 return 0; 00406 } 00407 else if (t && stringp(t[2])) 00408 { 00409 if (t[2] == dstr[0]) 00410 { 00411 _notify_fail("Aber das tust Du doch bereits.\n"); 00412 return 0; 00413 } 00414 } 00415 write(sprintf("Ok, Du reist nun mit %s %s.\n",ship->name(WEM), 00416 dstr[1])); 00417 } 00418 if (IS_WIZARD(this_object())) 00419 { 00420 write("Als Magier nimmst Du natuerlich die Abkuerzung.\n"); 00421 move(dstr[0],M_NOCHECK); 00422 return 1; 00423 } 00424 if (environment(ship)==environment() && ship->short()) 00425 { 00426 ship->Enter(this_object()); 00427 } 00428 SetProp(P_TRAVEL_INFO, ({ environment(), ship, dstr[0], dstr[1] }) ); 00429 return 1; 00430 } 00431 /* * * * * * 00432 * REISE MIT 00433 * * * * * */ 00434 if (sscanf(str, "mit %s", mit)) 00435 { 00436 _notify_fail("Hier kannst Du leider keine Reiseroute waehlen.\n"); 00437 00438 if (environment()->QueryProp(P_NO_TRAVELING)) 00439 { 00440 return 0; 00441 } 00442 if (environment()->id("Transporter")) 00443 { 00444 if (environment()->id(mit)) 00445 { 00446 _notify_fail("Aber das tust Du doch bereits.\n"); 00447 return 0; 00448 } 00449 else 00450 { 00451 _notify_fail("Beende erstmal Deine aktuelle Reise mit "+ 00452 environment()->name(WEM,1)+".\n"); 00453 return 0; 00454 } 00455 } 00456 if (t && objectp(t[1]) && t[1]->id(mit) && t[0] == environment()) 00457 { 00458 _notify_fail("Aber das tust Du doch bereits.\n"); 00459 return 0; 00460 } 00461 if (!pointerp(ship = TRAVELD->HasShip(environment(),mit))) 00462 { 00463 _notify_fail("So ein Transportmittel verkehrt hier nicht.\n"); 00464 return 0; 00465 } 00466 if (sizeof(ship) > 1) 00467 { 00468 write("'"+capitalize(mit)+"' koennte " 00469 +_traveller(map_objects(ship,"name",WER))+" sein.\n"); 00470 00471 dstr = filter(filter_objects(ship,"short"),lambda( ({'x}), 00472 ({ #'==, ({#'environment, 'x}), environment() }) ) ); 00473 00474 if (sizeof(dstr)) 00475 { 00476 ship = dstr[0]; 00477 } 00478 else 00479 { 00480 ship = ship[0]; 00481 } 00482 write(sprintf("Du waehlst %s.\n", ship->name(WEN,1))); 00483 } 00484 else if (sizeof(ship) < 1) 00485 { 00486 notify_fail("So ein Transportmittel verkehrt hier nicht.\n"); 00487 return 0; 00488 } 00489 else 00490 { 00491 ship = ship[0]; 00492 write(sprintf("Du reist nun mit %s.\n",ship->name(WEM,1))); 00493 } 00494 if (environment(ship)==environment() && ship->short()) 00495 { 00496 ship->Enter(this_object()); 00497 } 00498 if (pointerp(t) && stringp(t[2]) && stringp(t[3]) && 00499 member(ship->QueryHarbours(),t[2]) != -1) 00500 { 00501 write("Du behaeltst Dein bisheriges Reiseziel ("+t[3]+") bei.\n"); 00502 SetProp(P_TRAVEL_INFO, ({ environment(), ship, t[2], t[3] }) ); 00503 } 00504 else 00505 { 00506 SetProp(P_TRAVEL_INFO, ({ environment(), ship, 0, 0 }) ); 00507 } 00508 return 1; 00509 } 00510 return 0; 00511 }

1.6.3