#include <living/skills.h>#include <living/clothing.h>#include <thing/properties.h>#include <wizlevels.h>#include <new_skills.h>#include <language.h>#include <defines.h>#include <class.h>#include <sys_debug.h>
gehe zum Quellcode dieser Datei
Makrodefinitionen | |
| #define | NEED_PROTOTYPES |
Funktionen | |
| public string | _query_internal_extralook () |
| public varargs int | AddExtraLook (string look, int duration, string key, string lookende, object ob) |
| public int | RemoveExtraLook (string key) |
| void | create () |
| string | condition () |
| varargs string | long () |
| varargs string | name (int casus, int demonst) |
| static int | _query_gender () |
| static string | _query_real_race () |
| static mixed | _set_name (mixed nm) |
| int | _query_container () |
| int | is_class_member (mixed str) |
| mapping | _query_material () |
| static int | _query_player_light () |
| varargs int | CannotSee (int silent) |
Variablen | |
| inherit std container | description |
| #define NEED_PROTOTYPES |
Definiert in Zeile 14 der Datei description.c.
| int _query_container | ( | ) |
Definiert in Zeile 288 der Datei description.c.
| static int _query_gender | ( | ) | [static] |
Definiert in Zeile 265 der Datei description.c.
Benutzt P_FROG, P_GENDER, Query() und QueryProp().

