seercard.c-Dateireferenz

#include <defines.h>
#include <properties.h>
#include <language.h>
#include <unit.h>
#include <moving.h>
#include <wizlevels.h>
Include-Abhängigkeitsdiagramm für seercard.c:

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define KONTO   "seercard_kontostand"
#define BESITZER_GUELTIG

Funktionen

static string _feld ()
static string _bild ()
static string _guthaben ()
static int kontostand (string str)
public string query_owner ()
static string _query_long ()
static string _query_short ()
static mixed _query_autoloadobj ()
static mixed _set_autoloadobj (mixed wert)
static int _query_amount ()
static string _query_keep_on_sell ()
static int _abheben (string str)
public varargs int move (mixed dest, int method)
public int IsEqual (object ob)
public string GetOwner ()
public void create ()
static int _kontostand (string str)

Variablen

inherit std thing
private string owner

Makro-Dokumentation

#define BESITZER_GUELTIG
Wert:
(environment() && query_once_interactive(environment()) && \
    getuid(environment()) == owner)

Definiert in Zeile 19 der Datei seercard.c.

Wird benutzt von _feld(), _guthaben(), _query_amount(), _query_autoloadobj() und _query_keep_on_sell().

#define KONTO   "seercard_kontostand"

Definiert in Zeile 18 der Datei seercard.c.

Wird benutzt von _abheben(), _query_amount() und IsEqual().


Dokumentation der Funktionen

static int _abheben ( string  str  )  [static]

Definiert in Zeile 276 der Datei seercard.c.

Benutzt _notify_fail(), _query_amount(), AddMoney(), break_string(), BS_LEAVE_MY_LFS und KONTO.

00277 {
00278     int summe, guthaben;
00279     string dummy;
00280     
00281     if ( !this_player() || environment(this_object()) != this_player() )
00282         return 0;
00283 
00284     if ( str == "1 muenze ab" )
00285         summe = 1;
00286     else
00287         if ( !stringp(str) ||
00288              sscanf( str, "%d muenzen ab%s", summe, dummy ) != 2 ||
00289              summe < 1 || dummy != "" ){
00290             _notify_fail( "Wieviele Muenzen moechtest Du denn abheben?\n" );
00291             return 0;
00292         }
00293 
00294     if ( (guthaben = _query_amount()) < summe ){
00295         _notify_fail( "So hoch ist Dein Guthaben aber nicht!\n" );
00296         return 0;
00297     }
00298 
00299     if ( (int) this_player()->AddMoney(summe) != 1 ){
00300         write( "Soviel Geld koenntest Du gar nicht mehr tragen.\n" );
00301         return 1;
00302     }
00303 
00304     this_player()->Set( KONTO, guthaben - summe );
00305     
00306     write( break_string( "Du schuettelst Deine Seer-Card (TM) vorsichtig "
00307                          "hin und her und murmelst ein paar geheime Worte.\n"
00308                          "Ploetzlich macht es *PLOPP* und Du haeltst Geld "
00309                          "in den Haenden!", 78, 0, BS_LEAVE_MY_LFS ) );
00310     return 1;
00311 }

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

static string _bild (  )  [static]

Definiert in Zeile 124 der Datei seercard.c.

Benutzt break_string() und owner.

00125 {
00126     if ( this_player() && getuid(this_player()) == owner )
00127         return break_string( "Du findest, dass das Bild ganz schlecht "
00128                              "getroffen ist. Dass man selber aber auch immer "
00129                              "so unvorteilhaft abgebildet wird!", 78 );
00130 
00131     return break_string( "Du findest, dass " + capitalize(owner) + " sehr gut "
00132                          "getroffen ist. Anscheinend wirst nur Du immer so "
00133                          "unvorteilhaft abgebildet.", 78 );
00134 }

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

static string _feld (  )  [static]

Definiert in Zeile 114 der Datei seercard.c.

Benutzt BESITZER_GUELTIG und break_string().

00115 {
00116     if ( !BESITZER_GUELTIG )
00117         return break_string( "Das Feld schimmert aus jeder Richtung anders - "
00118                              "aber mehr kannst Du nicht erkennen.", 78 );
00119 
00120     return "Du kannst in dem Schimmern ein paar Ziffern erkennen.\n";
00121 }

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

