players.c-Dateireferenz

#include <wizlevels.h>
#include <ansi.h>
#include <logging.h>
#include <magier.h>
#include <thing/properties.h>
#include <thing/description.h>
#include <player.h>
#include <moving.h>
Include-Abhängigkeitsdiagramm für players.c:

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define NEED_PROTOTYPES

Funktionen

static mixed * _query_localcmds ()
private string _zap_message (string str, object obj)
static int _zap (string str)
static int _verfolge (string str)
static int _trans (string str)
static int _frieden (string sname)
private int _pwho_learner_test (object ob)
static int _pwho ()
static int _zwinge (string str)
static int _heile (string name)
static private string _people_filename (object obj)
static int _people ()
private string _spieler_time2string (int time)
static int _spieler (string arg)

Makro-Dokumentation

#define NEED_PROTOTYPES

Definiert in Zeile 15 der Datei players.c.


Dokumentation der Funktionen

static int _frieden ( string  sname  )  [static]

Definiert in Zeile 195 der Datei players.c.

Benutzt find_living(), i, Name(), WEM und WER.

00196 {
00197   object *enem,obj;
00198   int i;
00199   string him;
00200   
00201   if (!sname)
00202   {
00203     enem=all_inventory(environment());
00204     map_objects(enem,"StopHuntingMode");
00205     tell_room(environment(),sprintf("%s stiftet Frieden.\n",capitalize(getuid())),
00206               ({ this_object()}));
00207     printf("Du stiftest Frieden.\n");
00208     return 1;
00209   }
00210   else
00211   {
00212     if (!obj=find_living(sname))
00213       return printf("Kein solches Lebewesen im Spiel.\n"),1;
00214     him=(string)obj->name(WEM);
00215     i=sizeof(enem=(object *)(((mixed *)obj->StopHuntingMode())[0]));
00216     // Mistdriver ... object** waere richtig gewesen ... *seufz*
00217     while(i--)
00218     {
00219       enem[i]->StopHuntFor(obj);
00220       tell_object(obj,sprintf("%s beendet Deinen Kampf mit %s.\n",
00221                               capitalize(getuid()),enem[i]->Name(WEM)));
00222       tell_object(enem[0],sprintf("%s beendet Deinen Kampf mit %s.\n",
00223                                   capitalize(getuid()),him));
00224     }
00225   }
00226   printf("%s und alle Gegner wurden befriedet.\n",obj->Name(WER));
00227   return 1;
00228 }

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

static int _heile ( string  name  )  [static]

Definiert in Zeile 311 der Datei players.c.

00312 {
00313   object ob;
00314   int lpv, mpv;
00315 
00316   if (!name) return USAGE("heile <name>");
00317   name = lower_case(name);
00318   if ((!(ob = present(name,environment())))
00319       ||!living(ob))
00320     ob = find_living(name);
00321   if (!ob)
00322   {
00323     printf("'%s' ist momentan nicht da.\n",capitalize(name));
00324     return 1;
00325   }
00326   lpv = (int)ob->QueryProp(P_HP);
00327   mpv = (int)ob->QueryProp(P_SP);
00328   ob->heal_self(1000000);
00329   if (!IS_LEARNER(ob) && (!ob->QueryProp(P_TESTPLAYER)||
00330           (((string)ob->QueryProp(P_TESTPLAYER))[<5..<1]=="Gilde")))
00331     log_file(SHELLLOG("HEAL"),
00332        sprintf("%s heilt %s (%s) %s (LP: %d -> %d, MP: %d -> %d)\n",
00333          capitalize(geteuid(this_player())),
00334          call_other(ob,"name"), capitalize(geteuid(ob)),
00335          dtime(time()), lpv, (int)ob->QueryProp(P_HP),
00336                mpv,(int)ob->QueryProp(P_SP)));
00337   tell_object(ob, QueryProp(P_NAME) + " heilt Dich.\n");
00338   printf("Du heilst %s.\n",capitalize(name));
00339   return 1;
00340 }

static int _people (  )  [static]

Definiert in Zeile 356 der Datei players.c.

