00001
00002
00003
00004
00005
00006 #include "copyright.h"
00007
00008 #ifndef __FLAGS_H
00009 #define __FLAGS_H
00010
00011 #include "htab.h"
00012 #include "db.h"
00013
00014
00015
00016 #define FLAG_WORD2 0x1
00017 #define FLAG_WORD3 0x2
00018
00019
00020 #define TYPE_ROOM 0x0
00021 #define TYPE_THING 0x1
00022 #define TYPE_EXIT 0x2
00023 #define TYPE_PLAYER 0x3
00024
00025
00026 #define TYPE_GARBAGE 0x5
00027 #define NOTYPE 0x7
00028 #define TYPE_MASK 0x7
00029
00030
00031 #define SEETHRU 0x00000008
00032 #define WIZARD 0x00000010
00033 #define LINK_OK 0x00000020
00034 #define DARK 0x00000040
00035 #define JUMP_OK 0x00000080
00036 #define STICKY 0x00000100
00037 #define DESTROY_OK 0x00000200
00038 #define HAVEN 0x00000400
00039 #define QUIET 0x00000800
00040 #define HALT 0x00001000
00041 #define TRACE 0x00002000
00042 #define GOING 0x00004000
00043 #define MONITOR 0x00008000
00044 #define MYOPIC 0x00010000
00045 #define PUPPET 0x00020000
00046 #define CHOWN_OK 0x00040000
00047 #define ENTER_OK 0x00080000
00048 #define VISUAL 0x00100000
00049 #define IMMORTAL 0x00200000
00050 #define HAS_STARTUP 0x00400000
00051 #define OPAQUE 0x00800000
00052 #define VERBOSE 0x01000000
00053 #define INHERIT 0x02000000
00054 #define NOSPOOF 0x04000000
00055 #define ROBOT 0x08000000
00056 #define SAFE 0x10000000
00057 #define ROYALTY 0x20000000
00058 #define HEARTHRU 0x40000000
00059 #define TERSE 0x80000000
00060
00061
00062 #define KEY 0x00000001
00063 #define ABODE 0x00000002
00064 #define FLOATING 0x00000004
00065 #define UNFINDABLE 0x00000008
00066 #define PARENT_OK 0x00000010
00067 #define LIGHT 0x00000020
00068 #define HAS_LISTEN 0x00000040
00069 #define HAS_FWDLIST 0x00000080
00070 #define AUDITORIUM 0x00000100
00071 #define ANSI 0x00000200
00072 #define HEAD_FLAG 0x00000400
00073 #define FIXED 0x00000800
00074 #define UNINSPECTED 0x00001000
00075 #define NO_COMMAND 0x00002000
00076
00077 #define NOBLEED 0x00008000
00078 #define STAFF 0x00010000
00079 #define HAS_DAILY 0x00020000
00080 #define GAGGED 0x00040000
00081 #define HARDCODE 0x00080000
00082 #define IN_CHARACTER 0x00100000
00083 #define ANSIMAP 0x00200000
00084 #define HAS_HOURLY 0x00400000
00085 #define MULTIOK 0x00800000
00086
00087 #define VACATION 0x01000000
00088 #define PLAYER_MAILS 0x02000000
00089 #define BLIND 0x04000000
00090 #define ZOMBIE 0x08000000
00091
00092 #define SUSPECT 0x10000000
00093 #define COMPRESS 0x20000000
00094 #define CONNECTED 0x40000000
00095 #define SLAVE 0x80000000
00096
00097
00098
00099
00100 #define PENN_COMBAT 0x8
00101 #define PENN_WIZARD 0x10
00102 #define PENN_LINK_OK 0x20
00103 #define PENN_DARK 0x40
00104 #define PENN_VERBOSE 0x80
00105 #define PENN_STICKY 0x100
00106 #define PENN_TRANSPARENT 0x200
00107
00108
00109 #define PENN_HAVEN 0x400
00110
00111 #define PENN_QUIET 0x800
00112
00113
00114
00115 #define PENN_HALT 0x1000
00116 #define PENN_UNFIND 0x2000
00117 #define PENN_GOING 0x4000
00118
00119 #define PENN_ACCESSED 0x8000
00120 #define PENN_MARKED 0x10000
00121
00122 #define PENN_CHOWN_OK 0x40000
00123 #define PENN_ENTER_OK 0x80000
00124
00125
00126
00127
00128 #define PENN_VISUAL 0x100000
00129
00130
00131 #define PENN_ROYALTY 0x400000
00132 #define PENN_OPAQUE 0x800000
00133
00134
00135 #define PENN_INHERIT 0x1000000
00136
00137
00138
00139 #define PENN_DEBUGGING 0x2000000
00140 #define PENN_SAFE 0x4000000
00141 #define PENN_STARTUP 0x8000000
00142
00143 #define PENN_AUDIBLE 0x10000000
00144
00145
00146
00147 #define PENN_NO_COMMAND 0x20000000
00148
00149
00150
00151 #define PENN_PLAYER_TERSE 0x8
00152 #define PENN_PLAYER_MYOPIC 0x10
00153
00154
00155 #define PENN_PLAYER_NOSPOOF 0x20
00156 #define PENN_PLAYER_SUSPECT 0x40
00157
00158
00159
00160 #define PENN_PLAYER_GAGGED 0x80
00161 #define PENN_PLAYER_MONITOR 0x100
00162 #define PENN_PLAYER_CONNECT 0x200
00163 #define PENN_PLAYER_ANSI 0x400
00164
00165
00166 #define PENN_PLAYER_ZONE 0x800
00167
00168 #define PENN_PLAYER_HEAD 0x1000
00169 #define PENN_PLAYER_JUDGE 0x2000
00170 #define PENN_PLAYER_FIXED 0x4000
00171 #define PENN_PLAYER_ADMIN 0x8000
00172 #define PENN_PLAYER_VACATION 0x10000
00173 #define PENN_PLAYER_MORTAL 0x20000
00174 #define PENN_PLAYER_SLAVE 0x40000
00175 #define PENN_PLAYER_COLOR 0x80000
00176 #define PENN_PLAYER_WEIRDANSI 0x100000
00177 #define PENN_COMBAT_FLAG 0x200000
00178 #define PENN_THING_DEST_OK 0x8
00179 #define PENN_THING_PUPPET 0x10
00180 #define PENN_THING_LISTEN 0x20
00181 #define PENN_THING_WEAPON 0x40
00182 #define PENN_THING_ARMOR 0x80
00183 #define PENN_THING_ZONED 0x100
00184 #define PENN_THING_NOLEAVE 0x200
00185 #define PENN_ROOM_FLOATING 0x8
00186
00187
00188 #define PENN_ROOM_ABODE 0x10
00189 #define PENN_ROOM_JUMP_OK 0x20
00190 #define PENN_ROOM_NO_TEL 0x40
00191 #define PENN_ROOM_TEMPLE 0x80
00192
00193
00194 #define PENN_ROOM_LISTEN 0x100
00195 #define PENN_ROOM_ZEROG 0x200
00196 #define PENN_ROOM_SLOCK 0x400
00197 #define PENN_ROOM_UNINSPECT 0x1000
00198 #define PENN_ROOM_DSPACE 0x2000
00199 #define PENN_EXIT_LIGHT 0x10
00200
00201
00202 #define PENN_EXIT_DSPACE 0x20
00203
00204
00205 #define PERN_SLAVE 0x00000080
00206 #define PERN_KEY 0x00000008
00207 #define PERN_NOSPOOF 0x00200000
00208 #define PERN_SUSPECT 0x04000000
00209 #define PERN_VERBOSE 0x00000080
00210 #define PERN_IMMORTAL 0x00002000
00211 #define PERN_MONITOR 0x00200000
00212 #define PERN_SAFE 0x04000000
00213 #define PERN_UNFIND 0x02000000
00214 #define V2_ACCESSED 0x00008000
00215 #define V3_MARKED 0x00010000
00216 #define V4_GAGGED 0x00000080
00217 #define V4_SUSPECT 0x20000000
00218 #define V6OBJ_KEY 0x00000008
00219 #define V6_BUILDER 0x00000008
00220 #define V6_FLOATING 0x00000008
00221 #define V6EXIT_KEY 0x00000080
00222 #define V6_SUSPECT 0x00000080
00223 #define V6_CONNECT 0x00000200
00224 #define V6_ABODE 0x00000200
00225 #define V6ROOM_JUMPOK 0x00002000
00226 #define V6PLYR_UNFIND 0x00002000
00227 #define V6ROOM_UNFIND 0x08000000
00228 #define V6_SLAVE 0x10000000
00229
00230
00231 #define MUSE_BUILD 0x00000010
00232 #define MUSE_SLAVE 0x00000080
00233 #define MUSE_KEY 0x00000010
00234 #define MUSE_DEST_OK 0x00000200
00235 #define MUSE_ABODE 0x00000200
00236 #define MUSE_SEETHRU 0x00000200
00237 #define MUSE_UNFIND 0x00001000
00238
00239 #define MUSE_CHOWN_OK 0x00000020
00240 #define MUSE_DARK 0x00000040
00241 #define MUSE_STICKY 0x00000100
00242 #define MUSE_HAVEN 0x00000400
00243 #define MUSE_INHERIT 0x00002000
00244 #define MUSE_GOING 0x00004000
00245 #define MUSE_PUPPET 0x00020000
00246 #define MUSE_LINK_OK 0x00040000
00247 #define MUSE_ENTER_OK 0x00080000
00248 #define MUSE_VISUAL 0x00100000
00249 #define MUSE_OPAQUE 0x00800000
00250 #define MUSE_QUIET 0x01000000
00251
00252
00253 #define MUD_ABODE 0x00000800
00254 #define MUD_ROBOT 0x00004000
00255 #define MUD_CHOWN_OK 0x00008000
00256
00257
00258
00259
00260
00261 typedef struct flag_entry {
00262 const char *flagname;
00263 int flagvalue;
00264 char flaglett;
00265 int flagflag;
00266 int listperm;
00267 int (*handler) ();
00268 } FLAGENT;
00269
00270
00271
00272
00273
00274 typedef struct object_entry {
00275 const char *name;
00276 char lett;
00277 int perm;
00278 int flags;
00279 } OBJENT;
00280 extern OBJENT object_types[8];
00281
00282 #define OF_CONTENTS 0x0001
00283 #define OF_LOCATION 0x0002
00284 #define OF_EXITS 0x0004
00285 #define OF_HOME 0x0008
00286 #define OF_DROPTO 0x0010
00287 #define OF_OWNER 0x0020
00288 #define OF_SIBLINGS 0x0040
00289
00290 typedef struct flagset {
00291 FLAG word1;
00292 FLAG word2;
00293 FLAG word3;
00294 } FLAGSET;
00295
00296 extern void init_flagtab(void);
00297 extern void display_flagtab(dbref);
00298 extern void flag_set(dbref, dbref, char *, int);
00299 extern char *flag_description(dbref, dbref);
00300 extern FLAGENT *find_flag(dbref, char *);
00301 extern char *decode_flags(dbref, FLAG, int, int);
00302 extern int has_flag(dbref, dbref, char *);
00303 extern char *unparse_object(dbref, dbref, int);
00304 extern char *unparse_object_numonly(dbref);
00305 extern int convert_flags(dbref, char *, FLAGSET *, FLAG *);
00306 extern void decompile_flags(dbref, dbref, char *);
00307
00308 #define unparse_flags(p,t) decode_flags(p,Flags(t),Flags2(t),Flags3(t))
00309
00310 #define GOD ((dbref) 1)
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416 #define IS(thing,type,flag) ((Typeof(thing)==(type)) && (Flags(thing) & (flag)))
00417 #define Typeof(x) (Flags(x) & TYPE_MASK)
00418 #define God(x) ((x) == GOD)
00419 #define isRobot(x) ((Flags(x) & ROBOT) != 0)
00420 #define Robot(x) (isPlayer(x) && isRobot(x))
00421 #define Alive(x) (isPlayer(x) || (Puppet(x) && Has_contents(x)))
00422 #define OwnsOthers(x) ((object_types[Typeof(x)].flags & OF_OWNER) != 0)
00423 #define Has_location(x) ((object_types[Typeof(x)].flags & OF_LOCATION) != 0)
00424 #define Has_contents(x) ((object_types[Typeof(x)].flags & OF_CONTENTS) != 0)
00425 #define Has_exits(x) ((object_types[Typeof(x)].flags & OF_EXITS) != 0)
00426 #define Has_siblings(x) ((object_types[Typeof(x)].flags & OF_SIBLINGS) != 0)
00427 #define Has_home(x) ((object_types[Typeof(x)].flags & OF_HOME) != 0)
00428 #define Has_dropto(x) ((object_types[Typeof(x)].flags & OF_DROPTO) != 0)
00429 #define Home_ok(x) ((object_types[Typeof(x)].flags & OF_HOME) != 0)
00430 #define isPlayer(x) (Typeof(x) == TYPE_PLAYER)
00431 #define isRoom(x) (Typeof(x) == TYPE_ROOM)
00432 #define isExit(x) (Typeof(x) == TYPE_EXIT)
00433 #define isThing(x) (Typeof(x) == TYPE_THING)
00434
00435 #define Good_obj(x) (((x) >= 0) && ((x) < mudstate.db_top) && \
00436 (Typeof(x) < NOTYPE))
00437 #define Good_owner(x) (Good_obj(x) && OwnsOthers(x))
00438
00439 #define Royalty(x) ((Flags(x) & ROYALTY) != 0)
00440 #define WizRoy(x) (Royalty(x) || Wizard(x))
00441 #define Fixed(x) ((Flags2(x) & FIXED) != 0)
00442 #define Uninspected(x) ((Flags2(x) & UNINSPECTED) != 0)
00443 #define Ansi(x) ((Flags2(x) & ANSI) != 0)
00444 #define Ansimap(x) ((Flags2(x) & ANSIMAP) != 0)
00445 #define No_Command(x) ((Flags2(x) & NO_COMMAND) != 0)
00446 #define NoBleed(x) ((Flags2(x) & NOBLEED) != 0)
00447 #define Compress(x) ((Flags2(x) & COMPRESS) != 0)
00448
00449 #define Transparent(x) ((Flags(x) & SEETHRU) != 0)
00450 #define Link_ok(x) (((Flags(x) & LINK_OK) != 0) && Has_contents(x))
00451 #define Wizard(x) ((Flags(x) & WIZARD) || \
00452 ((Flags(Owner(x)) & WIZARD) && Inherits(x)))
00453 #define Dark(x) (((Flags(x) & DARK) != 0) && (Wizard(x) || !Alive(x)))
00454 #define Jump_ok(x) (((Flags(x) & JUMP_OK) != 0) && Has_contents(x))
00455 #define Sticky(x) ((Flags(x) & STICKY) != 0)
00456 #define Destroy_ok(x) ((Flags(x) & DESTROY_OK) != 0)
00457 #define Haven(x) ((Flags(x) & HAVEN) != 0)
00458 #define Player_haven(x) ((Flags(Owner(x)) & HAVEN) != 0)
00459 #define Quiet(x) ((Flags(x) & QUIET) != 0)
00460 #define Halted(x) ((Flags(x) & HALT) != 0)
00461 #define Trace(x) ((Flags(x) & TRACE) != 0)
00462 #define Going(x) ((Flags(x) & GOING) != 0)
00463 #define Monitor(x) ((Flags(x) & MONITOR) != 0)
00464 #define Myopic(x) ((Flags(x) & MYOPIC) != 0)
00465 #define Puppet(x) ((Flags(x) & PUPPET) != 0)
00466 #define Chown_ok(x) ((Flags(x) & CHOWN_OK) != 0)
00467 #define Enter_ok(x) (((Flags(x) & ENTER_OK) != 0) && \
00468 Has_location(x) && Has_contents(x))
00469 #define Visual(x) ((Flags(x) & VISUAL) != 0)
00470 #define Immortal(x) ((Flags(x) & IMMORTAL) || \
00471 ((Flags(Owner(x)) & IMMORTAL) && Inherits(x)))
00472 #define Opaque(x) ((Flags(x) & OPAQUE) != 0)
00473 #define Verbose(x) ((Flags(x) & VERBOSE) != 0)
00474 #define Inherits(x) (((Flags(x) & INHERIT) != 0) || \
00475 ((Flags(Owner(x)) & INHERIT) != 0) || \
00476 ((x) == Owner(x)))
00477 #define Nospoof(x) ((Flags(x) & NOSPOOF) != 0)
00478 #define Safe(x,p) (OwnsOthers(x) || \
00479 (Flags(x) & SAFE) || \
00480 (mudconf.safe_unowned && (Owner(x) != Owner(p))))
00481 #define Audible(x) ((Flags(x) & HEARTHRU) != 0)
00482 #define Terse(x) ((Flags(x) & TERSE) != 0)
00483
00484 #define Gagged(x) ((Flags2(x) & GAGGED) != 0)
00485 #define Vacation(x) ((Flags2(x) & VACATION) != 0)
00486 #define Key(x) ((Flags2(x) & KEY) != 0)
00487 #define Abode(x) (((Flags2(x) & ABODE) != 0) && Home_ok(x))
00488 #define Auditorium(x) ((Flags2(x) & AUDITORIUM) != 0)
00489 #define Floating(x) ((Flags2(x) & FLOATING) != 0)
00490 #define Findable(x) ((Flags2(x) & UNFINDABLE) == 0)
00491 #define Hideout(x) ((Flags2(x) & UNFINDABLE) != 0)
00492 #define Parent_ok(x) ((Flags2(x) & PARENT_OK) != 0)
00493 #define Light(x) ((Flags2(x) & LIGHT) != 0)
00494 #define Hardcode(x) ((Flags2(x) & HARDCODE) != 0)
00495 #define Zombie(x) ((Flags2(x) & ZOMBIE) != 0)
00496 #define MultiOK(x) ((Flags2(x) & MULTIOK) != 0)
00497 #define In_Character(x) ((Flags2(x) & IN_CHARACTER) != 0)
00498 #define Suspect(x) ((Flags2(Owner(x)) & SUSPECT) != 0)
00499 #define Connected(x) (((Flags2(x) & CONNECTED) != 0) && \
00500 (Typeof(x) == TYPE_PLAYER))
00501 #define Slave(x) ((Flags2(Owner(x)) & SLAVE) != 0)
00502 #define Hidden(x) ((Flags(x) & DARK) || (Flags2(x) & UNFINDABLE))
00503 #define Staff(x) ((Flags2(x) & STAFF))
00504 #define H_Startup(x) ((Flags(x) & HAS_STARTUP) != 0)
00505 #define H_Fwdlist(x) ((Flags2(x) & HAS_FWDLIST) != 0)
00506 #define H_Listen(x) ((Flags2(x) & HAS_LISTEN) != 0)
00507
00508 #define s_Slave(x) s_Flags2((x), Flags2(x) | SLAVE)
00509 #define s_Fixed(x) s_Flags2((x), Flags2(x) | FIXED)
00510 #define s_Halted(x) s_Flags((x), Flags(x) | HALT)
00511 #define s_Going(x) s_Flags((x), Flags(x) | GOING)
00512 #define s_Connected(x) s_Flags2((x), Flags2(x) | CONNECTED)
00513 #define s_Hardcode(x) s_Flags2((x), Flags2(x) | HARDCODE)
00514 #define c_Hardcode(x) s_Flags2((x), Flags2(x) & ~HARDCODE)
00515 #define s_Zombie(x) s_Flags2((x), Flags2(x) | ZOMBIE)
00516 #define c_Zombie(x) s_Flags2((x), Flags2(x) & ~ZOMBIE)
00517 #define c_Connected(x) s_Flags2((x), Flags2(x) & ~CONNECTED)
00518 #define s_In_Character(x) s_Flags2((x), Flags2(x) | IN_CHARACTER)
00519 #define c_In_Character(x) s_Flags2((x), Flags2(x) & ~IN_CHARACTER)
00520
00521 #define Parentable(p,x) (Controls(p,x) || \
00522 (Parent_ok(x) && could_doit(p,x,A_LPARENT)))
00523
00524 #define OnEnterLock(p,x) (check_zone(p,x))
00525
00526 #define Examinable(p,x) (((Flags(x) & VISUAL) != 0) || \
00527 (See_All(p)) || \
00528 (Owner(p) == Owner(x)) || \
00529 OnEnterLock(p,x))
00530
00531 #define MyopicExam(p,x) (((Flags(x) & VISUAL) != 0) || \
00532 (!Myopic(p) && (See_All(p) || \
00533 (Owner(p) == Owner(x)) || \
00534 OnEnterLock(p,x))))
00535
00536 #define Controls(p,x) (Good_obj(x) && \
00537 (!(God(x) && !God(p))) && \
00538 (Control_All(p) || \
00539 ((Owner(p) == Owner(x)) && \
00540 (Inherits(p) || !Inherits(x))) || \
00541 OnEnterLock(p,x)))
00542
00543 #define Affects(p,x) (Good_obj(x) && \
00544 (!(God(x) && !God(p))) && \
00545 (Wizard(p) || \
00546 (Owner(p) == Owner(x))))
00547 #define Mark(x) (mudstate.markbits->chunk[(x)>>3] |= \
00548 mudconf.markdata[(x)&7])
00549 #define Unmark(x) (mudstate.markbits->chunk[(x)>>3] &= \
00550 ~mudconf.markdata[(x)&7])
00551 #define Marked(x) (mudstate.markbits->chunk[(x)>>3] & \
00552 mudconf.markdata[(x)&7])
00553 #define Mark_all(i) for ((i)=0; (i)<((mudstate.db_top+7)>>3); (i)++) \
00554 mudstate.markbits->chunk[i]=0xff
00555 #define Unmark_all(i) for ((i)=0; (i)<((mudstate.db_top+7)>>3); (i)++) \
00556 mudstate.markbits->chunk[i]=0x0
00557 #define Link_exit(p,x) ((Typeof(x) == TYPE_EXIT) && \
00558 ((Location(x) == NOTHING) || Controls(p,x)))
00559 #define Linkable(p,x) (Good_obj(x) && \
00560 (Has_contents(x)) && \
00561 (((Flags(x) & LINK_OK) != 0) || \
00562 Controls(p,x)))
00563 #define See_attr(p,x,a,o,f) \
00564 (!((a)->flags & (AF_INTERNAL|AF_IS_LOCK)) && \
00565 (God(p) || \
00566 ((f) & AF_VISUAL) || \
00567 (((Owner(p) == (o)) || Examinable(p,x)) && \
00568 !((a)->flags & (AF_DARK|AF_MDARK)) && \
00569 !((f) & (AF_DARK|AF_MDARK)) && \
00570 !((a)->name && strlen((a)->name) > 4 && \
00571 !strcasecmp((a)->name + (strlen((a)->name)-5), \
00572 ".PRIV"))) || \
00573 ((Wizard(p) || Royalty(p)) && !((a)->flags & AF_DARK)) || \
00574 (!((a)->flags & (AF_DARK|AF_MDARK|AF_ODARK)) && \
00575 !((a)->name && strlen((a)->name) > 4 && \
00576 !strcasecmp((a)->name + (strlen((a)->name)-5), \
00577 ".PRIV")))))
00578 #define See_attr_explicit(p,x,a,o,f) \
00579 (!((a)->flags & (AF_INTERNAL|AF_IS_LOCK)) && \
00580 (((f) & AF_VISUAL) || \
00581 ((Owner(p) == (o)) && \
00582 (!(((a)->flags & (AF_DARK|AF_MDARK))) && \
00583 !((a)->name && strlen((a)->name) > 4 && \
00584 !strcasecmp((a)->name + (strlen((a)->name)-5), \
00585 ".PRIV"))))))
00586 #define Set_attr(p,x,a,f) \
00587 (!((a)->flags & (AF_INTERNAL|AF_IS_LOCK)) && \
00588 (God(p) || \
00589 (!God(x) && !(f & AF_LOCK) && \
00590 ((Controls(p,x) && \
00591 !((a)->flags & (AF_WIZARD|AF_GOD)) && \
00592 !((f) & (AF_WIZARD|AF_GOD)) && \
00593 !((a)->name && strlen((a)->name) > 4 && \
00594 !strcasecmp((a)->name + (strlen((a)->name)-5), \
00595 ".PRIV"))) || \
00596 (Wizard(p) && \
00597 !((a)->flags & AF_GOD))))))
00598 #define Read_attr(p,x,a,o,f) \
00599 (!((a)->flags & AF_INTERNAL) && \
00600 (God(p) || \
00601 ((f) & AF_VISUAL) || \
00602 (((Owner(p) == o) || Examinable(p,x)) && \
00603 !((a)->flags & (AF_DARK|AF_MDARK)) && \
00604 !((f) & (AF_DARK|AF_MDARK)) && \
00605 !((a)->name && strlen((a)->name) > 4 && \
00606 !strcasecmp((a)->name + (strlen((a)->name)-5), \
00607 ".PRIV"))) || \
00608 ((Wizard(p) || Royalty(p)) && !((a)->flags & AF_DARK)) || \
00609 (!((a)->flags & (AF_DARK|AF_MDARK|AF_ODARK)) && \
00610 !((a)->name && strlen((a)->name) > 4 && \
00611 !strcasecmp((a)->name + (strlen((a)->name)-5), \
00612 ".PRIV")))))
00613 #define Write_attr(p,x,a,f) \
00614 (!((a)->flags & AF_INTERNAL) && \
00615 (God(p) || \
00616 (!God(x) && !(f & AF_LOCK) && \
00617 ((Controls(p,x) && \
00618 !((a)->flags & (AF_WIZARD|AF_GOD)) && \
00619 !((f) & (AF_WIZARD|AF_GOD)) && \
00620 !((a)->name && strlen((a)->name) > 4 && \
00621 !strcasecmp((a)->name + (strlen((a)->name)-5), \
00622 ".PRIV"))) || \
00623 (Wizard(p) && \
00624 !((a)->flags & AF_GOD))))))
00625 #define Has_power(p,x) (check_access((p),powers_nametab[x].flag))
00626 #define s_Dark(x) s_Flags((x),Flags(x) | DARK)
00627 #endif