static string _guthaben (  )  [static]

Definiert in Zeile 137 der Datei seercard.c.

Benutzt _query_amount(), BESITZER_GUELTIG und i.

Wird benutzt von _kontostand().

00138 {
00139     int i;
00140     
00141     if ( !BESITZER_GUELTIG )
00142         return "Du kannst im Schimmern nichts erkennen.\n";
00143 
00144     if ( !(i = _query_amount()) )
00145         return "Welches Guthaben? :-)\n";
00146 
00147     return "Dein Guthaben betraegt " + ((i > 1) ? to_string(i) : "eine") +
00148         " Muenze" + ((i > 1) ? "n" : "") + ".\n";
00149 }

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

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

static int _kontostand ( string  str  )  [static]

Definiert in Zeile 152 der Datei seercard.c.

Benutzt _guthaben().

00153 {
00154     if ( !this_player() || environment(this_object()) != this_player() )
00155         return 0;
00156     
00157     if ( !str || str == "" ){
00158         write( _guthaben() );
00159         return 1;
00160     }
00161 
00162     return 0;
00163 }

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

static int _query_amount (  )  [static]

Definiert in Zeile 242 der Datei seercard.c.

Benutzt BESITZER_GUELTIG, IS_SEER und KONTO.

Wird benutzt von _abheben(), _guthaben() und IsEqual().

00243 {
00244     int res;
00245 
00246     // Wenn die Karte im Inv des Besitzers ist, Kontostand liefern
00247     if ( BESITZER_GUELTIG && IS_SEER(environment()) ){
00248         res = (int) environment()->Query(KONTO);
00249 
00250         // ... allerdings nur, wenn er gueltig ist ;-)
00251         if ( !intp(res) || res < 0 || res > 100000 )
00252             return environment()->Set( KONTO, 0 ), 0;
00253         else
00254             return res;
00255     }
00256 
00257     // Fuer Fremde ist die Karte wertlos (bis auf ihren Materialwert)
00258     return 0;
00259 }

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

static mixed _query_autoloadobj (  )  [static]

Definiert in Zeile 204 der Datei seercard.c.

Benutzt BESITZER_GUELTIG und owner.

00205 {
00206     // Die Karte ist nur fuer den Eigentuemer autoload - auch, wenn sie in
00207     // einem Paket o.ae. steckt (zweiter Teil der Abfrage) bzw. wenn sie
00208     // in einem pseudo-leblosen Objekt steckt (renew - dritte Abfrage)
00209     if ( BESITZER_GUELTIG ||
00210          environment() && environment(environment()) &&
00211          query_once_interactive(environment(environment())) &&
00212          getuid(environment(environment())) == owner ||
00213          previous_object(1) &&
00214          object_name(previous_object(1)) == "/secure/master" )
00215         return owner;
00216     
00217     return 0;
00218 }

static string _query_keep_on_sell (  )  [static]

Definiert in Zeile 262 der Datei seercard.c.

Benutzt BESITZER_GUELTIG, owner, P_KEEP_ON_SELL und Query().

00263 {
00264     // Der Besitzer der Karte 'behaelt' sie automatisch
00265     // Teil 2 der Abfrage, falls die Karte in einem Paket o.ae. steckt
00266     if ( BESITZER_GUELTIG || this_player() && getuid(this_player()) == owner )
00267         return owner;
00268 
00269     // Bei den anderen je nach Wunsch
00270     return Query(P_KEEP_ON_SELL);
00271 }

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

static string _query_long (  )  [static]

Definiert in Zeile 175 der Datei seercard.c.

Benutzt break_string(), BS_LEAVE_MY_LFS und owner.

00176 {
00177     string str;
00178 
00179     str = "Eigentlich ist die Seer-Card ziemlich schlicht gehalten. Sie ist "
00180         "als ein etwa daumendickes Rechteck aus dunklem Holz geformt. "
00181         "Auf der rechten Seite ist ein Bild von " +
00182         ((this_player() && getuid(this_player()) == owner) ? "Dir" :
00183          capitalize(owner)) + " aufgemalt. Links "
00184         "daneben befindet sich ein schmucker Schriftzug in grossen silbernen "
00185         "Buchstaben. Im unteren Drittel der Karte befindet sich ein dezent "
00186         "schimmerndes rechteckiges Feld.";
00187 
00188     return break_string( str, 78, 0, BS_LEAVE_MY_LFS );
00189 }

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

