mud/lib/secure/sefun/duplicates.c
2020-09-06 05:43:07 -07:00

37 lines
1.3 KiB
C

// handling of duplicate objects in inventory.
//
// here we provide the function two objects. If they
// were cloned from the same file AND they have
// different instance numbers, we return "1", because
// they are duplicates, and not just one object. Otherwise,
// we return a "0". Note that 0 can mean the two objects
// were cloned from different files, and it can also mean
// that the objects provided are actually just one object
// in memory.
//
int query_dupes(object ob1,object ob2){
if(base_name(ob1) == base_name(ob2) && file_name(ob1) != file_name(ob2)) return 1;
else return 0;
}
// This function is supposed to return an array
// of objects in the inventory of "where" that
// are cloned from the same file as "ob"
object *get_dupes(object ob, object where){
object *allstuff,*dupes;
int i;
if(!where || !ob) {
//write("missing something");
return 0;
}
allstuff = all_inventory(where);
if(!sizeof(allstuff)) return 0;
if(member_array(ob,allstuff) == -1) return 0;
for(i=0;i<sizeof(allstuff);i++){
if( query_dupes(allstuff[i],ob) == 1 && !sizeof(dupes) ) dupes = ({allstuff[i]});
if( query_dupes(allstuff[i],ob) == 1 && sizeof(dupes) > 0 ) dupes += ({allstuff[i]});
}
if(sizeof(dupes) > 0) return dupes;
else return ({});
}