#include <defines.h>#include <properties.h>#include <language.h>#include <unit.h>#include <moving.h>#include <wizlevels.h>
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 |
| #define BESITZER_GUELTIG |
(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().
| 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 }

| 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 }

| 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 }

| 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 }


| 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 }

| 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 }

| 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 }

| 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 }

| static string _query_short | ( | ) | [static] |
Definiert in Zeile 192 der Datei seercard.c.
Benutzt owner.
| 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 }

| 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 }

| public string GetOwner | ( | ) |
Definiert in Zeile 366 der Datei seercard.c.
| 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 }

| 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 }

| public string query_owner | ( | ) |
| private string owner |
Definiert in Zeile 24 der Datei seercard.c.
Wird benutzt von _bild(), _query_autoloadobj(), _query_keep_on_sell(), _query_long(), _query_short(), _set_autoloadobj(), create(), geldmenge(), get_uids(), heart_beat(), init(), move(), query_owner() und QueryOwner().
| inherit std thing |
Definiert in Zeile 8 der Datei seercard.c.
1.6.3