src/flags.h

Go to the documentation of this file.
00001 
00002 /* flags.h - object flags */
00003 
00004 /* $Id: flags.h,v 1.3 2005/06/23 02:59:58 murrayma Exp $ */
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     /* 2nd word of flags. */
00017 #define FLAG_WORD3      0x2     /* 3rd word of flags. */
00018 
00019 /* Object types */
00020 #define TYPE_ROOM       0x0
00021 #define TYPE_THING      0x1
00022 #define TYPE_EXIT       0x2
00023 #define TYPE_PLAYER     0x3
00024 
00025 /* Empty */
00026 #define TYPE_GARBAGE    0x5
00027 #define NOTYPE          0x7
00028 #define TYPE_MASK       0x7
00029 
00030 /* First word of flags */
00031 #define SEETHRU         0x00000008      /* Can see through to the other side */
00032 #define WIZARD          0x00000010      /* gets automatic control */
00033 #define LINK_OK         0x00000020      /* anybody can link to this room */
00034 #define DARK            0x00000040      /* Don't show contents or presence */
00035 #define JUMP_OK         0x00000080      /* Others may @tel here */
00036 #define STICKY          0x00000100      /* Object goes home when dropped */
00037 #define DESTROY_OK      0x00000200      /* Others may @destroy */
00038 #define HAVEN           0x00000400      /* No killing here, or no pages */
00039 #define QUIET           0x00000800      /* Prevent 'feelgood' messages */
00040 #define HALT            0x00001000      /* object cannot perform actions */
00041 #define TRACE           0x00002000      /* Generate evaluation trace output */
00042 #define GOING           0x00004000      /* object is available for recycling */
00043 #define MONITOR         0x00008000      /* Process ^x:action listens on obj? */
00044 #define MYOPIC          0x00010000      /* See things as nonowner/nonwizard */
00045 #define PUPPET          0x00020000      /* Relays ALL messages to owner */
00046 #define CHOWN_OK        0x00040000      /* Object may be @chowned freely */
00047 #define ENTER_OK        0x00080000      /* Object may be ENTERed */
00048 #define VISUAL          0x00100000      /* Everyone can see properties */
00049 #define IMMORTAL        0x00200000      /* Object can't be killed */
00050 #define HAS_STARTUP     0x00400000      /* Load some attrs at startup */
00051 #define OPAQUE          0x00800000      /* Can't see inside */
00052 #define VERBOSE         0x01000000      /* Tells owner everything it does. */
00053 #define INHERIT         0x02000000      /* Gets owner's privs. (i.e. Wiz) */
00054 #define NOSPOOF         0x04000000      /* Report originator of all actions. */
00055 #define ROBOT           0x08000000      /* Player is a ROBOT */
00056 #define SAFE            0x10000000      /* Need /override to @destroy */
00057 #define ROYALTY         0x20000000      /* Sees like a wiz, but ca't modify */
00058 #define HEARTHRU        0x40000000      /* Can hear out of this obj or exit */
00059 #define TERSE           0x80000000      /* Only show room name on look */
00060 
00061 /* Second word of flags */
00062 #define KEY             0x00000001      /* No puppets */
00063 #define ABODE           0x00000002      /* May @set home here */
00064 #define FLOATING        0x00000004      /* Inhibit Floating room.. msgs */
00065 #define UNFINDABLE      0x00000008      /* Cant loc() from afar */
00066 #define PARENT_OK       0x00000010      /* Others may @parent to me */
00067 #define LIGHT           0x00000020      /* Visible in dark places */
00068 #define HAS_LISTEN      0x00000040      /* Internal: LISTEN attr set */
00069 #define HAS_FWDLIST     0x00000080      /* Internal: FORWARDLIST attr set */
00070 #define AUDITORIUM      0x00000100      /* Should we check the SpeechLock? */
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      /* Player uses ANSI maps */
00084 #define HAS_HOURLY      0x00400000
00085 #define MULTIOK         0x00800000
00086 
00087 #define VACATION        0x01000000
00088 #define PLAYER_MAILS    0x02000000
00089 #define BLIND           0x04000000      /* Something to support blind players! */
00090 #define ZOMBIE          0x08000000      /* Hardcode object is a zombie */
00091 
00092 #define SUSPECT         0x10000000      /* Report some activities to wizards */
00093 #define COMPRESS        0x20000000      /* Output is compressed */
00094 #define CONNECTED       0x40000000      /* Player is connected */
00095 #define SLAVE           0x80000000      /* Disallow most commands */
00096 
00097 /* Flags from prior versions of MUSH */
00098 
00099 /* These are from Penn, and Kalkin's DarkZone version of Penn */
00100 #define PENN_COMBAT          0x8        /* SW custom code */
00101 #define PENN_WIZARD             0x10    /* gets automatic control */
00102 #define PENN_LINK_OK            0x20    /* anybody can link to this room */
00103 #define PENN_DARK               0x40    /* contents of room are not printed */
00104 #define PENN_VERBOSE            0x80    /* print out command before executing it */
00105 #define PENN_STICKY             0x100   /* goes home when dropped */
00106 #define PENN_TRANSPARENT     0x200      /* can look through exit to see next room,
00107                                            * or room "long exit display.
00108                                          */
00109 #define PENN_HAVEN              0x400   /* this room disallows kills in it */
00110                                 /* on a player, disallow paging, */
00111 #define PENN_QUIET              0x800   /* On an object, will not emit 'set'
00112                                            * messages.. on a player.. will not see ANY
00113                                            * set messages
00114                                          */
00115 #define PENN_HALT               0x1000  /* object cannot perform actions */
00116 #define PENN_UNFIND          0x2000     /* object cannot be found (or found in */
00117 #define PENN_GOING              0x4000  /* object is available for recycling */
00118 
00119 #define PENN_ACCESSED   0x8000  /* object has been accessed recently */
00120 #define PENN_MARKED     0x10000 /* flag used to trace db checking of room
00121                                  * linkages. */
00122 #define PENN_CHOWN_OK   0x40000 /* object can be 'stolen' and made yours */
00123 #define PENN_ENTER_OK   0x80000 /* object basically acts like a room with
00124                                  * only one exit (leave), on players 
00125                                  * means that items can be given freely, AND
00126                                  * taken from!
00127                                  */
00128 #define PENN_VISUAL             0x100000        /* People other than owners can see 
00129                                                    * property list of object.
00130                                                  */
00131 #define PENN_ROYALTY            0x400000        /* can ex, and @tel like a wizard */
00132 #define PENN_OPAQUE     0x800000        /* Objects inside object will not be
00133                                          * seen on a look.
00134                                          */
00135 #define PENN_INHERIT    0x1000000       /* Inherit objects can force their
00136                                          * owners. Inherit players have all
00137                                          * objects inherit.
00138                                          */
00139 #define PENN_DEBUGGING  0x2000000       /* returns parser evals */
00140 #define PENN_SAFE               0x4000000       /* cannot be destroyed */
00141 #define PENN_STARTUP    0x8000000       /* These objects have a @startup
00142                                          * triggered when the MUSH restarts.                                            */
00143 #define PENN_AUDIBLE    0x10000000      /* rooms are flagged as having emitter 
00144                                          * exits. exits act like emitters, 
00145                                          * sound propagates to the exit dest. 
00146                                          */
00147 #define PENN_NO_COMMAND      0x20000000 /* don't check for $commands */
00148 
00149 /* Penn Toggles */
00150 
00151 #define PENN_PLAYER_TERSE    0x8        /* suppress autolook messages */
00152 #define PENN_PLAYER_MYOPIC   0x10       /* look at everything as if player
00153                                            * doesn't control it.
00154                                          */
00155 #define PENN_PLAYER_NOSPOOF  0x20       /* sees origin of emits */
00156 #define PENN_PLAYER_SUSPECT  0x40       /* notifies of a player's name changes,
00157                                            * (dis)connects, and possible logs
00158                                            * logs commands.
00159                                          */
00160 #define PENN_PLAYER_GAGGED   0x80       /* can only move */
00161 #define PENN_PLAYER_MONITOR  0x100      /* sees (dis)connects broadcasted */
00162 #define PENN_PLAYER_CONNECT  0x200      /* connected to game */
00163 #define PENN_PLAYER_ANSI     0x400      /* enable sending of ansi control
00164                                            * sequences (for examine).
00165                                          */
00166 #define PENN_PLAYER_ZONE     0x800      /* Zone Master (zone control owner) */
00167 
00168 #define PENN_PLAYER_HEAD     0x1000
00169 #define PENN_PLAYER_JUDGE    0x2000     /* Judge flag */
00170 #define PENN_PLAYER_FIXED    0x4000     /* Fixed flag */
00171 #define PENN_PLAYER_ADMIN    0x8000
00172 #define PENN_PLAYER_VACATION 0x10000    /* Vacation Flag */
00173 #define PENN_PLAYER_MORTAL   0x20000
00174 #define PENN_PLAYER_SLAVE    0x40000
00175 #define PENN_PLAYER_COLOR    0x80000
00176 #define PENN_PLAYER_WEIRDANSI 0x100000  /* resets each line to normal */
00177 #define PENN_COMBAT_FLAG        0x200000
00178 #define PENN_THING_DEST_OK      0x8     /* can be destroyed by anyone */
00179 #define PENN_THING_PUPPET       0x10    /* echoes to its owner */
00180 #define PENN_THING_LISTEN       0x20    /* checks for ^ patterns */
00181 #define PENN_THING_WEAPON    0x40       /* SW custom code for combat */
00182 #define PENN_THING_ARMOR     0x80       /* SW custom code for combat */
00183 #define PENN_THING_ZONED     0x100      /* Zoned Flag, */
00184 #define PENN_THING_NOLEAVE   0x200      /* Can't leave. */
00185 #define PENN_ROOM_FLOATING      0x8     /* room is not linked to rest of
00186                                            * MUSH. Don't blather about it.
00187                                          */
00188 #define PENN_ROOM_ABODE 0x10    /* players may link themselves here */
00189 #define PENN_ROOM_JUMP_OK       0x20    /* anyone may @teleport to here */
00190 #define PENN_ROOM_NO_TEL        0x40    /* mortals cannot @tel from here */
00191 #define PENN_ROOM_TEMPLE        0x80    /* objects dropped here are sacrificed
00192                                            * (destroyed) and player gets money.
00193                                          */
00194 #define PENN_ROOM_LISTEN    0x100       /* checks for ^ patterns */
00195 #define PENN_ROOM_ZEROG     0x200       /* ZeroG room flag */
00196 #define PENN_ROOM_SLOCK     0x400       /* Auditorium, speech locks */
00197 #define PENN_ROOM_UNINSPECT 0x1000      /* Not inspected */
00198 #define PENN_ROOM_DSPACE        0x2000  /* Dynamic Flag */
00199 #define PENN_EXIT_LIGHT 0x10    /* If a room is dark, and an exit
00200                                    * has this flag, then it shows 
00201                                    * up. */
00202 #define PENN_EXIT_DSPACE        0x20    /* Dynamic Exit */
00203 
00204 /* From old PernMUSH */
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 /* Flags from MUSE */
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 /* Flags from TinyMUD */
00253 #define MUD_ABODE       0x00000800
00254 #define MUD_ROBOT       0x00004000
00255 #define MUD_CHOWN_OK    0x00008000
00256 
00257 /* ---------------------------------------------------------------------------
00258  * FLAGENT: Information about object flags.
00259  */
00260 
00261 typedef struct flag_entry {
00262     const char *flagname;       /* Name of the flag */
00263     int flagvalue;              /* Which bit in the object is the flag */
00264     char flaglett;              /* Flag letter for listing */
00265     int flagflag;               /* Ctrl flags for this flag (recursive? :-) */
00266     int listperm;               /* Who sees this flag when set */
00267     int (*handler) ();          /* Handler for setting/clearing this flag */
00268 } FLAGENT;
00269 
00270 /* ---------------------------------------------------------------------------
00271  * OBJENT: Fundamental object types
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  /* Object has contents: Contents() */
00283 #define OF_LOCATION     0x0002  /* Object has a location: Location() */
00284 #define OF_EXITS        0x0004  /* Object has exits: Exits() */
00285 #define OF_HOME         0x0008  /* Object has a home: Home() */
00286 #define OF_DROPTO       0x0010  /* Object has a dropto: Dropto() */
00287 #define OF_OWNER        0x0020  /* Object can own other objects */
00288 #define OF_SIBLINGS     0x0040  /* Object has siblings: Next() */
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 /* ---------------------- Object Permission/Attribute Macros */
00313 
00314 /* IS(X,T,F)            - Is X of type T and have flag F set? */
00315 
00316 /* Typeof(X)            - What object type is X */
00317 
00318 /* God(X)               - Is X player #1 */
00319 
00320 /* Robot(X)             - Is X a robot player */
00321 
00322 /* Wizard(X)            - Does X have wizard privs */
00323 
00324 /* Immortal(X)          - Is X unkillable */
00325 
00326 /* Alive(X)             - Is X a player or a puppet */
00327 
00328 /* Dark(X)              - Is X dark */
00329 
00330 /* WHODark(X)           - Should X be hidden from the WHO report */
00331 
00332 /* Floating(X)          - Prevent 'disconnected room' msgs for room X */
00333 
00334 /* Quiet(X)             - Should 'Set.' messages et al from X be disabled */
00335 
00336 /* Verbose(X)           - Should owner receive all commands executed? */
00337 
00338 /* Trace(X)             - Should owner receive eval trace output? */
00339 
00340 /* Player_haven(X)      - Is the owner of X no-page */
00341 
00342 /* Haven(X)             - Is X no-kill(rooms) or no-page(players) */
00343 
00344 /* Halted(X)            - Is X halted (not allowed to run commands)? */
00345 
00346 /* Suspect(X)           - Is X someone the wizzes should keep an eye on */
00347 
00348 /* Slave(X)             - Should X be prevented from db-changing commands */
00349 
00350 /* Safe(X,P)            - Does P need the /OVERRIDE switch to @destroy X? */
00351 
00352 /* Monnitor(X)          - Should we check for ^xxx:xxx listens on player? */
00353 
00354 /* Terse(X)             - Should we only show the room name on a look? */
00355 
00356 /* Myopic(X)            - Should things as if we were nonowner/nonwiz */
00357 
00358 /* Audible(X)           - Should X forward messages? */
00359 
00360 /* Findroom(X)          - Can players in room X be found via @whereis? */
00361 
00362 /* Unfindroom(X)        - Is @whereis blocked for players in room X? */
00363 
00364 /* Findable(X)          - Can @whereis find X */
00365 
00366 /* Unfindable(X)        - Is @whereis blocked for X */
00367 
00368 /* No_robots(X)         - Does X disallow robot players from using */
00369 
00370 /* Has_location(X)      - Is X something with a location (ie plyr or obj) */
00371 
00372 /* Has_home(X)          - Is X something with a home (ie plyr or obj) */
00373 
00374 /* Has_contents(X)      - Is X something with contents (ie plyr/obj/room) */
00375 
00376 /* Good_obj(X)          - Is X inside the DB and have a valid type? */
00377 
00378 /* Good_owner(X)        - Is X a good owner value? */
00379 
00380 /* Going(X)             - Is X marked GOING? */
00381 
00382 /* Inherits(X)          - Does X inherit the privs of its owner */
00383 
00384 /* Examinable(P,X)      - Can P look at attribs of X */
00385 
00386 /* MyopicExam(P,X)      - Can P look at attribs of X (obeys MYOPIC) */
00387 
00388 /* Controls(P,X)        - Can P force X to do something */
00389 
00390 /* Affects(P,X)         - (Controls in MUSH V1) Is P wiz or same owner as X */
00391 
00392 /* Abode(X)             - Is X an ABODE room */
00393 
00394 /* Link_exit(P,X)       - Can P link from exit X */
00395 
00396 /* Linkable(P,X)        - Can P link to X */
00397 
00398 /* Mark(x)              - Set marked flag on X */
00399 
00400 /* Unmark(x)            - Clear marked flag on X */
00401 
00402 /* Marked(x)            - Check marked flag on X */
00403 
00404 /* Hardcode(x)          - Check hardcode flag on X */
00405 
00406 /* In_Character(x)      - Whether or not mecha's IC */
00407 
00408 /* See_attr(P,X.A,O,F)  - Can P see text attr A on X if attr has owner O */
00409 
00410 /* Set_attr(P,X,A,F)    - Can P set/change text attr A (with flags F) on X */
00411 
00412 /* Read_attr(P,X,A,O,F) - Can P see attr A on X if attr has owner O */
00413 
00414 /* Write_attr(P,X,A,F)  - Can P set/change attr A (with flags F) on X */
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

Generated on Mon May 28 04:25:19 2007 for BattletechMUX by  doxygen 1.4.7