/* Hamlet's twists on all_inventory(). DON'T DELETE. Rod needs these. */
/* These all work similarly to all_inventory(): They receive an object */
/* (usually a room), and return a list of objects within that object. */
/* living_inventory() returns everything living. */
/* liv_not_creator_inv() returns all living that isn't a creator */
/* interactive_in_room() returns all interactive()s in the room */
/* players_in_room() returns all interactive()s that aren't creators */
object *living_inventory(object what) {
object *all = all_inventory(what);
object *alive;
int i;
int maxi = sizeof(all);
int *theliving = allocate(maxi);
int j=0;
for(i=0;i<maxi;i++)
if(living(all[i])) {
theliving[j] = i;
j++;
}
if(!j) return alive;
alive = allocate(j);
for(i=0;i<j;i++)
alive[i] = all[theliving[i]];
return alive;
}
object *liv_not_creator_inv(object what) {
object *all = all_inventory(what);
object *alive;
int i;
int maxi = sizeof(all);
int *theliving = allocate(maxi);
int j=0;
for(i=0;i<maxi;i++)
if( living(all[i]) && !all[i]->query_creator() ) {
theliving[j] = i;
j++;
}
if(!j) return alive;
alive = allocate(j);
for(i=0;i<j;i++)
alive[i] = all[theliving[i]];
return alive;
}
object *interactive_in_room(object what) {
object *all = all_inventory(what);
object *inter;
int i;
int maxi = sizeof(all);
int *theinter = allocate(maxi);
int j=0;
for(i=0;i<maxi;i++)
if(interactive(all[i])) {
theinter[j] = i;
j++;
}
if(!j) return inter;
inter = allocate(j);
for(i=0;i<j;i++)
inter[i] = all[theinter[i]];
return inter;
}
object *players_in_room(object what) {
object *all = all_inventory(what);
object *players;
int i;
int maxi = sizeof(all);
int *theplayers = allocate(maxi);
int j=0;
for(i=0;i<maxi;i++)
if( interactive(all[i]) && !all[i]->query_creator() ) {
theplayers[j] = i;
j++;
}
if(!j) return players;
players = allocate(j);
for(i=0;i<j;i++)
players[i] = all[theplayers[i]];
return players;
}