static string _query_short (  )  [static]

Definiert in Zeile 192 der Datei seercard.c.

Benutzt owner.

00193 {
00194     if ( !owner || !strlen(owner) )
00195         return "Eine Geldkarte";
00196 
00197     if ( this_player() && getuid(this_player()) == owner )
00198         return "Deine Seer-Card (TM)";
00199 
00200     return "Die Geldkarte von " + capitalize(owner);
00201 }

static mixed _set_autoloadobj ( mixed  wert  )  [static]

Definiert in Zeile 221 der Datei seercard.c.

Benutzt AddAdjective() und owner.

00222 {
00223     // Wird normalerweise nur beim Einloggen nach Ende/Reboot aufgerufen
00224     if ( owner == "" && stringp(wert) && this_interactive() &&
00225          getuid(this_interactive()) == wert ){
00226 
00227         if ( member( ({ 'x', 'z', 's' }), wert[<1] ) != -1 ){
00228             AddAdjective( wert+"'" );
00229             AddAdjective( wert );
00230         }
00231         
00232         if ( wert[<1] != 's' )
00233             AddAdjective( wert+"s" );
00234 
00235         return owner = wert;
00236     }
00237 
00238     return -1;
00239 }

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

public void create (  ) 

Definiert in Zeile 45 der Datei seercard.c.

Benutzt AddCmd(), AddDetail(), AddId(), AddSmells(), AddSounds(), break_string(), create(), FEMALE, ME, owner, P_GENDER, P_INFO, P_LOG_FILE, P_MATERIAL, P_NAME, P_NOBUY, P_VALUE, P_WEIGHT, SENSE_DEFAULT, set_next_reset() und SetProp().