| public string _query_internal_extralook | ( | ) |
Definiert in Zeile 27 der Datei description.c.
Benutzt abs, F_VALUE, m_delete(), ME, P_INTERNAL_EXTRA_LOOK, Query() und zeit.
00027 { 00028 mixed xl; 00029 int zeit; 00030 string res, look=""; 00031 00032 xl=Query(P_INTERNAL_EXTRA_LOOK,F_VALUE); 00033 if (!mappingp(xl)) 00034 return(0); 00035 00036 foreach(string key, mapping xld: xl) { 00037 if (intp(zeit=xld["xlduration"])) { 00038 //hat offenbar nen Ablaufdatum 00039 if ( (zeit > 0 && zeit < time()) || 00040 (zeit < 0 && abs(zeit) < object_time(ME)) ) { 00041 // Zeit abgelaufen oder 00042 // negative "Ablaufzeit" und das Objekt ist neuer als die 00043 // Eintragzeit, also loeschen und weiter (ja, das geht. ;-) und xld 00044 // hat das Eintragsmapping ja noch, weitere Benutzung also moeglich.) 00045 efun::m_delete(xl,key); 00046 // ggf. Meldung ausgeben 00047 if (interactive(ME)) { 00048 if (strlen(xld["xlende"])) { 00049 tell_object(ME,xld["xlende"]); 00050 } 00051 //kein einfacher String, aber Objekt+Funktion gegeben? 00052 else if (strlen(xld["xlendefun"]) && strlen(xld["xlobjectname"]) && 00053 (!catch(res=call_other(xld["xlobjectname"],xld["xlendefun"],ME) 00054 ;publish))) { 00055 if (stringp(res) && strlen(res)) 00056 tell_object(ME,res); 00057 } 00058 } 00059 continue; 00060 } 00061 } 00062 // Der Eintrag ist offenbar noch gueltig, Meldung anhaengen, bzw. via 00063 // Funktionsaufruf beschaffen. 00064 if (strlen(xld["xllook"])) 00065 look+=xld["xllook"]; 00066 else if (strlen(xld["xlfun"]) && strlen(xld["xlobjectname"]) && 00067 (!catch(res=call_other(xld["xlobjectname"],xld["xlfun"],ME);publish))) { 00068 if (!stringp(res) || !strlen(res)) { 00069 // keinen String oder leeren String gekriegt -> ueberspringen. 00070 continue; 00071 } 00072 else 00073 look+=res; 00074 } 00075 } 00076 // fertig. Wenn look nicht leer ist, zurueckgeben, sonst 0. 00077 if (strlen(look)) 00078 return(look); 00079 else 00080 return(0); 00081 }

| mapping _query_material | ( | ) |
Definiert in Zeile 313 der Datei description.c.
Benutzt P_MATERIAL und Query().
00313 { 00314 mixed res; 00315 00316 if (mappingp(res=Query(P_MATERIAL))) 00317 return res; 00318 return ([MAT_MISC_LIVING:100]); 00319 }

| static int _query_player_light | ( | ) | [static] |
Definiert in Zeile 321 der Datei description.c.
Benutzt _query_int_light(), P_LIGHT_MODIFIER und QueryProp().
00322 { return _query_int_light()+QueryProp(P_LIGHT_MODIFIER); }

| static string _query_real_race | ( | ) | [static] |
Definiert in Zeile 274 der Datei description.c.
Benutzt F_VALUE, P_RACE, P_REAL_RACE, Query() und QueryProp().
00275 { 00276 return Query(P_REAL_RACE,F_VALUE)||QueryProp(P_RACE); 00277 }

| static mixed _set_name | ( | mixed | nm | ) | [static] |
Definiert in Zeile 279 der Datei description.c.
Benutzt P_NAME, Set() und set_living_name().
00280 { 00281 string lvnam; 00282 lvnam = nm; 00283 if(pointerp(nm)) lvnam = nm[0]; 00284 set_living_name(lower_case(lvnam)); 00285 return Set(P_NAME, nm); 00286 }

| public varargs int AddExtraLook | ( | string | look, | |
| int | duration, | |||
| string | key, | |||
| string | lookende, | |||
| object | ob | |||
| ) |
Definiert in Zeile 83 der Datei description.c.
Benutzt BLUE_NAME, break_string(), BS_LEAVE_MY_LFS, F_VALUE, ME, P_INTERNAL_EXTRA_LOOK, Query(), replace_personal() und Set().
00084 { 00085 mapping xl; 00086 string oname; 00087 if (!stringp(key) || !strlen(key)) { 00088 // Automatisch erzeugen, wenn moeglich 00089 if (!objectp(previous_object()) || 00090 !stringp(key=object_name(previous_object())) || !strlen(key)) 00091 return(-1); 00092 } 00093 00094 if (!stringp(look) || !strlen(look)) 00095 return(-2); 00096 if (!intp(duration)) 00097 return(-3); 00098 00099 xl=Query(P_INTERNAL_EXTRA_LOOK,F_VALUE); // dran denken: liefert referenz zurueck 00100 if (!mappingp(xl)) { 00101 Set(P_INTERNAL_EXTRA_LOOK, xl=([]) ); 00102 } 00103 00104 // kein Automatisches Ueberschreiben. 00105 if (member(xl,key)) 00106 return(-4); 00107 00108 // neg. Werte: "bis Ende/reboot", abs(duration) == Eintragzeit 00109 // 0: "fuer ewig", >0: Zeitdauer in Sekunden 00110 if (duration > 0) 00111 duration+=time(); // hoffentlich gibt es reichtzeitig 64bit-Ints 00112 else if (duration < 0) 00113 duration=negate(time()); 00114 // 0 bleibt, wie es ist. 00115 00116 if (objectp(ob)) { 00117 // Funktionsname und Objektname (als Name, damit es auch noch geht, wenn 00118 // das Objekt entladen wurde, Crash/reboot war etc.) speichern 00119 if (!oname=object_name(blueprint(ob))) 00120 oname=BLUE_NAME(ob); //BLUE_NAME nimmt explode()... 00121 xl[key]=(["xlobjectname":oname, 00122 "xlfun": look, 00123 ]); 00124 // ggf. Name der Funktion speichern, die bei Ablauf aufgerufen wird. 00125 if (stringp(lookende) && strlen(lookende)) 00126 xl[key]["xlendefun"]=lookende; 00127 } 00128 else { 00129 // Einfacher Eintrag, nur den bearbeiteten String merken. ;-) 00130 xl[key]=(["xllook": break_string(replace_personal(look,({ME}),1),78, 00131 "",BS_LEAVE_MY_LFS), 00132 ]); 00133 // ggf. Meldung speichern, die bei Ablauf ausgegeben werden soll. 00134 if (stringp(lookende) && strlen(lookende)) { 00135 xl[key]["xlende"]=break_string(replace_personal(lookende,({ME}),1),78, 00136 "",BS_LEAVE_MY_LFS); 00137 } 00138 } 00139 // Endezeit vermerken. 00140 if (duration != 0) 00141 xl[key]["xlduration"]=duration; 00142 00143 // Kein Set noetig, weil Query das Mapping ja als Referenz lieferte. 00144 return(1); 00145 }

| varargs int CannotSee | ( | int | silent | ) |
Definiert in Zeile 324 der Datei description.c.
Benutzt IS_LEARNER, P_BLIND, P_PLAYER_LIGHT, P_WANTS_TO_LEARN, Query(), QueryProp(), SK_NIGHTVISION und UseSkill().
Wird benutzt von _equipment(), _examine(), _inventory(), _look(), look_into() und show_exits().
00325 { 00326 string is_blind; 00327 if (is_blind = QueryProp(P_BLIND)) { 00328 if (!silent) { 00329 if (stringp(is_blind)) 00330 tell_object(this_object(), is_blind); 00331 else tell_object(this_object(), "Du bist blind!\n"); 00332 } 00333 return 2; 00334 } 00335 if (UseSkill(SK_NIGHTVISION)<=0 && 00336 environment() && QueryProp(P_PLAYER_LIGHT)<=0 && 00337 (!IS_LEARNER(this_object()) || !Query(P_WANTS_TO_LEARN))) 00338 { 00339 if (!silent) tell_object(this_object(), "Es ist zu dunkel!\n"); 00340 return 1; 00341 } 00342 return 0; 00343 }


| string condition | ( | ) |
Definiert in Zeile 178 der Datei description.c.
Benutzt P_HP, P_MAX_HP, QueryPronoun(), QueryProp() und WER.
Wird benutzt von long().
00179 { 00180 int hpnt, max_hpnt, perc; 00181 00182 hpnt = QueryProp( P_HP ); 00183 max_hpnt = QueryProp( P_MAX_HP ); 00184 00185 if(max_hpnt>0 && hpnt>0) 00186 perc=100*hpnt/max_hpnt; 00187 00188 switch(perc) { 00189 case 0..9: 00190 return capitalize(QueryPronoun(WER))+" steht auf der Schwelle des Todes.\n"; 00191 case 10..19: 00192 return capitalize(QueryPronoun(WER))+" braucht dringend einen Arzt.\n"; 00193 case 20..29: 00194 return capitalize(QueryPronoun(WER))+" ist in keiner guten Verfassung.\n"; 00195 case 30..39: 00196 return capitalize(QueryPronoun(WER))+" wankt bereits bedenklich.\n"; 00197 case 40..49: 00198 return capitalize(QueryPronoun(WER))+" macht einen mitgenommenen Eindruck.\n"; 00199 case 50..59: 00200 return capitalize(QueryPronoun(WER))+" sieht nicht mehr taufrisch aus.\n"; 00201 case 60..69: 00202 return capitalize(QueryPronoun(WER))+" ist leicht angeschlagen.\n"; 00203 case 70..79: 00204 return capitalize(QueryPronoun(WER))+" fuehlte sich heute schon besser.\n"; 00205 case 80..89: 00206 return capitalize(QueryPronoun(WER))+" ist schon etwas geschwaecht.\n"; 00207 } 00208 //fall-through 00209 return capitalize(QueryPronoun(WER))+" ist absolut fit.\n"; 00210 }


| void create | ( | ) |
Definiert in Zeile 166 der Datei description.c.
Benutzt AddId(), create(), F_MODE, F_MODE_AS, P_CLOTHING, P_GENDER, P_INTERNAL_EXTRA_LOOK, P_LIGHT_TRANSPARENCY, PROTECTED, SAVE, Set() und SetProp().
00167 { 00168 ::create(); 00169 Set(P_GENDER, SAVE, F_MODE); 00170 // Extralook-Property speichern und vor manueller Aenderung schuetzen 00171 // EMs duerfen, die wissen hoffentlich, was sie tun. 00172 Set(P_INTERNAL_EXTRA_LOOK, SAVE|PROTECTED, F_MODE_AS); 00173 SetProp(P_LIGHT_TRANSPARENCY, 0); 00174 SetProp(P_CLOTHING,({})); 00175 AddId("Living"); 00176 }

| int is_class_member | ( | mixed | str | ) |
Definiert in Zeile 293 der Datei description.c.
Benutzt P_RACE, QueryProp() und race.
00293 { 00294 // Keine Klasse, keine Mitgliedschaft ... 00295 if (!str || (!stringp(str) && !pointerp(str)) || str=="") 00296 return 0; 00297 00298 if (::is_class_member(str)) 00299 return 1; 00300 00301 if (stringp(str)) 00302 str = ({str}); 00303 00304 // Rassen werden als implizite Klassen aufgefasst. 00305 // TODO: Pruefen, ob das unbedingt hart-kodiert sein muss. 00306 string race = QueryProp(P_RACE); 00307 if ( stringp(race) && member( str, lower_case(race) ) > -1 ) 00308 return 1; 00309 else 00310 return 0; 00311 }

| varargs string long | ( | ) |
Definiert in Zeile 212 der Datei description.c.
Benutzt condition(), filter_ldfied(), make_invlist(), ME, ob(), P_EXTRA_LOOK, P_INTERNAL_EXTRA_LOOK, P_LONG, P_TRANSPARENT, PL, process_string(), QueryPronoun(), QueryProp() und WER.
00212 { 00213 string str, cap_pronoun; 00214 string descr, invl,tmp,exl; 00215 int hpnt, max_hpnt; 00216 mixed filter_ldfied; 00217 object ob; 00218 00219 str = process_string( QueryProp(P_LONG) ); 00220 if(!stringp(str)) str = ""; 00221 00222 str += condition(); 00223 00224 // Extralook 00225 if(stringp(tmp = QueryProp(P_EXTRA_LOOK))) 00226 str += tmp; 00227 if (stringp(tmp = QueryProp(P_INTERNAL_EXTRA_LOOK))) 00228 str += tmp; 00229 for(ob = first_inventory(ME); ob; ob = next_inventory(ob)) 00230 if(exl = ob->QueryProp(P_EXTRA_LOOK)) 00231 str += exl; 00232 else if(exl = ob->extra_look()) 00233 str += exl; // TO BE REMOVED 00234 00235 00236 if(filter_ldfied = QueryProp(P_TRANSPARENT)) 00237 { 00238 invl = make_invlist(PL, all_inventory(ME)); 00239 if(invl != "") 00240 str += capitalize(QueryPronoun(WER))+" traegt bei sich:\n" + invl; 00241 } 00242 return str; 00243 }

| varargs string name | ( | int | casus, | |
| int | demonst | |||
| ) |
Definiert in Zeile 245 der Datei description.c.
Benutzt name, P_ARTICLE, P_FROG, QueryArticle(), QueryProp(), RAW, SetProp() und WESSEN.
00246 { 00247 string s; 00248 00249 if( QueryProp( P_INVIS ) ) 00250 { 00251 if( casus == RAW ) return "Jemand"; 00252 return ({"Jemand","Jemands","Jemandem","Jemanden"})[casus]; 00253 } 00254 if (QueryProp(P_FROG) && casus != RAW ) 00255 { 00256 SetProp(P_ARTICLE,1); 00257 s=QueryArticle(casus,0)+"Frosch"; 00258 if (casus==WESSEN) s += "es"; 00259 SetProp(P_ARTICLE,0); 00260 return s; 00261 } 00262 return ::name( casus, demonst ); 00263 }

| public int RemoveExtraLook | ( | string | key | ) |
Definiert in Zeile 147 der Datei description.c.
Benutzt F_VALUE, m_delete(), P_INTERNAL_EXTRA_LOOK und Query().
00147 { 00148 mapping xl; 00149 if (!stringp(key) || !strlen(key)) { 00150 // Automatisch erzeugen, wenn moeglich 00151 if (!objectp(previous_object()) || 00152 !stringp(key=object_name(previous_object())) || !strlen(key)) 00153 return(-1); 00154 } 00155 xl=Query(P_INTERNAL_EXTRA_LOOK,F_VALUE); // dran denken: liefert referenz zurueck 00156 if (!mappingp(xl)) 00157 return (-2); 00158 if (!member(xl,key)) 00159 return(-2); 00160 00161 efun::m_delete(xl,key); 00162 // Kein Set noetig, weil Query das Mapping ja als Referenz lieferte. 00163 return(1); 00164 }

| inherit std container description |
Definiert in Zeile 12 der Datei description.c.
1.6.3