// $Id: Filters.h,v 1.4 1999/07/07 06:05:11 greear Exp $ // $Revision: 1.4 $ $Author: greear $ $Date: 1999/07/07 06:05:11 $ // //ScryMUD Server Code //Copyright (C) 1998 Ben Greear // //This program is free software; you can redistribute it and/or //modify it under the terms of the GNU General Public License //as published by the Free Software Foundation; either version 2 //of the License, or (at your option) any later version. // //This program is distributed in the hope that it will be useful, //but WITHOUT ANY WARRANTY; without even the implied warranty of //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //GNU General Public License for more details. // //You should have received a copy of the GNU General Public License //along with this program; if not, write to the Free Software //Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // To contact the Author, Ben Greear: greear@cyberhighway.net, (preferred) // greearb@agcs.com // ///******************** Filters.h *****************************/// #ifndef __FILTERS_INCLUDE #define __FILTERS_INCLUDE #include "critter.h" // Use all variables to make the compiler warnings go away. #define USE_VARS if (!(1 || &pc || b)) return FALSE /** Matches all. */ class CritterSelector { public: virtual int matches(const critter* pc, const critter* b) { USE_VARS; return TRUE; } virtual const char* name() { return "CritterSelector"; } }; /** Matches None. */ class SelectNone : public CritterSelector { public: virtual int matches(const critter* pc, const critter* b) { USE_VARS; return FALSE; } virtual const char* name() { return "SelectNone"; } }; /** matches when pc is an NPC */ class SelectNPC : public CritterSelector { public: virtual int matches(const critter* pc, const critter* b) { USE_VARS; return pc->isNPC(); } virtual const char* name() { return "SelectNPC"; } }; /** matches when pc != b */ class SelectAreSame : public CritterSelector { public: virtual int matches(const critter* pc, const critter* actor) { return pc == actor; } virtual const char* name() { return "SelectAreSame"; } }; /** matches when pc is sleeping */ class SelectIsSleeping : public CritterSelector { public: virtual int matches(const critter* pc, const critter* b) { USE_VARS; return pc->isSleeping(); } virtual const char* name() { return "SelectIsSleeping"; } }; /** matches when pc is meditating */ class SelectIsMeditating : public CritterSelector { public: virtual int matches(const critter* pc, const critter* b) { USE_VARS; return pc->isMeditating(); } virtual const char* name() { return "SelectIsMeditating"; } }; /** matches when pc is an NPC and is possessed. */ class SelectNPC_Possessed : public CritterSelector { public: virtual int matches(const critter* pc, const critter* b) { USE_VARS; return (pc->isNPC() && pc->isPossessed()); } virtual const char* name() { return "SelectNPC_Possessed"; } }; /** matches when pc is a PC. */ class SelectPC : public CritterSelector { public: virtual int matches(const critter* pc, const critter* b) { USE_VARS; return pc->isPc(); } virtual const char* name() { return "SelectPC"; } }; /** matches mobs who MAY SEE mob entry message. */ class SelectActorEntryMsgs : public CritterSelector { public: virtual int matches(const critter* pc, const critter* actor) { return (actor->isPc() || (pc->pc && !pc->PC_FLAGS.get(28))); } virtual const char* name() { return "SelectActorEntryMsgs"; } }; /** matches b if pc can see it. */ class SelectVisibleToActor : public CritterSelector { public: virtual int matches(const critter* pc, const critter* actor) { return actor->canDetect(*pc); } virtual const char* name() { return "SelectVisibleToActor"; } }; /** matches b if pc can see it. */ class SelectCanDetectActor : public CritterSelector { public: virtual int matches(const critter* pc, const critter* actor) { return pc->canDetect(*actor); } virtual const char* name() { return "CanDetectActor"; } }; /** returns true if pc cannot detect b's sneaking. */ class SelectActorSneakWorked : public CritterSelector { public: virtual int matches(const critter* pc, const critter* actor); virtual const char* name() { return "SelectActorSneakWorked"; } }; /** returns true if pc should get extra info (imm only for now) */ class SelectGetsInfo : public CritterSelector { public: virtual int matches(const critter* pc, const critter* b) { USE_VARS; return (pc->isPc() && pc->PC_FLAGS.get(14)); } virtual const char* name() { return "SelectGetsInfo"; } }; /** returns true if pc is using the Hegemon Client */ class SelectUsingClient : public CritterSelector { public: virtual int matches(const critter* pc, const critter* b) { USE_VARS; return (pc->isUsingClient()); } virtual const char* name() { return "SelectUsingClient"; } }; /** returns true if pc is NOT using the Hegemon Client */ class SelectNotUsingClient : public CritterSelector { public: virtual int matches(const critter* pc, const critter* b) { USE_VARS; return (!pc->isUsingClient()); } virtual const char* name() { return "SelectNotUsingClient"; } }; class CSelectorColl { public: enum SelectorRule { SELECTOR_AND, SELECTOR_OR }; protected: ObjArray<CritterSelector*> selections; SelectorRule select_rule; public: CSelectorColl() : select_rule(SELECTOR_OR) { } CSelectorColl(SelectorRule rule, CritterSelector* c1 = NULL, CritterSelector* c2 = NULL, CritterSelector* c3 = NULL, CritterSelector* c4 = NULL, CritterSelector* c5 = NULL, CritterSelector* c6 = NULL) { select_rule = rule; addSelector(c1); addSelector(c2); addSelector(c3); addSelector(c4); addSelector(c5); addSelector(c6); }//constructor ~CSelectorColl() { }; void setRule(SelectorRule rule) { select_rule = rule; } int matches(critter* pc_, critter* other = NULL) const; /** Does NOT make a deep copy of incomming data. */ void addSelector(CritterSelector* selector) { if (selector) selections.addElement(selector); }//addSelector private: CSelectorColl& operator=(const CSelectorColl& src); CSelectorColl(const CSelectorColl& src); }; /** Just collects our filters for us. */ class Selectors { protected: Selectors(); public: CritterSelector selectAll; SelectNone selectNone; SelectCanDetectActor selectCanDetectActor; SelectNPC selectNPC; SelectNPC_Possessed selectNPC_Possessed; SelectActorEntryMsgs selectActorEntryMsgs; SelectAreSame selectAreSame; SelectActorSneakWorked selectActorSneakWorked; SelectIsSleeping selectIsSleeping; SelectIsMeditating selectIsMeditating; SelectGetsInfo selectGetsInfo; SelectUsingClient selectUsingClient; SelectNotUsingClient selectNotUsingClient; CSelectorColl CC_all; CSelectorColl CC_none; CSelectorColl CC_mob_entry_allow; CSelectorColl CC_mob_entry_deny; CSelectorColl CC_gets_info_allow; CSelectorColl CC_using_client; CSelectorColl CC_not_using_client; static Selectors& instance(); private: Selectors& operator=(const Selectors& src); Selectors(const Selectors& src); }; #endif