lepmaster.c-Dateireferenz

#include <config.h>
#include <properties.h>
#include <new_skills.h>
#include <exploration.h>
#include <questmaster.h>
#include <scoremaster.h>
#include "lepmaster.h"
Include-Abhängigkeitsdiagramm für lepmaster.c:
Dieser Graph zeigt, welche Datei direkt oder indirekt diese Datei enthält:

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define XP_FAC   ([1:10,2:40,3:150,4:600,5:2250,6:9000,7:35000,8:140000,9:500000])
#define REQ_TEXT1
#define REQ_TEXT2
#define DEBUG(x, y)

Funktionen

void create ()
public nomask int query_prevent_shadow ()
nomask int QueryLEP ()
string QueryForschung ()
nomask mixed QueryWizardRequirements (object player)
nomask int QueryReadyForWiz (object player)
nomask string QueryReadyForWizText (object player)

Makro-Dokumentation

#define DEBUG ( x,
 ) 

Definiert in Zeile 56 der Datei lepmaster.c.

#define REQ_TEXT1
Wert:
([0:"unglaublich viel", \
                  1:"unglaublich viel", \
                                  2:"enorm viel", \
                                  3:"sehr viel", \
                                  4:"viel", \
                                  5:"einiges", \
                                  6:"etwas", \
                                  7:"wenig", \
                  8:"sehr wenig", \
                  9:"kaum etwas" ])

Definiert in Zeile 34 der Datei lepmaster.c.

Wird benutzt von QueryWizardRequirements().

#define REQ_TEXT2
Wert:
([0:"unglaublich viele", \
                  1:"unglaublich viele", \
                                  2:"enorm viele", \
                                  3:"sehr viele", \
                                  4:"viele", \
                                  5:"einige", \
                                  6:"ein paar", \
                                  7:"wenige", \
                  8:"sehr wenige", \
                  9:"kaum" ])

Definiert in Zeile 45 der Datei lepmaster.c.

Wird benutzt von QueryWizardRequirements().

#define XP_FAC   ([1:10,2:40,3:150,4:600,5:2250,6:9000,7:35000,8:140000,9:500000])

Definiert in Zeile 32 der Datei lepmaster.c.


Dokumentation der Funktionen

void create (  ) 

Definiert in Zeile 60 der Datei lepmaster.c.

00061 {
00062   seteuid(getuid());
00063 }

public nomask int query_prevent_shadow (  ) 

Definiert in Zeile 65 der Datei lepmaster.c.

00066 {
00067     return 1;
00068 }

string QueryForschung (  ) 

Definiert in Zeile 137 der Datei lepmaster.c.

Benutzt avg, break_string(), EPMASTER, MIN_EP und MUDNAME.

00138 {
00139   int max, my, avg;
00140   string ret;
00141 
00142   if ((my=(int)EPMASTER->QueryExplorationPoints(getuid(previous_object()))) < MIN_EP)
00143     return "Du kennst Dich im "MUDNAME" so gut wie gar nicht aus.\n";
00144 
00145   my *= 100;
00146   max = my/(int)EPMASTER->QueryMaxEP();
00147   avg = my/(int)EPMASTER->QueryAverage();
00148 
00149   ret = "Verglichen mit Deinen Mitspielern, kennst Du Dich im "MUDNAME" ";
00150   switch(avg) {
00151   case 0..10:
00152     ret += "kaum";
00153     break;
00154   case 11..40:
00155     ret += "aeusserst schlecht";
00156     break;
00157   case 41..56:
00158     ret += "sehr schlecht";
00159     break;
00160   case 57..72:
00161     ret += "schlecht";
00162     break;
00163   case 73..93:
00164     ret += "unterdurchschnittlich";
00165     break;
00166   case 94..109:
00167     ret += "durchschnittlich gut";
00168     break;
00169   case 110..125:
00170     ret += "besser als der Durchschnitt";
00171     break;
00172   case 126..145:
00173     ret += "recht gut";
00174     break;
00175   case 146..170:
00176     ret += "ziemlich gut";
00177     break;
00178   case 171..210:
00179     ret += "gut";
00180     break;
00181   case 211..300:
00182     ret += "sehr gut";
00183     break;
00184   case 301..400:
00185     ret += "ausserordentlich gut";
00186     break;
00187   case 401..500:
00188     ret += "unheimlich gut";
00189     break;
00190   default:
00191     ret += "einfach hervorragend";
00192     break;
00193   }
00194   ret += " aus.\nAbsolut gesehen ";
00195 
00196   switch(max) {
00197   case 0..5:
00198     ret += "kennst Du nur wenig vom "MUDNAME".";
00199     break;
00200   case 6..10:
00201     ret += "solltest Du Dich vielleicht noch genauer umsehen.";
00202     break;
00203   case 11..17:
00204     ret += "bist Du durchaus schon herumgekommen.";
00205     break;
00206   case 18..25:
00207     ret += "hast Du schon einiges gesehen.";
00208     break;
00209   case 26..35:
00210     ret += "bist Du schon weit herumgekommen.";
00211     break;
00212   case 36..50:
00213     ret += "koenntest Du eigentlich einen Reisefuehrer herausbringen.";
00214     break;
00215   case 51..75:
00216     ret += "hast Du schon sehr viel gesehen.";
00217     break;
00218   default:
00219     ret += "besitzt Du eine hervorragende Ortskenntnis.";
00220   }
00221   return break_string(ret, 78, 0, 1);
00222 }

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

