static mixed *rest;
/* If anyone can tell me what this does...
* I would be most apprecative, Pinkfish... Yes yes ok i did write it.
*/
mixed old_find_match(string find,mixed in);
mixed find_match(string find,mixed in)
{
mixed *olist;
int i,j;
olist = old_find_match(find,in);
for(i = 0; i < sizeof(olist); i++)
{
for(j = sizeof(olist)-1; j > i; j--)
{
if(olist[j] == olist[i]) olist = delete(olist,j,1);
}
}
return olist;
}
mixed old_find_match(string str, mixed ob) {
mixed *array, test, *ret;
int i, num, top, bot, bing, j;
string nick, type, *bits;
if (!ob || intp(ob))
return ({ });
if (str == "" || !str)
return ({ });
if (stringp(ob)) {
ob -> dummy();
ob = find_object(ob);
}
if (!pointerp(ob)) {
ob = (mixed)ob->find_inv_match(str);
if (!ob)
return ({ });
} else {
array = ({ });
for (i=0;i<sizeof(ob);i++)
if ((test = (object *)ob[i]->find_inv_match(str)))
array += test;
ob = array;
}
bits = explode(implode(explode(str, " and "), ","), ",");
ret = ({ });
for (j=0;j<sizeof(bits);j++) {
str = bits[j];
nick = (string)this_object()->expand_nickname(str);
if (!nick && this_player())
nick = (string)this_player()->expand_nickname(str);
if (nick && nick!="")
str = nick;
if (str == "it" || str == "them" || str == "him" || str == "her") {
rest = all_inventory(this_player()) +
all_inventory(environment(this_player()));
array = (object *)this_player()->query_it_them();
while (i<sizeof(array))
if (member_array(array[i], rest) == -1)
array = delete(array, i, 1);
else
i++;
if (!sizeof(array))
continue;
if (str == "it") {
ret += array[0..0];
continue;
}
if (str == "her")
if (living(array[0]) && (int)array[0]->query_gender() == 2) {
ret += array[0..0];
continue;
} else
continue;
if (str == "him")
if (living(array[0]) && (int)array[0]->query_gender() == 1) {
ret += array[0..0];
continue;
} else
continue;
ret += array;
continue;
}
test = explode(str, " ");
sscanf(test[sizeof(test)-1], "%d", bing);
test = ({ });
rest = ({ });
if (sscanf(str, "%d/%d of %s", top, bot, str) != 3)
top = bot = 1;
if (top <= 0)
top = 1;
if (bot < top)
bot = top;
parse_command(str,ob,"%i",test);
if (!test || !sizeof(test))
continue;
if (bot != top) {
num = test[0];
array = query_strange_inventory(test[1..sizeof(test)]);
test = ({ });
for (i=0;i<sizeof(array);i+=2)
test += map_array(array[i+1], "query_frac_simul_efun_id",
this_object(), ({ num, str, 0, sizeof(array[i+1]),
top, bot }) );
array = test + rest;
ret += array;
continue;
}
if (test[0] == 1 && bing)
test[0] = -bing;
array = map_array(test[1..sizeof(test)], "query_simul_efun_id",
this_object(), ({ test[0], str }));
array += rest;
ret += array;
}
if (this_player() && sizeof(ret))
return this_player()->set_it_them( ret - ({ 0 }) );
return ret - ({ 0 });
} /* find_match() */
object query_simul_efun_id(object ob, mixed *arr) {
mixed ret;
ret = (mixed)ob->query_parse_id(arr);
if (!pointerp(ret))
return ret;
rest += ret[1..sizeof(ret)];
return ret[0];
} /* query_simul_efun_id() */
object query_frac_simul_efun_id(object ob, mixed *arr) {
mixed ret;
ret = (mixed)ob->query_frac_parse_id(arr);
if (!pointerp(ret))
return ret;
rest += ret[1..sizeof(ret)];
return ret[0];
} /* query_frac_efun_id() */
int fixup_parse_command(mixed ob) {
return objectp(ob);
} /* fixup_parse_command() */