00046 {
00047     if ( !clonep(ME) ){
00048         set_next_reset(-1);
00049         return;
00050     }
00051 
00052     ::create();
00053 
00054     SetProp( P_LOG_FILE, "report/tiamak.rep" );
00055     SetProp( P_NAME, "Geldkarte" );
00056     SetProp( P_INFO,
00057              break_string( "So sehr Du Dich auch anstrengst, Du kommst "
00058                            "einfach nicht hinter das Geheimnis dieser "
00059                            "Karte. Du weisst nur eines mit Sicherheit: "
00060                            "es muss etwas mit Magie zu tun haben.", 78 ) );
00061     SetProp( P_GENDER, FEMALE );
00062     SetProp( P_MATERIAL, ([ MAT_PEAR_WOOD: 80, MAT_MISC_MAGIC: 20 ]) );
00063     SetProp( P_WEIGHT, 1000 );
00064     SetProp( P_VALUE, 1000 );
00065     SetProp( P_NOBUY, 1 );
00066 
00067     if ( !owner)
00068         owner = "";
00069 
00070     AddSounds( SENSE_DEFAULT,
00071                break_string( "Du kannst nichts hoeren. Es sind anscheinend "
00072                              "auch keine losen Teile vorhanden.", 78 ) );
00073 
00074     AddSmells( SENSE_DEFAULT, "Auch bargeldlose Zahlungsmittel stinken "
00075                "nicht. ;-)\n" );
00076 
00077     AddDetail( "sicherheit", "So etwas bietet diese Karte nicht!\n" );
00078     AddDetail( "geheimnis", "Es lautet \"guthaben\". Aber verrate es "
00079                "nicht weiter!\nAngeblich kannst Du das Guthaben sogar direkt "
00080                "wieder abheben.\n" );
00081     AddDetail( "magie", "Wenn man sie so einfach untersuchen koennte, "
00082                "waere sie nicht halb so\ngeheimnisvoll.\n" );
00083     AddDetail( "rechteck",
00084                break_string( "An dieser Karte ist alles rechteckig: das Bild, "
00085                              "das merkwuerdige Feld und die Karte selber.",
00086                78) );
00087     AddDetail( ({ "holz", "birnbaumholz" }), "Es handelt sich um das "
00088                "mindestens genauso seltene wie magische Birnbaumholz.\n" );
00089     AddDetail( ({ "schriftzug", "schrift" }), "Nur wo \"Seer-Card\" drauf "
00090                "steht, ist auch wirklich eine Seer-Card drin.\n" );
00091     AddDetail( ({ "buchstabe", "buchstaben" }), "Sie bilden den "
00092                "unvermeidlichen Schriftzug \"Seer-Card (TM)\".\n" );
00093     AddDetail( "drittel", "Na unten halt.\n" );
00094     AddDetail( ({ "seite", "seiten" }), "Eine von beiden.\n" );
00095     AddDetail( ({ "rechte seite", "rechts" }), "Das ist die eine.\n" );
00096     AddDetail( ({ "linke seite", "links" }), "Das ist die andere.\n" );
00097     AddDetail( "rueckseite", "Die Rueckseite ist total leer und "
00098                "langweilig.\n" );
00099     AddDetail( ({ "zahl", "zahlen", "ziffern", "ziffer" }), "Vielleicht sollen "
00100                "sie Dein Guthaben darstellen?\n" );
00101     AddDetail( ({ "feld", "schimmern", "richtung" }), #'_feld/*'*/ );
00102     AddDetail( "bild", #'_bild/*'*/ );
00103     AddDetail( "guthaben", #'_guthaben/*'*/ );
00104     AddDetail( ({ "muenze", "muenzen" }), "Tipp mal \"guthaben\" ein.\n" );
00105 
00106     AddCmd( "guthaben", "_kontostand" );
00107     AddCmd( ({ "heb", "hebe" }), "_abheben" );
00108     
00109     AddId( ({ "\ngeldkarte", "geldkarte", "seercard", "seer-card",
00110                   "karte", "card" }) );
00111 }

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

public string GetOwner (  ) 

Definiert in Zeile 366 der Datei seercard.c.

00367 {
00368     return "Tiamak";
00369 }

public int IsEqual ( object  ob  ) 

Definiert in Zeile 341 der Datei seercard.c.

Benutzt _query_amount(), BLUE_NAME, KONTO und P_AMOUNT.

00342 {
00343     int muenzen, guthaben;
00344     
00345     if ( BLUE_NAME(ob) != "/obj/money" ||
00346          (muenzen = (int) ob->QueryProp(P_AMOUNT)) >= 0 ||
00347          !(guthaben = _query_amount()) )
00348         return 0;
00349 
00350     // negativen(!) Betrag abziehen
00351     guthaben += muenzen;
00352     
00353     if ( guthaben < 0 ){
00354         // Karte leer - Restbetrag wieder zurueck
00355         ob->AddAmount( guthaben - muenzen );
00356         environment()->Set( KONTO, 0 );
00357     }
00358     else {
00359         ob->AddAmount( -muenzen );
00360         environment()->Set( KONTO, guthaben );
00361     }
00362 }

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

static int kontostand ( string  str  )  [static]
public varargs int move ( mixed  dest,
int  method 
)

Definiert in Zeile 314 der Datei seercard.c.

Benutzt AddAdjective(), move() und owner.

00315 {
00316     int res;
00317 
00318     res = ::move( dest, method );
00319 
00320     // Besitzer der Karte setzen, falls noch keiner existiert
00321     if ( owner == "" && res == 1 && environment() &&
00322          query_once_interactive(environment()) ){
00323         owner = getuid(environment());
00324         
00325         if ( member( ({ 'x', 'z', 's' }), owner[<1] ) != -1 ){
00326             AddAdjective( owner );
00327             AddAdjective( owner+"'" );
00328         }
00329         
00330         if ( owner[<1] != 's' )
00331             AddAdjective( owner+"s" );
00332     }
00333 
00334     return res;
00335 }

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

public string query_owner (  ) 

Definiert in Zeile 167 der Datei seercard.c.

Benutzt owner.

00168 {
00169     return owner;
00170 }


Variablen-Dokumentation

private string owner
inherit std thing

Definiert in Zeile 8 der Datei seercard.c.

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