nomask int QueryLEP (  ) 

Definiert in Zeile 70 der Datei lepmaster.c.

Benutzt DEBUG, EPMASTER, i, P_GUILD_RATING, P_POTIONROOMS, P_QP, P_XP, pl, QM und SCOREMASTER.

00071 {
00072   object pl;
00073   int ret, val, i, l;
00074 
00075   if (!pl=previous_object()) return 0;
00076 
00077   //  Grundoffset 100, da man mit Level 1 statt 0 startet
00078   ret = 100;
00079 
00080   // Beitrag A: Stupse von NPC-Erstkills
00081   ret += (int)SCOREMASTER->QueryKillPoints(pl);
00082 
00083   DEBUG("Nach KP: ret = %d\n", ret);
00084 
00085   // Beitrag B: Stupse von geloesten Miniquests
00086   ret += (int)QM->QueryMiniQuestPoints(pl);
00087 
00088   DEBUG("Nach MQP: ret = %d\n", ret);
00089 
00090   // Beitrag C: Questpunkte
00091   //  werden 1:1 uebernommen;
00092   ret += (int)pl->QueryProp(P_QP);
00093 
00094   DEBUG("Nach QP: ret = %d\n", ret);
00095 
00096   // Beitrag D: Erfahrungspunkte
00097   //  Stupse = XPs ^ 0.32
00098   val = (int)pl->QueryProp(P_XP);
00099 
00100   if (val<1) l=0;
00101   else l=to_int(exp(log(to_float(val))*0.32));
00102 
00103   ret += l;
00104 
00105   DEBUG("Nach XP: ret = %d\n", ret);
00106 
00107   // Beitrag E: Zaubertraenke
00108   //  Gefundene Traenke geben 5 LEP
00109   //  Die Heiltraenke geben zusaetzlich 10+20+30+40 LEP
00110   i = 80 - (val = sizeof((int *)pl->QueryProp(P_POTIONROOMS)));
00111 
00112   ret += 5*i + ([ 0: 100, 1: 60, 2: 30, 3: 10])[val];
00113 
00114   // Keine Stufenpunkte fuer gefundene "fremde" ZTs mehr, da diese
00115   // von neuen Spielern nicht mehr erreichbar sind.
00116   // ret += QueryProp(P_BONUS_POTIONS);
00117   DEBUG("Nach ZT: ret = %d\n", ret);
00118 
00119   // Beitrag F: Forscherpunkte
00120   //  Pro FP gibt es 6 Stufenpunkte
00121   ret += 6 * (int)EPMASTER->QueryExplorationPoints(pl);
00122 
00123   DEBUG("Nach FP: ret = %d\n", ret);
00124 
00125   // Beitrag G: Gildeneinstufung
00126   //  Maximale Gildeneinstufung (10000) entspricht vier Leveln
00127   ret += ((int)pl->QueryProp(P_GUILD_RATING))/25;
00128 
00129   DEBUG("Nach GR: ret = %d\n", ret);
00130 
00131   // Ausgabe gibt es nur in 20er-Schritten
00132   ret -= ret%20;
00133 
00134   return (ret > 100) ? ret : 100;
00135 }

nomask int QueryReadyForWiz ( object  player  ) 

Definiert in Zeile 328 der Datei lepmaster.c.

Benutzt QueryWizardRequirements().

00329 {
00330   mixed r;
00331   
00332   r = QueryWizardRequirements(player);
00333   
00334   if (!pointerp(r) && sizeof(r)!=2 && !intp(r[0]))
00335     return -1;
00336 
00337   return r[0];
00338 }

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

nomask string QueryReadyForWizText ( object  player  ) 

Definiert in Zeile 340 der Datei lepmaster.c.

Benutzt QueryWizardRequirements().

00341 {
00342   mixed r;
00343 
00344   r = QueryWizardRequirements(player);
00345 
00346   if (!pointerp(r) && sizeof(r)!=2 && !stringp(r[1]))
00347     return "Hier ist etwas schief gegangen, bitte verstaendige einen "
00348       +"Erzmagier.";
00349 
00350   return r[1];
00351 }

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

nomask mixed QueryWizardRequirements ( object  player  ) 

Definiert in Zeile 225 der Datei lepmaster.c.

Benutzt break_string(), DEBUG, EPMASTER, i, MUDNAME, P_LEP, P_LEVEL, P_POTIONROOMS, P_QP, REQ_EP, REQ_K, REQ_LEP, REQ_P, REQ_QP, REQ_TEXT1, REQ_TEXT2 und SCOREMASTER.

Wird benutzt von QueryReadyForWiz() und QueryReadyForWizText().

