/* -*- LPC -*- */ /* * $Locker: $ * $Id: find_match.c,v 1.24 2001/02/28 01:29:05 presto Exp $ * $Log: find_match.c,v $ * Revision 1.24 2001/02/28 01:29:05 presto * Put in different version of is_in_me_or_environment() * * Revision 1.23 2000/09/07 21:13:24 pinkfish * Fix the docs. * * Revision 1.22 2000/09/07 21:11:30 pinkfish * Update the documentation. * * Revision 1.21 2000/06/28 03:49:11 pinkfish * Stop it runtiming. * * Revision 1.20 2000/06/26 19:55:02 pinkfish * Turn on the new parser for everyone. * * Revision 1.19 2000/06/24 03:48:44 presto * Line 163, was using ob[i] when ob was not an array. * * Revision 1.18 2000/06/23 03:40:56 pinkfish * Fix up the references to find_match. * * Revision 1.17 2000/06/10 08:20:34 pinkfish * Make pts able to use the system as well. * * Revision 1.16 2000/06/07 23:30:02 pinkfish * Fix up the return codes of the parser. * * Revision 1.15 2000/05/31 21:40:26 pinkfish * Some changes to make it work more correctly. * * Revision 1.14 2000/05/31 00:16:10 pinkfish * Add in some stuff to do matching of ambiguous things too. * * Revision 1.13 2000/05/26 18:48:37 pinkfish * Add in hooks to the new parser. * * Revision 1.12 2000/04/28 01:19:03 pinkfish * Stop people using "all" in dark/bright rooms. * * Revision 1.11 2000/04/28 01:13:14 pinkfish * Fix up some things to do with <cc> in <xx> * * Revision 1.10 1999/12/07 23:10:22 pinkfish * Fix up an error that was causing 0's to get stuck in the return array. * * Revision 1.9 1999/12/07 23:02:05 pinkfish * Fixes and changes. * * Revision 1.8 1998/09/30 14:38:39 wodan * added prototype for add_action free drivers. * * Revision 1.7 1998/09/01 21:19:46 pinkfish * Speed up the find_match code by using a function pointer for the * map methods. * * Revision 1.6 1998/09/01 21:04:28 pinkfish * Clean up the code slightly, plus make the syntaxes: * 'my book' and 'book here' work. * * Revision 1.5 1998/07/28 01:36:15 pinkfish * Stop '0' evaluating to everything. * * Revision 1.4 1998/03/24 07:28:59 pinkfish * Add some docs to make the simulefuns more usefully lookupable. * * Revision 1.3 1998/03/07 13:49:40 pinkfish * Fixes because of the new inherit structor of the simul_efun object. * * Revision 1.2 1998/03/06 05:31:47 pinkfish * Handle expanded inventory stuff... * * Revision 1.1 1998/01/06 05:13:15 ceres * Initial revision * */ #define OBJ_PARSER_NO_CLASSES #include <obj_parser.h> inherit "/secure/simul_efun/obj_parser"; #include <playtesters.h> private nosave mixed *rest; mixed *query_strange_inventory(mixed *arr); private object query_simul_efun_id(object ob, mixed *arr); private object query_frac_simul_efun_id(object ob, mixed *arr); #if !efun_defined(living) int living(object); #endif /* If anyone can tell me what this does... * I would be most apprecative, Pinkfish... Yes yes ok i did write it. */ /** * The find_match simul_efun. * @author Pinkfish */ /** * This method checks to see if the specified object is in the player * or the environment. If it has no environment it is considered to * be here. * @param ob the object to test * @param player the player to check against * @return 1 if it is, 0 if not */ int is_in_me_or_environment(object thing, object person) { object env; if ((env = environment(thing)) == environment(person)) return 1; // This is a special case if 'thing' is a room. // Needed for the 'get' command, and others (I assume) if (!env) return 1; while (env && !living(env)) env = environment(env); if (env == person) return 1; return 0; } /** * This method returns the array of objects that are only inside the * player in question, or in their environment. It excludes any items * in other peoples inventorys. * @param obs the objects to filer * @param player the player to check * @return the filtered objects */ object* filter_in_me_or_environment(object* obs, object player) { return filter(obs, (: is_in_me_or_environment($1, $2) :), player); } /* filter_in_me_or_environment() */