#include <combat.h>#include <language.h>#include <properties.h>#include <wizlevels.h>
gehe zum Quellcode dieser Datei
Makrodefinitionen | |
| #define | SAVEFILE "/secure/ARCH/awmaster" |
| #define | ADUMPFILE "/log/ARCH/RUESTUNGEN" |
| #define | DDUMPFILE "/log/ARCH/DAMAGERS" |
| #define | WDUMPFILE "/log/ARCH/WAFFEN" |
| #define | ACCNGFILE "/log/ARCH/ACCHANGE" |
| #define | AWF_PUTON 1 |
| #define | AWF_PUTOFF 2 |
| #define | AWF_BOOST 4 |
| #define | AWF_ZAUBER 8 |
| #define | AWF_RESIST 16 |
| #define | AWM_TYPE 0 |
| #define | AWM_CLASS 1 |
| #define | AWM_EFF_CLASS 2 |
| #define | AWM_FLAGS 3 |
| #define | AWM_WEIGHT 4 |
| #define | AWM_VALUE 5 |
| #define | AWM_HANDS 6 |
| #define | AWM_D_TYPE 7 |
| #define | AWM_X_CLASS 8 |
| #define | AWM_TIME 9 |
Funktionen | |
| static private int | allowed () |
| void | create () |
| void | save_me () |
| void | reset () |
| public varargs int | remove (int silent) |
| static void | NotifyACChange (object ob, string fn) |
| int | xflags (object ob) |
| void | RegisterArmour () |
| void | RegisterWeapon () |
| void | RegisterDamager (object dam_ob, int old_dam, int new_dam) |
| string | dtdump (mixed arg) |
| int | Dump (mixed what) |
| int | Unregister (string what) |
| int | ResetDamagers () |
Variablen | |
| mapping | armours |
| mapping | weapons |
| mapping | damagers |
| #define ACCNGFILE "/log/ARCH/ACCHANGE" |
Definiert in Zeile 24 der Datei awmaster.c.
Wird benutzt von NotifyACChange().
| #define ADUMPFILE "/log/ARCH/RUESTUNGEN" |
Definiert in Zeile 21 der Datei awmaster.c.
| #define AWF_BOOST 4 |
Definiert in Zeile 30 der Datei awmaster.c.
| #define AWF_PUTOFF 2 |
Definiert in Zeile 29 der Datei awmaster.c.
| #define AWF_PUTON 1 |
Definiert in Zeile 28 der Datei awmaster.c.
| #define AWF_RESIST 16 |
Definiert in Zeile 32 der Datei awmaster.c.
| #define AWF_ZAUBER 8 |
Definiert in Zeile 31 der Datei awmaster.c.
| #define AWM_CLASS 1 |
Definiert in Zeile 35 der Datei awmaster.c.
Wird benutzt von Dump(), RegisterArmour() und RegisterWeapon().
| #define AWM_D_TYPE 7 |
Definiert in Zeile 41 der Datei awmaster.c.
Wird benutzt von Dump(), RegisterArmour() und RegisterWeapon().
| #define AWM_EFF_CLASS 2 |
Definiert in Zeile 36 der Datei awmaster.c.
Wird benutzt von Dump(), RegisterArmour() und RegisterWeapon().
| #define AWM_FLAGS 3 |
Definiert in Zeile 37 der Datei awmaster.c.
Wird benutzt von Dump(), RegisterArmour() und RegisterWeapon().
| #define AWM_HANDS 6 |
Definiert in Zeile 40 der Datei awmaster.c.
Wird benutzt von Dump(), RegisterArmour() und RegisterWeapon().
| #define AWM_TIME 9 |
Definiert in Zeile 43 der Datei awmaster.c.
Wird benutzt von Dump(), RegisterArmour() und RegisterWeapon().
| #define AWM_TYPE 0 |
Definiert in Zeile 34 der Datei awmaster.c.
Wird benutzt von Dump(), RegisterArmour() und RegisterWeapon().
| #define AWM_VALUE 5 |
Definiert in Zeile 39 der Datei awmaster.c.
Wird benutzt von Dump(), RegisterArmour() und RegisterWeapon().
| #define AWM_WEIGHT 4 |
Definiert in Zeile 38 der Datei awmaster.c.
Wird benutzt von Dump(), RegisterArmour() und RegisterWeapon().
| #define AWM_X_CLASS 8 |
Definiert in Zeile 42 der Datei awmaster.c.
Wird benutzt von Dump(), RegisterArmour() und RegisterWeapon().
| #define DDUMPFILE "/log/ARCH/DAMAGERS" |
Definiert in Zeile 22 der Datei awmaster.c.
Wird benutzt von Dump().
| #define SAVEFILE "/secure/ARCH/awmaster" |
Definiert in Zeile 20 der Datei awmaster.c.
| #define WDUMPFILE "/log/ARCH/WAFFEN" |
Definiert in Zeile 23 der Datei awmaster.c.
| static private int allowed | ( | ) | [static] |
Definiert in Zeile 47 der Datei awmaster.c.
Benutzt ARCH_SECURITY, process_call() und ROOTID.
00048 { 00049 if (previous_object() && geteuid(previous_object())==ROOTID) 00050 return 1; 00051 if (!process_call() && previous_object() && this_interactive() && ARCH_SECURITY) 00052 return 1; 00053 return 0; 00054 }