00226 {
00227   // Diese Funktion gibt ein 2-elementiges Array zurueck, in dem im ersten
00228   // Element steht, ob der Spieler Seher werden kann (1) oder
00229   // nicht (0) und im zweiten Element steht, was genau ihm noch 
00230   // fehlt. 
00231   // Fehlercode ist ({-1, ""})
00232 
00233   // Die Umrechnungsfaktoren wurden einfach aus QueryLEP uebernommen; ggf.
00234   // kann man das einmal in Unterfunktionen auslagern. 
00235 
00236   mixed ret;
00237   string s; 
00238   int i,z,val; 
00239 
00240   ret = ({-1, "Hier ist etwas schief gelaufen. Bitte einen Erzmagier\n"
00241                     +"benachrichtigen.\n"});
00242   s = "";
00243   i = 0; 
00244 
00245   if(!player || !objectp(player))
00246     player=(this_player()?this_player():this_interactive());
00247 
00248   if(!player)
00249     return ({-1,""});
00250 
00251   DEBUG("Es geht um: %O\n", player);
00252 
00253   // Abenteuerpunkte
00254   DEBUG("Abenteuerpunkte: %d ("+REQ_QP+")\n", player->QueryProp(P_QP));
00255   if (player->QueryProp(P_QP) < REQ_QP) {
00256     s += sprintf(" * Dir fehlen noch mindestens %d Abenteuerpunkte.\n", 
00257                                  REQ_QP - (int)player->QueryProp(P_QP));
00258     i--;
00259   }
00260 
00261   // Forscherpunkte
00262   z = 6 * (int)EPMASTER->QueryExplorationPoints(player);
00263   DEBUG("Forscherpunkte: %d ("+REQ_EP+")\n", z);
00264   if (z < REQ_EP) {
00265     s += sprintf(" * Du kennst Dich im "MUDNAME" noch nicht genug aus, "
00266                                  +"genau genommen\n   musst Du Dir noch %s ansehen.\n", 
00267                                  REQ_TEXT1[(z*10/REQ_EP)] );
00268     i--;
00269   }
00270 
00271   // Zaubertraenke
00272   z = 80 - (val = sizeof((int*)player->QueryProp(P_POTIONROOMS)));
00273   z = z*5 + ([0:100, 1:60, 2:30, 3:10])[val];
00274   DEBUG("Zaubertraenke: %d ("+REQ_P+")\n", z);
00275   if (z < REQ_P) {
00276     s += sprintf(" * Du musst noch einige Zaubertraenke (ca. %d) suchen.\n",
00277                                  (REQ_P - z)/5 );
00278     i--;
00279   }
00280 
00281   // Erstkills
00282   z = (int)SCOREMASTER->QueryKillPoints(player);
00283   DEBUG("Erstkills: %d ("+REQ_K+")\n", z);
00284   if (z < REQ_K) {
00285         s += sprintf(" * Du hast noch nicht genuegend wuerdige Gegner erlegt, genau "
00286                  +"genommen\n   musst Du noch %s wuerdige Monster toeten.\n",
00287                  REQ_TEXT2[(z*10/REQ_K)] );;
00288     i--;
00289   }
00290     
00291   // Restliche Stufenpunkte 
00292   DEBUG("Stufenpunkte: %d ("+REQ_LEP+")\n", player->QueryProp(P_LEP));
00293   if ((int)(player->QueryProp(P_LEP)) < REQ_LEP) {
00294     s += sprintf(" * Du musst mindestens %d Stufenpunkte, entspricht Stufe %d, "
00295                                  "erreichen.\n", REQ_LEP, REQ_LEP/100);
00296     i--;
00297   }
00298   
00299   // Demnach mindestens REQ/100-Level 
00300   DEBUG("Level: %d ("+REQ_LEP/100+")\n", player->QueryProp(P_LEVEL));
00301   if ((int)player->QueryProp(P_LEVEL) < (REQ_LEP/100)) {
00302     s += sprintf(" * Du musst mindestens Stufe %d erreichen.\n", REQ_LEP/100);
00303     i--;
00304   }
00305   
00306   if(i<0) {
00307     ret = ({-1, 
00308                  sprintf("Du hast noch nicht alle Seher-Anforderungen erfuellt.\n"
00309                                 +"Im einzelnen fehlt Dir folgendes:\n\n%s\n"
00310                                  +break_string("Falls Du Dir nun dennoch unsicher bist, "
00311   +"welche Anforderungen Du erfuellen musst, dann "
00312   +"schaue bei 'hilfe seher' und 'hilfe stufenpunkte' doch einfach noch "
00313   +"einmal nach. Sind dann "
00314   +"immer noch Dinge offen oder unklar, so sprich einfach einen "
00315                                                                   +"der Erzmagier an.", 78,0,1),s) });
00316   } 
00317     
00318   if (i==0) {
00319     ret = ({1, break_string(
00320                        "Du hast alle Seher-Anforderungen erfuellt. Wende Dich doch "
00321                        +"einmal an Merlin und frage ihn, ob er Dich befoerdert.", 
00322                        78,0,1) });
00323   }
00324 
00325   return ret; 
00326 }

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

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

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