#include <config.h>#include <properties.h>#include <new_skills.h>#include <exploration.h>#include <questmaster.h>#include <scoremaster.h>#include "lepmaster.h"

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) |
| #define DEBUG | ( | x, | |||
| y | ) |
Definiert in Zeile 56 der Datei lepmaster.c.
| #define REQ_TEXT1 |
([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 |
([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.
| void create | ( | ) |
Definiert in Zeile 60 der Datei lepmaster.c.
| public nomask int query_prevent_shadow | ( | ) |
Definiert in Zeile 65 der Datei lepmaster.c.
| 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 }

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

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

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


1.6.3