| void create | ( | ) |
Definiert in Zeile 56 der Datei awmaster.c.
Benutzt armours, damagers, flag, restore_object(), SAVEFILE und weapons.
00057 { 00058 seteuid(getuid(this_object())); 00059 00060 if (!restore_object(SAVEFILE)) 00061 { 00062 armours = ([]); 00063 weapons = ([]); 00064 damagers = ([]); 00065 } 00066 if (widthof(damagers) == 1) { 00067 mapping tmp = damagers; 00068 damagers = m_allocate(sizeof(tmp),2); 00069 foreach(string r, int flag: tmp) { 00070 damagers[r,0]=flag; 00071 } 00072 } 00073 }

| string dtdump | ( | mixed | arg | ) |
Definiert in Zeile 288 der Datei awmaster.c.
Benutzt i.
Wird benutzt von Dump().
00289 { string re; 00290 int i,w; 00291 00292 if (stringp(arg)) 00293 return capitalize(arg); 00294 if (!pointerp(arg) || !stringp(arg[0])) 00295 return "<NONE>"; 00296 if ((i=sizeof(arg))==1) 00297 return capitalize(arg[0]); 00298 w = (31-i)/i; 00299 if (w--<1) 00300 return "<MANY>"; 00301 for (re="",--i;i>=0;i--) 00302 { 00303 if (!stringp(arg[i])) 00304 re += "-"; 00305 else 00306 re += capitalize(arg[i][0..w]); 00307 if (i) 00308 re += "|"; 00309 } 00310 return re; 00311 }