00357 {
00358   mixed *list, res;
00359   int i,j, a;
00360   string a_age,a_ipnum,a_name,a_level,a_idle,a_room,a_end, a_title;
00361 
00362   switch(QueryProp("tty"))
00363   {
00364     case "vt100":
00365       a_ipnum = ""; a_name = ANSI_BOLD;
00366       a_level = ANSI_NORMAL; a_idle = ANSI_BLINK;
00367       a_room = ANSI_NORMAL; a_end = ANSI_NORMAL;
00368       a_title = ANSI_INVERS; a_age = ANSI_NORMAL;
00369       break;
00370     case "ansi":
00371       a_ipnum = ANSI_BLUE; a_name = ANSI_BOLD;
00372       a_level = ANSI_RED; a_idle = ANSI_BLACK+ANSI_BOLD;
00373       a_room = ANSI_BOLD+ANSI_BLUE; a_end = ANSI_NORMAL;
00374       a_title = ANSI_INVERS; a_age = ANSI_PURPLE;
00375       break;
00376     default:
00377       a_title = a_ipnum = a_name = a_level = a_idle = a_room = a_end = "";
00378       a_age = "";
00379   }
00380   list = sort_array(users(), function int (object a, object b) {
00381       return query_ip_number(a)>query_ip_number(b);} ); 
00382 
00383   j=sizeof(list);
00384   a=0;res="";
00385   for(i=0; i<sizeof(list); i++) {
00386     string name_; 
00387     name_ = capitalize(list[i]->query_real_name()||"<logon>");
00388     res += sprintf( "%s%-15s%s %s%-13s%s %s%3d%s %s %s %s%s%s%s %s%s\n",
00389                     a_ipnum, query_ip_number(list[i]),a_end,a_name,
00390                     (list[i]->QueryProp(P_INVIS)?"("+name_+")":name_),
00391                     a_end,a_level, MASTER->get_wiz_level(getuid(list[i])),
00392                     a_end,a_age,
00393                     time2string("%4x %0X",((int)list[i]->QueryProp(P_AGE))*2),
00394                     query_idle(list[i])>=300?(a++,(a_idle+"I")):" ",
00395                     a_end,
00396                     query_editing(list[i])?a_idle+"E"+a_end:" ",
00397                     query_input_pending(list[i])?a_idle+"M"+a_end:" ",
00398                     environment(list[i])?a_room+_people_filename(list[i]):"",
00399                     a_end);
00400   }
00401   if (a)
00402     res = sprintf("%s%d Spieler anwesend (%d aktiv). %s%s\n",a_title,j,
00403                   (j-a),query_load_average(),a_end)+res;
00404   else
00405     res = sprintf("%s%d Spieler anwesend. %s%s\n",a_title,j,
00406                   query_load_average(),a_end)+res;
00407   More(res);
00408 
00409   return 1;
00410 }

static private string _people_filename ( object  obj  )  [static]

Definiert in Zeile 346 der Datei players.c.

00347 {
00348   string str;
00349   str=object_name(environment(obj));
00350   if (!str) return 0;
00351   if (str[0..2] == "/d/") return sprintf("+%s",str[3..<1]);
00352   if (str[0..8] == "/players/") return sprintf("~%s",str[9..<1]);
00353   return str;
00354 }

static int _pwho (  )  [static]

Definiert in Zeile 241 der Datei players.c.

Benutzt hands, i und spieler.

