| 1 |
|
|---|
| 2 |
|
|---|
| 3 |
|
|---|
| 4 |
#ifndef __DBDEFS_H |
|---|
| 5 |
#define __DBDEFS_H |
|---|
| 6 |
|
|---|
| 7 |
#include <stdio.h> |
|---|
| 8 |
#ifdef I_SYS_TIME |
|---|
| 9 |
#include <sys/time.h> |
|---|
| 10 |
#ifdef TIME_WITH_SYS_TIME |
|---|
| 11 |
#include <time.h> |
|---|
| 12 |
#endif |
|---|
| 13 |
#else |
|---|
| 14 |
#include <time.h> |
|---|
| 15 |
#endif |
|---|
| 16 |
#include "mushdb.h" |
|---|
| 17 |
#include "htab.h" |
|---|
| 18 |
#include "chunk.h" |
|---|
| 19 |
|
|---|
| 20 |
extern dbref first_free; |
|---|
| 21 |
|
|---|
| 22 |
|
|---|
| 23 |
|
|---|
| 24 |
|
|---|
| 25 |
|
|---|
| 26 |
|
|---|
| 27 |
#define REFDB(x) &db[x] |
|---|
| 28 |
|
|---|
| 29 |
#define Name(x) (db[(x)].name) |
|---|
| 30 |
#define Flags(x) (db[(x)].flags) |
|---|
| 31 |
#define Owner(x) (db[(x)].owner) |
|---|
| 32 |
|
|---|
| 33 |
#define Location(x) (db[(x)].location) |
|---|
| 34 |
#define Zone(x) (db[(x)].zone) |
|---|
| 35 |
|
|---|
| 36 |
#define Contents(x) (db[(x)].contents) |
|---|
| 37 |
#define Next(x) (db[(x)].next) |
|---|
| 38 |
#define Home(x) (db[(x)].exits) |
|---|
| 39 |
#define Exits(x) (db[(x)].exits) |
|---|
| 40 |
#define List(x) (db[(x)].list) |
|---|
| 41 |
|
|---|
| 42 |
|
|---|
| 43 |
#define Source(x) (db[(x)].exits) |
|---|
| 44 |
#define Destination(x) (db[(x)].location) |
|---|
| 45 |
|
|---|
| 46 |
#define Locks(x) (db[(x)].locks) |
|---|
| 47 |
|
|---|
| 48 |
#define CreTime(x) (db[(x)].creation_time) |
|---|
| 49 |
#define ModTime(x) (db[(x)].modification_time) |
|---|
| 50 |
|
|---|
| 51 |
#define AttrCount(x) (db[(x)].attrcount) |
|---|
| 52 |
|
|---|
| 53 |
|
|---|
| 54 |
#define Warnings(x) (db[(x)].warnings) |
|---|
| 55 |
|
|---|
| 56 |
#define Pennies(thing) (db[thing].penn) |
|---|
| 57 |
|
|---|
| 58 |
#define Parent(x) (db[(x)].parent) |
|---|
| 59 |
#define Powers(x) (db[(x)].powers) |
|---|
| 60 |
|
|---|
| 61 |
|
|---|
| 62 |
#define Type(x) (db[(x)].type) |
|---|
| 63 |
#define Typeof(x) (Type(x) & ~TYPE_MARKED) |
|---|
| 64 |
|
|---|
| 65 |
|
|---|
| 66 |
#define IsPlayer(x) ((Typeof(x) & TYPE_PLAYER) == TYPE_PLAYER) |
|---|
| 67 |
#define IsRoom(x) ((Typeof(x) & TYPE_ROOM) == TYPE_ROOM) |
|---|
| 68 |
#define IsThing(x) ((Typeof(x) & TYPE_THING) == TYPE_THING) |
|---|
| 69 |
#define IsExit(x) ((Typeof(x) & TYPE_EXIT) == TYPE_EXIT) |
|---|
| 70 |
|
|---|
| 71 |
#define IsGarbage(x) ((Typeof(x) & TYPE_GARBAGE) == TYPE_GARBAGE) |
|---|
| 72 |
#define Marked(x) ((db[(x)].type & TYPE_MARKED) == TYPE_MARKED) |
|---|
| 73 |
|
|---|
| 74 |
#define IS(thing,type,flag) \ |
|---|
| 75 |
((Typeof(thing) == type) && has_flag_by_name(thing,flag,type)) |
|---|
| 76 |
|
|---|
| 77 |
#define GoodObject(x) ((x >= 0) && (x < db_top)) |
|---|
| 78 |
|
|---|
| 79 |
|
|---|
| 80 |
|
|---|
| 81 |
|
|---|
| 82 |
#define Connected(x) (IS(x, TYPE_PLAYER, "CONNECTED")) |
|---|
| 83 |
#define Track_Money(x) (IS(x, TYPE_PLAYER, "TRACK_MONEY")) |
|---|
| 84 |
#define ZMaster(x) (IS(x, TYPE_PLAYER, "ZONE")) |
|---|
| 85 |
#define Unregistered(x) (IS(x, TYPE_PLAYER, "UNREGISTERED")) |
|---|
| 86 |
#define Fixed(x) (IS(Owner(x), TYPE_PLAYER, "FIXED")) |
|---|
| 87 |
#define Vacation(x) (IS(x, TYPE_PLAYER, "ON-VACATION")) |
|---|
| 88 |
|
|---|
| 89 |
|
|---|
| 90 |
|
|---|
| 91 |
|
|---|
| 92 |
|
|---|
| 93 |
#define Terse(x) (IS(Owner(x), TYPE_PLAYER, "TERSE") || IS(x, TYPE_THING, "TERSE")) |
|---|
| 94 |
#define Myopic(x) (IS(Owner(x), TYPE_PLAYER, "MYOPIC")) |
|---|
| 95 |
#define Nospoof(x) (IS(Owner(x),TYPE_PLAYER,"NOSPOOF") || has_flag_by_name(x,"NOSPOOF",NOTYPE)) |
|---|
| 96 |
#define Paranoid(x) (IS(Owner(x),TYPE_PLAYER,"PARANOID") || has_flag_by_name(x,"PARANOID",NOTYPE)) |
|---|
| 97 |
#define Gagged(x) (IS(Owner(x), TYPE_PLAYER, "GAGGED")) |
|---|
| 98 |
#define ShowAnsi(x) (IS(Owner(x), TYPE_PLAYER, "ANSI")) |
|---|
| 99 |
#define ShowAnsiColor(x) (IS(Owner(x), TYPE_PLAYER, "COLOR")) |
|---|
| 100 |
|
|---|
| 101 |
|
|---|
| 102 |
#define DestOk(x) (IS(x, TYPE_THING, "DESTROY_OK")) |
|---|
| 103 |
#define NoLeave(x) (IS(x, TYPE_THING, "NOLEAVE")) |
|---|
| 104 |
#define ThingListen(x) (IS(x, TYPE_THING, "MONITOR")) |
|---|
| 105 |
#define ThingInhearit(x) \ |
|---|
| 106 |
(IS(x, TYPE_THING, "LISTEN_PARENT")) |
|---|
| 107 |
#define ThingZTel(x) (IS(x, TYPE_THING, "Z_TEL")) |
|---|
| 108 |
|
|---|
| 109 |
|
|---|
| 110 |
#define Floating(x) (IS(x, TYPE_ROOM, "FLOATING")) |
|---|
| 111 |
#define Abode(x) (IS(x, TYPE_ROOM, "ABODE")) |
|---|
| 112 |
#define JumpOk(x) (IS(x, TYPE_ROOM, "JUMP_OK")) |
|---|
| 113 |
#define NoTel(x) (IS(x, TYPE_ROOM, "NO_TEL")) |
|---|
| 114 |
#define RoomListen(x) (IS(x, TYPE_ROOM, "LISTENER")) |
|---|
| 115 |
#define RoomZTel(x) (IS(x, TYPE_ROOM, "Z_TEL")) |
|---|
| 116 |
#define RoomInhearit(x) (IS(x, TYPE_ROOM, "LISTEN_PARENT")) |
|---|
| 117 |
|
|---|
| 118 |
#define Uninspected(x) (IS(x, TYPE_ROOM, "UNINSPECTED")) |
|---|
| 119 |
|
|---|
| 120 |
#define ZTel(x) (ThingZTel(x) || RoomZTel(x)) |
|---|
| 121 |
|
|---|
| 122 |
|
|---|
| 123 |
#define Cloudy(x) (IS(x, TYPE_EXIT, "CLOUDY")) |
|---|
| 124 |
|
|---|
| 125 |
|
|---|
| 126 |
|
|---|
| 127 |
#define Audible(x) (has_flag_by_name(x, "AUDIBLE", NOTYPE)) |
|---|
| 128 |
#define ChanUseFirstMatch(x) (has_flag_by_name(x, "CHAN_USEFIRSTMATCH", NOTYPE)) |
|---|
| 129 |
#define ChownOk(x) (has_flag_by_name(x, "CHOWN_OK", NOTYPE)) |
|---|
| 130 |
#define Dark(x) (has_flag_by_name(x, "DARK", NOTYPE)) |
|---|
| 131 |
#define Debug(x) (has_flag_by_name(x, "DEBUG", NOTYPE)) |
|---|
| 132 |
#define EnterOk(x) (has_flag_by_name(x, "ENTER_OK", NOTYPE)) |
|---|
| 133 |
#define Going(x) (has_flag_by_name(x, "GOING", NOTYPE)) |
|---|
| 134 |
#define Going_Twice(x) (has_flag_by_name(x, "GOING_TWICE", NOTYPE)) |
|---|
| 135 |
#define Halted(x) (has_flag_by_name(x, "HALT", NOTYPE)) |
|---|
| 136 |
#define Haven(x) (has_flag_by_name(x, "HAVEN", NOTYPE)) |
|---|
| 137 |
#define Heavy(x) (has_flag_by_name(x, "HEAVY", NOTYPE)) |
|---|
| 138 |
#define Inherit(x) (has_flag_by_name(x, "TRUST", NOTYPE)) |
|---|
| 139 |
#define Light(x) (has_flag_by_name(x, "LIGHT", NOTYPE)) |
|---|
| 140 |
#define LinkOk(x) (has_flag_by_name(x, "LINK_OK", NOTYPE)) |
|---|
| 141 |
#define Loud(x) (has_flag_by_name(x, "LOUD", NOTYPE)) |
|---|
| 142 |
#define Mistrust(x) (has_flag_by_name(x, "MISTRUST", TYPE_THING|TYPE_EXIT|TYPE_ROOM)) |
|---|
| 143 |
#define NoCommand(x) (has_flag_by_name(x, "NO_COMMAND", NOTYPE)) |
|---|
| 144 |
#define NoWarn(x) (has_flag_by_name(x, "NO_WARN", NOTYPE)) |
|---|
| 145 |
#define Opaque(x) (has_flag_by_name(x, "OPAQUE", NOTYPE)) |
|---|
| 146 |
#define Orphan(x) (has_flag_by_name(x, "ORPHAN", NOTYPE)) |
|---|
| 147 |
#define Puppet(x) (has_flag_by_name(x, "PUPPET", TYPE_THING|TYPE_ROOM)) |
|---|
| 148 |
#define Quiet(x) (has_flag_by_name(x, "QUIET", NOTYPE)) |
|---|
| 149 |
#define Safe(x) (has_flag_by_name(x, "SAFE", NOTYPE)) |
|---|
| 150 |
#define Sticky(x) (has_flag_by_name(x, "STICKY", NOTYPE)) |
|---|
| 151 |
#define Suspect(x) (has_flag_by_name(x,"SUSPECT", NOTYPE)) |
|---|
| 152 |
#define Transparented(x) (has_flag_by_name(x, "TRANSPARENT", NOTYPE)) |
|---|
| 153 |
#define Unfind(x) (has_flag_by_name(x, "UNFINDABLE", NOTYPE)) |
|---|
| 154 |
#define Verbose(x) (has_flag_by_name(x, "VERBOSE", NOTYPE)) |
|---|
| 155 |
#define Visual(x) (has_flag_by_name(x, "VISUAL", NOTYPE)) |
|---|
| 156 |
|
|---|
| 157 |
|
|---|
| 158 |
#define AF_Internal(a) ((a)->flags & AF_INTERNAL) |
|---|
| 159 |
#define AF_Wizard(a) ((a)->flags & AF_WIZARD) |
|---|
| 160 |
#define AF_Locked(a) ((a)->flags & AF_LOCKED) |
|---|
| 161 |
#define AF_Noprog(a) ((a)->flags & AF_NOPROG) |
|---|
| 162 |
#define AF_Mdark(a) ((a)->flags & AF_MDARK) |
|---|
| 163 |
#define AF_Private(a) ((a)->flags & AF_PRIVATE) |
|---|
| 164 |
#define AF_Nocopy(a) ((a)->flags & AF_NOCOPY) |
|---|
| 165 |
#define AF_Visual(a) ((a)->flags & AF_VISUAL) |
|---|
| 166 |
#define AF_Regexp(a) ((a)->flags & AF_REGEXP) |
|---|
| 167 |
#define AF_Case(a) ((a)->flags & AF_CASE) |
|---|
| 168 |
#define AF_Safe(a) ((a)->flags & AF_SAFE) |
|---|
| 169 |
#define AF_Command(a) ((a)->flags & AF_COMMAND) |
|---|
| 170 |
#define AF_Listen(a) ((a)->flags & AF_LISTEN) |
|---|
| 171 |
#define AF_Nodump(a) ((a)->flags & AF_NODUMP) |
|---|
| 172 |
#define AF_Listed(a) ((a)->flags & AF_LISTED) |
|---|
| 173 |
#define AF_Prefixmatch(a) ((a)->flags & AF_PREFIXMATCH) |
|---|
| 174 |
#define AF_Veiled(a) ((a)->flags & AF_VEILED) |
|---|
| 175 |
#define AF_Debug(a) ((a)->flags & AF_DEBUG) |
|---|
| 176 |
#define AF_Nearby(a) ((a)->flags & AF_NEARBY) |
|---|
| 177 |
#define AF_Public(a) ((a)->flags & AF_PUBLIC) |
|---|
| 178 |
#define AF_Mhear(a) ((a)->flags & AF_MHEAR) |
|---|
| 179 |
#define AF_Ahear(a) ((a)->flags & AF_AHEAR) |
|---|
| 180 |
|
|---|
| 181 |
|
|---|
| 182 |
#define God(x) ((x) == GOD) |
|---|
| 183 |
#define Royalty(x) (has_flag_by_name(x, "ROYALTY", NOTYPE)) |
|---|
| 184 |
#define Wizard(x) (God(x) || has_flag_by_name(x,"WIZARD", NOTYPE)) |
|---|
| 185 |
#define Hasprivs(x) (God(x) || Royalty(x) || Wizard(x)) |
|---|
| 186 |
|
|---|
| 187 |
#define IsQuiet(x) (Quiet(x) || Quiet(Owner(x))) |
|---|
| 188 |
#define AreQuiet(x,y) (Quiet(x) || (Quiet(y) && (Owner(y) == x))) |
|---|
| 189 |
#define Mobile(x) (IsPlayer(x) || IsThing(x)) |
|---|
| 190 |
#define Alive(x) (IsPlayer(x) || Puppet(x) || \ |
|---|
| 191 |
(Audible(x) && atr_get_noparent(x,"FORWARDLIST"))) |
|---|
| 192 |
|
|---|
| 193 |
#define DarkLegal(x) (Dark(x) && (Wizard(x) || !Alive(x))) |
|---|
| 194 |
|
|---|
| 195 |
|
|---|
| 196 |
|
|---|
| 197 |
|
|---|
| 198 |
#define CanEval(x,y) (!(SAFER_UFUN) || !Hasprivs(y) || God(x) || \ |
|---|
| 199 |
((Wizard(x) || (Royalty(x) && !Wizard(y))) && !God(y))) |
|---|
| 200 |
|
|---|
| 201 |
|
|---|
| 202 |
#define CanEvalAttr(x,y,a) (CanEval(x,y) || AF_Public(a)) |
|---|
| 203 |
|
|---|
| 204 |
|
|---|
| 205 |
|
|---|
| 206 |
#define Owns(p,x) (Owner(p) == Owner(x)) |
|---|
| 207 |
|
|---|
| 208 |
|
|---|
| 209 |
|
|---|
| 210 |
#define Inheritable(x) (IsPlayer(x) || Inherit(x) || \ |
|---|
| 211 |
Inherit(Owner(x)) || Wizard(x)) |
|---|
| 212 |
|
|---|
| 213 |
#define NoWarnable(x) (NoWarn(x) || NoWarn(Owner(x))) |
|---|
| 214 |
|
|---|
| 215 |
|
|---|
| 216 |
#define Ancestor_Parent(x) (Orphan(x) ? NOTHING : \ |
|---|
| 217 |
(IsRoom(x) ? ANCESTOR_ROOM : \ |
|---|
| 218 |
(IsExit(x) ? ANCESTOR_EXIT : \ |
|---|
| 219 |
(IsPlayer(x) ? ANCESTOR_PLAYER : \ |
|---|
| 220 |
(IsThing(x) ? ANCESTOR_THING : NOTHING ))))) |
|---|
| 221 |
|
|---|
| 222 |
|
|---|
| 223 |
|
|---|
| 224 |
|
|---|
| 225 |
|
|---|
| 226 |
|
|---|
| 227 |
|
|---|
| 228 |
|
|---|
| 229 |
|
|---|
| 230 |
struct object { |
|---|
| 231 |
const char *name; |
|---|
| 232 |
|
|---|
| 233 |
|
|---|
| 234 |
|
|---|
| 235 |
|
|---|
| 236 |
|
|---|
| 237 |
dbref location; |
|---|
| 238 |
dbref contents; |
|---|
| 239 |
|
|---|
| 240 |
|
|---|
| 241 |
|
|---|
| 242 |
|
|---|
| 243 |
|
|---|
| 244 |
dbref exits; |
|---|
| 245 |
dbref next; |
|---|
| 246 |
dbref parent; |
|---|
| 247 |
struct lock_list *locks; |
|---|
| 248 |
dbref owner; |
|---|
| 249 |
dbref zone; |
|---|
| 250 |
int penn; |
|---|
| 251 |
warn_type warnings; |
|---|
| 252 |
time_t creation_time; |
|---|
| 253 |
|
|---|
| 254 |
|
|---|
| 255 |
|
|---|
| 256 |
|
|---|
| 257 |
time_t modification_time; |
|---|
| 258 |
int attrcount; |
|---|
| 259 |
int type; |
|---|
| 260 |
object_flag_type flags; |
|---|
| 261 |
object_flag_type powers; |
|---|
| 262 |
ALIST *list; |
|---|
| 263 |
}; |
|---|
| 264 |
|
|---|
| 265 |
|
|---|
| 266 |
|
|---|
| 267 |
|
|---|
| 268 |
|
|---|
| 269 |
struct db_stat_info { |
|---|
| 270 |
int total; |
|---|
| 271 |
int players; |
|---|
| 272 |
int rooms; |
|---|
| 273 |
int exits; |
|---|
| 274 |
int things; |
|---|
| 275 |
int garbage; |
|---|
| 276 |
}; |
|---|
| 277 |
|
|---|
| 278 |
extern struct object *db; |
|---|
| 279 |
extern dbref db_top; |
|---|
| 280 |
|
|---|
| 281 |
extern void *get_objdata(dbref thing, const char *keybase); |
|---|
| 282 |
extern void *set_objdata(dbref thing, const char *keybase, void *data); |
|---|
| 283 |
extern void clear_objdata(dbref thing); |
|---|
| 284 |
|
|---|
| 285 |
#define DOLIST(var, first)\ |
|---|
| 286 |
for((var) = (first); GoodObject((var)); (var) = Next(var)) |
|---|
| 287 |
|
|---|
| 288 |
#define PUSH(thing, locative) \ |
|---|
| 289 |
((Next(thing) = (locative)), (locative) = (thing)) |
|---|
| 290 |
|
|---|
| 291 |
#define DOLIST_VISIBLE(var, first, player)\ |
|---|
| 292 |
for((var) = first_visible((player), (first)); GoodObject((var)); (var) = first_visible((player), Next(var))) |
|---|
| 293 |
|
|---|
| 294 |
typedef uint32_t mail_flag; |
|---|
| 295 |
|
|---|
| 296 |
|
|---|
| 297 |
|
|---|
| 298 |
|
|---|
| 299 |
|
|---|
| 300 |
|
|---|
| 301 |
struct mail { |
|---|
| 302 |
struct mail *next; |
|---|
| 303 |
struct mail *prev; |
|---|
| 304 |
dbref to; |
|---|
| 305 |
dbref from; |
|---|
| 306 |
time_t from_ctime; |
|---|
| 307 |
chunk_reference_t msgid; |
|---|
| 308 |
time_t time; |
|---|
| 309 |
unsigned char *subject; |
|---|
| 310 |
mail_flag read; |
|---|
| 311 |
}; |
|---|
| 312 |
|
|---|
| 313 |
typedef struct mail MAIL; |
|---|
| 314 |
|
|---|
| 315 |
|
|---|
| 316 |
extern const char *EOD; |
|---|
| 317 |
|
|---|
| 318 |
#define SPOOF(player, cause, sw) \ |
|---|
| 319 |
if (SW_ISSET(sw, SWITCH_SPOOF) && (controls(player, cause) || Can_Nspemit(player))) \ |
|---|
| 320 |
player = cause; |
|---|
| 321 |
|
|---|
| 322 |
#endif |
|---|