| int Dump | ( | mixed | what | ) |
Definiert in Zeile 313 der Datei awmaster.c.
Benutzt allowed, AWF_BOOST, AWF_PUTOFF, AWF_PUTON, AWF_RESIST, AWM_CLASS, AWM_D_TYPE, AWM_EFF_CLASS, AWM_FLAGS, AWM_HANDS, AWM_TIME, AWM_TYPE, AWM_VALUE, AWM_WEIGHT, AWM_X_CLASS, damagers, DDUMPFILE, dtdump(), dtime(), dump(), file() und strftime().
00314 { string file,*ind; 00315 mapping dump; 00316 00317 if (!allowed()) 00318 return -1; 00319 if (!what) 00320 { 00321 write("Nimm doch mal einen richtigen Parameter!\n"); 00322 return 0; 00323 } 00324 if (stringp(what) && strlen(what)>0) 00325 { 00326 what==what[0..0]; 00327 if (what=="a") 00328 what=1; 00329 else if (what=="w") 00330 what=2; 00331 else if (what=="d") 00332 what=3; 00333 else 00334 { 00335 write("Nimm doch mal einen richtigen Parameter!\n"); 00336 return 0; 00337 } 00338 } 00339 if (!intp(what) || what<1 || what>3) 00340 { 00341 write("Nimm doch mal einen richtigen Parameter!\n"); 00342 return 0; 00343 } 00344 if (what==3) // Die 'damagers' haben ein anderes Ausgabeformat 00345 { 00346 printf("AWM: Dumping 'damagers' to '%s'\n",DDUMPFILE); 00347 ind=sort_array(m_indices(damagers),#'<); 00348 if (sizeof(ind) < 1) { 00349 write("AWM: Dump aborted, mapping empty.\n"); 00350 return 1; 00351 } 00352 if (file_size(DDUMPFILE)>1) 00353 rm(DDUMPFILE); 00354 00355 // nach letzter Aktualisierung sortieren. 00356 mixed sorted = sort_array(m_indices(damagers), 00357 function int (int a, int b) { 00358 return damagers[a,1] < damagers[b,1]; 00359 } ); 00360 00361 string ausgabe = sprintf( 00362 "--- Damagers-Dump --- %s --- %s ---\n\n"+ 00363 "%:15s D R [Filename]\n", 00364 dtime(time()),capitalize(getuid(this_interactive())), 00365 "Datum/Zeit"); 00366 foreach(string rue : sorted) { 00367 ausgabe += sprintf("%:15s %1s %1s %s\n", 00368 strftime("%y%m%d-%H:%M:%S",damagers[rue,1]), 00369 (damagers[rue,0]&1?"+":"-"), 00370 (damagers[rue,0]&2?"+":"-"), 00371 rue); 00372 } 00373 00374 write_file(DDUMPFILE, ausgabe); 00375 return 1; 00376 } 00377 if (what==2) 00378 what=0; 00379 file=(what?ADUMPFILE:WDUMPFILE); 00380 00381 printf("AWM: Dumping '%s' to '%s'\n", 00382 (what?"armours":"weapons"),file); 00383 00384 dump=(what?armours:weapons); 00385 ind=sort_array(m_indices(dump),#'>); 00386 if (sizeof(ind) < 1) 00387 { 00388 write("AWM: Dump aborted, mapping empty.\n"); 00389 return 1; 00390 } 00391 00392 if (file_size(file)>1) 00393 rm(file); 00394 00395 string ausgabe = sprintf( 00396 "--- %s-Dump --- %s --- %s ---\n\n"+ 00397 "[Filename], Datum/Zeit\n"+ 00398 " ____Typ___ CLS ECL XCL NFBR WGHT. VALUE H %30.30'_'|s\n", 00399 (what?"Ruestungs":"Waffen"),dtime(time()), 00400 capitalize(getuid(this_interactive())),"DamType(s)"); 00401 00402 foreach(string index : ind) 00403 { 00404 ausgabe += sprintf( 00405 "[%s] %s\n %10s %3d %3d %3d %1s%1s%1s%1s %5d %5d %1d %-30.30s\n", 00406 index, strftime("%y%m%d-%H:%M:%S",dump[index][AWM_TIME]), 00407 dump[index][AWM_TYPE], 00408 dump[index][AWM_CLASS], 00409 dump[index][AWM_EFF_CLASS], 00410 dump[index][AWM_X_CLASS], 00411 (dump[index][AWM_FLAGS]&AWF_PUTON?"+":"-"), 00412 (dump[index][AWM_FLAGS]&AWF_PUTOFF?"+":"-"), 00413 (dump[index][AWM_FLAGS]&AWF_BOOST?"+":"-"), 00414 (dump[index][AWM_FLAGS]&AWF_RESIST?"+":"-"), 00415 dump[index][AWM_WEIGHT], 00416 dump[index][AWM_VALUE], 00417 dump[index][AWM_HANDS], 00418 dtdump(dump[index][AWM_D_TYPE]) ); 00419 } 00420 write_file(file,ausgabe); 00421 write("AWM: Done.\n"); 00422 return 1; 00423 }

| static void NotifyACChange | ( | object | ob, | |
| string | fn | |||
| ) | [static] |
Definiert in Zeile 87 der Datei awmaster.c.
Benutzt ACCNGFILE, AT_AMULET, AT_CLOAK, AT_MISC, AT_RING, dtime(), log_file, MASTER, msg(), P_AC, P_ARMOUR_TYPE, ROOTID und VALID_ARMOUR_CLASS.
Wird benutzt von RegisterArmour().
00088 { 00089 #ifdef ACCHANGE 00090 string at,msg; 00091 int ac,max; 00092 00093 if (!objectp(ob) || !stringp(fn)) 00094 return; 00095 if (!stringp(at=ob->QueryProp(P_ARMOUR_TYPE))) 00096 return; 00097 if ((ac=ob->QueryProp(P_AC)) < (max=VALID_ARMOUR_CLASS[at])) 00098 return; 00099 /* Bereits genehmigte Max-AC-Umhaenge und Ringe/Amulette, die nach den neuen 00100 ** Werten Max-Schutz haben, werden nicht gemeldet. 00101 */ 00102 if ( (at==AT_CLOAK || at==AT_RING || at==AT_AMULET || at==AT_MISC) && 00103 ac==VALID_ARMOUR_CLASS[at]) 00104 return; 00105 msg=sprintf("ROOT [%s]\nDie Ruestung %s (P_AC=%d)\n", 00106 dtime(time()),fn,ac); 00107 if (ac==max) 00108 msg+=("\ 00109 besitzt nach Umstellung der Ruestungsklassen einen MAXIMALEN Ruestungsschutz.\n\ 00110 Lass doch bitte dieses Objekt vom Balance-Gremium genehmigen.\n\ 00111 Hierzu genuegt ein kurzer Antrag in /players/paracelsus/office.\n"); 00112 else 00113 msg+=("\ 00114 besitzt nach Umstellung der Ruestungsklassen einen UNZULAESSIGEN\n\ 00115 Ruestungsschutz, d.h. sie wird fuer Spieler in Kuerze nicht mehr nutzbar\n\ 00116 sein. Bitte aendere den Ruestungsschutz entspr. der neuen Obergrenzen\n\ 00117 (-> man ruestungen). Sollte der gewuenschte Ruestungsschutz oberhalb der\n\ 00118 Genehmigungsgrenze liegen, muss die Ruestung selbstverstaendlich vom\n\ 00119 Balance-Gremium genehmigt werden.\n"); 00120 msg+=("### Dies ist eine automatisch generierte Meldung ###\n"); 00121 00122 write_file(ACCNGFILE, 00123 sprintf("[%s] P_AC: %d MAX: %d\nOb: %s\n\n", 00124 dtime(time()),ac,max,fn)); 00125 00126 at = MASTER->creator_file(ob); 00127 if (at == ROOTID) 00128 at = "ROOT"; 00129 else if( !at || at[0]==' ' ) 00130 at="STD"; 00131 at = "report/" + at + ".rep"; 00132 00133 log_file(at,msg); 00134 #endif 00135 }


| void RegisterArmour | ( | ) |
Definiert in Zeile 159 der Datei awmaster.c.
Benutzt armours, AWM_CLASS, AWM_D_TYPE, AWM_EFF_CLASS, AWM_FLAGS, AWM_HANDS, AWM_TIME, AWM_TYPE, AWM_VALUE, AWM_WEIGHT, AWM_X_CLASS, flag, h, id(), NotifyACChange(), ob(), P_AC, P_ARMOUR_TYPE, P_DAM_TYPE, P_EFFECTIVE_AC, P_EFFECTIVE_WC, P_VALUE, P_WC, P_WEIGHT und xflags().
00160 { object ob; 00161 string id; 00162 int flag,h; 00163 00164 if (!objectp(ob=previous_object()) || 00165 member(inherit_list(ob),"/std/armour.c")==-1) 00166 return; 00167 id = explode(object_name(ob),"#")[0]; 00168 if (member(armours,id)) 00169 { 00170 armours[id][AWM_TIME]=time(); 00171 flag=0; 00172 if ((h=(int)ob->QueryProp(P_AC)) > armours[id][AWM_CLASS]) 00173 { 00174 armours[id][AWM_CLASS]=h; 00175 NotifyACChange(ob,id); 00176 flag=1; 00177 } 00178 if ((h=(int)ob->QueryProp(P_EFFECTIVE_AC)) > armours[id][AWM_EFF_CLASS]) 00179 { 00180 armours[id][AWM_EFF_CLASS]=h; 00181 flag=1; 00182 } 00183 if ((h=(int)ob->QueryProp(P_NR_HANDS)) < armours[id][AWM_HANDS]) 00184 { 00185 armours[id][AWM_HANDS]=h; 00186 flag=1; 00187 } 00188 if ((h=xflags(ob)) != armours[id][AWM_FLAGS]) 00189 { 00190 armours[id][AWM_FLAGS]=h; 00191 flag=1; 00192 } 00193 } 00194 else { 00195 armours += ([ id : 00196 ([ 00197 AWM_TYPE : ob->QueryProp(P_ARMOUR_TYPE) , 00198 AWM_CLASS : ob->QueryProp(P_AC) , 00199 AWM_EFF_CLASS : ob->QueryProp(P_EFFECTIVE_AC) , 00200 AWM_FLAGS : xflags(ob), 00201 AWM_WEIGHT : ob->QueryProp(P_WEIGHT) , 00202 AWM_VALUE : ob->QueryProp(P_VALUE) , 00203 AWM_HANDS : ob->QueryProp(P_NR_HANDS) , // Fuer Schilde 00204 AWM_D_TYPE : ob->QueryProp(P_DAM_TYPE) , 00205 AWM_X_CLASS : ob->QueryProp(P_EFFECTIVE_WC) || 00206 ob->QueryProp(P_WC), 00207 AWM_TIME : time() 00208 ]) ]); 00209 NotifyACChange(ob,id); 00210 } 00211 }

| void RegisterDamager | ( | object | dam_ob, | |
| int | old_dam, | |||
| int | new_dam | |||
| ) |
Definiert in Zeile 265 der Datei awmaster.c.
Benutzt damagers, flag, ob() und old_explode().
00266 { object ob; 00267 int flag; 00268 string fn; 00269 00270 if (!objectp(ob=previous_object()) || 00271 (member(inherit_list(ob),"/std/weapon.c")==-1 && 00272 member(inherit_list(ob),"/std/armour.c")==-1 )) 00273 return; 00274 if (old_dam>new_dam) // Repair 00275 flag=2; 00276 else if (new_dam>old_dam) // Damage 00277 flag=1; 00278 else 00279 return; 00280 if (!objectp(dam_ob)) 00281 return; 00282 if (!(fn=old_explode(object_name(dam_ob),"#")[0]) || !stringp(fn)) 00283 return; 00284 damagers[fn,0]=damagers[fn,0]|flag; 00285 damagers[fn,1]=time(); 00286 }

| void RegisterWeapon | ( | ) |
Definiert in Zeile 213 der Datei awmaster.c.
Benutzt AWM_CLASS, AWM_D_TYPE, AWM_EFF_CLASS, AWM_FLAGS, AWM_HANDS, AWM_TIME, AWM_TYPE, AWM_VALUE, AWM_WEIGHT, AWM_X_CLASS, flag, h, id(), ob(), P_AC, P_DAM_TYPE, P_EFFECTIVE_AC, P_EFFECTIVE_WC, P_VALUE, P_WC, P_WEAPON_TYPE, P_WEIGHT, weapons und xflags().
00214 { object ob; 00215 string id; 00216 int flag,h; 00217 00218 if (!objectp(ob=previous_object()) || 00219 member(inherit_list(ob),"/std/weapon.c")==-1) 00220 return; 00221 id = explode(object_name(ob),"#")[0]; 00222 if (member(weapons,id)) 00223 { 00224 weapons[id][AWM_TIME] = time(); 00225 flag=0; 00226 if ((h=(int)ob->QueryProp(P_WC)) > weapons[id][AWM_CLASS]) 00227 { 00228 weapons[id][AWM_CLASS]=h; 00229 flag=1; 00230 } 00231 if ((h=(int)ob->QueryProp(P_EFFECTIVE_WC)) > weapons[id][AWM_EFF_CLASS]) 00232 { 00233 weapons[id][AWM_EFF_CLASS]=h; 00234 flag=1; 00235 } 00236 if ((h=(int)ob->QueryProp(P_NR_HANDS)) < weapons[id][AWM_HANDS]) 00237 { 00238 weapons[id][AWM_HANDS]=h; 00239 flag=1; 00240 } 00241 if ((h=xflags(ob)) != weapons[id][AWM_FLAGS]) 00242 { 00243 weapons[id][AWM_FLAGS]=h; 00244 flag=1; 00245 } 00246 } 00247 else { 00248 weapons += ([ id : 00249 ([ 00250 AWM_TYPE : ob->QueryProp(P_WEAPON_TYPE) , 00251 AWM_CLASS : ob->QueryProp(P_WC) , 00252 AWM_EFF_CLASS : ob->QueryProp(P_EFFECTIVE_WC) , 00253 AWM_FLAGS : xflags(ob), 00254 AWM_WEIGHT : ob->QueryProp(P_WEIGHT) , 00255 AWM_VALUE : ob->QueryProp(P_VALUE) , 00256 AWM_HANDS : ob->QueryProp(P_NR_HANDS) , 00257 AWM_D_TYPE : ob->QueryProp(P_DAM_TYPE) , 00258 AWM_X_CLASS : ob->QueryProp(P_EFFECTIVE_AC) || 00259 ob->QueryProp(P_AC), 00260 AWM_TIME : time() 00261 ]) ]); 00262 } 00263 }

| public varargs int remove | ( | int | silent | ) |
Definiert in Zeile 83 der Datei awmaster.c.
Benutzt save_me().
00083 { 00084 save_me(); 00085 }

| void reset | ( | void | ) |
Definiert in Zeile 80 der Datei awmaster.c.
Benutzt save_me().
00080 { 00081 save_me(); 00082 }

| int ResetDamagers | ( | ) |
| void save_me | ( | ) |
Definiert in Zeile 75 der Datei awmaster.c.
Benutzt save_object() und SAVEFILE.
00076 { 00077 save_object(SAVEFILE); 00078 }

| int Unregister | ( | string | what | ) |
Definiert in Zeile 425 der Datei awmaster.c.
Benutzt allowed, armours, damagers, m_delete() und weapons.
00426 { 00427 if (!allowed()) 00428 return -1; 00429 if (!what) 00430 { 00431 write("Du solltest schon einen Filenamen angeben!\n"); 00432 return 0; 00433 } 00434 if (member(armours,what)) 00435 { 00436 efun::m_delete(armours,what); 00437 write("Unregistered "+what+" from 'armours'.\n"); 00438 return 1; 00439 } 00440 if (member(weapons,what)) 00441 { 00442 efun::m_delete(weapons,what); 00443 write("Unregistered "+what+" from 'weapons'.\n"); 00444 return 1; 00445 } 00446 if (member(damagers,what)) 00447 { 00448 efun::m_delete(damagers,what); 00449 write("Unregistered "+what+" from 'damagers'.\n"); 00450 return 1; 00451 } 00452 return 0; 00453 }

| int xflags | ( | object | ob | ) |
Definiert in Zeile 137 der Datei awmaster.c.
Benutzt AWF_BOOST, AWF_PUTOFF, AWF_PUTON, AWF_RESIST, P_DEFEND_FUNC, P_HIT_FUNC, P_REMOVE_FUNC, P_RESISTANCE_STRENGTHS, P_UNWIELD_FUNC, P_WEAR_FUNC und P_WIELD_FUNC.
Wird benutzt von RegisterArmour() und RegisterWeapon().
00137 { 00138 int re; 00139 mapping m; 00140 if (!ob || !objectp(ob)) 00141 return 0; 00142 re=0; 00143 if (((object)ob->QueryProp(P_WEAR_FUNC))==ob || 00144 ((object)ob->QueryProp(P_WIELD_FUNC))==ob ) 00145 re += AWF_PUTON; 00146 if (((object)ob->QueryProp(P_REMOVE_FUNC))==ob || 00147 ((object)ob->QueryProp(P_UNWIELD_FUNC))==ob ) 00148 re += AWF_PUTOFF; 00149 if (((object)ob->QueryProp(P_DEFEND_FUNC))==ob || 00150 ((object)ob->QueryProp(P_HIT_FUNC))==ob ) 00151 re += AWF_BOOST; 00152 // ists nen Mapping und nicht leer? 00153 if (mappingp(m=(mapping)ob->QueryProp(P_RESISTANCE_STRENGTHS)) 00154 && sizeof(m)) 00155 re += AWF_RESIST; 00156 return re; 00157 }

| mapping armours |
Definiert in Zeile 45 der Datei awmaster.c.
| mapping damagers |
Definiert in Zeile 45 der Datei awmaster.c.
Wird benutzt von create(), Dump(), RegisterDamager(), ResetDamagers() und Unregister().
| mapping weapons |
Definiert in Zeile 45 der Datei awmaster.c.
Wird benutzt von _inventory(), create(), RegisterWeapon() und Unregister().
1.6.3