travel.c-Dateireferenz

#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>
Include-Abhängigkeitsdiagramm für travel.c:

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define NEED_PROTOTYPES

Funktionen

void create ()
static private string _traveller (string *s)
static int reise (string str)

Makro-Dokumentation

#define NEED_PROTOTYPES

Definiert in Zeile 15 der Datei travel.c.


Dokumentation der Funktionen

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 }

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

void create (  ) 

Definiert in Zeile 32 der Datei travel.c.

00032 {}

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 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Erzeugt am Thu Jun 3 14:42:57 2010 für MorgenGrauen Mudlib von  doxygen 1.6.3