37 lines
1.3 KiB
C
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 ({});
|
|
}
|