#include "copyright.h" #include <stdio.h> #include "db.h" #include "config.h" void check_exits(dbref i) { dbref exit; int count; count = 10000; for(exit = db[i].exits; exit != NOTHING; exit = db[exit].next) { if(exit < 0 || exit >= db_top || Typeof(exit) != TYPE_EXIT) { printf("%d has bad exit %d\n", i, exit); break; } /* set type of exit to be really strange */ db[exit].flags = 4; /* nonexistent type */ if(count-- < 0) { printf("%d has looping exits\n"); break; } } } void check_contents(dbref i) { dbref thing; dbref loc; int count; count = 10000; for(thing = db[i].contents; thing != NOTHING; thing = db[thing].next) { if(thing < 0 || thing >= db_top || Typeof(thing) == TYPE_ROOM) { printf("%d contains bad object %d\n", i, thing); break; } else if((loc = db[thing].location) != i) { printf("%d in %d but location is %d\n", thing, i, loc); } else if(Typeof(thing) == TYPE_EXIT) { db[thing].flags = 4; /* nonexistent type */ } if(count-- < 0) { printf("%d has looping contents\n"); break; } } } void check_location(dbref i) { dbref loc; loc = db[i].location; if(loc < 0 || loc >= db_top) { printf("%d has bad loc %d\n", i, loc); } else if(!member(i, db[loc].contents)) { printf("%d not in loc %d\n", i, loc); } } void check_pennies(dbref i) { dbref pennies; pennies = db[i].pennies; switch(Typeof(i)) { case TYPE_ROOM: case TYPE_EXIT: break; case TYPE_PLAYER: if(pennies < 0 || pennies > MAX_PENNIES+100) { printf("Player %s(%d) has %d pennies\n", db[i].name, i, pennies); } break; case TYPE_THING: if(pennies < 0 || pennies > MAX_OBJECT_ENDOWMENT) { printf("Object %s(%d) endowed with %d pennies\n", db[i].name, i, pennies); } break; } } void main(int argc, char **argv) { dbref i; if(db_read(stdin) < 0) { puts("Database load failed!"); exit(1); } puts("Done loading database"); for(i = 0; i < db_top; i++) { check_pennies(i); switch(Typeof(i)) { case TYPE_PLAYER: check_contents(i); check_location(i); if(Wizard(i)) printf("Wizard: %s(%d)\n", db[i].name, i); break; case TYPE_THING: check_location(i); break; case TYPE_ROOM: check_contents(i); check_exits(i); break; } } /* scan for unattached exits */ for(i = 0; i < db_top; i++) { if(Typeof(i) == TYPE_EXIT) { printf("Unattached exit %d\n", i); } } exit(0); }