int has_power(dbref player, dbref it, char *powername) { POWERENT *fp; POWER fv; fp = find_power(it, powername); if (fp == NULL) { return 0; } if (fp->powerpower & POWER_EXT) { fv = Powers2(it); } else { fv = Powers(it); } if (fv & fp->powervalue) { if ((fp->listperm & CA_WIZARD) && !Wizard(player)) { return 0; } if ((fp->listperm & CA_GOD) && !God(player)) { return 0; } return 1; } return 0; }
int ph_any(dbref target, dbref player, POWER power, int fpowers, int reset) { if (fpowers & POWER_EXT) { if (reset) { s_Powers2(target, Powers2(target) & ~power); } else { s_Powers2(target, Powers2(target) | power); } } else { if (reset) { s_Powers(target, Powers(target) & ~power); } else { s_Powers(target, Powers(target) | power); } } return 1; }
void decompile_powers(dbref player, dbref thing, char *thingname) { POWER f1, f2; POWERENT *fp; char *buf; /* * Report generic powers */ f1 = Powers(thing); f2 = Powers2(thing); for (fp = gen_powers; fp->powername; fp++) { /* * Skip if we shouldn't decompile this power */ if (fp->listperm & CA_NO_DECOMP) { continue; } /* * Skip if this power is not set */ if (fp->powerpower & POWER_EXT) { if (!(f2 & fp->powervalue)) { continue; } } else { if (!(f1 & fp->powervalue)) { continue; } } /* * Skip if we can't see this power */ if (!check_access(player, fp->listperm)) { continue; } /* * We made it this far, report this power */ buf = strip_ansi(thingname); notify_check(player, player, MSG_PUP_ALWAYS | MSG_ME_ALL | MSG_F_DOWN, "@power %s=%s", buf, fp->powername); free_lbuf(buf); } }
char *power_description(dbref player, dbref target) { char *buff, *bp; POWERENT *fp; int otype; POWER fv; /* * Allocate the return buffer */ otype = Typeof(target); bp = buff = alloc_mbuf("power_description"); /* * Store the header strings and object type */ safe_mb_str((char *) "Powers:", buff, &bp); for (fp = gen_powers; fp->powername; fp++) { if (fp->powerpower & POWER_EXT) { fv = Powers2(target); } else { fv = Powers(target); } if (fv & fp->powervalue) { if ((fp->listperm & CA_WIZARD) && !Wizard(player)) { continue; } if ((fp->listperm & CA_GOD) && !God(player)) { continue; } safe_mb_chr(' ', buff, &bp); safe_mb_str((char *) fp->powername, buff, &bp); } } /* * Terminate the string, and return the buffer to the caller */ *bp = '\0'; return buff; }
static int db_write_object(FILE * f, dbref i, int db_format, int flags) { ATTR *a; char *got, *as; dbref aowner; int ca, aflags, save, j; BOOLEXP *tempbool; if(!(flags & V_ATRNAME)) putstring(f, Name(i)); putref(f, Location(i)); if(flags & V_ZONE) putref(f, Zone(i)); putref(f, Contents(i)); putref(f, Exits(i)); if(flags & V_LINK) putref(f, Link(i)); putref(f, Next(i)); if(!(flags & V_ATRKEY)) { got = atr_get(i, A_LOCK, &aowner, &aflags); tempbool = parse_boolexp(GOD, got, 1); free_lbuf(got); putboolexp(f, tempbool); if(tempbool) free_bool(tempbool); } putref(f, Owner(i)); if(flags & V_PARENT) putref(f, Parent(i)); if(!(flags & V_ATRMONEY)) putref(f, Pennies(i)); putref(f, Flags(i)); if(flags & V_XFLAGS) putref(f, Flags2(i)); if(flags & V_3FLAGS) putref(f, Flags3(i)); if(flags & V_POWERS) { putref(f, Powers(i)); putref(f, Powers2(i)); } /* * write the attribute list */ if((!(flags & V_GDBM)) || (mudstate.panicking == 1)) { for(ca = atr_head(i, &as); ca; ca = atr_next(&as)) { save = 0; a = atr_num(ca); if(a) j = a->number; else j = -1; if(j > 0) { switch (j) { case A_NAME: if(flags & V_ATRNAME) save = 1; break; case A_LOCK: if(flags & V_ATRKEY) save = 1; break; case A_LIST: case A_MONEY: break; default: save = 1; } } if(save) { got = atr_get_raw(i, j); fprintf(f, ">%d\n", j); putstring(f, got); } } fprintf(f, "<\n"); } return 0; }