00242 {
00243   mixed* spieler, res, *hands;
00244   int i;
00245 #if __VERSION__ < "3.2.9"
00246   spieler = filter(users(),#'_pwho_learner_test);
00247 #else
00248   spieler = filter(users(),(: return !IS_LEARNER($1); :));
00249 #endif
00250   spieler = order_alist(
00251            ({map_objects(spieler,"QueryProp",P_LEVEL),spieler}))[1];
00252   res = "Lvl Name         Erfahrung   QP  Int Str Dex Con WC   "
00253     "AC   HANDS HP  (max)\n"
00254     "--------------------------------------------------------------"
00255     "-----------------\n";
00256   for (i=sizeof(spieler)-1; i>=0; i--)
00257     res += sprintf("%3d %-12s %9d %5d %3d %3d %3d %3d %4d %4d  %5d "
00258                    "%4d (%4d)\n",
00259      spieler[i]->QueryProp(P_LEVEL),
00260      capitalize(getuid(spieler[i])),
00261      spieler[i]->QueryProp(P_XP),
00262      spieler[i]->QueryProp(P_QP),
00263      spieler[i]->QueryAttribute(A_INT),
00264      spieler[i]->QueryAttribute(A_STR),
00265      spieler[i]->QueryAttribute(A_DEX),
00266      spieler[i]->QueryAttribute(A_CON),
00267      spieler[i]->QueryProp(P_TOTAL_WC),
00268      spieler[i]->QueryProp(P_TOTAL_AC),
00269      (sizeof(hands=((int *)spieler[i]->QueryProp(P_HANDS)))?hands[1]:0),
00270      spieler[i]->QueryProp(P_HP),
00271      spieler[i]->QueryProp(P_MAX_HP));
00272   More(res);
00273   return 1;
00274 }

private int _pwho_learner_test ( object  ob  ) 

Definiert in Zeile 235 der Datei players.c.

Benutzt IS_LEARNER.

00236 {
00237   return !IS_LEARNER(ob);
00238 }

static mixed* _query_localcmds (  )  [static]

Definiert in Zeile 24 der Datei players.c.

Benutzt LEARNER_LVL und WIZARD_LVL.

00025 {
00026   return ({({"zap","_zap",0,WIZARD_LVL}),
00027            ({"verfolge","_verfolge",0,LEARNER_LVL}),
00028            ({"trans","_trans",0,LEARNER_LVL}),
00029            ({"peace","_frieden",0,LEARNER_LVL}),
00030            ({"frieden","_frieden",0,LEARNER_LVL}),
00031            ({"pwho","_pwho",0,WIZARD_LVL}),
00032            ({"zwinge","_zwinge",0,WIZARD_LVL}),
00033            ({"heal","_heile",0,WIZARD_LVL}),
00034            ({"heil","_heile",1,WIZARD_LVL}),
00035            ({"people","_people",0,LEARNER_LVL}),
00036            ({"spieler","_spieler",0,WIZARD_LVL})});
00037 }

static int _spieler ( string  arg  )  [static]

Definiert in Zeile 439 der Datei players.c.

00440 {
00441   string dummy,ip;
00442   object *spieler,pl;
00443   int i;
00444   
00445   arg=_unparsed_args();
00446   if(!strlen(arg) || sscanf(arg,"aus ip %s",dummy)!=1)
00447     return USAGE("spieler aus ip [von <spieler>|<ip>]");
00448   arg=dummy;
00449   if (sscanf(arg,"von %s",dummy)==1)
00450   {
00451     dummy=lower_case(dummy);
00452     if (!(pl=find_player(dummy)))
00453       return notify_fail(sprintf("Spieler '%s' konnte nicht gefunden "
00454                                  "werden.\n",capitalize(dummy))),0;
00455     ip=query_ip_number(pl);
00456   }
00457   else ip=arg;
00458   ip=implode((explode(ip,".")-({""})+({"*","*","*","*"}))[0..3],".");
00459 if (catch(
00460   spieler=filter(users(),
00461     (: return sizeof(regexp(({query_ip_number($1)}),$2)); :),"^"+glob2regexp(ip)+"$")
00462 
00463                                       ))
00464   return printf("In der IP duerfen nur Zahlen(0-255), Punkte (.) und "
00465                 "Sterne (*) vorkommen.\n"),1;
00466   if (!sizeof(spieler))
00467     return printf("Es konnte kein Spieler mit der IP '%s' gefunden "
00468                   "werden.\n",ip),1;
00469   arg=sprintf("\nFolgende Spieler haben die IP %s:\n"
00470        "================================================================"
00471               "===========\n"
00472        "Name:       Zweitie von:      Eingeloggt:                  "
00473               "Idle seit:\n"
00474        "----------------------------------------------------------------"
00475               "-----------\n",ip);
00476   i=sizeof(spieler);
00477   while(i--)
00478   {
00479     arg+=sprintf("%-11s %-17s %26s  %-15s\n",
00480                  capitalize(getuid(spieler[i])),
00481                  ((dummy=(string)spieler[i]->QueryProp(P_SECOND))?
00482                   (sizeof((mixed *)call_other(master(),
00483                                               "get_userinfo",dummy))?
00484                    capitalize(dummy):"*ungueltig*"):""),
00485                  dtime(spieler[i]->QueryProp(P_LAST_LOGIN)),
00486                  _spieler_time2string(query_idle(spieler[i])));
00487   }
00488   arg+="==============================================================="
00489     "============\n\n";
00490   More(arg);
00491   return 1;
00492 }

private string _spieler_time2string ( int  time  ) 

Definiert in Zeile 417 der Datei players.c.

00418 {
00419   string ret;
00420 
00421   ret="";
00422   if (time>=86400)
00423   {
00424     ret+=time/86400+"d ";
00425     time%=86400;
00426   }
00427   if(time<36000) ret+="0";
00428   ret+=time/3600+":";
00429   time%=3600;
00430   if(time<600) ret+="0";
00431   ret+=time/60+":";
00432   time%=60;
00433   if(time<10) ret+="0";
00434   ret+=time+"";
00435   return ret;
00436 }

static int _trans ( string  str  )  [static]

Definiert in Zeile 154 der Datei players.c.

Benutzt _notify_fail(), find_living(), IS_LEARNER, M_NOCHECK, M_TPORT, match_living(), QueryProp(), WEM und WER.

00155 {
00156   object living;
00157 
00158   if (!strlen(str))
00159     return _notify_fail("Syntax: trans <spielername>\n"),0;
00160   str=match_living(str,0);
00161   if (intp(str))
00162     switch (str)
00163     {
00164       case -1: write("Das war nicht eindeutig.\n"); return 1;
00165       case -2: write("So ein Wesen gibt es nicht.\n"); return 1;
00166     }
00167   if(living=find_living(str))
00168   {
00169     if (living->move(object_name(environment()),
00170                      M_TPORT|M_NOCHECK)<=0)
00171     {
00172       printf("Teleportieren von %s fehlgeschlagen.\n",living->Name(WEM));
00173       if (IS_LEARNER(living))
00174         tell_object(living,sprintf("%s wollte Dich teleportieren, "
00175              "hat aber versagt!\n",capitalize(getuid())));
00176       return 1;
00177     }
00178     tell_object(living,sprintf(
00179     "Ein seltsames Gefuehl ueberkommt Dich ...\n"
00180     "Du verlierst die Orientierung ...\n"
00181     +(QueryProp(P_INVIS)?"":"%s holt Dich zu sich.\n"),
00182     capitalize(getuid())));
00183     printf("%s wurde herbeizitiert.\n",living->Name(WER));
00184     return 1;
00185   }
00186   printf("Das Lebewesen '%s' konnte nicht gefunden werden.\n",
00187          capitalize(str));
00188   return 1;
00189 }

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

static int _verfolge ( string  str  )  [static]

Definiert in Zeile 114 der Datei players.c.

Benutzt find_living(), find_player(), lv(), match_living(), notify_fail(), P_PURSUERS, Query() und WEN.

00115 {
00116   mixed *pur, lv;
00117   object lv2;
00118 
00119   if (!strlen(str))
00120   {
00121     if (!pointerp(pur=Query(P_PURSUERS)))
00122       return notify_fail("Du verfolgst doch ueberhaupt niemanden.\n"),0;
00123     if (pur[0]) pur[0]->RemovePursuer(this_object());
00124     printf("Verfolgungsmodus abgeschaltet.\n");
00125     return 1;
00126   }
00127   str=lower_case(str);
00128   if (intp(lv=match_living(str)))
00129   {
00130     if (lv==-2)
00131       write("Kein solches Wesen gefunden.\n");
00132     else
00133       printf("verfolge: '%s' ist nicht eindeutig.\n",capitalize(str));
00134     return 1;
00135   }
00136   if (!(lv2=find_player(lv))) lv2=find_living(lv);
00137   if (!lv2)
00138   {
00139     printf("verfolge: Unerklaerlicher Fehler beim Finden von '%s'.\n",
00140            capitalize(lv));
00141     return 1;
00142   }
00143   lv2->AddPursuer(this_object());
00144   printf("Du verfolgst jetzt %s.\n",lv2->name(WEN));
00145   lv2->TakeFollowers();
00146   return 1;
00147 }

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

static int _zap ( string  str  )  [static]

Definiert in Zeile 53 der Datei players.c.

Benutzt _zap_message(), message, P_ZAP_MSG, QueryProp(), spieler, USAGE und WEN.

00054 {
00055     object opfer;
00056     string *message, dummy;
00057     int spieler;
00058 
00059     if (!str) return USAGE("zap <name>");
00060     if (sscanf( str, "spieler %s", dummy ))
00061     {
00062       str = dummy;
00063       spieler = 1;
00064     }
00065     if (opfer=present(str,environment()))
00066     {
00067       if ( !living(opfer) )
00068       {
00069         printf("%s ist doch gar kein Lebewesen!\n",capitalize(str) );
00070         return 1;
00071       }
00072       if (query_once_interactive(opfer)&&!spieler )
00073       {
00074         printf( "Spieler kannst Du nur mit der Syntax 'zap spieler <name>' "
00075                 "toeten!\n" );
00076         return 1;
00077       }
00078       else
00079         if ( !query_once_interactive(opfer) && spieler )
00080         {
00081           printf( "Aber %s ist doch gar kein Spieler!\n",capitalize(str));
00082           return 1;
00083         }
00084 
00085       message = QueryProp(P_ZAP_MSG);
00086 
00087       if ( !pointerp(message) || sizeof(message) != 3 ){
00088           tell_room(environment(),sprintf("%s beschwoert einen Blitz "
00089                 "vom Himmel.\n",capitalize(getuid())),({ this_object() }));
00090           printf("Du toetest %s.\n",opfer->name( WEN,2));
00091       }
00092       else
00093       {
00094         printf(_zap_message(message[0],opfer));
00095         tell_room(environment(),_zap_message(message[1],opfer),
00096              ({this_player(),opfer}));
00097         tell_object(opfer,_zap_message(message[2],opfer));
00098       }
00099 
00100       opfer->die();
00101       return 1;
00102   }
00103   else{
00104       printf("Sowas siehst Du hier nicht.\n");
00105       return 1;
00106   }
00107 }

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

private string _zap_message ( string  str,
object  obj 
)

Definiert in Zeile 43 der Datei players.c.

Benutzt name, WEM, WEN, WER und WESSEN.

Wird benutzt von _zap().

00044 {
00045   str=regreplace(str,"@@wer@@",(string)obj->name(WER,2),1);
00046   str=regreplace(str,"@@wessen@@",(string)obj->name(WESSEN,2),1);
00047   str=regreplace(str,"@@wem@@",(string)obj->name(WEM,2),1);
00048   str=regreplace(str,"@@wen@@",(string)obj->name(WEN,2),1);
00049   str=regreplace(str,"@@ich@@",name(WER,2),1);
00050   return capitalize(str);
00051 }

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

static int _zwinge ( string  str  )  [static]

Definiert in Zeile 280 der Datei players.c.

00281 {
00282   object living;
00283   string what, rest;
00284   string living_name;
00285 
00286   str = _unparsed_args();
00287   if(!str|| sscanf( str, "%s %s", living_name, what ) != 2 )
00288     return _notify_fail("Zwinge WEN zu WAS?\n"),0;
00289   if( sscanf( what, "zu %s", rest ) == 1 ) what = rest;
00290   if (!(living = find_living(living_name)))
00291     return printf ("Ein Lebewesen namens '%s' konnte nicht gefunden werden!\n",
00292                    capitalize(living_name)),1;
00293   if (living->command_me(what))
00294   {
00295     printf("Du zwingst %s zu \"%s\".\n",capitalize(living_name),what);
00296     if (!IS_ARCH(this_object())&&getuid()!=(string)living->QueryProp(P_TESTPLAYER))
00297       log_file(SHELLLOG("ZWINGE"),
00298                sprintf("%s zwingt %s (%s) zu %s [%s]\n",
00299                        capitalize(getuid()),living->Name(),capitalize(getuid(living)),
00300                        what,dtime(time())));
00301   }
00302   else
00303     write("Hat leider nicht geklappt!\n");
00304   return 1;
00305 }

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